<?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>63858</bug_id>
          
          <creation_ts>2011-07-01 23:25:38 -0700</creation_ts>
          <short_desc>DFG JIT does not implement op_call</short_desc>
          <delta_ts>2011-07-06 00:32:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>63980</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>431588</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-01 23:25:38 -0700</bug_when>
    <thetext>The op_call opcode is used for function calls in JavaScript.  The DFG JIT does not implement this opcode, and hence cannot compile any functions that are not leaf functions.  The DFG JIT should implement this opcode, so that it can support a larger subset of JavaScript functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431589</commentid>
    <comment_count>1</comment_count>
      <attachid>99546</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-01 23:34:19 -0700</bug_when>
    <thetext>Created attachment 99546
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431593</commentid>
    <comment_count>2</comment_count>
      <attachid>99547</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-01 23:52:34 -0700</bug_when>
    <thetext>Created attachment 99547
the patch (fix conflict)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431594</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-01 23:54:24 -0700</bug_when>
    <thetext>Attachment 99547 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...&quot; exit_code: 1

Source/JavaScriptCore/assembler/CodeLocation.h:124:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/assembler/CodeLocation.h:126:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/assembler/CodeLocation.h:128:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/bytecode/CodeBlock.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/bytecode/CodeBlock.h:383:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp:436:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:400:  The parameter name &quot;&quot;&quot;&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGRepatch.cpp:380:  Declaration has space between type name and * in CodeBlock *callerCodeBlock  [whitespace/declaration] [3]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:393:  Missing spaces around =  [whitespace/operators] [4]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:476:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:995:  Declaration has space between type name and * in Instruction *putInstruction  [whitespace/declaration] [3]
Total errors found: 11 in 25 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>431595</commentid>
    <comment_count>4</comment_count>
      <attachid>99547</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-07-02 00:04:31 -0700</bug_when>
    <thetext>Comment on attachment 99547
the patch (fix conflict)

Attachment 99547 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8980113</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431596</commentid>
    <comment_count>5</comment_count>
      <attachid>99547</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-07-02 00:11:00 -0700</bug_when>
    <thetext>Comment on attachment 99547
the patch (fix conflict)

Attachment 99547 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/8980114</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431597</commentid>
    <comment_count>6</comment_count>
      <attachid>99548</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-02 00:36:46 -0700</bug_when>
    <thetext>Created attachment 99548
the patch (fix)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431598</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-02 00:39:51 -0700</bug_when>
    <thetext>Attachment 99548 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...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGOperations.cpp:394:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/dfg/DFGOperations.cpp:400:  The parameter name &quot;&quot;&quot;&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 25 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>431599</commentid>
    <comment_count>8</comment_count>
      <attachid>99549</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-02 01:17:19 -0700</bug_when>
    <thetext>Created attachment 99549
the patch (more fixes)

Accidentally left debug artifacts in the last patch.  Also, one file got accidentally omitted from the previous patch because of an unresolved svn conflict.  Both issues fixed in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431600</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-02 01:19:20 -0700</bug_when>
    <thetext>Attachment 99549 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...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGOperations.cpp:394:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/dfg/DFGOperations.cpp:400:  The parameter name &quot;&quot;&quot;&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 26 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>431601</commentid>
    <comment_count>10</comment_count>
      <attachid>99550</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-02 01:37:45 -0700</bug_when>
    <thetext>Created attachment 99550
the patch (fix debug artifacts)

Removed two lingering debug printf&apos;s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431602</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-02 01:40:25 -0700</bug_when>
    <thetext>Attachment 99550 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...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGOperations.cpp:394:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/dfg/DFGOperations.cpp:400:  The parameter name &quot;&quot;&quot;&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 26 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>431637</commentid>
    <comment_count>12</comment_count>
      <attachid>99550</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-07-02 14:14:16 -0700</bug_when>
    <thetext>Comment on attachment 99550
the patch (fix debug artifacts)

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:36
&gt; +#if ENABLE(DFG_JIT)
&gt; +#include &quot;DFGOperations.h&quot;
&gt; +#endif

The block of #include’s should be kept sorted, with any #if’s in separate paragraphs after the main unconditional block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431641</commentid>
    <comment_count>13</comment_count>
      <attachid>99561</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-02 14:51:23 -0700</bug_when>
    <thetext>Created attachment 99561
the path (address Mark&apos;s comment)

Thanks Mark!  This patch places the conditional include in a separate paragraph.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431642</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-02 14:53:41 -0700</bug_when>
    <thetext>Attachment 99561 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...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGOperations.cpp:394:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/dfg/DFGOperations.cpp:400:  The parameter name &quot;&quot;&quot;&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 26 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>431768</commentid>
    <comment_count>15</comment_count>
      <attachid>99561</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-03 18:36:59 -0700</bug_when>
    <thetext>Comment on attachment 99561
the path (address Mark&apos;s comment)

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

r- for a couple of minor nits, but on the whole looking really great.

&gt; Source/JavaScriptCore/assembler/CodeLocation.h:122
&gt; +class CodeLocationPossiblyNearCall : public CodeLocationCommon {

I&apos;m not sure this extra type really adds any value.  If you want to change the type of the location held in the CodeBlock, you could just make it a CodeLocationLabel (after all, this is just a pointer into the instruction stream).  It seems highly unlikely this class will provide much value going forwards, since (1) we&apos;re likely to deprecate the old JIT, and (2) the new JIT is likely want to make near calls for JIT-&gt;JIT calls.  Still, I don&apos;t feel strongly about this - if it becomes redundant, it can be removed then.  So I&apos;d recommend removing, but feel free to leave as is if you prefer.

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:391
&gt; +EncodedJSValue returnValueHack();

We don&apos;t like names like like with &apos;hack&apos; in them - it doesn&apos;t convey any helpful information.  I&apos;d suggest &apos;getHostCallReturnValue&apos; would be a more descriptive function name here.

&gt; Source/JavaScriptCore/interpreter/CallFrame.h:41
&gt; +        JSValue calleeAsValue() const { return this[RegisterFile::Callee].jsValue(); }

I don&apos;t think this method should be needed; you should just be able to call &apos;callee()&apos;, and assign the result to a JSValue.  Furthermore, this may be incorrect - I&apos;m not sure that we write the tag value for the callee on JVALUE32_64, we may just write the JSCell*, so reading the full 64-bit entry may result in an incorrect tag being read.  Did using &apos;callee()&apos; cause any problems?

&gt; Source/JavaScriptCore/runtime/JSFunction.h:40
&gt; +    }

I don&apos;t think we normally doubly indent nested namespace declarations, this should probably all lose an indent level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431820</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-03 23:30:21 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/assembler/CodeLocation.h:122
&gt; &gt; +class CodeLocationPossiblyNearCall : public CodeLocationCommon {
&gt; 
&gt; I&apos;m not sure this extra type really adds any value.  If you want to change the type of the location held in the CodeBlock, you could just make it a CodeLocationLabel (after all, this is just a pointer into the instruction stream).  It seems highly unlikely this class will provide much value going forwards, since (1) we&apos;re likely to deprecate the old JIT, and (2) the new JIT is likely want to make near calls for JIT-&gt;JIT calls.  Still, I don&apos;t feel strongly about this - if it becomes redundant, it can be removed then.  So I&apos;d recommend removing, but feel free to leave as is if you prefer.

Agree.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:391
&gt; &gt; +EncodedJSValue returnValueHack();
&gt; 
&gt; We don&apos;t like names like like with &apos;hack&apos; in them - it doesn&apos;t convey any helpful information.  I&apos;d suggest &apos;getHostCallReturnValue&apos; would be a more descriptive function name here.

Agree.

&gt; 
&gt; &gt; Source/JavaScriptCore/interpreter/CallFrame.h:41
&gt; &gt; +        JSValue calleeAsValue() const { return this[RegisterFile::Callee].jsValue(); }
&gt; 
&gt; I don&apos;t think this method should be needed; you should just be able to call &apos;callee()&apos;, and assign the result to a JSValue.  Furthermore, this may be incorrect - I&apos;m not sure that we write the tag value for the callee on JVALUE32_64, we may just write the JSCell*, so reading the full 64-bit entry may result in an incorrect tag being read.  Did using &apos;callee()&apos; cause any problems?

I hadn&apos;t tried using callee().  The reason why I added this method is because the emitCall() path in DFGJITCodeGenerator.cpp never tests whether the target is a JSCell, and even the Speculative JIT does not speculate that it is a cell.  So at the point where we end up in DFGOperations, we could be dealing with an integer for all we know.

emitCall() currently always writes the JSValue - not the cell pointer - into the call frame.  Hence, logically, I wanted a method that returns the JSValue.  And on JSVALUE32_64, I imagine that we&apos;d want to emit code like:

if tag != cell goto slow // unpatched compare/branch
if value != expected goto slow // patched compare, unpatched branch
perform fast call
goto done
slow:
write tag and value to call frame
call DFGOperations slow path
call *returnValueGPR
done:

The nice thing about this is that we have a common slow path for both the not-cell case and the not-expected-function case.

So, point is, my plan was that for both 32-bit and 64-bit platforms, I wanted the DFGOperations slow path to see both tag and payload.  Hence the calleeAsValue() method.  I certainly agree that this method makes no sense for the old JIT.  But in the DFG, the way I&apos;ve currently implemented calls in this patch, it makes logical sense, to me at least.

Now, there&apos;s a separate question of whether this is optimal.  And whether or not it matters at all, since we&apos;re only targeting 64-bit.  For polymorphic calls where inline caching buys nothing, one could imagine that having a separate slow path for not-cell is better.

To make a long story short, I&apos;m happy to make this change that you&apos;re recommending, though it would be a bit awkward given that callee() would be returning a JSCell even though we haven&apos;t validated that it&apos;s a JSCell.  I&apos;m sure we could make that work on 64-bit.  Or I could change emitCall to have a separate slow path for not-cell.

So let me know if you buy the intuition for calleeAsValue(), or if you still recommend removing it.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSFunction.h:40
&gt; &gt; +    }
&gt; 
&gt; I don&apos;t think we normally doubly indent nested namespace declarations, this should probably all lose an indent level.

Got it.  Will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432079</commentid>
    <comment_count>17</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-04 18:45:45 -0700</bug_when>
    <thetext>My bad, my concern re callee() was misplaced.  I thought that the &apos;function()&apos; method called in the existing callee() was only reading 32-bits on JSVALUE32_64 - in which case it would be bad if we were relying on the aliasing within the Register struct - but this has changed, it also is performing the full 64-bit access internally.  I&apos;m happy with your change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432389</commentid>
    <comment_count>18</comment_count>
      <attachid>99739</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-05 13:51:14 -0700</bug_when>
    <thetext>Created attachment 99739
the patch (fix review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432416</commentid>
    <comment_count>19</comment_count>
      <attachid>99748</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-05 14:48:33 -0700</bug_when>
    <thetext>Created attachment 99748
the patch (fix merge conflicts)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432417</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-05 14:50:31 -0700</bug_when>
    <thetext>Attachment 99748 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...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGOperations.cpp:404:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/dfg/DFGOperations.cpp:410:  The parameter name &quot;&quot;&quot;&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 25 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>432458</commentid>
    <comment_count>21</comment_count>
      <attachid>99748</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-05 16:10:53 -0700</bug_when>
    <thetext>Comment on attachment 99748
the patch (fix merge conflicts)

Rejecting attachment 99748 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-02&apos;, &apos;--port...&quot; exit_code: 1

Last 500 characters of output:
030e685994e7463aaab925c058def0f05c4737ab
r90412 = afaca2bd5d09b84d41d2590bbdc855d9cbfd7aaf
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.
Updating chromium port dependencies using gclient...

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/8987481</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432482</commentid>
    <comment_count>22</comment_count>
      <attachid>99764</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-05 17:04:53 -0700</bug_when>
    <thetext>Created attachment 99764
the patch (fix more merge conflicts)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432484</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-05 17:08:04 -0700</bug_when>
    <thetext>Attachment 99764 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...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGOperations.cpp:404:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/dfg/DFGOperations.cpp:410:  The parameter name &quot;&quot;&quot;&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 25 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>432504</commentid>
    <comment_count>24</comment_count>
      <attachid>99764</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-05 17:57:03 -0700</bug_when>
    <thetext>Comment on attachment 99764
the patch (fix more merge conflicts)

Clearing flags on attachment: 99764

Committed r90423: &lt;http://trac.webkit.org/changeset/90423&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432505</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-05 17:57:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99546</attachid>
            <date>2011-07-01 23:34:19 -0700</date>
            <delta_ts>2011-07-01 23:52:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>call_patch_1.diff</filename>
            <type>text/plain</type>
            <size>94106</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAK
KzIwMTEtMDctMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IGlt
cGxlbWVudCBvcF9jYWxsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM4NTgKKworICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbDo6Q29kZUxvY2F0aW9uUG9z
c2libHlOZWFyQ2FsbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0TnVtYmVyT2ZDYWxsTGlua0lu
Zm9zKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0FsaWFz
VHJhY2tlci5oOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6bG9va3VwR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6ZXF1YWxJZ25vcmluZ0xhdGVy
TnVtZXJpY0NvbnZlcnNpb24pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRk
VmFyQXJnQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcmVkaWN0
SW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJz
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6cmVmQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6YWRkcmVzc09mQ2Fs
bERhdGEpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlY29yZDo6Q2FsbFJlY29yZCk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEpTQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OlByb3BlcnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vz
c1JlY29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpTQ2FsbFJlY29yZDo6
SlNDYWxsUmVjb3JkKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
aGlsZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmZpcnN0Q2hpbGQpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Om51bUNoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpiYXNp
Y0FyaXRoT3ApOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25z
Lmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRm
Z0xpbmtDYWxsKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmRldGVjdFBlZXBIb2xlQnJhbmNo
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhl
Y1N0YXRlOjpjYWxsZWVBc1ZhbHVlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtDb25zdHJ1Y3QpOgorICAgICAgICAqIGppdC9K
SVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAg
KiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAg
ICAgKEpTQzo6SklUQ29kZTo6aml0VHlwZSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RG
dW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuaDoKKwogMjAxMS0wNy0wMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIElFIFdlYiBXb3JrZXJzIGRlbW8gY3Jhc2hlcyBpbiBKU0M6
OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaAkocmV2aXNpb24gOTAxOTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTksNiArMTE5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21t
b24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KIH07CiAKK2NsYXNzIENvZGVM
b2NhdGlvblBvc3NpYmx5TmVhckNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsKK3B1
YmxpYzoKKyAgICBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKCkge30KKyAgICBleHBsaWNp
dCBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2Nh
dGlvbikKKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pIHt9CisgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbCh2b2lkKiBsb2NhdGlvbikKKyAgICAg
ICAgOiBDb2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkg
e30KK307CisKIGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVibGljIENvZGVMb2Nh
dGlvbkNvbW1vbiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIoKSB7fQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDkwMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkJ5dGVj
b2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJERkdPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKICNp
bmNsdWRlICJKU0FjdGl2YXRpb24uaCIKQEAgLTE2ODcsNyArMTY4OCwxMCBAQCB2b2lkIENvZGVC
bG9jazo6dW5saW5rQ2FsbHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsTGlu
a0luZm9zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmICghbV9jYWxsTGlua0luZm9zW2ldLmlz
TGlua2VkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsobV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9jYWxsTGlua0lu
Zm9zW2ldLmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGlu
aygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7
CisgICAgICAgIGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkK
KyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwobV9jYWxs
TGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiksIERGRzo6b3BlcmF0aW9uTGlua0NhbGwp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9j
YXRpb25OZWFyQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9j
YWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1
YWxDYWxsTGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVj
dExpbmsoKSk7CiAgICAgICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKICAgICB9CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiA5MDE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsUmV0
dXJuTG9jYXRpb247CisgICAgICAgIENvZGVMb2NhdGlvblBvc3NpYmx5TmVhckNhbGwgY2FsbFJl
dHVybkxvY2F0aW9uOyAvLyBpdCdzIGEgbmVhciBjYWxsIGluIHRoZSBvbGQgSklULCBvciBhIG5v
cm1hbCBjYWxsIGluIERGRwogICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgaG90UGF0
aEJlZ2luOwogICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXI7CiAgICAg
ICAgIEpJVFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBjYWxsZWU7CkBAIC0zNzgsOCArMzc4LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEdsb2JhbFJlc29sdmVJbmZvJiBnbG9iYWxSZXNv
bHZlSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZ2xvYmFsUmVzb2x2ZUluZm9zW2luZGV4XTsg
fQogICAgICAgICBib29sIGhhc0dsb2JhbFJlc29sdmVJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCk7CiAKKyAgICAgICAgdm9pZCBzZXROdW1iZXJPZkNhbGxMaW5r
SW5mb3Moc2l6ZV90IHNpemUpIHsgbV9jYWxsTGlua0luZm9zLmdyb3coc2l6ZSk7IH0KICAgICAg
ICAgc2l6ZV90IG51bWJlck9mQ2FsbExpbmtJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbExp
bmtJbmZvcy5zaXplKCk7IH0KLSAgICAgICAgdm9pZCBhZGRDYWxsTGlua0luZm8oKSB7IG1fY2Fs
bExpbmtJbmZvcy5hcHBlbmQoQ2FsbExpbmtJbmZvKCkpOyB9CisgICAgICAgIC8vdm9pZCBhZGRD
YWxsTGlua0luZm8oKSB7IG1fY2FsbExpbmtJbmZvcy5hcHBlbmQoQ2FsbExpbmtJbmZvKCkpOyB9
CiAgICAgICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKGludCBpbmRleCkgeyByZXR1cm4g
bV9jYWxsTGlua0luZm9zW2luZGV4XTsgfQogCiAgICAgICAgIHZvaWQgYWRkTWV0aG9kQ2FsbExp
bmtJbmZvcyh1bnNpZ25lZCBuKSB7IG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5ncm93KG4pOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTAxOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY4NCwxMCArMTY4NCw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Q2FsbCgKIAogICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0lu
Zm8oKTsKLSNlbmRpZgotCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIGVtaXRPcGNvZGUob3Bjb2Rl
SUQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYwpA
QCAtMTgwMSwxMCArMTc5Nyw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Q29uc3QKIAogICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0lu
Zm8oKTsKLSNlbmRpZgotCiAgICAgZW1pdE9wY29kZShvcF9jb25zdHJ1Y3QpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChjYWxsQXJndW1lbnRzLmNvdW50KCkpOyAvLyBhcmdDb3VudApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCShyZXZpc2lvbiA5MDE5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gVGhpcyBj
aGVjayBlbnN1cmVzIHRoZSBhY2Nlc3NlcyBhbGlhcywgcHJvdmlkZWQgdGhhdCB0aGUgc3Vic2Ny
aXB0IGlzIGFuCiAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4ICh0aGlzIGlzIGdvb2QgZW5v
dWdoOyB0aGUgc3BlY3VsYXRpdmUgcGF0aCB3aWxsIG9ubHkgZ2VuZXJhdGUKICAgICAgICAgICAg
IC8vIG9wdGltaXplZCBhY2Nlc3NlcyB0byBoYW5kbGUgaW50ZWdlciBzdWJzY3JpcHRzKS4KLSAg
ICAgICAgICAgIGlmIChwb3NzaWJsZUFsaWFzLmNoaWxkMSA9PSBiYXNlICYmIGVxdWFsSWdub3Jp
bmdMYXRlck51bWVyaWNDb252ZXJzaW9uKHBvc3NpYmxlQWxpYXMuY2hpbGQyLCBwcm9wZXJ0eSkp
CisgICAgICAgICAgICBpZiAocG9zc2libGVBbGlhcy5jaGlsZDEoKSA9PSBiYXNlICYmIGVxdWFs
SWdub3JpbmdMYXRlck51bWVyaWNDb252ZXJzaW9uKHBvc3NpYmxlQWxpYXMuY2hpbGQyKCksIHBy
b3BlcnR5KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFs
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb05vZGU7CkBAIC0xMDYsNyArMTA2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgTm9kZSYgbm9kZTIgPSBtX2dyYXBoW29wMl07Ci0gICAgICAgIHJldHVybiAo
bm9kZTIub3AgPT0gVmFsdWVUb051bWJlciB8fCBub2RlMi5vcCA9PSBWYWx1ZVRvSW50MzIpICYm
IG9wMSA9PSBub2RlMi5jaGlsZDE7CisgICAgICAgIHJldHVybiAobm9kZTIub3AgPT0gVmFsdWVU
b051bWJlciB8fCBub2RlMi5vcCA9PSBWYWx1ZVRvSW50MzIpICYmIG9wMSA9PSBub2RlMi5jaGls
ZDEoKTsKICAgICB9CiAKICAgICAvLyBUaGUgZ3JhcGgsIHRvIGxvb2sgdXAgcG90ZW50aWFsbHkg
YWxpYXNpbmcgbm9kZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTAxOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiAr
NjIsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMoY29kZUJsb2NrLT5tX251
bVBhcmFtZXRlcnMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMoY29kZUJsb2NrLT5tX251bUNhbGxl
ZVJlZ2lzdGVycykKICAgICAgICAgLCBtX3ByZXNlcnZlZFZhcnMoY29kZUJsb2NrLT5tX251bVZh
cnMpCisgICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygwKQorICAgICAgICAsIG1fbnVtUGFzc2Vk
VmFyQXJncygwKQogICAgIHsKICAgICB9CiAKQEAgLTEyNCw3ICsxMjYsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsK
LSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMTsKKyAgICAgICAgICAgIHJldHVybiBub2Rl
LmNoaWxkMSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRl
bXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLApAQCAtMTU1LDcgKzE1Nyw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gU2V0TG9jYWwp
OwotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxOworICAgICAgICAgICAgcmV0dXJuIG5v
ZGUuY2hpbGQxKCk7CiAgICAgICAgIH0KIAogICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9H
cmFwaChQaGkpOwpAQCAtMTkxLDcgKzE5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CiAKICAgICAgICAgaWYgKG5vZGUub3AgPT0gVUludDMyVG9OdW1iZXIpCi0gICAg
ICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDE7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGls
ZDEoKTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgbnVtZXJpYyBjb25zdGFudHMgYm94ZWQgYXMg
SlNWYWx1ZXMuCiAgICAgICAgIGlmIChub2RlLm9wID09IEpTQ29uc3RhbnQpIHsKQEAgLTM4Miw2
ICszODQsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdEluZGV4OwogICAgIH0KKyAgICAKKyAgICBOb2RlSW5k
ZXggYWRkVG9HcmFwaChOb2RlOjpWYXJBcmdUYWcsIE5vZGVUeXBlIG9wKQorICAgIHsKKyAgICAg
ICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKKyAg
ICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRl
eCwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywg
bV9udW1QYXNzZWRWYXJBcmdzKSk7CisgICAgICAgIAorICAgICAgICBtX251bVBhc3NlZFZhckFy
Z3M9MDsKKyAgICAgICAgCisgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCisgICAg
ICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHRJ
bmRleDsKKyAgICB9CisgICAgdm9pZCBhZGRWYXJBcmdDaGlsZChOb2RlSW5kZXggY2hpbGQpCisg
ICAgeworICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAg
ICAgICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CisgICAgfQogCiAgICAgdm9pZCBwcmVkaWN0QXJy
YXkoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBAIC0zOTYsMTAgKzQxNSwxMCBAQCBwcml2
YXRlOgogICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKIAogICAg
ICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVmFsdWVUb051bWJlcikKLSAgICAgICAgICAgIG5vZGVQ
dHIgPSAmbV9ncmFwaFtub2RlUHRyLT5jaGlsZDFdOworICAgICAgICAgICAgbm9kZVB0ciA9ICZt
X2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKIAogICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0g
VmFsdWVUb0ludDMyKQotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVQdHItPmNo
aWxkMV07CisgICAgICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCld
OwogCiAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgIG1f
Z3JhcGgucHJlZGljdChub2RlUHRyLT5sb2NhbCgpLCBQcmVkaWN0SW50MzIpOwpAQCAtNDUzLDYg
KzQ3MiwxMyBAQCBwcml2YXRlOgogICAgIC8vIHR5cGljYWxseSBlcXVhbCB0byB0aGUgbnVtYmVy
IHZhcnMsIGJ1dCB3ZSBleHBhbmQgdGhpcyB0byBjb3ZlciBhbGwKICAgICAvLyB0ZW1wb3Jhcmll
cyB0aGF0IHBlcnNpc3QgYWNyb3NzIGJsb2NrcyAoZHVlcyB0byA/OiwgJiYsIHx8LCBldGMpLgog
ICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFyczsKKyAgICAvLyBUaGUgbnVtYmVyIG9mIHNsb3Rz
IChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8KKyAgICAvLyBw
cmVhbGxvY2F0ZSBmb3IgY2FsbHMgZW1hbmF0aW5nIGZyb20gdGhpcyBmcmFtZS4gIFRoaXMgaW5j
bHVkZXMgdGhlCisgICAgLy8gc2l6ZSBvZiB0aGUgQ2FsbEZyYW1lLCBvbmx5IGlmIHRoaXMgaXMg
bm90IGEgbGVhZiBmdW5jdGlvbi4gIChJLmUuCisgICAgLy8gdGhpcyBpcyAwIGlmIGFuZCBvbmx5
IGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBsZWFmLikKKyAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNs
b3RzOworICAgIC8vIFRoZSBudW1iZXIgb2YgdmFyIGFyZ3MgcGFzc2VkIHRvIHRoZSBuZXh0IHZh
ciBhcmcgbm9kZS4KKyAgICB1bnNpZ25lZCBtX251bVBhc3NlZFZhckFyZ3M7CiAKICAgICBzdHJ1
Y3QgUGhpU3RhY2tFbnRyeSB7CiAgICAgICAgIFBoaVN0YWNrRW50cnkoQmFzaWNCbG9jayogYmxv
Y2ssIE5vZGVJbmRleCBwaGksIHVuc2lnbmVkIHZhck5vKQpAQCAtOTU3LDYgKzk4MywzMCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRU
b0dyYXBoKFJldHVybiwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAg
ICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBpbnQgYXJnQ291
bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBmaXJzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0IC0gYXJnQ291bnQgLSBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICBmb3IgKGludCBhcmdJZHggPSBm
aXJzdEFyZzsgYXJnSWR4IDwgZmlyc3RBcmcgKyBhcmdDb3VudDsgYXJnSWR4KyspCisgICAgICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ0lkeCkpOworICAgICAgICAgICAgTm9kZUlu
ZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgQ2FsbCk7CisgICAgICAgICAgICBJ
bnN0cnVjdGlvbiAqcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVf
TEVOR1RIKG9wX2NhbGwpOworICAgICAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJ
RChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKKyAgICAg
ICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsKTsKKyAgICAg
ICAgICAgIGlmIChSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyAodW5zaWduZWQp
YXJnQ291bnQgPiBtX3BhcmFtZXRlclNsb3RzKQorICAgICAgICAgICAgICAgIG1fcGFyYW1ldGVy
U2xvdHMgPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsKKyAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBvcF9jYWxsX3B1dF9yZXN1bHQ6IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgICAgICAgICBJbnN0cnVjdGlvbiogY2FsbEluc3RydWN0aW9uID0gY3VycmVudEluc3Ry
dWN0aW9uIC0gT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKKyAgICAgICAgICAgIEFTU0VSVChpbnRl
cnByZXRlci0+Z2V0T3Bjb2RlSUQoY2FsbEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2Fs
bCk7CisjZW5kaWYKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfcHV0X3Jlc3VsdCk7
CisgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8gUGFyc2UgZmFp
bGVkIQpAQCAtOTg5LDIyICsxMDM5LDIyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQ
aGlTdGFjaygpCiAgICAgICAgICAgICAgICAgdmFyLnZhbHVlID0gdmFsdWVJblByZWRlY2Vzc29y
OwogICAgICAgICAgICAgICAgIHBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KHByZWRlY2Vz
c29yQmxvY2ssIHZhbHVlSW5QcmVkZWNlc3NvciwgdmFyTm8pKTsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExvY2FsKQotICAgICAg
ICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29y
XS5jaGlsZDE7CisgICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2
YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpOwogICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhb
dmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVk
ZWNlc3Nvcl0ub3AgPT0gUGhpKTsKIAogICAgICAgICAgICAgaWYgKHBoaU5vZGUucmVmQ291bnQo
KSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZih2YWx1ZUluUHJlZGVjZXNzb3IpOwogCi0g
ICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDEgPT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAg
ICAgcGhpTm9kZS5jaGlsZDEgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICBpZiAo
cGhpTm9kZS5jaGlsZDEoKSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLmNo
aWxkcmVuLmZpeGVkLmNoaWxkMSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxk
MiA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgICAgICBwaGlOb2RlLmNoaWxkMiA9IHZhbHVlSW5Q
cmVkZWNlc3NvcjsKKyAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMigpID09IE5vTm9kZSkg
eworICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gdmFsdWVJ
blByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQzID09IE5vTm9kZSkgewotICAgICAgICAgICAg
ICAgIHBoaU5vZGUuY2hpbGQzID0gdmFsdWVJblByZWRlY2Vzc29yOworICAgICAgICAgICAgaWYg
KHBoaU5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAgICAgcGhpTm9kZS5j
aGlsZHJlbi5maXhlZC5jaGlsZDMgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAgLTEwMTMsMTMgKzEwNjMsMTMgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgIGlmIChwaGlO
b2RlLnJlZkNvdW50KCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobmV3UGhpKTsKIAot
ICAgICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZDEgPSBwaGlOb2RlLmNoaWxkMTsKLSAgICAgICAg
ICAgIG5ld1BoaU5vZGUuY2hpbGQyID0gcGhpTm9kZS5jaGlsZDI7Ci0gICAgICAgICAgICBuZXdQ
aGlOb2RlLmNoaWxkMyA9IHBoaU5vZGUuY2hpbGQzOwotCi0gICAgICAgICAgICBwaGlOb2RlLmNo
aWxkMSA9IG5ld1BoaTsKLSAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQxID0gdmFsdWVJblByZWRl
Y2Vzc29yOwotICAgICAgICAgICAgcGhpTm9kZS5jaGlsZDMgPSBOb05vZGU7CisgICAgICAgICAg
ICBuZXdQaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHBoaU5vZGUuY2hpbGQxKCk7Cisg
ICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IHBoaU5vZGUuY2hp
bGQyKCk7CisgICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IHBo
aU5vZGUuY2hpbGQzKCk7CisKKyAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hp
bGQxID0gbmV3UGhpOworICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEg
PSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVk
LmNoaWxkMyA9IE5vTm9kZTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEwNTcsOSArMTEwOCwx
NCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpCiAgICAgICAgICAg
ICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBkbyBzbyBp
biB0aGlzCiAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRz
IGxhc3QgdXNlLCBhbmQgYQogICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVk
LCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICBzY29yZUJvYXJk
LnVzZShub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxk
Mik7Ci0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMyk7CisgICAgICAgICAg
ICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmly
c3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAg
ICAgICAgICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGls
ZDIoKSk7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkp
CkBAIC0xMDc1LDcgKzExMzEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1
YWxSZWdpCiAgICAgLy8gJ21fbnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxv
Y2FscyBhbmQgdGVtcG9yYXJpZXMgYWxsb2NhdGVkCiAgICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAo
YW5kIGNoZWNrZWQgZm9yIG9uIGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQKICAg
ICAvLyBkaWZmZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdpc3RlcnMg
bWF5IG5vdyBiZSByZXF1aXJlZC4KLSAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29y
ZUJvYXJkLmFsbG9jYXRlZENvdW50KCkgKyBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5zaWduZWQg
Y2FsbGVlUmVnaXN0ZXJzID0gc2NvcmVCb2FyZC5hbGxvY2F0ZWRDb3VudCgpICsgbV9wcmVzZXJ2
ZWRWYXJzICsgbV9wYXJhbWV0ZXJTbG90czsKICAgICBpZiAoKHVuc2lnbmVkKW1fY29kZUJsb2Nr
LT5tX251bUNhbGxlZVJlZ2lzdGVycyA8IGNhbGxlZVJlZ2lzdGVycykKICAgICAgICAgbV9jb2Rl
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDkwMTkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDYgKzQxLDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAjdW5k
ZWYgU1RSSU5HSVpFX0RGR19PUF9FTlVNCiB9OwogCitjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1l
KE5vZGVUeXBlIG9wKQoreworICAgIHJldHVybiBkZmdPcE5hbWVzW29wICYgTm9kZUlkTWFza107
Cit9CisKIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC03NSwxNCAr
ODAsMjUgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgICAg
ICBwcmludGYoIiV1Iiwgbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgZWxzZQogICAgICAg
ICBwcmludGYoIi0iKTsKLSAgICBwcmludGYoIj5cdCVzKCIsIGRmZ09wTmFtZXNbb3AgJiBOb2Rl
SWRNYXNrXSk7Ci0gICAgaWYgKG5vZGUuY2hpbGQxICE9IE5vTm9kZSkKLSAgICAgICAgcHJpbnRm
KCJAJXUiLCBub2RlLmNoaWxkMSk7Ci0gICAgaWYgKG5vZGUuY2hpbGQyICE9IE5vTm9kZSkKLSAg
ICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKTsKLSAgICBpZiAobm9kZS5jaGlsZDMg
IT0gTm9Ob2RlKQotICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMpOwotICAgIGJv
b2wgaGFzUHJpbnRlZCA9IG5vZGUuY2hpbGQxICE9IE5vTm9kZTsKKyAgICBwcmludGYoIj5cdCVz
KCIsIG9wTmFtZShvcCkpOworICAgIGJvb2wgaGFzUHJpbnRlZDsKKyAgICBpZiAob3AgJiBOb2Rl
SGFzVmFyQXJncykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJz
dENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVu
KCk7IGNoaWxkSWR4KyspIHsKKyAgICAgICAgICAgIGlmIChoYXNQcmludGVkKQorICAgICAgICAg
ICAgICAgIHByaW50ZigiLCAiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBo
YXNQcmludGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW50ZigiQCV1IiwgbV92YXJBcmdDaGls
ZHJlbltjaGlsZElkeF0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5v
ZGUuY2hpbGQxKCkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgIT0gTm9Ob2RlKQorICAgICAgICAg
ICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBpZiAobm9kZS5jaGls
ZDMoKSAhPSBOb05vZGUpCisgICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMo
KSk7CisgICAgICAgIGhhc1ByaW50ZWQgPSBub2RlLmNoaWxkMSgpICE9IE5vTm9kZTsKKyAgICB9
CiAKICAgICBpZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewogICAgICAgICBwcmludGYoIiVzdmFy
JXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLnZhck51bWJlcigpKTsKQEAgLTEzOCwy
MSArMTU0LDI2IEBAIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKIHsKICAg
ICBOb2RlJiBub2RlID0gYXQob3ApOwogCi0gICAgaWYgKG5vZGUuY2hpbGQxID09IE5vTm9kZSkg
ewotICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5vZGUuY2hpbGQzID09
IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmVmKG5vZGUuY2hpbGQxKTsK
LQotICAgIGlmIChub2RlLmNoaWxkMiA9PSBOb05vZGUpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUu
Y2hpbGQzID09IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobm9kZS5vcCAmIE5v
ZGVIYXNWYXJBcmdzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZp
cnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRy
ZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgIHJlZihtX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gTm9Ob2Rl
KSB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgJiYgbm9kZS5j
aGlsZDMoKSA9PSBOb05vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHJlZihub2RlLmNoaWxkMSgpKTsKKworICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSA9PSBO
b05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5vTm9kZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVmKG5vZGUuY2hpbGQyKCkp
OworCisgICAgICAgIGlmIChub2RlLmNoaWxkMygpID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmVmKG5vZGUuY2hpbGQzKCkpOwogICAgIH0KLSAgICByZWYobm9kZS5j
aGlsZDIpOwotCi0gICAgaWYgKG5vZGUuY2hpbGQzID09IE5vTm9kZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIHJlZihub2RlLmNoaWxkMyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDkwMTkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjAsNyArMTYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwog
ICAgIH0KIAorI2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5v
ZGVUeXBlKTsKKyNlbmRpZgorCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBt
X2Jsb2NrczsKKyAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKIHBy
aXZhdGU6CiAKICAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEs
IGl0IG11c3QgKGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4s
IGFuZCB2aWNlIHZlcnNhLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5MDE5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMCwyNCArMzAwLDI5IEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1ZShO
b2QKIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbihOb2RlJiBub2RlKQogewot
ICAgIE5vZGVJbmRleCBjaGlsZDEgPSBub2RlLmNoaWxkMTsKLSAgICBpZiAoY2hpbGQxID09IE5v
Tm9kZSkgewotICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5vZGUuY2hp
bGQzID09IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdXNlKGNoaWxkMSk7
Ci0KLSAgICBOb2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDI7Ci0gICAgaWYgKGNoaWxkMiA9
PSBOb05vZGUpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQzID09IE5vTm9kZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgdXNlKGNoaWxkMik7Ci0KLSAgICBOb2RlSW5kZXggY2hp
bGQzID0gbm9kZS5jaGlsZDM7Ci0gICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCi0gICAgICAgIHJl
dHVybjsKLSAgICB1c2UoY2hpbGQzKTsKKyAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdz
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsg
Y2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJ
ZHgrKykKKyAgICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdKTsKKyAgICB9IGVsc2UgeworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gbm9kZS5j
aGlsZDEoKTsKKyAgICAgICAgaWYgKGNoaWxkMSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFT
U0VSVChub2RlLmNoaWxkMigpID09IE5vTm9kZSAmJiBub2RlLmNoaWxkMygpID09IE5vTm9kZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXNlKGNoaWxkMSk7Cisg
ICAgICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDIoKTsKKyAgICAg
ICAgaWYgKGNoaWxkMiA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxk
MygpID09IE5vTm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
dXNlKGNoaWxkMik7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gbm9kZS5j
aGlsZDMoKTsKKyAgICAgICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHVzZShjaGlsZDMpOworICAgIH0KIH0KIAogdm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjpjYWNoZWRHZXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkK
QEAgLTQyNSw2ICs0MzAsODQgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNoZWRQdXRCeUlk
KEdQUgogICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKGZ1bmN0aW9uQ2FsbCwgY2hlY2tJbW1U
b0NhbGwsIGNhbGxUb0NoZWNrLCBjYWxsVG9TdG9yZSwgY2FsbFRvU2xvd0Nhc2UsIGNhbGxUb0Rv
bmUsIHN0YXRpY19jYXN0PGludDhfdD4oYmFzZUdQUiksIHN0YXRpY19jYXN0PGludDhfdD4odmFs
dWVHUFIpLCBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKTsKIH0KIAordm9pZCBKSVRD
b2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBub2RlLCBHUFJSZWcgdGFyZ2V0R1BSKQorewor
ICAgIC8vIHRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBm
dW5jdGlvbiAobm9ybWFsIGNhbGwpIG9yIHRoZQorICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2Fs
bCkuICBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUgYXJndW1lbnRzLgorICAgIGludCBudW1B
cmdzID0gbm9kZS5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAKKyAgICAvLyBhbW91bnQgb2Ygc3R1
ZmYgKGluIHVuaXRzIG9mIHNpemVvZihSZWdpc3RlcikpIHRoYXQgd2UgbmVlZCB0byBwbGFjZSBh
dCB0aGUKKyAgICAvLyB0b3Agb2YgdGhlIEpTIHN0YWNrLgorICAgIGludCBjYWxsRGF0YVNpemUg
PSAwOworCisgICAgLy8gZmlyc3QgdGhlcmUgYXJlIHRoZSBhcmd1bWVudHMKKyAgICBjYWxsRGF0
YVNpemUgKz0gbnVtQXJnczsKKyAgICAKKyAgICAvLyBhbmQgdGhlbiB0aGVyZSBpcyB0aGUgY2Fs
bCBmcmFtZSBoZWFkZXIKKyAgICBjYWxsRGF0YVNpemUgKz0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplOworICAgIAorICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bWJlcihudW1BcmdzKSkpLCBhZGRyZXNz
T2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKTsKKyAgICBtX2ppdC5zdG9y
ZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0
ZXJGaWxlOjpDYWxsZXJGcmFtZSkpOworICAgIAorICAgIGZvciAoaW50IGFyZ0lkeCA9IDA7IGFy
Z0lkeCA8IG51bUFyZ3M7IGFyZ0lkeCsrKSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0
aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAx
ICsgYXJnSWR4XSk7CisgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CisgICAgICAg
IAorICAgICAgICBtX2ppdC5zdG9yZVB0cihhcmdHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKC1jYWxs
RGF0YVNpemUgKyBhcmdJZHgpKTsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChub2RlLm9wKSB7
CisgICAgY2FzZSBDYWxsOgorICAgICAgICBtX2ppdC5zdG9yZVB0cih0YXJnZXRHUFIsIGFkZHJl
c3NPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisgICAgCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAKKyAgICBHUFJSZXN1bHQgcmVzdWx0
KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBKSVRD
b21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CisgICAgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd1BhdGg7CisgICAgCisgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgY2FzZSBDYWxs
OgorICAgICAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHRhcmdldEdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKKyAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0YXJnZXRHUFIsIE9CSkVDVF9PRkZT
RVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9q
aXQuc3RvcmVQdHIocmVzdWx0R1BSLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OlNj
b3BlQ2hhaW4pKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIG1faml0LmFkZFB0cihJbW0z
MihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIAorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxs
KGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsK
KyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIAor
ICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoSW1tMzIo
bV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVy
KSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTGlua0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxl
SW5kZXhdLmV4Y2VwdGlvbkluZm8pOworICAgIG1faml0Lm1vdmUoSW1tMzIobnVtQXJncyksIEdQ
UkluZm86OnJlZ1QxKTsKKyAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCkt
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25J
bmZvKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBtX2ppdC5tb3Zl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIAorICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgCisgICAgbV9qaXQuYWRkSlND
YWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgdHJ1ZSwgbV9qaXQuZ3JhcGgo
KVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7Cit9CisKICNpZm5kZWYgTkRFQlVHCiBz
dGF0aWMgY29uc3QgY2hhciogZGF0YUZvcm1hdFN0cmluZyhEYXRhRm9ybWF0IGZvcm1hdCkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiA5MDE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjIsNiArNTIyLDEzIEBAIHByb3Rl
Y3RlZDoKICAgICAKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJl
ZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAgICAgdm9pZCBjYWNoZWRQ
dXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBzY3JhdGNoR1BS
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBz
bG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOworICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3NPZkNhbGxEYXRhKGludCBpZHgpCisgICAgeworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIChtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBpZHgpICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZW1pdENhbGwoTm9kZSYsIEdQUlJlZyB0YXJnZXRHUFIpOwogCiAgICAgLy8gQ2FsbGVkIG9uY2Ug
YSBub2RlIGhhcyBjb21wbGV0ZWQgY29kZSBnZW5lcmF0aW9uIGJ1dCBwcmlvciB0byBzZXR0aW5n
CiAgICAgLy8gaXRzIHJlc3VsdCwgdG8gZnJlZSB1cCBpdHMgY2hpbGRyZW4uIChUaGlzIG11c3Qg
aGFwcGVuIHByaW9yIHRvIHNldHRpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5MDE5MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNiAr
Mjk0LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgICAg
ICAvLyBJZiBjb21waWxhdGlvbiB0aHJvdWdoIHRoZSBTcGVjdWxhdGl2ZUpJVCBmYWlsZWQsIHRo
cm93IGF3YXkgdGhlIGNvZGUgd2UgZ2VuZXJhdGVkLgogICAgICAgICBtX2NhbGxzLmNsZWFyKCk7
CiAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5jbGVhcigpOworICAgICAgICBtX2pzQ2FsbHMu
Y2xlYXIoKTsKICAgICAgICAgcmV3aW5kVG9MYWJlbChzcGVjdWxhdGl2ZVBhdGhCZWdpbik7CiAK
ICAgICAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3RvciBub0NoZWNrczsKQEAgLTM2OSwxMyArMzcw
LDE1IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICNlbmRpZgog
CiAgICAgLy8gTGluayBhbGwgY2FsbHMgb3V0IGZyb20gdGhlIEpJVCBjb2RlIHRvIHRoZWlyIHJl
c3BlY3RpdmUgZnVuY3Rpb25zLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxz
LnNpemUoKTsgKytpKQotICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5tX2NhbGws
IG1fY2FsbHNbaV0ubV9mdW5jdGlvbik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
Y2FsbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2FsbHNbaV0ubV9mdW5jdGlvbi52
YWx1ZSgpKQorICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fY2FsbHNbaV0ubV9jYWxsLCBt
X2NhbGxzW2ldLm1fZnVuY3Rpb24pOworICAgIH0KIAogICAgIGlmIChtX2NvZGVCbG9jay0+bmVl
ZHNDYWxsUmV0dXJuSW5kaWNlcygpKSB7CiAgICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJu
SW5kZXhWZWN0b3IoKS5yZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uQ2hlY2tDb3VudCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAobV9jYWxsc1tpXS5tX2V4Y2VwdGlvbkNoZWNrLmlzU2V0KCkpIHsKKyAgICAg
ICAgICAgIGlmIChtX2NhbGxzW2ldLm1faGFuZGxlc0V4Y2VwdGlvbnMpIHsKICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCByZXR1cm5BZGRyZXNzT2Zmc2V0ID0gbGlua0J1ZmZlci5yZXR1cm5BZGRy
ZXNzT2Zmc2V0KG1fY2FsbHNbaV0ubV9jYWxsKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBl
eGNlcHRpb25JbmZvID0gbV9jYWxsc1tpXS5tX2V4Y2VwdGlvbkluZm87CiAgICAgICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmNhbGxSZXR1cm5JbmRleFZlY3RvcigpLmFwcGVuZChDYWxsUmV0dXJu
T2Zmc2V0VG9CeXRlY29kZU9mZnNldChyZXR1cm5BZGRyZXNzT2Zmc2V0LCBleGNlcHRpb25JbmZv
KSk7CkBAIC0zOTYsMTMgKzM5OSwyMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rp
b24oSklUQ29kCiAgICAgICAgIGluZm8udmFsdWVHUFIgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0u
bV92YWx1ZUdQUjsKICAgICAgICAgaW5mby51LnVuc2V0LnNjcmF0Y2hHUFIgPSBtX3Byb3BlcnR5
QWNjZXNzZXNbaV0ubV9zY3JhdGNoR1BSOwogICAgIH0KLQorICAgIAorICAgIG1fY29kZUJsb2Nr
LT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9qc0NhbGxzLnNpemUoKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgeworICAgICAgICBDYWxs
TGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOworICAgICAgICBp
bmZvLmlzQ2FsbCA9IG1fanNDYWxsc1tpXS5tX2lzQ2FsbDsKKyAgICAgICAgaW5mby5jYWxsUmV0
dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCkpOworICAgICAgICBpbmZvLmhvdFBhdGhC
ZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0ubV90YXJnZXRUb0NoZWNr
KTsKKyAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChtX2pzQ2FsbHNbaV0ubV9mYXN0Q2FsbCk7CisgICAgfQorICAgIAogICAgIC8vIEZJWE1F
OiBzd2l0Y2ggdGhlIHJlZ2lzdGVyIGZpbGUgY2hlY2sgJiBhcml0eSBjaGVjayBvdmVyIHRvIERG
R09wZXJ0YWlvbiBzdHlsZSBjYWxscywgbm90IEpJVCBzdHVicy4KICAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbFJlZ2lzdGVyRmlsZUNoZWNrLCBjdGlfcmVnaXN0ZXJfZmlsZV9jaGVjayk7CiAgICAg
bGlua0J1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVj
dG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVj
ayk7CiAKICAgICBlbnRyeVdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGFy
aXR5Q2hlY2spOwotICAgIGVudHJ5ID0gbGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBl
bnRyeSA9IEpJVENvZGUobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKSwgSklUQ29kZTo6REZHSklU
KTsKIH0KIAogI2lmIERGR19KSVRfQVNTRVJUCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5MDE5MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUs
NyBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkK
ICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1faGFuZGxlc0V4Y2Vw
dGlvbnMoZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAtNzQsNiArNzUsMTcgQEAgc3RydWN0IENh
bGxSZWNvcmQgewogICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICwgbV9l
eGNlcHRpb25DaGVjayhleGNlcHRpb25DaGVjaykKICAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8o
ZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCisgICAg
eworICAgIH0KKworICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwgdGhhdCBtYXkgY2F1c2Ug
ZXhjZXB0aW9ucywgYnV0IHdoaWNoIGFyZSBoYW5kbGVkCisgICAgLy8gdGhyb3VnaCBzb21lIG1l
Y2hhbmlzbSBvdGhlciB0aGFuIHRoZSBpbi1saW5lIGV4Y2VwdGlvbiBoYW5kbGVyLgorICAgIENh
bGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24s
IEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICAgICAgOiBtX2NhbGwoY2FsbCkKKyAg
ICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhl
eGNlcHRpb25JbmZvKQorICAgICAgICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7
CiAgICAgfQogCkBAIC04MSw2ICs5Myw3IEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICBGdW5j
dGlvblB0ciBtX2Z1bmN0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fZXhjZXB0aW9u
Q2hlY2s7CiAgICAgRXhjZXB0aW9uSW5mbyBtX2V4Y2VwdGlvbkluZm87CisgICAgYm9vbCBtX2hh
bmRsZXNFeGNlcHRpb25zOwogfTsKIAogLy8gPT09IEpJVENvbXBpbGVyID09PQpAQCAtMTU4LDYg
KzE3MSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
OwogICAgIH0KKyAgICAKKyAgICAvLyBOb3RpZnkgdGhlIEpJVCBvZiBhIGNhbGwgdGhhdCBkb2Vz
IG5vdCByZXF1aXJlIGxpbmtpbmcuCisgICAgdm9pZCBub3RpZnlDYWxsKENhbGwgY2FsbCwgdW5z
aWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICB7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxS
ZWNvcmQoY2FsbCwgRnVuY3Rpb25QdHIoKSwgZXhjZXB0aW9uSW5mbykpOworICAgIH0KIAogICAg
IC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNo
ZWNrLgogICAgIHZvaWQgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCkBA
IC0xNzQsNiArMTkzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJl
Y29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5m
bykpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KKyAgICAKKyAgICAvLyBB
ZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEgZmFzdCBleGNlcHRpb24gY2hlY2sg
dGhhdCB0ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCisgICAgQ2FsbCBhcHBlbmRD
YWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVu
c2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgeworICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9
IGNhbGwoKTsKKyAgICAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGJyYW5jaFRlc3RQdHIoWmVy
bywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxs
UmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBleGNlcHRpb25J
bmZvKSk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CisgICAgfQogCiAgICAgLy8gSGVs
cGVyIG1ldGhvZHMgdG8gY2hlY2sgbm9kZXMgZm9yIGNvbnN0YW50cy4KICAgICBib29sIGlzQ29u
c3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKQEAgLTIzNyw2ICsyNjUsMTEgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc2VzLmFwcGVuZChQcm9wZXJ0eUFjY2Vzc1Jl
Y29yZChmdW5jdGlvbkNhbGwsIGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIGRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2ssIGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUsIGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGRlbHRh
Q2FsbFRvRG9uZSwgIGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKSk7CiAgICAgfQorICAg
IAorICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFM
YWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgdW5zaWduZWQgZXhjZXB0aW9uSW5m
bykKKyAgICB7CisgICAgICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxs
LCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBleGNlcHRpb25JbmZvKSk7CisgICAg
fQogCiBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgdXNlZCBpbiBsaW5raW5nIHRoZSBz
cGVjdWxhdGl2ZSAmIG5vbi1zcGVjdWxhdGl2ZSBwYXRocyB0b2dldGhlci4KQEAgLTI1OSw3ICsy
OTIsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogCiAgICAg
c3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKLSAgICAgICAgUHJvcGVydHlBY2Nlc3NSZWNv
cmQoSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnQ4X3QgZGVsdGFDaGVja0ltbVRv
Q2FsbCwgaW50OF90IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2ssIGludDhfdCBkZWx0YUNhbGxUb0xv
YWRPclN0b3JlLCBpbnQ4X3QgZGVsdGFDYWxsVG9TbG93Q2FzZSwgaW50OF90IGRlbHRhQ2FsbFRv
RG9uZSwgaW50OF90IGJhc2VHUFIsIGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIp
CisgICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKENhbGwgZnVuY3Rpb25DYWxsLCBpbnQ4X3Qg
ZGVsdGFDaGVja0ltbVRvQ2FsbCwgaW50OF90IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2ssIGludDhf
dCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQ4X3QgZGVsdGFDYWxsVG9TbG93Q2FzZSwgaW50
OF90IGRlbHRhQ2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIsIGludDhfdCB2YWx1ZUdQUiwgaW50
OF90IHNjcmF0Y2hHUFIpCiAgICAgICAgICAgICA6IG1fZnVuY3Rpb25DYWxsKGZ1bmN0aW9uQ2Fs
bCkKICAgICAgICAgICAgICwgbV9kZWx0YUNoZWNrSW1tVG9DYWxsKGRlbHRhQ2hlY2tJbW1Ub0Nh
bGwpCiAgICAgICAgICAgICAsIG1fZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayhkZWx0YUNhbGxUb1N0
cnVjdENoZWNrKQpAQCAtMjgyLDggKzMxNSwyNiBAQCBwcml2YXRlOgogICAgICAgICBpbnQ4X3Qg
bV92YWx1ZUdQUjsKICAgICAgICAgaW50OF90IG1fc2NyYXRjaEdQUjsKICAgICB9OworICAgIAor
ICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgeworICAgICAgICBKU0NhbGxSZWNvcmQoQ2FsbCBmYXN0
Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXND
YWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgICAgICAgICAgOiBtX2Zhc3RDYWxsKGZh
c3RDYWxsKQorICAgICAgICAgICAgLCBtX3Nsb3dDYWxsKHNsb3dDYWxsKQorICAgICAgICAgICAg
LCBtX3RhcmdldFRvQ2hlY2sodGFyZ2V0VG9DaGVjaykKKyAgICAgICAgICAgICwgbV9pc0NhbGwo
aXNDYWxsKQorICAgICAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDYWxsIG1fZmFzdENhbGw7Cisg
ICAgICAgIENhbGwgbV9zbG93Q2FsbDsKKyAgICAgICAgRGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9D
aGVjazsKKyAgICAgICAgYm9vbCBtX2lzQ2FsbDsKKyAgICAgICAgdW5zaWduZWQgbV9leGNlcHRp
b25JbmZvOworICAgIH07CiAKICAgICBWZWN0b3I8UHJvcGVydHlBY2Nlc3NSZWNvcmQsIDQ+IG1f
cHJvcGVydHlBY2Nlc3NlczsKKyAgICBWZWN0b3I8SlNDYWxsUmVjb3JkLCA0PiBtX2pzQ2FsbHM7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTAxOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCB0eXBlZGVmIHVp
bnQzMl90IEV4Y2VwdGlvbkluZm87CiAjZGVmaW5lIE5vZGVJc0p1bXAgICAgICAgIDB4NDAwMDAK
ICNkZWZpbmUgTm9kZUlzQnJhbmNoICAgICAgMHg4MDAwMAogI2RlZmluZSBOb2RlSXNUZXJtaW5h
bCAgIDB4MTAwMDAwCisjZGVmaW5lIE5vZGVIYXNWYXJBcmdzICAgMHgyMDAwMDAKIAogLy8gVGhl
c2UgdmFsdWVzIHJlY29yZCB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5vZGUgKGFzIGNoZWNrZWQg
YnkgTm9kZVJlc3VsdE1hc2ssIGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0LgogI2RlZmluZSBOb2Rl
UmVzdWx0SlMgICAgICAweDEwMDAKQEAgLTEzNiw2ICsxMzcsOSBAQCB0eXBlZGVmIHVpbnQzMl90
IEV4Y2VwdGlvbkluZm87CiAgICAgbWFjcm8oQ29tcGFyZUVxLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ29tcGFyZVN0cmljdEVxLCBOb2RlUmVzdWx0SlMp
IFwKICAgICBcCisgICAgLyogQ2FsbHMuICovXAorICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIFwKICAgICAvKiBO
b2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCcmVha3BvaW50LCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEpTKSBcCkBA
IC0xNzMsNDMgKzE3Nyw2MCBAQCBzdHJ1Y3QgT3BJbmZvIHsKIC8vCiAvLyBOb2RlIHJlcHJlc2Vu
dHMgYSBzaW5nbGUgb3BlcmF0aW9uIGluIHRoZSBkYXRhIGZsb3cgZ3JhcGguCiBzdHJ1Y3QgTm9k
ZSB7CisgICAgZW51bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsKKwogICAgIC8vIENvbnN0cnVjdCBh
IG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9k
ZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBOb2RlSW5kZXggY2hp
bGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQz
ID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQogICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhj
ZXB0aW9uSW5mbykKLSAgICAgICAgLCBjaGlsZDEoY2hpbGQxKQotICAgICAgICAsIGNoaWxkMihj
aGlsZDIpCi0gICAgICAgICwgY2hpbGQzKGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdp
c3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAg
ICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgY2hp
bGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQxOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGls
ZDIgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IGNoaWxkMzsKICAg
ICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQg
YW4gaW1tZWRpYXRlIHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8g
ZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAg
ICAgOiBvcChvcCkKICAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCi0gICAg
ICAgICwgY2hpbGQxKGNoaWxkMSkKLSAgICAgICAgLCBjaGlsZDIoY2hpbGQyKQotICAgICAgICAs
IGNoaWxkMyhjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1
YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8o
aW1tLm1fdmFsdWUpCiAgICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdz
KSk7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKKyAgICAgICAgY2hp
bGRyZW4uZml4ZWQuY2hpbGQyID0gY2hpbGQyOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGls
ZDMgPSBjaGlsZDM7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRv
IDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgogICAgIE5vZGUoTm9kZVR5cGUg
b3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0y
LCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQogICAgICAgICAsIGV4
Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKLSAgICAgICAgLCBjaGlsZDEoY2hpbGQxKQotICAg
ICAgICAsIGNoaWxkMihjaGlsZDIpCi0gICAgICAgICwgY2hpbGQzKGNoaWxkMykKICAgICAgICAg
LCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1f
cmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCiAgICAgICAgICwg
bV9vcEluZm8yKGltbTIubV92YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9k
ZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQxOwor
ICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDIgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkcmVu
LmZpeGVkLmNoaWxkMyA9IGNoaWxkMzsKKyAgICB9CisgICAgCisgICAgLy8gQ29uc3RydWN0IGEg
bm9kZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNoaWxkcmVuIGFuZCBubyBpbW1lZGlhdGUg
dmFsdWVzLgorICAgIE5vZGUoVmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBl
eGNlcHRpb25JbmZvLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikK
KyAgICAgICAgOiBvcChvcCkKKyAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8p
CisgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAg
ICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgeworICAgICAgICBBU1NFUlQob3AgJiBOb2RlSGFz
VmFyQXJncyk7CisgICAgICAgIGNoaWxkcmVuLnZhcmlhYmxlLmZpcnN0Q2hpbGQgPSBmaXJzdENo
aWxkOworICAgICAgICBjaGlsZHJlbi52YXJpYWJsZS5udW1DaGlsZHJlbiA9IG51bUNoaWxkcmVu
OwogICAgIH0KIAogICAgIGJvb2wgbXVzdEdlbmVyYXRlKCkKQEAgLTM1MCwxMyArMzcxLDUxIEBA
IHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBtdXN0R2VuZXJhdGUoKSA/IG1f
cmVmQ291bnQgLSAxIDogbV9yZWZDb3VudDsKICAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGNo
aWxkMSgpCisgICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7Cisg
ICAgICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDE7CisgICAgfQogCisgICAgTm9kZUlu
ZGV4IGNoaWxkMigpCisgICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdz
KSk7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDI7CisgICAgfQorCisgICAg
Tm9kZUluZGV4IGNoaWxkMygpCisgICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNW
YXJBcmdzKSk7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDM7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9w
ICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gY2hpbGRyZW4udmFyaWFibGUuZmly
c3RDaGlsZDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gY2hp
bGRyZW4udmFyaWFibGUubnVtQ2hpbGRyZW47CisgICAgfQorICAgIAogICAgIC8vIFRoaXMgZW51
bSB2YWx1ZSBkZXNjcmliZXMgdGhlIHR5cGUgb2YgdGhlIG5vZGUuCiAgICAgTm9kZVR5cGUgb3A7
CiAgICAgLy8gVXNlZCB0byBsb29rIHVwIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbiAo
Y3VycmVudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgogICAgIEV4Y2VwdGlv
bkluZm8gZXhjZXB0aW9uSW5mbzsKICAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRy
ZW4gKDAgZm9yIG5vIGNoaWxkKS4KLSAgICBOb2RlSW5kZXggY2hpbGQxLCBjaGlsZDIsIGNoaWxk
MzsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBOb2RlSW5kZXgg
Y2hpbGQxLCBjaGlsZDIsIGNoaWxkMzsKKyAgICAgICAgfSBmaXhlZDsKKyAgICAgICAgc3RydWN0
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQ7CisgICAgICAgICAgICB1bnNpZ25l
ZCBudW1DaGlsZHJlbjsKKyAgICAgICAgfSB2YXJpYWJsZTsKKyAgICB9IGNoaWxkcmVuOwogCiBw
cml2YXRlOgogICAgIC8vIFRoZSB2aXJ0dWFsIHJlZ2lzdGVyIG51bWJlciAoc3BpbGwgbG9jYXRp
b24pIGFzc29jaWF0ZWQgd2l0aCB0aGlzIC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MDE5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjUsOCArMjY1LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6a25v
d25Db25zdGFudEFyaQogCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpiYXNpY0FyaXRoT3AoTm9k
ZVR5cGUgb3AsIE5vZGUgJm5vZGUpCiB7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBu
b2RlLmNoaWxkMSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7
CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIAogICAgIEdQUlJlZyBh
cmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CkBA
IC0yNzcsOSArMjc3LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9wKE5v
ZAogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKLSAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkKKyAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQxKCkpKQogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKSk7Ci0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpCisgICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgIAogICAgIHN3aXRjaCAob3ApIHsKQEAgLTM0
Niw4ICszNDYsOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vCiB7
CiAgICAgLy8gRklYTUU6IHNob3VsZCBkbyBzb21lIHBlZXBob2xlIHRvIGZ1c2UgY29tcGFyZS9i
cmFuY2gKICAgICAgICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxk
MSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5n
cHIoKTsKICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAgICAgCkBAIC0zNTYsOSAr
MzU2LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBubwogICAgIAog
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKLSAgICBpZiAoIWlzS25v
d25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hp
bGQxKCkpKQogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
Ci0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpCisgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMigpKSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOwogICAgIAogICAgIG1faml0LmNvbXBhcmUzMihjb25kLCBhcmcxR1BS
LCBhcmcyR1BSLCByZXN1bHRHUFIpOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgTm9uU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKIAogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNl
IENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBu
b2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHRoaXNHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKQEAgLTQyNCw3ICs0MjQsNyBAQCB2b2lkIE5vblNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBTZXRMb2Nh
bDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9k
ZS5sb2NhbCgpKSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
YnJlYWs7CkBAIC00MzMsMjMgKzQzMywyMyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKFNwZWN1bGF0CiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNl
IEJpdFhvcjoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsKLSAg
ICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIEludGVn
ZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AyKTsKIAotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpLCBv
cDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsK
IAotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQy
KSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7
CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwog
CiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKQEAgLTQ2MywxMSArNDYzLDEx
IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICBjYXNlIEJp
dFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAg
ICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgICAgICBJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7CiAKLSAgICAgICAgICAgIGludCBzaGlmdEFtb3VudCA9IHZhbHVlT2ZJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQyKSAmIDB4MWY7CisgICAgICAgICAgICBpbnQgc2hpZnRBbW91bnQg
PSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSAmIDB4MWY7CiAgICAgICAgICAg
ICAvLyBTaGlmdHMgYnkgemVybyBzaG91bGQgaGF2ZSBiZWVuIG9wdGltaXplZCBvdXQgb2YgdGhl
IGdyYXBoIQogICAgICAgICAgICAgQVNTRVJUKHNoaWZ0QW1vdW50KTsKICAgICAgICAgICAgIHNo
aWZ0T3Aob3AsIG9wMS5ncHIoKSwgc2hpZnRBbW91bnQsIHJlc3VsdC5ncHIoKSk7CkBAIC00NzUs
OCArNDc1LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAg
ICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIERvIG5vdCBhbGxvdyBzaGlmdCBhbW91bnQg
dG8gYmUgdXNlZCBhcyB0aGUgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlciBkb2VzIG5vdCBwZXJtaXQg
dGhpcy4KLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7
Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAg
ICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICAgICAgSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgICAgICBHUFJSZWcg
cmVnMSA9IG9wMS5ncHIoKTsKQEAgLTQ4OCw3ICs0ODgsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBVSW50MzJU
b051bWJlcjogewotICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEp
OworICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
ICAgIEZQUlRlbXBvcmFyeSBib3hlcih0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwogICAgICAgICAKQEAgLTUxMywyNiArNTEzLDI2IEBAIHZvaWQgTm9uU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIFZhbHVlVG9J
bnQzMjogewotICAgICAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpOwor
ICAgICAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7CiAKLSAgICAg
ICAgaWYgKGlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkgewotICAgICAgICAgICAgSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgaWYgKGlzS25vd25JbnRl
Z2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsK
ICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEdlbmVyYXRpb25JbmZv
JiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZS5jaGlsZDFd
LnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGNoaWxkSW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXS52aXJ0dWFsUmVn
aXN0ZXIoKV07CiAgICAgICAgIGlmICgoY2hpbGRJbmZvLnJlZ2lzdGVyRm9ybWF0KCkgfCBEYXRh
Rm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0RvdWJsZSkgewotICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogICAgICAgICAgICAgbnVtYmVyVG9JbnQzMihvcDEuZnByKCksIHJlc3VsdC5ncHIo
KSk7CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxKTsKICAgICAgICAgdmFsdWVUb0ludDMyKG9wMSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKQEAgLTU0MCwxOCAr
NTQwLDE4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9
CiAKICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6IHsKLSAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDEpKTsKLSAgICAgICAgQVNTRVJUKCFpc0RvdWJsZUNvbnN0YW50KG5v
ZGUuY2hpbGQxKSk7CisgICAgICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQx
KCkpKTsKKyAgICAgICAgQVNTRVJUKCFpc0RvdWJsZUNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsK
IAotICAgICAgICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBpZiAoaXNL
bm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOwogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgICAgICB2YWx1ZVRvTnVtYmVyKG9wMSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKQEAgLTU2MCwxMyAr
NTYwLDEzIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKIAogICAg
IGNhc2UgVmFsdWVBZGQ6CiAgICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICBpZiAoaXNJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQxKSkgewotICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRo
T3Aob3AsIG5vZGUuY2hpbGQyLCBub2RlLmNoaWxkMSwgdHJ1ZSk7CisgICAgICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIGtub3duQ29uc3RhbnRB
cml0aE9wKG9wLCBub2RlLmNoaWxkMigpLCBub2RlLmNoaWxkMSgpLCB0cnVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3Aob3As
IG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMiwgZmFsc2UpOworICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBrbm93bkNvbnN0YW50QXJpdGhP
cChvcCwgbm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01NzUsOCArNTc1LDggQEAgdm9pZCBOb25T
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBcml0aFN1YjogewotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkg
ewotICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3AoQXJpdGhTdWIsIG5vZGUuY2hpbGQx
LCBub2RlLmNoaWxkMiwgZmFsc2UpOworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQyKCkpKSB7CisgICAgICAgICAgICBrbm93bkNvbnN0YW50QXJpdGhPcChBcml0aFN1Yiwg
bm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01OTAsOCArNTkwLDggQEAgdm9pZCBOb25TcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgQXJpdGhEaXY6IHsK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJSZWcgYXJnMUdQUiA9IGFy
ZzEuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKICAgICAgICAg
CkBAIC02MDksOCArNjA5LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVj
dWxhdAogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIo
dGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hp
bGQyKCkpOwogICAgICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKQEAg
LTYyNyw3ICs2MjcsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0
CiAgICAgfQogCiAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
CiAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKQEAgLTY2OCw4ICs2NjgsOCBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS5jaGlsZDIpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxk
MigpKTsKIAogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IGNsZWFuSW5kZXgodGhpcyk7CkBAIC03MjAsOSArNzIwLDkgQEAgdm9pZCBOb25T
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogCiAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlz
LCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5j
aGlsZDIpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIG5vZGUuY2hpbGQzKTsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSUmVnIGFy
ZzFHUFIgPSBhcmcxLmdwcigpOwogICAgICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7
CiAgICAgICAgIEdQUlJlZyBhcmczR1BSID0gYXJnMy5ncHIoKTsKQEAgLTczNiw3ICs3MzYsNyBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAg
Y2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CkBAIC03NTAsOCArNzUwLDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZDogewotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC03NjUsOCArNzY1LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZERpcmVjdDog
ewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC03OTEsNyArNzkxLDcgQEAgdm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2Ug
UHV0R2xvYmFsVmFyOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBnbG9iYWxPYmplY3QodGhpcyk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAKQEAgLTgxOCw3ICs4MTgsNyBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2Fz
ZSBCcmFuY2g6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGls
ZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CiAKQEAgLTg0Nyw3ICs4NDcsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpj
b21waWxlKFNwZWN1bGF0CiAjZW5kaWYKIAogICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBp
biByZXR1cm5WYWx1ZUdQUi4KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwogCiAgICAgICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgpAQCAtODcxLDYgKzg3MSwx
MyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAjZWxzZQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgorICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgY2FzZSBDYWxsOgorICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywg
bV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXSk7CisgICAg
ICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CisgICAgICAgIGVtaXRDYWxsKG5v
ZGUsIGNhbGxlZUdQUik7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmIChub2RlLmhh
c1Jlc3VsdCgpICYmIG5vZGUubXVzdEdlbmVyYXRlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDkwMTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNiArNDIsNyBAQAogICAgICAgICAibW92ICglcnNwKSwgJSIgU1RSSU5HSVpFKHJlZ2lzdGVy
KSAiXG4iIFwKICAgICAgICAgImptcCBfIiBTVFJJTkdJWkUoZnVuY3Rpb24pICJXaXRoUmV0dXJu
QWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FS
RzJfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTUyhmdW5jdGlvbiwgcnNpKQogI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJH
NF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTKGZ1bmN0aW9uLCByY3gpCiAjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkc1
X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1MoZnVuY3Rpb24sIHI4KQogCkBAIC0zODcsNiArMzg4LDExNyBAQCBib29sIG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVx
dWFsKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcDIpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgcmV0dXJuVmFsdWVIYWNrKCk7CitFbmNv
ZGVkSlNWYWx1ZSByZXR1cm5WYWx1ZUhhY2tXaXRoRXhlY1N0YXRlKEV4ZWNTdGF0ZSopOworCith
c20oCisiLmdsb2JsIF8iIFNUUklOR0laRShyZXR1cm5WYWx1ZUhhY2spICJcbiIKKyJfIiBTVFJJ
TkdJWkUocmV0dXJuVmFsdWVIYWNrKSAiOiIgIlxuIgorIm1vdiAtNDAoJXIxMyksICVyMTNcbiIK
KyJtb3YgJXIxMywgJXJkaVxuIgorImptcCBfIiBTVFJJTkdJWkUocmV0dXJuVmFsdWVIYWNrV2l0
aEV4ZWNTdGF0ZSkgIlxuIgorKTsKKworRW5jb2RlZEpTVmFsdWUgcmV0dXJuVmFsdWVIYWNrV2l0
aEV4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShleGVjLT5nbG9iYWxEYXRhKCkuaG9zdENhbGxSZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyB2
b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVl
KQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Cisg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNh
bGxlZSwgY2FsbERhdGEpOworICAgIAorICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpT
KTsKKyAgICAKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7CisgICAgICAgIGlm
ICghZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coZXhlY0NhbGxl
ZS0+cmVnaXN0ZXJzKCkpKSB7CisgICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihleGVj
LT5zY29wZUNoYWluKCkpOworICAgICAgICAKKyAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENhbGxS
ZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhl
Y0NhbGxlZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmV0dXJuVmFsdWVIYWNrKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGNhbGxUeXBl
ID09IENhbGxUeXBlTm9uZSk7CisgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNy
ZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSk7CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0
dXJuQWRkcmVzc1B0cik7CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHMl9SRVRVUk5fQUREUkVT
UyhvcGVyYXRpb25MaW5rQ2FsbCk7Cit2b2lkKiBvcGVyYXRpb25MaW5rQ2FsbFdpdGhSZXR1cm5B
ZGRyZXNzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7
CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7Cisg
ICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oKmdsb2JhbERh
dGEsIGNhbGxlZUFzVmFsdWUpOworICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCisgICAg
ICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlKTsKKyAg
ICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0Z1bmN0aW9uKGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsK
KyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwor
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gMDsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewor
ICAgICAgICBwcmludGYoImhvc3QgZnVuY3Rpb24hXG4iKTsKKyAgICAgICAgY29kZVB0ciA9IGV4
ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAg
ICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGV4
ZWMsIGNhbGxlZS0+c2NvcGUoKSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAg
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgY29kZUJsb2NrID0gJmZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgICAgIGlm
IChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpID09IHN0YXRpY19jYXN0
PHNpemVfdD4oY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKQorICAgICAgICAgICAgY29kZVB0
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNz
Rm9yQ2FsbCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCk7CisgICAg
fQorICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdl
dENhbGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVu
T25jZSgpKQorICAgICAgICBjYWxsTGlua0luZm8uc2V0U2VlbigpOworICAgIGVsc2UKKyAgICAg
ICAgZGZnTGlua0NhbGwoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxl
ZSwgY29kZVB0cik7CisgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihjYWxsZWUtPnNjb3Bl
KCkpOworICAgIHJldHVybiBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisKK3ZvaWQq
IG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOworICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgSlNWYWx1ZSBjYWxsZWVB
c1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOworICAgIEpTQ2VsbCogY2FsbGVl
QXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKCpnbG9iYWxEYXRhLCBjYWxsZWVBc1ZhbHVl
KTsKKyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKQorICAgICAgICByZXR1cm4gaGFuZGxl
SG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSk7CisgICAgCisgICAgSlNGdW5jdGlv
biogZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBFeGVj
dXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CisgICAgaWYg
KGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgcHJpbnRmKCJob3N0IGZ1
bmN0aW9uIGluIHZpcnQgY2FsbCFcbiIpOworICAgICAgICByZXR1cm4gZXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CisgICAgfQorCisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUg
PSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICBKU09i
amVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGV4ZWMsIGZ1
bmN0aW9uLT5zY29wZSgpKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZXhlYy0+Z2xvYmFs
RGF0YSgpLmV4Y2VwdGlvbiA9IGVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
ZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihmdW5jdGlvbi0+c2NvcGUoKSk7CisgICAgcmV0dXJu
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
aygpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisKIERGR0hhbmRsZXIgbG9va3VwRXhjZXB0aW9u
SGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMsIFJldHVybkFkZHJlc3NQdHIgZmF1bHRMb2NhdGlvbikK
IHsKICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTAx
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzYsNiArNzYsOCBAQCBib29sIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNT
dGF0ZSosIEVuCiBib29sIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CiBib29sIG9w
ZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKIGJvb2wgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpOwordm9pZCogb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKik7Cit2b2lk
KiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqKTsKIAogLy8gVGhpcyBtZXRob2QgaXMgdXNl
ZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwg
d2hpY2ggaXMKIC8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91
dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5MDE5MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
NSw2ICszNzUsMjEgQEAgdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIAog
ICAgICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7
CiB9CiAKK3ZvaWQgZGZnTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNhbGxl
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCit7CisgICAgQ29kZUJsb2NrICpjYWxs
ZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKKyAgICAKKyAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAg
ICBpZiAoIWNhbGxlZUNvZGVCbG9jayB8fCBzdGF0aWNfY2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkpID09IGNhbGxlZUNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJz
KSB7CisgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOworICAgICAgICBj
YWxsTGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCks
IGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGNhbGxlZSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOworICAgIH0KKyAgICAKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24p
LCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2
aXNpb24gOTAxOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiB2b2lkIGRmZ1JlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwog
dm9pZCBkZmdCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBk
ZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3Zv
aWQgZGZnTGlua0NhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNG
dW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MDE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsMTcg
KzM2MywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlCiAgICAg
ICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KIAotICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDEpKSB7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIpOworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsK
KyAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZGl0aW9uLCBKSVRDb21w
aWxlcjo6SW1tMzIoaW1tKSwgb3AyLmdwcigpKSwgdGFrZW4pOwotICAgIH0gZWxzZSBpZiAoaXNJ
bnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKTsKKyAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25z
dGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZklu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2gzMihjb25kaXRpb24sIG9wMS5ncHIoKSwgSklUQ29tcGlsZXI6OkltbTMyKGltbSkpLCB0YWtl
bik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihj
b25kaXRpb24sIG9wMS5ncHIoKSwgb3AyLmdwcigpKSwgdGFrZW4pOwogICAgIH0KIApAQCAtMzk4
LDggKzM5OCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUNhbGwKICAg
ICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQogCi0gICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIpOworICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBK
U1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIG9wMUdQ
UiA9IG9wMS5ncHIoKTsKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CkBAIC00NDgsMjAgKzQ0OCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICBzd2l0Y2gg
KG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpKSB7CiAgICAgICAgIGNh
c2UgUHJlZGljdEludDMyOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSkpOwog
ICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBQcmVkaWN0QXJyYXk6IHsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKGNlbGwuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5v
ZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2Rl
LmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNDczLDIzICs0NzMsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CiAg
ICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEp
KSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIpOworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIo
KSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMik7CiAKLSAgICAg
ICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSksIG9wMi5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJD
b25zdGFudChub2RlLmNoaWxkMSgpKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAg
ICAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAgICAg
IGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMiksIG9wMS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMigpKSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMik7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICAgICAgR1BSUmVnIHJlZzEgPSBvcDEuZ3By
KCk7CkBAIC01MDMsMTcgKzUwMywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAg
Y2FzZSBCaXRVUlNoaWZ0OgotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQy
KSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKTsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgewor
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAg
ICAgICAgICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQyKSAmIDB4MWYsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzaGlmdE9wKG9wLCBv
cDEuZ3ByKCksIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpICYgMHgxZiwgcmVz
dWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIERvIG5vdCBh
bGxvdyBzaGlmdCBhbW91bnQgdG8gYmUgdXNlZCBhcyB0aGUgcmVzdWx0LCBNYWNyb0Fzc2VtYmxl
ciBkb2VzIG5vdCBwZXJtaXQgdGhpcy4KLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVn
MSA9IG9wMS5ncHIoKTsKQEAgLTUyNSw3ICs1MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBVSW50MzJUb051
bWJlcjogewotICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwor
ICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICAvLyBUZXN0IHRoZSBv
cGVyYW5kIGlzIHBvc2l0aXZlLgpAQCAtNTM3LDcgKzUzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFZhbHVlVG9JbnQzMjog
ewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEp
OworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgbV9q
aXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgb3AxLmZvcm1hdCgpKTsKQEAgLTU0NSwxNCAr
NTQ1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9
CiAKICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6IHsKLSAgICAgICAgaWYgKGlzSW50ZWdlcihub2Rl
LmNoaWxkMSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSk7CisgICAgICAgIGlmIChpc0ludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAg
ICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxl
SW5kZXgpOwpAQCAtNTYxLDEwICs1NjEsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOiB7
Ci0gICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxLCBub2RlLmNo
aWxkMikpIHsKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7
Ci0gICAgICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDEpOwotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBpbW0xID0g
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywg
b3AyLmdwcigpLCBJbW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKSk7CkBAIC01NzMsOSArNTczLDkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAg
ICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKTsKKyAg
ICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
IAogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoQWRkMzIoTWFj
cm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3By
KCkpKTsKQEAgLTU4NCw4ICs1ODQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgICAgICBHUFJSZWcgZ3ByMSA9IG9wMS5n
cHIoKTsKQEAgLTYwNCw4ICs2MDQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIEZQUlJlZyByZWcxID0g
b3AxLmZwcigpOwpAQCAtNjE3LDEwICs2MTcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkgewot
ICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwot
ICAgICAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQyKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEo
KSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCBpbW0yID0g
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCks
IEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTYyOSw4ICs2MjksOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBv
cDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CkBAIC02MzksOCArNjM5LDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAKICAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CkBAIC02NTIsOSArNjUyLDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNh
c2UgQXJpdGhNdWw6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5j
aGlsZDEsIG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAgICBHUFJS
ZWcgcmVnMSA9IG9wMS5ncHIoKTsKQEAgLTY3MCw4ICs2NzAsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwor
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAg
IEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwpAQCAtNjg0LDggKzY4NCw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoRGl2
OiB7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIp
OworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIo
KSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICBG
UFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKQEAgLTY5Nyw4ICs2OTcsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aE1vZDog
ewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEp
OwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIp
OworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGVheCh0aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSBlZHgodGhpcywgWDg2UmVnaXN0ZXJzOjplZHgpOwogICAg
ICAgICBHUFJSZWcgb3AxR3ByID0gb3AxLmdwcigpOwpAQCAtNzI1LDcgKzcyNSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIExv
Z2ljYWxOb3Q6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGls
ZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklYTUU6IFdlIGNvdWxkIHJl
dXNlLCBidXQgb24gc3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJlY292ZXJ5IHRvIHJlc3Rv
cmUgdGFnIChha2luIHRvIGFkZCkuCiAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKQEAgLTc0NiwyMCArNzQ2LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZl
bmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCiAgICAgICAgICAgICBB
U1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICAgICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMikpCisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxk
MigpKSkKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKG5vZGUs
IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6Okxlc3NUaGFuKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVDYWxsKG5vZGUsIGJyYW5jaE5vZGVJ
bmRleCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MpOwogCi0gICAgICAgICAgICB1c2Uobm9kZS5jaGls
ZDEpOwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIHVzZShub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAg
IG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIGNhc2UsIG5vdCBmdXNlZCB0byBicmFuY2gu
Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7
Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7
CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAg
ICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6Okxlc3NUaGFuLCBvcDEuZ3ByKCksIG9w
Mi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTc3OCwyMCArNzc4LDIwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIC8vIHNvIGNhbiBiZSBu
byBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCiAgICAg
ICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICAgICAg
ICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMikp
CisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBu
b2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJh
bmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6Okxlc3NUaGFuT3JFcXVhbCk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlQ2FsbChu
b2RlLCBicmFuY2hOb2RlSW5kZXgsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEpOwogCi0gICAgICAg
ICAgICB1c2Uobm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKTsKKyAg
ICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHVzZShub2RlLmNoaWxk
MigpKTsKICAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIGNhc2UsIG5v
dCBmdXNlZCB0byBicmFuY2guCi0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSwgb3AyKTsKIAogICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6Okxlc3NU
aGFuT3JFcXVhbCwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkBAIC04MTAs
MTkgKzgxMCwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAvLyBzbyBjYW4gYmUgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgdG8gYWxzbyByZWZl
cmVuY2UgdGhlIGNvbXBhcmUuIAogICAgICAgICAgICAgQVNTRVJUKG5vZGUuYWRqdXN0ZWRSZWZD
b3VudCgpID09IDEpOwogCi0gICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIpKQorICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpCiAgICAgICAgICAgICAgICAg
Y29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIEpJVENv
bXBpbGVyOjpFcXVhbCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29tcGls
ZVBlZXBIb2xlQ2FsbChub2RlLCBicmFuY2hOb2RlSW5kZXgsIG9wZXJhdGlvbkNvbXBhcmVFcSk7
CiAKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICB1c2Uobm9kZS5j
aGlsZDIpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgdXNl
KG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2Rl
SW5kZXg7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgbV9qaXQuY29tcGFy
ZTMyKEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIo
KSk7CkBAIC04MzQsOCArODM0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICBtX2ppdC5j
b21wYXJlMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKQEAgLTg0NywxOCArODQ3LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIE5v
ZGVJbmRleCBhbGlhcyA9IG5vZGUuY2hpbGQzOworICAgICAgICBOb2RlSW5kZXggYWxpYXMgPSBu
b2RlLmNoaWxkMygpOwogICAgICAgICBpZiAoYWxpYXMgIT0gTm9Ob2RlKSB7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogcmVzdWx0IHNob3VsZCBiZSBhYmxlIHRvIHJldXNlIGNoaWxkMSwgY2hpbGQy
LiBTaG91bGQgaGF2ZSBhbiAnVW51c2VkT3BlcmFuZCcgdHlwZS4KLSAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFsaWFzZWRWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMyk7CisgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhbGlhc2VkVmFsdWUodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGFsaWFzZWRWYWx1ZSk7CiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKGFsaWFzZWRWYWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogCiAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5n
cHIoKTsKQEAgLTg3MSw3ICs4NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQg
dGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVu
Z3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlw
ZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBOb2RlJiBiYXNlTm9kZSA9
IG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDFdOworICAgICAgICBOb2RlJiBiYXNlTm9kZSA9IG1f
aml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV07CiAgICAgICAgIGlmIChiYXNlTm9kZS5vcCAhPSBH
ZXRMb2NhbCB8fCBtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24oYmFzZU5vZGUubG9jYWwoKSkg
IT0gUHJlZGljdEFycmF5KQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CkBA
IC04ODgsOSArODg4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlWYWw6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAgLy8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFs
dWUgaW50byByZWdpc3RlcnMsIGFsbG9jYXRlIGEgc2NyYXRjaCByZWdpc3Rlci4KQEAgLTkwMyw3
ICs5MDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAg
ICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBp
cyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2Fu
IHNraXAgdGhlIGNoZWNrLgotICAgICAgICBOb2RlJiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClb
bm9kZS5jaGlsZDFdOworICAgICAgICBOb2RlJiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9k
ZS5jaGlsZDEoKV07CiAgICAgICAgIGlmIChiYXNlTm9kZS5vcCAhPSBHZXRMb2NhbCB8fCBtX2pp
dC5ncmFwaCgpLmdldFByZWRpY3Rpb24oYmFzZU5vZGUubG9jYWwoKSkgIT0gUHJlZGljdEFycmF5
KQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikp
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd2l0aGluQXJyYXlCb3VuZHMgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwpA
QCAtOTQ1LDkgKzk0NSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKTsKKyAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7CkBAIC05NzcsNyArOTc3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyB2YWx1
ZVJlZyA9IHZhbHVlLmdwcigpOwogCiAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5n
cmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZz
ZXQoKSk7CkBAIC0xMDEzLDcgKzEwMTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAjZW5kaWYKIAogICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiBy
ZXR1cm5WYWx1ZUdQUi4KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwog
CiAgICAgICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgpAQCAtMTAyOSw3ICsxMDI5LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAg
IGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1Zh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhp
c1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0
aGlzKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNW
YWx1ZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOwpAQCAt
MTA0MCw3ICsxMDQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlJZDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBiYXNlKTsKIAogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwpAQCAtMTA1Miw4ICsxMDUyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZDogewotICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CiAKICAgICAgICAgY2FjaGVkUHV0QnlJZChiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgc2Ny
YXRjaC5ncHIoKSwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7CkBAIC0xMDYz
LDggKzEwNjMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
IAogICAgICAgICBjYWNoZWRQdXRCeUlkKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBzY3JhdGNo
LmdwcigpLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKQEAgLTEwODUsNyArMTA4
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAK
ICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgZ2xvYmFsT2JqZWN0KHRoaXMpOwog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCkBAIC0xMTEyLDYg
KzExMTIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogI2Vs
c2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVl
KHRoaXMsIG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV0p
OworICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOworICAgICAgICBlbWl0
Q2FsbChub2RlLCBjYWxsZWVHUFIpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAo
bm9kZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTAxOTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIENoZWNr
IGlmIHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCiAgICAgICAgIE5vZGUm
IGxhc3ROb2RlID0gbV9qaXQuZ3JhcGgoKVtsYXN0Tm9kZUluZGV4XTsKLSAgICAgICAgcmV0dXJu
IGxhc3ROb2RlLm9wID09IEJyYW5jaCAmJiBsYXN0Tm9kZS5jaGlsZDEgPT0gbV9jb21waWxlSW5k
ZXggPyBsYXN0Tm9kZUluZGV4IDogTm9Ob2RlOworICAgICAgICByZXR1cm4gbGFzdE5vZGUub3Ag
PT0gQnJhbmNoICYmIGxhc3ROb2RlLmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4ID8gbGFzdE5v
ZGVJbmRleCA6IE5vTm9kZTsKICAgICB9CiAKICAgICBib29sIGlzSW50ZWdlcihOb2RlSW5kZXgg
bm9kZUluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuaAkocmV2aXNpb24gOTAxOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFt
ZXNwYWNlIEpTQyAgewogICAgIC8vIFBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gbW9z
dCBmdW5jdGlvbnMuCiAgICAgY2xhc3MgRXhlY1N0YXRlIDogcHJpdmF0ZSBSZWdpc3RlciB7CiAg
ICAgcHVibGljOgorICAgICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUoKSBjb25zdCB7IHJldHVy
biB0aGlzW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5qc1ZhbHVlKCk7IH0KICAgICAgICAgSlNPYmpl
Y3QqIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmZ1
bmN0aW9uKCk7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biB0aGlzW1JlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7IH0K
ICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gOTAxOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDYgQEAgSklUOjpK
SVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQgogICAgICwgbV9nbG9iYWxEYXRhKGds
b2JhbERhdGEpCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2xhYmVscyhj
b2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCi0gICAgLCBt
X2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+
bnVtYmVyT2ZDYWxsTGlua0luZm9zKCkgOiAwKQogICAgICwgbV9ieXRlY29kZU9mZnNldCgodW5z
aWduZWQpLTEpCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAsIG1fanVtcFRhcmdldEluZGV4
KDApCkBAIC0zNDcsNyArMzQ2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0g
bV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpKTsKKyAgICBBU1NFUlQobV9jYWxs
TGlua0luZm9JbmRleCA9PSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUo
KSk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3Vh
cmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCkBAIC00NTAsNyArNDQ5LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICB9CiAKICAgICBBU1NFUlQobV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uSW5kZXggPT0gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5z
aXplKCkpOwotICAgIEFTU0VSVChtX2NhbGxMaW5rSW5mb0luZGV4ID09IG1fY29kZUJsb2NrLT5u
dW1iZXJPZkNhbGxMaW5rSW5mb3MoKSk7CisgICAgQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXgg
PT0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogCiAjaWZuZGVm
IE5ERUJVRwogICAgIC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0
aCBBU1NFUlRzLgpAQCAtNTc0LDEwICs1NzMsMTEgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21w
aWxlKENvZGVQdHIqIGZ1bgogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jYWxs
UmV0dXJuTG9jYXRpb24pOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVn
aW4pOwogICAgIH0KKyAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1f
Y2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kp
IHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5m
byhpKTsKICAgICAgICAgaW5mby5pc0NhbGwgPSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvW2ldLmlzQ2FsbDsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9u
SW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiA9IENvZGVMb2NhdGlvblBvc3NpYmx5TmVhckNhbGwocGF0Y2hCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVy
bkxvY2F0aW9uKSk7CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZihtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdp
bik7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVy
KTsKICAgICB9CkBAIC01OTIsNyArNTkyLDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxl
KENvZGVQdHIqIGZ1bgogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5
QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CiAKLSAgICBy
ZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CisgICAgcmV0dXJuIEpJVENvZGUocGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlKCksIEpJVENvZGU6OkJhc2VsaW5lSklUKTsKIH0KIAogdm9p
ZCBKSVQ6OmxpbmtDYWxsKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2ssIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKSVQ6OkNvZGVQdHIgY29kZSwgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8sIGludCBjYWxsZXJBcmdDb3VudCwgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQpAQCAtNjA4LDcgKzYwOCw3IEBAIHZvaWQgSklUOjpsaW5rQ2FsbChKU0Z1
bmN0aW9uKiBjYWxsZWUsIEMKICAgICB9CiAKICAgICAvLyBwYXRjaCB0aGUgY2FsbCBzbyB3ZSBk
byBub3QgY29udGludWUgdG8gdHJ5IHRvIGxpbmsuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Y2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlWaXJ0dWFsQ2FsbCgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25O
ZWFyQ2FsbChjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiksIGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmxpbmtDb25zdHJ1Y3Qo
SlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2Nr
KiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0ciBjb2RlLCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgaW50IGNhbGxlckFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCkBA
IC02MjQsNyArNjI0LDcgQEAgdm9pZCBKSVQ6OmxpbmtDb25zdHJ1Y3QoSlNGdW5jdGlvbiogY2Fs
bAogICAgIH0KIAogICAgIC8vIHBhdGNoIHRoZSBjYWxsIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0
byB0cnkgdG8gbGluay4KLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNh
bGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1
Y3QoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoY2Fs
bExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24pLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
VmlydHVhbENvbnN0cnVjdCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDkwMTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYg
KzEzMiw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKIAogICAg
IGFkZFNsb3dDYXNlKGp1bXBUb1Nsb3cpOwogICAgIEFTU0VSVF9KSVRfT0ZGU0VUKGRpZmZlcmVu
Y2VCZXR3ZWVuKGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIGp1bXBUb1Nsb3cpLCBwYXRj
aE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXApOworICAgIAorICAgIEFTU0VSVChtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Cisg
ICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5hcHBlbmQoU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mbygpKTsKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5j
dGlvbkNoZWNrOwogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmlzQ2FsbCA9IG9wY29kZUlEICE9IG9wX2NvbnN0cnVjdDsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDkwMTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE3ICsz
NywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBj
bGFzcyBSZWdpc3RlckZpbGU7Ci0KKyAgICAKICAgICBjbGFzcyBKSVRDb2RlIHsKICAgICAgICAg
dHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29kZVJlZjsKICAgICAgICAgdHlwZWRlZiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0g
SklUVHlwZSB7IEhvc3RDYWxsVGh1bmssIEJhc2VsaW5lSklULCBERkdKSVQgfTsKKwogICAgICAg
ICBKSVRDb2RlKCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgSklUQ29kZShjb25z
dCBDb2RlUmVmIHJlZikKKyAgICAgICAgSklUQ29kZShjb25zdCBDb2RlUmVmIHJlZiwgSklUVHlw
ZSBqaXRUeXBlKQogICAgICAgICAgICAgOiBtX3JlZihyZWYpCisgICAgICAgICAgICAsIG1faml0
VHlwZShqaXRUeXBlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtOTMsMTIgKzk2LDE3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9yZWYubV9l
eGVjdXRhYmxlUG9vbC5nZXQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSklUVHlw
ZSBqaXRUeXBlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faml0VHlwZTsKKyAg
ICAgICAgfQogCiAgICAgICAgIC8vIEhvc3QgZnVuY3Rpb25zIGFyZSBhIGJpdCBzcGVjaWFsOyB0
aGV5IGhhdmUgYSBtX2NvZGUgcG9pbnRlciBidXQgdGhleQogICAgICAgICAvLyBkbyBub3QgaW5k
aXZpZHVsbHkgcmVmIHRoZSBleGVjdXRhYmxlIHBvb2wgY29udGFpbmluZyB0aGUgdHJhbXBvbGlu
ZS4KICAgICAgICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1bmN0aW9uKENvZGVQdHIgY29kZSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVENvZGUoY29kZS5kYXRhTG9jYXRpb24oKSwg
MCwgMCk7CisgICAgICAgICAgICByZXR1cm4gSklUQ29kZShjb2RlLmRhdGFMb2NhdGlvbigpLCAw
LCAwLCBIb3N0Q2FsbFRodW5rKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKQpA
QCAtMTA4LDEyICsxMTYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIEpJVENvZGUodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxl
UG9vbD4gZXhlY3V0YWJsZVBvb2wsIHNpemVfdCBzaXplKQorICAgICAgICBKSVRDb2RlKHZvaWQq
IGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qg
c2l6ZSwgSklUVHlwZSBqaXRUeXBlKQogICAgICAgICAgICAgOiBtX3JlZihjb2RlLCBleGVjdXRh
YmxlUG9vbCwgc2l6ZSkKKyAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAg
IHsKICAgICAgICAgfQogCiAgICAgICAgIENvZGVSZWYgbV9yZWY7CisgICAgICAgIEpJVFR5cGUg
bV9qaXRUeXBlOwogICAgIH07CiAKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiA5MDE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE1
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNz
IE5hdGl2ZUV4ZWN1dGFibGU7CiAgICAgY2xhc3MgVlB0ckhhY2tFeGVjdXRhYmxlOworICAgIG5h
bWVzcGFjZSBERkcgeworICAgICAgICBjbGFzcyBKSVRDb2RlR2VuZXJhdG9yOworICAgIH0KIAog
ICAgIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKik7CiAKICAgICBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTT2Jq
ZWN0V2l0aEdsb2JhbE9iamVjdCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBERkc6OkpJVENvZGVHZW5lcmF0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKU0dsb2JhbERhdGE7CiAKICAgICAgICAgdHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmpl
Y3QgQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5oCShyZXZpc2lvbiA5MDE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOwogI2lmIEVOQUJMRShKSVQpCiAg
ICAgICAgIFJldHVybkFkZHJlc3NQdHIgZXhjZXB0aW9uTG9jYXRpb247CisgICAgICAgIEpTVmFs
dWUgaG9zdENhbGxSZXR1cm5WYWx1ZTsKICNlbmRpZgogCiAgICAgICAgIEhhc2hNYXA8T3BhcXVl
SlNDbGFzcyosIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xhc3NEYXRhOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99547</attachid>
            <date>2011-07-01 23:52:34 -0700</date>
            <delta_ts>2011-07-02 00:36:46 -0700</delta_ts>
            <desc>the patch (fix conflict)</desc>
            <filename>call_patch_2.diff</filename>
            <type>text/plain</type>
            <size>81221</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAK
KzIwMTEtMDctMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IGlt
cGxlbWVudCBvcF9jYWxsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM4NTgKKworICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbDo6Q29kZUxvY2F0aW9uUG9z
c2libHlOZWFyQ2FsbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0TnVtYmVyT2ZDYWxsTGlua0lu
Zm9zKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0FsaWFz
VHJhY2tlci5oOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6bG9va3VwR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6ZXF1YWxJZ25vcmluZ0xhdGVy
TnVtZXJpY0NvbnZlcnNpb24pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRk
VmFyQXJnQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcmVkaWN0
SW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJz
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6cmVmQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6YWRkcmVzc09mQ2Fs
bERhdGEpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlY29yZDo6Q2FsbFJlY29yZCk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEpTQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OlByb3BlcnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vz
c1JlY29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpTQ2FsbFJlY29yZDo6
SlNDYWxsUmVjb3JkKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
aGlsZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmZpcnN0Q2hpbGQpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Om51bUNoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpiYXNp
Y0FyaXRoT3ApOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25z
Lmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRm
Z0xpbmtDYWxsKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmRldGVjdFBlZXBIb2xlQnJhbmNo
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhl
Y1N0YXRlOjpjYWxsZWVBc1ZhbHVlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtDb25zdHJ1Y3QpOgorICAgICAgICAqIGppdC9K
SVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAg
KiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAg
ICAgKEpTQzo6SklUQ29kZTo6aml0VHlwZSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RG
dW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuaDoKKwogMjAxMS0wNy0wMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIElFIFdlYiBXb3JrZXJzIGRlbW8gY3Jhc2hlcyBpbiBKU0M6
OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTksNiArMTE5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21t
b24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KIH07CiAKK2NsYXNzIENvZGVM
b2NhdGlvblBvc3NpYmx5TmVhckNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsKK3B1
YmxpYzoKKyAgICBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKCkge30KKyAgICBleHBsaWNp
dCBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2Nh
dGlvbikKKyAgICAgICAgOiBDb2RlTG9jYXRpb25Db21tb24obG9jYXRpb24pIHt9CisgICAgZXhw
bGljaXQgQ29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbCh2b2lkKiBsb2NhdGlvbikKKyAgICAg
ICAgOiBDb2RlTG9jYXRpb25Db21tb24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkg
e30KK307CisKIGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVibGljIENvZGVMb2Nh
dGlvbkNvbW1vbiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIoKSB7fQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkJ5dGVj
b2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJERkdPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKICNp
bmNsdWRlICJKU0FjdGl2YXRpb24uaCIKQEAgLTE2ODcsNyArMTY4OCwxMCBAQCB2b2lkIENvZGVC
bG9jazo6dW5saW5rQ2FsbHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsTGlu
a0luZm9zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmICghbV9jYWxsTGlua0luZm9zW2ldLmlz
TGlua2VkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsobV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9jYWxsTGlua0lu
Zm9zW2ldLmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGlu
aygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7
CisgICAgICAgIGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkK
KyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwobV9jYWxs
TGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiksIERGRzo6b3BlcmF0aW9uTGlua0NhbGwp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9j
YXRpb25OZWFyQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9j
YWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1
YWxDYWxsTGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVj
dExpbmsoKSk7CiAgICAgICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKICAgICB9CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsUmV0
dXJuTG9jYXRpb247CisgICAgICAgIENvZGVMb2NhdGlvblBvc3NpYmx5TmVhckNhbGwgY2FsbFJl
dHVybkxvY2F0aW9uOyAvLyBpdCdzIGEgbmVhciBjYWxsIGluIHRoZSBvbGQgSklULCBvciBhIG5v
cm1hbCBjYWxsIGluIERGRwogICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgaG90UGF0
aEJlZ2luOwogICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXI7CiAgICAg
ICAgIEpJVFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBjYWxsZWU7CkBAIC0zNzgsOCArMzc4LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEdsb2JhbFJlc29sdmVJbmZvJiBnbG9iYWxSZXNv
bHZlSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZ2xvYmFsUmVzb2x2ZUluZm9zW2luZGV4XTsg
fQogICAgICAgICBib29sIGhhc0dsb2JhbFJlc29sdmVJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCk7CiAKKyAgICAgICAgdm9pZCBzZXROdW1iZXJPZkNhbGxMaW5r
SW5mb3Moc2l6ZV90IHNpemUpIHsgbV9jYWxsTGlua0luZm9zLmdyb3coc2l6ZSk7IH0KICAgICAg
ICAgc2l6ZV90IG51bWJlck9mQ2FsbExpbmtJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbExp
bmtJbmZvcy5zaXplKCk7IH0KLSAgICAgICAgdm9pZCBhZGRDYWxsTGlua0luZm8oKSB7IG1fY2Fs
bExpbmtJbmZvcy5hcHBlbmQoQ2FsbExpbmtJbmZvKCkpOyB9CisgICAgICAgIC8vdm9pZCBhZGRD
YWxsTGlua0luZm8oKSB7IG1fY2FsbExpbmtJbmZvcy5hcHBlbmQoQ2FsbExpbmtJbmZvKCkpOyB9
CiAgICAgICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKGludCBpbmRleCkgeyByZXR1cm4g
bV9jYWxsTGlua0luZm9zW2luZGV4XTsgfQogCiAgICAgICAgIHZvaWQgYWRkTWV0aG9kQ2FsbExp
bmtJbmZvcyh1bnNpZ25lZCBuKSB7IG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5ncm93KG4pOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY4NCwxMCArMTY4NCw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Q2FsbCgKIAogICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0lu
Zm8oKTsKLSNlbmRpZgotCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIGVtaXRPcGNvZGUob3Bjb2Rl
SUQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYwpA
QCAtMTgwMSwxMCArMTc5Nyw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Q29uc3QKIAogICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0lu
Zm8oKTsKLSNlbmRpZgotCiAgICAgZW1pdE9wY29kZShvcF9jb25zdHJ1Y3QpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChjYWxsQXJndW1lbnRzLmNvdW50KCkpOyAvLyBhcmdDb3VudApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCShyZXZpc2lvbiA5MDMx
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gVGhpcyBj
aGVjayBlbnN1cmVzIHRoZSBhY2Nlc3NlcyBhbGlhcywgcHJvdmlkZWQgdGhhdCB0aGUgc3Vic2Ny
aXB0IGlzIGFuCiAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4ICh0aGlzIGlzIGdvb2QgZW5v
dWdoOyB0aGUgc3BlY3VsYXRpdmUgcGF0aCB3aWxsIG9ubHkgZ2VuZXJhdGUKICAgICAgICAgICAg
IC8vIG9wdGltaXplZCBhY2Nlc3NlcyB0byBoYW5kbGUgaW50ZWdlciBzdWJzY3JpcHRzKS4KLSAg
ICAgICAgICAgIGlmIChwb3NzaWJsZUFsaWFzLmNoaWxkMSA9PSBiYXNlICYmIGVxdWFsSWdub3Jp
bmdMYXRlck51bWVyaWNDb252ZXJzaW9uKHBvc3NpYmxlQWxpYXMuY2hpbGQyLCBwcm9wZXJ0eSkp
CisgICAgICAgICAgICBpZiAocG9zc2libGVBbGlhcy5jaGlsZDEoKSA9PSBiYXNlICYmIGVxdWFs
SWdub3JpbmdMYXRlck51bWVyaWNDb252ZXJzaW9uKHBvc3NpYmxlQWxpYXMuY2hpbGQyKCksIHBy
b3BlcnR5KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFs
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb05vZGU7CkBAIC0xMDYsNyArMTA2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgTm9kZSYgbm9kZTIgPSBtX2dyYXBoW29wMl07Ci0gICAgICAgIHJldHVybiAo
bm9kZTIub3AgPT0gVmFsdWVUb051bWJlciB8fCBub2RlMi5vcCA9PSBWYWx1ZVRvSW50MzIpICYm
IG9wMSA9PSBub2RlMi5jaGlsZDE7CisgICAgICAgIHJldHVybiAobm9kZTIub3AgPT0gVmFsdWVU
b051bWJlciB8fCBub2RlMi5vcCA9PSBWYWx1ZVRvSW50MzIpICYmIG9wMSA9PSBub2RlMi5jaGls
ZDEoKTsKICAgICB9CiAKICAgICAvLyBUaGUgZ3JhcGgsIHRvIGxvb2sgdXAgcG90ZW50aWFsbHkg
YWxpYXNpbmcgbm9kZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiAr
NjIsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMoY29kZUJsb2NrLT5tX251
bVBhcmFtZXRlcnMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMoY29kZUJsb2NrLT5tX251bUNhbGxl
ZVJlZ2lzdGVycykKICAgICAgICAgLCBtX3ByZXNlcnZlZFZhcnMoY29kZUJsb2NrLT5tX251bVZh
cnMpCisgICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygwKQorICAgICAgICAsIG1fbnVtUGFzc2Vk
VmFyQXJncygwKQogICAgIHsKICAgICB9CiAKQEAgLTEyNCw3ICsxMjYsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsK
LSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMTsKKyAgICAgICAgICAgIHJldHVybiBub2Rl
LmNoaWxkMSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRl
bXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLApAQCAtMTU1LDcgKzE1Nyw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gU2V0TG9jYWwp
OwotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxOworICAgICAgICAgICAgcmV0dXJuIG5v
ZGUuY2hpbGQxKCk7CiAgICAgICAgIH0KIAogICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9H
cmFwaChQaGkpOwpAQCAtMTkxLDcgKzE5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CiAKICAgICAgICAgaWYgKG5vZGUub3AgPT0gVUludDMyVG9OdW1iZXIpCi0gICAg
ICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDE7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGls
ZDEoKTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgbnVtZXJpYyBjb25zdGFudHMgYm94ZWQgYXMg
SlNWYWx1ZXMuCiAgICAgICAgIGlmIChub2RlLm9wID09IEpTQ29uc3RhbnQpIHsKQEAgLTM4Miw2
ICszODQsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdEluZGV4OwogICAgIH0KKyAgICAKKyAgICBOb2RlSW5k
ZXggYWRkVG9HcmFwaChOb2RlOjpWYXJBcmdUYWcsIE5vZGVUeXBlIG9wKQorICAgIHsKKyAgICAg
ICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKKyAg
ICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRl
eCwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywg
bV9udW1QYXNzZWRWYXJBcmdzKSk7CisgICAgICAgIAorICAgICAgICBtX251bVBhc3NlZFZhckFy
Z3M9MDsKKyAgICAgICAgCisgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCisgICAg
ICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHRJ
bmRleDsKKyAgICB9CisgICAgdm9pZCBhZGRWYXJBcmdDaGlsZChOb2RlSW5kZXggY2hpbGQpCisg
ICAgeworICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAg
ICAgICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CisgICAgfQogCiAgICAgdm9pZCBwcmVkaWN0QXJy
YXkoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBAIC0zOTYsMTAgKzQxNSwxMCBAQCBwcml2
YXRlOgogICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKIAogICAg
ICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVmFsdWVUb051bWJlcikKLSAgICAgICAgICAgIG5vZGVQ
dHIgPSAmbV9ncmFwaFtub2RlUHRyLT5jaGlsZDFdOworICAgICAgICAgICAgbm9kZVB0ciA9ICZt
X2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKIAogICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0g
VmFsdWVUb0ludDMyKQotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVQdHItPmNo
aWxkMV07CisgICAgICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCld
OwogCiAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgIG1f
Z3JhcGgucHJlZGljdChub2RlUHRyLT5sb2NhbCgpLCBQcmVkaWN0SW50MzIpOwpAQCAtNDUzLDYg
KzQ3MiwxMyBAQCBwcml2YXRlOgogICAgIC8vIHR5cGljYWxseSBlcXVhbCB0byB0aGUgbnVtYmVy
IHZhcnMsIGJ1dCB3ZSBleHBhbmQgdGhpcyB0byBjb3ZlciBhbGwKICAgICAvLyB0ZW1wb3Jhcmll
cyB0aGF0IHBlcnNpc3QgYWNyb3NzIGJsb2NrcyAoZHVlcyB0byA/OiwgJiYsIHx8LCBldGMpLgog
ICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFyczsKKyAgICAvLyBUaGUgbnVtYmVyIG9mIHNsb3Rz
IChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8KKyAgICAvLyBw
cmVhbGxvY2F0ZSBmb3IgY2FsbHMgZW1hbmF0aW5nIGZyb20gdGhpcyBmcmFtZS4gIFRoaXMgaW5j
bHVkZXMgdGhlCisgICAgLy8gc2l6ZSBvZiB0aGUgQ2FsbEZyYW1lLCBvbmx5IGlmIHRoaXMgaXMg
bm90IGEgbGVhZiBmdW5jdGlvbi4gIChJLmUuCisgICAgLy8gdGhpcyBpcyAwIGlmIGFuZCBvbmx5
IGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBsZWFmLikKKyAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNs
b3RzOworICAgIC8vIFRoZSBudW1iZXIgb2YgdmFyIGFyZ3MgcGFzc2VkIHRvIHRoZSBuZXh0IHZh
ciBhcmcgbm9kZS4KKyAgICB1bnNpZ25lZCBtX251bVBhc3NlZFZhckFyZ3M7CiAKICAgICBzdHJ1
Y3QgUGhpU3RhY2tFbnRyeSB7CiAgICAgICAgIFBoaVN0YWNrRW50cnkoQmFzaWNCbG9jayogYmxv
Y2ssIE5vZGVJbmRleCBwaGksIHVuc2lnbmVkIHZhck5vKQpAQCAtOTU3LDYgKzk4MywzMCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRU
b0dyYXBoKFJldHVybiwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAg
ICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBpbnQgYXJnQ291
bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBmaXJzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0IC0gYXJnQ291bnQgLSBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICBmb3IgKGludCBhcmdJZHggPSBm
aXJzdEFyZzsgYXJnSWR4IDwgZmlyc3RBcmcgKyBhcmdDb3VudDsgYXJnSWR4KyspCisgICAgICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ0lkeCkpOworICAgICAgICAgICAgTm9kZUlu
ZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgQ2FsbCk7CisgICAgICAgICAgICBJ
bnN0cnVjdGlvbiAqcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVf
TEVOR1RIKG9wX2NhbGwpOworICAgICAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJ
RChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKKyAgICAg
ICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsKTsKKyAgICAg
ICAgICAgIGlmIChSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyAodW5zaWduZWQp
YXJnQ291bnQgPiBtX3BhcmFtZXRlclNsb3RzKQorICAgICAgICAgICAgICAgIG1fcGFyYW1ldGVy
U2xvdHMgPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsKKyAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBvcF9jYWxsX3B1dF9yZXN1bHQ6IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgICAgICAgICBJbnN0cnVjdGlvbiogY2FsbEluc3RydWN0aW9uID0gY3VycmVudEluc3Ry
dWN0aW9uIC0gT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKKyAgICAgICAgICAgIEFTU0VSVChpbnRl
cnByZXRlci0+Z2V0T3Bjb2RlSUQoY2FsbEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2Fs
bCk7CisjZW5kaWYKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfcHV0X3Jlc3VsdCk7
CisgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8gUGFyc2UgZmFp
bGVkIQpAQCAtOTg5LDIyICsxMDM5LDIyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQ
aGlTdGFjaygpCiAgICAgICAgICAgICAgICAgdmFyLnZhbHVlID0gdmFsdWVJblByZWRlY2Vzc29y
OwogICAgICAgICAgICAgICAgIHBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KHByZWRlY2Vz
c29yQmxvY2ssIHZhbHVlSW5QcmVkZWNlc3NvciwgdmFyTm8pKTsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExvY2FsKQotICAgICAg
ICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29y
XS5jaGlsZDE7CisgICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2
YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpOwogICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhb
dmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVk
ZWNlc3Nvcl0ub3AgPT0gUGhpKTsKIAogICAgICAgICAgICAgaWYgKHBoaU5vZGUucmVmQ291bnQo
KSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZih2YWx1ZUluUHJlZGVjZXNzb3IpOwogCi0g
ICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDEgPT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAg
ICAgcGhpTm9kZS5jaGlsZDEgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICBpZiAo
cGhpTm9kZS5jaGlsZDEoKSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLmNo
aWxkcmVuLmZpeGVkLmNoaWxkMSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxk
MiA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgICAgICBwaGlOb2RlLmNoaWxkMiA9IHZhbHVlSW5Q
cmVkZWNlc3NvcjsKKyAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMigpID09IE5vTm9kZSkg
eworICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gdmFsdWVJ
blByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQzID09IE5vTm9kZSkgewotICAgICAgICAgICAg
ICAgIHBoaU5vZGUuY2hpbGQzID0gdmFsdWVJblByZWRlY2Vzc29yOworICAgICAgICAgICAgaWYg
KHBoaU5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAgICAgcGhpTm9kZS5j
aGlsZHJlbi5maXhlZC5jaGlsZDMgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAgLTEwMTMsMTMgKzEwNjMsMTMgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgIGlmIChwaGlO
b2RlLnJlZkNvdW50KCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobmV3UGhpKTsKIAot
ICAgICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZDEgPSBwaGlOb2RlLmNoaWxkMTsKLSAgICAgICAg
ICAgIG5ld1BoaU5vZGUuY2hpbGQyID0gcGhpTm9kZS5jaGlsZDI7Ci0gICAgICAgICAgICBuZXdQ
aGlOb2RlLmNoaWxkMyA9IHBoaU5vZGUuY2hpbGQzOwotCi0gICAgICAgICAgICBwaGlOb2RlLmNo
aWxkMSA9IG5ld1BoaTsKLSAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQxID0gdmFsdWVJblByZWRl
Y2Vzc29yOwotICAgICAgICAgICAgcGhpTm9kZS5jaGlsZDMgPSBOb05vZGU7CisgICAgICAgICAg
ICBuZXdQaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHBoaU5vZGUuY2hpbGQxKCk7Cisg
ICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IHBoaU5vZGUuY2hp
bGQyKCk7CisgICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IHBo
aU5vZGUuY2hpbGQzKCk7CisKKyAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hp
bGQxID0gbmV3UGhpOworICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEg
PSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVk
LmNoaWxkMyA9IE5vTm9kZTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEwNDcsOSArMTA5Nywx
MCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpCiAgICAgdW5zaWdu
ZWQgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzID0gbV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCktPmVuZDsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVFeGNsdWRpbmdQaGlOb2RlczsgKytpKSB7
CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2ldOworICAgICAgICAKICAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQorICAgICAg
ICAKICAgICAgICAgLy8gR2V0TG9jYWwgbm9kZXMgYXJlIGVmZmVjdGl2ZWx5IHBoaSBub2RlcyBp
biB0aGUgZ3JhcGgsIHJlZmVyZW5jaW5nCiAgICAgICAgIC8vIHJlc3VsdHMgZnJvbSBwcmlvciBi
bG9ja3MuCiAgICAgICAgIGlmIChub2RlLm9wICE9IEdldExvY2FsKSB7CkBAIC0xMDU3LDkgKzEx
MDgsMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVWaXJ0dWFsUmVnaQogICAgICAg
ICAgICAgLy8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8g
c28gaW4gdGhpcwogICAgICAgICAgICAgLy8gb3JkZXIgc28gdGhhdCBpZiBhIGNoaWxkIGlzIG9u
IGl0cyBsYXN0IHVzZSwgYW5kIGEKICAgICAgICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBpcyBm
cmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2VkIGZvciBub2RlLgotICAgICAgICAgICAgc2NvcmVC
b2FyZC51c2Uobm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5j
aGlsZDIpOwotICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMpOworICAgICAg
ICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2Rl
LmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAg
ICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQu
dXNlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUu
Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQzKCkp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFub2RlLmhhc1Jlc3Vs
dCgpKQpAQCAtMTA3NSw3ICsxMTMxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVW
aXJ0dWFsUmVnaQogICAgIC8vICdtX251bUNhbGxlZVJlZ2lzdGVycycgaXMgdGhlIG51bWJlciBv
ZiBsb2NhbHMgYW5kIHRlbXBvcmFyaWVzIGFsbG9jYXRlZAogICAgIC8vIGZvciB0aGUgZnVuY3Rp
b24gKGFuZCBjaGVja2VkIGZvciBvbiBlbnRyeSkuIFNpbmNlIHdlIHBlcmZvcm0gYSBuZXcgYW5k
CiAgICAgLy8gZGlmZmVyZW50IGFsbG9jYXRpb24gb2YgdGVtcG9yYXJpZXMsIG1vcmUgcmVnaXN0
ZXJzIG1heSBub3cgYmUgcmVxdWlyZWQuCi0gICAgdW5zaWduZWQgY2FsbGVlUmVnaXN0ZXJzID0g
c2NvcmVCb2FyZC5hbGxvY2F0ZWRDb3VudCgpICsgbV9wcmVzZXJ2ZWRWYXJzOworICAgIHVuc2ln
bmVkIGNhbGxlZVJlZ2lzdGVycyA9IHNjb3JlQm9hcmQuYWxsb2NhdGVkQ291bnQoKSArIG1fcHJl
c2VydmVkVmFycyArIG1fcGFyYW1ldGVyU2xvdHM7CiAgICAgaWYgKCh1bnNpZ25lZCltX2NvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgPCBjYWxsZWVSZWdpc3RlcnMpCiAgICAgICAgIG1f
Y29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyA9IGNhbGxlZVJlZ2lzdGVyczsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5MDMxMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogZGZnT3BOYW1lc1tdID0gewog
I3VuZGVmIFNUUklOR0laRV9ERkdfT1BfRU5VTQogfTsKIAorY29uc3QgY2hhciAqR3JhcGg6Om9w
TmFtZShOb2RlVHlwZSBvcCkKK3sKKyAgICByZXR1cm4gZGZnT3BOYW1lc1tvcCAmIE5vZGVJZE1h
c2tdOworfQorCiB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvZGVCbG9j
ayogY29kZUJsb2NrKQogewogICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwpAQCAtNzUs
MTQgKzgwLDI1IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAg
ICAgICAgcHJpbnRmKCIldSIsIG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIGVsc2UKICAg
ICAgICAgcHJpbnRmKCItIik7Ci0gICAgcHJpbnRmKCI+XHQlcygiLCBkZmdPcE5hbWVzW29wICYg
Tm9kZUlkTWFza10pOwotICAgIGlmIChub2RlLmNoaWxkMSAhPSBOb05vZGUpCi0gICAgICAgIHBy
aW50ZigiQCV1Iiwgbm9kZS5jaGlsZDEpOwotICAgIGlmIChub2RlLmNoaWxkMiAhPSBOb05vZGUp
Ci0gICAgICAgIHByaW50ZigiLCBAJXUiLCBub2RlLmNoaWxkMik7Ci0gICAgaWYgKG5vZGUuY2hp
bGQzICE9IE5vTm9kZSkKLSAgICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQzKTsKLSAg
ICBib29sIGhhc1ByaW50ZWQgPSBub2RlLmNoaWxkMSAhPSBOb05vZGU7CisgICAgcHJpbnRmKCI+
XHQlcygiLCBvcE5hbWUob3ApKTsKKyAgICBib29sIGhhc1ByaW50ZWQ7CisgICAgaWYgKG9wICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUu
Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGls
ZHJlbigpOyBjaGlsZElkeCsrKSB7CisgICAgICAgICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAg
ICAgICAgICAgICBwcmludGYoIiwgIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgICAgICAgICBwcmludGYoIkAldSIsIG1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChub2RlLmNoaWxkMSgpICE9IE5vTm9kZSkKKyAgICAgICAgICAgIHByaW50ZigiQCV1Iiwgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChub2RlLmNoaWxkMigpICE9IE5vTm9kZSkKKyAgICAg
ICAgICAgIHByaW50ZigiLCBAJXUiLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgaWYgKG5vZGUu
Y2hpbGQzKCkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hp
bGQzKCkpOworICAgICAgICBoYXNQcmludGVkID0gbm9kZS5jaGlsZDEoKSAhPSBOb05vZGU7Cisg
ICAgfQogCiAgICAgaWYgKG5vZGUuaGFzVmFyTnVtYmVyKCkpIHsKICAgICAgICAgcHJpbnRmKCIl
c3ZhciV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS52YXJOdW1iZXIoKSk7CkBAIC0x
MzgsMjEgKzE1NCwyNiBAQCB2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCiB7
CiAgICAgTm9kZSYgbm9kZSA9IGF0KG9wKTsKIAotICAgIGlmIChub2RlLmNoaWxkMSA9PSBOb05v
ZGUpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQyID09IE5vTm9kZSAmJiBub2RlLmNoaWxk
MyA9PSBOb05vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHJlZihub2RlLmNoaWxk
MSk7Ci0KLSAgICBpZiAobm9kZS5jaGlsZDIgPT0gTm9Ob2RlKSB7Ci0gICAgICAgIEFTU0VSVChu
b2RlLmNoaWxkMyA9PSBOb05vZGUpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKG5vZGUub3Ag
JiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9k
ZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNo
aWxkcmVuKCk7IGNoaWxkSWR4KyspCisgICAgICAgICAgICByZWYobV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IE5v
Tm9kZSkgeworICAgICAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQyKCkgPT0gTm9Ob2RlICYmIG5v
ZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICByZWYobm9kZS5jaGlsZDEoKSk7CisKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkg
PT0gTm9Ob2RlKSB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDMoKSA9PSBOb05vZGUp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlZihub2RlLmNoaWxk
MigpKTsKKworICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHJlZihub2RlLmNoaWxkMygpKTsKICAgICB9Ci0gICAgcmVmKG5v
ZGUuY2hpbGQyKTsKLQotICAgIGlmIChub2RlLmNoaWxkMyA9PSBOb05vZGUpCi0gICAgICAgIHJl
dHVybjsKLSAgICByZWYobm9kZS5jaGlsZDMpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5MDMx
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtMTYwLDcgKzE2MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9u
ZTsKICAgICB9CiAKKyNpZm5kZWYgTkRFQlVHCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKm9wTmFt
ZShOb2RlVHlwZSk7CisjZW5kaWYKKwogICAgIFZlY3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwg
OD4gbV9ibG9ja3M7CisgICAgVmVjdG9yPE5vZGVJbmRleCwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47
CiBwcml2YXRlOgogCiAgICAgLy8gV2hlbiBhIG5vZGUncyByZWZDb3VudCBnb2VzIGZyb20gMCB0
byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5IHJlZiBhbGwgb2YgaXRzIGNoaWxk
cmVuLCBhbmQgdmljZSB2ZXJzYS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDAsMjQgKzMwMCwyOSBAQCBHUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFs
dWUoTm9kCiAKIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6dXNlQ2hpbGRyZW4oTm9kZSYgbm9kZSkK
IHsKLSAgICBOb2RlSW5kZXggY2hpbGQxID0gbm9kZS5jaGlsZDE7Ci0gICAgaWYgKGNoaWxkMSA9
PSBOb05vZGUpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQyID09IE5vTm9kZSAmJiBub2Rl
LmNoaWxkMyA9PSBOb05vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHVzZShjaGls
ZDEpOwotCi0gICAgTm9kZUluZGV4IGNoaWxkMiA9IG5vZGUuY2hpbGQyOwotICAgIGlmIChjaGls
ZDIgPT0gTm9Ob2RlKSB7Ci0gICAgICAgIEFTU0VSVChub2RlLmNoaWxkMyA9PSBOb05vZGUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHVzZShjaGlsZDIpOwotCi0gICAgTm9kZUluZGV4
IGNoaWxkMyA9IG5vZGUuY2hpbGQzOwotICAgIGlmIChjaGlsZDMgPT0gTm9Ob2RlKQotICAgICAg
ICByZXR1cm47Ci0gICAgdXNlKGNoaWxkMyk7CisgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFy
QXJncykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxk
KCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNo
aWxkSWR4KyspCisgICAgICAgICAgICB1c2UobV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IG5v
ZGUuY2hpbGQxKCk7CisgICAgICAgIGlmIChjaGlsZDEgPT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICBBU1NFUlQobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgJiYgbm9kZS5jaGlsZDMoKSA9PSBOb05v
ZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHVzZShjaGlsZDEp
OworICAgICAgICAKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMiA9IG5vZGUuY2hpbGQyKCk7Cisg
ICAgICAgIGlmIChjaGlsZDIgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS5j
aGlsZDMoKSA9PSBOb05vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHVzZShjaGlsZDIpOworICAgICAgICAKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMyA9IG5v
ZGUuY2hpbGQzKCk7CisgICAgICAgIGlmIChjaGlsZDMgPT0gTm9Ob2RlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB1c2UoY2hpbGQzKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6Y2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJn
ZXQpCkBAIC00MjUsNiArNDMwLDg0IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0
QnlJZChHUFIKICAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhmdW5jdGlvbkNhbGwsIGNoZWNr
SW1tVG9DYWxsLCBjYWxsVG9DaGVjaywgY2FsbFRvU3RvcmUsIGNhbGxUb1Nsb3dDYXNlLCBjYWxs
VG9Eb25lLCBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGJhc2VHUFIpLCBzdGF0aWNfY2FzdDxpbnQ4X3Q+
KHZhbHVlR1BSKSwgc3RhdGljX2Nhc3Q8aW50OF90PihzY3JhdGNoR1BSKSk7CiB9CiAKK3ZvaWQg
SklUQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm9kZSwgR1BSUmVnIHRhcmdldEdQUikK
K3sKKyAgICAvLyB0aGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIGVpdGhlciB0
aGUgZnVuY3Rpb24gKG5vcm1hbCBjYWxsKSBvciB0aGUKKyAgICAvLyByZWNlaXZlciAobWV0aG9k
IGNhbGwpLiAgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KKyAgICBpbnQg
bnVtQXJncyA9IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgCisgICAgLy8gYW1vdW50IG9m
IHN0dWZmIChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8gcGxh
Y2UgYXQgdGhlCisgICAgLy8gdG9wIG9mIHRoZSBKUyBzdGFjay4KKyAgICBpbnQgY2FsbERhdGFT
aXplID0gMDsKKworICAgIC8vIGZpcnN0IHRoZXJlIGFyZSB0aGUgYXJndW1lbnRzCisgICAgY2Fs
bERhdGFTaXplICs9IG51bUFyZ3M7CisgICAgCisgICAgLy8gYW5kIHRoZW4gdGhlcmUgaXMgdGhl
IGNhbGwgZnJhbWUgaGVhZGVyCisgICAgY2FsbERhdGFTaXplICs9IFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAKKyAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobnVtQXJncykpKSwgYWRk
cmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSk7CisgICAgbV9qaXQu
c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGFkZHJlc3NPZkNhbGxEYXRhKFJl
Z2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKTsKKyAgICAKKyAgICBmb3IgKGludCBhcmdJZHggPSAw
OyBhcmdJZHggPCBudW1BcmdzOyBhcmdJZHgrKykgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmcodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgp
ICsgMSArIGFyZ0lkeF0pOworICAgICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOworICAg
ICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoYXJnR1BSLCBhZGRyZXNzT2ZDYWxsRGF0YSgt
Y2FsbERhdGFTaXplICsgYXJnSWR4KSk7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAobm9kZS5v
cCkgeworICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIodGFyZ2V0R1BSLCBh
ZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxlZSkpOworICAgICAgICBicmVhazsK
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIAorICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgCisgICAgR1BSUmVzdWx0IHJl
c3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
SklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoOworICAgIAorICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgIGNhc2Ug
Q2FsbDoKKyAgICAgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCB0YXJnZXRHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7CisgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGFyZ2V0R1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSksIHJlc3VsdEdQUik7CisgICAgICAg
IG1faml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxl
OjpTY29wZUNoYWluKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBtX2ppdC5hZGRQdHIo
SW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJl
Z2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgbV9qaXQubm90aWZ5
Q2FsbChmYXN0Q2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5m
byk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAg
ICAKKyAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQuYWRkUHRyKElt
bTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdp
c3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0LmFwcGVuZENhbGxXaXRo
RmFzdEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkxpbmtDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29t
cGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3Mp
LCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0
aW9uSW5mbyk7CisgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQu
bW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgIAorICAgIG1faml0LmFk
ZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIHRydWUsIG1faml0Lmdy
YXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworfQorCiAjaWZuZGVmIE5ERUJV
Rwogc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRTdHJpbmcoRGF0YUZvcm1hdCBmb3JtYXQp
CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIyLDYgKzUyMiwxMyBAQCBw
cm90ZWN0ZWQ6CiAgICAgCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBH
UFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwogICAgIHZvaWQgY2Fj
aGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcgc2NyYXRj
aEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKKyAgICAKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzT2ZDYWxsRGF0YShpbnQgaWR4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCAobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgaWR4KSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGVtaXRDYWxsKE5vZGUmLCBHUFJSZWcgdGFyZ2V0R1BSKTsKIAogICAgIC8vIENhbGxlZCBv
bmNlIGEgbm9kZSBoYXMgY29tcGxldGVkIGNvZGUgZ2VuZXJhdGlvbiBidXQgcHJpb3IgdG8gc2V0
dGluZwogICAgIC8vIGl0cyByZXN1bHQsIHRvIGZyZWUgdXAgaXRzIGNoaWxkcmVuLiAoVGhpcyBt
dXN0IGhhcHBlbiBwcmlvciB0byBzZXR0aW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk0
LDYgKzI5NCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICAg
ICAgICAgLy8gSWYgY29tcGlsYXRpb24gdGhyb3VnaCB0aGUgU3BlY3VsYXRpdmVKSVQgZmFpbGVk
LCB0aHJvdyBhd2F5IHRoZSBjb2RlIHdlIGdlbmVyYXRlZC4KICAgICAgICAgbV9jYWxscy5jbGVh
cigpOwogICAgICAgICBtX3Byb3BlcnR5QWNjZXNzZXMuY2xlYXIoKTsKKyAgICAgICAgbV9qc0Nh
bGxzLmNsZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3VsYXRpdmVQYXRoQmVnaW4p
OwogCiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3Igbm9DaGVja3M7CkBAIC0zNjksMTMg
KzM3MCwxNSBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAjZW5k
aWYKIAogICAgIC8vIExpbmsgYWxsIGNhbGxzIG91dCBmcm9tIHRoZSBKSVQgY29kZSB0byB0aGVp
ciByZXNwZWN0aXZlIGZ1bmN0aW9ucy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9j
YWxscy5zaXplKCk7ICsraSkKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fY2FsbHNbaV0ubV9j
YWxsLCBtX2NhbGxzW2ldLm1fZnVuY3Rpb24pOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NhbGxzW2ldLm1fZnVuY3Rp
b24udmFsdWUoKSkKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhtX2NhbGxzW2ldLm1fY2Fs
bCwgbV9jYWxsc1tpXS5tX2Z1bmN0aW9uKTsKKyAgICB9CiAKICAgICBpZiAobV9jb2RlQmxvY2st
Pm5lZWRzQ2FsbFJldHVybkluZGljZXMoKSkgewogICAgICAgICBtX2NvZGVCbG9jay0+Y2FsbFJl
dHVybkluZGV4VmVjdG9yKCkucmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvbkNoZWNrQ291bnQpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgaWYgKG1fY2FsbHNbaV0ubV9leGNlcHRpb25DaGVjay5pc1NldCgpKSB7Cisg
ICAgICAgICAgICBpZiAobV9jYWxsc1tpXS5tX2hhbmRsZXNFeGNlcHRpb25zKSB7CiAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgcmV0dXJuQWRkcmVzc09mZnNldCA9IGxpbmtCdWZmZXIucmV0dXJu
QWRkcmVzc09mZnNldChtX2NhbGxzW2ldLm1fY2FsbCk7CiAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZXhjZXB0aW9uSW5mbyA9IG1fY2FsbHNbaV0ubV9leGNlcHRpb25JbmZvOwogICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2FsbFJl
dHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQocmV0dXJuQWRkcmVzc09mZnNldCwgZXhjZXB0aW9u
SW5mbykpOwpAQCAtMzk2LDEzICszOTksMjIgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1
bmN0aW9uKEpJVENvZAogICAgICAgICBpbmZvLnZhbHVlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2Vz
W2ldLm1fdmFsdWVHUFI7CiAgICAgICAgIGluZm8udS51bnNldC5zY3JhdGNoR1BSID0gbV9wcm9w
ZXJ0eUFjY2Vzc2VzW2ldLm1fc2NyYXRjaEdQUjsKICAgICB9Ci0KKyAgICAKKyAgICBtX2NvZGVC
bG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fanNDYWxscy5zaXplKCkpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Q2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKKyAgICAg
ICAgaW5mby5pc0NhbGwgPSBtX2pzQ2FsbHNbaV0ubV9pc0NhbGw7CisgICAgICAgIGluZm8uY2Fs
bFJldHVybkxvY2F0aW9uID0gQ29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbChsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKKyAgICAgICAgaW5mby5ob3RQ
YXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9D
aGVjayk7CisgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwobV9qc0NhbGxzW2ldLm1fZmFzdENhbGwpOworICAgIH0KKyAgICAKICAgICAvLyBG
SVhNRTogc3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNoZWNrICYgYXJpdHkgY2hlY2sgb3ZlciB0
byBERkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1YnMuCiAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGxSZWdpc3RlckZpbGVDaGVjaywgY3RpX3JlZ2lzdGVyX2ZpbGVfY2hlY2spOwog
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPm1faXNDb25z
dHJ1Y3RvciA/IGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5
Q2hlY2spOwogCiAgICAgZW50cnlXaXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihhcml0eUNoZWNrKTsKLSAgICBlbnRyeSA9IGxpbmtCdWZmZXIuZmluYWxpemVDb2RlKCk7Cisg
ICAgZW50cnkgPSBKSVRDb2RlKGxpbmtCdWZmZXIuZmluYWxpemVDb2RlKCksIEpJVENvZGU6OkRG
R0pJVCk7CiB9CiAKICNpZiBERkdfSklUX0FTU0VSVApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYg
KzY1LDcgQEAgc3RydWN0IENhbGxSZWNvcmQgewogICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCiAgICAgICAgIDogbV9jYWxsKGNh
bGwpCiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX2hhbmRsZXNF
eGNlcHRpb25zKGZhbHNlKQogICAgIHsKICAgICB9CiAKQEAgLTc0LDYgKzc1LDE3IEBAIHN0cnVj
dCBDYWxsUmVjb3JkIHsKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogICAgICAgICAs
IG1fZXhjZXB0aW9uQ2hlY2soZXhjZXB0aW9uQ2hlY2spCiAgICAgICAgICwgbV9leGNlcHRpb25J
bmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0aW9ucyh0cnVlKQor
ICAgIHsKKyAgICB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciBmb3IgYSBjYWxsIHRoYXQgbWF5IGNh
dXNlIGV4Y2VwdGlvbnMsIGJ1dCB3aGljaCBhcmUgaGFuZGxlZAorICAgIC8vIHRocm91Z2ggc29t
ZSBtZWNoYW5pc20gb3RoZXIgdGhhbiB0aGUgaW4tbGluZSBleGNlcHRpb24gaGFuZGxlci4KKyAg
ICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0
aW9uLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8pCisgICAgICAgIDogbV9jYWxsKGNhbGwp
CisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX2V4Y2VwdGlvbklu
Zm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCiAg
ICAgewogICAgIH0KIApAQCAtODEsNiArOTMsNyBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAg
RnVuY3Rpb25QdHIgbV9mdW5jdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2V4Y2Vw
dGlvbkNoZWNrOwogICAgIEV4Y2VwdGlvbkluZm8gbV9leGNlcHRpb25JbmZvOworICAgIGJvb2wg
bV9oYW5kbGVzRXhjZXB0aW9uczsKIH07CiAKIC8vID09PSBKSVRDb21waWxlciA9PT0KQEAgLTE1
OCw2ICsxNzEsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3Rl
cikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKTsKICAgICB9CisgICAgCisgICAgLy8gTm90aWZ5IHRoZSBKSVQgb2YgYSBjYWxsIHRoYXQg
ZG9lcyBub3QgcmVxdWlyZSBsaW5raW5nLgorICAgIHZvaWQgbm90aWZ5Q2FsbChDYWxsIGNhbGws
IHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgeworICAgICAgICBtX2NhbGxzLmFwcGVuZChD
YWxsUmVjb3JkKGNhbGwsIEZ1bmN0aW9uUHRyKCksIGV4Y2VwdGlvbkluZm8pKTsKKyAgICB9CiAK
ICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlv
biBjaGVjay4KICAgICB2b2lkIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9u
KQpAQCAtMTc0LDYgKzE5MywxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENh
bGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlv
bkluZm8pKTsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICB9CisgICAgCisgICAg
Ly8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhIGZhc3QgZXhjZXB0aW9uIGNo
ZWNrIHRoYXQgdGVzdHMgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgorICAgIENhbGwgYXBw
ZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9u
LCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHsKKyAgICAgICAgQ2FsbCBmdW5jdGlvbkNh
bGwgPSBjYWxsKCk7CisgICAgICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBicmFuY2hUZXN0UHRy
KFplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQo
Q2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0
aW9uSW5mbykpOworICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOworICAgIH0KIAogICAgIC8v
IEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCiAgICAgYm9vbCBp
c0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCkBAIC0yMzcsNiArMjY1LDExIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQoUHJvcGVydHlBY2Nl
c3NSZWNvcmQoZnVuY3Rpb25DYWxsLCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBkZWx0YUNhbGxUb1N0
cnVjdENoZWNrLCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBk
ZWx0YUNhbGxUb0RvbmUsICBiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUikpOwogICAgIH0K
KyAgICAKKyAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBE
YXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2lnbmVkIGV4Y2VwdGlv
bkluZm8pCisgICAgeworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0
Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgZXhjZXB0aW9uSW5mbykpOwor
ICAgIH0KIAogcHJpdmF0ZToKICAgICAvLyBUaGVzZSBtZXRob2RzIHVzZWQgaW4gbGlua2luZyB0
aGUgc3BlY3VsYXRpdmUgJiBub24tc3BlY3VsYXRpdmUgcGF0aHMgdG9nZXRoZXIuCkBAIC0yNTks
NyArMjkyLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKIAog
ICAgIHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7Ci0gICAgICAgIFByb3BlcnR5QWNjZXNz
UmVjb3JkKEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50OF90IGRlbHRhQ2hlY2tJ
bW1Ub0NhbGwsIGludDhfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrLCBpbnQ4X3QgZGVsdGFDYWxs
VG9Mb2FkT3JTdG9yZSwgaW50OF90IGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGludDhfdCBkZWx0YUNh
bGxUb0RvbmUsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNo
R1BSKQorICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50
OF90IGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIGludDhfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrLCBp
bnQ4X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50OF90IGRlbHRhQ2FsbFRvU2xvd0Nhc2Us
IGludDhfdCBkZWx0YUNhbGxUb0RvbmUsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVHUFIs
IGludDhfdCBzY3JhdGNoR1BSKQogICAgICAgICAgICAgOiBtX2Z1bmN0aW9uQ2FsbChmdW5jdGlv
bkNhbGwpCiAgICAgICAgICAgICAsIG1fZGVsdGFDaGVja0ltbVRvQ2FsbChkZWx0YUNoZWNrSW1t
VG9DYWxsKQogICAgICAgICAgICAgLCBtX2RlbHRhQ2FsbFRvU3RydWN0Q2hlY2soZGVsdGFDYWxs
VG9TdHJ1Y3RDaGVjaykKQEAgLTI4Miw4ICszMTUsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgaW50
OF90IG1fdmFsdWVHUFI7CiAgICAgICAgIGludDhfdCBtX3NjcmF0Y2hHUFI7CiAgICAgfTsKKyAg
ICAKKyAgICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKKyAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwg
ZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29s
IGlzQ2FsbCwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICAgICAgICAgIDogbV9mYXN0Q2Fs
bChmYXN0Q2FsbCkKKyAgICAgICAgICAgICwgbV9zbG93Q2FsbChzbG93Q2FsbCkKKyAgICAgICAg
ICAgICwgbV90YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCisgICAgICAgICAgICAsIG1faXND
YWxsKGlzQ2FsbCkKKyAgICAgICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8p
CisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ2FsbCBtX2Zhc3RDYWxs
OworICAgICAgICBDYWxsIG1fc2xvd0NhbGw7CisgICAgICAgIERhdGFMYWJlbFB0ciBtX3Rhcmdl
dFRvQ2hlY2s7CisgICAgICAgIGJvb2wgbV9pc0NhbGw7CisgICAgICAgIHVuc2lnbmVkIG1fZXhj
ZXB0aW9uSW5mbzsKKyAgICB9OwogCiAgICAgVmVjdG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0
PiBtX3Byb3BlcnR5QWNjZXNzZXM7CisgICAgVmVjdG9yPEpTQ2FsbFJlY29yZCwgND4gbV9qc0Nh
bGxzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAgdHlwZWRl
ZiB1aW50MzJfdCBFeGNlcHRpb25JbmZvOwogI2RlZmluZSBOb2RlSXNKdW1wICAgICAgICAweDQw
MDAwCiAjZGVmaW5lIE5vZGVJc0JyYW5jaCAgICAgIDB4ODAwMDAKICNkZWZpbmUgTm9kZUlzVGVy
bWluYWwgICAweDEwMDAwMAorI2RlZmluZSBOb2RlSGFzVmFyQXJncyAgIDB4MjAwMDAwCiAKIC8v
IFRoZXNlIHZhbHVlcyByZWNvcmQgdGhlIHJlc3VsdCB0eXBlIG9mIHRoZSBub2RlIChhcyBjaGVj
a2VkIGJ5IE5vZGVSZXN1bHRNYXNrLCBhYm92ZSksIDAgZm9yIG5vIHJlc3VsdC4KICNkZWZpbmUg
Tm9kZVJlc3VsdEpTICAgICAgMHgxMDAwCkBAIC0xMzYsNiArMTM3LDkgQEAgdHlwZWRlZiB1aW50
MzJfdCBFeGNlcHRpb25JbmZvOwogICAgIG1hY3JvKENvbXBhcmVFcSwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKENvbXBhcmVTdHJpY3RFcSwgTm9kZVJlc3Vs
dEpTKSBcCiAgICAgXAorICAgIC8qIENhbGxzLiAqL1wKKyAgICBtYWNybyhDYWxsLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBcCiAgICAg
LyogTm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQnJlYWtwb2ludCwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRKUykg
XApAQCAtMTczLDQzICsxNzcsNjAgQEAgc3RydWN0IE9wSW5mbyB7CiAvLwogLy8gTm9kZSByZXBy
ZXNlbnRzIGEgc2luZ2xlIG9wZXJhdGlvbiBpbiB0aGUgZGF0YSBmbG93IGdyYXBoLgogc3RydWN0
IE5vZGUgeworICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07CisKICAgICAvLyBDb25zdHJ1
Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgogICAg
IE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgTm9kZUluZGV4
IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNo
aWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKICAgICAgICAgLCBleGNlcHRpb25JbmZv
KGV4Y2VwdGlvbkluZm8pCi0gICAgICAgICwgY2hpbGQxKGNoaWxkMSkKLSAgICAgICAgLCBjaGls
ZDIoY2hpbGQyKQotICAgICAgICAsIGNoaWxkMyhjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFs
UmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDAp
CiAgICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAg
IGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQu
Y2hpbGQyID0gY2hpbGQyOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7
CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4g
YW5kIGFuIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25J
bmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAg
ICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQot
ICAgICAgICAsIGNoaWxkMShjaGlsZDEpCi0gICAgICAgICwgY2hpbGQyKGNoaWxkMikKLSAgICAg
ICAgLCBjaGlsZDMoY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJ
bmZvKGltbS5tX3ZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFy
QXJncykpOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBjaGlsZDE7CisgICAgICAg
IGNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IGNoaWxkMjsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQu
Y2hpbGQzID0gY2hpbGQzOwogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1
cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KICAgICBOb2RlKE5vZGVU
eXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0xLCBPcEluZm8g
aW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKICAgICAgICAg
LCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCi0gICAgICAgICwgY2hpbGQxKGNoaWxkMSkK
LSAgICAgICAgLCBjaGlsZDIoY2hpbGQyKQotICAgICAgICAsIGNoaWxkMyhjaGlsZDMpCiAgICAg
ICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAg
LCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQogICAgICAg
ICAsIG1fb3BJbmZvMihpbW0yLm1fdmFsdWUpCiAgICAgeworICAgICAgICBBU1NFUlQoIShvcCAm
IE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxk
MTsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gY2hpbGQyOworICAgICAgICBjaGls
ZHJlbi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7CisgICAgfQorICAgIAorICAgIC8vIENvbnN0cnVj
dCBhIG5vZGUgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBjaGlsZHJlbiBhbmQgbm8gaW1tZWRp
YXRlIHZhbHVlcy4KKyAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbklu
Zm8gZXhjZXB0aW9uSW5mbywgdW5zaWduZWQgZmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRy
ZW4pCisgICAgICAgIDogb3Aob3ApCisgICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
CisgICAgICAgICwgbV9yZWZDb3VudCgwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wICYgTm9k
ZUhhc1ZhckFyZ3MpOworICAgICAgICBjaGlsZHJlbi52YXJpYWJsZS5maXJzdENoaWxkID0gZmly
c3RDaGlsZDsKKyAgICAgICAgY2hpbGRyZW4udmFyaWFibGUubnVtQ2hpbGRyZW4gPSBudW1DaGls
ZHJlbjsKICAgICB9CiAKICAgICBib29sIG11c3RHZW5lcmF0ZSgpCkBAIC0zNTAsMTMgKzM3MSw1
MSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbXVzdEdlbmVyYXRlKCkg
PyBtX3JlZkNvdW50IC0gMSA6IG1fcmVmQ291bnQ7CiAgICAgfQorICAgIAorICAgIE5vZGVJbmRl
eCBjaGlsZDEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykp
OworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOworICAgIH0KIAorICAgIE5v
ZGVJbmRleCBjaGlsZDIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFy
QXJncykpOworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQyOworICAgIH0KKwor
ICAgIE5vZGVJbmRleCBjaGlsZDMoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2Rl
SGFzVmFyQXJncykpOworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQzOworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBmaXJzdENoaWxkKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChvcCAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnZhcmlhYmxl
LmZpcnN0Q2hpbGQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgcmV0dXJu
IGNoaWxkcmVuLnZhcmlhYmxlLm51bUNoaWxkcmVuOworICAgIH0KKyAgICAKICAgICAvLyBUaGlz
IGVudW0gdmFsdWUgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBl
IG9wOwogICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRp
b24gKGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KICAgICBFeGNl
cHRpb25JbmZvIGV4Y2VwdGlvbkluZm87CiAgICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNo
aWxkcmVuICgwIGZvciBubyBjaGlsZCkuCi0gICAgTm9kZUluZGV4IGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDM7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgTm9kZUlu
ZGV4IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDM7CisgICAgICAgIH0gZml4ZWQ7CisgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkOworICAgICAgICAgICAgdW5z
aWduZWQgbnVtQ2hpbGRyZW47CisgICAgICAgIH0gdmFyaWFibGU7CisgICAgfSBjaGlsZHJlbjsK
IAogcHJpdmF0ZToKICAgICAvLyBUaGUgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNwaWxsIGxv
Y2F0aW9uKSBhc3NvY2lhdGVkIHdpdGggdGhpcyAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQAogICAgICAgICAibW92ICglcnNwKSwgJSIgU1RSSU5HSVpFKHJlZ2lzdGVyKSAi
XG4iIFwKICAgICAgICAgImptcCBfIiBTVFJJTkdJWkUoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRk
cmVzcyIgIlxuIiBcCiAgICAgKTsKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FSRzJf
UkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTUyhmdW5jdGlvbiwgcnNpKQogI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNF9S
RVRVUk5fQUREUkVTUyhmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTKGZ1bmN0aW9uLCByY3gpCiAjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkc1X1JF
VFVSTl9BRERSRVNTKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1MoZnVuY3Rpb24sIHI4KQogCkBAIC0zODcsNiArMzg4LDExNyBAQCBib29sIG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFs
KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDIpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgcmV0dXJuVmFsdWVIYWNrKCk7CitFbmNvZGVk
SlNWYWx1ZSByZXR1cm5WYWx1ZUhhY2tXaXRoRXhlY1N0YXRlKEV4ZWNTdGF0ZSopOworCithc20o
CisiLmdsb2JsIF8iIFNUUklOR0laRShyZXR1cm5WYWx1ZUhhY2spICJcbiIKKyJfIiBTVFJJTkdJ
WkUocmV0dXJuVmFsdWVIYWNrKSAiOiIgIlxuIgorIm1vdiAtNDAoJXIxMyksICVyMTNcbiIKKyJt
b3YgJXIxMywgJXJkaVxuIgorImptcCBfIiBTVFJJTkdJWkUocmV0dXJuVmFsdWVIYWNrV2l0aEV4
ZWNTdGF0ZSkgIlxuIgorKTsKKworRW5jb2RlZEpTVmFsdWUgcmV0dXJuVmFsdWVIYWNrV2l0aEV4
ZWNTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShl
eGVjLT5nbG9iYWxEYXRhKCkuaG9zdENhbGxSZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lk
KiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlKQor
eworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNhbGxl
ZSwgY2FsbERhdGEpOworICAgIAorICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsK
KyAgICAKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7CisgICAgICAgIGlmICgh
Z2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coZXhlY0NhbGxlZS0+
cmVnaXN0ZXJzKCkpKSB7CisgICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVh
dGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihleGVjLT5z
Y29wZUNoYWluKCkpOworICAgICAgICAKKyAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1
cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0Nh
bGxlZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmV0dXJuVmFsdWVIYWNrKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGNhbGxUeXBlID09
IENhbGxUeXBlTm9uZSk7CisgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0
ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQqIG9wZXJhdGlvbkxpbmtDYWxsV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJu
QWRkcmVzc1B0cik7CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHMl9SRVRVUk5fQUREUkVTUyhv
cGVyYXRpb25MaW5rQ2FsbCk7Cit2b2lkKiBvcGVyYXRpb25MaW5rQ2FsbFdpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Cisg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBK
U1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CisgICAg
SlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oKmdsb2JhbERhdGEs
IGNhbGxlZUFzVmFsdWUpOworICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCisgICAgICAg
IHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICBK
U0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0Z1bmN0aW9uKGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAg
ICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOworICAg
IAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gMDsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgeworICAg
ICAgICBwcmludGYoImhvc3QgZnVuY3Rpb24hXG4iKTsKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1
dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICBK
U09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGV4ZWMs
IGNhbGxlZS0+c2NvcGUoKSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0
aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgICAgIGlmIChl
eGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpID09IHN0YXRpY19jYXN0PHNp
emVfdD4oY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKQorICAgICAgICAgICAgY29kZVB0ciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9y
Q2FsbCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCk7CisgICAgfQor
ICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENh
bGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVuT25j
ZSgpKQorICAgICAgICBjYWxsTGlua0luZm8uc2V0U2VlbigpOworICAgIGVsc2UKKyAgICAgICAg
ZGZnTGlua0NhbGwoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwg
Y29kZVB0cik7CisgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihjYWxsZWUtPnNjb3BlKCkp
OworICAgIHJldHVybiBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisKK3ZvaWQqIG9w
ZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOworICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgSlNWYWx1ZSBjYWxsZWVBc1Zh
bHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOworICAgIEpTQ2VsbCogY2FsbGVlQXNG
dW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKCpnbG9iYWxEYXRhLCBjYWxsZWVBc1ZhbHVlKTsK
KyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKQorICAgICAgICByZXR1cm4gaGFuZGxlSG9z
dENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSk7CisgICAgCisgICAgSlNGdW5jdGlvbiog
ZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CisgICAgaWYgKGV4
ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgcHJpbnRmKCJob3N0IGZ1bmN0
aW9uIGluIHZpcnQgY2FsbCFcbiIpOworICAgICAgICByZXR1cm4gZXhlY3V0YWJsZS0+Z2VuZXJh
dGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgfQorCisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBz
dGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICBKU09iamVj
dCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGV4ZWMsIGZ1bmN0
aW9uLT5zY29wZSgpKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZXhlYy0+Z2xvYmFsRGF0
YSgpLmV4Y2VwdGlvbiA9IGVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZXhl
Y0NhbGxlZS0+c2V0U2NvcGVDaGFpbihmdW5jdGlvbi0+c2NvcGUoKSk7CisgICAgcmV0dXJuIGZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisKIERGR0hhbmRsZXIgbG9va3VwRXhjZXB0aW9uSGFu
ZGxlcihFeGVjU3RhdGUqIGV4ZWMsIFJldHVybkFkZHJlc3NQdHIgZmF1bHRMb2NhdGlvbikKIHsK
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTAzMTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNzYsNiArNzYsOCBAQCBib29sIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0
ZSosIEVuCiBib29sIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CiBib29sIG9wZXJh
dGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKIGJvb2wgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpOwordm9pZCogb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKik7Cit2b2lkKiBv
cGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqKTsKIAogLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0
byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hp
Y2ggaXMKIC8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0
byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw2
ICszNzUsMjEgQEAgdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIAogICAg
ICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBhcHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiB9
CiAKK3ZvaWQgZGZnTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNhbGxlZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCit7CisgICAgQ29kZUJsb2NrICpjYWxsZXJD
b2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKKyAgICAKKyAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBp
ZiAoIWNhbGxlZUNvZGVCbG9jayB8fCBzdGF0aWNfY2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkpID09IGNhbGxlZUNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSB7
CisgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOworICAgICAgICBjYWxs
TGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNh
bGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGNhbGxlZSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5o
b3RQYXRoT3RoZXIsIGNvZGVQdHIpOworICAgIH0KKyAgICAKKyAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLCBv
cGVyYXRpb25WaXJ0dWFsQ2FsbCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNp
b24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiB2b2lkIGRmZ1JlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9p
ZCBkZmdCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdS
ZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQg
ZGZnTGlua0NhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5j
dGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsMTcgKzM2
MywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlCiAgICAgICAg
IG5vdFRha2VuID0gdG1wOwogICAgIH0KIAotICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDEpKSB7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIpOworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAg
ICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwogICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZGl0aW9uLCBKSVRDb21waWxl
cjo6SW1tMzIoaW1tKSwgb3AyLmdwcigpKSwgdGFrZW4pOwotICAgIH0gZWxzZSBpZiAoaXNJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKTsKKyAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMigpKSkgeworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gz
Mihjb25kaXRpb24sIG9wMS5ncHIoKSwgSklUQ29tcGlsZXI6OkltbTMyKGltbSkpLCB0YWtlbik7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25k
aXRpb24sIG9wMS5ncHIoKSwgb3AyLmdwcigpKSwgdGFrZW4pOwogICAgIH0KIApAQCAtMzk4LDgg
KzM5OCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUNhbGwKICAgICAg
ICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQogCi0gICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIp
OworICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1Zh
bHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIG9wMUdQUiA9
IG9wMS5ncHIoKTsKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CkBAIC00NDgsMjAgKzQ0OCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICBzd2l0Y2ggKG1f
aml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpKSB7CiAgICAgICAgIGNhc2Ug
UHJlZGljdEludDMyOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
dmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSkpOwogICAg
ICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBQcmVkaWN0QXJyYXk6IHsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKGNlbGwuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUu
bG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxv
Y2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNDczLDIzICs0NzMsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CiAgICAg
Y2FzZSBCaXRYb3I6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIpOworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMik7CiAKLSAgICAgICAg
ICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSksIG9wMi5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLmNoaWxkMSgpKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAg
ICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAg
ICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAg
IH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAgICAgIGJp
dE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMiksIG9wMS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChu
b2RlLmNoaWxkMigpKSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLmNoaWxkMik7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICAgICAgR1BSUmVnIHJlZzEgPSBvcDEuZ3ByKCk7
CkBAIC01MDMsMTcgKzUwMywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgY2Fz
ZSBCaXRVUlNoaWZ0OgotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkg
ewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKTsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAg
ICAgICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQyKSAmIDB4MWYsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzaGlmdE9wKG9wLCBvcDEu
Z3ByKCksIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpICYgMHgxZiwgcmVzdWx0
LmdwcigpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIERvIG5vdCBhbGxv
dyBzaGlmdCBhbW91bnQgdG8gYmUgdXNlZCBhcyB0aGUgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlciBk
b2VzIG5vdCBwZXJtaXQgdGhpcy4KLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9
IG9wMS5ncHIoKTsKQEAgLTUyNSw3ICs1MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBVSW50MzJUb051bWJl
cjogewotICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAg
ICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICAvLyBUZXN0IHRoZSBvcGVy
YW5kIGlzIHBvc2l0aXZlLgpAQCAtNTM3LDcgKzUzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewot
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwor
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgbV9qaXQu
bW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgb3AxLmZvcm1hdCgpKTsKQEAgLTU0NSwxNCArNTQ1
LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAK
ICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6IHsKLSAgICAgICAgaWYgKGlzSW50ZWdlcihub2RlLmNo
aWxkMSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSk7CisgICAgICAgIGlmIChpc0ludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAg
ICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgaW50
ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0
LmZwcigpKTsKICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5k
ZXgpOwpAQCAtNTYxLDEwICs1NjEsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOiB7Ci0g
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxLCBub2RlLmNoaWxk
MikpIHsKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7Ci0g
ICAgICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDEpOwotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMik7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUu
Y2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFs
dWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3Ay
LmdwcigpLCBJbW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKSk7CkBAIC01NzMsOSArNTczLDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgICAg
IGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKTsKKyAgICAg
ICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAog
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9B
c3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkp
KTsKQEAgLTU4NCw4ICs1ODQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgICAgICBHUFJSZWcgZ3ByMSA9IG9wMS5ncHIo
KTsKQEAgLTYwNCw4ICs2MDQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIEZQUlJlZyByZWcxID0gb3Ax
LmZwcigpOwpAQCAtNjE3LDEwICs2MTcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkgewotICAg
ICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAg
ICAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQyKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwg
bm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDIoKSkpIHsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFs
dWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
bV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIElt
bTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTYyOSw4ICs2MjksOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEu
Z3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CkBAIC02MzksOCArNjM5LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAK
ICAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CkBAIC02NTIsOSArNjUyLDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2Ug
QXJpdGhNdWw6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGls
ZDEsIG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAgICBHUFJSZWcg
cmVnMSA9IG9wMS5ncHIoKTsKQEAgLTY3MCw4ICs2NzAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0g
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAg
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIEZQ
UlJlZyByZWcxID0gb3AxLmZwcigpOwpAQCAtNjg0LDggKzY4NCw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoRGl2OiB7
Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwor
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICBGUFJS
ZWcgcmVnMSA9IG9wMS5mcHIoKTsKQEAgLTY5Nyw4ICs2OTcsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aE1vZDogewot
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwot
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwor
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigp
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGVheCh0aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSBlZHgodGhpcywgWDg2UmVnaXN0ZXJzOjplZHgpOwogICAgICAg
ICBHUFJSZWcgb3AxR3ByID0gb3AxLmdwcigpOwpAQCAtNzI1LDcgKzcyNSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIExvZ2lj
YWxOb3Q6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEp
OworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklYTUU6IFdlIGNvdWxkIHJldXNl
LCBidXQgb24gc3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJlY292ZXJ5IHRvIHJlc3RvcmUg
dGFnIChha2luIHRvIGFkZCkuCiAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKQEAgLTc0NiwyMCArNzQ2LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmlu
ZyBub2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCiAgICAgICAgICAgICBBU1NF
UlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMikpCisgICAgICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigp
KSkKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKG5vZGUsIGJy
YW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6Okxlc3NUaGFuKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVDYWxsKG5vZGUsIGJyYW5jaE5vZGVJbmRl
eCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MpOwogCi0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEp
OwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIHVzZShub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIG1f
Y29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIGNhc2UsIG5vdCBmdXNlZCB0byBicmFuY2guCi0g
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0g
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7Cisg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAg
ICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6Okxlc3NUaGFuLCBvcDEuZ3ByKCksIG9wMi5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTc3OCwyMCArNzc4LDIwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBp
bnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCiAgICAgICAg
ICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMikpCisg
ICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2Rl
LmNoaWxkMigpKSkKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNo
KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6Okxlc3NUaGFuT3JFcXVhbCk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlQ2FsbChub2Rl
LCBicmFuY2hOb2RlSW5kZXgsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEpOwogCi0gICAgICAgICAg
ICB1c2Uobm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKTsKKyAgICAg
ICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigp
KTsKICAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIGNhc2UsIG5vdCBm
dXNlZCB0byBicmFuY2guCi0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSwgb3AyKTsKIAogICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6Okxlc3NUaGFu
T3JFcXVhbCwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkBAIC04MTAsMTkg
KzgxMCwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICAvLyBzbyBjYW4gYmUgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgdG8gYWxzbyByZWZlcmVu
Y2UgdGhlIGNvbXBhcmUuIAogICAgICAgICAgICAgQVNTRVJUKG5vZGUuYWRqdXN0ZWRSZWZDb3Vu
dCgpID09IDEpOwogCi0gICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
LmNoaWxkMSwgbm9kZS5jaGlsZDIpKQorICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpCiAgICAgICAgICAgICAgICAgY29t
cGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBp
bGVyOjpFcXVhbCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29tcGlsZVBl
ZXBIb2xlQ2FsbChub2RlLCBicmFuY2hOb2RlSW5kZXgsIG9wZXJhdGlvbkNvbXBhcmVFcSk7CiAK
LSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICB1c2Uobm9kZS5jaGls
ZDIpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgdXNlKG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5k
ZXg7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgbV9qaXQuY29tcGFyZTMy
KEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7
CkBAIC04MzQsOCArODM0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIH0KIAogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICBtX2ppdC5jb21w
YXJlMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKQEAgLTg0NywxOCArODQ3LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIE5vZGVJ
bmRleCBhbGlhcyA9IG5vZGUuY2hpbGQzOworICAgICAgICBOb2RlSW5kZXggYWxpYXMgPSBub2Rl
LmNoaWxkMygpOwogICAgICAgICBpZiAoYWxpYXMgIT0gTm9Ob2RlKSB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogcmVzdWx0IHNob3VsZCBiZSBhYmxlIHRvIHJldXNlIGNoaWxkMSwgY2hpbGQyLiBT
aG91bGQgaGF2ZSBhbiAnVW51c2VkT3BlcmFuZCcgdHlwZS4KLSAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIGFsaWFzZWRWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMyk7CisgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhbGlhc2VkVmFsdWUodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGFsaWFzZWRWYWx1ZSk7CiAgICAgICAgICAgICBt
X2ppdC5tb3ZlKGFsaWFzZWRWYWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSBzdG9yYWdlKHRoaXMpOwogCiAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIo
KTsKQEAgLTg3MSw3ICs4NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhh
dCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3Ro
KS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBh
cnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBOb2RlJiBiYXNlTm9kZSA9IG1f
aml0LmdyYXBoKClbbm9kZS5jaGlsZDFdOworICAgICAgICBOb2RlJiBiYXNlTm9kZSA9IG1faml0
LmdyYXBoKClbbm9kZS5jaGlsZDEoKV07CiAgICAgICAgIGlmIChiYXNlTm9kZS5vcCAhPSBHZXRM
b2NhbCB8fCBtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24oYmFzZU5vZGUubG9jYWwoKSkgIT0g
UHJlZGljdEFycmF5KQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0FycmF5VlB0cikpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CkBAIC04
ODgsOSArODg4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgUHV0QnlWYWw6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAgLy8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUg
aW50byByZWdpc3RlcnMsIGFsbG9jYXRlIGEgc2NyYXRjaCByZWdpc3Rlci4KQEAgLTkwMyw3ICs5
MDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBj
b250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8g
SWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNr
aXAgdGhlIGNoZWNrLgotICAgICAgICBOb2RlJiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9k
ZS5jaGlsZDFdOworICAgICAgICBOb2RlJiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9kZS5j
aGlsZDEoKV07CiAgICAgICAgIGlmIChiYXNlTm9kZS5vcCAhPSBHZXRMb2NhbCB8fCBtX2ppdC5n
cmFwaCgpLmdldFByZWRpY3Rpb24oYmFzZU5vZGUubG9jYWwoKSkgIT0gUHJlZGljdEFycmF5KQog
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd2l0aGluQXJyYXlCb3VuZHMgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwpAQCAt
OTQ1LDkgKzk0NSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKTsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZVJlZyA9
IGJhc2UuZ3ByKCk7CkBAIC05NzcsNyArOTc3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZVJl
ZyA9IHZhbHVlLmdwcigpOwogCiAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFw
aCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQo
KSk7CkBAIC0xMDEzLDcgKzEwMTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAjZW5kaWYKIAogICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1
cm5WYWx1ZUdQUi4KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAg
ICAgICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgpAQCAtMTAyOSw3ICsxMDI5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNh
c2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVl
KHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1Zh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1
ZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOwpAQCAtMTA0
MCw3ICsxMDQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgR2V0QnlJZDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBiYXNlKTsKIAogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpA
QCAtMTA1Miw4ICsxMDUyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZDogewotICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CiAKICAgICAgICAgY2FjaGVkUHV0QnlJZChiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgc2NyYXRj
aC5ncHIoKSwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7CkBAIC0xMDYzLDgg
KzEwNjMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAog
ICAgICAgICBjYWNoZWRQdXRCeUlkKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBzY3JhdGNoLmdw
cigpLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKQEAgLTEwODUsNyArMTA4NSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAg
ICBjYXNlIFB1dEdsb2JhbFZhcjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgZ2xvYmFsT2JqZWN0KHRoaXMpOwogICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCkBAIC0xMTEyLDYgKzEx
MTIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogI2Vsc2UK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRo
aXMsIG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV0pOwor
ICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOworICAgICAgICBlbWl0Q2Fs
bChub2RlLCBjYWxsZWVHUFIpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAobm9k
ZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTAzMTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIENoZWNrIGlm
IHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCiAgICAgICAgIE5vZGUmIGxh
c3ROb2RlID0gbV9qaXQuZ3JhcGgoKVtsYXN0Tm9kZUluZGV4XTsKLSAgICAgICAgcmV0dXJuIGxh
c3ROb2RlLm9wID09IEJyYW5jaCAmJiBsYXN0Tm9kZS5jaGlsZDEgPT0gbV9jb21waWxlSW5kZXgg
PyBsYXN0Tm9kZUluZGV4IDogTm9Ob2RlOworICAgICAgICByZXR1cm4gbGFzdE5vZGUub3AgPT0g
QnJhbmNoICYmIGxhc3ROb2RlLmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4ID8gbGFzdE5vZGVJ
bmRleCA6IE5vTm9kZTsKICAgICB9CiAKICAgICBib29sIGlzSW50ZWdlcihOb2RlSW5kZXggbm9k
ZUluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWUuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNw
YWNlIEpTQyAgewogICAgIC8vIFBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gbW9zdCBm
dW5jdGlvbnMuCiAgICAgY2xhc3MgRXhlY1N0YXRlIDogcHJpdmF0ZSBSZWdpc3RlciB7CiAgICAg
cHVibGljOgorICAgICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUoKSBjb25zdCB7IHJldHVybiB0
aGlzW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5qc1ZhbHVlKCk7IH0KICAgICAgICAgSlNPYmplY3Qq
IGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmZ1bmN0
aW9uKCk7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiB0
aGlzW1JlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7IH0KICAg
ICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDYgQEAgSklUOjpKSVQo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQgogICAgICwgbV9nbG9iYWxEYXRhKGdsb2Jh
bERhdGEpCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2xhYmVscyhjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCi0gICAgLCBtX2Nh
bGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+bnVt
YmVyT2ZDYWxsTGlua0luZm9zKCkgOiAwKQogICAgICwgbV9ieXRlY29kZU9mZnNldCgodW5zaWdu
ZWQpLTEpCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAsIG1fanVtcFRhcmdldEluZGV4KDAp
CkBAIC0zNDcsNyArMzQ2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9j
b2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpKTsKKyAgICBBU1NFUlQobV9jYWxsTGlu
a0luZm9JbmRleCA9PSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7
CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQg
aXRzIHVzZSB3aXRoIEFTU0VSVHMuCkBAIC00NTAsNyArNDQ5LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICB9CiAKICAgICBBU1NFUlQobV9wcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9uSW5kZXggPT0gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXpl
KCkpOwotICAgIEFTU0VSVChtX2NhbGxMaW5rSW5mb0luZGV4ID09IG1fY29kZUJsb2NrLT5udW1i
ZXJPZkNhbGxMaW5rSW5mb3MoKSk7CisgICAgQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0g
bV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogCiAjaWZuZGVmIE5E
RUJVRwogICAgIC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBB
U1NFUlRzLgpAQCAtNTc0LDEwICs1NzMsMTEgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxl
KENvZGVQdHIqIGZ1bgogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0
dXJuTG9jYXRpb24pOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4p
OwogICAgIH0KKyAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsK
ICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhp
KTsKICAgICAgICAgaW5mby5pc0NhbGwgPSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvW2ldLmlzQ2FsbDsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5m
b1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biA9IENvZGVMb2NhdGlvblBvc3NpYmx5TmVhckNhbGwocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVybkxv
Y2F0aW9uKSk7CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZihtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7
CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsK
ICAgICB9CkBAIC01OTIsNyArNTkyLDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENv
ZGVQdHIqIGZ1bgogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5QXJp
dHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CiAKLSAgICByZXR1
cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CisgICAgcmV0dXJuIEpJVENvZGUocGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlKCksIEpJVENvZGU6OkJhc2VsaW5lSklUKTsKIH0KIAogdm9pZCBK
SVQ6OmxpbmtDYWxsKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxv
Y2ssIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKSVQ6OkNvZGVQdHIgY29kZSwgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8sIGludCBjYWxsZXJBcmdDb3VudCwgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQpAQCAtNjA4LDcgKzYwOCw3IEBAIHZvaWQgSklUOjpsaW5rQ2FsbChKU0Z1bmN0
aW9uKiBjYWxsZWUsIEMKICAgICB9CiAKICAgICAvLyBwYXRjaCB0aGUgY2FsbCBzbyB3ZSBkbyBu
b3QgY29udGludWUgdG8gdHJ5IHRvIGxpbmsuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlW
aXJ0dWFsQ2FsbCgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFy
Q2FsbChjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiksIGdsb2JhbERhdGEtPmppdFN0
dWJzLT5jdGlWaXJ0dWFsQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmxpbmtDb25zdHJ1Y3QoSlNG
dW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBj
YWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0ciBjb2RlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbywgaW50IGNhbGxlckFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCkBAIC02
MjQsNyArNjI0LDcgQEAgdm9pZCBKSVQ6OmxpbmtDb25zdHJ1Y3QoSlNGdW5jdGlvbiogY2FsbAog
ICAgIH0KIAogICAgIC8vIHBhdGNoIHRoZSBjYWxsIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0byB0
cnkgdG8gbGluay4KLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3Qo
KSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24pLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmly
dHVhbENvbnN0cnVjdCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEz
Miw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKIAogICAgIGFk
ZFNsb3dDYXNlKGp1bXBUb1Nsb3cpOwogICAgIEFTU0VSVF9KSVRfT0ZGU0VUKGRpZmZlcmVuY2VC
ZXR3ZWVuKGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIGp1bXBUb1Nsb3cpLCBwYXRjaE9m
ZnNldE9wQ2FsbENvbXBhcmVUb0p1bXApOworICAgIAorICAgIEFTU0VSVChtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAg
bV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5hcHBlbmQoU3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mbygpKTsKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlv
bkNoZWNrOwogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmlzQ2FsbCA9IG9wY29kZUlEICE9IG9wX2NvbnN0cnVjdDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE3ICszNywy
MCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFz
cyBSZWdpc3RlckZpbGU7Ci0KKyAgICAKICAgICBjbGFzcyBKSVRDb2RlIHsKICAgICAgICAgdHlw
ZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29kZVJlZjsKICAgICAgICAgdHlwZWRlZiBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0gSklU
VHlwZSB7IEhvc3RDYWxsVGh1bmssIEJhc2VsaW5lSklULCBERkdKSVQgfTsKKwogICAgICAgICBK
SVRDb2RlKCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgSklUQ29kZShjb25zdCBD
b2RlUmVmIHJlZikKKyAgICAgICAgSklUQ29kZShjb25zdCBDb2RlUmVmIHJlZiwgSklUVHlwZSBq
aXRUeXBlKQogICAgICAgICAgICAgOiBtX3JlZihyZWYpCisgICAgICAgICAgICAsIG1faml0VHlw
ZShqaXRUeXBlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtOTMsMTIgKzk2LDE3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9yZWYubV9leGVj
dXRhYmxlUG9vbC5nZXQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSklUVHlwZSBq
aXRUeXBlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faml0VHlwZTsKKyAgICAg
ICAgfQogCiAgICAgICAgIC8vIEhvc3QgZnVuY3Rpb25zIGFyZSBhIGJpdCBzcGVjaWFsOyB0aGV5
IGhhdmUgYSBtX2NvZGUgcG9pbnRlciBidXQgdGhleQogICAgICAgICAvLyBkbyBub3QgaW5kaXZp
ZHVsbHkgcmVmIHRoZSBleGVjdXRhYmxlIHBvb2wgY29udGFpbmluZyB0aGUgdHJhbXBvbGluZS4K
ICAgICAgICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1bmN0aW9uKENvZGVQdHIgY29kZSkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVENvZGUoY29kZS5kYXRhTG9jYXRpb24oKSwgMCwg
MCk7CisgICAgICAgICAgICByZXR1cm4gSklUQ29kZShjb2RlLmRhdGFMb2NhdGlvbigpLCAwLCAw
LCBIb3N0Q2FsbFRodW5rKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKQpAQCAt
MTA4LDEyICsxMTYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIEpJVENvZGUodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9v
bD4gZXhlY3V0YWJsZVBvb2wsIHNpemVfdCBzaXplKQorICAgICAgICBKSVRDb2RlKHZvaWQqIGNv
ZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qgc2l6
ZSwgSklUVHlwZSBqaXRUeXBlKQogICAgICAgICAgICAgOiBtX3JlZihjb2RlLCBleGVjdXRhYmxl
UG9vbCwgc2l6ZSkKKyAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsK
ICAgICAgICAgfQogCiAgICAgICAgIENvZGVSZWYgbV9yZWY7CisgICAgICAgIEpJVFR5cGUgbV9q
aXRUeXBlOwogICAgIH07CiAKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE1IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIE5h
dGl2ZUV4ZWN1dGFibGU7CiAgICAgY2xhc3MgVlB0ckhhY2tFeGVjdXRhYmxlOworICAgIG5hbWVz
cGFjZSBERkcgeworICAgICAgICBjbGFzcyBKSVRDb2RlR2VuZXJhdG9yOworICAgIH0KIAogICAg
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0
b3IoRXhlY1N0YXRlKik7CiAKICAgICBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTT2JqZWN0
V2l0aEdsb2JhbE9iamVjdCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgICAgIGZy
aWVuZCBjbGFzcyBERkc6OkpJVENvZGVHZW5lcmF0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBK
U0dsb2JhbERhdGE7CiAKICAgICAgICAgdHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3Qg
QmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOwogI2lmIEVOQUJMRShKSVQpCiAgICAg
ICAgIFJldHVybkFkZHJlc3NQdHIgZXhjZXB0aW9uTG9jYXRpb247CisgICAgICAgIEpTVmFsdWUg
aG9zdENhbGxSZXR1cm5WYWx1ZTsKICNlbmRpZgogCiAgICAgICAgIEhhc2hNYXA8T3BhcXVlSlND
bGFzcyosIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xhc3NEYXRhOwo=
</data>
<flag name="commit-queue"
          id="94061"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99548</attachid>
            <date>2011-07-02 00:36:46 -0700</date>
            <delta_ts>2011-07-02 01:17:19 -0700</delta_ts>
            <desc>the patch (fix)</desc>
            <filename>call_patch_3.diff</filename>
            <type>text/plain</type>
            <size>81448</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAK
KzIwMTEtMDctMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IGlt
cGxlbWVudCBvcF9jYWxsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM4NTgKKworICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbDo6Q29kZUxvY2F0aW9uUG9z
c2libHlOZWFyQ2FsbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0TnVtYmVyT2ZDYWxsTGlua0lu
Zm9zKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0FsaWFz
VHJhY2tlci5oOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6bG9va3VwR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6ZXF1YWxJZ25vcmluZ0xhdGVy
TnVtZXJpY0NvbnZlcnNpb24pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRk
VmFyQXJnQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcmVkaWN0
SW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJz
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6cmVmQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6YWRkcmVzc09mQ2Fs
bERhdGEpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlY29yZDo6Q2FsbFJlY29yZCk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEpTQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OlByb3BlcnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vz
c1JlY29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpTQ2FsbFJlY29yZDo6
SlNDYWxsUmVjb3JkKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
aGlsZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmZpcnN0Q2hpbGQpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Om51bUNoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpiYXNp
Y0FyaXRoT3ApOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25z
Lmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRm
Z0xpbmtDYWxsKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmRldGVjdFBlZXBIb2xlQnJhbmNo
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhl
Y1N0YXRlOjpjYWxsZWVBc1ZhbHVlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtDb25zdHJ1Y3QpOgorICAgICAgICAqIGppdC9K
SVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAg
KiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAg
ICAgKEpTQzo6SklUQ29kZTo6aml0VHlwZSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RG
dW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuaDoKKwogMjAxMS0wNy0wMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIElFIFdlYiBXb3JrZXJzIGRlbW8gY3Jhc2hlcyBpbiBKU0M6
OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTksNiArMTE5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21t
b24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KIH07CiAKK2NsYXNzIENvZGVM
b2NhdGlvblBvc3NpYmx5TmVhckNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsKK3B1
YmxpYzoKKyAgICBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKCkgeyB9CisgICAgZXhwbGlj
aXQgQ29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9j
YXRpb24pCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSB7IH0KKyAgICBl
eHBsaWNpdCBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKHZvaWQqIGxvY2F0aW9uKQorICAg
ICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRpb24p
KSB7IH0KK307CisKIGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVibGljIENvZGVM
b2NhdGlvbkNvbW1vbiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIoKSB7
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaWYgRU5BQkxFKERG
R19KSVQpCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2VuZGlmCiAjaW5jbHVkZSAiRGVi
dWdnZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgpAQCAt
NDcsNiArNTAsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkK
K3VzaW5nIG5hbWVzcGFjZSBERkc7CisjZW5kaWYKKwogI2lmICFkZWZpbmVkKE5ERUJVRykgfHwg
RU5BQkxFKE9QQ09ERV9TQU1QTElORykKIAogc3RhdGljIFVTdHJpbmcgZXNjYXBlUXVvdGVzKGNv
bnN0IFVTdHJpbmcmIHN0cikKQEAgLTE2ODcsNyArMTY5NCwxNCBAQCB2b2lkIENvZGVCbG9jazo6
dW5saW5rQ2FsbHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsTGlua0luZm9z
LnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmICghbV9jYWxsTGlua0luZm9zW2ldLmlzTGlua2Vk
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
bV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9jYWxsTGlua0luZm9zW2ld
LmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDog
bV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7CisgICAg
ICAgIGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgeworI2lm
IEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxv
Y2F0aW9uQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0
aW9uTGlua0NhbGwpOworI2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
I2VuZGlmCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Q29kZUxvY2F0aW9uTmVhckNhbGwobV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlv
biksIG1fY2FsbExpbmtJbmZvc1tpXS5pc0NhbGwgPyBtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlWaXJ0dWFsQ2FsbExpbmsoKSA6IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxD
b25zdHJ1Y3RMaW5rKCkpOwogICAgICAgICBtX2NhbGxMaW5rSW5mb3NbaV0udW5saW5rKCk7CiAg
ICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwg
Y2FsbFJldHVybkxvY2F0aW9uOworICAgICAgICBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxs
IGNhbGxSZXR1cm5Mb2NhdGlvbjsgLy8gaXQncyBhIG5lYXIgY2FsbCBpbiB0aGUgb2xkIEpJVCwg
b3IgYSBub3JtYWwgY2FsbCBpbiBERkcKICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
IGhvdFBhdGhCZWdpbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVy
OwogICAgICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwpAQCAtMzc4LDgg
KzM3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBHbG9iYWxSZXNvbHZlSW5mbyYgZ2xv
YmFsUmVzb2x2ZUluZm8oaW50IGluZGV4KSB7IHJldHVybiBtX2dsb2JhbFJlc29sdmVJbmZvc1tp
bmRleF07IH0KICAgICAgICAgYm9vbCBoYXNHbG9iYWxSZXNvbHZlSW5mb0F0Qnl0ZWNvZGVPZmZz
ZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogCisgICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZD
YWxsTGlua0luZm9zKHNpemVfdCBzaXplKSB7IG1fY2FsbExpbmtJbmZvcy5ncm93KHNpemUpOyB9
CiAgICAgICAgIHNpemVfdCBudW1iZXJPZkNhbGxMaW5rSW5mb3MoKSBjb25zdCB7IHJldHVybiBt
X2NhbGxMaW5rSW5mb3Muc2l6ZSgpOyB9Ci0gICAgICAgIHZvaWQgYWRkQ2FsbExpbmtJbmZvKCkg
eyBtX2NhbGxMaW5rSW5mb3MuYXBwZW5kKENhbGxMaW5rSW5mbygpKTsgfQogICAgICAgICBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZv
c1tpbmRleF07IH0KIAogICAgICAgICB2b2lkIGFkZE1ldGhvZENhbGxMaW5rSW5mb3ModW5zaWdu
ZWQgbikgeyBtX21ldGhvZENhbGxMaW5rSW5mb3MuZ3JvdyhuKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODQsMTAgKzE2
ODQsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoCiAKICAgICBl
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0jZW5kaWYK
LQogICAgIC8vIEVtaXQgY2FsbC4KICAgICBlbWl0T3Bjb2RlKG9wY29kZUlEKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7IC8vIGZ1bmMKQEAgLTE4MDEsMTAgKzE3
OTcsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAKICAgICBl
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0jZW5kaWYK
LQogICAgIGVtaXRPcGNvZGUob3BfY29uc3RydWN0KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZnVuYy0+aW5kZXgoKSk7IC8vIGZ1bmMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2Fs
bEFyZ3VtZW50cy5jb3VudCgpKTsgLy8gYXJnQ291bnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFRoaXMgY2hlY2sgZW5zdXJlcyB0
aGUgYWNjZXNzZXMgYWxpYXMsIHByb3ZpZGVkIHRoYXQgdGhlIHN1YnNjcmlwdCBpcyBhbgogICAg
ICAgICAgICAgLy8gaW50ZWdlciBpbmRleCAodGhpcyBpcyBnb29kIGVub3VnaDsgdGhlIHNwZWN1
bGF0aXZlIHBhdGggd2lsbCBvbmx5IGdlbmVyYXRlCiAgICAgICAgICAgICAvLyBvcHRpbWl6ZWQg
YWNjZXNzZXMgdG8gaGFuZGxlIGludGVnZXIgc3Vic2NyaXB0cykuCi0gICAgICAgICAgICBpZiAo
cG9zc2libGVBbGlhcy5jaGlsZDEgPT0gYmFzZSAmJiBlcXVhbElnbm9yaW5nTGF0ZXJOdW1lcmlj
Q29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMiwgcHJvcGVydHkpKQorICAgICAgICAgICAg
aWYgKHBvc3NpYmxlQWxpYXMuY2hpbGQxKCkgPT0gYmFzZSAmJiBlcXVhbElnbm9yaW5nTGF0ZXJO
dW1lcmljQ29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMigpLCBwcm9wZXJ0eSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmIChvcDEgPT0gb3AyKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIE5v
ZGUmIG5vZGUyID0gbV9ncmFwaFtvcDJdOwotICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZh
bHVlVG9OdW1iZXIgfHwgbm9kZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIu
Y2hpbGQxOworICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwgbm9k
ZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIuY2hpbGQxKCk7CiAgICAgfQog
CiAgICAgLy8gVGhlIGdyYXBoLCB0byBsb29rIHVwIHBvdGVudGlhbGx5IGFsaWFzaW5nIG5vZGVz
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDggQEAgcHVibGlj
OgogICAgICAgICAsIG1fbnVtQXJndW1lbnRzKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCiAg
ICAgICAgICwgbV9wcmVzZXJ2ZWRWYXJzKGNvZGVCbG9jay0+bV9udW1WYXJzKQorICAgICAgICAs
IG1fcGFyYW1ldGVyU2xvdHMoMCkKKyAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAg
ICB7CiAgICAgfQogCkBAIC0xMjQsNyArMTI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlm
IChub2RlLm9wID09IEdldExvY2FsKQogICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7
CiAgICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDE7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9t
IHByaW9yIGJsb2NrcywKQEAgLTE1NSw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAg
IHJldHVybiBub2RlLmNoaWxkMTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwog
ICAgICAgICB9CiAKICAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpKTsKQEAg
LTE5MSw3ICsxOTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogCiAg
ICAgICAgIGlmIChub2RlLm9wID09IFVJbnQzMlRvTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJu
IG5vZGUuY2hpbGQxOworICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CiAKICAgICAg
ICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMgY29uc3RhbnRzIGJveGVkIGFzIEpTVmFsdWVzLgogICAg
ICAgICBpZiAobm9kZS5vcCA9PSBKU0NvbnN0YW50KSB7CkBAIC0zODIsNiArMzg0LDIzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHRJbmRleDsKICAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBvcCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBy
ZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7CisgICAgICAgIG1fZ3JhcGgu
YXBwZW5kKE5vZGUoTm9kZTo6VmFyQXJnLCBvcCwgbV9jdXJyZW50SW5kZXgsIG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFy
QXJncykpOworICAgICAgICAKKyAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzID0gMDsKKyAgICAg
ICAgCisgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCisgICAgICAgICAgICBtX2dy
YXBoLnJlZihyZXN1bHRJbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKKyAgICB9
CisgICAgdm9pZCBhZGRWYXJBcmdDaGlsZChOb2RlSW5kZXggY2hpbGQpCisgICAgeworICAgICAg
ICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgbV9udW1Q
YXNzZWRWYXJBcmdzKys7CisgICAgfQogCiAgICAgdm9pZCBwcmVkaWN0QXJyYXkoTm9kZUluZGV4
IG5vZGVJbmRleCkKICAgICB7CkBAIC0zOTYsMTAgKzQxNSwxMCBAQCBwcml2YXRlOgogICAgICAg
ICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKIAogICAgICAgICBpZiAobm9k
ZVB0ci0+b3AgPT0gVmFsdWVUb051bWJlcikKLSAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFw
aFtub2RlUHRyLT5jaGlsZDFdOworICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVQ
dHItPmNoaWxkMSgpXTsKIAogICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVmFsdWVUb0ludDMy
KQotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVQdHItPmNoaWxkMV07CisgICAg
ICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCldOwogCiAgICAgICAg
IGlmIChub2RlUHRyLT5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgIG1fZ3JhcGgucHJlZGlj
dChub2RlUHRyLT5sb2NhbCgpLCBQcmVkaWN0SW50MzIpOwpAQCAtNDUzLDYgKzQ3MiwxMyBAQCBw
cml2YXRlOgogICAgIC8vIHR5cGljYWxseSBlcXVhbCB0byB0aGUgbnVtYmVyIHZhcnMsIGJ1dCB3
ZSBleHBhbmQgdGhpcyB0byBjb3ZlciBhbGwKICAgICAvLyB0ZW1wb3JhcmllcyB0aGF0IHBlcnNp
c3QgYWNyb3NzIGJsb2NrcyAoZHVlcyB0byA/OiwgJiYsIHx8LCBldGMpLgogICAgIHVuc2lnbmVk
IG1fcHJlc2VydmVkVmFyczsKKyAgICAvLyBUaGUgbnVtYmVyIG9mIHNsb3RzIChpbiB1bml0cyBv
ZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8KKyAgICAvLyBwcmVhbGxvY2F0ZSBm
b3IgY2FsbHMgZW1hbmF0aW5nIGZyb20gdGhpcyBmcmFtZS4gVGhpcyBpbmNsdWRlcyB0aGUKKyAg
ICAvLyBzaXplIG9mIHRoZSBDYWxsRnJhbWUsIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBsZWFmIGZ1
bmN0aW9uLiAgKEkuZS4KKyAgICAvLyB0aGlzIGlzIDAgaWYgYW5kIG9ubHkgaWYgdGhpcyBmdW5j
dGlvbiBpcyBhIGxlYWYuKQorICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CisgICAgLy8g
VGhlIG51bWJlciBvZiB2YXIgYXJncyBwYXNzZWQgdG8gdGhlIG5leHQgdmFyIGFyZyBub2RlLgor
ICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkVmFyQXJnczsKIAogICAgIHN0cnVjdCBQaGlTdGFja0Vu
dHJ5IHsKICAgICAgICAgUGhpU3RhY2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywgTm9kZUluZGV4
IHBoaSwgdW5zaWduZWQgdmFyTm8pCkBAIC05NTcsNiArOTgzLDMwIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJu
LCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTEFT
VF9PUENPREUob3BfcmV0KTsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
b3BfY2FsbDogeworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGludCBhcmdDb3VudCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGZpcnN0
QXJnID0gcmVnaXN0ZXJPZmZzZXQgLSBhcmdDb3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIGZvciAoaW50IGFyZ0lkeCA9IGZpcnN0QXJnOyBhcmdJ
ZHggPCBmaXJzdEFyZyArIGFyZ0NvdW50OyBhcmdJZHgrKykKKyAgICAgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7CisgICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFk
ZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxsKTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBw
dXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCk7CisgICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0
aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KQorICAgICAgICAgICAgICAgIHNl
dChwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOworICAgICAgICAgICAgaWYgKFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArICh1bnNpZ25lZClhcmdDb3VudCA+IG1f
cGFyYW1ldGVyU2xvdHMpCisgICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50OworICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY2FsbCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IG9wX2NhbGxfcHV0X3Jlc3VsdDogeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgICAg
IEluc3RydWN0aW9uKiBjYWxsSW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gLSBPUENP
REVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICAgICAgQVNTRVJUKGludGVycHJldGVyLT5nZXRP
cGNvZGVJRChjYWxsSW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsKTsKKyNlbmRpZgor
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF9wdXRfcmVzdWx0KTsKKyAgICAgICAgfQog
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBQYXJzZSBmYWlsZWQhCkBAIC05ODks
MjIgKzEwMzksMjIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAg
ICAgICAgICAgICAgICB2YXIudmFsdWUgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAg
ICAgICAgcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywgdmFs
dWVJblByZWRlY2Vzc29yLCB2YXJObykpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX2dyYXBo
W3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgdmFs
dWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0uY2hpbGQxKCk7CiAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVj
ZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9
PSBQaGkpOwogCiAgICAgICAgICAgICBpZiAocGhpTm9kZS5yZWZDb3VudCgpKQogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAKLSAgICAgICAgICAgIGlm
IChwaGlOb2RlLmNoaWxkMSA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgICAgICBwaGlOb2RlLmNo
aWxkMSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxk
MSgpID09IE5vTm9kZSkgeworICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQu
Y2hpbGQxID0gdmFsdWVJblByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQyID09IE5vTm9kZSkg
ewotICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQyID0gdmFsdWVJblByZWRlY2Vzc29yOwor
ICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQyKCkgPT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAocGhpTm9kZS5jaGlsZDMgPT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS5j
aGlsZDMgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGls
ZDMoKSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVk
LmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIApAQCAtMTAxMywxMyArMTA2MywxMyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgaWYgKHBoaU5vZGUucmVmQ291bnQo
KSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkpOwogCi0gICAgICAgICAgICBu
ZXdQaGlOb2RlLmNoaWxkMSA9IHBoaU5vZGUuY2hpbGQxOwotICAgICAgICAgICAgbmV3UGhpTm9k
ZS5jaGlsZDIgPSBwaGlOb2RlLmNoaWxkMjsKLSAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGQz
ID0gcGhpTm9kZS5jaGlsZDM7Ci0KLSAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQxID0gbmV3UGhp
OwotICAgICAgICAgICAgcGhpTm9kZS5jaGlsZDEgPSB2YWx1ZUluUHJlZGVjZXNzb3I7Ci0gICAg
ICAgICAgICBwaGlOb2RlLmNoaWxkMyA9IE5vTm9kZTsKKyAgICAgICAgICAgIG5ld1BoaU5vZGUu
Y2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gcGhpTm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIG5l
d1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gcGhpTm9kZS5jaGlsZDIoKTsKKyAgICAg
ICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gcGhpTm9kZS5jaGlsZDMo
KTsKKworICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBuZXdQaGk7
CisgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHZhbHVlSW5QcmVk
ZWNlc3NvcjsKKyAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gTm9O
b2RlOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTA0Nyw5ICsxMDk3LDEwIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVmlydHVhbFJlZ2kKICAgICB1bnNpZ25lZCBzaXplRXhjbHVk
aW5nUGhpTm9kZXMgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS0+ZW5kOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzOyArK2kpIHsKICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbaV07CisgICAgICAgIAogICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCisgICAgICAgIAogICAgICAgICAv
LyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBncmFwaCwg
cmVmZXJlbmNpbmcKICAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9yIGJsb2Nrcy4KICAgICAg
ICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKQEAgLTEwNTcsOSArMTEwOCwxNCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpCiAgICAgICAgICAgICAvLyBhbGxv
Y2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBkbyBzbyBpbiB0aGlzCiAg
ICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNl
LCBhbmQgYQogICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVuIGl0
IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2Rl
LmNoaWxkMSk7Ci0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMik7Ci0gICAg
ICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMyk7CisgICAgICAgICAgICBpZiAobm9k
ZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgp
ICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgICAgICAgICBz
Y29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCkBAIC0xMDc1
LDcgKzExMzEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpCiAg
ICAgLy8gJ21fbnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQg
dGVtcG9yYXJpZXMgYWxsb2NhdGVkCiAgICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAoYW5kIGNoZWNr
ZWQgZm9yIG9uIGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQKICAgICAvLyBkaWZm
ZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBi
ZSByZXF1aXJlZC4KLSAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFs
bG9jYXRlZENvdW50KCkgKyBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5zaWduZWQgY2FsbGVlUmVn
aXN0ZXJzID0gc2NvcmVCb2FyZC5hbGxvY2F0ZWRDb3VudCgpICsgbV9wcmVzZXJ2ZWRWYXJzICsg
bV9wYXJhbWV0ZXJTbG90czsKICAgICBpZiAoKHVuc2lnbmVkKW1fY29kZUJsb2NrLT5tX251bUNh
bGxlZVJlZ2lzdGVycyA8IGNhbGxlZVJlZ2lzdGVycykKICAgICAgICAgbV9jb2RlQmxvY2stPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAjdW5kZWYgU1RSSU5H
SVpFX0RGR19PUF9FTlVNCiB9OwogCitjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5vZGVUeXBl
IG9wKQoreworICAgIHJldHVybiBkZmdPcE5hbWVzW29wICYgTm9kZUlkTWFza107Cit9CisKIHZv
aWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC03NSwxNCArODAsMjUgQEAg
dm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgICAgICBwcmludGYo
IiV1Iiwgbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgZWxzZQogICAgICAgICBwcmludGYo
Ii0iKTsKLSAgICBwcmludGYoIj5cdCVzKCIsIGRmZ09wTmFtZXNbb3AgJiBOb2RlSWRNYXNrXSk7
Ci0gICAgaWYgKG5vZGUuY2hpbGQxICE9IE5vTm9kZSkKLSAgICAgICAgcHJpbnRmKCJAJXUiLCBu
b2RlLmNoaWxkMSk7Ci0gICAgaWYgKG5vZGUuY2hpbGQyICE9IE5vTm9kZSkKLSAgICAgICAgcHJp
bnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKTsKLSAgICBpZiAobm9kZS5jaGlsZDMgIT0gTm9Ob2Rl
KQotICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMpOwotICAgIGJvb2wgaGFzUHJp
bnRlZCA9IG5vZGUuY2hpbGQxICE9IE5vTm9kZTsKKyAgICBwcmludGYoIj5cdCVzKCIsIG9wTmFt
ZShvcCkpOworICAgIGJvb2wgaGFzUHJpbnRlZDsKKyAgICBpZiAob3AgJiBOb2RlSGFzVmFyQXJn
cykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7
IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxk
SWR4KyspIHsKKyAgICAgICAgICAgIGlmIChoYXNQcmludGVkKQorICAgICAgICAgICAgICAgIHBy
aW50ZigiLCAiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW50ZigiQCV1IiwgbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgcHJpbnRm
KCIsIEAldSIsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSAhPSBO
b05vZGUpCisgICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMoKSk7CisgICAg
ICAgIGhhc1ByaW50ZWQgPSBub2RlLmNoaWxkMSgpICE9IE5vTm9kZTsKKyAgICB9CiAKICAgICBp
ZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewogICAgICAgICBwcmludGYoIiVzdmFyJXUiLCBoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCBub2RlLnZhck51bWJlcigpKTsKQEAgLTEzOCwyMSArMTU0LDI2
IEBAIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKIHsKICAgICBOb2RlJiBu
b2RlID0gYXQob3ApOwogCi0gICAgaWYgKG5vZGUuY2hpbGQxID09IE5vTm9kZSkgewotICAgICAg
ICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5vZGUuY2hpbGQzID09IE5vTm9kZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmVmKG5vZGUuY2hpbGQxKTsKLQotICAgIGlm
IChub2RlLmNoaWxkMiA9PSBOb05vZGUpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQzID09
IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJB
cmdzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQo
KTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hp
bGRJZHgrKykKKyAgICAgICAgICAgIHJlZihtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gTm9Ob2RlKSB7CisgICAg
ICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgJiYgbm9kZS5jaGlsZDMoKSA9
PSBOb05vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlZihu
b2RlLmNoaWxkMSgpKTsKKworICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUpIHsK
KyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVmKG5vZGUuY2hpbGQyKCkpOworCisgICAg
ICAgIGlmIChub2RlLmNoaWxkMygpID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmVmKG5vZGUuY2hpbGQzKCkpOwogICAgIH0KLSAgICByZWYobm9kZS5jaGlsZDIpOwot
Ci0gICAgaWYgKG5vZGUuY2hpbGQzID09IE5vTm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHJl
Zihub2RlLmNoaWxkMyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyAr
MTYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwogICAgIH0KIAor
I2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsK
KyNlbmRpZgorCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsK
KyAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKIHByaXZhdGU6CiAK
ICAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3Qg
KGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNl
IHZlcnNhLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCwyNCAr
MzAwLDI5IEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1ZShOb2QKIAogdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbihOb2RlJiBub2RlKQogewotICAgIE5vZGVJ
bmRleCBjaGlsZDEgPSBub2RlLmNoaWxkMTsKLSAgICBpZiAoY2hpbGQxID09IE5vTm9kZSkgewot
ICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5vZGUuY2hpbGQzID09IE5v
Tm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdXNlKGNoaWxkMSk7Ci0KLSAgICBO
b2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDI7Ci0gICAgaWYgKGNoaWxkMiA9PSBOb05vZGUp
IHsKLSAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQzID09IE5vTm9kZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgdXNlKGNoaWxkMik7Ci0KLSAgICBOb2RlSW5kZXggY2hpbGQzID0gbm9k
ZS5jaGlsZDM7Ci0gICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1c2UoY2hpbGQzKTsKKyAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHgg
PCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAg
ICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gbm9kZS5jaGlsZDEoKTsK
KyAgICAgICAgaWYgKGNoaWxkMSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2Rl
LmNoaWxkMigpID09IE5vTm9kZSAmJiBub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXNlKGNoaWxkMSk7CisgICAgICAgIAor
ICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDIoKTsKKyAgICAgICAgaWYgKGNo
aWxkMiA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5v
Tm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXNlKGNoaWxk
Mik7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gbm9kZS5jaGlsZDMoKTsK
KyAgICAgICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHVzZShjaGlsZDMpOworICAgIH0KIH0KIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNo
ZWRHZXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKQEAgLTQyNSw2
ICs0MzAsODQgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNoZWRQdXRCeUlkKEdQUgogICAg
IG1faml0LmFkZFByb3BlcnR5QWNjZXNzKGZ1bmN0aW9uQ2FsbCwgY2hlY2tJbW1Ub0NhbGwsIGNh
bGxUb0NoZWNrLCBjYWxsVG9TdG9yZSwgY2FsbFRvU2xvd0Nhc2UsIGNhbGxUb0RvbmUsIHN0YXRp
Y19jYXN0PGludDhfdD4oYmFzZUdQUiksIHN0YXRpY19jYXN0PGludDhfdD4odmFsdWVHUFIpLCBz
dGF0aWNfY2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKTsKIH0KIAordm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjplbWl0Q2FsbChOb2RlJiBub2RlLCBHUFJSZWcgdGFyZ2V0R1BSKQoreworICAgIC8vIHRo
ZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBmdW5jdGlvbiAo
bm9ybWFsIGNhbGwpIG9yIHRoZQorICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCkuIHN1YnNl
cXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCisgICAgaW50IG51bUFyZ3MgPSBub2Rl
Lm51bUNoaWxkcmVuKCkgLSAxOworICAgIAorICAgIC8vIGFtb3VudCBvZiBzdHVmZiAoaW4gdW5p
dHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvIHBsYWNlIGF0IHRoZQorICAg
IC8vIHRvcCBvZiB0aGUgSlMgc3RhY2suCisgICAgaW50IGNhbGxEYXRhU2l6ZSA9IDA7CisKKyAg
ICAvLyBmaXJzdCB0aGVyZSBhcmUgdGhlIGFyZ3VtZW50cworICAgIGNhbGxEYXRhU2l6ZSArPSBu
dW1BcmdzOworICAgIAorICAgIC8vIGFuZCB0aGVuIHRoZXJlIGlzIHRoZSBjYWxsIGZyYW1lIGhl
YWRlcgorICAgIGNhbGxEYXRhU2l6ZSArPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emU7CisgICAgCisgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bUFyZ3MpKSksIGFkZHJlc3NPZkNhbGxEYXRh
KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOworICAgIG1faml0LnN0b3JlUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNh
bGxlckZyYW1lKSk7CisgICAgCisgICAgZm9yIChpbnQgYXJnSWR4ID0gMDsgYXJnSWR4IDwgbnVt
QXJnczsgYXJnSWR4KyspIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIG1faml0
LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBhcmdJZHhd
KTsKKyAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAgICAgICAgCisgICAgICAg
IG1faml0LnN0b3JlUHRyKGFyZ0dQUiwgYWRkcmVzc09mQ2FsbERhdGEoLWNhbGxEYXRhU2l6ZSAr
IGFyZ0lkeCkpOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICBjYXNl
IENhbGw6CisgICAgICAgIG1faml0LnN0b3JlUHRyKHRhcmdldEdQUiwgYWRkcmVzc09mQ2FsbERh
dGEoUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAg
ICBmbHVzaFJlZ2lzdGVycygpOworICAgIAorICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIEpJVENvbXBpbGVyOjpE
YXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aDsKKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICBjYXNlIENhbGw6CisgICAgICAg
IHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgdGFyZ2V0R1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRhcmdldEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5zdG9yZVB0
cihyZXN1bHRHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNv
ZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCisgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFz
dENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGws
IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworICAgIAorICAg
IEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgc2xvd1Bh
dGgubGluaygmbV9qaXQpOworICAgIAorICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2Rl
QmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgSklUQ29t
cGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25D
aGVjayhvcGVyYXRpb25MaW5rQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhj
ZXB0aW9uSW5mbyk7CisgICAgbV9qaXQubW92ZShJbW0zMihudW1BcmdzKSwgR1BSSW5mbzo6cmVn
VDEpOworICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgIG1faml0Lm5vdGlmeUNhbGwobV9qaXQuY2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiksIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworICAg
IAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIAorICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENh
bGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCB0cnVlLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5leGNlcHRpb25JbmZvKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBjb25z
dCBjaGFyKiBkYXRhRm9ybWF0U3RyaW5nKERhdGFGb3JtYXQgZm9ybWF0KQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMiw2ICs1MjIsMTMgQEAgcHJvdGVjdGVkOgogICAg
IAogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQ
UiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhU
YXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoR1BS
UmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFy
Z2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MgYWRkcmVzc09mQ2FsbERhdGEoaW50IGlkeCkKKyAgICB7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKG1faml0
LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGlkeCkgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbWl0Q2FsbChO
b2RlJiwgR1BSUmVnIHRhcmdldEdQUik7CiAKICAgICAvLyBDYWxsZWQgb25jZSBhIG5vZGUgaGFz
IGNvbXBsZXRlZCBjb2RlIGdlbmVyYXRpb24gYnV0IHByaW9yIHRvIHNldHRpbmcKICAgICAvLyBp
dHMgcmVzdWx0LCB0byBmcmVlIHVwIGl0cyBjaGlsZHJlbi4gKFRoaXMgbXVzdCBoYXBwZW4gcHJp
b3IgdG8gc2V0dGluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw2ICsyOTQsNyBAQCB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAgICAgICAgIC8vIElmIGNv
bXBpbGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxlZCwgdGhyb3cgYXdheSB0
aGUgY29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xlYXIoKTsKICAgICAgICAg
bV9wcm9wZXJ0eUFjY2Vzc2VzLmNsZWFyKCk7CisgICAgICAgIG1fanNDYWxscy5jbGVhcigpOwog
ICAgICAgICByZXdpbmRUb0xhYmVsKHNwZWN1bGF0aXZlUGF0aEJlZ2luKTsKIAogICAgICAgICBT
cGVjdWxhdGlvbkNoZWNrVmVjdG9yIG5vQ2hlY2tzOwpAQCAtMzY5LDEzICszNzAsMTUgQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogI2VuZGlmCiAKICAgICAvLyBM
aW5rIGFsbCBjYWxscyBvdXQgZnJvbSB0aGUgSklUIGNvZGUgdG8gdGhlaXIgcmVzcGVjdGl2ZSBm
dW5jdGlvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGxpbmtCdWZmZXIubGluayhtX2NhbGxzW2ldLm1fY2FsbCwgbV9jYWxsc1tp
XS5tX2Z1bmN0aW9uKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9jYWxsc1tpXS5tX2Z1bmN0aW9uLnZhbHVlKCkpCisg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5tX2NhbGwsIG1fY2FsbHNbaV0u
bV9mdW5jdGlvbik7CisgICAgfQogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0NhbGxSZXR1
cm5JbmRpY2VzKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2stPmNhbGxSZXR1cm5JbmRleFZlY3Rv
cigpLnJlc2VydmVDYXBhY2l0eShleGNlcHRpb25DaGVja0NvdW50KTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChtX2NhbGxzW2ldLm1fZXhjZXB0aW9uQ2hlY2suaXNTZXQoKSkgeworICAgICAgICAgICAgaWYg
KG1fY2FsbHNbaV0ubV9oYW5kbGVzRXhjZXB0aW9ucykgewogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHJldHVybkFkZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFkZHJlc3NPZmZzZXQo
bV9jYWxsc1tpXS5tX2NhbGwpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbklu
Zm8gPSBtX2NhbGxzW2ldLm1fZXhjZXB0aW9uSW5mbzsKICAgICAgICAgICAgICAgICBtX2NvZGVC
bG9jay0+Y2FsbFJldHVybkluZGV4VmVjdG9yKCkuYXBwZW5kKENhbGxSZXR1cm5PZmZzZXRUb0J5
dGVjb2RlT2Zmc2V0KHJldHVybkFkZHJlc3NPZmZzZXQsIGV4Y2VwdGlvbkluZm8pKTsKQEAgLTM5
NiwxMyArMzk5LDIyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QK
ICAgICAgICAgaW5mby52YWx1ZUdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3ZhbHVlR1BS
OwogICAgICAgICBpbmZvLnUudW5zZXQuc2NyYXRjaEdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX3NjcmF0Y2hHUFI7CiAgICAgfQotCisgICAgCisgICAgbV9jb2RlQmxvY2stPnNldE51bWJl
ck9mQ2FsbExpbmtJbmZvcyhtX2pzQ2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIENhbGxMaW5rSW5mbyYg
aW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CisgICAgICAgIGluZm8uaXNDYWxs
ID0gbV9qc0NhbGxzW2ldLm1faXNDYWxsOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biA9IENvZGVMb2NhdGlvblBvc3NpYmx5TmVhckNhbGwobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1f
anNDYWxsc1tpXS5tX3Nsb3dDYWxsKSk7CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fanNDYWxsc1tpXS5tX3RhcmdldFRvQ2hlY2spOworICAgICAg
ICBpbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanND
YWxsc1tpXS5tX2Zhc3RDYWxsKTsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHN3aXRjaCB0
aGUgcmVnaXN0ZXIgZmlsZSBjaGVjayAmIGFyaXR5IGNoZWNrIG92ZXIgdG8gREZHT3BlcnRhaW9u
IHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJzLgogICAgIGxpbmtCdWZmZXIubGluayhjYWxsUmVn
aXN0ZXJGaWxlQ2hlY2ssIGN0aV9yZWdpc3Rlcl9maWxlX2NoZWNrKTsKICAgICBsaW5rQnVmZmVy
LmxpbmsoY2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBjdGlf
b3BfY29uc3RydWN0X2FyaXR5Q2hlY2sgOiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKTsKIAogICAg
IGVudHJ5V2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7
Ci0gICAgZW50cnkgPSBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpOworICAgIGVudHJ5ID0gSklU
Q29kZShsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpERkdKSVQpOwogfQogCiAj
aWYgREZHX0pJVF9BU1NFUlQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIHN0cnVj
dCBDYWxsUmVjb3JkIHsKICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGws
IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAgICAgICAs
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0aW9ucyhmYWxz
ZSkKICAgICB7CiAgICAgfQogCkBAIC03NCw2ICs3NSwxNyBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7
CiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNo
ZWNrKGV4Y2VwdGlvbkNoZWNrKQogICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKKyAgICB7CisgICAgfQor
CisgICAgLy8gQ29uc3RydWN0b3IgZm9yIGEgY2FsbCB0aGF0IG1heSBjYXVzZSBleGNlcHRpb25z
LCBidXQgd2hpY2ggYXJlIGhhbmRsZWQKKyAgICAvLyB0aHJvdWdoIHNvbWUgbWVjaGFuaXNtIG90
aGVyIHRoYW4gdGhlIGluLWxpbmUgZXhjZXB0aW9uIGhhbmRsZXIuCisgICAgQ2FsbFJlY29yZChN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgRXhjZXB0aW9u
SW5mbyBleGNlcHRpb25JbmZvKQorICAgICAgICA6IG1fY2FsbChjYWxsKQorICAgICAgICAsIG1f
ZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbklu
Zm8pCisgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0aW9ucyh0cnVlKQogICAgIHsKICAgICB9CiAK
QEAgLTgxLDYgKzkzLDcgQEAgc3RydWN0IENhbGxSZWNvcmQgewogICAgIEZ1bmN0aW9uUHRyIG1f
ZnVuY3Rpb247CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9leGNlcHRpb25DaGVjazsKICAg
ICBFeGNlcHRpb25JbmZvIG1fZXhjZXB0aW9uSW5mbzsKKyAgICBib29sIG1faGFuZGxlc0V4Y2Vw
dGlvbnM7CiB9OwogCiAvLyA9PT0gSklUQ29tcGlsZXIgPT09CkBAIC0xNTgsNiArMTcxLDEyIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfQor
ICAgIAorICAgIC8vIE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJlcXVp
cmUgbGlua2luZy4KKyAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBjYWxsLCB1bnNpZ25lZCBleGNl
cHRpb25JbmZvKQorICAgIHsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxs
LCBGdW5jdGlvblB0cigpLCBleGNlcHRpb25JbmZvKSk7CisgICAgfQogCiAgICAgLy8gQWRkIGEg
Y2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAg
dm9pZCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikKQEAgLTE3NCw2ICsx
OTMsMTUgQEAgcHVibGljOgogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0
aW9uQ2FsbCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBleGNlcHRpb25JbmZvKSk7CiAgICAg
ICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgfQorICAgIAorICAgIC8vIEFkZCBhIGNhbGwg
b3V0IGZyb20gSklUIGNvZGUsIHdpdGggYSBmYXN0IGV4Y2VwdGlvbiBjaGVjayB0aGF0IHRlc3Rz
IGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KKyAgICBDYWxsIGFwcGVuZENhbGxXaXRoRmFz
dEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgdW5zaWduZWQgZXhj
ZXB0aW9uSW5mbykKKyAgICB7CisgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCgpOwor
ICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVu
Y3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKKyAgICB9CiAKICAgICAvLyBIZWxwZXIgbWV0aG9k
cyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgogICAgIGJvb2wgaXNDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KQpAQCAtMjM3LDYgKzI2NSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBtX3Byb3BlcnR5QWNjZXNzZXMuYXBwZW5kKFByb3BlcnR5QWNjZXNzUmVjb3JkKGZ1bmN0
aW9uQ2FsbCwgZGVsdGFDaGVja0ltbVRvQ2FsbCwgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSwgZGVsdGFDYWxsVG9TbG93Q2FzZSwgZGVsdGFDYWxsVG9Eb25l
LCAgYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIpKTsKICAgICB9CisgICAgCisgICAgdm9p
ZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRh
cmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHsK
KyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxs
LCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGV4Y2VwdGlvbkluZm8pKTsKKyAgICB9CiAKIHByaXZh
dGU6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB1c2VkIGluIGxpbmtpbmcgdGhlIHNwZWN1bGF0aXZl
ICYgbm9uLXNwZWN1bGF0aXZlIHBhdGhzIHRvZ2V0aGVyLgpAQCAtMjU5LDcgKzI5Miw3IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAKICAgICBzdHJ1Y3QgUHJv
cGVydHlBY2Nlc3NSZWNvcmQgewotICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChKSVRDb21w
aWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludDhfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQ4
X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgaW50OF90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUs
IGludDhfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBpbnQ4X3QgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4
X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRjaEdQUikKKyAgICAgICAg
UHJvcGVydHlBY2Nlc3NSZWNvcmQoQ2FsbCBmdW5jdGlvbkNhbGwsIGludDhfdCBkZWx0YUNoZWNr
SW1tVG9DYWxsLCBpbnQ4X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgaW50OF90IGRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUsIGludDhfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBpbnQ4X3QgZGVsdGFD
YWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRj
aEdQUikKICAgICAgICAgICAgIDogbV9mdW5jdGlvbkNhbGwoZnVuY3Rpb25DYWxsKQogICAgICAg
ICAgICAgLCBtX2RlbHRhQ2hlY2tJbW1Ub0NhbGwoZGVsdGFDaGVja0ltbVRvQ2FsbCkKICAgICAg
ICAgICAgICwgbV9kZWx0YUNhbGxUb1N0cnVjdENoZWNrKGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sp
CkBAIC0yODIsOCArMzE1LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGludDhfdCBtX3ZhbHVlR1BS
OwogICAgICAgICBpbnQ4X3QgbV9zY3JhdGNoR1BSOwogICAgIH07CisgICAgCisgICAgc3RydWN0
IEpTQ2FsbFJlY29yZCB7CisgICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxs
IHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2ln
bmVkIGV4Y2VwdGlvbkluZm8pCisgICAgICAgICAgICA6IG1fZmFzdENhbGwoZmFzdENhbGwpCisg
ICAgICAgICAgICAsIG1fc2xvd0NhbGwoc2xvd0NhbGwpCisgICAgICAgICAgICAsIG1fdGFyZ2V0
VG9DaGVjayh0YXJnZXRUb0NoZWNrKQorICAgICAgICAgICAgLCBtX2lzQ2FsbChpc0NhbGwpCisg
ICAgICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENhbGwgbV9mYXN0Q2FsbDsKKyAgICAgICAgQ2Fs
bCBtX3Nsb3dDYWxsOworICAgICAgICBEYXRhTGFiZWxQdHIgbV90YXJnZXRUb0NoZWNrOworICAg
ICAgICBib29sIG1faXNDYWxsOworICAgICAgICB1bnNpZ25lZCBtX2V4Y2VwdGlvbkluZm87Cisg
ICAgfTsKIAogICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0eUFj
Y2Vzc2VzOworICAgIFZlY3RvcjxKU0NhbGxSZWNvcmQsIDQ+IG1fanNDYWxsczsKIH07CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBAIHR5cGVkZWYgdWludDMyX3QgRXhj
ZXB0aW9uSW5mbzsKICNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgMHg0MDAwMAogI2RlZmluZSBO
b2RlSXNCcmFuY2ggICAgICAweDgwMDAwCiAjZGVmaW5lIE5vZGVJc1Rlcm1pbmFsICAgMHgxMDAw
MDAKKyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAweDIwMDAwMAogCiAvLyBUaGVzZSB2YWx1ZXMg
cmVjb3JkIHRoZSByZXN1bHQgdHlwZSBvZiB0aGUgbm9kZSAoYXMgY2hlY2tlZCBieSBOb2RlUmVz
dWx0TWFzaywgYWJvdmUpLCAwIGZvciBubyByZXN1bHQuCiAjZGVmaW5lIE5vZGVSZXN1bHRKUyAg
ICAgIDB4MTAwMApAQCAtMTM2LDYgKzEzNyw5IEBAIHR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9u
SW5mbzsKICAgICBtYWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhDb21wYXJlU3RyaWN0RXEsIE5vZGVSZXN1bHRKUykgXAogICAgIFwK
KyAgICAvKiBDYWxscy4gKi9cCisgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgXAogICAgIC8qIE5vZGVzIGZvciBt
aXNjIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0SlMpIFwKQEAgLTE3Myw0MyAr
MTc3LDYwIEBAIHN0cnVjdCBPcEluZm8gewogLy8KIC8vIE5vZGUgcmVwcmVzZW50cyBhIHNpbmds
ZSBvcGVyYXRpb24gaW4gdGhlIGRhdGEgZmxvdyBncmFwaC4KIHN0cnVjdCBOb2RlIHsKKyAgICBl
bnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OworCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRo
IHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBl
IG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUp
CiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZv
KQotICAgICAgICAsIGNoaWxkMShjaGlsZDEpCi0gICAgICAgICwgY2hpbGQyKGNoaWxkMikKLSAg
ICAgICAgLCBjaGlsZDMoY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOworICAgICAgICBjaGlsZHJlbi5maXhl
ZC5jaGlsZDEgPSBjaGlsZDE7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IGNoaWxk
MjsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gY2hpbGQzOwogICAgIH0KIAogICAg
IC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlh
dGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25J
bmZvLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9w
KQogICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKLSAgICAgICAgLCBjaGls
ZDEoY2hpbGQxKQotICAgICAgICAsIGNoaWxkMihjaGlsZDIpCi0gICAgICAgICwgY2hpbGQzKGNo
aWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1
ZSkKICAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAg
ICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQxOworICAgICAgICBjaGlsZHJlbi5maXhl
ZC5jaGlsZDIgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IGNoaWxk
MzsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJl
biBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0
aW9uSW5mbyBleGNlcHRpb25JbmZvLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIE5vZGVJbmRl
eCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgZXhjZXB0aW9uSW5m
byhleGNlcHRpb25JbmZvKQotICAgICAgICAsIGNoaWxkMShjaGlsZDEpCi0gICAgICAgICwgY2hp
bGQyKGNoaWxkMikKLSAgICAgICAgLCBjaGlsZDMoY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVh
bFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgw
KQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKICAgICAgICAgLCBtX29wSW5mbzIo
aW1tMi5tX3ZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJn
cykpOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBjaGlsZDE7CisgICAgICAgIGNo
aWxkcmVuLmZpeGVkLmNoaWxkMiA9IGNoaWxkMjsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hp
bGQzID0gY2hpbGQzOworICAgIH0KKyAgICAKKyAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGgg
YSB2YXJpYWJsZSBudW1iZXIgb2YgY2hpbGRyZW4gYW5kIG5vIGltbWVkaWF0ZSB2YWx1ZXMuCisg
ICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbklu
Zm8sIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQorICAgICAgICA6
IG9wKG9wKQorICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAg
LCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAsIG1f
cmVmQ291bnQoMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsK
KyAgICAgICAgY2hpbGRyZW4udmFyaWFibGUuZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQ7CisgICAg
ICAgIGNoaWxkcmVuLnZhcmlhYmxlLm51bUNoaWxkcmVuID0gbnVtQ2hpbGRyZW47CiAgICAgfQog
CiAgICAgYm9vbCBtdXN0R2VuZXJhdGUoKQpAQCAtMzUwLDEzICszNzEsNTEgQEAgc3RydWN0IE5v
ZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG11c3RHZW5lcmF0ZSgpID8gbV9yZWZDb3VudCAt
IDEgOiBtX3JlZkNvdW50OwogICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggY2hpbGQxKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgcmV0
dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKKyAgICB9CiAKKyAgICBOb2RlSW5kZXggY2hpbGQy
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAg
ICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMjsKKyAgICB9CisKKyAgICBOb2RlSW5kZXgg
Y2hpbGQzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsK
KyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMzsKKyAgICB9CisgICAgCisgICAg
dW5zaWduZWQgZmlyc3RDaGlsZCgpCisgICAgeworICAgICAgICBBU1NFUlQob3AgJiBOb2RlSGFz
VmFyQXJncyk7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi52YXJpYWJsZS5maXJzdENoaWxkOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbigpCisgICAgeworICAgICAgICBB
U1NFUlQob3AgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi52YXJp
YWJsZS5udW1DaGlsZHJlbjsKKyAgICB9CisgICAgCiAgICAgLy8gVGhpcyBlbnVtIHZhbHVlIGRl
c2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUgbm9kZS4KICAgICBOb2RlVHlwZSBvcDsKICAgICAvLyBV
c2VkIHRvIGxvb2sgdXAgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkg
aW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCiAgICAgRXhjZXB0aW9uSW5mbyBleGNl
cHRpb25JbmZvOwogICAgIC8vIFJlZmVyZW5jZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiAoMCBmb3Ig
bm8gY2hpbGQpLgotICAgIE5vZGVJbmRleCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzOworICAgIHVu
aW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZDEsIGNo
aWxkMiwgY2hpbGQzOworICAgICAgICB9IGZpeGVkOworICAgICAgICBzdHJ1Y3QgeworICAgICAg
ICAgICAgdW5zaWduZWQgZmlyc3RDaGlsZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUNoaWxk
cmVuOworICAgICAgICB9IHZhcmlhYmxlOworICAgIH0gY2hpbGRyZW47CiAKIHByaXZhdGU6CiAg
ICAgLy8gVGhlIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbikgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICAg
ICAgICAgIm1vdiAoJXJzcCksICUiIFNUUklOR0laRShyZWdpc3RlcikgIlxuIiBcCiAgICAgICAg
ICJqbXAgXyIgU1RSSU5HSVpFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAog
ICAgICk7CisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkcyX1JFVFVSTl9BRERSRVNT
KGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IHJzaSkKICNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FSRzRfUkVUVVJOX0FERFJFU1Mo
ZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwg
cmN4KQogI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNV9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBy
OCkKIApAQCAtMzg3LDYgKzM4OCwxMTcgQEAgYm9vbCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEo
RXhlY1N0YXRlKgogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CiAK
K0VuY29kZWRKU1ZhbHVlIHJldHVyblZhbHVlSGFjaygpOworRW5jb2RlZEpTVmFsdWUgcmV0dXJu
VmFsdWVIYWNrV2l0aEV4ZWNTdGF0ZShFeGVjU3RhdGUqKTsKKworYXNtICgKKyIuZ2xvYmwgXyIg
U1RSSU5HSVpFKHJldHVyblZhbHVlSGFjaykgIlxuIgorIl8iIFNUUklOR0laRShyZXR1cm5WYWx1
ZUhhY2spICI6IiAiXG4iCisgICAgIm1vdiAtNDAoJXIxMyksICVyMTNcbiIKKyAgICAibW92ICVy
MTMsICVyZGlcbiIKKyAgICAiam1wIF8iIFNUUklOR0laRShyZXR1cm5WYWx1ZUhhY2tXaXRoRXhl
Y1N0YXRlKSAiXG4iCispOworCitFbmNvZGVkSlNWYWx1ZSByZXR1cm5WYWx1ZUhhY2tXaXRoRXhl
Y1N0YXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4
ZWMtPmdsb2JhbERhdGEoKS5ob3N0Q2FsbFJldHVyblZhbHVlKTsKK30KKworc3RhdGljIHZvaWQq
IGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUpCit7
CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIENhbGxE
YXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY2FsbGVl
LCBjYWxsRGF0YSk7CisgICAgCisgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlSlMpOwor
ICAgIAorICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKKyAgICAgICAgaWYgKCFn
bG9iYWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuZ3JvdyhleGVjQ2FsbGVlLT5y
ZWdpc3RlcnMoKSkpIHsKKyAgICAgICAgICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNj
b3BlQ2hhaW4oKSk7CisgICAgICAgIAorICAgICAgICBnbG9iYWxEYXRhLT5ob3N0Q2FsbFJldHVy
blZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2Fs
bGVlKSk7CisgICAgICAgIAorICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZXR1cm5WYWx1ZUhhY2spOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoY2FsbFR5cGUgPT0g
Q2FsbFR5cGVOb25lKTsKKyAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRl
Tm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVlKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCogb3BlcmF0aW9uTGlua0NhbGxXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBSZXR1cm5B
ZGRyZXNzUHRyKTsKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkcyX1JFVFVSTl9BRERSRVNTKG9w
ZXJhdGlvbkxpbmtDYWxsKTsKK3ZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsV2l0aFJldHVybkFkZHJl
c3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
Cit7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIEpT
VmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKTsKKyAgICBK
U0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbigqZ2xvYmFsRGF0YSwg
Y2FsbGVlQXNWYWx1ZSk7CisgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKKyAgICAgICAg
cmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUpOworICAgIEpT
RnVuY3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAg
IEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CisgICAg
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSAwOworICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAg
ICAgIHByaW50ZigiaG9zdCBmdW5jdGlvbiFcbiIpOworICAgICAgICBjb2RlUHRyID0gZXhlY3V0
YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9yQ2FsbCgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0g
c3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAgIEpT
T2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoZXhlYywg
Y2FsbGVlLT5zY29wZSgpKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBnbG9i
YWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBjb2RlQmxvY2sgPSAmZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvckNhbGwoKTsKKyAgICAgICAgaWYgKGV4
ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPT0gc3RhdGljX2Nhc3Q8c2l6
ZV90Pihjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpCisgICAgICAgICAgICBjb2RlUHRyID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmFkZHJlc3NGb3JD
YWxsKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1
dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2soKTsKKyAgICB9Cisg
ICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0Q2Fs
bExpbmtJbmZvKHJldHVybkFkZHJlc3MpOworICAgIGlmICghY2FsbExpbmtJbmZvLnNlZW5PbmNl
KCkpCisgICAgICAgIGNhbGxMaW5rSW5mby5zZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAgICBk
ZmdMaW5rQ2FsbChleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBj
b2RlUHRyKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGNhbGxlZS0+c2NvcGUoKSk7
CisgICAgcmV0dXJuIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKwordm9pZCogb3Bl
cmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFs
dWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oKmdsb2JhbERhdGEsIGNhbGxlZUFzVmFsdWUpOwor
ICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCisgICAgICAgIHJldHVybiBoYW5kbGVIb3N0
Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICAKKyAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IGFzRnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKyAgICBpZiAoZXhl
Y3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgeworICAgICAgICBwcmludGYoImhvc3QgZnVuY3Rp
b24gaW4gdmlydCBjYWxsIVxuIik7CisgICAgICAgIHJldHVybiBleGVjdXRhYmxlLT5nZW5lcmF0
ZWRKSVRDb2RlRm9yQ2FsbCgpLmFkZHJlc3NGb3JDYWxsKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICB9CisKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0
YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgIEpTT2JqZWN0
KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoZXhlYywgZnVuY3Rp
b24tPnNjb3BlKCkpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBleGVjLT5nbG9iYWxEYXRh
KCkuZXhjZXB0aW9uID0gZXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBleGVj
Q2FsbGVlLT5zZXRTY29wZUNoYWluKGZ1bmN0aW9uLT5zY29wZSgpKTsKKyAgICByZXR1cm4gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKwogREZHSGFuZGxlciBsb29rdXBFeGNlcHRpb25IYW5k
bGVyKEV4ZWNTdGF0ZSogZXhlYywgUmV0dXJuQWRkcmVzc1B0ciBmYXVsdExvY2F0aW9uKQogewog
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA5MDMxMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw2ICs3Niw4IEBAIGJvb2wgb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRl
KiwgRW4KIGJvb2wgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKIGJvb2wgb3BlcmF0
aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwogYm9vbCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMik7Cit2b2lkKiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKTsKK3ZvaWQqIG9w
ZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSopOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRv
IGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGlj
aCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRv
IG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYg
KzM3NSwyMSBAQCB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgCiAgICAg
ICAgIGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIH0K
IAordm9pZCBkZmdMaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVlLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKK3sKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNv
ZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIAorICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIGlm
ICghY2FsbGVlQ29kZUJsb2NrIHx8IHN0YXRpY19jYXN0PGludD4oZXhlYy0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSkgPT0gY2FsbGVlQ29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpIHsK
KyAgICAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgICAgIGNhbGxM
aW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPmdsb2JhbERhdGEoKSwgY2Fs
bExpbmtJbmZvLmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgY2FsbGVlKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhv
dFBhdGhPdGhlciwgY29kZVB0cik7CisgICAgfQorICAgIAorICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG9w
ZXJhdGlvblZpcnR1YWxDYWxsKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lv
biA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIHZvaWQgZGZnUmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lk
IGRmZ0J1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1Jl
cGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCBk
ZmdMaW5rQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0
aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MywxNyArMzYz
LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGUKICAgICAgICAg
bm90VGFrZW4gPSB0bXA7CiAgICAgfQogCi0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNo
aWxkMSkpIHsKLSAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMik7CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgeworICAg
ICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIEpJVENvbXBpbGVy
OjpJbW0zMihpbW0pLCBvcDIuZ3ByKCkpLCB0YWtlbik7Ci0gICAgfSBlbHNlIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZklu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpOworICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50
KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJD
b25zdGFudChub2RlLmNoaWxkMigpKTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMy
KGNvbmRpdGlvbiwgb3AxLmdwcigpLCBKSVRDb21waWxlcjo6SW1tMzIoaW1tKSksIHRha2VuKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRp
dGlvbiwgb3AxLmdwcigpLCBvcDIuZ3ByKCkpLCB0YWtlbik7CiAgICAgfQogCkBAIC0zOTgsOCAr
Mzk4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQ2FsbAogICAgICAg
ICBub3RUYWtlbiA9IHRtcDsKICAgICB9CiAKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEpOwotICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7
CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFs
dWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICBHUFJSZWcgb3AxR1BSID0g
b3AxLmdwcigpOwogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKQEAgLTQ0OCwyMCArNDQ4LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIHN3aXRjaCAobV9q
aXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkpIHsKICAgICAgICAgY2FzZSBQ
cmVkaWN0SW50MzI6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2
YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAg
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIFByZWRpY3RBcnJheTogewotICAgICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIoY2VsbC5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5s
b2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9j
YWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC00NzMsMjMgKzQ3MywyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBj
YXNlIEJpdFhvcjoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
Mik7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AyKTsKIAotICAgICAgICAg
ICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSwgb3AyLmdwcigp
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQxKCkpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAg
fSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAotICAgICAgICAgICAgYml0
T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSwgb3AxLmdwcigpLCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQyKCkpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsK
QEAgLTUwMywxNyArNTAzLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNl
IEJpdFVSU2hpZnQ6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEpOworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAg
ICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGls
ZDIpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5n
cHIoKSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkgJiAweDFmLCByZXN1bHQu
Z3ByKCkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93
IHNoaWZ0IGFtb3VudCB0byBiZSB1c2VkIGFzIHRoZSByZXN1bHQsIE1hY3JvQXNzZW1ibGVyIGRv
ZXMgbm90IHBlcm1pdCB0aGlzLgotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAgICAgIEdQUlJlZyByZWcxID0g
b3AxLmdwcigpOwpAQCAtNTI1LDcgKzUyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFVJbnQzMlRvTnVtYmVy
OiB7Ci0gICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAg
ICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhlIG9wZXJh
bmQgaXMgcG9zaXRpdmUuCkBAIC01MzcsNyArNTM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7Ci0g
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Cisg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5t
b3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkpOwpAQCAtNTQ1LDE0ICs1NDUs
MTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAog
ICAgIGNhc2UgVmFsdWVUb051bWJlcjogewotICAgICAgICBpZiAoaXNJbnRlZ2VyKG5vZGUuY2hp
bGQxKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKTsKKyAgICAgICAgaWYgKGlzSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAg
ICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIG9wMS5mb3JtYXQoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQu
ZnByKCkpOwogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CkBAIC01NjEsMTAgKzU2MSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAKICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQy
KSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsKLSAg
ICAgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNo
aWxkMSk7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5j
aGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1
ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDIu
Z3ByKCksIEltbTMyKGltbTEpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTU3Myw5ICs1NzMsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
aXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICAgICAg
aW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpOworICAgICAg
ICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNo
aWxkMigpKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fz
c2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkp
OwpAQCAtNTg0LDggKzU4NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgICAgIEdQUlJlZyBncHIxID0gb3AxLmdwcigp
OwpAQCAtNjA0LDggKzYwNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEu
ZnByKCk7CkBAIC02MTcsMTAgKzYxNywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIpKSB7Ci0gICAg
ICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAg
ICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGls
ZDIpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBu
b2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNo
aWxkMigpKSkgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1
ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1t
MzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOwpAQCAtNjI5LDggKzYyOSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5n
cHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTYzOSw4ICs2MzksOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAog
ICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKQEAgLTY1Miw5ICs2NTIsOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBB
cml0aE11bDogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxk
MSwgbm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgIEdQUlJlZyBy
ZWcxID0gb3AxLmdwcigpOwpAQCAtNjcwLDggKzY3MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAg
ICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgRlBS
UmVnIHJlZzEgPSBvcDEuZnByKCk7CkBAIC02ODQsOCArNjg0LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhEaXY6IHsK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwot
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7Cisg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgIEZQUlJl
ZyByZWcxID0gb3AxLmZwcigpOwpAQCAtNjk3LDggKzY5Nyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0g
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0g
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7Cisg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwogICAgICAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IGVkeCh0aGlzLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAgICAgICAg
IEdQUlJlZyBvcDFHcHIgPSBvcDEuZ3ByKCk7CkBAIC03MjUsNyArNzI1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgTG9naWNh
bE5vdDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7
CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOyAvLyBGSVhNRTogV2UgY291bGQgcmV1c2Us
IGJ1dCBvbiBzcGVjdWxhdGlvbiBmYWlsIHdvdWxkIG5lZWQgcmVjb3ZlcnkgdG8gcmVzdG9yZSB0
YWcgKGFraW4gdG8gYWRkKS4KIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1
bHQuZ3ByKCkpOwpAQCAtNzQ2LDIwICs3NDYsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgLy8gc28gY2FuIGJlIG5vIGludGVydmVuaW5n
IG5vZGVzIHRvIGFsc28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAKICAgICAgICAgICAgIEFTU0VS
VChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAgICAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkKKyAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkp
KQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJh
bmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6TGVzc1RoYW4pOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUNhbGwobm9kZSwgYnJhbmNoTm9kZUluZGV4
LCBvcGVyYXRpb25Db21wYXJlTGVzcyk7CiAKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSk7
Ci0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hp
bGQxKCkpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgbV9j
b21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBOb3JtYWwgY2FzZSwgbm90IGZ1c2VkIHRvIGJyYW5jaC4KLSAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAg
IG1faml0LmNvbXBhcmUzMihKSVRDb21waWxlcjo6TGVzc1RoYW4sIG9wMS5ncHIoKSwgb3AyLmdw
cigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtNzc4LDIwICs3NzgsMjAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgLy8gc28gY2FuIGJlIG5vIGlu
dGVydmVuaW5nIG5vZGVzIHRvIGFsc28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAKICAgICAgICAg
ICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAgICAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkKKyAg
ICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUu
Y2hpbGQyKCkpKQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2go
bm9kZSwgYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6TGVzc1RoYW5PckVxdWFsKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVDYWxsKG5vZGUs
IGJyYW5jaE5vZGVJbmRleCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSk7CiAKLSAgICAgICAgICAg
IHVzZShub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIpOworICAgICAg
ICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkp
OwogICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3JtYWwgY2FzZSwgbm90IGZ1
c2VkIHRvIGJyYW5jaC4KLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3Ax
LCBvcDIpOwogCiAgICAgICAgIG1faml0LmNvbXBhcmUzMihKSVRDb21waWxlcjo6TGVzc1RoYW5P
ckVxdWFsLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTgxMCwxOSAr
ODEwLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5j
ZSB0aGUgY29tcGFyZS4gCiAgICAgICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50
KCkgPT0gMSk7CiAKLSAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUu
Y2hpbGQxLCBub2RlLmNoaWxkMikpCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgICAgICBjb21w
aWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGls
ZXI6OkVxdWFsKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjb21waWxlUGVl
cEhvbGVDYWxsKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgb3BlcmF0aW9uQ29tcGFyZUVxKTsKIAot
ICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxk
Mik7CisgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICB1c2Uobm9k
ZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRl
eDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICBtX2ppdC5jb21wYXJlMzIo
SklUQ29tcGlsZXI6OkVxdWFsLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsK
QEAgLTgzNCw4ICs4MzQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgfQogCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIG1faml0LmNvbXBh
cmUzMihKSVRDb21waWxlcjo6RXF1YWwsIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3By
KCkpOwpAQCAtODQ3LDE4ICs4NDcsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgTm9kZUlu
ZGV4IGFsaWFzID0gbm9kZS5jaGlsZDM7CisgICAgICAgIE5vZGVJbmRleCBhbGlhcyA9IG5vZGUu
Y2hpbGQzKCk7CiAgICAgICAgIGlmIChhbGlhcyAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiByZXN1bHQgc2hvdWxkIGJlIGFibGUgdG8gcmV1c2UgY2hpbGQxLCBjaGlsZDIuIFNo
b3VsZCBoYXZlIGFuICdVbnVzZWRPcGVyYW5kJyB0eXBlLgotICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYWxpYXNlZFZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKTsKKyAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFsaWFzZWRWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYWxpYXNlZFZhbHVlKTsKICAgICAgICAgICAgIG1f
aml0Lm1vdmUoYWxpYXNlZFZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHN0b3JhZ2UodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwpAQCAtODcxLDcgKzg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0
IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgp
LgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFy
cmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0gICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9q
aXQuZ3JhcGgoKVtub2RlLmNoaWxkMV07CisgICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQu
Z3JhcGgoKVtub2RlLmNoaWxkMSgpXTsKICAgICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExv
Y2FsIHx8IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihiYXNlTm9kZS5sb2NhbCgpKSAhPSBQ
cmVkaWN0QXJyYXkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpz
QXJyYXlWUHRyKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKQEAgLTg4
OCw5ICs4ODgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDMpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKIAogICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkgJiB2YWx1ZSBp
bnRvIHJlZ2lzdGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgpAQCAtOTAzLDcgKzkw
Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAg
ICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNv
bnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tp
cCB0aGUgY2hlY2suCi0gICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2Rl
LmNoaWxkMV07CisgICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNo
aWxkMSgpXTsKICAgICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8IG1faml0Lmdy
YXBoKCkuZ2V0UHJlZGljdGlvbihiYXNlTm9kZS5sb2NhbCgpKSAhPSBQcmVkaWN0QXJyYXkpCiAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3aXRoaW5BcnJheUJvdW5kcyA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CkBAIC05
NDUsOSArOTQ1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDMpOworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0g
YmFzZS5ncHIoKTsKQEAgLTk3Nyw3ICs5NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHZhbHVlUmVn
ID0gdmFsdWUuZ3ByKCk7CiAKICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBo
KCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgp
KTsKQEAgLTEwMTMsNyArMTAxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICNlbmRpZgogCiAgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVy
blZhbHVlR1BSLgotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEp
OworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
ICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAg
ICAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCkBAIC0xMDI5LDcgKzEwMjksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBDb252ZXJ0VGhpczogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUo
dGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFs
dWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVl
LmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CkBAIC0xMDQw
LDcgKzEwNDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIGJhc2UpOwogCiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBA
IC0xMDUyLDggKzEwNTIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlkOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
IAogICAgICAgICBjYWNoZWRQdXRCeUlkKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBzY3JhdGNo
LmdwcigpLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKQEAgLTEwNjMsOCAr
MTA2Myw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9
CiAKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAg
ICAgICAgIGNhY2hlZFB1dEJ5SWQoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIHNjcmF0Y2guZ3By
KCksIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOwpAQCAtMTA4NSw3ICsxMDg1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAg
IGNhc2UgUHV0R2xvYmFsVmFyOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBnbG9iYWxPYmplY3QodGhpcyk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAKQEAgLTExMTIsNiArMTEx
MiwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAjZWxzZQog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgorICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgY2FzZSBDYWxsOgorICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhp
cywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXSk7Cisg
ICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CisgICAgICAgIGVtaXRDYWxs
KG5vZGUsIGNhbGxlZUdQUik7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmIChub2Rl
Lmhhc1Jlc3VsdCgpICYmIG5vZGUubXVzdEdlbmVyYXRlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5MDMxMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlIGxhc3ROb2RlIGlzIGEgYnJhbmNoIG9uIHRoaXMgbm9kZS4KICAgICAgICAgTm9kZSYgbGFz
dE5vZGUgPSBtX2ppdC5ncmFwaCgpW2xhc3ROb2RlSW5kZXhdOwotICAgICAgICByZXR1cm4gbGFz
dE5vZGUub3AgPT0gQnJhbmNoICYmIGxhc3ROb2RlLmNoaWxkMSA9PSBtX2NvbXBpbGVJbmRleCA/
IGxhc3ROb2RlSW5kZXggOiBOb05vZGU7CisgICAgICAgIHJldHVybiBsYXN0Tm9kZS5vcCA9PSBC
cmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0Tm9kZUlu
ZGV4IDogTm9Ob2RlOwogICAgIH0KIAogICAgIGJvb2wgaXNJbnRlZ2VyKE5vZGVJbmRleCBub2Rl
SW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3Bh
Y2UgSlNDICB7CiAgICAgLy8gUGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0IGZ1
bmN0aW9ucy4KICAgICBjbGFzcyBFeGVjU3RhdGUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAgICBw
dWJsaWM6CisgICAgICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRo
aXNbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmpzVmFsdWUoKTsgfQogICAgICAgICBKU09iamVjdCog
Y2FsbGVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OkNhbGxlZV0uZnVuY3Rp
b24oKTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRo
aXNbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsgfQogICAg
ICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbigpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNiBAQCBKSVQ6OkpJVChK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFs
RGF0YSkKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fbGFiZWxzKGNvZGVC
bG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKLSAgICAsIG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8oY29kZUJsb2NrID8gY29kZUJsb2NrLT5udW1i
ZXJPZkNhbGxMaW5rSW5mb3MoKSA6IDApCiAgICAgLCBtX2J5dGVjb2RlT2Zmc2V0KCh1bnNpZ25l
ZCktMSkKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICwgbV9qdW1wVGFyZ2V0SW5kZXgoMCkK
QEAgLTM0Nyw3ICszNDYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCkpOworICAgIEFTU0VSVChtX2NhbGxMaW5r
SW5mb0luZGV4ID09IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsK
IAogI2lmbmRlZiBOREVCVUcKICAgICAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBp
dHMgdXNlIHdpdGggQVNTRVJUcy4KQEAgLTQ1MCw3ICs0NDksNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIH0KIAogICAgIEFTU0VSVChtX3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25JbmRleCA9PSBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUo
KSk7Ci0gICAgQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jb2RlQmxvY2stPm51bWJl
ck9mQ2FsbExpbmtJbmZvcygpKTsKKyAgICBBU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBt
X2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAKICNpZm5kZWYgTkRF
QlVHCiAgICAgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFT
U0VSVHMuCkBAIC01NzQsMTAgKzU3MywxMSBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZVB0ciogZnVuCiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1
cm5Mb2NhdGlvbik7CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZihtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7
CiAgICAgfQorICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsraSkgewog
ICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkp
OwogICAgICAgICBpbmZvLmlzQ2FsbCA9IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm9baV0uaXNDYWxsOwotICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZv
W2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9u
ID0gQ29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9j
YXRpb24pKTsKICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aEJlZ2luKTsK
ICAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGwobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoT3RoZXIpOwog
ICAgIH0KQEAgLTU5Miw3ICs1OTIsNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29k
ZVB0ciogZnVuCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSAmJiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICAgICAgKmZ1bmN0aW9uRW50cnlBcml0
eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKIAotICAgIHJldHVy
biBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICByZXR1cm4gSklUQ29kZShwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGUoKSwgSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogfQogCiB2b2lkIEpJ
VDo6bGlua0NhbGwoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9j
aywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0ciBjb2RlLCBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbywgaW50IGNhbGxlckFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCkBAIC02MDgsNyArNjA4LDcgQEAgdm9pZCBKSVQ6OmxpbmtDYWxsKEpTRnVuY3Rp
b24qIGNhbGxlZSwgQwogICAgIH0KIAogICAgIC8vIHBhdGNoIHRoZSBjYWxsIHNvIHdlIGRvIG5v
dCBjb250aW51ZSB0byB0cnkgdG8gbGluay4KLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
TGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZp
cnR1YWxDYWxsKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJD
YWxsKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKSwgZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aVZpcnR1YWxDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6bGlua0NvbnN0cnVjdChKU0Z1
bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNh
bGxlZUNvZGVCbG9jaywgSklUOjpDb2RlUHRyIGNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvLCBpbnQgY2FsbGVyQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKQEAgLTYy
NCw3ICs2MjQsNyBAQCB2b2lkIEpJVDo6bGlua0NvbnN0cnVjdChKU0Z1bmN0aW9uKiBjYWxsCiAg
ICAgfQogCiAgICAgLy8gcGF0Y2ggdGhlIGNhbGwgc28gd2UgZG8gbm90IGNvbnRpbnVlIHRvIHRy
eSB0byBsaW5rLgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdCgp
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsTGlu
a0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiksIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0
dWFsQ29uc3RydWN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMy
LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgYWRk
U2xvd0Nhc2UoanVtcFRvU2xvdyk7CiAgICAgQVNTRVJUX0pJVF9PRkZTRVQoZGlmZmVyZW5jZUJl
dHdlZW4oYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywganVtcFRvU2xvdyksIHBhdGNoT2Zm
c2V0T3BDYWxsQ29tcGFyZVRvSnVtcCk7CisgICAgCisgICAgQVNTRVJUKG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICBt
X2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLmFwcGVuZChTdHJ1Y3R1cmVTdHViQ29t
cGlsYXRpb25JbmZvKCkpOwogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9u
Q2hlY2s7CiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uaXNDYWxsID0gb3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3LDIw
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogICAgIGNsYXNz
IFJlZ2lzdGVyRmlsZTsKLQorICAgIAogICAgIGNsYXNzIEpJVENvZGUgewogICAgICAgICB0eXBl
ZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBDb2RlUmVmOwogICAgICAgICB0eXBlZGVmIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBDb2RlUHRyOwogICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBKSVRU
eXBlIHsgSG9zdENhbGxUaHVuaywgQmFzZWxpbmVKSVQsIERGR0pJVCB9OworCiAgICAgICAgIEpJ
VENvZGUoKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBKSVRDb2RlKGNvbnN0IENv
ZGVSZWYgcmVmKQorICAgICAgICBKSVRDb2RlKGNvbnN0IENvZGVSZWYgcmVmLCBKSVRUeXBlIGpp
dFR5cGUpCiAgICAgICAgICAgICA6IG1fcmVmKHJlZikKKyAgICAgICAgICAgICwgbV9qaXRUeXBl
KGppdFR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC05MywxMiArOTYsMTcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3JlZi5tX2V4ZWN1
dGFibGVQb29sLmdldCgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKSVRUeXBlIGpp
dFR5cGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9qaXRUeXBlOworICAgICAg
ICB9CiAKICAgICAgICAgLy8gSG9zdCBmdW5jdGlvbnMgYXJlIGEgYml0IHNwZWNpYWw7IHRoZXkg
aGF2ZSBhIG1fY29kZSBwb2ludGVyIGJ1dCB0aGV5CiAgICAgICAgIC8vIGRvIG5vdCBpbmRpdmlk
dWxseSByZWYgdGhlIGV4ZWN1dGFibGUgcG9vbCBjb250YWluaW5nIHRoZSB0cmFtcG9saW5lLgog
ICAgICAgICBzdGF0aWMgSklUQ29kZSBIb3N0RnVuY3Rpb24oQ29kZVB0ciBjb2RlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUQ29kZShjb2RlLmRhdGFMb2NhdGlvbigpLCAwLCAw
KTsKKyAgICAgICAgICAgIHJldHVybiBKSVRDb2RlKGNvZGUuZGF0YUxvY2F0aW9uKCksIDAsIDAs
IEhvc3RDYWxsVGh1bmspOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBjbGVhcigpCkBAIC0x
MDgsMTIgKzExNiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgSklUQ29kZSh2b2lkKiBjb2RlLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29s
PiBleGVjdXRhYmxlUG9vbCwgc2l6ZV90IHNpemUpCisgICAgICAgIEpJVENvZGUodm9pZCogY29k
ZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIHNpemVfdCBzaXpl
LCBKSVRUeXBlIGppdFR5cGUpCiAgICAgICAgICAgICA6IG1fcmVmKGNvZGUsIGV4ZWN1dGFibGVQ
b29sLCBzaXplKQorICAgICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICAgICAgewog
ICAgICAgICB9CiAKICAgICAgICAgQ29kZVJlZiBtX3JlZjsKKyAgICAgICAgSklUVHlwZSBtX2pp
dFR5cGU7CiAgICAgfTsKIAogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgTmF0
aXZlRXhlY3V0YWJsZTsKICAgICBjbGFzcyBWUHRySGFja0V4ZWN1dGFibGU7CisgICAgbmFtZXNw
YWNlIERGRyB7CisgICAgICAgIGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CisgICAgfQogCiAgICAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqKTsKIAogICAgIGNsYXNzIEpTRnVuY3Rpb24gOiBwdWJsaWMgSlNPYmplY3RX
aXRoR2xvYmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICAgICAgZnJp
ZW5kIGNsYXNzIERGRzo6SklUQ29kZUdlbmVyYXRvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpT
R2xvYmFsRGF0YTsKIAogICAgICAgICB0eXBlZGVmIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCBC
YXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw2ICsyMzQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSlNWYWx1ZSBleGNlcHRpb247CiAjaWYgRU5BQkxFKEpJVCkKICAgICAg
ICAgUmV0dXJuQWRkcmVzc1B0ciBleGNlcHRpb25Mb2NhdGlvbjsKKyAgICAgICAgSlNWYWx1ZSBo
b3N0Q2FsbFJldHVyblZhbHVlOwogI2VuZGlmCiAKICAgICAgICAgSGFzaE1hcDxPcGFxdWVKU0Ns
YXNzKiwgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKj4gb3BhcXVlSlNDbGFzc0RhdGE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99549</attachid>
            <date>2011-07-02 01:17:19 -0700</date>
            <delta_ts>2011-07-02 01:37:45 -0700</delta_ts>
            <desc>the patch (more fixes)</desc>
            <filename>call_patch_4.diff</filename>
            <type>text/plain</type>
            <size>97385</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAK
KzIwMTEtMDctMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IGlt
cGxlbWVudCBvcF9jYWxsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM4NTgKKworICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbDo6Q29kZUxvY2F0aW9uUG9z
c2libHlOZWFyQ2FsbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0TnVtYmVyT2ZDYWxsTGlua0lu
Zm9zKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0FsaWFz
VHJhY2tlci5oOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6bG9va3VwR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6ZXF1YWxJZ25vcmluZ0xhdGVy
TnVtZXJpY0NvbnZlcnNpb24pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRk
VmFyQXJnQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcmVkaWN0
SW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJz
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6cmVmQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6YWRkcmVzc09mQ2Fs
bERhdGEpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlY29yZDo6Q2FsbFJlY29yZCk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEpTQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OlByb3BlcnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vz
c1JlY29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpTQ2FsbFJlY29yZDo6
SlNDYWxsUmVjb3JkKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
aGlsZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmZpcnN0Q2hpbGQpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Om51bUNoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpiYXNp
Y0FyaXRoT3ApOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25z
Lmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRm
Z0xpbmtDYWxsKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmRldGVjdFBlZXBIb2xlQnJhbmNo
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhl
Y1N0YXRlOjpjYWxsZWVBc1ZhbHVlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtDb25zdHJ1Y3QpOgorICAgICAgICAqIGppdC9K
SVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAg
KiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAg
ICAgKEpTQzo6SklUQ29kZTo6aml0VHlwZSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RG
dW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuaDoKKwogMjAxMS0wNy0wMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIElFIFdlYiBXb3JrZXJzIGRlbW8gY3Jhc2hlcyBpbiBKU0M6
OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTksNiArMTE5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21t
b24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KIH07CiAKK2NsYXNzIENvZGVM
b2NhdGlvblBvc3NpYmx5TmVhckNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsKK3B1
YmxpYzoKKyAgICBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKCkgeyB9CisgICAgZXhwbGlj
aXQgQ29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9j
YXRpb24pCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSB7IH0KKyAgICBl
eHBsaWNpdCBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKHZvaWQqIGxvY2F0aW9uKQorICAg
ICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRpb24p
KSB7IH0KK307CisKIGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVibGljIENvZGVM
b2NhdGlvbkNvbW1vbiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIoKSB7
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaWYgRU5BQkxFKERG
R19KSVQpCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2VuZGlmCiAjaW5jbHVkZSAiRGVi
dWdnZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgpAQCAt
NDcsNiArNTAsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkK
K3VzaW5nIG5hbWVzcGFjZSBERkc7CisjZW5kaWYKKwogI2lmICFkZWZpbmVkKE5ERUJVRykgfHwg
RU5BQkxFKE9QQ09ERV9TQU1QTElORykKIAogc3RhdGljIFVTdHJpbmcgZXNjYXBlUXVvdGVzKGNv
bnN0IFVTdHJpbmcmIHN0cikKQEAgLTE2ODcsNyArMTY5NCwxNCBAQCB2b2lkIENvZGVCbG9jazo6
dW5saW5rQ2FsbHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsTGlua0luZm9z
LnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmICghbV9jYWxsTGlua0luZm9zW2ldLmlzTGlua2Vk
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
bV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9jYWxsTGlua0luZm9zW2ld
LmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDog
bV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7CisgICAg
ICAgIGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgeworI2lm
IEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxv
Y2F0aW9uQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0
aW9uTGlua0NhbGwpOworI2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
I2VuZGlmCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Q29kZUxvY2F0aW9uTmVhckNhbGwobV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlv
biksIG1fY2FsbExpbmtJbmZvc1tpXS5pc0NhbGwgPyBtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlWaXJ0dWFsQ2FsbExpbmsoKSA6IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxD
b25zdHJ1Y3RMaW5rKCkpOwogICAgICAgICBtX2NhbGxMaW5rSW5mb3NbaV0udW5saW5rKCk7CiAg
ICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwg
Y2FsbFJldHVybkxvY2F0aW9uOworICAgICAgICBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxs
IGNhbGxSZXR1cm5Mb2NhdGlvbjsgLy8gaXQncyBhIG5lYXIgY2FsbCBpbiB0aGUgb2xkIEpJVCwg
b3IgYSBub3JtYWwgY2FsbCBpbiBERkcKICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
IGhvdFBhdGhCZWdpbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVy
OwogICAgICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwpAQCAtMzc4LDgg
KzM3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBHbG9iYWxSZXNvbHZlSW5mbyYgZ2xv
YmFsUmVzb2x2ZUluZm8oaW50IGluZGV4KSB7IHJldHVybiBtX2dsb2JhbFJlc29sdmVJbmZvc1tp
bmRleF07IH0KICAgICAgICAgYm9vbCBoYXNHbG9iYWxSZXNvbHZlSW5mb0F0Qnl0ZWNvZGVPZmZz
ZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogCisgICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZD
YWxsTGlua0luZm9zKHNpemVfdCBzaXplKSB7IG1fY2FsbExpbmtJbmZvcy5ncm93KHNpemUpOyB9
CiAgICAgICAgIHNpemVfdCBudW1iZXJPZkNhbGxMaW5rSW5mb3MoKSBjb25zdCB7IHJldHVybiBt
X2NhbGxMaW5rSW5mb3Muc2l6ZSgpOyB9Ci0gICAgICAgIHZvaWQgYWRkQ2FsbExpbmtJbmZvKCkg
eyBtX2NhbGxMaW5rSW5mb3MuYXBwZW5kKENhbGxMaW5rSW5mbygpKTsgfQogICAgICAgICBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZv
c1tpbmRleF07IH0KIAogICAgICAgICB2b2lkIGFkZE1ldGhvZENhbGxMaW5rSW5mb3ModW5zaWdu
ZWQgbikgeyBtX21ldGhvZENhbGxMaW5rSW5mb3MuZ3JvdyhuKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODQsMTAgKzE2
ODQsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoCiAKICAgICBl
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0jZW5kaWYK
LQogICAgIC8vIEVtaXQgY2FsbC4KICAgICBlbWl0T3Bjb2RlKG9wY29kZUlEKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7IC8vIGZ1bmMKQEAgLTE4MDEsMTAgKzE3
OTcsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAKICAgICBl
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0jZW5kaWYK
LQogICAgIGVtaXRPcGNvZGUob3BfY29uc3RydWN0KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZnVuYy0+aW5kZXgoKSk7IC8vIGZ1bmMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2Fs
bEFyZ3VtZW50cy5jb3VudCgpKTsgLy8gYXJnQ291bnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFRoaXMgY2hlY2sgZW5zdXJlcyB0
aGUgYWNjZXNzZXMgYWxpYXMsIHByb3ZpZGVkIHRoYXQgdGhlIHN1YnNjcmlwdCBpcyBhbgogICAg
ICAgICAgICAgLy8gaW50ZWdlciBpbmRleCAodGhpcyBpcyBnb29kIGVub3VnaDsgdGhlIHNwZWN1
bGF0aXZlIHBhdGggd2lsbCBvbmx5IGdlbmVyYXRlCiAgICAgICAgICAgICAvLyBvcHRpbWl6ZWQg
YWNjZXNzZXMgdG8gaGFuZGxlIGludGVnZXIgc3Vic2NyaXB0cykuCi0gICAgICAgICAgICBpZiAo
cG9zc2libGVBbGlhcy5jaGlsZDEgPT0gYmFzZSAmJiBlcXVhbElnbm9yaW5nTGF0ZXJOdW1lcmlj
Q29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMiwgcHJvcGVydHkpKQorICAgICAgICAgICAg
aWYgKHBvc3NpYmxlQWxpYXMuY2hpbGQxKCkgPT0gYmFzZSAmJiBlcXVhbElnbm9yaW5nTGF0ZXJO
dW1lcmljQ29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMigpLCBwcm9wZXJ0eSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmIChvcDEgPT0gb3AyKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIE5v
ZGUmIG5vZGUyID0gbV9ncmFwaFtvcDJdOwotICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZh
bHVlVG9OdW1iZXIgfHwgbm9kZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIu
Y2hpbGQxOworICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwgbm9k
ZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIuY2hpbGQxKCk7CiAgICAgfQog
CiAgICAgLy8gVGhlIGdyYXBoLCB0byBsb29rIHVwIHBvdGVudGlhbGx5IGFsaWFzaW5nIG5vZGVz
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDggQEAgcHVibGlj
OgogICAgICAgICAsIG1fbnVtQXJndW1lbnRzKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCiAg
ICAgICAgICwgbV9wcmVzZXJ2ZWRWYXJzKGNvZGVCbG9jay0+bV9udW1WYXJzKQorICAgICAgICAs
IG1fcGFyYW1ldGVyU2xvdHMoMCkKKyAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAg
ICB7CiAgICAgfQogCkBAIC0xMjQsNyArMTI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlm
IChub2RlLm9wID09IEdldExvY2FsKQogICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7
CiAgICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDE7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9t
IHByaW9yIGJsb2NrcywKQEAgLTE1NSw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAg
IHJldHVybiBub2RlLmNoaWxkMTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwog
ICAgICAgICB9CiAKICAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpKTsKQEAg
LTE5MSw3ICsxOTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogCiAg
ICAgICAgIGlmIChub2RlLm9wID09IFVJbnQzMlRvTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJu
IG5vZGUuY2hpbGQxOworICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CiAKICAgICAg
ICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMgY29uc3RhbnRzIGJveGVkIGFzIEpTVmFsdWVzLgogICAg
ICAgICBpZiAobm9kZS5vcCA9PSBKU0NvbnN0YW50KSB7CkBAIC0zODIsNiArMzg0LDIzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHRJbmRleDsKICAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBvcCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBy
ZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7CisgICAgICAgIG1fZ3JhcGgu
YXBwZW5kKE5vZGUoTm9kZTo6VmFyQXJnLCBvcCwgbV9jdXJyZW50SW5kZXgsIG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFy
QXJncykpOworICAgICAgICAKKyAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzID0gMDsKKyAgICAg
ICAgCisgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCisgICAgICAgICAgICBtX2dy
YXBoLnJlZihyZXN1bHRJbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKKyAgICB9
CisgICAgdm9pZCBhZGRWYXJBcmdDaGlsZChOb2RlSW5kZXggY2hpbGQpCisgICAgeworICAgICAg
ICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgbV9udW1Q
YXNzZWRWYXJBcmdzKys7CisgICAgfQogCiAgICAgdm9pZCBwcmVkaWN0QXJyYXkoTm9kZUluZGV4
IG5vZGVJbmRleCkKICAgICB7CkBAIC0zOTYsMTAgKzQxNSwxMCBAQCBwcml2YXRlOgogICAgICAg
ICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKIAogICAgICAgICBpZiAobm9k
ZVB0ci0+b3AgPT0gVmFsdWVUb051bWJlcikKLSAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFw
aFtub2RlUHRyLT5jaGlsZDFdOworICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVQ
dHItPmNoaWxkMSgpXTsKIAogICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVmFsdWVUb0ludDMy
KQotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVQdHItPmNoaWxkMV07CisgICAg
ICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCldOwogCiAgICAgICAg
IGlmIChub2RlUHRyLT5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgIG1fZ3JhcGgucHJlZGlj
dChub2RlUHRyLT5sb2NhbCgpLCBQcmVkaWN0SW50MzIpOwpAQCAtNDUzLDYgKzQ3MiwxMyBAQCBw
cml2YXRlOgogICAgIC8vIHR5cGljYWxseSBlcXVhbCB0byB0aGUgbnVtYmVyIHZhcnMsIGJ1dCB3
ZSBleHBhbmQgdGhpcyB0byBjb3ZlciBhbGwKICAgICAvLyB0ZW1wb3JhcmllcyB0aGF0IHBlcnNp
c3QgYWNyb3NzIGJsb2NrcyAoZHVlcyB0byA/OiwgJiYsIHx8LCBldGMpLgogICAgIHVuc2lnbmVk
IG1fcHJlc2VydmVkVmFyczsKKyAgICAvLyBUaGUgbnVtYmVyIG9mIHNsb3RzIChpbiB1bml0cyBv
ZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8KKyAgICAvLyBwcmVhbGxvY2F0ZSBm
b3IgY2FsbHMgZW1hbmF0aW5nIGZyb20gdGhpcyBmcmFtZS4gVGhpcyBpbmNsdWRlcyB0aGUKKyAg
ICAvLyBzaXplIG9mIHRoZSBDYWxsRnJhbWUsIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBsZWFmIGZ1
bmN0aW9uLiAgKEkuZS4KKyAgICAvLyB0aGlzIGlzIDAgaWYgYW5kIG9ubHkgaWYgdGhpcyBmdW5j
dGlvbiBpcyBhIGxlYWYuKQorICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CisgICAgLy8g
VGhlIG51bWJlciBvZiB2YXIgYXJncyBwYXNzZWQgdG8gdGhlIG5leHQgdmFyIGFyZyBub2RlLgor
ICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkVmFyQXJnczsKIAogICAgIHN0cnVjdCBQaGlTdGFja0Vu
dHJ5IHsKICAgICAgICAgUGhpU3RhY2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywgTm9kZUluZGV4
IHBoaSwgdW5zaWduZWQgdmFyTm8pCkBAIC05NTcsNiArOTgzLDMwIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJu
LCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTEFT
VF9PUENPREUob3BfcmV0KTsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
b3BfY2FsbDogeworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGludCBhcmdDb3VudCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGZpcnN0
QXJnID0gcmVnaXN0ZXJPZmZzZXQgLSBhcmdDb3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIGZvciAoaW50IGFyZ0lkeCA9IGZpcnN0QXJnOyBhcmdJ
ZHggPCBmaXJzdEFyZyArIGFyZ0NvdW50OyBhcmdJZHgrKykKKyAgICAgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7CisgICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFk
ZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxsKTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBw
dXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCk7CisgICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0
aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KQorICAgICAgICAgICAgICAgIHNl
dChwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOworICAgICAgICAgICAgaWYgKFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArICh1bnNpZ25lZClhcmdDb3VudCA+IG1f
cGFyYW1ldGVyU2xvdHMpCisgICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50OworICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY2FsbCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IG9wX2NhbGxfcHV0X3Jlc3VsdDogeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgICAg
IEluc3RydWN0aW9uKiBjYWxsSW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gLSBPUENP
REVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICAgICAgQVNTRVJUKGludGVycHJldGVyLT5nZXRP
cGNvZGVJRChjYWxsSW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsKTsKKyNlbmRpZgor
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF9wdXRfcmVzdWx0KTsKKyAgICAgICAgfQog
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBQYXJzZSBmYWlsZWQhCkBAIC05ODks
MjIgKzEwMzksMjIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAg
ICAgICAgICAgICAgICB2YXIudmFsdWUgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAg
ICAgICAgcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywgdmFs
dWVJblByZWRlY2Vzc29yLCB2YXJObykpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX2dyYXBo
W3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgdmFs
dWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0uY2hpbGQxKCk7CiAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVj
ZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9
PSBQaGkpOwogCiAgICAgICAgICAgICBpZiAocGhpTm9kZS5yZWZDb3VudCgpKQogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAKLSAgICAgICAgICAgIGlm
IChwaGlOb2RlLmNoaWxkMSA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgICAgICBwaGlOb2RlLmNo
aWxkMSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxk
MSgpID09IE5vTm9kZSkgeworICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQu
Y2hpbGQxID0gdmFsdWVJblByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQyID09IE5vTm9kZSkg
ewotICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQyID0gdmFsdWVJblByZWRlY2Vzc29yOwor
ICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQyKCkgPT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAocGhpTm9kZS5jaGlsZDMgPT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS5j
aGlsZDMgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGls
ZDMoKSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVk
LmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIApAQCAtMTAxMywxMyArMTA2MywxMyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgaWYgKHBoaU5vZGUucmVmQ291bnQo
KSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkpOwogCi0gICAgICAgICAgICBu
ZXdQaGlOb2RlLmNoaWxkMSA9IHBoaU5vZGUuY2hpbGQxOwotICAgICAgICAgICAgbmV3UGhpTm9k
ZS5jaGlsZDIgPSBwaGlOb2RlLmNoaWxkMjsKLSAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGQz
ID0gcGhpTm9kZS5jaGlsZDM7Ci0KLSAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQxID0gbmV3UGhp
OwotICAgICAgICAgICAgcGhpTm9kZS5jaGlsZDEgPSB2YWx1ZUluUHJlZGVjZXNzb3I7Ci0gICAg
ICAgICAgICBwaGlOb2RlLmNoaWxkMyA9IE5vTm9kZTsKKyAgICAgICAgICAgIG5ld1BoaU5vZGUu
Y2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gcGhpTm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIG5l
d1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gcGhpTm9kZS5jaGlsZDIoKTsKKyAgICAg
ICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gcGhpTm9kZS5jaGlsZDMo
KTsKKworICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBuZXdQaGk7
CisgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHZhbHVlSW5QcmVk
ZWNlc3NvcjsKKyAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gTm9O
b2RlOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTA0Nyw5ICsxMDk3LDEwIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVmlydHVhbFJlZ2kKICAgICB1bnNpZ25lZCBzaXplRXhjbHVk
aW5nUGhpTm9kZXMgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS0+ZW5kOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzOyArK2kpIHsKICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbaV07CisgICAgICAgIAogICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCisgICAgICAgIAogICAgICAgICAv
LyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBncmFwaCwg
cmVmZXJlbmNpbmcKICAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9yIGJsb2Nrcy4KICAgICAg
ICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKQEAgLTEwNTcsOSArMTEwOCwxNCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpCiAgICAgICAgICAgICAvLyBhbGxv
Y2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBkbyBzbyBpbiB0aGlzCiAg
ICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNl
LCBhbmQgYQogICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVuIGl0
IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2Rl
LmNoaWxkMSk7Ci0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMik7Ci0gICAg
ICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMyk7CisgICAgICAgICAgICBpZiAobm9k
ZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgp
ICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgICAgICAgICBz
Y29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCkBAIC0xMDc1
LDcgKzExMzEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpCiAg
ICAgLy8gJ21fbnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQg
dGVtcG9yYXJpZXMgYWxsb2NhdGVkCiAgICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAoYW5kIGNoZWNr
ZWQgZm9yIG9uIGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQKICAgICAvLyBkaWZm
ZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBi
ZSByZXF1aXJlZC4KLSAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFs
bG9jYXRlZENvdW50KCkgKyBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5zaWduZWQgY2FsbGVlUmVn
aXN0ZXJzID0gc2NvcmVCb2FyZC5hbGxvY2F0ZWRDb3VudCgpICsgbV9wcmVzZXJ2ZWRWYXJzICsg
bV9wYXJhbWV0ZXJTbG90czsKICAgICBpZiAoKHVuc2lnbmVkKW1fY29kZUJsb2NrLT5tX251bUNh
bGxlZVJlZ2lzdGVycyA8IGNhbGxlZVJlZ2lzdGVycykKICAgICAgICAgbV9jb2RlQmxvY2stPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAjdW5kZWYgU1RSSU5H
SVpFX0RGR19PUF9FTlVNCiB9OwogCitjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5vZGVUeXBl
IG9wKQoreworICAgIHJldHVybiBkZmdPcE5hbWVzW29wICYgTm9kZUlkTWFza107Cit9CisKIHZv
aWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC03NSwxNCArODAsMjUgQEAg
dm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgICAgICBwcmludGYo
IiV1Iiwgbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgZWxzZQogICAgICAgICBwcmludGYo
Ii0iKTsKLSAgICBwcmludGYoIj5cdCVzKCIsIGRmZ09wTmFtZXNbb3AgJiBOb2RlSWRNYXNrXSk7
Ci0gICAgaWYgKG5vZGUuY2hpbGQxICE9IE5vTm9kZSkKLSAgICAgICAgcHJpbnRmKCJAJXUiLCBu
b2RlLmNoaWxkMSk7Ci0gICAgaWYgKG5vZGUuY2hpbGQyICE9IE5vTm9kZSkKLSAgICAgICAgcHJp
bnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKTsKLSAgICBpZiAobm9kZS5jaGlsZDMgIT0gTm9Ob2Rl
KQotICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMpOwotICAgIGJvb2wgaGFzUHJp
bnRlZCA9IG5vZGUuY2hpbGQxICE9IE5vTm9kZTsKKyAgICBwcmludGYoIj5cdCVzKCIsIG9wTmFt
ZShvcCkpOworICAgIGJvb2wgaGFzUHJpbnRlZDsKKyAgICBpZiAob3AgJiBOb2RlSGFzVmFyQXJn
cykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7
IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxk
SWR4KyspIHsKKyAgICAgICAgICAgIGlmIChoYXNQcmludGVkKQorICAgICAgICAgICAgICAgIHBy
aW50ZigiLCAiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW50ZigiQCV1IiwgbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgcHJpbnRm
KCIsIEAldSIsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSAhPSBO
b05vZGUpCisgICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMoKSk7CisgICAg
ICAgIGhhc1ByaW50ZWQgPSBub2RlLmNoaWxkMSgpICE9IE5vTm9kZTsKKyAgICB9CiAKICAgICBp
ZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewogICAgICAgICBwcmludGYoIiVzdmFyJXUiLCBoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCBub2RlLnZhck51bWJlcigpKTsKQEAgLTEzOCwyMSArMTU0LDI2
IEBAIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKIHsKICAgICBOb2RlJiBu
b2RlID0gYXQob3ApOwogCi0gICAgaWYgKG5vZGUuY2hpbGQxID09IE5vTm9kZSkgewotICAgICAg
ICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5vZGUuY2hpbGQzID09IE5vTm9kZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmVmKG5vZGUuY2hpbGQxKTsKLQotICAgIGlm
IChub2RlLmNoaWxkMiA9PSBOb05vZGUpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQzID09
IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJB
cmdzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQo
KTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hp
bGRJZHgrKykKKyAgICAgICAgICAgIHJlZihtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gTm9Ob2RlKSB7CisgICAg
ICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgJiYgbm9kZS5jaGlsZDMoKSA9
PSBOb05vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlZihu
b2RlLmNoaWxkMSgpKTsKKworICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUpIHsK
KyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVmKG5vZGUuY2hpbGQyKCkpOworCisgICAg
ICAgIGlmIChub2RlLmNoaWxkMygpID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmVmKG5vZGUuY2hpbGQzKCkpOwogICAgIH0KLSAgICByZWYobm9kZS5jaGlsZDIpOwot
Ci0gICAgaWYgKG5vZGUuY2hpbGQzID09IE5vTm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHJl
Zihub2RlLmNoaWxkMyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyAr
MTYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwogICAgIH0KIAor
I2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsK
KyNlbmRpZgorCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsK
KyAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKIHByaXZhdGU6CiAK
ICAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3Qg
KGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNl
IHZlcnNhLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCwyNCAr
MzAwLDI5IEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1ZShOb2QKIAogdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbihOb2RlJiBub2RlKQogewotICAgIE5vZGVJ
bmRleCBjaGlsZDEgPSBub2RlLmNoaWxkMTsKLSAgICBpZiAoY2hpbGQxID09IE5vTm9kZSkgewot
ICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5vZGUuY2hpbGQzID09IE5v
Tm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdXNlKGNoaWxkMSk7Ci0KLSAgICBO
b2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDI7Ci0gICAgaWYgKGNoaWxkMiA9PSBOb05vZGUp
IHsKLSAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQzID09IE5vTm9kZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgdXNlKGNoaWxkMik7Ci0KLSAgICBOb2RlSW5kZXggY2hpbGQzID0gbm9k
ZS5jaGlsZDM7Ci0gICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1c2UoY2hpbGQzKTsKKyAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHgg
PCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAg
ICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gbm9kZS5jaGlsZDEoKTsK
KyAgICAgICAgaWYgKGNoaWxkMSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2Rl
LmNoaWxkMigpID09IE5vTm9kZSAmJiBub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXNlKGNoaWxkMSk7CisgICAgICAgIAor
ICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDIoKTsKKyAgICAgICAgaWYgKGNo
aWxkMiA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5v
Tm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXNlKGNoaWxk
Mik7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gbm9kZS5jaGlsZDMoKTsK
KyAgICAgICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHVzZShjaGlsZDMpOworICAgIH0KIH0KIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNo
ZWRHZXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKQEAgLTQyNSw2
ICs0MzAsODQgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNoZWRQdXRCeUlkKEdQUgogICAg
IG1faml0LmFkZFByb3BlcnR5QWNjZXNzKGZ1bmN0aW9uQ2FsbCwgY2hlY2tJbW1Ub0NhbGwsIGNh
bGxUb0NoZWNrLCBjYWxsVG9TdG9yZSwgY2FsbFRvU2xvd0Nhc2UsIGNhbGxUb0RvbmUsIHN0YXRp
Y19jYXN0PGludDhfdD4oYmFzZUdQUiksIHN0YXRpY19jYXN0PGludDhfdD4odmFsdWVHUFIpLCBz
dGF0aWNfY2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKTsKIH0KIAordm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjplbWl0Q2FsbChOb2RlJiBub2RlLCBHUFJSZWcgdGFyZ2V0R1BSKQoreworICAgIC8vIHRo
ZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBmdW5jdGlvbiAo
bm9ybWFsIGNhbGwpIG9yIHRoZQorICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCkuIHN1YnNl
cXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCisgICAgaW50IG51bUFyZ3MgPSBub2Rl
Lm51bUNoaWxkcmVuKCkgLSAxOworICAgIAorICAgIC8vIGFtb3VudCBvZiBzdHVmZiAoaW4gdW5p
dHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvIHBsYWNlIGF0IHRoZQorICAg
IC8vIHRvcCBvZiB0aGUgSlMgc3RhY2suCisgICAgaW50IGNhbGxEYXRhU2l6ZSA9IDA7CisKKyAg
ICAvLyBmaXJzdCB0aGVyZSBhcmUgdGhlIGFyZ3VtZW50cworICAgIGNhbGxEYXRhU2l6ZSArPSBu
dW1BcmdzOworICAgIAorICAgIC8vIGFuZCB0aGVuIHRoZXJlIGlzIHRoZSBjYWxsIGZyYW1lIGhl
YWRlcgorICAgIGNhbGxEYXRhU2l6ZSArPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emU7CisgICAgCisgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bUFyZ3MpKSksIGFkZHJlc3NPZkNhbGxEYXRh
KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOworICAgIG1faml0LnN0b3JlUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNh
bGxlckZyYW1lKSk7CisgICAgCisgICAgZm9yIChpbnQgYXJnSWR4ID0gMDsgYXJnSWR4IDwgbnVt
QXJnczsgYXJnSWR4KyspIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIG1faml0
LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBhcmdJZHhd
KTsKKyAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAgICAgICAgCisgICAgICAg
IG1faml0LnN0b3JlUHRyKGFyZ0dQUiwgYWRkcmVzc09mQ2FsbERhdGEoLWNhbGxEYXRhU2l6ZSAr
IGFyZ0lkeCkpOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICBjYXNl
IENhbGw6CisgICAgICAgIG1faml0LnN0b3JlUHRyKHRhcmdldEdQUiwgYWRkcmVzc09mQ2FsbERh
dGEoUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAg
ICBmbHVzaFJlZ2lzdGVycygpOworICAgIAorICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIEpJVENvbXBpbGVyOjpE
YXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aDsKKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICBjYXNlIENhbGw6CisgICAgICAg
IHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgdGFyZ2V0R1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRhcmdldEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5zdG9yZVB0
cihyZXN1bHRHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNv
ZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCisgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFz
dENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGws
IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworICAgIAorICAg
IEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgc2xvd1Bh
dGgubGluaygmbV9qaXQpOworICAgIAorICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2Rl
QmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgSklUQ29t
cGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25D
aGVjayhvcGVyYXRpb25MaW5rQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhj
ZXB0aW9uSW5mbyk7CisgICAgbV9qaXQubW92ZShJbW0zMihudW1BcmdzKSwgR1BSSW5mbzo6cmVn
VDEpOworICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgIG1faml0Lm5vdGlmeUNhbGwobV9qaXQuY2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiksIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworICAg
IAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIAorICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENh
bGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCB0cnVlLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5leGNlcHRpb25JbmZvKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBjb25z
dCBjaGFyKiBkYXRhRm9ybWF0U3RyaW5nKERhdGFGb3JtYXQgZm9ybWF0KQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMiw2ICs1MjIsMTMgQEAgcHJvdGVjdGVkOgogICAg
IAogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQ
UiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhU
YXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoR1BS
UmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFy
Z2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MgYWRkcmVzc09mQ2FsbERhdGEoaW50IGlkeCkKKyAgICB7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKG1faml0
LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGlkeCkgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbWl0Q2FsbChO
b2RlJiwgR1BSUmVnIHRhcmdldEdQUik7CiAKICAgICAvLyBDYWxsZWQgb25jZSBhIG5vZGUgaGFz
IGNvbXBsZXRlZCBjb2RlIGdlbmVyYXRpb24gYnV0IHByaW9yIHRvIHNldHRpbmcKICAgICAvLyBp
dHMgcmVzdWx0LCB0byBmcmVlIHVwIGl0cyBjaGlsZHJlbi4gKFRoaXMgbXVzdCBoYXBwZW4gcHJp
b3IgdG8gc2V0dGluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw2ICsyOTQsNyBAQCB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAgICAgICAgIC8vIElmIGNv
bXBpbGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxlZCwgdGhyb3cgYXdheSB0
aGUgY29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xlYXIoKTsKICAgICAgICAg
bV9wcm9wZXJ0eUFjY2Vzc2VzLmNsZWFyKCk7CisgICAgICAgIG1fanNDYWxscy5jbGVhcigpOwog
ICAgICAgICByZXdpbmRUb0xhYmVsKHNwZWN1bGF0aXZlUGF0aEJlZ2luKTsKIAogICAgICAgICBT
cGVjdWxhdGlvbkNoZWNrVmVjdG9yIG5vQ2hlY2tzOwpAQCAtMzY5LDEzICszNzAsMTUgQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogI2VuZGlmCiAKICAgICAvLyBM
aW5rIGFsbCBjYWxscyBvdXQgZnJvbSB0aGUgSklUIGNvZGUgdG8gdGhlaXIgcmVzcGVjdGl2ZSBm
dW5jdGlvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGxpbmtCdWZmZXIubGluayhtX2NhbGxzW2ldLm1fY2FsbCwgbV9jYWxsc1tp
XS5tX2Z1bmN0aW9uKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9jYWxsc1tpXS5tX2Z1bmN0aW9uLnZhbHVlKCkpCisg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5tX2NhbGwsIG1fY2FsbHNbaV0u
bV9mdW5jdGlvbik7CisgICAgfQogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0NhbGxSZXR1
cm5JbmRpY2VzKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2stPmNhbGxSZXR1cm5JbmRleFZlY3Rv
cigpLnJlc2VydmVDYXBhY2l0eShleGNlcHRpb25DaGVja0NvdW50KTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChtX2NhbGxzW2ldLm1fZXhjZXB0aW9uQ2hlY2suaXNTZXQoKSkgeworICAgICAgICAgICAgaWYg
KG1fY2FsbHNbaV0ubV9oYW5kbGVzRXhjZXB0aW9ucykgewogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHJldHVybkFkZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFkZHJlc3NPZmZzZXQo
bV9jYWxsc1tpXS5tX2NhbGwpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbklu
Zm8gPSBtX2NhbGxzW2ldLm1fZXhjZXB0aW9uSW5mbzsKICAgICAgICAgICAgICAgICBtX2NvZGVC
bG9jay0+Y2FsbFJldHVybkluZGV4VmVjdG9yKCkuYXBwZW5kKENhbGxSZXR1cm5PZmZzZXRUb0J5
dGVjb2RlT2Zmc2V0KHJldHVybkFkZHJlc3NPZmZzZXQsIGV4Y2VwdGlvbkluZm8pKTsKQEAgLTM5
NiwxMyArMzk5LDIyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QK
ICAgICAgICAgaW5mby52YWx1ZUdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3ZhbHVlR1BS
OwogICAgICAgICBpbmZvLnUudW5zZXQuc2NyYXRjaEdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX3NjcmF0Y2hHUFI7CiAgICAgfQotCisgICAgCisgICAgbV9jb2RlQmxvY2stPnNldE51bWJl
ck9mQ2FsbExpbmtJbmZvcyhtX2pzQ2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIENhbGxMaW5rSW5mbyYg
aW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CisgICAgICAgIGluZm8uaXNDYWxs
ID0gbV9qc0NhbGxzW2ldLm1faXNDYWxsOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biA9IENvZGVMb2NhdGlvblBvc3NpYmx5TmVhckNhbGwobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1f
anNDYWxsc1tpXS5tX3Nsb3dDYWxsKSk7CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fanNDYWxsc1tpXS5tX3RhcmdldFRvQ2hlY2spOworICAgICAg
ICBpbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanND
YWxsc1tpXS5tX2Zhc3RDYWxsKTsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHN3aXRjaCB0
aGUgcmVnaXN0ZXIgZmlsZSBjaGVjayAmIGFyaXR5IGNoZWNrIG92ZXIgdG8gREZHT3BlcnRhaW9u
IHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJzLgogICAgIGxpbmtCdWZmZXIubGluayhjYWxsUmVn
aXN0ZXJGaWxlQ2hlY2ssIGN0aV9yZWdpc3Rlcl9maWxlX2NoZWNrKTsKICAgICBsaW5rQnVmZmVy
LmxpbmsoY2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBjdGlf
b3BfY29uc3RydWN0X2FyaXR5Q2hlY2sgOiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKTsKIAogICAg
IGVudHJ5V2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7
Ci0gICAgZW50cnkgPSBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpOworICAgIGVudHJ5ID0gSklU
Q29kZShsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpERkdKSVQpOwogfQogCiAj
aWYgREZHX0pJVF9BU1NFUlQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIHN0cnVj
dCBDYWxsUmVjb3JkIHsKICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGws
IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAgICAgICAs
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0aW9ucyhmYWxz
ZSkKICAgICB7CiAgICAgfQogCkBAIC03NCw2ICs3NSwxNyBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7
CiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNo
ZWNrKGV4Y2VwdGlvbkNoZWNrKQogICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKKyAgICB7CisgICAgfQor
CisgICAgLy8gQ29uc3RydWN0b3IgZm9yIGEgY2FsbCB0aGF0IG1heSBjYXVzZSBleGNlcHRpb25z
LCBidXQgd2hpY2ggYXJlIGhhbmRsZWQKKyAgICAvLyB0aHJvdWdoIHNvbWUgbWVjaGFuaXNtIG90
aGVyIHRoYW4gdGhlIGluLWxpbmUgZXhjZXB0aW9uIGhhbmRsZXIuCisgICAgQ2FsbFJlY29yZChN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgRXhjZXB0aW9u
SW5mbyBleGNlcHRpb25JbmZvKQorICAgICAgICA6IG1fY2FsbChjYWxsKQorICAgICAgICAsIG1f
ZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbklu
Zm8pCisgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0aW9ucyh0cnVlKQogICAgIHsKICAgICB9CiAK
QEAgLTgxLDYgKzkzLDcgQEAgc3RydWN0IENhbGxSZWNvcmQgewogICAgIEZ1bmN0aW9uUHRyIG1f
ZnVuY3Rpb247CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9leGNlcHRpb25DaGVjazsKICAg
ICBFeGNlcHRpb25JbmZvIG1fZXhjZXB0aW9uSW5mbzsKKyAgICBib29sIG1faGFuZGxlc0V4Y2Vw
dGlvbnM7CiB9OwogCiAvLyA9PT0gSklUQ29tcGlsZXIgPT09CkBAIC0xNTgsNiArMTcxLDEyIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfQor
ICAgIAorICAgIC8vIE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJlcXVp
cmUgbGlua2luZy4KKyAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBjYWxsLCB1bnNpZ25lZCBleGNl
cHRpb25JbmZvKQorICAgIHsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxs
LCBGdW5jdGlvblB0cigpLCBleGNlcHRpb25JbmZvKSk7CisgICAgfQogCiAgICAgLy8gQWRkIGEg
Y2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAg
dm9pZCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikKQEAgLTE3NCw2ICsx
OTMsMTUgQEAgcHVibGljOgogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0
aW9uQ2FsbCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBleGNlcHRpb25JbmZvKSk7CiAgICAg
ICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgfQorICAgIAorICAgIC8vIEFkZCBhIGNhbGwg
b3V0IGZyb20gSklUIGNvZGUsIHdpdGggYSBmYXN0IGV4Y2VwdGlvbiBjaGVjayB0aGF0IHRlc3Rz
IGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KKyAgICBDYWxsIGFwcGVuZENhbGxXaXRoRmFz
dEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgdW5zaWduZWQgZXhj
ZXB0aW9uSW5mbykKKyAgICB7CisgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCgpOwor
ICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVu
Y3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKKyAgICB9CiAKICAgICAvLyBIZWxwZXIgbWV0aG9k
cyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgogICAgIGJvb2wgaXNDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KQpAQCAtMjM3LDYgKzI2NSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBtX3Byb3BlcnR5QWNjZXNzZXMuYXBwZW5kKFByb3BlcnR5QWNjZXNzUmVjb3JkKGZ1bmN0
aW9uQ2FsbCwgZGVsdGFDaGVja0ltbVRvQ2FsbCwgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSwgZGVsdGFDYWxsVG9TbG93Q2FzZSwgZGVsdGFDYWxsVG9Eb25l
LCAgYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIpKTsKICAgICB9CisgICAgCisgICAgdm9p
ZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRh
cmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHsK
KyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxs
LCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGV4Y2VwdGlvbkluZm8pKTsKKyAgICB9CiAKIHByaXZh
dGU6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB1c2VkIGluIGxpbmtpbmcgdGhlIHNwZWN1bGF0aXZl
ICYgbm9uLXNwZWN1bGF0aXZlIHBhdGhzIHRvZ2V0aGVyLgpAQCAtMjU5LDcgKzI5Miw3IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAKICAgICBzdHJ1Y3QgUHJv
cGVydHlBY2Nlc3NSZWNvcmQgewotICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChKSVRDb21w
aWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludDhfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQ4
X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgaW50OF90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUs
IGludDhfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBpbnQ4X3QgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4
X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRjaEdQUikKKyAgICAgICAg
UHJvcGVydHlBY2Nlc3NSZWNvcmQoQ2FsbCBmdW5jdGlvbkNhbGwsIGludDhfdCBkZWx0YUNoZWNr
SW1tVG9DYWxsLCBpbnQ4X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgaW50OF90IGRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUsIGludDhfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBpbnQ4X3QgZGVsdGFD
YWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRj
aEdQUikKICAgICAgICAgICAgIDogbV9mdW5jdGlvbkNhbGwoZnVuY3Rpb25DYWxsKQogICAgICAg
ICAgICAgLCBtX2RlbHRhQ2hlY2tJbW1Ub0NhbGwoZGVsdGFDaGVja0ltbVRvQ2FsbCkKICAgICAg
ICAgICAgICwgbV9kZWx0YUNhbGxUb1N0cnVjdENoZWNrKGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sp
CkBAIC0yODIsOCArMzE1LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGludDhfdCBtX3ZhbHVlR1BS
OwogICAgICAgICBpbnQ4X3QgbV9zY3JhdGNoR1BSOwogICAgIH07CisgICAgCisgICAgc3RydWN0
IEpTQ2FsbFJlY29yZCB7CisgICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxs
IHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2ln
bmVkIGV4Y2VwdGlvbkluZm8pCisgICAgICAgICAgICA6IG1fZmFzdENhbGwoZmFzdENhbGwpCisg
ICAgICAgICAgICAsIG1fc2xvd0NhbGwoc2xvd0NhbGwpCisgICAgICAgICAgICAsIG1fdGFyZ2V0
VG9DaGVjayh0YXJnZXRUb0NoZWNrKQorICAgICAgICAgICAgLCBtX2lzQ2FsbChpc0NhbGwpCisg
ICAgICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENhbGwgbV9mYXN0Q2FsbDsKKyAgICAgICAgQ2Fs
bCBtX3Nsb3dDYWxsOworICAgICAgICBEYXRhTGFiZWxQdHIgbV90YXJnZXRUb0NoZWNrOworICAg
ICAgICBib29sIG1faXNDYWxsOworICAgICAgICB1bnNpZ25lZCBtX2V4Y2VwdGlvbkluZm87Cisg
ICAgfTsKIAogICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0eUFj
Y2Vzc2VzOworICAgIFZlY3RvcjxKU0NhbGxSZWNvcmQsIDQ+IG1fanNDYWxsczsKIH07CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBAIHR5cGVkZWYgdWludDMyX3QgRXhj
ZXB0aW9uSW5mbzsKICNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgMHg0MDAwMAogI2RlZmluZSBO
b2RlSXNCcmFuY2ggICAgICAweDgwMDAwCiAjZGVmaW5lIE5vZGVJc1Rlcm1pbmFsICAgMHgxMDAw
MDAKKyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAweDIwMDAwMAogCiAvLyBUaGVzZSB2YWx1ZXMg
cmVjb3JkIHRoZSByZXN1bHQgdHlwZSBvZiB0aGUgbm9kZSAoYXMgY2hlY2tlZCBieSBOb2RlUmVz
dWx0TWFzaywgYWJvdmUpLCAwIGZvciBubyByZXN1bHQuCiAjZGVmaW5lIE5vZGVSZXN1bHRKUyAg
ICAgIDB4MTAwMApAQCAtMTM2LDYgKzEzNyw5IEBAIHR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9u
SW5mbzsKICAgICBtYWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhDb21wYXJlU3RyaWN0RXEsIE5vZGVSZXN1bHRKUykgXAogICAgIFwK
KyAgICAvKiBDYWxscy4gKi9cCisgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgXAogICAgIC8qIE5vZGVzIGZvciBt
aXNjIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0SlMpIFwKQEAgLTE3Myw0MyAr
MTc3LDYwIEBAIHN0cnVjdCBPcEluZm8gewogLy8KIC8vIE5vZGUgcmVwcmVzZW50cyBhIHNpbmds
ZSBvcGVyYXRpb24gaW4gdGhlIGRhdGEgZmxvdyBncmFwaC4KIHN0cnVjdCBOb2RlIHsKKyAgICBl
bnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OworCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRo
IHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBl
IG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUp
CiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZv
KQotICAgICAgICAsIGNoaWxkMShjaGlsZDEpCi0gICAgICAgICwgY2hpbGQyKGNoaWxkMikKLSAg
ICAgICAgLCBjaGlsZDMoY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOworICAgICAgICBjaGlsZHJlbi5maXhl
ZC5jaGlsZDEgPSBjaGlsZDE7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IGNoaWxk
MjsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gY2hpbGQzOwogICAgIH0KIAogICAg
IC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlh
dGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25J
bmZvLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9w
KQogICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKLSAgICAgICAgLCBjaGls
ZDEoY2hpbGQxKQotICAgICAgICAsIGNoaWxkMihjaGlsZDIpCi0gICAgICAgICwgY2hpbGQzKGNo
aWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1
ZSkKICAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAg
ICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQxOworICAgICAgICBjaGlsZHJlbi5maXhl
ZC5jaGlsZDIgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IGNoaWxk
MzsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJl
biBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0
aW9uSW5mbyBleGNlcHRpb25JbmZvLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIE5vZGVJbmRl
eCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgZXhjZXB0aW9uSW5m
byhleGNlcHRpb25JbmZvKQotICAgICAgICAsIGNoaWxkMShjaGlsZDEpCi0gICAgICAgICwgY2hp
bGQyKGNoaWxkMikKLSAgICAgICAgLCBjaGlsZDMoY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVh
bFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgw
KQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKICAgICAgICAgLCBtX29wSW5mbzIo
aW1tMi5tX3ZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJn
cykpOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBjaGlsZDE7CisgICAgICAgIGNo
aWxkcmVuLmZpeGVkLmNoaWxkMiA9IGNoaWxkMjsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hp
bGQzID0gY2hpbGQzOworICAgIH0KKyAgICAKKyAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGgg
YSB2YXJpYWJsZSBudW1iZXIgb2YgY2hpbGRyZW4gYW5kIG5vIGltbWVkaWF0ZSB2YWx1ZXMuCisg
ICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbklu
Zm8sIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQorICAgICAgICA6
IG9wKG9wKQorICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAg
LCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAsIG1f
cmVmQ291bnQoMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsK
KyAgICAgICAgY2hpbGRyZW4udmFyaWFibGUuZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQ7CisgICAg
ICAgIGNoaWxkcmVuLnZhcmlhYmxlLm51bUNoaWxkcmVuID0gbnVtQ2hpbGRyZW47CiAgICAgfQog
CiAgICAgYm9vbCBtdXN0R2VuZXJhdGUoKQpAQCAtMzUwLDEzICszNzEsNTEgQEAgc3RydWN0IE5v
ZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG11c3RHZW5lcmF0ZSgpID8gbV9yZWZDb3VudCAt
IDEgOiBtX3JlZkNvdW50OwogICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggY2hpbGQxKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgcmV0
dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKKyAgICB9CiAKKyAgICBOb2RlSW5kZXggY2hpbGQy
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAg
ICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMjsKKyAgICB9CisKKyAgICBOb2RlSW5kZXgg
Y2hpbGQzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsK
KyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMzsKKyAgICB9CisgICAgCisgICAg
dW5zaWduZWQgZmlyc3RDaGlsZCgpCisgICAgeworICAgICAgICBBU1NFUlQob3AgJiBOb2RlSGFz
VmFyQXJncyk7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi52YXJpYWJsZS5maXJzdENoaWxkOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbigpCisgICAgeworICAgICAgICBB
U1NFUlQob3AgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi52YXJp
YWJsZS5udW1DaGlsZHJlbjsKKyAgICB9CisgICAgCiAgICAgLy8gVGhpcyBlbnVtIHZhbHVlIGRl
c2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUgbm9kZS4KICAgICBOb2RlVHlwZSBvcDsKICAgICAvLyBV
c2VkIHRvIGxvb2sgdXAgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkg
aW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCiAgICAgRXhjZXB0aW9uSW5mbyBleGNl
cHRpb25JbmZvOwogICAgIC8vIFJlZmVyZW5jZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiAoMCBmb3Ig
bm8gY2hpbGQpLgotICAgIE5vZGVJbmRleCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzOworICAgIHVu
aW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZDEsIGNo
aWxkMiwgY2hpbGQzOworICAgICAgICB9IGZpeGVkOworICAgICAgICBzdHJ1Y3QgeworICAgICAg
ICAgICAgdW5zaWduZWQgZmlyc3RDaGlsZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUNoaWxk
cmVuOworICAgICAgICB9IHZhcmlhYmxlOworICAgIH0gY2hpbGRyZW47CiAKIHByaXZhdGU6CiAg
ICAgLy8gVGhlIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbikgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25T
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2NSw4ICsyNjUsOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjprbm93bkNvbnN0YW50
QXJpCiAKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcChOb2RlVHlwZSBvcCwg
Tm9kZSAmbm9kZSkKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQx
KTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBh
cmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKQEAgLTI3Nyw5ICsy
NzcsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpiYXNpY0FyaXRoT3AoTm9kCiAgICAgCiAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIAotICAgIGlmICghaXNLbm93
bkludGVnZXIobm9kZS5jaGlsZDEpKQorICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGls
ZDEoKSkpCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
LSAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkKKyAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSk7CiAgICAgCiAgICAgc3dpdGNoIChvcCkgewpAQCAtMzQ2LDggKzM0Niw4
IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm8KIHsKICAgICAvLyBG
SVhNRTogc2hvdWxkIGRvIHNvbWUgcGVlcGhvbGUgdG8gZnVzZSBjb21wYXJlL2JyYW5jaAogICAg
ICAgICAKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICBK
U1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAg
IEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKICAgICAKQEAgLTM1Niw5ICszNTYsOSBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vCiAgICAgCiAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIAotICAgIGlmICghaXNLbm93bkludGVnZXIo
bm9kZS5jaGlsZDEpKQorICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkpCiAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQyKCkpKQogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSk7CiAgICAgCiAgICAgbV9qaXQuY29tcGFyZTMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIs
IHJlc3VsdEdQUik7CkBAIC0zOTcsNyArMzk3LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShTcGVjdWxhdAogCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgQ29udmVydFRo
aXM6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQx
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICBHUFJSZWcgdGhpc0dQUiA9IHRoaXNWYWx1ZS5ncHIoKTsKICAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKIApAQCAtNDI0LDcgKzQyNCw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIG1faml0LnN0
b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkp
KTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAg
LTQzMywyMyArNDMzLDIzIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNhc2UgQml0WG9yOgot
ICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSkgewotICAgICAgICAgICAg
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgaWYgKGlzSW50
MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDIpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDEpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBi
aXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSksIG9wMi5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIpKSB7Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEpOworICAgICAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigp
KSkgeworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAg
ICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpLCBvcDEuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDIoKSksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAg
ICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSk7Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIp
OworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAg
ICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwpAQCAtNDYzLDExICs0NjMsMTEgQEAgdm9pZCBO
b25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIGNhc2UgQml0UlNoaWZ0Ogog
ICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsK
IAotICAgICAgICAgICAgaW50IHNoaWZ0QW1vdW50ID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIpICYgMHgxZjsKKyAgICAgICAgICAgIGludCBzaGlmdEFtb3VudCA9IHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpICYgMHgxZjsKICAgICAgICAgICAgIC8vIFNoaWZ0
cyBieSB6ZXJvIHNob3VsZCBoYXZlIGJlZW4gb3B0aW1pemVkIG91dCBvZiB0aGUgZ3JhcGghCiAg
ICAgICAgICAgICBBU1NFUlQoc2hpZnRBbW91bnQpOwogICAgICAgICAgICAgc2hpZnRPcChvcCwg
b3AxLmdwcigpLCBzaGlmdEFtb3VudCwgcmVzdWx0LmdwcigpKTsKQEAgLTQ3NSw4ICs0NzUsOCBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93IHNoaWZ0IGFtb3VudCB0byBiZSB1c2Vk
IGFzIHRoZSByZXN1bHQsIE1hY3JvQXNzZW1ibGVyIGRvZXMgbm90IHBlcm1pdCB0aGlzLgotICAg
ICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAg
ICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgICAgICBJ
bnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBJbnRl
Z2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3Ax
LmdwcigpOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoU3BlY3VsYXQKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7
Ci0gICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAg
IEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVt
cG9yYXJ5IGJveGVyKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSk7CiAgICAgICAgIApAQCAtNTEzLDI2ICs1MTMsMjYgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7Ci0g
ICAgICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSk7CisgICAgICAgIEFT
U0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKIAotICAgICAgICBpZiAoaXNL
bm93bkludGVnZXIobm9kZS5jaGlsZDEpKSB7Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBpZiAoaXNLbm93bkludGVnZXIobm9kZS5j
aGlsZDEoKSkpIHsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAg
ICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGNoaWxkSW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMV0udmlydHVhbFJl
Z2lzdGVyKCldOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgY2hpbGRJbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxKCldLnZpcnR1YWxSZWdpc3RlcigpXTsK
ICAgICAgICAgaWYgKChjaGlsZEluZm8ucmVnaXN0ZXJGb3JtYXQoKSB8IERhdGFGb3JtYXRKUykg
PT0gRGF0YUZvcm1hdEpTRG91YmxlKSB7Ci0gICAgICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAg
ICAgICAgICAgICBudW1iZXJUb0ludDMyKG9wMS5mcHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAg
ICAgICB2YWx1ZVRvSW50MzIob3AxLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwpAQCAtNTQwLDE4ICs1NDAsMTggQEAg
dm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNh
c2UgVmFsdWVUb051bWJlcjogewotICAgICAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSkpOwotICAgICAgICBBU1NFUlQoIWlzRG91YmxlQ29uc3RhbnQobm9kZS5jaGlsZDEp
KTsKKyAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOworICAg
ICAgICBBU1NFUlQoIWlzRG91YmxlQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOwogCi0gICAgICAg
IGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIGlmIChpc0tub3duTnVtZXJp
Yyhub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwogICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAg
ICAgIHZhbHVlVG9OdW1iZXIob3AxLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwpAQCAtNTYwLDEzICs1NjAsMTMgQEAg
dm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogCiAgICAgY2FzZSBWYWx1
ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDEpKSB7Ci0gICAgICAgICAgICBrbm93bkNvbnN0YW50QXJpdGhPcChvcCwgbm9k
ZS5jaGlsZDIsIG5vZGUuY2hpbGQxLCB0cnVlKTsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3Aob3As
IG5vZGUuY2hpbGQyKCksIG5vZGUuY2hpbGQxKCksIHRydWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDIpKSB7Ci0gICAgICAgICAgICBrbm93bkNvbnN0YW50QXJpdGhPcChvcCwgbm9kZS5jaGls
ZDEsIG5vZGUuY2hpbGQyLCBmYWxzZSk7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIGtub3duQ29uc3RhbnRBcml0aE9wKG9wLCBub2Rl
LmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCBmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTU3NSw4ICs1NzUsOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFyaXRoU3Vi
OiB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7Ci0gICAgICAg
ICAgICBrbm93bkNvbnN0YW50QXJpdGhPcChBcml0aFN1Yiwgbm9kZS5jaGlsZDEsIG5vZGUuY2hp
bGQyLCBmYWxzZSk7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkp
IHsKKyAgICAgICAgICAgIGtub3duQ29uc3RhbnRBcml0aE9wKEFyaXRoU3ViLCBub2RlLmNoaWxk
MSgpLCBub2RlLmNoaWxkMigpLCBmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAKQEAgLTU5MCw4ICs1OTAsOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpj
b21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICBE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIERvdWJsZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIERvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAg
ICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7CiAgICAgICAgIEZQUlJlZyBvcDJGUFIgPSBv
cDIuZnByKCk7CkBAIC02MDQsOCArNjA0LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBlYXgodGhpcywgWDg2UmVnaXN0ZXJz
OjplYXgpOwogICAgICAgICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWR4
KTsKIApAQCAtNjIzLDkgKzYyMyw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
U3BlY3VsYXQKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG1vZEJ5WmVybzsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMSkpCisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGls
ZDEoKSkpCiAgICAgICAgICAgICBmaXJzdE9wTm90SW50ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkKKyAgICAgICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgIHNlY29uZE9wTm90
SW50ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3AyR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIAogICAgICAgICBtb2RCeVplcm8gPSBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMkdQUik7CkBAIC02NTUs
MTggKzY1NSwxOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkp
KSksIFg4NlJlZ2lzdGVyczo6ZWR4KTsKICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkpIHsKKyAg
ICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgewogICAgICAgICAgICAg
Zmlyc3RPcE5vdEludC5saW5rKCZtX2ppdCk7CiAgICAgICAgIAogICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgc2Vjb25kT3BOb3RJbnQyOwogICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKQorICAgICAgICAgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgICAgICBzZWNvbmRPcE5vdEludDIgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcDJHUFIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGZpcnN0
IG9wIGlzIGEgZG91YmxlLCBzZWNvbmQgb3AgaXMgYW4gaW50LgogICAgICAgICAgICAgbV9qaXQu
Y29udmVydEludDMyVG9Eb3VibGUob3AyR1BSLCBvcDJGUFIpOwogCi0gICAgICAgICAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkgeworICAgICAgICAgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMigpKSkgewogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGdvdFNlY29uZE9wID0gbV9qaXQuanVtcCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgc2Vjb25kT3BOb3RJbnQyLmxpbmsoJm1faml0KTsKQEAgLTY4Miw3ICs2ODIsNyBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgICAgICBnb3RE
b3VibGVBcmdzID0gbV9qaXQuanVtcCgpOwogICAgICAgICB9CiAgICAgCi0gICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKSB7CisgICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS5jaGlsZDIoKSkpIHsKICAgICAgICAgICAgIHNlY29uZE9wTm90SW50LmxpbmsoJm1f
aml0KTsKICAgICAgICAgCiAgICAgICAgICAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGZpcnN0IG9w
IGlzIGFuIGludCwgYW5kIHRoZSBzZWNvbmQgaXMgYSBkb3VibGUKQEAgLTY5MCwxMCArNjkwLDEw
IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAgICAgICAg
IHVuYm94RG91YmxlKG9wMkdQUiwgb3AyRlBSKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMSgpKSkKICAgICAgICAgICAgIGdvdERvdWJsZUFyZ3MubGluaygmbV9q
aXQpOwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSB8fCAh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKSB7CisgICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CiAg
ICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhYODZSZWdpc3RlcnM6OmVkeCk7CiAg
ICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEZQUkluZm86OmFyZ3VtZW50RlBSMCwgRlBSSW5m
bzo6YXJndW1lbnRGUFIxPihvcDFGUFIsIG9wMkZQUik7CiAgICAgICAgICAgICBtX2ppdC5hcHBl
bmRDYWxsKGZtb2QpOwpAQCAtNzA4LDcgKzcwOCw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwpA
QCAtNzQ5LDggKzc0OSw4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogCiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRo
aXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgY2xlYW5JbmRleCh0aGlzKTsKQEAgLTgwMSw5ICs4
MDEsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAKICAgICBj
YXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzModGhp
cywgbm9kZS5jaGlsZDMpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwog
ICAgICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBhcmcy
R1BSID0gYXJnMi5ncHIoKTsKICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdwcigpOwpA
QCAtODE3LDcgKzgxNyw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICB9CiAKICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTgzMSw4ICs4MzEsOCBAQCB2b2lkIE5vblNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlk
OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTg0Niw4ICs4NDYsOCBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2Fz
ZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxk
Mik7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTg3
Miw3ICs4NzIsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAg
ICAgfQogCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGdsb2JhbE9iamVjdCh0
aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIApAQCAt
ODk5LDcgKzg5OSw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQK
ICAgICB9CiAKICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIApAQCAtOTI4LDcgKzkyOCw3IEBAIHZvaWQgTm9u
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICNlbmRpZgogCiAgICAgICAgIC8vIFJl
dHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSLgotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3Mu
CkBAIC05NTIsNiArOTUyLDEzIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3Bl
Y3VsYXQKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCisgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIENhbGw6CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIGNhbGxlZSh0aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJz
dENoaWxkKCldKTsKKyAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAg
ICAgICAgZW1pdENhbGwobm9kZSwgY2FsbGVlR1BSKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
OTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAgICAgICAgICJtb3YgKCVyc3ApLCAlIiBT
VFJJTkdJWkUocmVnaXN0ZXIpICJcbiIgXAogICAgICAgICAiam1wIF8iIFNUUklOR0laRShmdW5j
dGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOworI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfQVJHMl9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbikgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kpCiAjZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9BUkc0X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKICNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX0FSRzVfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCiAKQEAgLTM4Nyw2ICszODgsMTE3
IEBAIGJvb2wgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4g
SlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQogCitFbmNvZGVkSlNWYWx1ZSByZXR1cm5W
YWx1ZUhhY2soKTsKK0VuY29kZWRKU1ZhbHVlIHJldHVyblZhbHVlSGFja1dpdGhFeGVjU3RhdGUo
RXhlY1N0YXRlKik7CisKK2FzbSAoCisiLmdsb2JsIF8iIFNUUklOR0laRShyZXR1cm5WYWx1ZUhh
Y2spICJcbiIKKyJfIiBTVFJJTkdJWkUocmV0dXJuVmFsdWVIYWNrKSAiOiIgIlxuIgorICAgICJt
b3YgLTQwKCVyMTMpLCAlcjEzXG4iCisgICAgIm1vdiAlcjEzLCAlcmRpXG4iCisgICAgImptcCBf
IiBTVFJJTkdJWkUocmV0dXJuVmFsdWVIYWNrV2l0aEV4ZWNTdGF0ZSkgIlxuIgorKTsKKworRW5j
b2RlZEpTVmFsdWUgcmV0dXJuVmFsdWVIYWNrV2l0aEV4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT5nbG9iYWxEYXRhKCkuaG9zdENh
bGxSZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNhbGxlZSwgY2FsbERhdGEpOworICAgIAorICAg
IEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKKyAgICAKKyAgICBpZiAoY2FsbFR5cGUg
PT0gQ2FsbFR5cGVIb3N0KSB7CisgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXIt
PnJlZ2lzdGVyRmlsZSgpLmdyb3coZXhlY0NhbGxlZS0+cmVnaXN0ZXJzKCkpKSB7CisgICAgICAg
ICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhl
Yyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
ZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNoYWluKCkpOworICAgICAgICAK
KyAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmV0dXJuVmFsdWVIYWNrKTsKKyAg
ICB9CisgICAgCisgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7CisgICAgZXhl
Yy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMs
IGNhbGxlZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsV2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cik7CitGVU5DVElPTl9X
UkFQUEVSX1dJVEhfQVJHMl9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25MaW5rQ2FsbCk7Cit2b2lk
KiBvcGVyYXRpb25MaW5rQ2FsbFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBl
eGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCA9IGdldEpTRnVuY3Rpb24oKmdsb2JhbERhdGEsIGNhbGxlZUFzVmFsdWUpOworICAgIGlm
ICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCisgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChl
eGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0Z1
bmN0aW9uKGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0
YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKKyAgICBpZiAoZXhl
Y3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgeworICAgICAgICBwcmludGYoImhvc3QgZnVuY3Rp
b24hXG4iKTsKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVG
b3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlv
bkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGV4ZWMsIGNhbGxlZS0+c2NvcGUoKSk7CisgICAg
ICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3Jl
YXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KKyAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVk
Qnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpID09IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5tX251bVBh
cmFtZXRlcnMpKQorICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9yQ2FsbCgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yQ2FsbFdpdGhBcml0eUNoZWNrKCk7CisgICAgfQorICAgIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNz
KTsKKyAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVuT25jZSgpKQorICAgICAgICBjYWxsTGlua0lu
Zm8uc2V0U2VlbigpOworICAgIGVsc2UKKyAgICAgICAgZGZnTGlua0NhbGwoZXhlY0NhbGxlZSwg
Y2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CisgICAgZXhlY0NhbGxl
ZS0+c2V0U2NvcGVDaGFpbihjYWxsZWUtPnNjb3BlKCkpOworICAgIHJldHVybiBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisKK3ZvaWQqIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNT
dGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7CisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVl
QXNWYWx1ZSgpOworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0
aW9uKCpnbG9iYWxEYXRhLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rp
b25DZWxsKQorICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVl
QXNWYWx1ZSk7CisgICAgCisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKGNh
bGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1
bmN0aW9uLT5leGVjdXRhYmxlKCk7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9u
KCkpIHsKKyAgICAgICAgcHJpbnRmKCJob3N0IGZ1bmN0aW9uIGluIHZpcnQgY2FsbCFcbiIpOwor
ICAgICAgICByZXR1cm4gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5hZGRy
ZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgfQorCisgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1
dGFibGUtPmNvbXBpbGVGb3JDYWxsKGV4ZWMsIGZ1bmN0aW9uLT5zY29wZSgpKTsKKyAgICBpZiAo
ZXJyb3IpIHsKKyAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGVycm9yOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihm
dW5jdGlvbi0+c2NvcGUoKSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJh
dGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cit9
CisKIERGR0hhbmRsZXIgbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMsIFJl
dHVybkFkZHJlc3NQdHIgZmF1bHRMb2NhdGlvbikKIHsKICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsOCBAQCBi
b29sIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSosIEVuCiBib29sIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMik7CiBib29sIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsK
IGJvb2wgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwordm9pZCogb3BlcmF0aW9u
VmlydHVhbENhbGwoRXhlY1N0YXRlKik7Cit2b2lkKiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3Rh
dGUqKTsKIAogLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhh
bmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2ggaXMKIC8vIHRoZSByZXR1cm4gbG9j
YXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVy
YXRpb25zIGFib3ZlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVw
YXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw2ICszNzUsMjEgQEAgdm9pZCBkZmdSZXBh
dGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIAogICAgICAgICBkZmdSZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZVB1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiB9CiAKK3ZvaWQgZGZnTGlua0NhbGwoRXhl
Y1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxs
ZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIpCit7CisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJG
cmFtZSgpLT5jb2RlQmxvY2soKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIoY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBpZiAoIWNhbGxlZUNvZGVCbG9jayB8fCBz
dGF0aWNfY2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpID09IGNh
bGxlZUNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSB7CisgICAgICAgIEFTU0VSVCghY2FsbExp
bmtJbmZvLmlzTGlua2VkKCkpOworICAgICAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVj
LT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4s
IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOwor
ICAgIH0KKyAgICAKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNh
bGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiB2b2lkIGRmZ1JlcGF0Y2hHZXRC
eUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdCdWlsZEdldEJ5SURMaXN0KEV4
ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUq
LCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgZGZnTGlua0NhbGwoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsMTcgKzM2MywxNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUGVlcEhvbGVJbnRlCiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0K
IAotICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7Ci0gICAgICAgIGludDMy
X3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1
ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoMzIoY29uZGl0aW9uLCBKSVRDb21waWxlcjo6SW1tMzIoaW1tKSwgb3AyLmdwcigp
KSwgdGFrZW4pOwotICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkg
ewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEp
OwotICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQy
KTsKKyAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIG9wMS5ncHIoKSwg
SklUQ29tcGlsZXI6OkltbTMyKGltbSkpLCB0YWtlbik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIG9wMS5ncHIoKSwgb3AyLmdw
cigpKSwgdGFrZW4pOwogICAgIH0KIApAQCAtMzk4LDggKzM5OCw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUNhbGwKICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAg
fQogCi0gICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICBKU1Zh
bHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKICAgICBHUFJSZWcg
b3AyR1BSID0gb3AyLmdwcigpOwogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBAIC00NDgsMjAgKzQ0
OCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2Fz
ZSBTZXRMb2NhbDogewogICAgICAgICBzd2l0Y2ggKG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlv
bihub2RlLmxvY2FsKCkpKSB7CiAgICAgICAgIGNhc2UgUHJlZGljdEludDMyOiB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBQ
cmVkaWN0QXJyYXk6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhp
cywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGwuZ3By
KCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAogICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigp
LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDczLDIzICs0
NzMsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNh
c2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CiAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBpZiAoaXNJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMik7CiAKLSAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlLmNoaWxkMSksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSwgb3Ay
LmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25z
dGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLmNoaWxkMiksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAg
IGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSwgb3AxLmdwcigp
LCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAg
ICAgICAgICAgR1BSUmVnIHJlZzEgPSBvcDEuZ3ByKCk7CkBAIC01MDMsMTcgKzUwMywxNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBCaXRSU2hp
ZnQ6CiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgaWYgKGlzSW50
MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAgICAgICBzaGlmdE9wKG9wLCBvcDEuZ3By
KCksIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSAmIDB4MWYsIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQyKCkpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIERvIG5vdCBhbGxvdyBzaGlmdCBhbW91bnQgdG8gYmUgdXNl
ZCBhcyB0aGUgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlciBkb2VzIG5vdCBwZXJtaXQgdGhpcy4KLSAg
ICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKQEAgLTUyNSw3ICs1
MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewotICAgICAgICBJbnRlZ2VyT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxKTsKIAogICAgICAgICAvLyBUZXN0IHRoZSBvcGVyYW5kIGlzIHBvc2l0aXZlLgpAQCAtNTM3
LDcgKzUzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICB9CiAKICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCwgb3AxLmZvcm1hdCgpKTsKQEAgLTU0NSwxNCArNTQ1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6
IHsKLSAgICAgICAgaWYgKGlzSW50ZWdlcihub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIGlm
IChpc0ludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigp
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBt
X2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgZG91Ymxl
UmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwpAQCAtNTYxLDEwICs1NjEsMTAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBW
YWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgIGlmIChp
c0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7Ci0gICAgICAgICAgICAgICAgaW50MzJfdCBp
bW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkp
KSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDEoKSk7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaEFk
ZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AyLmdwcigpLCBJbW0zMihpbW0xKSwgcmVz
dWx0LmdwcigpKSk7CkBAIC01NzMsOSArNTczLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNo
aWxkMikpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCBp
bW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEu
Z3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTU4NCw4ICs1ODQsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigp
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAg
ICAgICAgICAgICBHUFJSZWcgZ3ByMSA9IG9wMS5ncHIoKTsKQEAgLTYwNCw4ICs2MDQsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBv
cDIpOwogCiAgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwpAQCAtNjE3LDEwICs2MTcs
MTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAog
ICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25z
dGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgICAgIGludDMyX3QgaW1t
MiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAg
ICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAog
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9B
c3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkp
KTsKQEAgLTYyOSw4ICs2MjksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CiAKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3Vi
MzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0
LmdwcigpKSk7CkBAIC02MzksOCArNjM5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBG
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAgRlBSUmVnIHJlZzEgPSBv
cDEuZnByKCk7CkBAIC02NTIsOSArNjUyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkgewotICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
Mik7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5v
ZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKQEAgLTY3
MCw4ICs2NzAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwpA
QCAtNjg0LDggKzY4NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKQEAg
LTY5Nyw4ICs2OTcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgfQogCiAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IGVheCh0aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBlZHgo
dGhpcywgWDg2UmVnaXN0ZXJzOjplZHgpOwogICAgICAgICBHUFJSZWcgb3AxR3ByID0gb3AxLmdw
cigpOwpAQCAtNzI1LDcgKzcyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsgLy8gRklYTUU6IFdlIGNvdWxkIHJldXNlLCBidXQgb24gc3BlY3VsYXRpb24gZmFp
bCB3b3VsZCBuZWVkIHJlY292ZXJ5IHRvIHJlc3RvcmUgdGFnIChha2luIHRvIGFkZCkuCiAKICAg
ICAgICAgbV9qaXQubW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTc0NiwyMCAr
NzQ2LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5j
ZSB0aGUgY29tcGFyZS4gCiAgICAgICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50
KCkgPT0gMSk7CiAKLSAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUu
Y2hpbGQxLCBub2RlLmNoaWxkMikpCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgICAgICBjb21w
aWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGls
ZXI6Okxlc3NUaGFuKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjb21waWxl
UGVlcEhvbGVDYWxsKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgb3BlcmF0aW9uQ29tcGFyZUxlc3Mp
OwogCi0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgdXNlKG5vZGUu
Y2hpbGQyKTsKKyAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHVz
ZShub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9k
ZUluZGV4OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9y
bWFsIGNhc2UsIG5vdCBmdXNlZCB0byBicmFuY2guCi0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29t
cGlsZXI6Okxlc3NUaGFuLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAg
LTc3OCwyMCArNzc4LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNv
IHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCiAgICAgICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3Rl
ZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMikpCisgICAgICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAg
ICAgICBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwg
SklUQ29tcGlsZXI6Okxlc3NUaGFuT3JFcXVhbCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgY29tcGlsZVBlZXBIb2xlQ2FsbChub2RlLCBicmFuY2hOb2RlSW5kZXgsIG9wZXJh
dGlvbkNvbXBhcmVMZXNzRXEpOwogCi0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEpOwotICAg
ICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIG1fY29tcGls
ZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gTm9ybWFsIGNhc2UsIG5vdCBmdXNlZCB0byBicmFuY2guCi0gICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICBtX2pp
dC5jb21wYXJlMzIoSklUQ29tcGlsZXI6Okxlc3NUaGFuT3JFcXVhbCwgb3AxLmdwcigpLCBvcDIu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CkBAIC04MTAsMTkgKzgxMCwxOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAvLyBzbyBjYW4gYmUgbm8g
aW50ZXJ2ZW5pbmcgbm9kZXMgdG8gYWxzbyByZWZlcmVuY2UgdGhlIGNvbXBhcmUuIAogICAgICAg
ICAgICAgQVNTRVJUKG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogCi0gICAgICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIpKQor
ICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9k
ZS5jaGlsZDIoKSkpCiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5j
aChub2RlLCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpFcXVhbCk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlQ2FsbChub2RlLCBicmFuY2hO
b2RlSW5kZXgsIG9wZXJhdGlvbkNvbXBhcmVFcSk7CiAKLSAgICAgICAgICAgIHVzZShub2RlLmNo
aWxkMSk7Ci0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIpOworICAgICAgICAgICAgdXNlKG5v
ZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAg
ICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEs
IG9wMik7CiAKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpFcXVhbCwgb3Ax
LmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkBAIC04MzQsOCArODM0LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2Ug
Q29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSwgb3AyKTsKIAogICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6OkVxdWFs
LCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTg0NywxOCArODQ3LDE4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAg
ICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIE5vZGVJbmRleCBhbGlhcyA9IG5vZGUuY2hpbGQz
OworICAgICAgICBOb2RlSW5kZXggYWxpYXMgPSBub2RlLmNoaWxkMygpOwogICAgICAgICBpZiAo
YWxpYXMgIT0gTm9Ob2RlKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogcmVzdWx0IHNob3VsZCBi
ZSBhYmxlIHRvIHJldXNlIGNoaWxkMSwgY2hpbGQyLiBTaG91bGQgaGF2ZSBhbiAnVW51c2VkT3Bl
cmFuZCcgdHlwZS4KLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFsaWFzZWRWYWx1ZSh0aGlz
LCBub2RlLmNoaWxkMyk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhbGlhc2VkVmFsdWUo
dGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIGFsaWFzZWRWYWx1ZSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKGFsaWFzZWRWYWx1ZS5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdw
cigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0g
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGls
ZDIpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogCiAg
ICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKQEAgLTg3MSw3ICs4NzEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQg
d2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2
ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNo
ZWNrLgotICAgICAgICBOb2RlJiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDFd
OworICAgICAgICBOb2RlJiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV07
CiAgICAgICAgIGlmIChiYXNlTm9kZS5vcCAhPSBHZXRMb2NhbCB8fCBtX2ppdC5ncmFwaCgpLmdl
dFByZWRpY3Rpb24oYmFzZU5vZGUubG9jYWwoKSkgIT0gUHJlZGljdEFycmF5KQogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJh
eTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CkBAIC04ODgsOSArODg4LDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlW
YWw6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBu
b2RlLmNoaWxkMik7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hp
bGQzKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG5vZGUuY2hpbGQyKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LmNoaWxkMygpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAg
ICAgLy8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUgaW50byByZWdpc3RlcnMsIGFsbG9jYXRl
IGEgc2NyYXRjaCByZWdpc3Rlci4KQEAgLTkwMyw3ICs5MDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9y
ICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhl
IGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBO
b2RlJiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDFdOworICAgICAgICBOb2Rl
JiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV07CiAgICAgICAgIGlmIChi
YXNlTm9kZS5vcCAhPSBHZXRMb2NhbCB8fCBtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24oYmFz
ZU5vZGUubG9jYWwoKSkgIT0gUHJlZGljdEFycmF5KQogICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgd2l0aGluQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Fy
cmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwpAQCAtOTQ1LDkgKzk0NSw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5
VmFsQWxpYXM6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUuY2hpbGQzKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAg
ICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CkBAIC05NzcsNyAr
OTc3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwogCiAgICAg
ICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29k
ZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CkBAIC0xMDEzLDcgKzEwMTMsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAjZW5kaWYKIAogICAg
ICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1cm5WYWx1ZUdQUi4KLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIo
KSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgICAgIC8vIEdyYWIgdGhlIHJldHVy
biBhZGRyZXNzLgpAQCAtMTAyOSw3ICsxMDI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKIAogICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlJ
ZDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKIAogICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpAQCAtMTA1Miw4ICsxMDUyLDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2Ug
UHV0QnlJZDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIp
OworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAgY2FjaGVkUHV0QnlJ
ZChiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgc2NyYXRjaC5ncHIoKSwgbm9kZS5pZGVudGlmaWVy
TnVtYmVyKCksIE5vdERpcmVjdCk7CkBAIC0xMDYzLDggKzEwNjMsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlkRGly
ZWN0OiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDEpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMik7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBjYWNoZWRQdXRCeUlkKGJh
c2UuZ3ByKCksIHZhbHVlLmdwcigpLCBzY3JhdGNoLmdwcigpLCBub2RlLmlkZW50aWZpZXJOdW1i
ZXIoKSwgRGlyZWN0KTsKQEAgLTEwODUsNyArMTA4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgZ2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKICAgICAgICAgCkBAIC0xMTEyLDYgKzExMTIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogI2Vsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQ2FsbDoK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIG1faml0LmdyYXBoKCkubV92YXJB
cmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV0pOworICAgICAgICBHUFJSZWcgY2FsbGVlR1BS
ID0gY2FsbGVlLmdwcigpOworICAgICAgICBlbWl0Q2FsbChub2RlLCBjYWxsZWVHUFIpOworICAg
ICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11
c3RHZW5lcmF0ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBA
QCBwcml2YXRlOgogCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5j
aCBvbiB0aGlzIG5vZGUuCiAgICAgICAgIE5vZGUmIGxhc3ROb2RlID0gbV9qaXQuZ3JhcGgoKVts
YXN0Tm9kZUluZGV4XTsKLSAgICAgICAgcmV0dXJuIGxhc3ROb2RlLm9wID09IEJyYW5jaCAmJiBs
YXN0Tm9kZS5jaGlsZDEgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9Ob2Rl
OworICAgICAgICByZXR1cm4gbGFzdE5vZGUub3AgPT0gQnJhbmNoICYmIGxhc3ROb2RlLmNoaWxk
MSgpID09IG1fY29tcGlsZUluZGV4ID8gbGFzdE5vZGVJbmRleCA6IE5vTm9kZTsKICAgICB9CiAK
ICAgICBib29sIGlzSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gOTAzMTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIC8vIFBhc3Nl
ZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gbW9zdCBmdW5jdGlvbnMuCiAgICAgY2xhc3MgRXhl
Y1N0YXRlIDogcHJpdmF0ZSBSZWdpc3RlciB7CiAgICAgcHVibGljOgorICAgICAgICBKU1ZhbHVl
IGNhbGxlZUFzVmFsdWUoKSBjb25zdCB7IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6Q2FsbGVl
XS5qc1ZhbHVlKCk7IH0KICAgICAgICAgSlNPYmplY3QqIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJu
IHRoaXNbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmZ1bmN0aW9uKCk7IH0KICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6Q29kZUJs
b2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7IH0KICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4oKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDcgKzc0LDYgQEAgSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBDb2RlQgogICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKSA6IDApCi0gICAgLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCkgOiAw
KQogICAgICwgbV9ieXRlY29kZU9mZnNldCgodW5zaWduZWQpLTEpCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICAsIG1fanVtcFRhcmdldEluZGV4KDApCkBAIC0zNDcsNyArMzQ2LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
QVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExp
bmtJbmZvcygpKTsKKyAgICBBU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
Ly8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCkBA
IC00NTAsNyArNDQ5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICB9CiAKICAgICBBU1NFUlQobV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPT0gbV9w
cm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOwotICAgIEFTU0VSVChtX2NhbGxM
aW5rSW5mb0luZGV4ID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKSk7Cisg
ICAgQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mby5zaXplKCkpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIFJlc2V0IHRoaXMs
IGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRzLgpAQCAtNTc0LDEwICs1NzMs
MTEgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgICAgICBp
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0
eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwogICAgICAgICBp
bmZvLmhvdFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vz
c0NvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4pOwogICAgIH0KKyAgICBtX2NvZGVCbG9j
ay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlv
bkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2st
Pm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5pc0NhbGwg
PSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmlzQ2FsbDsKLSAgICAgICAg
aW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwo
bV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24p
OworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IENvZGVMb2NhdGlvblBvc3NpYmx5
TmVhckNhbGwocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0
dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVybkxvY2F0aW9uKSk7CiAgICAgICAgIGluZm8u
aG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAgICAgIGluZm8uaG90UGF0aE90
aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsKICAgICB9CkBAIC01OTIsNyArNTkyLDcg
QEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgIGlmIChtX2Nv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5
Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YoYXJpdHlDaGVjayk7CiAKLSAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVD
b2RlKCk7CisgICAgcmV0dXJuIEpJVENvZGUocGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCksIEpJ
VENvZGU6OkJhc2VsaW5lSklUKTsKIH0KIAogdm9pZCBKSVQ6OmxpbmtDYWxsKEpTRnVuY3Rpb24q
IGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9jayogY2FsbGVlQ29k
ZUJsb2NrLCBKSVQ6OkNvZGVQdHIgY29kZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIGlu
dCBjYWxsZXJBcmdDb3VudCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpAQCAtNjA4LDcgKzYw
OCw3IEBAIHZvaWQgSklUOjpsaW5rQ2FsbChKU0Z1bmN0aW9uKiBjYWxsZWUsIEMKICAgICB9CiAK
ICAgICAvLyBwYXRjaCB0aGUgY2FsbCBzbyB3ZSBkbyBub3QgY29udGludWUgdG8gdHJ5IHRvIGxp
bmsuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24sIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbCgpKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsTGlua0luZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbiksIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmxpbmtDb25zdHJ1Y3QoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxv
Y2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29k
ZVB0ciBjb2RlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgaW50IGNhbGxlckFyZ0NvdW50
LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCkBAIC02MjQsNyArNjI0LDcgQEAgdm9pZCBKSVQ6
OmxpbmtDb25zdHJ1Y3QoSlNGdW5jdGlvbiogY2FsbAogICAgIH0KIAogICAgIC8vIHBhdGNoIHRo
ZSBjYWxsIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0byB0cnkgdG8gbGluay4KLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3QoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24pLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdCgpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiw5IEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKE9wY29kZUlEIG9wY29kZUkKIAogICAgIGFkZFNsb3dDYXNlKGp1bXBUb1Nsb3cpOwog
ICAgIEFTU0VSVF9KSVRfT0ZGU0VUKGRpZmZlcmVuY2VCZXR3ZWVuKGFkZHJlc3NPZkxpbmtlZEZ1
bmN0aW9uQ2hlY2ssIGp1bXBUb1Nsb3cpLCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAp
OworICAgIAorICAgIEFTU0VSVChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNp
emUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mby5hcHBlbmQoU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbygpKTsKICAgICBt
X2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQ
YXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwogICAgIG1fY2FsbFN0cnVj
dHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmlzQ2FsbCA9IG9wY29k
ZUlEICE9IG9wX2NvbnN0cnVjdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE3ICszNywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBSZWdpc3RlckZpbGU7Ci0KKyAgICAK
ICAgICBjbGFzcyBKSVRDb2RlIHsKICAgICAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgQ29kZVJlZjsKICAgICAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0
cjsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0gSklUVHlwZSB7IEhvc3RDYWxsVGh1bmssIEJh
c2VsaW5lSklULCBERkdKSVQgfTsKKwogICAgICAgICBKSVRDb2RlKCkKICAgICAgICAgewogICAg
ICAgICB9CiAKLSAgICAgICAgSklUQ29kZShjb25zdCBDb2RlUmVmIHJlZikKKyAgICAgICAgSklU
Q29kZShjb25zdCBDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQogICAgICAgICAgICAgOiBt
X3JlZihyZWYpCisgICAgICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQogICAgICAgICB7CiAg
ICAgICAgIH0KIApAQCAtOTMsMTIgKzk2LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gbV9yZWYubV9leGVjdXRhYmxlUG9vbC5nZXQoKTsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgSklUVHlwZSBqaXRUeXBlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1faml0VHlwZTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEhvc3Qg
ZnVuY3Rpb25zIGFyZSBhIGJpdCBzcGVjaWFsOyB0aGV5IGhhdmUgYSBtX2NvZGUgcG9pbnRlciBi
dXQgdGhleQogICAgICAgICAvLyBkbyBub3QgaW5kaXZpZHVsbHkgcmVmIHRoZSBleGVjdXRhYmxl
IHBvb2wgY29udGFpbmluZyB0aGUgdHJhbXBvbGluZS4KICAgICAgICAgc3RhdGljIEpJVENvZGUg
SG9zdEZ1bmN0aW9uKENvZGVQdHIgY29kZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEpJVENvZGUoY29kZS5kYXRhTG9jYXRpb24oKSwgMCwgMCk7CisgICAgICAgICAgICByZXR1cm4g
SklUQ29kZShjb2RlLmRhdGFMb2NhdGlvbigpLCAwLCAwLCBIb3N0Q2FsbFRodW5rKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKQpAQCAtMTA4LDEyICsxMTYsMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpJVENvZGUodm9p
ZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIHNpemVf
dCBzaXplKQorICAgICAgICBKSVRDb2RlKHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJs
ZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qgc2l6ZSwgSklUVHlwZSBqaXRUeXBlKQogICAg
ICAgICAgICAgOiBtX3JlZihjb2RlLCBleGVjdXRhYmxlUG9vbCwgc2l6ZSkKKyAgICAgICAgICAg
ICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIENv
ZGVSZWYgbV9yZWY7CisgICAgICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIH07CiAKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lv
biA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7CiAgICAgY2xh
c3MgVlB0ckhhY2tFeGVjdXRhYmxlOworICAgIG5hbWVzcGFjZSBERkcgeworICAgICAgICBjbGFz
cyBKSVRDb2RlR2VuZXJhdG9yOworICAgIH0KIAogICAgIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7CiAKICAgICBj
bGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OkpJVENvZGVH
ZW5lcmF0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAKICAgICAgICAg
dHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5MDMxMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzQsNiArMjM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUg
ZXhjZXB0aW9uOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIFJldHVybkFkZHJlc3NQdHIgZXhj
ZXB0aW9uTG9jYXRpb247CisgICAgICAgIEpTVmFsdWUgaG9zdENhbGxSZXR1cm5WYWx1ZTsKICNl
bmRpZgogCiAgICAgICAgIEhhc2hNYXA8T3BhcXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xhc3NDb250
ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xhc3NEYXRhOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99550</attachid>
            <date>2011-07-02 01:37:45 -0700</date>
            <delta_ts>2011-07-02 14:51:23 -0700</delta_ts>
            <desc>the patch (fix debug artifacts)</desc>
            <filename>call_patch_6.diff</filename>
            <type>text/plain</type>
            <size>97285</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAK
KzIwMTEtMDctMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IGlt
cGxlbWVudCBvcF9jYWxsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM4NTgKKworICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbDo6Q29kZUxvY2F0aW9uUG9z
c2libHlOZWFyQ2FsbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0TnVtYmVyT2ZDYWxsTGlua0lu
Zm9zKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0FsaWFz
VHJhY2tlci5oOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6bG9va3VwR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6ZXF1YWxJZ25vcmluZ0xhdGVy
TnVtZXJpY0NvbnZlcnNpb24pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRk
VmFyQXJnQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcmVkaWN0
SW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJz
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6cmVmQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6YWRkcmVzc09mQ2Fs
bERhdGEpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlY29yZDo6Q2FsbFJlY29yZCk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEpTQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OlByb3BlcnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vz
c1JlY29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpTQ2FsbFJlY29yZDo6
SlNDYWxsUmVjb3JkKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
aGlsZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmZpcnN0Q2hpbGQpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Om51bUNoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpiYXNp
Y0FyaXRoT3ApOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25z
Lmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRm
Z0xpbmtDYWxsKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmRldGVjdFBlZXBIb2xlQnJhbmNo
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhl
Y1N0YXRlOjpjYWxsZWVBc1ZhbHVlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtDb25zdHJ1Y3QpOgorICAgICAgICAqIGppdC9K
SVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAg
KiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAg
ICAgKEpTQzo6SklUQ29kZTo6aml0VHlwZSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RG
dW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuaDoKKwogMjAxMS0wNy0wMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIElFIFdlYiBXb3JrZXJzIGRlbW8gY3Jhc2hlcyBpbiBKU0M6
OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTksNiArMTE5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21t
b24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KIH07CiAKK2NsYXNzIENvZGVM
b2NhdGlvblBvc3NpYmx5TmVhckNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsKK3B1
YmxpYzoKKyAgICBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKCkgeyB9CisgICAgZXhwbGlj
aXQgQ29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9j
YXRpb24pCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSB7IH0KKyAgICBl
eHBsaWNpdCBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKHZvaWQqIGxvY2F0aW9uKQorICAg
ICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRpb24p
KSB7IH0KK307CisKIGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVibGljIENvZGVM
b2NhdGlvbkNvbW1vbiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIoKSB7
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaWYgRU5BQkxFKERG
R19KSVQpCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2VuZGlmCiAjaW5jbHVkZSAiRGVi
dWdnZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgpAQCAt
NDcsNiArNTAsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkK
K3VzaW5nIG5hbWVzcGFjZSBERkc7CisjZW5kaWYKKwogI2lmICFkZWZpbmVkKE5ERUJVRykgfHwg
RU5BQkxFKE9QQ09ERV9TQU1QTElORykKIAogc3RhdGljIFVTdHJpbmcgZXNjYXBlUXVvdGVzKGNv
bnN0IFVTdHJpbmcmIHN0cikKQEAgLTE2ODcsNyArMTY5NCwxNCBAQCB2b2lkIENvZGVCbG9jazo6
dW5saW5rQ2FsbHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsTGlua0luZm9z
LnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmICghbV9jYWxsTGlua0luZm9zW2ldLmlzTGlua2Vk
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
bV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9jYWxsTGlua0luZm9zW2ld
LmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDog
bV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7CisgICAg
ICAgIGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgeworI2lm
IEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxv
Y2F0aW9uQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0
aW9uTGlua0NhbGwpOworI2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
I2VuZGlmCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Q29kZUxvY2F0aW9uTmVhckNhbGwobV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlv
biksIG1fY2FsbExpbmtJbmZvc1tpXS5pc0NhbGwgPyBtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlWaXJ0dWFsQ2FsbExpbmsoKSA6IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxD
b25zdHJ1Y3RMaW5rKCkpOwogICAgICAgICBtX2NhbGxMaW5rSW5mb3NbaV0udW5saW5rKCk7CiAg
ICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwg
Y2FsbFJldHVybkxvY2F0aW9uOworICAgICAgICBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxs
IGNhbGxSZXR1cm5Mb2NhdGlvbjsgLy8gaXQncyBhIG5lYXIgY2FsbCBpbiB0aGUgb2xkIEpJVCwg
b3IgYSBub3JtYWwgY2FsbCBpbiBERkcKICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
IGhvdFBhdGhCZWdpbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVy
OwogICAgICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwpAQCAtMzc4LDgg
KzM3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBHbG9iYWxSZXNvbHZlSW5mbyYgZ2xv
YmFsUmVzb2x2ZUluZm8oaW50IGluZGV4KSB7IHJldHVybiBtX2dsb2JhbFJlc29sdmVJbmZvc1tp
bmRleF07IH0KICAgICAgICAgYm9vbCBoYXNHbG9iYWxSZXNvbHZlSW5mb0F0Qnl0ZWNvZGVPZmZz
ZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogCisgICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZD
YWxsTGlua0luZm9zKHNpemVfdCBzaXplKSB7IG1fY2FsbExpbmtJbmZvcy5ncm93KHNpemUpOyB9
CiAgICAgICAgIHNpemVfdCBudW1iZXJPZkNhbGxMaW5rSW5mb3MoKSBjb25zdCB7IHJldHVybiBt
X2NhbGxMaW5rSW5mb3Muc2l6ZSgpOyB9Ci0gICAgICAgIHZvaWQgYWRkQ2FsbExpbmtJbmZvKCkg
eyBtX2NhbGxMaW5rSW5mb3MuYXBwZW5kKENhbGxMaW5rSW5mbygpKTsgfQogICAgICAgICBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZv
c1tpbmRleF07IH0KIAogICAgICAgICB2b2lkIGFkZE1ldGhvZENhbGxMaW5rSW5mb3ModW5zaWdu
ZWQgbikgeyBtX21ldGhvZENhbGxMaW5rSW5mb3MuZ3JvdyhuKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODQsMTAgKzE2
ODQsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoCiAKICAgICBl
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0jZW5kaWYK
LQogICAgIC8vIEVtaXQgY2FsbC4KICAgICBlbWl0T3Bjb2RlKG9wY29kZUlEKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7IC8vIGZ1bmMKQEAgLTE4MDEsMTAgKzE3
OTcsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAKICAgICBl
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0jZW5kaWYK
LQogICAgIGVtaXRPcGNvZGUob3BfY29uc3RydWN0KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZnVuYy0+aW5kZXgoKSk7IC8vIGZ1bmMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2Fs
bEFyZ3VtZW50cy5jb3VudCgpKTsgLy8gYXJnQ291bnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFRoaXMgY2hlY2sgZW5zdXJlcyB0
aGUgYWNjZXNzZXMgYWxpYXMsIHByb3ZpZGVkIHRoYXQgdGhlIHN1YnNjcmlwdCBpcyBhbgogICAg
ICAgICAgICAgLy8gaW50ZWdlciBpbmRleCAodGhpcyBpcyBnb29kIGVub3VnaDsgdGhlIHNwZWN1
bGF0aXZlIHBhdGggd2lsbCBvbmx5IGdlbmVyYXRlCiAgICAgICAgICAgICAvLyBvcHRpbWl6ZWQg
YWNjZXNzZXMgdG8gaGFuZGxlIGludGVnZXIgc3Vic2NyaXB0cykuCi0gICAgICAgICAgICBpZiAo
cG9zc2libGVBbGlhcy5jaGlsZDEgPT0gYmFzZSAmJiBlcXVhbElnbm9yaW5nTGF0ZXJOdW1lcmlj
Q29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMiwgcHJvcGVydHkpKQorICAgICAgICAgICAg
aWYgKHBvc3NpYmxlQWxpYXMuY2hpbGQxKCkgPT0gYmFzZSAmJiBlcXVhbElnbm9yaW5nTGF0ZXJO
dW1lcmljQ29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMigpLCBwcm9wZXJ0eSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmIChvcDEgPT0gb3AyKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIE5v
ZGUmIG5vZGUyID0gbV9ncmFwaFtvcDJdOwotICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZh
bHVlVG9OdW1iZXIgfHwgbm9kZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIu
Y2hpbGQxOworICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwgbm9k
ZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIuY2hpbGQxKCk7CiAgICAgfQog
CiAgICAgLy8gVGhlIGdyYXBoLCB0byBsb29rIHVwIHBvdGVudGlhbGx5IGFsaWFzaW5nIG5vZGVz
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDggQEAgcHVibGlj
OgogICAgICAgICAsIG1fbnVtQXJndW1lbnRzKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKQog
ICAgICAgICAsIG1fbnVtTG9jYWxzKGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCiAg
ICAgICAgICwgbV9wcmVzZXJ2ZWRWYXJzKGNvZGVCbG9jay0+bV9udW1WYXJzKQorICAgICAgICAs
IG1fcGFyYW1ldGVyU2xvdHMoMCkKKyAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAg
ICB7CiAgICAgfQogCkBAIC0xMjQsNyArMTI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlm
IChub2RlLm9wID09IEdldExvY2FsKQogICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7
CiAgICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDE7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9t
IHByaW9yIGJsb2NrcywKQEAgLTE1NSw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAg
IHJldHVybiBub2RlLmNoaWxkMTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwog
ICAgICAgICB9CiAKICAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpKTsKQEAg
LTE5MSw3ICsxOTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogCiAg
ICAgICAgIGlmIChub2RlLm9wID09IFVJbnQzMlRvTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJu
IG5vZGUuY2hpbGQxOworICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CiAKICAgICAg
ICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMgY29uc3RhbnRzIGJveGVkIGFzIEpTVmFsdWVzLgogICAg
ICAgICBpZiAobm9kZS5vcCA9PSBKU0NvbnN0YW50KSB7CkBAIC0zODIsNiArMzg0LDIzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHRJbmRleDsKICAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBvcCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBy
ZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7CisgICAgICAgIG1fZ3JhcGgu
YXBwZW5kKE5vZGUoTm9kZTo6VmFyQXJnLCBvcCwgbV9jdXJyZW50SW5kZXgsIG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFy
QXJncykpOworICAgICAgICAKKyAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzID0gMDsKKyAgICAg
ICAgCisgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCisgICAgICAgICAgICBtX2dy
YXBoLnJlZihyZXN1bHRJbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKKyAgICB9
CisgICAgdm9pZCBhZGRWYXJBcmdDaGlsZChOb2RlSW5kZXggY2hpbGQpCisgICAgeworICAgICAg
ICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgbV9udW1Q
YXNzZWRWYXJBcmdzKys7CisgICAgfQogCiAgICAgdm9pZCBwcmVkaWN0QXJyYXkoTm9kZUluZGV4
IG5vZGVJbmRleCkKICAgICB7CkBAIC0zOTYsMTAgKzQxNSwxMCBAQCBwcml2YXRlOgogICAgICAg
ICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKIAogICAgICAgICBpZiAobm9k
ZVB0ci0+b3AgPT0gVmFsdWVUb051bWJlcikKLSAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFw
aFtub2RlUHRyLT5jaGlsZDFdOworICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVQ
dHItPmNoaWxkMSgpXTsKIAogICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVmFsdWVUb0ludDMy
KQotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVQdHItPmNoaWxkMV07CisgICAg
ICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCldOwogCiAgICAgICAg
IGlmIChub2RlUHRyLT5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgIG1fZ3JhcGgucHJlZGlj
dChub2RlUHRyLT5sb2NhbCgpLCBQcmVkaWN0SW50MzIpOwpAQCAtNDUzLDYgKzQ3MiwxMyBAQCBw
cml2YXRlOgogICAgIC8vIHR5cGljYWxseSBlcXVhbCB0byB0aGUgbnVtYmVyIHZhcnMsIGJ1dCB3
ZSBleHBhbmQgdGhpcyB0byBjb3ZlciBhbGwKICAgICAvLyB0ZW1wb3JhcmllcyB0aGF0IHBlcnNp
c3QgYWNyb3NzIGJsb2NrcyAoZHVlcyB0byA/OiwgJiYsIHx8LCBldGMpLgogICAgIHVuc2lnbmVk
IG1fcHJlc2VydmVkVmFyczsKKyAgICAvLyBUaGUgbnVtYmVyIG9mIHNsb3RzIChpbiB1bml0cyBv
ZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8KKyAgICAvLyBwcmVhbGxvY2F0ZSBm
b3IgY2FsbHMgZW1hbmF0aW5nIGZyb20gdGhpcyBmcmFtZS4gVGhpcyBpbmNsdWRlcyB0aGUKKyAg
ICAvLyBzaXplIG9mIHRoZSBDYWxsRnJhbWUsIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBsZWFmIGZ1
bmN0aW9uLiAgKEkuZS4KKyAgICAvLyB0aGlzIGlzIDAgaWYgYW5kIG9ubHkgaWYgdGhpcyBmdW5j
dGlvbiBpcyBhIGxlYWYuKQorICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CisgICAgLy8g
VGhlIG51bWJlciBvZiB2YXIgYXJncyBwYXNzZWQgdG8gdGhlIG5leHQgdmFyIGFyZyBub2RlLgor
ICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkVmFyQXJnczsKIAogICAgIHN0cnVjdCBQaGlTdGFja0Vu
dHJ5IHsKICAgICAgICAgUGhpU3RhY2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywgTm9kZUluZGV4
IHBoaSwgdW5zaWduZWQgdmFyTm8pCkBAIC05NTcsNiArOTgzLDMwIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJu
LCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTEFT
VF9PUENPREUob3BfcmV0KTsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
b3BfY2FsbDogeworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGludCBhcmdDb3VudCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGZpcnN0
QXJnID0gcmVnaXN0ZXJPZmZzZXQgLSBhcmdDb3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIGZvciAoaW50IGFyZ0lkeCA9IGZpcnN0QXJnOyBhcmdJ
ZHggPCBmaXJzdEFyZyArIGFyZ0NvdW50OyBhcmdJZHgrKykKKyAgICAgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7CisgICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFk
ZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxsKTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBw
dXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCk7CisgICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0
aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KQorICAgICAgICAgICAgICAgIHNl
dChwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOworICAgICAgICAgICAgaWYgKFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArICh1bnNpZ25lZClhcmdDb3VudCA+IG1f
cGFyYW1ldGVyU2xvdHMpCisgICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50OworICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY2FsbCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IG9wX2NhbGxfcHV0X3Jlc3VsdDogeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgICAg
IEluc3RydWN0aW9uKiBjYWxsSW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gLSBPUENP
REVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICAgICAgQVNTRVJUKGludGVycHJldGVyLT5nZXRP
cGNvZGVJRChjYWxsSW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsKTsKKyNlbmRpZgor
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF9wdXRfcmVzdWx0KTsKKyAgICAgICAgfQog
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBQYXJzZSBmYWlsZWQhCkBAIC05ODks
MjIgKzEwMzksMjIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAg
ICAgICAgICAgICAgICB2YXIudmFsdWUgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAg
ICAgICAgcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywgdmFs
dWVJblByZWRlY2Vzc29yLCB2YXJObykpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX2dyYXBo
W3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgdmFs
dWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0uY2hpbGQxKCk7CiAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVj
ZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9
PSBQaGkpOwogCiAgICAgICAgICAgICBpZiAocGhpTm9kZS5yZWZDb3VudCgpKQogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAKLSAgICAgICAgICAgIGlm
IChwaGlOb2RlLmNoaWxkMSA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgICAgICBwaGlOb2RlLmNo
aWxkMSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxk
MSgpID09IE5vTm9kZSkgeworICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQu
Y2hpbGQxID0gdmFsdWVJblByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQyID09IE5vTm9kZSkg
ewotICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQyID0gdmFsdWVJblByZWRlY2Vzc29yOwor
ICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQyKCkgPT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAocGhpTm9kZS5jaGlsZDMgPT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS5j
aGlsZDMgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGls
ZDMoKSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVk
LmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIApAQCAtMTAxMywxMyArMTA2MywxMyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgaWYgKHBoaU5vZGUucmVmQ291bnQo
KSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkpOwogCi0gICAgICAgICAgICBu
ZXdQaGlOb2RlLmNoaWxkMSA9IHBoaU5vZGUuY2hpbGQxOwotICAgICAgICAgICAgbmV3UGhpTm9k
ZS5jaGlsZDIgPSBwaGlOb2RlLmNoaWxkMjsKLSAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGQz
ID0gcGhpTm9kZS5jaGlsZDM7Ci0KLSAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQxID0gbmV3UGhp
OwotICAgICAgICAgICAgcGhpTm9kZS5jaGlsZDEgPSB2YWx1ZUluUHJlZGVjZXNzb3I7Ci0gICAg
ICAgICAgICBwaGlOb2RlLmNoaWxkMyA9IE5vTm9kZTsKKyAgICAgICAgICAgIG5ld1BoaU5vZGUu
Y2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gcGhpTm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIG5l
d1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gcGhpTm9kZS5jaGlsZDIoKTsKKyAgICAg
ICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gcGhpTm9kZS5jaGlsZDMo
KTsKKworICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBuZXdQaGk7
CisgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHZhbHVlSW5QcmVk
ZWNlc3NvcjsKKyAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gTm9O
b2RlOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTA0Nyw5ICsxMDk3LDEwIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVmlydHVhbFJlZ2kKICAgICB1bnNpZ25lZCBzaXplRXhjbHVk
aW5nUGhpTm9kZXMgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS0+ZW5kOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzOyArK2kpIHsKICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbaV07CisgICAgICAgIAogICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCisgICAgICAgIAogICAgICAgICAv
LyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBncmFwaCwg
cmVmZXJlbmNpbmcKICAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9yIGJsb2Nrcy4KICAgICAg
ICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKQEAgLTEwNTcsOSArMTEwOCwxNCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpCiAgICAgICAgICAgICAvLyBhbGxv
Y2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBkbyBzbyBpbiB0aGlzCiAg
ICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNl
LCBhbmQgYQogICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVuIGl0
IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2Rl
LmNoaWxkMSk7Ci0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMik7Ci0gICAg
ICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMyk7CisgICAgICAgICAgICBpZiAobm9k
ZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgp
ICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgICAgICAgICBz
Y29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCkBAIC0xMDc1
LDcgKzExMzEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpCiAg
ICAgLy8gJ21fbnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQg
dGVtcG9yYXJpZXMgYWxsb2NhdGVkCiAgICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAoYW5kIGNoZWNr
ZWQgZm9yIG9uIGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQKICAgICAvLyBkaWZm
ZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBi
ZSByZXF1aXJlZC4KLSAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFs
bG9jYXRlZENvdW50KCkgKyBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5zaWduZWQgY2FsbGVlUmVn
aXN0ZXJzID0gc2NvcmVCb2FyZC5hbGxvY2F0ZWRDb3VudCgpICsgbV9wcmVzZXJ2ZWRWYXJzICsg
bV9wYXJhbWV0ZXJTbG90czsKICAgICBpZiAoKHVuc2lnbmVkKW1fY29kZUJsb2NrLT5tX251bUNh
bGxlZVJlZ2lzdGVycyA8IGNhbGxlZVJlZ2lzdGVycykKICAgICAgICAgbV9jb2RlQmxvY2stPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAjdW5kZWYgU1RSSU5H
SVpFX0RGR19PUF9FTlVNCiB9OwogCitjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5vZGVUeXBl
IG9wKQoreworICAgIHJldHVybiBkZmdPcE5hbWVzW29wICYgTm9kZUlkTWFza107Cit9CisKIHZv
aWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC03NSwxNCArODAsMjUgQEAg
dm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgICAgICBwcmludGYo
IiV1Iiwgbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgZWxzZQogICAgICAgICBwcmludGYo
Ii0iKTsKLSAgICBwcmludGYoIj5cdCVzKCIsIGRmZ09wTmFtZXNbb3AgJiBOb2RlSWRNYXNrXSk7
Ci0gICAgaWYgKG5vZGUuY2hpbGQxICE9IE5vTm9kZSkKLSAgICAgICAgcHJpbnRmKCJAJXUiLCBu
b2RlLmNoaWxkMSk7Ci0gICAgaWYgKG5vZGUuY2hpbGQyICE9IE5vTm9kZSkKLSAgICAgICAgcHJp
bnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKTsKLSAgICBpZiAobm9kZS5jaGlsZDMgIT0gTm9Ob2Rl
KQotICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMpOwotICAgIGJvb2wgaGFzUHJp
bnRlZCA9IG5vZGUuY2hpbGQxICE9IE5vTm9kZTsKKyAgICBwcmludGYoIj5cdCVzKCIsIG9wTmFt
ZShvcCkpOworICAgIGJvb2wgaGFzUHJpbnRlZDsKKyAgICBpZiAob3AgJiBOb2RlSGFzVmFyQXJn
cykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7
IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxk
SWR4KyspIHsKKyAgICAgICAgICAgIGlmIChoYXNQcmludGVkKQorICAgICAgICAgICAgICAgIHBy
aW50ZigiLCAiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW50ZigiQCV1IiwgbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgcHJpbnRm
KCIsIEAldSIsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSAhPSBO
b05vZGUpCisgICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMoKSk7CisgICAg
ICAgIGhhc1ByaW50ZWQgPSBub2RlLmNoaWxkMSgpICE9IE5vTm9kZTsKKyAgICB9CiAKICAgICBp
ZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewogICAgICAgICBwcmludGYoIiVzdmFyJXUiLCBoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCBub2RlLnZhck51bWJlcigpKTsKQEAgLTEzOCwyMSArMTU0LDI2
IEBAIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKIHsKICAgICBOb2RlJiBu
b2RlID0gYXQob3ApOwogCi0gICAgaWYgKG5vZGUuY2hpbGQxID09IE5vTm9kZSkgewotICAgICAg
ICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5vZGUuY2hpbGQzID09IE5vTm9kZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmVmKG5vZGUuY2hpbGQxKTsKLQotICAgIGlm
IChub2RlLmNoaWxkMiA9PSBOb05vZGUpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQzID09
IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJB
cmdzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQo
KTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hp
bGRJZHgrKykKKyAgICAgICAgICAgIHJlZihtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gTm9Ob2RlKSB7CisgICAg
ICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgJiYgbm9kZS5jaGlsZDMoKSA9
PSBOb05vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlZihu
b2RlLmNoaWxkMSgpKTsKKworICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUpIHsK
KyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVmKG5vZGUuY2hpbGQyKCkpOworCisgICAg
ICAgIGlmIChub2RlLmNoaWxkMygpID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmVmKG5vZGUuY2hpbGQzKCkpOwogICAgIH0KLSAgICByZWYobm9kZS5jaGlsZDIpOwot
Ci0gICAgaWYgKG5vZGUuY2hpbGQzID09IE5vTm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHJl
Zihub2RlLmNoaWxkMyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyAr
MTYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwogICAgIH0KIAor
I2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsK
KyNlbmRpZgorCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsK
KyAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKIHByaXZhdGU6CiAK
ICAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3Qg
KGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNl
IHZlcnNhLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCwyNCAr
MzAwLDI5IEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1ZShOb2QKIAogdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbihOb2RlJiBub2RlKQogewotICAgIE5vZGVJ
bmRleCBjaGlsZDEgPSBub2RlLmNoaWxkMTsKLSAgICBpZiAoY2hpbGQxID09IE5vTm9kZSkgewot
ICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5vZGUuY2hpbGQzID09IE5v
Tm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdXNlKGNoaWxkMSk7Ci0KLSAgICBO
b2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDI7Ci0gICAgaWYgKGNoaWxkMiA9PSBOb05vZGUp
IHsKLSAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQzID09IE5vTm9kZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgdXNlKGNoaWxkMik7Ci0KLSAgICBOb2RlSW5kZXggY2hpbGQzID0gbm9k
ZS5jaGlsZDM7Ci0gICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1c2UoY2hpbGQzKTsKKyAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHgg
PCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAg
ICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gbm9kZS5jaGlsZDEoKTsK
KyAgICAgICAgaWYgKGNoaWxkMSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2Rl
LmNoaWxkMigpID09IE5vTm9kZSAmJiBub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXNlKGNoaWxkMSk7CisgICAgICAgIAor
ICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDIoKTsKKyAgICAgICAgaWYgKGNo
aWxkMiA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5v
Tm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXNlKGNoaWxk
Mik7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gbm9kZS5jaGlsZDMoKTsK
KyAgICAgICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHVzZShjaGlsZDMpOworICAgIH0KIH0KIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNo
ZWRHZXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKQEAgLTQyNSw2
ICs0MzAsODQgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNoZWRQdXRCeUlkKEdQUgogICAg
IG1faml0LmFkZFByb3BlcnR5QWNjZXNzKGZ1bmN0aW9uQ2FsbCwgY2hlY2tJbW1Ub0NhbGwsIGNh
bGxUb0NoZWNrLCBjYWxsVG9TdG9yZSwgY2FsbFRvU2xvd0Nhc2UsIGNhbGxUb0RvbmUsIHN0YXRp
Y19jYXN0PGludDhfdD4oYmFzZUdQUiksIHN0YXRpY19jYXN0PGludDhfdD4odmFsdWVHUFIpLCBz
dGF0aWNfY2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKTsKIH0KIAordm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjplbWl0Q2FsbChOb2RlJiBub2RlLCBHUFJSZWcgdGFyZ2V0R1BSKQoreworICAgIC8vIHRo
ZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBmdW5jdGlvbiAo
bm9ybWFsIGNhbGwpIG9yIHRoZQorICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCkuIHN1YnNl
cXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCisgICAgaW50IG51bUFyZ3MgPSBub2Rl
Lm51bUNoaWxkcmVuKCkgLSAxOworICAgIAorICAgIC8vIGFtb3VudCBvZiBzdHVmZiAoaW4gdW5p
dHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvIHBsYWNlIGF0IHRoZQorICAg
IC8vIHRvcCBvZiB0aGUgSlMgc3RhY2suCisgICAgaW50IGNhbGxEYXRhU2l6ZSA9IDA7CisKKyAg
ICAvLyBmaXJzdCB0aGVyZSBhcmUgdGhlIGFyZ3VtZW50cworICAgIGNhbGxEYXRhU2l6ZSArPSBu
dW1BcmdzOworICAgIAorICAgIC8vIGFuZCB0aGVuIHRoZXJlIGlzIHRoZSBjYWxsIGZyYW1lIGhl
YWRlcgorICAgIGNhbGxEYXRhU2l6ZSArPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emU7CisgICAgCisgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bUFyZ3MpKSksIGFkZHJlc3NPZkNhbGxEYXRh
KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOworICAgIG1faml0LnN0b3JlUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNh
bGxlckZyYW1lKSk7CisgICAgCisgICAgZm9yIChpbnQgYXJnSWR4ID0gMDsgYXJnSWR4IDwgbnVt
QXJnczsgYXJnSWR4KyspIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIG1faml0
LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBhcmdJZHhd
KTsKKyAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAgICAgICAgCisgICAgICAg
IG1faml0LnN0b3JlUHRyKGFyZ0dQUiwgYWRkcmVzc09mQ2FsbERhdGEoLWNhbGxEYXRhU2l6ZSAr
IGFyZ0lkeCkpOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICBjYXNl
IENhbGw6CisgICAgICAgIG1faml0LnN0b3JlUHRyKHRhcmdldEdQUiwgYWRkcmVzc09mQ2FsbERh
dGEoUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAg
ICBmbHVzaFJlZ2lzdGVycygpOworICAgIAorICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIEpJVENvbXBpbGVyOjpE
YXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aDsKKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICBjYXNlIENhbGw6CisgICAgICAg
IHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgdGFyZ2V0R1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRhcmdldEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5zdG9yZVB0
cihyZXN1bHRHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNv
ZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCisgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFz
dENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGws
IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworICAgIAorICAg
IEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgc2xvd1Bh
dGgubGluaygmbV9qaXQpOworICAgIAorICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2Rl
QmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgSklUQ29t
cGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25D
aGVjayhvcGVyYXRpb25MaW5rQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhj
ZXB0aW9uSW5mbyk7CisgICAgbV9qaXQubW92ZShJbW0zMihudW1BcmdzKSwgR1BSSW5mbzo6cmVn
VDEpOworICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgIG1faml0Lm5vdGlmeUNhbGwobV9qaXQuY2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiksIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworICAg
IAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIAorICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENh
bGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCB0cnVlLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5leGNlcHRpb25JbmZvKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBjb25z
dCBjaGFyKiBkYXRhRm9ybWF0U3RyaW5nKERhdGFGb3JtYXQgZm9ybWF0KQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMiw2ICs1MjIsMTMgQEAgcHJvdGVjdGVkOgogICAg
IAogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQ
UiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhU
YXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoR1BS
UmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFy
Z2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MgYWRkcmVzc09mQ2FsbERhdGEoaW50IGlkeCkKKyAgICB7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKG1faml0
LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGlkeCkgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbWl0Q2FsbChO
b2RlJiwgR1BSUmVnIHRhcmdldEdQUik7CiAKICAgICAvLyBDYWxsZWQgb25jZSBhIG5vZGUgaGFz
IGNvbXBsZXRlZCBjb2RlIGdlbmVyYXRpb24gYnV0IHByaW9yIHRvIHNldHRpbmcKICAgICAvLyBp
dHMgcmVzdWx0LCB0byBmcmVlIHVwIGl0cyBjaGlsZHJlbi4gKFRoaXMgbXVzdCBoYXBwZW4gcHJp
b3IgdG8gc2V0dGluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw2ICsyOTQsNyBAQCB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAgICAgICAgIC8vIElmIGNv
bXBpbGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxlZCwgdGhyb3cgYXdheSB0
aGUgY29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xlYXIoKTsKICAgICAgICAg
bV9wcm9wZXJ0eUFjY2Vzc2VzLmNsZWFyKCk7CisgICAgICAgIG1fanNDYWxscy5jbGVhcigpOwog
ICAgICAgICByZXdpbmRUb0xhYmVsKHNwZWN1bGF0aXZlUGF0aEJlZ2luKTsKIAogICAgICAgICBT
cGVjdWxhdGlvbkNoZWNrVmVjdG9yIG5vQ2hlY2tzOwpAQCAtMzY5LDEzICszNzAsMTUgQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogI2VuZGlmCiAKICAgICAvLyBM
aW5rIGFsbCBjYWxscyBvdXQgZnJvbSB0aGUgSklUIGNvZGUgdG8gdGhlaXIgcmVzcGVjdGl2ZSBm
dW5jdGlvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGxpbmtCdWZmZXIubGluayhtX2NhbGxzW2ldLm1fY2FsbCwgbV9jYWxsc1tp
XS5tX2Z1bmN0aW9uKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9jYWxsc1tpXS5tX2Z1bmN0aW9uLnZhbHVlKCkpCisg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5tX2NhbGwsIG1fY2FsbHNbaV0u
bV9mdW5jdGlvbik7CisgICAgfQogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0NhbGxSZXR1
cm5JbmRpY2VzKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2stPmNhbGxSZXR1cm5JbmRleFZlY3Rv
cigpLnJlc2VydmVDYXBhY2l0eShleGNlcHRpb25DaGVja0NvdW50KTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChtX2NhbGxzW2ldLm1fZXhjZXB0aW9uQ2hlY2suaXNTZXQoKSkgeworICAgICAgICAgICAgaWYg
KG1fY2FsbHNbaV0ubV9oYW5kbGVzRXhjZXB0aW9ucykgewogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHJldHVybkFkZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFkZHJlc3NPZmZzZXQo
bV9jYWxsc1tpXS5tX2NhbGwpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbklu
Zm8gPSBtX2NhbGxzW2ldLm1fZXhjZXB0aW9uSW5mbzsKICAgICAgICAgICAgICAgICBtX2NvZGVC
bG9jay0+Y2FsbFJldHVybkluZGV4VmVjdG9yKCkuYXBwZW5kKENhbGxSZXR1cm5PZmZzZXRUb0J5
dGVjb2RlT2Zmc2V0KHJldHVybkFkZHJlc3NPZmZzZXQsIGV4Y2VwdGlvbkluZm8pKTsKQEAgLTM5
NiwxMyArMzk5LDIyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QK
ICAgICAgICAgaW5mby52YWx1ZUdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3ZhbHVlR1BS
OwogICAgICAgICBpbmZvLnUudW5zZXQuc2NyYXRjaEdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX3NjcmF0Y2hHUFI7CiAgICAgfQotCisgICAgCisgICAgbV9jb2RlQmxvY2stPnNldE51bWJl
ck9mQ2FsbExpbmtJbmZvcyhtX2pzQ2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIENhbGxMaW5rSW5mbyYg
aW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CisgICAgICAgIGluZm8uaXNDYWxs
ID0gbV9qc0NhbGxzW2ldLm1faXNDYWxsOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biA9IENvZGVMb2NhdGlvblBvc3NpYmx5TmVhckNhbGwobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1f
anNDYWxsc1tpXS5tX3Nsb3dDYWxsKSk7CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fanNDYWxsc1tpXS5tX3RhcmdldFRvQ2hlY2spOworICAgICAg
ICBpbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanND
YWxsc1tpXS5tX2Zhc3RDYWxsKTsKKyAgICB9CisgICAgCiAgICAgLy8gRklYTUU6IHN3aXRjaCB0
aGUgcmVnaXN0ZXIgZmlsZSBjaGVjayAmIGFyaXR5IGNoZWNrIG92ZXIgdG8gREZHT3BlcnRhaW9u
IHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJzLgogICAgIGxpbmtCdWZmZXIubGluayhjYWxsUmVn
aXN0ZXJGaWxlQ2hlY2ssIGN0aV9yZWdpc3Rlcl9maWxlX2NoZWNrKTsKICAgICBsaW5rQnVmZmVy
LmxpbmsoY2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBjdGlf
b3BfY29uc3RydWN0X2FyaXR5Q2hlY2sgOiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKTsKIAogICAg
IGVudHJ5V2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7
Ci0gICAgZW50cnkgPSBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpOworICAgIGVudHJ5ID0gSklU
Q29kZShsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpERkdKSVQpOwogfQogCiAj
aWYgREZHX0pJVF9BU1NFUlQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIHN0cnVj
dCBDYWxsUmVjb3JkIHsKICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGws
IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAgICAgICAs
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0aW9ucyhmYWxz
ZSkKICAgICB7CiAgICAgfQogCkBAIC03NCw2ICs3NSwxNyBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7
CiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNo
ZWNrKGV4Y2VwdGlvbkNoZWNrKQogICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKKyAgICB7CisgICAgfQor
CisgICAgLy8gQ29uc3RydWN0b3IgZm9yIGEgY2FsbCB0aGF0IG1heSBjYXVzZSBleGNlcHRpb25z
LCBidXQgd2hpY2ggYXJlIGhhbmRsZWQKKyAgICAvLyB0aHJvdWdoIHNvbWUgbWVjaGFuaXNtIG90
aGVyIHRoYW4gdGhlIGluLWxpbmUgZXhjZXB0aW9uIGhhbmRsZXIuCisgICAgQ2FsbFJlY29yZChN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgRXhjZXB0aW9u
SW5mbyBleGNlcHRpb25JbmZvKQorICAgICAgICA6IG1fY2FsbChjYWxsKQorICAgICAgICAsIG1f
ZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbklu
Zm8pCisgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0aW9ucyh0cnVlKQogICAgIHsKICAgICB9CiAK
QEAgLTgxLDYgKzkzLDcgQEAgc3RydWN0IENhbGxSZWNvcmQgewogICAgIEZ1bmN0aW9uUHRyIG1f
ZnVuY3Rpb247CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9leGNlcHRpb25DaGVjazsKICAg
ICBFeGNlcHRpb25JbmZvIG1fZXhjZXB0aW9uSW5mbzsKKyAgICBib29sIG1faGFuZGxlc0V4Y2Vw
dGlvbnM7CiB9OwogCiAvLyA9PT0gSklUQ29tcGlsZXIgPT09CkBAIC0xNTgsNiArMTcxLDEyIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfQor
ICAgIAorICAgIC8vIE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJlcXVp
cmUgbGlua2luZy4KKyAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBjYWxsLCB1bnNpZ25lZCBleGNl
cHRpb25JbmZvKQorICAgIHsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxs
LCBGdW5jdGlvblB0cigpLCBleGNlcHRpb25JbmZvKSk7CisgICAgfQogCiAgICAgLy8gQWRkIGEg
Y2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAg
dm9pZCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikKQEAgLTE3NCw2ICsx
OTMsMTUgQEAgcHVibGljOgogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0
aW9uQ2FsbCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBleGNlcHRpb25JbmZvKSk7CiAgICAg
ICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgfQorICAgIAorICAgIC8vIEFkZCBhIGNhbGwg
b3V0IGZyb20gSklUIGNvZGUsIHdpdGggYSBmYXN0IGV4Y2VwdGlvbiBjaGVjayB0aGF0IHRlc3Rz
IGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KKyAgICBDYWxsIGFwcGVuZENhbGxXaXRoRmFz
dEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgdW5zaWduZWQgZXhj
ZXB0aW9uSW5mbykKKyAgICB7CisgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCgpOwor
ICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVu
Y3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKKyAgICB9CiAKICAgICAvLyBIZWxwZXIgbWV0aG9k
cyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgogICAgIGJvb2wgaXNDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KQpAQCAtMjM3LDYgKzI2NSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBtX3Byb3BlcnR5QWNjZXNzZXMuYXBwZW5kKFByb3BlcnR5QWNjZXNzUmVjb3JkKGZ1bmN0
aW9uQ2FsbCwgZGVsdGFDaGVja0ltbVRvQ2FsbCwgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSwgZGVsdGFDYWxsVG9TbG93Q2FzZSwgZGVsdGFDYWxsVG9Eb25l
LCAgYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIpKTsKICAgICB9CisgICAgCisgICAgdm9p
ZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRh
cmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHsK
KyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxs
LCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGV4Y2VwdGlvbkluZm8pKTsKKyAgICB9CiAKIHByaXZh
dGU6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB1c2VkIGluIGxpbmtpbmcgdGhlIHNwZWN1bGF0aXZl
ICYgbm9uLXNwZWN1bGF0aXZlIHBhdGhzIHRvZ2V0aGVyLgpAQCAtMjU5LDcgKzI5Miw3IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAKICAgICBzdHJ1Y3QgUHJv
cGVydHlBY2Nlc3NSZWNvcmQgewotICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChKSVRDb21w
aWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludDhfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQ4
X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgaW50OF90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUs
IGludDhfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBpbnQ4X3QgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4
X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRjaEdQUikKKyAgICAgICAg
UHJvcGVydHlBY2Nlc3NSZWNvcmQoQ2FsbCBmdW5jdGlvbkNhbGwsIGludDhfdCBkZWx0YUNoZWNr
SW1tVG9DYWxsLCBpbnQ4X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgaW50OF90IGRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUsIGludDhfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBpbnQ4X3QgZGVsdGFD
YWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRj
aEdQUikKICAgICAgICAgICAgIDogbV9mdW5jdGlvbkNhbGwoZnVuY3Rpb25DYWxsKQogICAgICAg
ICAgICAgLCBtX2RlbHRhQ2hlY2tJbW1Ub0NhbGwoZGVsdGFDaGVja0ltbVRvQ2FsbCkKICAgICAg
ICAgICAgICwgbV9kZWx0YUNhbGxUb1N0cnVjdENoZWNrKGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sp
CkBAIC0yODIsOCArMzE1LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGludDhfdCBtX3ZhbHVlR1BS
OwogICAgICAgICBpbnQ4X3QgbV9zY3JhdGNoR1BSOwogICAgIH07CisgICAgCisgICAgc3RydWN0
IEpTQ2FsbFJlY29yZCB7CisgICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxs
IHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2ln
bmVkIGV4Y2VwdGlvbkluZm8pCisgICAgICAgICAgICA6IG1fZmFzdENhbGwoZmFzdENhbGwpCisg
ICAgICAgICAgICAsIG1fc2xvd0NhbGwoc2xvd0NhbGwpCisgICAgICAgICAgICAsIG1fdGFyZ2V0
VG9DaGVjayh0YXJnZXRUb0NoZWNrKQorICAgICAgICAgICAgLCBtX2lzQ2FsbChpc0NhbGwpCisg
ICAgICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENhbGwgbV9mYXN0Q2FsbDsKKyAgICAgICAgQ2Fs
bCBtX3Nsb3dDYWxsOworICAgICAgICBEYXRhTGFiZWxQdHIgbV90YXJnZXRUb0NoZWNrOworICAg
ICAgICBib29sIG1faXNDYWxsOworICAgICAgICB1bnNpZ25lZCBtX2V4Y2VwdGlvbkluZm87Cisg
ICAgfTsKIAogICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0eUFj
Y2Vzc2VzOworICAgIFZlY3RvcjxKU0NhbGxSZWNvcmQsIDQ+IG1fanNDYWxsczsKIH07CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBAIHR5cGVkZWYgdWludDMyX3QgRXhj
ZXB0aW9uSW5mbzsKICNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgMHg0MDAwMAogI2RlZmluZSBO
b2RlSXNCcmFuY2ggICAgICAweDgwMDAwCiAjZGVmaW5lIE5vZGVJc1Rlcm1pbmFsICAgMHgxMDAw
MDAKKyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAweDIwMDAwMAogCiAvLyBUaGVzZSB2YWx1ZXMg
cmVjb3JkIHRoZSByZXN1bHQgdHlwZSBvZiB0aGUgbm9kZSAoYXMgY2hlY2tlZCBieSBOb2RlUmVz
dWx0TWFzaywgYWJvdmUpLCAwIGZvciBubyByZXN1bHQuCiAjZGVmaW5lIE5vZGVSZXN1bHRKUyAg
ICAgIDB4MTAwMApAQCAtMTM2LDYgKzEzNyw5IEBAIHR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9u
SW5mbzsKICAgICBtYWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhDb21wYXJlU3RyaWN0RXEsIE5vZGVSZXN1bHRKUykgXAogICAgIFwK
KyAgICAvKiBDYWxscy4gKi9cCisgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgXAogICAgIC8qIE5vZGVzIGZvciBt
aXNjIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0SlMpIFwKQEAgLTE3Myw0MyAr
MTc3LDYwIEBAIHN0cnVjdCBPcEluZm8gewogLy8KIC8vIE5vZGUgcmVwcmVzZW50cyBhIHNpbmds
ZSBvcGVyYXRpb24gaW4gdGhlIGRhdGEgZmxvdyBncmFwaC4KIHN0cnVjdCBOb2RlIHsKKyAgICBl
bnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OworCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRo
IHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBl
IG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUp
CiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZv
KQotICAgICAgICAsIGNoaWxkMShjaGlsZDEpCi0gICAgICAgICwgY2hpbGQyKGNoaWxkMikKLSAg
ICAgICAgLCBjaGlsZDMoY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOworICAgICAgICBjaGlsZHJlbi5maXhl
ZC5jaGlsZDEgPSBjaGlsZDE7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IGNoaWxk
MjsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gY2hpbGQzOwogICAgIH0KIAogICAg
IC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlh
dGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25J
bmZvLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9w
KQogICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKLSAgICAgICAgLCBjaGls
ZDEoY2hpbGQxKQotICAgICAgICAsIGNoaWxkMihjaGlsZDIpCi0gICAgICAgICwgY2hpbGQzKGNo
aWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1
ZSkKICAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAg
ICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQxOworICAgICAgICBjaGlsZHJlbi5maXhl
ZC5jaGlsZDIgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IGNoaWxk
MzsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJl
biBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0
aW9uSW5mbyBleGNlcHRpb25JbmZvLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIE5vZGVJbmRl
eCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgZXhjZXB0aW9uSW5m
byhleGNlcHRpb25JbmZvKQotICAgICAgICAsIGNoaWxkMShjaGlsZDEpCi0gICAgICAgICwgY2hp
bGQyKGNoaWxkMikKLSAgICAgICAgLCBjaGlsZDMoY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVh
bFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgw
KQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKICAgICAgICAgLCBtX29wSW5mbzIo
aW1tMi5tX3ZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJn
cykpOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBjaGlsZDE7CisgICAgICAgIGNo
aWxkcmVuLmZpeGVkLmNoaWxkMiA9IGNoaWxkMjsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hp
bGQzID0gY2hpbGQzOworICAgIH0KKyAgICAKKyAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGgg
YSB2YXJpYWJsZSBudW1iZXIgb2YgY2hpbGRyZW4gYW5kIG5vIGltbWVkaWF0ZSB2YWx1ZXMuCisg
ICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbklu
Zm8sIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQorICAgICAgICA6
IG9wKG9wKQorICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAg
LCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAsIG1f
cmVmQ291bnQoMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsK
KyAgICAgICAgY2hpbGRyZW4udmFyaWFibGUuZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQ7CisgICAg
ICAgIGNoaWxkcmVuLnZhcmlhYmxlLm51bUNoaWxkcmVuID0gbnVtQ2hpbGRyZW47CiAgICAgfQog
CiAgICAgYm9vbCBtdXN0R2VuZXJhdGUoKQpAQCAtMzUwLDEzICszNzEsNTEgQEAgc3RydWN0IE5v
ZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG11c3RHZW5lcmF0ZSgpID8gbV9yZWZDb3VudCAt
IDEgOiBtX3JlZkNvdW50OwogICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggY2hpbGQxKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgcmV0
dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKKyAgICB9CiAKKyAgICBOb2RlSW5kZXggY2hpbGQy
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAg
ICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMjsKKyAgICB9CisKKyAgICBOb2RlSW5kZXgg
Y2hpbGQzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsK
KyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMzsKKyAgICB9CisgICAgCisgICAg
dW5zaWduZWQgZmlyc3RDaGlsZCgpCisgICAgeworICAgICAgICBBU1NFUlQob3AgJiBOb2RlSGFz
VmFyQXJncyk7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi52YXJpYWJsZS5maXJzdENoaWxkOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbigpCisgICAgeworICAgICAgICBB
U1NFUlQob3AgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi52YXJp
YWJsZS5udW1DaGlsZHJlbjsKKyAgICB9CisgICAgCiAgICAgLy8gVGhpcyBlbnVtIHZhbHVlIGRl
c2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUgbm9kZS4KICAgICBOb2RlVHlwZSBvcDsKICAgICAvLyBV
c2VkIHRvIGxvb2sgdXAgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkg
aW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCiAgICAgRXhjZXB0aW9uSW5mbyBleGNl
cHRpb25JbmZvOwogICAgIC8vIFJlZmVyZW5jZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiAoMCBmb3Ig
bm8gY2hpbGQpLgotICAgIE5vZGVJbmRleCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzOworICAgIHVu
aW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZDEsIGNo
aWxkMiwgY2hpbGQzOworICAgICAgICB9IGZpeGVkOworICAgICAgICBzdHJ1Y3QgeworICAgICAg
ICAgICAgdW5zaWduZWQgZmlyc3RDaGlsZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUNoaWxk
cmVuOworICAgICAgICB9IHZhcmlhYmxlOworICAgIH0gY2hpbGRyZW47CiAKIHByaXZhdGU6CiAg
ICAgLy8gVGhlIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbikgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25T
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2NSw4ICsyNjUsOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjprbm93bkNvbnN0YW50
QXJpCiAKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcChOb2RlVHlwZSBvcCwg
Tm9kZSAmbm9kZSkKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQx
KTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBh
cmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKQEAgLTI3Nyw5ICsy
NzcsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpiYXNpY0FyaXRoT3AoTm9kCiAgICAgCiAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIAotICAgIGlmICghaXNLbm93
bkludGVnZXIobm9kZS5jaGlsZDEpKQorICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGls
ZDEoKSkpCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
LSAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkKKyAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSk7CiAgICAgCiAgICAgc3dpdGNoIChvcCkgewpAQCAtMzQ2LDggKzM0Niw4
IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm8KIHsKICAgICAvLyBG
SVhNRTogc2hvdWxkIGRvIHNvbWUgcGVlcGhvbGUgdG8gZnVzZSBjb21wYXJlL2JyYW5jaAogICAg
ICAgICAKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICBK
U1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAg
IEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKICAgICAKQEAgLTM1Niw5ICszNTYsOSBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vCiAgICAgCiAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIAotICAgIGlmICghaXNLbm93bkludGVnZXIo
bm9kZS5jaGlsZDEpKQorICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkpCiAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQyKCkpKQogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSk7CiAgICAgCiAgICAgbV9qaXQuY29tcGFyZTMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIs
IHJlc3VsdEdQUik7CkBAIC0zOTcsNyArMzk3LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShTcGVjdWxhdAogCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgQ29udmVydFRo
aXM6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQx
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICBHUFJSZWcgdGhpc0dQUiA9IHRoaXNWYWx1ZS5ncHIoKTsKICAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKIApAQCAtNDI0LDcgKzQyNCw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIG1faml0LnN0
b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkp
KTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAg
LTQzMywyMyArNDMzLDIzIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNhc2UgQml0WG9yOgot
ICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSkgewotICAgICAgICAgICAg
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgaWYgKGlzSW50
MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDIpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDEpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBi
aXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSksIG9wMi5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIpKSB7Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEpOworICAgICAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigp
KSkgeworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAg
ICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpLCBvcDEuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDIoKSksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAg
ICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSk7Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIp
OworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAg
ICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwpAQCAtNDYzLDExICs0NjMsMTEgQEAgdm9pZCBO
b25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIGNhc2UgQml0UlNoaWZ0Ogog
ICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsK
IAotICAgICAgICAgICAgaW50IHNoaWZ0QW1vdW50ID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIpICYgMHgxZjsKKyAgICAgICAgICAgIGludCBzaGlmdEFtb3VudCA9IHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpICYgMHgxZjsKICAgICAgICAgICAgIC8vIFNoaWZ0
cyBieSB6ZXJvIHNob3VsZCBoYXZlIGJlZW4gb3B0aW1pemVkIG91dCBvZiB0aGUgZ3JhcGghCiAg
ICAgICAgICAgICBBU1NFUlQoc2hpZnRBbW91bnQpOwogICAgICAgICAgICAgc2hpZnRPcChvcCwg
b3AxLmdwcigpLCBzaGlmdEFtb3VudCwgcmVzdWx0LmdwcigpKTsKQEAgLTQ3NSw4ICs0NzUsOCBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93IHNoaWZ0IGFtb3VudCB0byBiZSB1c2Vk
IGFzIHRoZSByZXN1bHQsIE1hY3JvQXNzZW1ibGVyIGRvZXMgbm90IHBlcm1pdCB0aGlzLgotICAg
ICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAg
ICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgICAgICBJ
bnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBJbnRl
Z2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3Ax
LmdwcigpOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoU3BlY3VsYXQKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7
Ci0gICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAg
IEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVt
cG9yYXJ5IGJveGVyKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSk7CiAgICAgICAgIApAQCAtNTEzLDI2ICs1MTMsMjYgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7Ci0g
ICAgICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSk7CisgICAgICAgIEFT
U0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKIAotICAgICAgICBpZiAoaXNL
bm93bkludGVnZXIobm9kZS5jaGlsZDEpKSB7Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBpZiAoaXNLbm93bkludGVnZXIobm9kZS5j
aGlsZDEoKSkpIHsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAg
ICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGNoaWxkSW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMV0udmlydHVhbFJl
Z2lzdGVyKCldOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgY2hpbGRJbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxKCldLnZpcnR1YWxSZWdpc3RlcigpXTsK
ICAgICAgICAgaWYgKChjaGlsZEluZm8ucmVnaXN0ZXJGb3JtYXQoKSB8IERhdGFGb3JtYXRKUykg
PT0gRGF0YUZvcm1hdEpTRG91YmxlKSB7Ci0gICAgICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAg
ICAgICAgICAgICBudW1iZXJUb0ludDMyKG9wMS5mcHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAg
ICAgICB2YWx1ZVRvSW50MzIob3AxLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwpAQCAtNTQwLDE4ICs1NDAsMTggQEAg
dm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNh
c2UgVmFsdWVUb051bWJlcjogewotICAgICAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSkpOwotICAgICAgICBBU1NFUlQoIWlzRG91YmxlQ29uc3RhbnQobm9kZS5jaGlsZDEp
KTsKKyAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOworICAg
ICAgICBBU1NFUlQoIWlzRG91YmxlQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOwogCi0gICAgICAg
IGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIGlmIChpc0tub3duTnVtZXJp
Yyhub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwogICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAg
ICAgIHZhbHVlVG9OdW1iZXIob3AxLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwpAQCAtNTYwLDEzICs1NjAsMTMgQEAg
dm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogCiAgICAgY2FzZSBWYWx1
ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDEpKSB7Ci0gICAgICAgICAgICBrbm93bkNvbnN0YW50QXJpdGhPcChvcCwgbm9k
ZS5jaGlsZDIsIG5vZGUuY2hpbGQxLCB0cnVlKTsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3Aob3As
IG5vZGUuY2hpbGQyKCksIG5vZGUuY2hpbGQxKCksIHRydWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDIpKSB7Ci0gICAgICAgICAgICBrbm93bkNvbnN0YW50QXJpdGhPcChvcCwgbm9kZS5jaGls
ZDEsIG5vZGUuY2hpbGQyLCBmYWxzZSk7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIGtub3duQ29uc3RhbnRBcml0aE9wKG9wLCBub2Rl
LmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCBmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTU3NSw4ICs1NzUsOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFyaXRoU3Vi
OiB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7Ci0gICAgICAg
ICAgICBrbm93bkNvbnN0YW50QXJpdGhPcChBcml0aFN1Yiwgbm9kZS5jaGlsZDEsIG5vZGUuY2hp
bGQyLCBmYWxzZSk7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkp
IHsKKyAgICAgICAgICAgIGtub3duQ29uc3RhbnRBcml0aE9wKEFyaXRoU3ViLCBub2RlLmNoaWxk
MSgpLCBub2RlLmNoaWxkMigpLCBmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAKQEAgLTU5MCw4ICs1OTAsOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpj
b21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICBE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIERvdWJsZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIERvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAg
ICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7CiAgICAgICAgIEZQUlJlZyBvcDJGUFIgPSBv
cDIuZnByKCk7CkBAIC02MDQsOCArNjA0LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBlYXgodGhpcywgWDg2UmVnaXN0ZXJz
OjplYXgpOwogICAgICAgICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWR4
KTsKIApAQCAtNjIzLDkgKzYyMyw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
U3BlY3VsYXQKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG1vZEJ5WmVybzsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMSkpCisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGls
ZDEoKSkpCiAgICAgICAgICAgICBmaXJzdE9wTm90SW50ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkKKyAgICAgICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgIHNlY29uZE9wTm90
SW50ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3AyR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIAogICAgICAgICBtb2RCeVplcm8gPSBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMkdQUik7CkBAIC02NTUs
MTggKzY1NSwxOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkp
KSksIFg4NlJlZ2lzdGVyczo6ZWR4KTsKICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkpIHsKKyAg
ICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgewogICAgICAgICAgICAg
Zmlyc3RPcE5vdEludC5saW5rKCZtX2ppdCk7CiAgICAgICAgIAogICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgc2Vjb25kT3BOb3RJbnQyOwogICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKQorICAgICAgICAgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgICAgICBzZWNvbmRPcE5vdEludDIgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcDJHUFIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGZpcnN0
IG9wIGlzIGEgZG91YmxlLCBzZWNvbmQgb3AgaXMgYW4gaW50LgogICAgICAgICAgICAgbV9qaXQu
Y29udmVydEludDMyVG9Eb3VibGUob3AyR1BSLCBvcDJGUFIpOwogCi0gICAgICAgICAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkgeworICAgICAgICAgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMigpKSkgewogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGdvdFNlY29uZE9wID0gbV9qaXQuanVtcCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgc2Vjb25kT3BOb3RJbnQyLmxpbmsoJm1faml0KTsKQEAgLTY4Miw3ICs2ODIsNyBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgICAgICBnb3RE
b3VibGVBcmdzID0gbV9qaXQuanVtcCgpOwogICAgICAgICB9CiAgICAgCi0gICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKSB7CisgICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS5jaGlsZDIoKSkpIHsKICAgICAgICAgICAgIHNlY29uZE9wTm90SW50LmxpbmsoJm1f
aml0KTsKICAgICAgICAgCiAgICAgICAgICAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGZpcnN0IG9w
IGlzIGFuIGludCwgYW5kIHRoZSBzZWNvbmQgaXMgYSBkb3VibGUKQEAgLTY5MCwxMCArNjkwLDEw
IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAgICAgICAg
IHVuYm94RG91YmxlKG9wMkdQUiwgb3AyRlBSKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMSgpKSkKICAgICAgICAgICAgIGdvdERvdWJsZUFyZ3MubGluaygmbV9q
aXQpOwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSB8fCAh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKSB7CisgICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CiAg
ICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhYODZSZWdpc3RlcnM6OmVkeCk7CiAg
ICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEZQUkluZm86OmFyZ3VtZW50RlBSMCwgRlBSSW5m
bzo6YXJndW1lbnRGUFIxPihvcDFGUFIsIG9wMkZQUik7CiAgICAgICAgICAgICBtX2ppdC5hcHBl
bmRDYWxsKGZtb2QpOwpAQCAtNzA4LDcgKzcwOCw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwpA
QCAtNzQ5LDggKzc0OSw4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogCiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRo
aXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgY2xlYW5JbmRleCh0aGlzKTsKQEAgLTgwMSw5ICs4
MDEsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAKICAgICBj
YXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzModGhp
cywgbm9kZS5jaGlsZDMpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwog
ICAgICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBhcmcy
R1BSID0gYXJnMi5ncHIoKTsKICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdwcigpOwpA
QCAtODE3LDcgKzgxNyw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICB9CiAKICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTgzMSw4ICs4MzEsOCBAQCB2b2lkIE5vblNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlk
OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTg0Niw4ICs4NDYsOCBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2Fz
ZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxk
Mik7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTg3
Miw3ICs4NzIsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAg
ICAgfQogCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGdsb2JhbE9iamVjdCh0
aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIApAQCAt
ODk5LDcgKzg5OSw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQK
ICAgICB9CiAKICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIApAQCAtOTI4LDcgKzkyOCw3IEBAIHZvaWQgTm9u
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICNlbmRpZgogCiAgICAgICAgIC8vIFJl
dHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSLgotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3Mu
CkBAIC05NTIsNiArOTUyLDEzIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3Bl
Y3VsYXQKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCisgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIENhbGw6CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIGNhbGxlZSh0aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJz
dENoaWxkKCldKTsKKyAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAg
ICAgICAgZW1pdENhbGwobm9kZSwgY2FsbGVlR1BSKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
OTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAgICAgICAgICJtb3YgKCVyc3ApLCAlIiBT
VFJJTkdJWkUocmVnaXN0ZXIpICJcbiIgXAogICAgICAgICAiam1wIF8iIFNUUklOR0laRShmdW5j
dGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOworI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfQVJHMl9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbikgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kpCiAjZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9BUkc0X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKICNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX0FSRzVfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCiAKQEAgLTM4Nyw2ICszODgsMTE0
IEBAIGJvb2wgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4g
SlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQogCitFbmNvZGVkSlNWYWx1ZSByZXR1cm5W
YWx1ZUhhY2soKTsKK0VuY29kZWRKU1ZhbHVlIHJldHVyblZhbHVlSGFja1dpdGhFeGVjU3RhdGUo
RXhlY1N0YXRlKik7CisKK2FzbSAoCisiLmdsb2JsIF8iIFNUUklOR0laRShyZXR1cm5WYWx1ZUhh
Y2spICJcbiIKKyJfIiBTVFJJTkdJWkUocmV0dXJuVmFsdWVIYWNrKSAiOiIgIlxuIgorICAgICJt
b3YgLTQwKCVyMTMpLCAlcjEzXG4iCisgICAgIm1vdiAlcjEzLCAlcmRpXG4iCisgICAgImptcCBf
IiBTVFJJTkdJWkUocmV0dXJuVmFsdWVIYWNrV2l0aEV4ZWNTdGF0ZSkgIlxuIgorKTsKKworRW5j
b2RlZEpTVmFsdWUgcmV0dXJuVmFsdWVIYWNrV2l0aEV4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT5nbG9iYWxEYXRhKCkuaG9zdENh
bGxSZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNhbGxlZSwgY2FsbERhdGEpOworICAgIAorICAg
IEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKKyAgICAKKyAgICBpZiAoY2FsbFR5cGUg
PT0gQ2FsbFR5cGVIb3N0KSB7CisgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXIt
PnJlZ2lzdGVyRmlsZSgpLmdyb3coZXhlY0NhbGxlZS0+cmVnaXN0ZXJzKCkpKSB7CisgICAgICAg
ICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhl
Yyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
ZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihleGVjLT5zY29wZUNoYWluKCkpOworICAgICAgICAK
KyAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmV0dXJuVmFsdWVIYWNrKTsKKyAg
ICB9CisgICAgCisgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7CisgICAgZXhl
Yy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMs
IGNhbGxlZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsV2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cik7CitGVU5DVElPTl9X
UkFQUEVSX1dJVEhfQVJHMl9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25MaW5rQ2FsbCk7Cit2b2lk
KiBvcGVyYXRpb25MaW5rQ2FsbFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBl
eGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCA9IGdldEpTRnVuY3Rpb24oKmdsb2JhbERhdGEsIGNhbGxlZUFzVmFsdWUpOworICAgIGlm
ICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCisgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChl
eGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0Z1
bmN0aW9uKGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0
YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKKyAgICBpZiAoZXhl
Y3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUt
PmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAgICAgSlNPYmplY3Qq
IGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChleGVjLCBjYWxsZWUt
PnNjb3BlKCkpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGdsb2JhbERhdGEt
PmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGNvZGVCbG9jayA9ICZmdW5jdGlvbkV4ZWN1
dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ2FsbCgpOworICAgICAgICBpZiAoZXhlY0NhbGxl
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGNv
ZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlv
bkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
Z2VuZXJhdGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpOworICAgIH0KKyAgICBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0lu
Zm8ocmV0dXJuQWRkcmVzcyk7CisgICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKKyAg
ICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKKyAgICBlbHNlCisgICAgICAgIGRmZ0xpbmtD
YWxsKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIp
OworICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlQ2hhaW4oY2FsbGVlLT5zY29wZSgpKTsKKyAgICBy
ZXR1cm4gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworfQorCit2b2lkKiBvcGVyYXRpb25W
aXJ0dWFsQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgRXhlY1N0YXRlKiBleGVj
ID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4
ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKTsKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsID0gZ2V0SlNGdW5jdGlvbigqZ2xvYmFsRGF0YSwgY2FsbGVlQXNWYWx1ZSk7CisgICAgaWYg
KCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKKyAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4
ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUpOworICAgIAorICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gYXNGdW5jdGlvbihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChleGVjdXRhYmxl
LT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gZXhlY3V0YWJsZS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisK
KyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgIEpTT2JqZWN0KiBlcnJvciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoZXhlYywgZnVuY3Rpb24tPnNjb3Bl
KCkpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0
aW9uID0gZXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBleGVjQ2FsbGVlLT5z
ZXRTY29wZUNoYWluKGZ1bmN0aW9uLT5zY29wZSgpKTsKKyAgICByZXR1cm4gZnVuY3Rpb25FeGVj
dXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKK30KKwogREZHSGFuZGxlciBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNT
dGF0ZSogZXhlYywgUmV0dXJuQWRkcmVzc1B0ciBmYXVsdExvY2F0aW9uKQogewogICAgIEpTVmFs
dWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Niw2ICs3Niw4IEBAIGJvb2wgb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiwgRW4KIGJv
b2wgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKIGJvb2wgb3BlcmF0aW9uQ29tcGFy
ZUVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpOwogYm9vbCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7Cit2
b2lkKiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKTsKK3ZvaWQqIG9wZXJhdGlvbkxp
bmtDYWxsKEV4ZWNTdGF0ZSopOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBh
biBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcwogLy8g
dGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0
aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYgKzM3NSwyMSBA
QCB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgCiAgICAgICAgIGRmZ1Jl
cGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIH0KIAordm9pZCBk
ZmdMaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBD
b2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY29kZVB0cikKK3sKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9
IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIAorICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIGlmICghY2FsbGVl
Q29kZUJsb2NrIHx8IHN0YXRpY19jYXN0PGludD4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSkgPT0gY2FsbGVlQ29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpIHsKKyAgICAgICAg
QVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgICAgIGNhbGxMaW5rSW5mby5j
YWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPmdsb2JhbERhdGEoKSwgY2FsbExpbmtJbmZv
LmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVl
KTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhl
ciwgY29kZVB0cik7CisgICAgfQorICAgIAorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVM
b2NhdGlvbkNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG9wZXJhdGlvblZp
cnR1YWxDYWxsKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lvbiA5MDMxMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHZvaWQg
ZGZnUmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ0J1aWxk
R2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1JlcGF0Y2hQdXRC
eUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCBkZmdMaW5rQ2Fs
bChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0aW9uKiBjYWxs
ZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MywxNyArMzYzLDE3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGUKICAgICAgICAgbm90VGFrZW4g
PSB0bXA7CiAgICAgfQogCi0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsK
LSAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSk7
Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7
CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpbnQz
Ml90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpOworICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
IGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIEpJVENvbXBpbGVyOjpJbW0zMihp
bW0pLCBvcDIuZ3ByKCkpLCB0YWtlbik7Ci0gICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDIpOworICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQyKCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChu
b2RlLmNoaWxkMigpKTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlv
biwgb3AxLmdwcigpLCBKSVRDb21waWxlcjo6SW1tMzIoaW1tKSksIHRha2VuKTsKICAgICB9IGVs
c2UgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNo
aWxkMigpKTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgb3Ax
LmdwcigpLCBvcDIuZ3ByKCkpLCB0YWtlbik7CiAgICAgfQogCkBAIC0zOTgsOCArMzk4LDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQ2FsbAogICAgICAgICBub3RUYWtl
biA9IHRtcDsKICAgICB9CiAKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEpOwotICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgSlNW
YWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigp
OwogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgZmx1c2hSZWdpc3RlcnMoKTsK
QEAgLTQ0OCwyMCArNDQ4LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIHN3aXRjaCAobV9qaXQuZ3JhcGgo
KS5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkpIHsKICAgICAgICAgY2FzZSBQcmVkaWN0SW50
MzI6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUuY2hpbGQxKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5ncHIo
KSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIFByZWRpY3RBcnJheTogewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoY2VsbC5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7
CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwog
ICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC00NzMsMjMgKzQ3MywyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNlIEJpdFhv
cjoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAg
ICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AyKTsKIAotICAgICAgICAgICAgYml0T3Ao
b3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSwgb3AyLmdwcigpLCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQxKCkpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgfSBlbHNlIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAotICAgICAgICAgICAgYml0T3Aob3AsIHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQy
KCkpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwot
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3Ax
LCBvcDIpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKQEAgLTUwMywx
NyArNTAzLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNlIEJpdFVSU2hp
ZnQ6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAg
ICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAgICAgIHNoaWZ0
T3Aob3AsIG9wMS5ncHIoKSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpICYgMHgx
ZiwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgdmFs
dWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkgJiAweDFmLCByZXN1bHQuZ3ByKCkpOwog
CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93IHNoaWZ0IGFt
b3VudCB0byBiZSB1c2VkIGFzIHRoZSByZXN1bHQsIE1hY3JvQXNzZW1ibGVyIGRvZXMgbm90IHBl
cm1pdCB0aGlzLgotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigp
OwpAQCAtNTI1LDcgKzUyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7Ci0gICAg
ICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhlIG9wZXJhbmQgaXMgcG9z
aXRpdmUuCkBAIC01MzcsNyArNTM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7Ci0gICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkpOwpAQCAtNTQ1LDE0ICs1NDUsMTQgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2Ug
VmFsdWVUb051bWJlcjogewotICAgICAgICBpZiAoaXNJbnRlZ2VyKG5vZGUuY2hpbGQxKSkgewot
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KTsKKyAgICAgICAgaWYgKGlzSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAgICAgbV9qaXQu
bW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIG9wMS5mb3JtYXQoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSk7CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwog
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CkBAIC01
NjEsMTAgKzU2MSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAKICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkgewotICAg
ICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAg
ICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSk7Ci0g
ICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hp
bGQyKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwg
bm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDEoKSkpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJD
b25zdGFudChub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
bV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDIuZ3ByKCksIElt
bTMyKGltbTEpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTU3Myw5ICs1NzMsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICAgICAgaW50MzJfdCBp
bW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpOworICAgICAgICAgICAgaWYg
KGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKTsK
ICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6
T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOwpAQCAtNTg0
LDggKzU4NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEsIG9wMik7CiAKICAgICAgICAgICAgIEdQUlJlZyBncHIxID0gb3AxLmdwcigpOwpAQCAtNjA0
LDggKzYwNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CkBA
IC02MTcsMTAgKzYxNywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICAg
ICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpOworICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxk
MigpKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkg
eworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJD
b25zdGFudChub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiks
IHJlc3VsdC5ncHIoKSkpOwpAQCAtNjI5LDggKzYyOSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgb3Ay
LmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTYzOSw4ICs2MzksOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIp
OworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIo
KSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICBG
UFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKQEAgLTY1Miw5ICs2NTIsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aE11bDog
ewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSwgbm9kZS5j
aGlsZDIpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3Ax
LmdwcigpOwpAQCAtNjcwLDggKzY3MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgRlBS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgRlBSUmVnIHJlZzEg
PSBvcDEuZnByKCk7CkBAIC02ODQsOCArNjg0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgIEZQUlJlZyByZWcxID0g
b3AxLmZwcigpOwpAQCAtNjk3LDggKzY5Nyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IGVkeCh0aGlzLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAgICAgICAgIEdQUlJlZyBv
cDFHcHIgPSBvcDEuZ3ByKCk7CkBAIC03MjUsNyArNzI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgTG9naWNhbE5vdDogewot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOyAvLyBGSVhNRTogV2UgY291bGQgcmV1c2UsIGJ1dCBvbiBz
cGVjdWxhdGlvbiBmYWlsIHdvdWxkIG5lZWQgcmVjb3ZlcnkgdG8gcmVzdG9yZSB0YWcgKGFraW4g
dG8gYWRkKS4KIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkp
OwpAQCAtNzQ2LDIwICs3NDYsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgLy8gc28gY2FuIGJlIG5vIGludGVydmVuaW5nIG5vZGVzIHRv
IGFsc28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAKICAgICAgICAgICAgIEFTU0VSVChub2RlLmFk
anVzdGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkKKyAgICAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKQogICAgICAg
ICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUlu
ZGV4LCBKSVRDb21waWxlcjo6TGVzc1RoYW4pOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIGNvbXBpbGVQZWVwSG9sZUNhbGwobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBvcGVyYXRp
b25Db21wYXJlTGVzcyk7CiAKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSk7Ci0gICAgICAg
ICAgICB1c2Uobm9kZS5jaGlsZDIpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgbV9jb21waWxlSW5k
ZXggPSBicmFuY2hOb2RlSW5kZXg7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBOb3JtYWwgY2FzZSwgbm90IGZ1c2VkIHRvIGJyYW5jaC4KLSAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIG1faml0LmNv
bXBhcmUzMihKSVRDb21waWxlcjo6TGVzc1RoYW4sIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1
bHQuZ3ByKCkpOwpAQCAtNzc4LDIwICs3NzgsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgLy8gc28gY2FuIGJlIG5vIGludGVydmVuaW5n
IG5vZGVzIHRvIGFsc28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAKICAgICAgICAgICAgIEFTU0VS
VChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAgICAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkKKyAgICAgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkp
KQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJh
bmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6TGVzc1RoYW5PckVxdWFsKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVDYWxsKG5vZGUsIGJyYW5jaE5v
ZGVJbmRleCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSk7CiAKLSAgICAgICAgICAgIHVzZShub2Rl
LmNoaWxkMSk7Ci0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIpOworICAgICAgICAgICAgdXNl
KG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3JtYWwgY2FzZSwgbm90IGZ1c2VkIHRvIGJy
YW5jaC4KLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hp
bGQyKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwog
CiAgICAgICAgIG1faml0LmNvbXBhcmUzMihKSVRDb21waWxlcjo6TGVzc1RoYW5PckVxdWFsLCBv
cDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTgxMCwxOSArODEwLDE5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIC8v
IHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29t
cGFyZS4gCiAgICAgICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7
CiAKLSAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxLCBu
b2RlLmNoaWxkMikpCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
LmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhv
bGVJbnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OkVxdWFs
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVDYWxs
KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgb3BlcmF0aW9uQ29tcGFyZUVxKTsKIAotICAgICAgICAg
ICAgdXNlKG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMik7CisgICAg
ICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIo
KSk7CiAgICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGls
ZXI6OkVxdWFsLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTgzNCw4
ICs4MzQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIG1faml0LmNvbXBhcmUzMihKSVRD
b21waWxlcjo6RXF1YWwsIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAt
ODQ3LDE4ICs4NDcsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgTm9kZUluZGV4IGFsaWFz
ID0gbm9kZS5jaGlsZDM7CisgICAgICAgIE5vZGVJbmRleCBhbGlhcyA9IG5vZGUuY2hpbGQzKCk7
CiAgICAgICAgIGlmIChhbGlhcyAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBy
ZXN1bHQgc2hvdWxkIGJlIGFibGUgdG8gcmV1c2UgY2hpbGQxLCBjaGlsZDIuIFNob3VsZCBoYXZl
IGFuICdVbnVzZWRPcGVyYW5kJyB0eXBlLgotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYWxp
YXNlZFZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFsaWFzZWRWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgYWxpYXNlZFZhbHVlKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUo
YWxpYXNlZFZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2UodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwpAQCAtODcx
LDcgKzg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAog
ICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5
IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAg
ICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBj
YW4gc2tpcCB0aGUgY2hlY2suCi0gICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgo
KVtub2RlLmNoaWxkMV07CisgICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtu
b2RlLmNoaWxkMSgpXTsKICAgICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8IG1f
aml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihiYXNlTm9kZS5sb2NhbCgpKSAhPSBQcmVkaWN0QXJy
YXkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRy
KSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKQEAgLTg4OCw5ICs4ODgs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBQdXRCeVZhbDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS5jaGlsZDMpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKIAogICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lz
dGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgpAQCAtOTAzLDcgKzkwMyw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBDaGVj
ayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3
aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZl
IHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hl
Y2suCi0gICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMV07
CisgICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXTsK
ICAgICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8IG1faml0LmdyYXBoKCkuZ2V0
UHJlZGljdGlvbihiYXNlTm9kZS5sb2NhbCgpKSAhPSBQcmVkaWN0QXJyYXkpCiAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCB3aXRoaW5BcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CkBAIC05NDUsOSArOTQ1
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAog
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS5jaGlsZDMpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIo
KTsKQEAgLTk3Nyw3ICs5NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUu
Z3ByKCk7CiAKICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJ
bmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKQEAgLTEw
MTMsNyArMTAxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICNlbmRpZgogCiAgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BS
LgotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIG1faml0
Lm1vdmUob3AxLmdwcigpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICAgICAgLy8g
R3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCkBAIC0xMDI5LDcgKzEwMjksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBDb252ZXJ0
VGhpczogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9k
ZS5jaGlsZDEpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogCiAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CkBAIC0xMDQwLDcgKzEwNDAs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2Up
OwogCiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBAIC0xMDUyLDgg
KzEwNTIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBQdXRCeUlkOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAg
ICBjYWNoZWRQdXRCeUlkKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBzY3JhdGNoLmdwcigpLCBu
b2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKQEAgLTEwNjMsOCArMTA2Myw4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBj
YXNlIFB1dEJ5SWREaXJlY3Q6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGls
ZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAgIGNh
Y2hlZFB1dEJ5SWQoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIHNjcmF0Y2guZ3ByKCksIG5vZGUu
aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOwpAQCAtMTA4NSw3ICsxMDg1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0
R2xvYmFsVmFyOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hp
bGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSBnbG9iYWxPYmplY3QodGhpcyk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAKQEAgLTExMTIsNiArMTExMiwxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAjZWxzZQogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgorICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgY2FzZSBDYWxsOgorICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgbV9qaXQu
Z3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXSk7CisgICAgICAgIEdQ
UlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CisgICAgICAgIGVtaXRDYWxsKG5vZGUsIGNh
bGxlZUdQUik7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmIChub2RlLmhhc1Jlc3Vs
dCgpICYmIG5vZGUubXVzdEdlbmVyYXRlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTUyLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxhc3RO
b2RlIGlzIGEgYnJhbmNoIG9uIHRoaXMgbm9kZS4KICAgICAgICAgTm9kZSYgbGFzdE5vZGUgPSBt
X2ppdC5ncmFwaCgpW2xhc3ROb2RlSW5kZXhdOwotICAgICAgICByZXR1cm4gbGFzdE5vZGUub3Ag
PT0gQnJhbmNoICYmIGxhc3ROb2RlLmNoaWxkMSA9PSBtX2NvbXBpbGVJbmRleCA/IGxhc3ROb2Rl
SW5kZXggOiBOb05vZGU7CisgICAgICAgIHJldHVybiBsYXN0Tm9kZS5vcCA9PSBCcmFuY2ggJiYg
bGFzdE5vZGUuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9O
b2RlOwogICAgIH0KIAogICAgIGJvb2wgaXNJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShy
ZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDICB7
CiAgICAgLy8gUGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0IGZ1bmN0aW9ucy4K
ICAgICBjbGFzcyBFeGVjU3RhdGUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6Cisg
ICAgICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0
ZXJGaWxlOjpDYWxsZWVdLmpzVmFsdWUoKTsgfQogICAgICAgICBKU09iamVjdCogY2FsbGVlKCkg
Y29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OkNhbGxlZV0uZnVuY3Rpb24oKTsgfQog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0
ZXJGaWxlOjpDb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsgfQogICAgICAgICBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbigpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNiBAQCBKSVQ6OkpJVChKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIENvZGVCCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAg
ICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKLSAgICAsIG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm8oY29kZUJsb2NrID8gY29kZUJsb2NrLT5udW1iZXJPZkNhbGxM
aW5rSW5mb3MoKSA6IDApCiAgICAgLCBtX2J5dGVjb2RlT2Zmc2V0KCh1bnNpZ25lZCktMSkKICNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICwgbV9qdW1wVGFyZ2V0SW5kZXgoMCkKQEAgLTM0Nyw3
ICszNDYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBBU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NvZGVCbG9jay0+
bnVtYmVyT2ZDYWxsTGlua0luZm9zKCkpOworICAgIEFTU0VSVChtX2NhbGxMaW5rSW5mb0luZGV4
ID09IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKIAogI2lmbmRl
ZiBOREVCVUcKICAgICAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdp
dGggQVNTRVJUcy4KQEAgLTQ1MCw3ICs0NDksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgIH0KIAogICAgIEFTU0VSVChtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25JbmRleCA9PSBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7Ci0gICAg
QVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExp
bmtJbmZvcygpKTsKKyAgICBBU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
Ly8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCkBA
IC01NzQsMTAgKzU3MywxMSBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciog
ZnVuCiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZihtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlv
bik7CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZiht
X3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAgfQor
ICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9jYWxsU3RydWN0dXJl
U3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsraSkgewogICAgICAgICBD
YWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwogICAgICAg
ICBpbmZvLmlzQ2FsbCA9IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaXND
YWxsOwotICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxS
ZXR1cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gQ29kZUxv
Y2F0aW9uUG9zc2libHlOZWFyQ2FsbChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pKTsK
ICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aEJlZ2luKTsKICAgICAgICAg
aW5mby5ob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoT3RoZXIpOwogICAgIH0KQEAg
LTU5Miw3ICs1OTIsNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVu
CiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBmdW5j
dGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICAgICAgKmZ1bmN0aW9uRW50cnlBcml0eUNoZWNrID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKIAotICAgIHJldHVybiBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICByZXR1cm4gSklUQ29kZShwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKSwgSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogfQogCiB2b2lkIEpJVDo6bGlua0Nh
bGwoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJs
b2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0ciBjb2RlLCBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbywgaW50IGNhbGxlckFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CkBAIC02MDgsNyArNjA4LDcgQEAgdm9pZCBKSVQ6OmxpbmtDYWxsKEpTRnVuY3Rpb24qIGNhbGxl
ZSwgQwogICAgIH0KIAogICAgIC8vIHBhdGNoIHRoZSBjYWxsIHNvIHdlIGRvIG5vdCBjb250aW51
ZSB0byB0cnkgdG8gbGluay4KLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxs
KCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxM
aW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZp
cnR1YWxDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6bGlua0NvbnN0cnVjdChKU0Z1bmN0aW9uKiBj
YWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVC
bG9jaywgSklUOjpDb2RlUHRyIGNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBpbnQg
Y2FsbGVyQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKQEAgLTYyNCw3ICs2MjQs
NyBAQCB2b2lkIEpJVDo6bGlua0NvbnN0cnVjdChKU0Z1bmN0aW9uKiBjYWxsCiAgICAgfQogCiAg
ICAgLy8gcGF0Y2ggdGhlIGNhbGwgc28gd2UgZG8gbm90IGNvbnRpbnVlIHRvIHRyeSB0byBsaW5r
LgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdCgpKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsTGlua0luZm8tPmNh
bGxSZXR1cm5Mb2NhdGlvbiksIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3Ry
dWN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDkgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgYWRkU2xvd0Nhc2Uo
anVtcFRvU2xvdyk7CiAgICAgQVNTRVJUX0pJVF9PRkZTRVQoZGlmZmVyZW5jZUJldHdlZW4oYWRk
cmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywganVtcFRvU2xvdyksIHBhdGNoT2Zmc2V0T3BDYWxs
Q29tcGFyZVRvSnVtcCk7CisgICAgCisgICAgQVNTRVJUKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21w
aWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLmFwcGVuZChTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvKCkpOwogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAg
ICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
aXNDYWxsID0gb3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3LDIwIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogICAgIGNsYXNzIFJlZ2lzdGVy
RmlsZTsKLQorICAgIAogICAgIGNsYXNzIEpJVENvZGUgewogICAgICAgICB0eXBlZGVmIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBDb2RlUmVmOwogICAgICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBDb2RlUHRyOwogICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBKSVRUeXBlIHsgSG9z
dENhbGxUaHVuaywgQmFzZWxpbmVKSVQsIERGR0pJVCB9OworCiAgICAgICAgIEpJVENvZGUoKQog
ICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBKSVRDb2RlKGNvbnN0IENvZGVSZWYgcmVm
KQorICAgICAgICBKSVRDb2RlKGNvbnN0IENvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCiAg
ICAgICAgICAgICA6IG1fcmVmKHJlZikKKyAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUp
CiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC05MywxMiArOTYsMTcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3JlZi5tX2V4ZWN1dGFibGVQb29s
LmdldCgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKSVRUeXBlIGppdFR5cGUoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9qaXRUeXBlOworICAgICAgICB9CiAKICAg
ICAgICAgLy8gSG9zdCBmdW5jdGlvbnMgYXJlIGEgYml0IHNwZWNpYWw7IHRoZXkgaGF2ZSBhIG1f
Y29kZSBwb2ludGVyIGJ1dCB0aGV5CiAgICAgICAgIC8vIGRvIG5vdCBpbmRpdmlkdWxseSByZWYg
dGhlIGV4ZWN1dGFibGUgcG9vbCBjb250YWluaW5nIHRoZSB0cmFtcG9saW5lLgogICAgICAgICBz
dGF0aWMgSklUQ29kZSBIb3N0RnVuY3Rpb24oQ29kZVB0ciBjb2RlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gSklUQ29kZShjb2RlLmRhdGFMb2NhdGlvbigpLCAwLCAwKTsKKyAgICAg
ICAgICAgIHJldHVybiBKSVRDb2RlKGNvZGUuZGF0YUxvY2F0aW9uKCksIDAsIDAsIEhvc3RDYWxs
VGh1bmspOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBjbGVhcigpCkBAIC0xMDgsMTIgKzEx
NiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgSklUQ29kZSh2b2lkKiBjb2RlLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRh
YmxlUG9vbCwgc2l6ZV90IHNpemUpCisgICAgICAgIEpJVENvZGUodm9pZCogY29kZSwgUGFzc1Jl
ZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIHNpemVfdCBzaXplLCBKSVRUeXBl
IGppdFR5cGUpCiAgICAgICAgICAgICA6IG1fcmVmKGNvZGUsIGV4ZWN1dGFibGVQb29sLCBzaXpl
KQorICAgICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICAgICAgewogICAgICAgICB9
CiAKICAgICAgICAgQ29kZVJlZiBtX3JlZjsKKyAgICAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAg
ICAgfTsKIAogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTUgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgTmF0aXZlRXhlY3V0
YWJsZTsKICAgICBjbGFzcyBWUHRySGFja0V4ZWN1dGFibGU7CisgICAgbmFtZXNwYWNlIERGRyB7
CisgICAgICAgIGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CisgICAgfQogCiAgICAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqKTsKIAogICAgIGNsYXNzIEpTRnVuY3Rpb24gOiBwdWJsaWMgSlNPYmplY3RXaXRoR2xvYmFs
T2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICAgICAgZnJpZW5kIGNsYXNz
IERGRzo6SklUQ29kZUdlbmVyYXRvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0
YTsKIAogICAgICAgICB0eXBlZGVmIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCBCYXNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlz
aW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw2ICsyMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNWYWx1ZSBleGNlcHRpb247CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgUmV0dXJu
QWRkcmVzc1B0ciBleGNlcHRpb25Mb2NhdGlvbjsKKyAgICAgICAgSlNWYWx1ZSBob3N0Q2FsbFJl
dHVyblZhbHVlOwogI2VuZGlmCiAKICAgICAgICAgSGFzaE1hcDxPcGFxdWVKU0NsYXNzKiwgT3Bh
cXVlSlNDbGFzc0NvbnRleHREYXRhKj4gb3BhcXVlSlNDbGFzc0RhdGE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99561</attachid>
            <date>2011-07-02 14:51:23 -0700</date>
            <delta_ts>2011-07-05 13:51:14 -0700</delta_ts>
            <desc>the path (address Mark&apos;s comment)</desc>
            <filename>call_patch_7.diff</filename>
            <type>text/plain</type>
            <size>97236</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAK
KzIwMTEtMDctMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IGlt
cGxlbWVudCBvcF9jYWxsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM4NTgKKworICAgICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbDo6Q29kZUxvY2F0aW9uUG9z
c2libHlOZWFyQ2FsbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0TnVtYmVyT2ZDYWxsTGlua0lu
Zm9zKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0FsaWFz
VHJhY2tlci5oOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6bG9va3VwR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6ZXF1YWxJZ25vcmluZ0xhdGVy
TnVtZXJpY0NvbnZlcnNpb24pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRk
VmFyQXJnQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcmVkaWN0
SW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJz
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6cmVmQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6YWRkcmVzc09mQ2Fs
bERhdGEpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlY29yZDo6Q2FsbFJlY29yZCk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjphcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEpTQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OlByb3BlcnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vz
c1JlY29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpTQ2FsbFJlY29yZDo6
SlNDYWxsUmVjb3JkKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
aGlsZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmZpcnN0Q2hpbGQpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Om51bUNoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpiYXNp
Y0FyaXRoT3ApOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25z
Lmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRm
Z0xpbmtDYWxsKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmRldGVjdFBlZXBIb2xlQnJhbmNo
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhl
Y1N0YXRlOjpjYWxsZWVBc1ZhbHVlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtDb25zdHJ1Y3QpOgorICAgICAgICAqIGppdC9K
SVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAg
KiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAg
ICAgKEpTQzo6SklUQ29kZTo6aml0VHlwZSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RG
dW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuaDoKKwogMjAxMS0wNy0wMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIElFIFdlYiBXb3JrZXJzIGRlbW8gY3Jhc2hlcyBpbiBKU0M6
OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTksNiArMTE5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgOiBDb2RlTG9jYXRpb25Db21t
b24oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGxvY2F0aW9uKSkge30KIH07CiAKK2NsYXNzIENvZGVM
b2NhdGlvblBvc3NpYmx5TmVhckNhbGwgOiBwdWJsaWMgQ29kZUxvY2F0aW9uQ29tbW9uIHsKK3B1
YmxpYzoKKyAgICBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKCkgeyB9CisgICAgZXhwbGlj
aXQgQ29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9j
YXRpb24pCisgICAgICAgIDogQ29kZUxvY2F0aW9uQ29tbW9uKGxvY2F0aW9uKSB7IH0KKyAgICBl
eHBsaWNpdCBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKHZvaWQqIGxvY2F0aW9uKQorICAg
ICAgICA6IENvZGVMb2NhdGlvbkNvbW1vbihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobG9jYXRpb24p
KSB7IH0KK307CisKIGNsYXNzIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIDogcHVibGljIENvZGVM
b2NhdGlvbkNvbW1vbiB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIoKSB7
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEwICs0MywxOCBAQAogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCisjaWYgRU5BQkxFKERGR19K
SVQpCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2VuZGlmCisKICNkZWZpbmUgRFVNUF9D
T0RFX0JMT0NLX1NUQVRJU1RJQ1MgMAogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIEVOQUJMRShE
RkdfSklUKQordXNpbmcgbmFtZXNwYWNlIERGRzsKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoTkRF
QlVHKSB8fCBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogCiBzdGF0aWMgVVN0cmluZyBlc2NhcGVR
dW90ZXMoY29uc3QgVVN0cmluZyYgc3RyKQpAQCAtMTY4Nyw3ICsxNjk1LDE0IEBAIHZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtDYWxscygpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NhbGxM
aW5rSW5mb3Muc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKCFtX2NhbGxMaW5rSW5mb3NbaV0u
aXNMaW5rZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uLCBtX2NhbGxMaW5r
SW5mb3NbaV0uaXNDYWxsID8gbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGxM
aW5rKCkgOiBtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluaygp
KTsKKyAgICAgICAgaWYgKGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklU
KSB7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhDb2RlTG9jYXRpb25DYWxsKG1fY2FsbExpbmtJbmZvc1tpXS5jYWxsUmV0dXJuTG9jYXRpb24p
LCBvcGVyYXRpb25MaW5rQ2FsbCk7CisjZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVy
bkxvY2F0aW9uKSwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0
U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
VmlydHVhbENvbnN0cnVjdExpbmsoKSk7CiAgICAgICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxp
bmsoKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBDb2RlTG9jYXRpb25O
ZWFyQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CisgICAgICAgIENvZGVMb2NhdGlvblBvc3NpYmx5
TmVhckNhbGwgY2FsbFJldHVybkxvY2F0aW9uOyAvLyBpdCdzIGEgbmVhciBjYWxsIGluIHRoZSBv
bGQgSklULCBvciBhIG5vcm1hbCBjYWxsIGluIERGRwogICAgICAgICBDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQ
YXRoT3RoZXI7CiAgICAgICAgIEpJVFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBjYWxsZWU7CkBA
IC0zNzgsOCArMzc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEdsb2JhbFJlc29sdmVJ
bmZvJiBnbG9iYWxSZXNvbHZlSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZ2xvYmFsUmVzb2x2
ZUluZm9zW2luZGV4XTsgfQogICAgICAgICBib29sIGhhc0dsb2JhbFJlc29sdmVJbmZvQXRCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAKKyAgICAgICAgdm9pZCBzZXRO
dW1iZXJPZkNhbGxMaW5rSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9jYWxsTGlua0luZm9zLmdyb3co
c2l6ZSk7IH0KICAgICAgICAgc2l6ZV90IG51bWJlck9mQ2FsbExpbmtJbmZvcygpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbExpbmtJbmZvcy5zaXplKCk7IH0KLSAgICAgICAgdm9pZCBhZGRDYWxsTGlu
a0luZm8oKSB7IG1fY2FsbExpbmtJbmZvcy5hcHBlbmQoQ2FsbExpbmtJbmZvKCkpOyB9CiAgICAg
ICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKGludCBpbmRleCkgeyByZXR1cm4gbV9jYWxs
TGlua0luZm9zW2luZGV4XTsgfQogCiAgICAgICAgIHZvaWQgYWRkTWV0aG9kQ2FsbExpbmtJbmZv
cyh1bnNpZ25lZCBuKSB7IG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5ncm93KG4pOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4
NCwxMCArMTY4NCw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCgK
IAogICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7
CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsK
LSNlbmRpZgotCiAgICAgLy8gRW1pdCBjYWxsLgogICAgIGVtaXRPcGNvZGUob3Bjb2RlSUQpOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYwpAQCAtMTgw
MSwxMCArMTc5Nyw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3QK
IAogICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7
CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsK
LSNlbmRpZgotCiAgICAgZW1pdE9wY29kZShvcF9jb25zdHJ1Y3QpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChjYWxsQXJndW1lbnRzLmNvdW50KCkpOyAvLyBhcmdDb3VudApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCShyZXZpc2lvbiA5MDMxMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBl
bnN1cmVzIHRoZSBhY2Nlc3NlcyBhbGlhcywgcHJvdmlkZWQgdGhhdCB0aGUgc3Vic2NyaXB0IGlz
IGFuCiAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4ICh0aGlzIGlzIGdvb2QgZW5vdWdoOyB0
aGUgc3BlY3VsYXRpdmUgcGF0aCB3aWxsIG9ubHkgZ2VuZXJhdGUKICAgICAgICAgICAgIC8vIG9w
dGltaXplZCBhY2Nlc3NlcyB0byBoYW5kbGUgaW50ZWdlciBzdWJzY3JpcHRzKS4KLSAgICAgICAg
ICAgIGlmIChwb3NzaWJsZUFsaWFzLmNoaWxkMSA9PSBiYXNlICYmIGVxdWFsSWdub3JpbmdMYXRl
ck51bWVyaWNDb252ZXJzaW9uKHBvc3NpYmxlQWxpYXMuY2hpbGQyLCBwcm9wZXJ0eSkpCisgICAg
ICAgICAgICBpZiAocG9zc2libGVBbGlhcy5jaGlsZDEoKSA9PSBiYXNlICYmIGVxdWFsSWdub3Jp
bmdMYXRlck51bWVyaWNDb252ZXJzaW9uKHBvc3NpYmxlQWxpYXMuY2hpbGQyKCksIHByb3BlcnR5
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBOb05vZGU7CkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgTm9kZSYgbm9kZTIgPSBtX2dyYXBoW29wMl07Ci0gICAgICAgIHJldHVybiAobm9kZTIu
b3AgPT0gVmFsdWVUb051bWJlciB8fCBub2RlMi5vcCA9PSBWYWx1ZVRvSW50MzIpICYmIG9wMSA9
PSBub2RlMi5jaGlsZDE7CisgICAgICAgIHJldHVybiAobm9kZTIub3AgPT0gVmFsdWVUb051bWJl
ciB8fCBub2RlMi5vcCA9PSBWYWx1ZVRvSW50MzIpICYmIG9wMSA9PSBub2RlMi5jaGlsZDEoKTsK
ICAgICB9CiAKICAgICAvLyBUaGUgZ3JhcGgsIHRvIGxvb2sgdXAgcG90ZW50aWFsbHkgYWxpYXNp
bmcgbm9kZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBA
QCBwdWJsaWM6CiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMoY29kZUJsb2NrLT5tX251bVBhcmFt
ZXRlcnMpCiAgICAgICAgICwgbV9udW1Mb2NhbHMoY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lz
dGVycykKICAgICAgICAgLCBtX3ByZXNlcnZlZFZhcnMoY29kZUJsb2NrLT5tX251bVZhcnMpCisg
ICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygwKQorICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJn
cygwKQogICAgIHsKICAgICB9CiAKQEAgLTEyNCw3ICsxMjYsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGVJbmRleDsKICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKLSAgICAg
ICAgICAgIHJldHVybiBub2RlLmNoaWxkMTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxk
MSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFy
aWVzIGZyb20gcHJpb3IgYmxvY2tzLApAQCAtMTU1LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZUluZGV4OwogICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gU2V0TG9jYWwpOwotICAg
ICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxOworICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hp
bGQxKCk7CiAgICAgICAgIH0KIAogICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQ
aGkpOwpAQCAtMTkxLDcgKzE5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gaW5k
ZXg7CiAKICAgICAgICAgaWYgKG5vZGUub3AgPT0gVUludDMyVG9OdW1iZXIpCi0gICAgICAgICAg
ICByZXR1cm4gbm9kZS5jaGlsZDE7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsK
IAogICAgICAgICAvLyBDaGVjayBmb3IgbnVtZXJpYyBjb25zdGFudHMgYm94ZWQgYXMgSlNWYWx1
ZXMuCiAgICAgICAgIGlmIChub2RlLm9wID09IEpTQ29uc3RhbnQpIHsKQEAgLTM4Miw2ICszODQs
MjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdEluZGV4OwogICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggYWRk
VG9HcmFwaChOb2RlOjpWYXJBcmdUYWcsIE5vZGVUeXBlIG9wKQorICAgIHsKKyAgICAgICAgTm9k
ZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKKyAgICAgICAg
bV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRleCwgbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywgbV9udW1Q
YXNzZWRWYXJBcmdzKSk7CisgICAgICAgIAorICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MgPSAw
OworICAgICAgICAKKyAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKKyAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdEluZGV4
OworICAgIH0KKyAgICB2b2lkIGFkZFZhckFyZ0NoaWxkKE5vZGVJbmRleCBjaGlsZCkKKyAgICB7
CisgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworICAgICAg
ICBtX251bVBhc3NlZFZhckFyZ3MrKzsKKyAgICB9CiAKICAgICB2b2lkIHByZWRpY3RBcnJheShO
b2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKQEAgLTM5NiwxMCArNDE1LDEwIEBAIHByaXZhdGU6
CiAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFtub2RlSW5kZXhdOwogCiAgICAgICAg
IGlmIChub2RlUHRyLT5vcCA9PSBWYWx1ZVRvTnVtYmVyKQotICAgICAgICAgICAgbm9kZVB0ciA9
ICZtX2dyYXBoW25vZGVQdHItPmNoaWxkMV07CisgICAgICAgICAgICBub2RlUHRyID0gJm1fZ3Jh
cGhbbm9kZVB0ci0+Y2hpbGQxKCldOwogCiAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBWYWx1
ZVRvSW50MzIpCi0gICAgICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQx
XTsKKyAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFtub2RlUHRyLT5jaGlsZDEoKV07CiAK
ICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IEdldExvY2FsKQogICAgICAgICAgICAgbV9ncmFw
aC5wcmVkaWN0KG5vZGVQdHItPmxvY2FsKCksIFByZWRpY3RJbnQzMik7CkBAIC00NTMsNiArNDcy
LDEzIEBAIHByaXZhdGU6CiAgICAgLy8gdHlwaWNhbGx5IGVxdWFsIHRvIHRoZSBudW1iZXIgdmFy
cywgYnV0IHdlIGV4cGFuZCB0aGlzIHRvIGNvdmVyIGFsbAogICAgIC8vIHRlbXBvcmFyaWVzIHRo
YXQgcGVyc2lzdCBhY3Jvc3MgYmxvY2tzIChkdWVzIHRvID86LCAmJiwgfHwsIGV0YykuCiAgICAg
dW5zaWduZWQgbV9wcmVzZXJ2ZWRWYXJzOworICAgIC8vIFRoZSBudW1iZXIgb2Ygc2xvdHMgKGlu
IHVuaXRzIG9mIHNpemVvZihSZWdpc3RlcikpIHRoYXQgd2UgbmVlZCB0bworICAgIC8vIHByZWFs
bG9jYXRlIGZvciBjYWxscyBlbWFuYXRpbmcgZnJvbSB0aGlzIGZyYW1lLiBUaGlzIGluY2x1ZGVz
IHRoZQorICAgIC8vIHNpemUgb2YgdGhlIENhbGxGcmFtZSwgb25seSBpZiB0aGlzIGlzIG5vdCBh
IGxlYWYgZnVuY3Rpb24uICAoSS5lLgorICAgIC8vIHRoaXMgaXMgMCBpZiBhbmQgb25seSBpZiB0
aGlzIGZ1bmN0aW9uIGlzIGEgbGVhZi4pCisgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsK
KyAgICAvLyBUaGUgbnVtYmVyIG9mIHZhciBhcmdzIHBhc3NlZCB0byB0aGUgbmV4dCB2YXIgYXJn
IG5vZGUuCisgICAgdW5zaWduZWQgbV9udW1QYXNzZWRWYXJBcmdzOwogCiAgICAgc3RydWN0IFBo
aVN0YWNrRW50cnkgewogICAgICAgICBQaGlTdGFja0VudHJ5KEJhc2ljQmxvY2sqIGJsb2NrLCBO
b2RlSW5kZXggcGhpLCB1bnNpZ25lZCB2YXJObykKQEAgLTk1Nyw2ICs5ODMsMzAgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9HcmFw
aChSZXR1cm4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBvcF9jYWxsOiB7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgaW50IGFyZ0NvdW50ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByZWdpc3Rl
ck9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgZmlyc3RBcmcgPSByZWdpc3Rlck9mZnNldCAtIGFyZ0NvdW50IC0gUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgZm9yIChpbnQgYXJnSWR4ID0gZmlyc3RB
cmc7IGFyZ0lkeCA8IGZpcnN0QXJnICsgYXJnQ291bnQ7IGFyZ0lkeCsrKQorICAgICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGdldChhcmdJZHgpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBj
YWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIENhbGwpOworICAgICAgICAgICAgSW5zdHJ1
Y3Rpb24qIHB1dEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RFX0xFTkdU
SChvcF9jYWxsKTsKKyAgICAgICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0
SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpCisgICAgICAgICAg
ICAgICAgc2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2FsbCk7CisgICAgICAgICAg
ICBpZiAoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgKHVuc2lnbmVkKWFyZ0Nv
dW50ID4gbV9wYXJhbWV0ZXJTbG90cykKKyAgICAgICAgICAgICAgICBtX3BhcmFtZXRlclNsb3Rz
ID0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgYXJnQ291bnQ7CisgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2Ugb3BfY2FsbF9wdXRfcmVzdWx0OiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
ICAgICAgICAgSW5zdHJ1Y3Rpb24qIGNhbGxJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlv
biAtIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CisgICAgICAgICAgICBBU1NFUlQoaW50ZXJwcmV0
ZXItPmdldE9wY29kZUlEKGNhbGxJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGwpOwor
I2VuZGlmCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3B1dF9yZXN1bHQpOworICAg
ICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIFBhcnNlIGZhaWxlZCEK
QEAgLTk4OSwyMiArMTAzOSwyMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3Rh
Y2soKQogICAgICAgICAgICAgICAgIHZhci52YWx1ZSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAg
ICAgICAgICAgICAgICBwaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShwcmVkZWNlc3NvckJs
b2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYg
KG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAg
ICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hp
bGQxOworICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJ
blByZWRlY2Vzc29yXS5jaGlsZDEoKTsKICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVl
SW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNz
b3JdLm9wID09IFBoaSk7CiAKICAgICAgICAgICAgIGlmIChwaGlOb2RlLnJlZkNvdW50KCkpCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYodmFsdWVJblByZWRlY2Vzc29yKTsKIAotICAgICAg
ICAgICAgaWYgKHBoaU5vZGUuY2hpbGQxID09IE5vTm9kZSkgewotICAgICAgICAgICAgICAgIHBo
aU5vZGUuY2hpbGQxID0gdmFsdWVJblByZWRlY2Vzc29yOworICAgICAgICAgICAgaWYgKHBoaU5v
ZGUuY2hpbGQxKCkgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJl
bi5maXhlZC5jaGlsZDEgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDIgPT0g
Tm9Ob2RlKSB7Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS5jaGlsZDIgPSB2YWx1ZUluUHJlZGVj
ZXNzb3I7CisgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDIoKSA9PSBOb05vZGUpIHsKKyAg
ICAgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IHZhbHVlSW5QcmVk
ZWNlc3NvcjsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMyA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgICAgICBw
aGlOb2RlLmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgIGlmIChwaGlO
b2RlLmNoaWxkMygpID09IE5vTm9kZSkgeworICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRy
ZW4uZml4ZWQuY2hpbGQzID0gdmFsdWVJblByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC0xMDEzLDEzICsxMDYzLDEzIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAgICBpZiAocGhpTm9kZS5y
ZWZDb3VudCgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld1BoaSk7CiAKLSAgICAg
ICAgICAgIG5ld1BoaU5vZGUuY2hpbGQxID0gcGhpTm9kZS5jaGlsZDE7Ci0gICAgICAgICAgICBu
ZXdQaGlOb2RlLmNoaWxkMiA9IHBoaU5vZGUuY2hpbGQyOwotICAgICAgICAgICAgbmV3UGhpTm9k
ZS5jaGlsZDMgPSBwaGlOb2RlLmNoaWxkMzsKLQotICAgICAgICAgICAgcGhpTm9kZS5jaGlsZDEg
PSBuZXdQaGk7Ci0gICAgICAgICAgICBwaGlOb2RlLmNoaWxkMSA9IHZhbHVlSW5QcmVkZWNlc3Nv
cjsKLSAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQzID0gTm9Ob2RlOworICAgICAgICAgICAgbmV3
UGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBwaGlOb2RlLmNoaWxkMSgpOworICAgICAg
ICAgICAgbmV3UGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSBwaGlOb2RlLmNoaWxkMigp
OworICAgICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBwaGlOb2Rl
LmNoaWxkMygpOworCisgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9
IG5ld1BoaTsKKyAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gdmFs
dWVJblByZWRlY2Vzc29yOworICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGls
ZDMgPSBOb05vZGU7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xMDQ3LDkgKzEwOTcsMTAgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVWaXJ0dWFsUmVnaQogICAgIHVuc2lnbmVkIHNp
emVFeGNsdWRpbmdQaGlOb2RlcyA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5lbmQ7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplRXhjbHVkaW5nUGhpTm9kZXM7ICsraSkgewogICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpXTsKKyAgICAgICAgCiAgICAgICAgIGlmICghbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0KKyAgICAgICAgCiAg
ICAgICAgIC8vIEdldExvY2FsIG5vZGVzIGFyZSBlZmZlY3RpdmVseSBwaGkgbm9kZXMgaW4gdGhl
IGdyYXBoLCByZWZlcmVuY2luZwogICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJpb3IgYmxvY2tz
LgogICAgICAgICBpZiAobm9kZS5vcCAhPSBHZXRMb2NhbCkgewpAQCAtMTA1Nyw5ICsxMTA4LDE0
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVmlydHVhbFJlZ2kKICAgICAgICAgICAg
IC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGlu
IHRoaXMKICAgICAgICAgICAgIC8vIG9yZGVyIHNvIHRoYXQgaWYgYSBjaGlsZCBpcyBvbiBpdHMg
bGFzdCB1c2UsIGFuZCBhCiAgICAgICAgICAgICAvLyBWaXJ0dWFsUmVnaXN0ZXIgaXMgZnJlZWQs
IHRoZW4gaXQgbWF5IGJlIHJldXNlZCBmb3Igbm9kZS4KLSAgICAgICAgICAgIHNjb3JlQm9hcmQu
dXNlKG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQy
KTsKLSAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQzKTsKKyAgICAgICAgICAg
IGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJz
dENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCisgICAgICAgICAgICAg
ICAgICAgIHNjb3JlQm9hcmQudXNlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0p
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxk
MigpKTsKKyAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkK
QEAgLTEwNzUsNyArMTEzMSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVmlydHVh
bFJlZ2kKICAgICAvLyAnbV9udW1DYWxsZWVSZWdpc3RlcnMnIGlzIHRoZSBudW1iZXIgb2YgbG9j
YWxzIGFuZCB0ZW1wb3JhcmllcyBhbGxvY2F0ZWQKICAgICAvLyBmb3IgdGhlIGZ1bmN0aW9uIChh
bmQgY2hlY2tlZCBmb3Igb24gZW50cnkpLiBTaW5jZSB3ZSBwZXJmb3JtIGEgbmV3IGFuZAogICAg
IC8vIGRpZmZlcmVudCBhbGxvY2F0aW9uIG9mIHRlbXBvcmFyaWVzLCBtb3JlIHJlZ2lzdGVycyBt
YXkgbm93IGJlIHJlcXVpcmVkLgotICAgIHVuc2lnbmVkIGNhbGxlZVJlZ2lzdGVycyA9IHNjb3Jl
Qm9hcmQuYWxsb2NhdGVkQ291bnQoKSArIG1fcHJlc2VydmVkVmFyczsKKyAgICB1bnNpZ25lZCBj
YWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFsbG9jYXRlZENvdW50KCkgKyBtX3ByZXNlcnZl
ZFZhcnMgKyBtX3BhcmFtZXRlclNsb3RzOwogICAgIGlmICgodW5zaWduZWQpbV9jb2RlQmxvY2st
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJzKQogICAgICAgICBtX2NvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgPSBjYWxsZWVSZWdpc3RlcnM7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNiArNDEsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGRmZ09wTmFtZXNbXSA9IHsKICN1bmRl
ZiBTVFJJTkdJWkVfREZHX09QX0VOVU0KIH07CiAKK2NvbnN0IGNoYXIgKkdyYXBoOjpvcE5hbWUo
Tm9kZVR5cGUgb3ApCit7CisgICAgcmV0dXJuIGRmZ09wTmFtZXNbb3AgJiBOb2RlSWRNYXNrXTsK
K30KKwogdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKQEAgLTc1LDE0ICs4
MCwyNSBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgICAg
IHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICBlbHNlCiAgICAgICAg
IHByaW50ZigiLSIpOwotICAgIHByaW50ZigiPlx0JXMoIiwgZGZnT3BOYW1lc1tvcCAmIE5vZGVJ
ZE1hc2tdKTsKLSAgICBpZiAobm9kZS5jaGlsZDEgIT0gTm9Ob2RlKQotICAgICAgICBwcmludGYo
IkAldSIsIG5vZGUuY2hpbGQxKTsKLSAgICBpZiAobm9kZS5jaGlsZDIgIT0gTm9Ob2RlKQotICAg
ICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDIpOwotICAgIGlmIChub2RlLmNoaWxkMyAh
PSBOb05vZGUpCi0gICAgICAgIHByaW50ZigiLCBAJXUiLCBub2RlLmNoaWxkMyk7Ci0gICAgYm9v
bCBoYXNQcmludGVkID0gbm9kZS5jaGlsZDEgIT0gTm9Ob2RlOworICAgIHByaW50ZigiPlx0JXMo
Iiwgb3BOYW1lKG9wKSk7CisgICAgYm9vbCBoYXNQcmludGVkOworICAgIGlmIChvcCAmIE5vZGVI
YXNWYXJBcmdzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0
Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4o
KTsgY2hpbGRJZHgrKykgeworICAgICAgICAgICAgaWYgKGhhc1ByaW50ZWQpCisgICAgICAgICAg
ICAgICAgcHJpbnRmKCIsICIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGhh
c1ByaW50ZWQgPSB0cnVlOworICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBtX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobm9k
ZS5jaGlsZDEoKSAhPSBOb05vZGUpCisgICAgICAgICAgICBwcmludGYoIkAldSIsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSAhPSBOb05vZGUpCisgICAgICAgICAg
ICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIGlmIChub2RlLmNoaWxk
MygpICE9IE5vTm9kZSkKKyAgICAgICAgICAgIHByaW50ZigiLCBAJXUiLCBub2RlLmNoaWxkMygp
KTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IG5vZGUuY2hpbGQxKCkgIT0gTm9Ob2RlOworICAgIH0K
IAogICAgIGlmIChub2RlLmhhc1Zhck51bWJlcigpKSB7CiAgICAgICAgIHByaW50ZigiJXN2YXIl
dSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUudmFyTnVtYmVyKCkpOwpAQCAtMTM4LDIx
ICsxNTQsMjYgQEAgdm9pZCBHcmFwaDo6cmVmQ2hpbGRyZW4oTm9kZUluZGV4IG9wKQogewogICAg
IE5vZGUmIG5vZGUgPSBhdChvcCk7CiAKLSAgICBpZiAobm9kZS5jaGlsZDEgPT0gTm9Ob2RlKSB7
Ci0gICAgICAgIEFTU0VSVChub2RlLmNoaWxkMiA9PSBOb05vZGUgJiYgbm9kZS5jaGlsZDMgPT0g
Tm9Ob2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICByZWYobm9kZS5jaGlsZDEpOwot
Ci0gICAgaWYgKG5vZGUuY2hpbGQyID09IE5vTm9kZSkgewotICAgICAgICBBU1NFUlQobm9kZS5j
aGlsZDMgPT0gTm9Ob2RlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChub2RlLm9wICYgTm9k
ZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmly
c3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJl
bigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgcmVmKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBOb05vZGUp
IHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMigpID09IE5vTm9kZSAmJiBub2RlLmNo
aWxkMygpID09IE5vTm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgcmVmKG5vZGUuY2hpbGQxKCkpOworCisgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IE5v
Tm9kZSkgeworICAgICAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZWYobm9kZS5jaGlsZDIoKSk7
CisKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICByZWYobm9kZS5jaGlsZDMoKSk7CiAgICAgfQotICAgIHJlZihub2RlLmNo
aWxkMik7Ci0KLSAgICBpZiAobm9kZS5jaGlsZDMgPT0gTm9Ob2RlKQotICAgICAgICByZXR1cm47
Ci0gICAgcmVmKG5vZGUuY2hpbGQzKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gOTAzMTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2MCw3ICsxNjAsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CiAg
ICAgfQogCisjaWZuZGVmIE5ERUJVRworICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcE5hbWUoTm9k
ZVR5cGUpOworI2VuZGlmCisKICAgICBWZWN0b3I8IE93blB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1f
YmxvY2tzOworICAgIFZlY3RvcjxOb2RlSW5kZXgsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwogcHJp
dmF0ZToKIAogICAgIC8vIFdoZW4gYSBub2RlJ3MgcmVmQ291bnQgZ29lcyBmcm9tIDAgdG8gMSwg
aXQgbXVzdCAobG9naWNhbGx5KSByZWN1cnNpdmVseSByZWYgYWxsIG9mIGl0cyBjaGlsZHJlbiwg
YW5kIHZpY2UgdmVyc2EuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAwLDI0ICszMDAsMjkgQEAgR1BSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1ZhbHVlKE5v
ZAogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnVzZUNoaWxkcmVuKE5vZGUmIG5vZGUpCiB7Ci0g
ICAgTm9kZUluZGV4IGNoaWxkMSA9IG5vZGUuY2hpbGQxOwotICAgIGlmIChjaGlsZDEgPT0gTm9O
b2RlKSB7Ci0gICAgICAgIEFTU0VSVChub2RlLmNoaWxkMiA9PSBOb05vZGUgJiYgbm9kZS5jaGls
ZDMgPT0gTm9Ob2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB1c2UoY2hpbGQxKTsK
LQotICAgIE5vZGVJbmRleCBjaGlsZDIgPSBub2RlLmNoaWxkMjsKLSAgICBpZiAoY2hpbGQyID09
IE5vTm9kZSkgewotICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDMgPT0gTm9Ob2RlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICB1c2UoY2hpbGQyKTsKLQotICAgIE5vZGVJbmRleCBjaGls
ZDMgPSBub2RlLmNoaWxkMzsKLSAgICBpZiAoY2hpbGQzID09IE5vTm9kZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIHVzZShjaGlsZDMpOworICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3Mp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBj
aGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElk
eCsrKQorICAgICAgICAgICAgdXNlKG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0pOworICAgIH0gZWxzZSB7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDEgPSBub2RlLmNo
aWxkMSgpOworICAgICAgICBpZiAoY2hpbGQxID09IE5vTm9kZSkgeworICAgICAgICAgICAgQVNT
RVJUKG5vZGUuY2hpbGQyKCkgPT0gTm9Ob2RlICYmIG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB1c2UoY2hpbGQxKTsKKyAg
ICAgICAgCisgICAgICAgIE5vZGVJbmRleCBjaGlsZDIgPSBub2RlLmNoaWxkMigpOworICAgICAg
ICBpZiAoY2hpbGQyID09IE5vTm9kZSkgeworICAgICAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQz
KCkgPT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB1
c2UoY2hpbGQyKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBjaGlsZDMgPSBub2RlLmNo
aWxkMygpOworICAgICAgICBpZiAoY2hpbGQzID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdXNlKGNoaWxkMyk7CisgICAgfQogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0
b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQpA
QCAtNDI1LDYgKzQzMCw4NCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZFB1dEJ5SWQo
R1BSCiAgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoZnVuY3Rpb25DYWxsLCBjaGVja0ltbVRv
Q2FsbCwgY2FsbFRvQ2hlY2ssIGNhbGxUb1N0b3JlLCBjYWxsVG9TbG93Q2FzZSwgY2FsbFRvRG9u
ZSwgc3RhdGljX2Nhc3Q8aW50OF90PihiYXNlR1BSKSwgc3RhdGljX2Nhc3Q8aW50OF90Pih2YWx1
ZUdQUiksIHN0YXRpY19jYXN0PGludDhfdD4oc2NyYXRjaEdQUikpOwogfQogCit2b2lkIEpJVENv
ZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vZGUsIEdQUlJlZyB0YXJnZXRHUFIpCit7Cisg
ICAgLy8gdGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyBlaXRoZXIgdGhlIGZ1
bmN0aW9uIChub3JtYWwgY2FsbCkgb3IgdGhlCisgICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxs
KS4gc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KKyAgICBpbnQgbnVtQXJn
cyA9IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgCisgICAgLy8gYW1vdW50IG9mIHN0dWZm
IChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8gcGxhY2UgYXQg
dGhlCisgICAgLy8gdG9wIG9mIHRoZSBKUyBzdGFjay4KKyAgICBpbnQgY2FsbERhdGFTaXplID0g
MDsKKworICAgIC8vIGZpcnN0IHRoZXJlIGFyZSB0aGUgYXJndW1lbnRzCisgICAgY2FsbERhdGFT
aXplICs9IG51bUFyZ3M7CisgICAgCisgICAgLy8gYW5kIHRoZW4gdGhlcmUgaXMgdGhlIGNhbGwg
ZnJhbWUgaGVhZGVyCisgICAgY2FsbERhdGFTaXplICs9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZTsKKyAgICAKKyAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobnVtQXJncykpKSwgYWRkcmVzc09m
Q2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSk7CisgICAgbV9qaXQuc3RvcmVQ
dHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lzdGVy
RmlsZTo6Q2FsbGVyRnJhbWUpKTsKKyAgICAKKyAgICBmb3IgKGludCBhcmdJZHggPSAwOyBhcmdJ
ZHggPCBudW1BcmdzOyBhcmdJZHgrKykgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhp
cywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSAr
IGFyZ0lkeF0pOworICAgICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOworICAgICAgICAK
KyAgICAgICAgbV9qaXQuc3RvcmVQdHIoYXJnR1BSLCBhZGRyZXNzT2ZDYWxsRGF0YSgtY2FsbERh
dGFTaXplICsgYXJnSWR4KSk7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAobm9kZS5vcCkgewor
ICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIodGFyZ2V0R1BSLCBhZGRyZXNz
T2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxlZSkpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIAorICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgCisgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgSklUQ29t
cGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAgIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoOworICAgIAorICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgIGNhc2UgQ2FsbDoK
KyAgICAgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCB0YXJnZXRHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7CisgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGFyZ2V0R1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0
LnN0b3JlUHRyKHJlc3VsdEdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpTY29w
ZUNoYWluKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBtX2ppdC5hZGRQdHIoSW1tMzIo
bV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVy
KSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgbV9qaXQubm90aWZ5Q2FsbChm
YXN0Q2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7Cisg
ICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAg
ICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1f
aml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rlcikp
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0LmFwcGVuZENhbGxXaXRoRmFzdEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkxpbmtDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUlu
ZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3MpLCBHUFJJ
bmZvOjpyZWdUMSk7CisgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5t
X251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CisgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5m
byk7CisgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQubW92ZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgIAorICAgIG1faml0LmFkZEpTQ2Fs
bChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIHRydWUsIG1faml0LmdyYXBoKClb
bV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworfQorCiAjaWZuZGVmIE5ERUJVRwogc3Rh
dGljIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRTdHJpbmcoRGF0YUZvcm1hdCBmb3JtYXQpCiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3Iu
aAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIyLDYgKzUyMiwxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcg
cmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBz
bG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwogICAgIHZvaWQgY2FjaGVkUHV0
QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKKyAgICAKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyBhZGRyZXNzT2ZDYWxsRGF0YShpbnQgaWR4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCAobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgaWR4KSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGVt
aXRDYWxsKE5vZGUmLCBHUFJSZWcgdGFyZ2V0R1BSKTsKIAogICAgIC8vIENhbGxlZCBvbmNlIGEg
bm9kZSBoYXMgY29tcGxldGVkIGNvZGUgZ2VuZXJhdGlvbiBidXQgcHJpb3IgdG8gc2V0dGluZwog
ICAgIC8vIGl0cyByZXN1bHQsIHRvIGZyZWUgdXAgaXRzIGNoaWxkcmVuLiAoVGhpcyBtdXN0IGhh
cHBlbiBwcmlvciB0byBzZXR0aW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDYgKzI5
NCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICAgICAgICAg
Ly8gSWYgY29tcGlsYXRpb24gdGhyb3VnaCB0aGUgU3BlY3VsYXRpdmVKSVQgZmFpbGVkLCB0aHJv
dyBhd2F5IHRoZSBjb2RlIHdlIGdlbmVyYXRlZC4KICAgICAgICAgbV9jYWxscy5jbGVhcigpOwog
ICAgICAgICBtX3Byb3BlcnR5QWNjZXNzZXMuY2xlYXIoKTsKKyAgICAgICAgbV9qc0NhbGxzLmNs
ZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3VsYXRpdmVQYXRoQmVnaW4pOwogCiAg
ICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3Igbm9DaGVja3M7CkBAIC0zNjksMTMgKzM3MCwx
NSBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAjZW5kaWYKIAog
ICAgIC8vIExpbmsgYWxsIGNhbGxzIG91dCBmcm9tIHRoZSBKSVQgY29kZSB0byB0aGVpciByZXNw
ZWN0aXZlIGZ1bmN0aW9ucy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5z
aXplKCk7ICsraSkKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fY2FsbHNbaV0ubV9jYWxsLCBt
X2NhbGxzW2ldLm1fZnVuY3Rpb24pOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Nh
bGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NhbGxzW2ldLm1fZnVuY3Rpb24udmFs
dWUoKSkKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhtX2NhbGxzW2ldLm1fY2FsbCwgbV9j
YWxsc1tpXS5tX2Z1bmN0aW9uKTsKKyAgICB9CiAKICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRz
Q2FsbFJldHVybkluZGljZXMoKSkgewogICAgICAgICBtX2NvZGVCbG9jay0+Y2FsbFJldHVybklu
ZGV4VmVjdG9yKCkucmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvbkNoZWNrQ291bnQpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgaWYgKG1fY2FsbHNbaV0ubV9leGNlcHRpb25DaGVjay5pc1NldCgpKSB7CisgICAgICAg
ICAgICBpZiAobV9jYWxsc1tpXS5tX2hhbmRsZXNFeGNlcHRpb25zKSB7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgcmV0dXJuQWRkcmVzc09mZnNldCA9IGxpbmtCdWZmZXIucmV0dXJuQWRkcmVz
c09mZnNldChtX2NhbGxzW2ldLm1fY2FsbCk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZXhj
ZXB0aW9uSW5mbyA9IG1fY2FsbHNbaV0ubV9leGNlcHRpb25JbmZvOwogICAgICAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2FsbFJldHVybk9m
ZnNldFRvQnl0ZWNvZGVPZmZzZXQocmV0dXJuQWRkcmVzc09mZnNldCwgZXhjZXB0aW9uSW5mbykp
OwpAQCAtMzk2LDEzICszOTksMjIgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9u
KEpJVENvZAogICAgICAgICBpbmZvLnZhbHVlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1f
dmFsdWVHUFI7CiAgICAgICAgIGluZm8udS51bnNldC5zY3JhdGNoR1BSID0gbV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1fc2NyYXRjaEdQUjsKICAgICB9Ci0KKyAgICAKKyAgICBtX2NvZGVCbG9jay0+
c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fanNDYWxscy5zaXplKCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKKyAgICAgICAgaW5m
by5pc0NhbGwgPSBtX2pzQ2FsbHNbaV0ubV9pc0NhbGw7CisgICAgICAgIGluZm8uY2FsbFJldHVy
bkxvY2F0aW9uID0gQ29kZUxvY2F0aW9uUG9zc2libHlOZWFyQ2FsbChsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKKyAgICAgICAgaW5mby5ob3RQYXRoQmVn
aW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7
CisgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGwobV9qc0NhbGxzW2ldLm1fZmFzdENhbGwpOworICAgIH0KKyAgICAKICAgICAvLyBGSVhNRTog
c3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNoZWNrICYgYXJpdHkgY2hlY2sgb3ZlciB0byBERkdP
cGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1YnMuCiAgICAgbGlua0J1ZmZlci5saW5r
KGNhbGxSZWdpc3RlckZpbGVDaGVjaywgY3RpX3JlZ2lzdGVyX2ZpbGVfY2hlY2spOwogICAgIGxp
bmtCdWZmZXIubGluayhjYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPm1faXNDb25zdHJ1Y3Rv
ciA/IGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2sp
OwogCiAgICAgZW50cnlXaXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihhcml0
eUNoZWNrKTsKLSAgICBlbnRyeSA9IGxpbmtCdWZmZXIuZmluYWxpemVDb2RlKCk7CisgICAgZW50
cnkgPSBKSVRDb2RlKGxpbmtCdWZmZXIuZmluYWxpemVDb2RlKCksIEpJVENvZGU6OkRGR0pJVCk7
CiB9CiAKICNpZiBERkdfSklUX0FTU0VSVApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcg
QEAgc3RydWN0IENhbGxSZWNvcmQgewogICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAg
ICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRp
b25zKGZhbHNlKQogICAgIHsKICAgICB9CiAKQEAgLTc0LDYgKzc1LDE3IEBAIHN0cnVjdCBDYWxs
UmVjb3JkIHsKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogICAgICAgICAsIG1fZXhj
ZXB0aW9uQ2hlY2soZXhjZXB0aW9uQ2hlY2spCiAgICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4
Y2VwdGlvbkluZm8pCisgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0aW9ucyh0cnVlKQorICAgIHsK
KyAgICB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciBmb3IgYSBjYWxsIHRoYXQgbWF5IGNhdXNlIGV4
Y2VwdGlvbnMsIGJ1dCB3aGljaCBhcmUgaGFuZGxlZAorICAgIC8vIHRocm91Z2ggc29tZSBtZWNo
YW5pc20gb3RoZXIgdGhhbiB0aGUgaW4tbGluZSBleGNlcHRpb24gaGFuZGxlci4KKyAgICBDYWxs
UmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBF
eGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8pCisgICAgICAgIDogbV9jYWxsKGNhbGwpCisgICAg
ICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhj
ZXB0aW9uSW5mbykKKyAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCiAgICAgewog
ICAgIH0KIApAQCAtODEsNiArOTMsNyBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgRnVuY3Rp
b25QdHIgbV9mdW5jdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2V4Y2VwdGlvbkNo
ZWNrOwogICAgIEV4Y2VwdGlvbkluZm8gbV9leGNlcHRpb25JbmZvOworICAgIGJvb2wgbV9oYW5k
bGVzRXhjZXB0aW9uczsKIH07CiAKIC8vID09PSBKSVRDb21waWxlciA9PT0KQEAgLTE1OCw2ICsx
NzEsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsK
ICAgICB9CisgICAgCisgICAgLy8gTm90aWZ5IHRoZSBKSVQgb2YgYSBjYWxsIHRoYXQgZG9lcyBu
b3QgcmVxdWlyZSBsaW5raW5nLgorICAgIHZvaWQgbm90aWZ5Q2FsbChDYWxsIGNhbGwsIHVuc2ln
bmVkIGV4Y2VwdGlvbkluZm8pCisgICAgeworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVj
b3JkKGNhbGwsIEZ1bmN0aW9uUHRyKCksIGV4Y2VwdGlvbkluZm8pKTsKKyAgICB9CiAKICAgICAv
LyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVj
ay4KICAgICB2b2lkIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQpAQCAt
MTc0LDYgKzE5MywxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNv
cmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8p
KTsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICB9CisgICAgCisgICAgLy8gQWRk
IGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhIGZhc3QgZXhjZXB0aW9uIGNoZWNrIHRo
YXQgdGVzdHMgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgorICAgIENhbGwgYXBwZW5kQ2Fs
bFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCB1bnNp
Z25lZCBleGNlcHRpb25JbmZvKQorICAgIHsKKyAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBj
YWxsKCk7CisgICAgICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBicmFuY2hUZXN0UHRyKFplcm8s
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJl
Y29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5m
bykpOworICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOworICAgIH0KIAogICAgIC8vIEhlbHBl
ciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCiAgICAgYm9vbCBpc0NvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCkBAIC0yMzcsNiArMjY1LDExIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQoUHJvcGVydHlBY2Nlc3NSZWNv
cmQoZnVuY3Rpb25DYWxsLCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBkZWx0YUNhbGxUb1N0cnVjdENo
ZWNrLCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBkZWx0YUNh
bGxUb0RvbmUsICBiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUikpOwogICAgIH0KKyAgICAK
KyAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFi
ZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8p
CisgICAgeworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2FsbCwg
c2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgZXhjZXB0aW9uSW5mbykpOworICAgIH0K
IAogcHJpdmF0ZToKICAgICAvLyBUaGVzZSBtZXRob2RzIHVzZWQgaW4gbGlua2luZyB0aGUgc3Bl
Y3VsYXRpdmUgJiBub24tc3BlY3VsYXRpdmUgcGF0aHMgdG9nZXRoZXIuCkBAIC0yNTksNyArMjky
LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKIAogICAgIHN0
cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7Ci0gICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3Jk
KEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50OF90IGRlbHRhQ2hlY2tJbW1Ub0Nh
bGwsIGludDhfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrLCBpbnQ4X3QgZGVsdGFDYWxsVG9Mb2Fk
T3JTdG9yZSwgaW50OF90IGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGludDhfdCBkZWx0YUNhbGxUb0Rv
bmUsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BSKQor
ICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50OF90IGRl
bHRhQ2hlY2tJbW1Ub0NhbGwsIGludDhfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrLCBpbnQ4X3Qg
ZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50OF90IGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGludDhf
dCBkZWx0YUNhbGxUb0RvbmUsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhf
dCBzY3JhdGNoR1BSKQogICAgICAgICAgICAgOiBtX2Z1bmN0aW9uQ2FsbChmdW5jdGlvbkNhbGwp
CiAgICAgICAgICAgICAsIG1fZGVsdGFDaGVja0ltbVRvQ2FsbChkZWx0YUNoZWNrSW1tVG9DYWxs
KQogICAgICAgICAgICAgLCBtX2RlbHRhQ2FsbFRvU3RydWN0Q2hlY2soZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjaykKQEAgLTI4Miw4ICszMTUsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgaW50OF90IG1f
dmFsdWVHUFI7CiAgICAgICAgIGludDhfdCBtX3NjcmF0Y2hHUFI7CiAgICAgfTsKKyAgICAKKyAg
ICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKKyAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFzdENh
bGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2Fs
bCwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICAgICAgICAgIDogbV9mYXN0Q2FsbChmYXN0
Q2FsbCkKKyAgICAgICAgICAgICwgbV9zbG93Q2FsbChzbG93Q2FsbCkKKyAgICAgICAgICAgICwg
bV90YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCisgICAgICAgICAgICAsIG1faXNDYWxsKGlz
Q2FsbCkKKyAgICAgICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAg
ICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ2FsbCBtX2Zhc3RDYWxsOworICAg
ICAgICBDYWxsIG1fc2xvd0NhbGw7CisgICAgICAgIERhdGFMYWJlbFB0ciBtX3RhcmdldFRvQ2hl
Y2s7CisgICAgICAgIGJvb2wgbV9pc0NhbGw7CisgICAgICAgIHVuc2lnbmVkIG1fZXhjZXB0aW9u
SW5mbzsKKyAgICB9OwogCiAgICAgVmVjdG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3By
b3BlcnR5QWNjZXNzZXM7CisgICAgVmVjdG9yPEpTQ2FsbFJlY29yZCwgND4gbV9qc0NhbGxzOwog
fTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAgdHlwZWRlZiB1aW50
MzJfdCBFeGNlcHRpb25JbmZvOwogI2RlZmluZSBOb2RlSXNKdW1wICAgICAgICAweDQwMDAwCiAj
ZGVmaW5lIE5vZGVJc0JyYW5jaCAgICAgIDB4ODAwMDAKICNkZWZpbmUgTm9kZUlzVGVybWluYWwg
ICAweDEwMDAwMAorI2RlZmluZSBOb2RlSGFzVmFyQXJncyAgIDB4MjAwMDAwCiAKIC8vIFRoZXNl
IHZhbHVlcyByZWNvcmQgdGhlIHJlc3VsdCB0eXBlIG9mIHRoZSBub2RlIChhcyBjaGVja2VkIGJ5
IE5vZGVSZXN1bHRNYXNrLCBhYm92ZSksIDAgZm9yIG5vIHJlc3VsdC4KICNkZWZpbmUgTm9kZVJl
c3VsdEpTICAgICAgMHgxMDAwCkBAIC0xMzYsNiArMTM3LDkgQEAgdHlwZWRlZiB1aW50MzJfdCBF
eGNlcHRpb25JbmZvOwogICAgIG1hY3JvKENvbXBhcmVFcSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKENvbXBhcmVTdHJpY3RFcSwgTm9kZVJlc3VsdEpTKSBc
CiAgICAgXAorICAgIC8qIENhbGxzLiAqL1wKKyAgICBtYWNybyhDYWxsLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBcCiAgICAgLyogTm9k
ZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQnJlYWtwb2ludCwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRKUykgXApAQCAt
MTczLDQzICsxNzcsNjAgQEAgc3RydWN0IE9wSW5mbyB7CiAvLwogLy8gTm9kZSByZXByZXNlbnRz
IGEgc2luZ2xlIG9wZXJhdGlvbiBpbiB0aGUgZGF0YSBmbG93IGdyYXBoLgogc3RydWN0IE5vZGUg
eworICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07CisKICAgICAvLyBDb25zdHJ1Y3QgYSBu
b2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgogICAgIE5vZGUo
Tm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKICAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2Vw
dGlvbkluZm8pCi0gICAgICAgICwgY2hpbGQxKGNoaWxkMSkKLSAgICAgICAgLCBjaGlsZDIoY2hp
bGQyKQotICAgICAgICAsIGNoaWxkMyhjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAg
eworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIGNoaWxk
cmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQy
ID0gY2hpbGQyOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7CiAgICAg
fQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIGFu
IGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4
Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJ
bmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAg
IDogb3Aob3ApCiAgICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQotICAgICAg
ICAsIGNoaWxkMShjaGlsZDEpCi0gICAgICAgICwgY2hpbGQyKGNoaWxkMikKLSAgICAgICAgLCBj
aGlsZDMoY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGlt
bS5tX3ZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykp
OworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBjaGlsZDE7CisgICAgICAgIGNoaWxk
cmVuLmZpeGVkLmNoaWxkMiA9IGNoaWxkMjsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQz
ID0gY2hpbGQzOwogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAz
IGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KICAgICBOb2RlKE5vZGVUeXBlIG9w
LCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwg
Tm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKICAgICAgICAgLCBleGNl
cHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCi0gICAgICAgICwgY2hpbGQxKGNoaWxkMSkKLSAgICAg
ICAgLCBjaGlsZDIoY2hpbGQyKQotICAgICAgICAsIGNoaWxkMyhjaGlsZDMpCiAgICAgICAgICwg
bV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3Jl
ZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQogICAgICAgICAsIG1f
b3BJbmZvMihpbW0yLm1fdmFsdWUpCiAgICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVI
YXNWYXJBcmdzKSk7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKKyAg
ICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gY2hpbGQyOworICAgICAgICBjaGlsZHJlbi5m
aXhlZC5jaGlsZDMgPSBjaGlsZDM7CisgICAgfQorICAgIAorICAgIC8vIENvbnN0cnVjdCBhIG5v
ZGUgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBjaGlsZHJlbiBhbmQgbm8gaW1tZWRpYXRlIHZh
bHVlcy4KKyAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhj
ZXB0aW9uSW5mbywgdW5zaWduZWQgZmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCisg
ICAgICAgIDogb3Aob3ApCisgICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQor
ICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAg
ICAgICwgbV9yZWZDb3VudCgwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1Zh
ckFyZ3MpOworICAgICAgICBjaGlsZHJlbi52YXJpYWJsZS5maXJzdENoaWxkID0gZmlyc3RDaGls
ZDsKKyAgICAgICAgY2hpbGRyZW4udmFyaWFibGUubnVtQ2hpbGRyZW4gPSBudW1DaGlsZHJlbjsK
ICAgICB9CiAKICAgICBib29sIG11c3RHZW5lcmF0ZSgpCkBAIC0zNTAsMTMgKzM3MSw1MSBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbXVzdEdlbmVyYXRlKCkgPyBtX3Jl
ZkNvdW50IC0gMSA6IG1fcmVmQ291bnQ7CiAgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBjaGls
ZDEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOworICAg
ICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOworICAgIH0KIAorICAgIE5vZGVJbmRl
eCBjaGlsZDIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykp
OworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQyOworICAgIH0KKworICAgIE5v
ZGVJbmRleCBjaGlsZDMoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFy
QXJncykpOworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQzOworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBmaXJzdENoaWxkKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCAm
IE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnZhcmlhYmxlLmZpcnN0
Q2hpbGQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgcmV0dXJuIGNoaWxk
cmVuLnZhcmlhYmxlLm51bUNoaWxkcmVuOworICAgIH0KKyAgICAKICAgICAvLyBUaGlzIGVudW0g
dmFsdWUgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBlIG9wOwog
ICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1
cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KICAgICBFeGNlcHRpb25J
bmZvIGV4Y2VwdGlvbkluZm87CiAgICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNoaWxkcmVu
ICgwIGZvciBubyBjaGlsZCkuCi0gICAgTm9kZUluZGV4IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDM7
CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgTm9kZUluZGV4IGNo
aWxkMSwgY2hpbGQyLCBjaGlsZDM7CisgICAgICAgIH0gZml4ZWQ7CisgICAgICAgIHN0cnVjdCB7
CisgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkOworICAgICAgICAgICAgdW5zaWduZWQg
bnVtQ2hpbGRyZW47CisgICAgICAgIH0gdmFyaWFibGU7CisgICAgfSBjaGlsZHJlbjsKIAogcHJp
dmF0ZToKICAgICAvLyBUaGUgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNwaWxsIGxvY2F0aW9u
KSBhc3NvY2lhdGVkIHdpdGggdGhpcyAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vblNwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjY1LDggKzI2NSw4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6Omtub3du
Q29uc3RhbnRBcmkKIAogdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9wKE5vZGVU
eXBlIG9wLCBOb2RlICZub2RlKQogewotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9k
ZS5jaGlsZDEpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOwor
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1
ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAKICAgICBHUFJSZWcgYXJn
MUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwpAQCAt
Mjc3LDkgKzI3Nyw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcChOb2QK
ICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCi0gICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkpCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLmNoaWxkMSgpKSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOwotICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKQorICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAKICAgICBzd2l0Y2ggKG9wKSB7CkBAIC0zNDYs
OCArMzQ2LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBubwogewog
ICAgIC8vIEZJWE1FOiBzaG91bGQgZG8gc29tZSBwZWVwaG9sZSB0byBmdXNlIGNvbXBhcmUvYnJh
bmNoCiAgICAgICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEp
OwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOworICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3By
KCk7CiAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwogICAgIApAQCAtMzU2LDkgKzM1
Niw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm8KICAgICAKICAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCi0gICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMSkpCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxk
MSgpKSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwot
ICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKQorICAgIGlmICghaXNLbm93bklu
dGVnZXIobm9kZS5jaGlsZDIoKSkpCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpKTsKICAgICAKICAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMUdQUiwg
YXJnMkdQUiwgcmVzdWx0R1BSKTsKQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIE5vblNwZWN1bGF0
aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBD
b252ZXJ0VGhpczogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9k
ZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyB0aGlzR1BSID0gdGhpc1ZhbHVlLmdwcigpOwogICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwogCkBAIC00MjQsNyArNDI0LDcgQEAgdm9pZCBOb25TcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgU2V0TG9jYWw6
IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOworICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
bV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUu
bG9jYWwoKSkpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtNDMzLDIzICs0MzMsMjMgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShTcGVjdWxhdAogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CiAgICAgY2FzZSBC
aXRYb3I6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7Ci0gICAg
ICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBJbnRlZ2Vy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMik7CiAKLSAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlLmNoaWxkMSksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSwgb3Ay
LmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25z
dGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQyKCkpKSB7CisgICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAK
LSAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMiks
IG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9m
SW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwog
CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMik7CisgICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7CisgICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIo
KSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAog
ICAgICAgICAgICAgR1BSUmVnIHJlZzEgPSBvcDEuZ3ByKCk7CkBAIC00NjMsMTEgKzQ2MywxMSBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgY2FzZSBCaXRS
U2hpZnQ6CiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgICAg
ICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgaWYgKGlzSW50MzJDb25z
dGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBvcDEpOwogCi0gICAgICAgICAgICBpbnQgc2hpZnRBbW91bnQgPSB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLmNoaWxkMikgJiAweDFmOworICAgICAgICAgICAgaW50IHNoaWZ0QW1vdW50ID0g
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkgJiAweDFmOwogICAgICAgICAgICAg
Ly8gU2hpZnRzIGJ5IHplcm8gc2hvdWxkIGhhdmUgYmVlbiBvcHRpbWl6ZWQgb3V0IG9mIHRoZSBn
cmFwaCEKICAgICAgICAgICAgIEFTU0VSVChzaGlmdEFtb3VudCk7CiAgICAgICAgICAgICBzaGlm
dE9wKG9wLCBvcDEuZ3ByKCksIHNoaWZ0QW1vdW50LCByZXN1bHQuZ3ByKCkpOwpAQCAtNDc1LDgg
KzQ3NSw4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgc2hpZnQgYW1vdW50IHRv
IGJlIHVzZWQgYXMgdGhlIHJlc3VsdCwgTWFjcm9Bc3NlbWJsZXIgZG9lcyBub3QgcGVybWl0IHRo
aXMuCi0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwot
ICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAg
ICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICAgICAgR1BSUmVnIHJl
ZzEgPSBvcDEuZ3ByKCk7CkBAIC00ODgsNyArNDg4LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShTcGVjdWxhdAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVUludDMyVG9O
dW1iZXI6IHsKLSAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsK
KyAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICBGUFJUZW1wb3JhcnkgYm94ZXIodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgb3AxKTsKICAgICAgICAgCkBAIC01MTMsMjYgKzUxMywyNiBAQCB2b2lkIE5vblNwZWN1
bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBWYWx1ZVRvSW50
MzI6IHsKLSAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKTsKKyAg
ICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOwogCi0gICAgICAg
IGlmIChpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAgIEludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIGlmIChpc0tub3duSW50ZWdl
cihub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwogICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAg
ICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBHZW5lcmF0aW9uSW5mbyYg
Y2hpbGRJbmZvID0gbV9nZW5lcmF0aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxXS52
aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBjaGlsZEluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV0udmlydHVhbFJlZ2lz
dGVyKCldOwogICAgICAgICBpZiAoKGNoaWxkSW5mby5yZWdpc3RlckZvcm1hdCgpIHwgRGF0YUZv
cm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGUpIHsKLSAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgICAgIG51bWJlclRvSW50MzIob3AxLmZwcigpLCByZXN1bHQuZ3ByKCkp
OwogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSk7CiAgICAgICAgIHZhbHVlVG9JbnQzMihvcDEsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CkBAIC01NDAsMTggKzU0
MCwxOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQog
CiAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOiB7Ci0gICAgICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQxKSk7Ci0gICAgICAgIEFTU0VSVCghaXNEb3VibGVDb25zdGFudChub2Rl
LmNoaWxkMSkpOworICAgICAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgp
KSk7CisgICAgICAgIEFTU0VSVCghaXNEb3VibGVDb25zdGFudChub2RlLmNoaWxkMSgpKSk7CiAK
LSAgICAgICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKSkgewotICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgaWYgKGlzS25v
d25OdW1lcmljKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgdmFsdWVUb051bWJlcihvcDEsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CkBAIC01NjAsMTMgKzU2
MCwxMyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAKICAgICBj
YXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgaWYgKGlzSW50MzJD
b25zdGFudChub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAgIGtub3duQ29uc3RhbnRBcml0aE9w
KG9wLCBub2RlLmNoaWxkMiwgbm9kZS5jaGlsZDEsIHRydWUpOworICAgICAgICBpZiAoaXNJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBrbm93bkNvbnN0YW50QXJp
dGhPcChvcCwgbm9kZS5jaGlsZDIoKSwgbm9kZS5jaGlsZDEoKSwgdHJ1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgIGtub3duQ29uc3RhbnRBcml0aE9wKG9wLCBu
b2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIsIGZhbHNlKTsKKyAgICAgICAgaWYgKGlzSW50MzJDb25z
dGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3Ao
b3AsIG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIGZhbHNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTc1LDggKzU3NSw4IEBAIHZvaWQgTm9uU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QXJpdGhTdWI6IHsKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsK
LSAgICAgICAgICAgIGtub3duQ29uc3RhbnRBcml0aE9wKEFyaXRoU3ViLCBub2RlLmNoaWxkMSwg
bm9kZS5jaGlsZDIsIGZhbHNlKTsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNo
aWxkMigpKSkgeworICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3AoQXJpdGhTdWIsIG5v
ZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtNTkwLDggKzU5MCw4IEBAIHZvaWQgTm9uU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0g
ICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgRG91
YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBEb3VibGVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3Ax
KTsKICAgICAgICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKICAgICAgICAgRlBSUmVnIG9w
MkZQUiA9IG9wMi5mcHIoKTsKQEAgLTYwNCw4ICs2MDQsOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBBcml0aE1vZDogewotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGVheCh0aGlzLCBYODZS
ZWdpc3RlcnM6OmVheCk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBlZHgodGhpcywgWDg2UmVnaXN0
ZXJzOjplZHgpOwogCkBAIC02MjMsOSArNjIzLDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShTcGVjdWxhdAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbW9kQnlaZXJvOwogICAgIAotICAgICAgICBpZiAoIWlz
S25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLmNoaWxkMSgpKSkKICAgICAgICAgICAgIGZpcnN0T3BOb3RJbnQgPSBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7Ci0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKQorICAg
ICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQogICAgICAgICAgICAgc2Vj
b25kT3BOb3RJbnQgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcDJH
UFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgCiAgICAgICAgIG1vZEJ5
WmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AyR1BSKTsK
QEAgLTY1NSwxOCArNjU1LDE4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3Bl
Y3VsYXQKICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWll
dF9OYU4oKSkpKSwgWDg2UmVnaXN0ZXJzOjplZHgpOwogICAgICAgICBkb25lLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQx
KSkgeworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7CiAgICAg
ICAgICAgICBmaXJzdE9wTm90SW50LmxpbmsoJm1faml0KTsKICAgICAgICAgCiAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBzZWNvbmRPcE5vdEludDI7CiAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpCisgICAgICAgICAgICBpZiAoIWlz
S25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQogICAgICAgICAgICAgICAgIHNlY29uZE9wTm90
SW50MiA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9wMkdQUiwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Ly8gZmlyc3Qgb3AgaXMgYSBkb3VibGUsIHNlY29uZCBvcCBpcyBhbiBpbnQuCiAgICAgICAgICAg
ICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDJHUFIsIG9wMkZQUik7CiAKLSAgICAgICAg
ICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKSB7CisgICAgICAgICAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CiAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgZ290U2Vjb25kT3AgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBzZWNvbmRPcE5vdEludDIubGluaygmbV9qaXQpOwpAQCAtNjgyLDcgKzY4
Miw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAgICAg
ICAgIGdvdERvdWJsZUFyZ3MgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIH0KICAgICAKLSAgICAg
ICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpIHsKKyAgICAgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgewogICAgICAgICAgICAgc2Vjb25kT3BOb3RJbnQu
bGluaygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgICAgIC8vIHdlIGtub3cgdGhhdCB0aGUg
Zmlyc3Qgb3AgaXMgYW4gaW50LCBhbmQgdGhlIHNlY29uZCBpcyBhIGRvdWJsZQpAQCAtNjkwLDEw
ICs2OTAsMTAgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAg
ICAgICAgICAgdW5ib3hEb3VibGUob3AyR1BSLCBvcDJGUFIpOwogICAgICAgICB9CiAgICAgCi0g
ICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEpKQorICAgICAgICBpZiAoIWlz
S25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQogICAgICAgICAgICAgZ290RG91YmxlQXJncy5s
aW5rKCZtX2ppdCk7CiAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGls
ZDEpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpIHsKKyAgICAgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIo
KSkpIHsKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKFg4NlJlZ2lzdGVyczo6
ZWR4KTsKICAgICAgICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8RlBSSW5mbzo6YXJndW1lbnRGUFIw
LCBGUFJJbmZvOjphcmd1bWVudEZQUjE+KG9wMUZQUiwgb3AyRlBSKTsKICAgICAgICAgICAgIG1f
aml0LmFwcGVuZENhbGwoZm1vZCk7CkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBOb25TcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgTG9naWNhbE5vdDog
ewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEu
Z3ByKCk7CkBAIC03NDksOCArNzQ5LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShTcGVjdWxhdAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
b3JhZ2UodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBjbGVhbkluZGV4KHRoaXMpOwpAQCAt
ODAxLDkgKzgwMSw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQK
IAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMyh0aGlzLCBub2RlLmNoaWxkMyk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzModGhpcywgbm9kZS5jaGls
ZDMoKSk7CiAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICAgICAgR1BS
UmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwogICAgICAgICBHUFJSZWcgYXJnM0dQUiA9IGFyZzMu
Z3ByKCk7CkBAIC04MTcsNyArODE3LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgR2V0QnlJZDogewotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpAQCAtODMxLDggKzgzMSw4IEBAIHZv
aWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNl
IFB1dEJ5SWQ6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtODQ2LDggKzg0
Niw4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAK
ICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUuY2hpbGQyKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OwpAQCAtODcyLDcgKzg3Miw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3Bl
Y3VsYXQKICAgICB9CiAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgZ2xvYmFs
T2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAg
ICAgCkBAIC04OTksNyArODk5LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShT
cGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogCkBAIC05MjgsNyArOTI4LDcgQEAg
dm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogI2VuZGlmCiAKICAgICAg
ICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVHUFIuCi0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCks
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAogICAgICAgICAvLyBHcmFiIHRoZSByZXR1cm4g
YWRkcmVzcy4KQEAgLTk1Miw2ICs5NTIsMTMgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShTcGVjdWxhdAogI2Vsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5k
aWYKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltu
b2RlLmZpcnN0Q2hpbGQoKV0pOworICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdw
cigpOworICAgICAgICBlbWl0Q2FsbChub2RlLCBjYWxsZWVHUFIpOworICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5lcmF0ZSgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICAgICAgICAgIm1vdiAoJXJz
cCksICUiIFNUUklOR0laRShyZWdpc3RlcikgIlxuIiBcCiAgICAgICAgICJqbXAgXyIgU1RSSU5H
SVpFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CisjZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkcyX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uKSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJzaSkKICNkZWZpbmUg
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FSRzRfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQogI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNV9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbikgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByOCkKIApAQCAtMzg3LDYg
KzM4OCwxMTQgQEAgYm9vbCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKgogICAg
IHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVl
IHJldHVyblZhbHVlSGFjaygpOworRW5jb2RlZEpTVmFsdWUgcmV0dXJuVmFsdWVIYWNrV2l0aEV4
ZWNTdGF0ZShFeGVjU3RhdGUqKTsKKworYXNtICgKKyIuZ2xvYmwgXyIgU1RSSU5HSVpFKHJldHVy
blZhbHVlSGFjaykgIlxuIgorIl8iIFNUUklOR0laRShyZXR1cm5WYWx1ZUhhY2spICI6IiAiXG4i
CisgICAgIm1vdiAtNDAoJXIxMyksICVyMTNcbiIKKyAgICAibW92ICVyMTMsICVyZGlcbiIKKyAg
ICAiam1wIF8iIFNUUklOR0laRShyZXR1cm5WYWx1ZUhhY2tXaXRoRXhlY1N0YXRlKSAiXG4iCisp
OworCitFbmNvZGVkSlNWYWx1ZSByZXR1cm5WYWx1ZUhhY2tXaXRoRXhlY1N0YXRlKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPmdsb2JhbERhdGEo
KS5ob3N0Q2FsbFJldHVyblZhbHVlKTsKK30KKworc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxs
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUpCit7CisgICAgRXhlY1N0YXRl
KiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIENhbGxEYXRhIGNhbGxEYXRhOwor
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7Cisg
ICAgCisgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlSlMpOworICAgIAorICAgIGlmIChj
YWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5pbnRl
cnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuZ3JvdyhleGVjQ2FsbGVlLT5yZWdpc3RlcnMoKSkpIHsK
KyAgICAgICAgICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dF
cnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4oKSk7Cisg
ICAgICAgIAorICAgICAgICBnbG9iYWxEYXRhLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CisgICAgICAg
IAorICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZXR1cm5WYWx1ZUhh
Y2spOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsK
KyAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlTm90QUZ1bmN0aW9uRXJy
b3IoZXhlYywgY2FsbGVlKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCogb3BlcmF0aW9uTGlu
a0NhbGxXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKTsKK0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9BUkcyX1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvbkxpbmtDYWxs
KTsKK3ZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgRXhlY1N0
YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIEpTVmFsdWUgY2FsbGVlQXNW
YWx1ZSA9IGV4ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKTsKKyAgICBKU0NlbGwqIGNhbGxlZUFz
RnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbigqZ2xvYmFsRGF0YSwgY2FsbGVlQXNWYWx1ZSk7
CisgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKKyAgICAgICAgcmV0dXJuIGhhbmRsZUhv
c3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUpOworICAgIEpTRnVuY3Rpb24qIGNhbGxl
ZSA9IGFzRnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEV4ZWN1dGFibGVCYXNl
KiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CisgICAgCisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNvZGVQdHI7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOworICAg
IGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICBjb2RlUHRyID0gZXhl
Y3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9yQ2FsbCgpOworICAg
IGVsc2UgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICBK
U09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGV4ZWMs
IGNhbGxlZS0+c2NvcGUoKSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0
aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgICAgIGlmIChl
eGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpID09IHN0YXRpY19jYXN0PHNp
emVfdD4oY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKQorICAgICAgICAgICAgY29kZVB0ciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9y
Q2FsbCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCk7CisgICAgfQor
ICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENh
bGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVuT25j
ZSgpKQorICAgICAgICBjYWxsTGlua0luZm8uc2V0U2VlbigpOworICAgIGVsc2UKKyAgICAgICAg
ZGZnTGlua0NhbGwoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwg
Y29kZVB0cik7CisgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihjYWxsZWUtPnNjb3BlKCkp
OworICAgIHJldHVybiBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisKK3ZvaWQqIG9w
ZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOworICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgSlNWYWx1ZSBjYWxsZWVBc1Zh
bHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOworICAgIEpTQ2VsbCogY2FsbGVlQXNG
dW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKCpnbG9iYWxEYXRhLCBjYWxsZWVBc1ZhbHVlKTsK
KyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKQorICAgICAgICByZXR1cm4gaGFuZGxlSG9z
dENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSk7CisgICAgCisgICAgSlNGdW5jdGlvbiog
ZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CisgICAgaWYgKGV4
ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBleGVjdXRhYmxlLT5n
ZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmFkZHJlc3NGb3JDYWxsKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKKworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgSlNPYmplY3Qq
IGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChleGVjLCBmdW5jdGlv
bi0+c2NvcGUoKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEo
KS5leGNlcHRpb24gPSBlcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGV4ZWND
YWxsZWUtPnNldFNjb3BlQ2hhaW4oZnVuY3Rpb24tPnNjb3BlKCkpOworICAgIHJldHVybiBmdW5j
dGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2soKS5l
eGVjdXRhYmxlQWRkcmVzcygpOworfQorCiBERkdIYW5kbGVyIGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXIoRXhlY1N0YXRlKiBleGVjLCBSZXR1cm5BZGRyZXNzUHRyIGZhdWx0TG9jYXRpb24pCiB7CiAg
ICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDkwMzEzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc2LDYgKzc2LDggQEAgYm9vbCBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUq
LCBFbgogYm9vbCBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwogYm9vbCBvcGVyYXRp
b25Db21wYXJlRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMik7CiBib29sIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AyKTsKK3ZvaWQqIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSopOwordm9pZCogb3Bl
cmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKik7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8g
bG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNo
IGlzCiAvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8g
b25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzUsNiAr
Mzc1LDIxIEBAIHZvaWQgZGZnUmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCAKICAgICAg
ICAgZGZnUmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgYXBwcm9wcmlhdGVQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogfQog
Cit2b2lkIGRmZ0xpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQoreworICAgIENvZGVCbG9jayogY2FsbGVyQ29k
ZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAgCisgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAgaWYg
KCFjYWxsZWVDb2RlQmxvY2sgfHwgc3RhdGljX2Nhc3Q8aW50PihleGVjLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpKSA9PSBjYWxsZWVDb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykgewor
ICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKKyAgICAgICAgY2FsbExp
bmtJbmZvLmNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Z2xvYmFsRGF0YSgpLCBjYWxs
TGlua0luZm8uaG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBjYWxsZWUpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uaG90
UGF0aE90aGVyLCBjb2RlUHRyKTsKKyAgICB9CisgICAgCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKSwgb3Bl
cmF0aW9uVmlydHVhbENhbGwpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHJldmlzaW9u
IDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogdm9pZCBkZmdSZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQg
ZGZnQnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnUmVw
YXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Cit2b2lkIGRm
Z0xpbmtDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rp
b24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDE3ICszNjMs
MTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZQogICAgICAgICBu
b3RUYWtlbiA9IHRtcDsKICAgICB9CiAKLSAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQxKSkgewotICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUu
Y2hpbGQyKTsKKyAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7CisgICAg
ICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
ICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgSklUQ29tcGlsZXI6
OkltbTMyKGltbSksIG9wMi5ncHIoKSksIHRha2VuKTsKLSAgICB9IGVsc2UgaWYgKGlzSW50MzJD
b25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlLmNoaWxkMik7CisgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIo
Y29uZGl0aW9uLCBvcDEuZ3ByKCksIEpJVENvbXBpbGVyOjpJbW0zMihpbW0pKSwgdGFrZW4pOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZGl0
aW9uLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSksIHRha2VuKTsKICAgICB9CiAKQEAgLTM5OCw4ICsz
OTgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVDYWxsCiAgICAgICAg
IG5vdFRha2VuID0gdG1wOwogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsK
KyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1
ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlJlZyBvcDFHUFIgPSBv
cDEuZ3ByKCk7CiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICBmbHVzaFJlZ2lz
dGVycygpOwpAQCAtNDQ4LDIwICs0NDgsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dpdGNoIChtX2pp
dC5ncmFwaCgpLmdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKSkgewogICAgICAgICBjYXNlIFBy
ZWRpY3RJbnQzMjogewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZh
bHVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgUHJlZGljdEFycmF5OiB7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihjZWxsLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxv
Y2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2Nh
bCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTQ3MywyMyArNDczLDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNh
c2UgQml0WG9yOgotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSkgewot
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KTsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgeworICAgICAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwog
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDIpOwogCi0gICAgICAgICAg
ICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpLCBvcDIuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDEoKSksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAg
ICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAg
fSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICB9
IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAgICAgICBiaXRP
cChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpLCBvcDEuZ3ByKCksIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKSksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50
ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwpA
QCAtNTAzLDE3ICs1MDMsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2Ug
Qml0VVJTaGlmdDoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSk7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAotICAgICAgICAg
ICAgc2hpZnRPcChvcCwgb3AxLmdwcigpLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxk
MikgJiAweDFmLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2hpZnRPcChvcCwgb3AxLmdw
cigpLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSAmIDB4MWYsIHJlc3VsdC5n
cHIoKSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cg
c2hpZnQgYW1vdW50IHRvIGJlIHVzZWQgYXMgdGhlIHJlc3VsdCwgTWFjcm9Bc3NlbWJsZXIgZG9l
cyBub3QgcGVybWl0IHRoaXMuCi0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICAgICAgR1BSUmVnIHJlZzEgPSBv
cDEuZ3ByKCk7CkBAIC01MjUsNyArNTI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
IHsKLSAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAg
ICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGUgb3BlcmFu
ZCBpcyBwb3NpdGl2ZS4KQEAgLTUzNyw3ICs1MzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIG1faml0Lm1v
dmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIG9wMS5mb3JtYXQoKSk7CkBAIC01NDUsMTQgKzU0NSwx
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBWYWx1ZVRvTnVtYmVyOiB7Ci0gICAgICAgIGlmIChpc0ludGVnZXIobm9kZS5jaGls
ZDEpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEpOworICAgICAgICBpZiAoaXNJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgb3AxLmZvcm1hdCgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgb3AxKTsKICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5m
cHIoKSk7CiAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4
KTsKQEAgLTU2MSwxMCArNTYxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKIAogICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgY2FzZSBBcml0aEFkZDogewotICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIp
KSB7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSkgewotICAg
ICAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQxKTsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSgpLCBub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMi5n
cHIoKSwgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOwpAQCAtNTczLDkgKzU3Myw5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChp
c0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgICAgICBp
bnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMik7CisgICAgICAg
ICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQyKCkpOwogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNz
ZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7
CkBAIC01ODQsOCArNTg0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLmNoaWxkMik7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICAgICAgR1BSUmVnIGdwcjEgPSBvcDEuZ3ByKCk7
CkBAIC02MDQsOCArNjA0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5m
cHIoKTsKQEAgLTYxNywxMCArNjE3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMikpIHsKLSAgICAg
ICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgICAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAg
ICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxk
Mik7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5v
ZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQyKCkpKSB7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0z
MihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CkBAIC02MjksOCArNjI5LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdw
cigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOwpAQCAtNjM5LDggKzYzOSw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAg
ICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwpAQCAtNjUyLDkgKzY1Miw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFy
aXRoTXVsOiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQx
LCBub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgR1BSUmVnIHJl
ZzEgPSBvcDEuZ3ByKCk7CkBAIC02NzAsOCArNjcwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
ICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICBGUFJS
ZWcgcmVnMSA9IG9wMS5mcHIoKTsKQEAgLTY4NCw4ICs2ODQsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aERpdjogewot
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0g
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwog
ICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAgRlBSUmVn
IHJlZzEgPSBvcDEuZnByKCk7CkBAIC02OTcsOCArNjk3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSBlYXgodGhpcywgWDg2UmVnaXN0ZXJzOjplYXgpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKICAgICAgICAg
R1BSUmVnIG9wMUdwciA9IG9wMS5ncHIoKTsKQEAgLTcyNSw3ICs3MjUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBMb2dpY2Fs
Tm90OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7IC8vIEZJWE1FOiBXZSBjb3VsZCByZXVzZSwg
YnV0IG9uIHNwZWN1bGF0aW9uIGZhaWwgd291bGQgbmVlZCByZWNvdmVyeSB0byByZXN0b3JlIHRh
ZyAoYWtpbiB0byBhZGQpLgogCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCksIHJlc3Vs
dC5ncHIoKSk7CkBAIC03NDYsMjAgKzc0NiwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAvLyBzbyBjYW4gYmUgbm8gaW50ZXJ2ZW5pbmcg
bm9kZXMgdG8gYWxzbyByZWZlcmVuY2UgdGhlIGNvbXBhcmUuIAogICAgICAgICAgICAgQVNTRVJU
KG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogCi0gICAgICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIpKQorICAgICAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkp
CiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFu
Y2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpMZXNzVGhhbik7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlQ2FsbChub2RlLCBicmFuY2hOb2RlSW5kZXgs
IG9wZXJhdGlvbkNvbXBhcmVMZXNzKTsKIAotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKTsK
LSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMik7CisgICAgICAgICAgICB1c2Uobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBtX2Nv
bXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIE5vcm1hbCBjYXNlLCBub3QgZnVzZWQgdG8gYnJhbmNoLgotICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAg
bV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpMZXNzVGhhbiwgb3AxLmdwcigpLCBvcDIuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CkBAIC03NzgsMjAgKzc3OCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAvLyBzbyBjYW4gYmUgbm8gaW50
ZXJ2ZW5pbmcgbm9kZXMgdG8gYWxzbyByZWZlcmVuY2UgdGhlIGNvbXBhcmUuIAogICAgICAgICAg
ICAgQVNTRVJUKG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogCi0gICAgICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIpKQorICAg
ICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5j
aGlsZDIoKSkpCiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChu
b2RlLCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpMZXNzVGhhbk9yRXF1YWwpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUNhbGwobm9kZSwg
YnJhbmNoTm9kZUluZGV4LCBvcGVyYXRpb25Db21wYXJlTGVzc0VxKTsKIAotICAgICAgICAgICAg
dXNlKG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMik7CisgICAgICAg
ICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vcm1hbCBjYXNlLCBub3QgZnVz
ZWQgdG8gYnJhbmNoLgotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEs
IG9wMik7CiAKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpMZXNzVGhhbk9y
RXF1YWwsIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtODEwLDE5ICs4
MTAsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgLy8gc28gY2FuIGJlIG5vIGludGVydmVuaW5nIG5vZGVzIHRvIGFsc28gcmVmZXJlbmNl
IHRoZSBjb21wYXJlLiAKICAgICAgICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291bnQo
KSA9PSAxKTsKIAotICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5j
aGlsZDEsIG5vZGUuY2hpbGQyKSkKKyAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKQogICAgICAgICAgICAgICAgIGNvbXBp
bGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxl
cjo6RXF1YWwpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVw
SG9sZUNhbGwobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBvcGVyYXRpb25Db21wYXJlRXEpOwogCi0g
ICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQy
KTsKKyAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHVzZShub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIG1faml0LmNvbXBhcmUzMihK
SVRDb21waWxlcjo6RXF1YWwsIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpA
QCAtODM0LDggKzgzNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogewotICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgbV9qaXQuY29tcGFy
ZTMyKEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIo
KSk7CkBAIC04NDcsMTggKzg0NywxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBOb2RlSW5k
ZXggYWxpYXMgPSBub2RlLmNoaWxkMzsKKyAgICAgICAgTm9kZUluZGV4IGFsaWFzID0gbm9kZS5j
aGlsZDMoKTsKICAgICAgICAgaWYgKGFsaWFzICE9IE5vTm9kZSkgewogICAgICAgICAgICAgLy8g
RklYTUU6IHJlc3VsdCBzaG91bGQgYmUgYWJsZSB0byByZXVzZSBjaGlsZDEsIGNoaWxkMi4gU2hv
dWxkIGhhdmUgYW4gJ1VudXNlZE9wZXJhbmQnIHR5cGUuCi0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBhbGlhc2VkVmFsdWUodGhpcywgbm9kZS5jaGlsZDMpOworICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYWxpYXNlZFZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhbGlhc2VkVmFsdWUpOwogICAgICAgICAgICAgbV9q
aXQubW92ZShhbGlhc2VkVmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jh
cnkgc3RvcmFnZSh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7
CkBAIC04NzEsNyArODcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQg
cHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCku
CiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJy
YXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgTm9kZSYgYmFzZU5vZGUgPSBtX2pp
dC5ncmFwaCgpW25vZGUuY2hpbGQxXTsKKyAgICAgICAgTm9kZSYgYmFzZU5vZGUgPSBtX2ppdC5n
cmFwaCgpW25vZGUuY2hpbGQxKCldOwogICAgICAgICBpZiAoYmFzZU5vZGUub3AgIT0gR2V0TG9j
YWwgfHwgbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKGJhc2VOb2RlLmxvY2FsKCkpICE9IFBy
ZWRpY3RBcnJheSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwpAQCAtODg4
LDkgKzg4OCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICB9CiAKICAgICBjYXNlIFB1dEJ5VmFsOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIpOwotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMyk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwogCiAgICAgICAgIC8vIE1hcCBiYXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGlu
dG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIuCkBAIC05MDMsNyArOTAz
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAg
IC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29u
dGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElm
IHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lw
IHRoZSBjaGVjay4KLSAgICAgICAgTm9kZSYgYmFzZU5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGUu
Y2hpbGQxXTsKKyAgICAgICAgTm9kZSYgYmFzZU5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGUuY2hp
bGQxKCldOwogICAgICAgICBpZiAoYmFzZU5vZGUub3AgIT0gR2V0TG9jYWwgfHwgbV9qaXQuZ3Jh
cGgoKS5nZXRQcmVkaWN0aW9uKGJhc2VOb2RlLmxvY2FsKCkpICE9IFByZWRpY3RBcnJheSkKICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdpdGhpbkFycmF5Qm91bmRzID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKQEAgLTk0
NSw5ICs5NDUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIpOwotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMyk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOwpAQCAtOTc3LDcgKzk3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgdmFsdWVSZWcg
PSB2YWx1ZS5ncHIoKTsKIAogICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgo
KS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkp
OwpAQCAtMTAxMyw3ICsxMDEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogI2VuZGlmCiAKICAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJu
VmFsdWVHUFIuCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7
CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAogICAg
ICAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRkcmVzcy4KQEAgLTEwMjksNyArMTAyOSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWUu
Z3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKQEAgLTEwNDAs
NyArMTA0MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICB9CiAKICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgYmFzZSk7CiAKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAg
LTEwNTIsOCArMTA1Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5SWQ6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwog
CiAgICAgICAgIGNhY2hlZFB1dEJ5SWQoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIHNjcmF0Y2gu
Z3ByKCksIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QpOwpAQCAtMTA2Myw4ICsx
MDYzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAg
ICAgICAgY2FjaGVkUHV0QnlJZChiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgc2NyYXRjaC5ncHIo
KSwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7CkBAIC0xMDg1LDcgKzEwODUsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAg
Y2FzZSBQdXRHbG9iYWxWYXI6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGdsb2JhbE9iamVjdCh0aGlzKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIApAQCAtMTExMiw2ICsxMTEy
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICNlbHNlCiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCisgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICBjYXNlIENhbGw6CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlz
LCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldKTsKKyAg
ICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAgICAgICAgZW1pdENhbGwo
bm9kZSwgY2FsbGVlR1BSKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKG5vZGUu
aGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDkwMzEzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBDaGVjayBpZiB0
aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgogICAgICAgICBOb2RlJiBsYXN0
Tm9kZSA9IG1faml0LmdyYXBoKClbbGFzdE5vZGVJbmRleF07Ci0gICAgICAgIHJldHVybiBsYXN0
Tm9kZS5vcCA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxID09IG1fY29tcGlsZUluZGV4ID8g
bGFzdE5vZGVJbmRleCA6IE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIGxhc3ROb2RlLm9wID09IEJy
YW5jaCAmJiBsYXN0Tm9kZS5jaGlsZDEoKSA9PSBtX2NvbXBpbGVJbmRleCA/IGxhc3ROb2RlSW5k
ZXggOiBOb05vZGU7CiAgICAgfQogCiAgICAgYm9vbCBpc0ludGVnZXIoTm9kZUluZGV4IG5vZGVJ
bmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFj
ZSBKU0MgIHsKICAgICAvLyBQYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG1vc3QgZnVu
Y3Rpb25zLgogICAgIGNsYXNzIEV4ZWNTdGF0ZSA6IHByaXZhdGUgUmVnaXN0ZXIgewogICAgIHB1
YmxpYzoKKyAgICAgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gdGhp
c1tSZWdpc3RlckZpbGU6OkNhbGxlZV0uanNWYWx1ZSgpOyB9CiAgICAgICAgIEpTT2JqZWN0KiBj
YWxsZWUoKSBjb25zdCB7IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5mdW5jdGlv
bigpOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gdGhp
c1tSZWdpc3RlckZpbGU6OkNvZGVCbG9ja10uUmVnaXN0ZXI6OmNvZGVCbG9jaygpOyB9CiAgICAg
ICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw2IEBAIEpJVDo6SklUKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUIKICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxE
YXRhKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9sYWJlbHMoY29kZUJs
b2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQotICAgICwgbV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPm51bWJl
ck9mQ2FsbExpbmtJbmZvcygpIDogMCkKICAgICAsIG1fYnl0ZWNvZGVPZmZzZXQoKHVuc2lnbmVk
KS0xKQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgLCBtX2p1bXBUYXJnZXRJbmRleCgwKQpA
QCAtMzQ3LDcgKzM0Niw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgfQogICAgIH0KIAotICAgIEFTU0VSVChtX2NhbGxMaW5rSW5mb0luZGV4ID09IG1fY29k
ZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKSk7CisgICAgQVNTRVJUKG1fY2FsbExpbmtJ
bmZvSW5kZXggPT0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwog
CiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0
cyB1c2Ugd2l0aCBBU1NFUlRzLgpAQCAtNDUwLDcgKzQ0OSw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVNsb3dDYXNlcygpCiAgICAgfQogCiAgICAgQVNTRVJUKG1fcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4ID09IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uc2l6ZSgp
KTsKLSAgICBBU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZDYWxsTGlua0luZm9zKCkpOworICAgIEFTU0VSVChtX2NhbGxMaW5rSW5mb0luZGV4ID09IG1f
Y2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKIAogI2lmbmRlZiBOREVC
VUcKICAgICAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNT
RVJUcy4KQEAgLTU3NCwxMCArNTczLDExIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShD
b2RlUHRyKiBmdW4KICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVy
bkxvY2F0aW9uKTsKICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mKG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9baV0uaG90UGF0aEJlZ2luKTsK
ICAgICB9CisgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhtX2NhbGxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgKytpKSB7CiAg
ICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7
CiAgICAgICAgIGluZm8uaXNDYWxsID0gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5m
b1tpXS5pc0NhbGw7Ci0gICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9b
aV0uY2FsbFJldHVybkxvY2F0aW9uKTsKKyAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24g
PSBDb2RlTG9jYXRpb25Qb3NzaWJseU5lYXJDYWxsKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2Nh
dGlvbikpOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2YobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4pOwog
ICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhPdGhlcik7CiAg
ICAgfQpAQCAtNTkyLDcgKzU5Miw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2Rl
UHRyKiBmdW4KICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
ICYmIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrKQogICAgICAgICAqZnVuY3Rpb25FbnRyeUFyaXR5
Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwogCi0gICAgcmV0dXJu
IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOworICAgIHJldHVybiBKSVRDb2RlKHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiB9CiAKIHZvaWQgSklU
OjpsaW5rQ2FsbChKU0Z1bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2Nr
LCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSklUOjpDb2RlUHRyIGNvZGUsIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvLCBpbnQgY2FsbGVyQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKQEAgLTYwOCw3ICs2MDgsNyBAQCB2b2lkIEpJVDo6bGlua0NhbGwoSlNGdW5jdGlv
biogY2FsbGVlLCBDCiAgICAgfQogCiAgICAgLy8gcGF0Y2ggdGhlIGNhbGwgc28gd2UgZG8gbm90
IGNvbnRpbnVlIHRvIHRyeSB0byBsaW5rLgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxM
aW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmly
dHVhbENhbGwoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNh
bGwoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24pLCBnbG9iYWxEYXRhLT5qaXRTdHVi
cy0+Y3RpVmlydHVhbENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpsaW5rQ29uc3RydWN0KEpTRnVu
Y3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9jayogY2Fs
bGVlQ29kZUJsb2NrLCBKSVQ6OkNvZGVQdHIgY29kZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIGludCBjYWxsZXJBcmdDb3VudCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpAQCAtNjI0
LDcgKzYyNCw3IEBAIHZvaWQgSklUOjpsaW5rQ29uc3RydWN0KEpTRnVuY3Rpb24qIGNhbGwKICAg
ICB9CiAKICAgICAvLyBwYXRjaCB0aGUgY2FsbCBzbyB3ZSBkbyBub3QgY29udGludWUgdG8gdHJ5
IHRvIGxpbmsuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24sIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0KCkp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxMaW5r
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1
YWxDb25zdHJ1Y3QoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIs
OSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBhZGRT
bG93Q2FzZShqdW1wVG9TbG93KTsKICAgICBBU1NFUlRfSklUX09GRlNFVChkaWZmZXJlbmNlQmV0
d2VlbihhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBqdW1wVG9TbG93KSwgcGF0Y2hPZmZz
ZXRPcENhbGxDb21wYXJlVG9KdW1wKTsKKyAgICAKKyAgICBBU1NFUlQobV9jYWxsU3RydWN0dXJl
U3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgIG1f
Y2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uYXBwZW5kKFN0cnVjdHVyZVN0dWJDb21w
aWxhdGlvbkluZm8oKSk7CiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25D
aGVjazsKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5pc0NhbGwgPSBvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3Q7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMjAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3Mg
UmVnaXN0ZXJGaWxlOwotCisgICAgCiAgICAgY2xhc3MgSklUQ29kZSB7CiAgICAgICAgIHR5cGVk
ZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7CiAgICAgICAgIHR5cGVkZWYgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7CiAgICAgcHVibGljOgorICAgICAgICBlbnVtIEpJVFR5
cGUgeyBIb3N0Q2FsbFRodW5rLCBCYXNlbGluZUpJVCwgREZHSklUIH07CisKICAgICAgICAgSklU
Q29kZSgpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEpJVENvZGUoY29uc3QgQ29k
ZVJlZiByZWYpCisgICAgICAgIEpJVENvZGUoY29uc3QgQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0
VHlwZSkKICAgICAgICAgICAgIDogbV9yZWYocmVmKQorICAgICAgICAgICAgLCBtX2ppdFR5cGUo
aml0VHlwZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTkzLDEyICs5NiwxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fZXhlY3V0
YWJsZVBvb2wuZ2V0KCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpJVFR5cGUgaml0
VHlwZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2ppdFR5cGU7CisgICAgICAg
IH0KIAogICAgICAgICAvLyBIb3N0IGZ1bmN0aW9ucyBhcmUgYSBiaXQgc3BlY2lhbDsgdGhleSBo
YXZlIGEgbV9jb2RlIHBvaW50ZXIgYnV0IHRoZXkKICAgICAgICAgLy8gZG8gbm90IGluZGl2aWR1
bGx5IHJlZiB0aGUgZXhlY3V0YWJsZSBwb29sIGNvbnRhaW5pbmcgdGhlIHRyYW1wb2xpbmUuCiAg
ICAgICAgIHN0YXRpYyBKSVRDb2RlIEhvc3RGdW5jdGlvbihDb2RlUHRyIGNvZGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBKSVRDb2RlKGNvZGUuZGF0YUxvY2F0aW9uKCksIDAsIDAp
OworICAgICAgICAgICAgcmV0dXJuIEpJVENvZGUoY29kZS5kYXRhTG9jYXRpb24oKSwgMCwgMCwg
SG9zdENhbGxUaHVuayk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNsZWFyKCkKQEAgLTEw
OCwxMiArMTE2LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBKSVRDb2RlKHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+
IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgSklUQ29kZSh2b2lkKiBjb2Rl
LCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgc2l6ZV90IHNpemUs
IEpJVFR5cGUgaml0VHlwZSkKICAgICAgICAgICAgIDogbV9yZWYoY29kZSwgZXhlY3V0YWJsZVBv
b2wsIHNpemUpCisgICAgICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQogICAgICAgICB7CiAg
ICAgICAgIH0KIAogICAgICAgICBDb2RlUmVmIG1fcmVmOworICAgICAgICBKSVRUeXBlIG1faml0
VHlwZTsKICAgICB9OwogCiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxNSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBOYXRp
dmVFeGVjdXRhYmxlOwogICAgIGNsYXNzIFZQdHJIYWNrRXhlY3V0YWJsZTsKKyAgICBuYW1lc3Bh
Y2UgREZHIHsKKyAgICAgICAgY2xhc3MgSklUQ29kZUdlbmVyYXRvcjsKKyAgICB9CiAKICAgICBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSopOwogCiAgICAgY2xhc3MgSlNGdW5jdGlvbiA6IHB1YmxpYyBKU09iamVjdFdp
dGhHbG9iYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOworICAgICAgICBmcmll
bmQgY2xhc3MgREZHOjpKSVRDb2RlR2VuZXJhdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgSlNH
bG9iYWxEYXRhOwogCiAgICAgICAgIHR5cGVkZWYgSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IEJh
c2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
aAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDYgKzIzNCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKICNpZiBFTkFCTEUoSklUKQogICAgICAg
ICBSZXR1cm5BZGRyZXNzUHRyIGV4Y2VwdGlvbkxvY2F0aW9uOworICAgICAgICBKU1ZhbHVlIGhv
c3RDYWxsUmV0dXJuVmFsdWU7CiAjZW5kaWYKIAogICAgICAgICBIYXNoTWFwPE9wYXF1ZUpTQ2xh
c3MqLCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEqPiBvcGFxdWVKU0NsYXNzRGF0YTsK
</data>
<flag name="review"
          id="94077"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99739</attachid>
            <date>2011-07-05 13:51:14 -0700</date>
            <delta_ts>2011-07-05 14:48:33 -0700</delta_ts>
            <desc>the patch (fix review)</desc>
            <filename>call_patch_8.diff</filename>
            <type>text/plain</type>
            <size>96811</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA0MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAK
KzIwMTEtMDctMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBO
ZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgIERG
RyBKSVQgZG9lcyBub3QgaW1wbGVtZW50IG9wX2NhbGwuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg1OAorCisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0
TnVtYmVyT2ZDYWxsTGlua0luZm9zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJP
ZkNhbGxMaW5rSW5mb3MpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0KToKKyAgICAgICAgKiBk
ZmcvREZHQWxpYXNUcmFja2VyLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWxpYXNUcmFja2VyOjps
b29rdXBHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWxpYXNUcmFja2VyOjpyZWNvcmRD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpBbGlhc1RyYWNrZXI6OmVxdWFsSWdub3JpbmdMYXRl
ck51bWVyaWNDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjp0b0ludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6YWRkVG9HcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFk
ZFZhckFyZ0NoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJlZGlj
dEludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVmlydHVhbFJlZ2lzdGVy
cyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6b3BOYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OnJlZkNoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29kZUdlbmVyYXRvcjo6dXNlQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFkZHJlc3NPZkNh
bGxEYXRhKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpub3RpZnlDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRKU0NhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpQcm9wZXJ0eUFjY2Vzc1JlY29yZDo6UHJvcGVydHlBY2Nl
c3NSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpKU0NhbGxSZWNvcmQ6
OkpTQ2FsbFJlY29yZCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
Y2hpbGQzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpmaXJzdENoaWxkKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpudW1DaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR05vblNwZWN1
bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6YmFz
aWNBcml0aE9wKToKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGFy
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5oOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
ZmdMaW5rQ2FsbCk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guaDoKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpkZXRlY3RQZWVwSG9sZUJyYW5j
aCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4
ZWNTdGF0ZTo6Y2FsbGVlQXNWYWx1ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtD
YWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rQ29uc3RydWN0KToKKyAgICAgICAgKiBqaXQv
SklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAg
ICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6SklUQ29kZSk6CisgICAg
ICAgIChKU0M6OkpJVENvZGU6OmppdFR5cGUpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpIb3N0
RnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisKIDIwMTEtMDctMDUgIEdhdmluIEJhcnJhY2xvdWdoICA8
YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb2xsb3dpbmcgbGFz
dCBwYXRjaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMCArNDMsMTggQEAKICNpbmNs
dWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAorI2lmIEVOQUJM
RShERkdfSklUKQorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNlbmRpZgorCiAjZGVmaW5l
IERVTVBfQ09ERV9CTE9DS19TVEFUSVNUSUNTIDAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBF
TkFCTEUoREZHX0pJVCkKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisjZW5kaWYKKwogI2lmICFkZWZp
bmVkKE5ERUJVRykgfHwgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKIAogc3RhdGljIFVTdHJpbmcg
ZXNjYXBlUXVvdGVzKGNvbnN0IFVTdHJpbmcmIHN0cikKQEAgLTE2ODcsNyArMTY5NSwxNCBAQCB2
b2lkIENvZGVCbG9jazo6dW5saW5rQ2FsbHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9jYWxsTGlua0luZm9zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmICghbV9jYWxsTGlua0lu
Zm9zW2ldLmlzTGlua2VkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsobV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9j
YWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1
YWxDYWxsTGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVj
dExpbmsoKSk7CisgICAgICAgIGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6
OkRGR0pJVCkgeworI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxv
Y2F0aW9uKSwgb3BlcmF0aW9uTGlua0NhbGwpOworI2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwobV9jYWxsTGlua0luZm9zW2ldLmNh
bGxSZXR1cm5Mb2NhdGlvbiksIG1fY2FsbExpbmtJbmZvc1tpXS5pc0NhbGwgPyBtX2dsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSA6IG1fZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkpOwogICAgICAgICBtX2NhbGxMaW5rSW5mb3Nb
aV0udW5saW5rKCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGwgY2FsbFJldHVybkxvY2F0aW9uOworICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBjYWxsUmV0dXJuTG9jYXRpb247IC8vIGl0J3MgYSBuZWFyIGNhbGwgaW4gdGhlIG9sZCBK
SVQsIG9yIGEgbm9ybWFsIGNhbGwgaW4gREZHCiAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0ciBob3RQYXRoQmVnaW47CiAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhP
dGhlcjsKICAgICAgICAgSklUV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKQEAgLTM3
OCw4ICszNzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgR2xvYmFsUmVzb2x2ZUluZm8m
IGdsb2JhbFJlc29sdmVJbmZvKGludCBpbmRleCkgeyByZXR1cm4gbV9nbG9iYWxSZXNvbHZlSW5m
b3NbaW5kZXhdOyB9CiAgICAgICAgIGJvb2wgaGFzR2xvYmFsUmVzb2x2ZUluZm9BdEJ5dGVjb2Rl
T2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKIAorICAgICAgICB2b2lkIHNldE51bWJl
ck9mQ2FsbExpbmtJbmZvcyhzaXplX3Qgc2l6ZSkgeyBtX2NhbGxMaW5rSW5mb3MuZ3JvdyhzaXpl
KTsgfQogICAgICAgICBzaXplX3QgbnVtYmVyT2ZDYWxsTGlua0luZm9zKCkgY29uc3QgeyByZXR1
cm4gbV9jYWxsTGlua0luZm9zLnNpemUoKTsgfQotICAgICAgICB2b2lkIGFkZENhbGxMaW5rSW5m
bygpIHsgbV9jYWxsTGlua0luZm9zLmFwcGVuZChDYWxsTGlua0luZm8oKSk7IH0KICAgICAgICAg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8oaW50IGluZGV4KSB7IHJldHVybiBtX2NhbGxMaW5r
SW5mb3NbaW5kZXhdOyB9CiAKICAgICAgICAgdm9pZCBhZGRNZXRob2RDYWxsTGlua0luZm9zKHVu
c2lnbmVkIG4pIHsgbV9tZXRob2RDYWxsTGlua0luZm9zLmdyb3cobik7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjg0LDEw
ICsxNjg0LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAogCiAg
ICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAot
I2lmIEVOQUJMRShKSVQpCi0gICAgbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotI2Vu
ZGlmCi0KICAgICAvLyBFbWl0IGNhbGwuCiAgICAgZW1pdE9wY29kZShvcGNvZGVJRCk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOyAvLyBmdW5jCkBAIC0xODAxLDEw
ICsxNzk3LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdAogCiAg
ICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAot
I2lmIEVOQUJMRShKSVQpCi0gICAgbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotI2Vu
ZGlmCi0KICAgICBlbWl0T3Bjb2RlKG9wX2NvbnN0cnVjdCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGZ1bmMtPmluZGV4KCkpOyAvLyBmdW5jCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGNhbGxBcmd1bWVudHMuY291bnQoKSk7IC8vIGFyZ0NvdW50CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBUaGlzIGNoZWNrIGVuc3Vy
ZXMgdGhlIGFjY2Vzc2VzIGFsaWFzLCBwcm92aWRlZCB0aGF0IHRoZSBzdWJzY3JpcHQgaXMgYW4K
ICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXggKHRoaXMgaXMgZ29vZCBlbm91Z2g7IHRoZSBz
cGVjdWxhdGl2ZSBwYXRoIHdpbGwgb25seSBnZW5lcmF0ZQogICAgICAgICAgICAgLy8gb3B0aW1p
emVkIGFjY2Vzc2VzIHRvIGhhbmRsZSBpbnRlZ2VyIHN1YnNjcmlwdHMpLgotICAgICAgICAgICAg
aWYgKHBvc3NpYmxlQWxpYXMuY2hpbGQxID09IGJhc2UgJiYgZXF1YWxJZ25vcmluZ0xhdGVyTnVt
ZXJpY0NvbnZlcnNpb24ocG9zc2libGVBbGlhcy5jaGlsZDIsIHByb3BlcnR5KSkKKyAgICAgICAg
ICAgIGlmIChwb3NzaWJsZUFsaWFzLmNoaWxkMSgpID09IGJhc2UgJiYgZXF1YWxJZ25vcmluZ0xh
dGVyTnVtZXJpY0NvbnZlcnNpb24ocG9zc2libGVBbGlhcy5jaGlsZDIoKSwgcHJvcGVydHkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWw7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTk0LDYgKzk0LDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChwdXRCeVZhbCwgbV9ncmFwaFtwdXRCeVZhbF0ub3AgPT0gUHV0
QnlJZERpcmVjdCk7CiAgICAgICAgIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsK
ICAgICB9CisgICAgCisgICAgdm9pZCByZWNvcmRDYWxsKE5vZGVJbmRleCBjYWxsKQorICAgIHsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChjYWxsLCBtX2dyYXBoW2NhbGxdLm9wID09IENhbGwpOwor
ICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7CisgICAgfQogCiBwcml2
YXRlOgogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgYXJndW1lbnRzOgpAQCAt
MTA2LDcgKzExMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIE5vZGUmIG5vZGUyID0gbV9ncmFwaFtvcDJdOwot
ICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwgbm9kZTIub3AgPT0g
VmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIuY2hpbGQxOworICAgICAgICByZXR1cm4gKG5v
ZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwgbm9kZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBv
cDEgPT0gbm9kZTIuY2hpbGQxKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIGdyYXBoLCB0byBsb29r
IHVwIHBvdGVudGlhbGx5IGFsaWFzaW5nIG5vZGVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDggQEAgcHVibGljOgogICAgICAgICAsIG1fbnVtQXJndW1lbnRz
KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKGNvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCiAgICAgICAgICwgbV9wcmVzZXJ2ZWRWYXJzKGNv
ZGVCbG9jay0+bV9udW1WYXJzKQorICAgICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkKKyAgICAg
ICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAgICB7CiAgICAgfQogCkBAIC0xMjQsNyArMTI2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExvY2FsKQogICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgICAgICBBU1NFUlQobm9kZS5v
cCA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDE7CisgICAgICAg
ICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNr
IGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9tIHByaW9yIGJsb2NrcywKQEAgLTE1NSw3ICsx
NTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIEFTU0VSVChub2Rl
Lm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMTsKKyAgICAg
ICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwogICAgICAgICB9CiAKICAgICAgICAgTm9kZUlu
ZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpKTsKQEAgLTE5MSw3ICsxOTMsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogCiAgICAgICAgIGlmIChub2RlLm9wID09IFVJbnQz
MlRvTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxOworICAgICAgICAgICAg
cmV0dXJuIG5vZGUuY2hpbGQxKCk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMgY29u
c3RhbnRzIGJveGVkIGFzIEpTVmFsdWVzLgogICAgICAgICBpZiAobm9kZS5vcCA9PSBKU0NvbnN0
YW50KSB7CkBAIC0zODIsNiArMzg0LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBo
LnJlZihyZXN1bHRJbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKICAgICB9Cisg
ICAgCisgICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBv
cCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9n
cmFwaC5zaXplKCk7CisgICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUoTm9kZTo6VmFyQXJnLCBv
cCwgbV9jdXJyZW50SW5kZXgsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251
bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykpOworICAgICAgICAKKyAgICAgICAg
bV9udW1QYXNzZWRWYXJBcmdzID0gMDsKKyAgICAgICAgCisgICAgICAgIGlmIChvcCAmIE5vZGVN
dXN0R2VuZXJhdGUpCisgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CisgICAg
ICAgIHJldHVybiByZXN1bHRJbmRleDsKKyAgICB9CisgICAgdm9pZCBhZGRWYXJBcmdDaGlsZChO
b2RlSW5kZXggY2hpbGQpCisgICAgeworICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4u
YXBwZW5kKGNoaWxkKTsKKyAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CisgICAgfQogCiAg
ICAgdm9pZCBwcmVkaWN0QXJyYXkoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBAIC0zOTYs
MTAgKzQxNSwxMCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhb
bm9kZUluZGV4XTsKIAogICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVmFsdWVUb051bWJlcikK
LSAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFtub2RlUHRyLT5jaGlsZDFdOworICAgICAg
ICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKIAogICAgICAgICBp
ZiAobm9kZVB0ci0+b3AgPT0gVmFsdWVUb0ludDMyKQotICAgICAgICAgICAgbm9kZVB0ciA9ICZt
X2dyYXBoW25vZGVQdHItPmNoaWxkMV07CisgICAgICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhb
bm9kZVB0ci0+Y2hpbGQxKCldOwogCiAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBHZXRMb2Nh
bCkKICAgICAgICAgICAgIG1fZ3JhcGgucHJlZGljdChub2RlUHRyLT5sb2NhbCgpLCBQcmVkaWN0
SW50MzIpOwpAQCAtNDUzLDYgKzQ3MiwxMyBAQCBwcml2YXRlOgogICAgIC8vIHR5cGljYWxseSBl
cXVhbCB0byB0aGUgbnVtYmVyIHZhcnMsIGJ1dCB3ZSBleHBhbmQgdGhpcyB0byBjb3ZlciBhbGwK
ICAgICAvLyB0ZW1wb3JhcmllcyB0aGF0IHBlcnNpc3QgYWNyb3NzIGJsb2NrcyAoZHVlcyB0byA/
OiwgJiYsIHx8LCBldGMpLgogICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFyczsKKyAgICAvLyBU
aGUgbnVtYmVyIG9mIHNsb3RzIChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdl
IG5lZWQgdG8KKyAgICAvLyBwcmVhbGxvY2F0ZSBmb3IgY2FsbHMgZW1hbmF0aW5nIGZyb20gdGhp
cyBmcmFtZS4gVGhpcyBpbmNsdWRlcyB0aGUKKyAgICAvLyBzaXplIG9mIHRoZSBDYWxsRnJhbWUs
IG9ubHkgaWYgdGhpcyBpcyBub3QgYSBsZWFmIGZ1bmN0aW9uLiAgKEkuZS4KKyAgICAvLyB0aGlz
IGlzIDAgaWYgYW5kIG9ubHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBhIGxlYWYuKQorICAgIHVuc2ln
bmVkIG1fcGFyYW1ldGVyU2xvdHM7CisgICAgLy8gVGhlIG51bWJlciBvZiB2YXIgYXJncyBwYXNz
ZWQgdG8gdGhlIG5leHQgdmFyIGFyZyBub2RlLgorICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkVmFy
QXJnczsKIAogICAgIHN0cnVjdCBQaGlTdGFja0VudHJ5IHsKICAgICAgICAgUGhpU3RhY2tFbnRy
eShCYXNpY0Jsb2NrKiBibG9jaywgTm9kZUluZGV4IHBoaSwgdW5zaWduZWQgdmFyTm8pCkBAIC05
NTcsNiArOTgzLDMxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY2FsbDogeworICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAg
ICAgICAgIGludCBhcmdDb3VudCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IGZpcnN0QXJnID0gcmVnaXN0ZXJPZmZzZXQgLSBhcmdD
b3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIGZv
ciAoaW50IGFyZ0lkeCA9IGZpcnN0QXJnOyBhcmdJZHggPCBmaXJzdEFyZyArIGFyZ0NvdW50OyBh
cmdJZHgrKykKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7Cisg
ICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxs
KTsKKyAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkQ2FsbChjYWxsKTsKKyAgICAgICAgICAgIElu
c3RydWN0aW9uKiBwdXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9M
RU5HVEgob3BfY2FsbCk7CisgICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlE
KHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KQorICAgICAg
ICAgICAgICAgIHNldChwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOworICAgICAg
ICAgICAgaWYgKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArICh1bnNpZ25lZClh
cmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMpCisgICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJT
bG90cyA9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50OworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIG9wX2NhbGxfcHV0X3Jlc3VsdDogeworI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICAgICAgICAgIEluc3RydWN0aW9uKiBjYWxsSW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1
Y3Rpb24gLSBPUENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICAgICAgQVNTRVJUKGludGVy
cHJldGVyLT5nZXRPcGNvZGVJRChjYWxsSW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxs
KTsKKyNlbmRpZgorICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF9wdXRfcmVzdWx0KTsK
KyAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBQYXJzZSBmYWls
ZWQhCkBAIC05ODksMjIgKzEwNDAsMjIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1Bo
aVN0YWNrKCkKICAgICAgICAgICAgICAgICB2YXIudmFsdWUgPSB2YWx1ZUluUHJlZGVjZXNzb3I7
CiAgICAgICAgICAgICAgICAgcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNz
b3JCbG9jaywgdmFsdWVJblByZWRlY2Vzc29yLCB2YXJObykpOwogICAgICAgICAgICAgfSBlbHNl
IGlmIChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpCi0gICAgICAg
ICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3Jd
LmNoaWxkMTsKKyAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3Zh
bHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7CiAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2
YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRl
Y2Vzc29yXS5vcCA9PSBQaGkpOwogCiAgICAgICAgICAgICBpZiAocGhpTm9kZS5yZWZDb3VudCgp
KQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAKLSAg
ICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMSA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgICAg
ICBwaGlOb2RlLmNoaWxkMSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgIGlmIChw
aGlOb2RlLmNoaWxkMSgpID09IE5vTm9kZSkgeworICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hp
bGRyZW4uZml4ZWQuY2hpbGQxID0gdmFsdWVJblByZWRlY2Vzc29yOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQy
ID09IE5vTm9kZSkgewotICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQyID0gdmFsdWVJblBy
ZWRlY2Vzc29yOworICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQyKCkgPT0gTm9Ob2RlKSB7
CisgICAgICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSB2YWx1ZUlu
UHJlZGVjZXNzb3I7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDMgPT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAg
ICAgcGhpTm9kZS5jaGlsZDMgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICBpZiAo
cGhpTm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLmNo
aWxkcmVuLmZpeGVkLmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAtMTAxMywxMyArMTA2NCwxMyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgaWYgKHBoaU5v
ZGUucmVmQ291bnQoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkpOwogCi0g
ICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkMSA9IHBoaU5vZGUuY2hpbGQxOwotICAgICAgICAg
ICAgbmV3UGhpTm9kZS5jaGlsZDIgPSBwaGlOb2RlLmNoaWxkMjsKLSAgICAgICAgICAgIG5ld1Bo
aU5vZGUuY2hpbGQzID0gcGhpTm9kZS5jaGlsZDM7Ci0KLSAgICAgICAgICAgIHBoaU5vZGUuY2hp
bGQxID0gbmV3UGhpOwotICAgICAgICAgICAgcGhpTm9kZS5jaGlsZDEgPSB2YWx1ZUluUHJlZGVj
ZXNzb3I7Ci0gICAgICAgICAgICBwaGlOb2RlLmNoaWxkMyA9IE5vTm9kZTsKKyAgICAgICAgICAg
IG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gcGhpTm9kZS5jaGlsZDEoKTsKKyAg
ICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gcGhpTm9kZS5jaGls
ZDIoKTsKKyAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gcGhp
Tm9kZS5jaGlsZDMoKTsKKworICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGls
ZDEgPSBuZXdQaGk7CisgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9
IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQu
Y2hpbGQzID0gTm9Ob2RlOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTA0Nyw5ICsxMDk4LDEw
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVmlydHVhbFJlZ2kKICAgICB1bnNpZ25l
ZCBzaXplRXhjbHVkaW5nUGhpTm9kZXMgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS0+ZW5kOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzOyArK2kpIHsK
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaV07CisgICAgICAgIAogICAgICAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCisgICAgICAg
IAogICAgICAgICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGlu
IHRoZSBncmFwaCwgcmVmZXJlbmNpbmcKICAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9yIGJs
b2Nrcy4KICAgICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKQEAgLTEwNTcsOSArMTEw
OSwxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpCiAgICAgICAg
ICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBkbyBz
byBpbiB0aGlzCiAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24g
aXRzIGxhc3QgdXNlLCBhbmQgYQogICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZy
ZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICBzY29yZUJv
YXJkLnVzZShub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNo
aWxkMik7Ci0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMyk7CisgICAgICAg
ICAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUu
Zmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAg
ICAgICAgICAgICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51
c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5j
aGlsZDIoKSk7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0
KCkpCkBAIC0xMDc1LDcgKzExMzIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZp
cnR1YWxSZWdpCiAgICAgLy8gJ21fbnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9m
IGxvY2FscyBhbmQgdGVtcG9yYXJpZXMgYWxsb2NhdGVkCiAgICAgLy8gZm9yIHRoZSBmdW5jdGlv
biAoYW5kIGNoZWNrZWQgZm9yIG9uIGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQK
ICAgICAvLyBkaWZmZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdpc3Rl
cnMgbWF5IG5vdyBiZSByZXF1aXJlZC4KLSAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBz
Y29yZUJvYXJkLmFsbG9jYXRlZENvdW50KCkgKyBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5zaWdu
ZWQgY2FsbGVlUmVnaXN0ZXJzID0gc2NvcmVCb2FyZC5hbGxvY2F0ZWRDb3VudCgpICsgbV9wcmVz
ZXJ2ZWRWYXJzICsgbV9wYXJhbWV0ZXJTbG90czsKICAgICBpZiAoKHVuc2lnbmVkKW1fY29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyA8IGNhbGxlZVJlZ2lzdGVycykKICAgICAgICAgbV9j
b2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDkwMzEzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDYgKzQxLDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAj
dW5kZWYgU1RSSU5HSVpFX0RGR19PUF9FTlVNCiB9OwogCitjb25zdCBjaGFyICpHcmFwaDo6b3BO
YW1lKE5vZGVUeXBlIG9wKQoreworICAgIHJldHVybiBkZmdPcE5hbWVzW29wICYgTm9kZUlkTWFz
a107Cit9CisKIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC03NSwx
NCArODAsMjUgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAg
ICAgICBwcmludGYoIiV1Iiwgbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgZWxzZQogICAg
ICAgICBwcmludGYoIi0iKTsKLSAgICBwcmludGYoIj5cdCVzKCIsIGRmZ09wTmFtZXNbb3AgJiBO
b2RlSWRNYXNrXSk7Ci0gICAgaWYgKG5vZGUuY2hpbGQxICE9IE5vTm9kZSkKLSAgICAgICAgcHJp
bnRmKCJAJXUiLCBub2RlLmNoaWxkMSk7Ci0gICAgaWYgKG5vZGUuY2hpbGQyICE9IE5vTm9kZSkK
LSAgICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKTsKLSAgICBpZiAobm9kZS5jaGls
ZDMgIT0gTm9Ob2RlKQotICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMpOwotICAg
IGJvb2wgaGFzUHJpbnRlZCA9IG5vZGUuY2hpbGQxICE9IE5vTm9kZTsKKyAgICBwcmludGYoIj5c
dCVzKCIsIG9wTmFtZShvcCkpOworICAgIGJvb2wgaGFzUHJpbnRlZDsKKyAgICBpZiAob3AgJiBO
b2RlSGFzVmFyQXJncykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5m
aXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxk
cmVuKCk7IGNoaWxkSWR4KyspIHsKKyAgICAgICAgICAgIGlmIChoYXNQcmludGVkKQorICAgICAg
ICAgICAgICAgIHByaW50ZigiLCAiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW50ZigiQCV1IiwgbV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KG5vZGUuY2hpbGQxKCkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgIT0gTm9Ob2RlKQorICAgICAg
ICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBpZiAobm9kZS5j
aGlsZDMoKSAhPSBOb05vZGUpCisgICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGls
ZDMoKSk7CisgICAgICAgIGhhc1ByaW50ZWQgPSBub2RlLmNoaWxkMSgpICE9IE5vTm9kZTsKKyAg
ICB9CiAKICAgICBpZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewogICAgICAgICBwcmludGYoIiVz
dmFyJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLnZhck51bWJlcigpKTsKQEAgLTEz
OCwyMSArMTU0LDI2IEBAIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKIHsK
ICAgICBOb2RlJiBub2RlID0gYXQob3ApOwogCi0gICAgaWYgKG5vZGUuY2hpbGQxID09IE5vTm9k
ZSkgewotICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5vZGUuY2hpbGQz
ID09IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmVmKG5vZGUuY2hpbGQx
KTsKLQotICAgIGlmIChub2RlLmNoaWxkMiA9PSBOb05vZGUpIHsKLSAgICAgICAgQVNTRVJUKG5v
ZGUuY2hpbGQzID09IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobm9kZS5vcCAm
IE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2Rl
LmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hp
bGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgIHJlZihtX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gTm9O
b2RlKSB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgJiYgbm9k
ZS5jaGlsZDMoKSA9PSBOb05vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHJlZihub2RlLmNoaWxkMSgpKTsKKworICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSA9
PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5vTm9kZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVmKG5vZGUuY2hpbGQy
KCkpOworCisgICAgICAgIGlmIChub2RlLmNoaWxkMygpID09IE5vTm9kZSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgcmVmKG5vZGUuY2hpbGQzKCkpOwogICAgIH0KLSAgICByZWYobm9k
ZS5jaGlsZDIpOwotCi0gICAgaWYgKG5vZGUuY2hpbGQzID09IE5vTm9kZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIHJlZihub2RlLmNoaWxkMyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDkwMzEz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjAsNyArMTYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25l
OwogICAgIH0KIAorI2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1l
KE5vZGVUeXBlKTsKKyNlbmRpZgorCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4
PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsK
IHByaXZhdGU6CiAKICAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRv
IDEsIGl0IG11c3QgKGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRy
ZW4sIGFuZCB2aWNlIHZlcnNhLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwMCwyNCArMzAwLDI5IEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1
ZShOb2QKIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbihOb2RlJiBub2RlKQog
ewotICAgIE5vZGVJbmRleCBjaGlsZDEgPSBub2RlLmNoaWxkMTsKLSAgICBpZiAoY2hpbGQxID09
IE5vTm9kZSkgewotICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5vZGUu
Y2hpbGQzID09IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdXNlKGNoaWxk
MSk7Ci0KLSAgICBOb2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDI7Ci0gICAgaWYgKGNoaWxk
MiA9PSBOb05vZGUpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQzID09IE5vTm9kZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdXNlKGNoaWxkMik7Ci0KLSAgICBOb2RlSW5kZXgg
Y2hpbGQzID0gbm9kZS5jaGlsZDM7Ci0gICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCi0gICAgICAg
IHJldHVybjsKLSAgICB1c2UoY2hpbGQzKTsKKyAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJB
cmdzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQo
KTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hp
bGRJZHgrKykKKyAgICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdKTsKKyAgICB9IGVsc2UgeworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gbm9k
ZS5jaGlsZDEoKTsKKyAgICAgICAgaWYgKGNoaWxkMSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAg
IEFTU0VSVChub2RlLmNoaWxkMigpID09IE5vTm9kZSAmJiBub2RlLmNoaWxkMygpID09IE5vTm9k
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXNlKGNoaWxkMSk7
CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDIoKTsKKyAg
ICAgICAgaWYgKGNoaWxkMiA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmNo
aWxkMygpID09IE5vTm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgdXNlKGNoaWxkMik7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gbm9k
ZS5jaGlsZDMoKTsKKyAgICAgICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHVzZShjaGlsZDMpOworICAgIH0KIH0KIAogdm9pZCBKSVRDb2RlR2Vu
ZXJhdG9yOjpjYWNoZWRHZXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdl
dCkKQEAgLTQyNSw2ICs0MzAsODQgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNoZWRQdXRC
eUlkKEdQUgogICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKGZ1bmN0aW9uQ2FsbCwgY2hlY2tJ
bW1Ub0NhbGwsIGNhbGxUb0NoZWNrLCBjYWxsVG9TdG9yZSwgY2FsbFRvU2xvd0Nhc2UsIGNhbGxU
b0RvbmUsIHN0YXRpY19jYXN0PGludDhfdD4oYmFzZUdQUiksIHN0YXRpY19jYXN0PGludDhfdD4o
dmFsdWVHUFIpLCBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKTsKIH0KIAordm9pZCBK
SVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBub2RlLCBHUFJSZWcgdGFyZ2V0R1BSKQor
eworICAgIC8vIHRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRo
ZSBmdW5jdGlvbiAobm9ybWFsIGNhbGwpIG9yIHRoZQorICAgIC8vIHJlY2VpdmVyIChtZXRob2Qg
Y2FsbCkuIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCisgICAgaW50IG51
bUFyZ3MgPSBub2RlLm51bUNoaWxkcmVuKCkgLSAxOworICAgIAorICAgIC8vIGFtb3VudCBvZiBz
dHVmZiAoaW4gdW5pdHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvIHBsYWNl
IGF0IHRoZQorICAgIC8vIHRvcCBvZiB0aGUgSlMgc3RhY2suCisgICAgaW50IGNhbGxEYXRhU2l6
ZSA9IDA7CisKKyAgICAvLyBmaXJzdCB0aGVyZSBhcmUgdGhlIGFyZ3VtZW50cworICAgIGNhbGxE
YXRhU2l6ZSArPSBudW1BcmdzOworICAgIAorICAgIC8vIGFuZCB0aGVuIHRoZXJlIGlzIHRoZSBj
YWxsIGZyYW1lIGhlYWRlcgorICAgIGNhbGxEYXRhU2l6ZSArPSBSZWdpc3RlckZpbGU6OkNhbGxG
cmFtZUhlYWRlclNpemU7CisgICAgCisgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bUFyZ3MpKSksIGFkZHJl
c3NPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOworICAgIG1faml0LnN0
b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdp
c3RlckZpbGU6OkNhbGxlckZyYW1lKSk7CisgICAgCisgICAgZm9yIChpbnQgYXJnSWR4ID0gMDsg
YXJnSWR4IDwgbnVtQXJnczsgYXJnSWR4KyspIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
KHRoaXMsIG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSAr
IDEgKyBhcmdJZHhdKTsKKyAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAgICAg
ICAgCisgICAgICAgIG1faml0LnN0b3JlUHRyKGFyZ0dQUiwgYWRkcmVzc09mQ2FsbERhdGEoLWNh
bGxEYXRhU2l6ZSArIGFyZ0lkeCkpOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUub3Ap
IHsKKyAgICBjYXNlIENhbGw6CisgICAgICAgIG1faml0LnN0b3JlUHRyKHRhcmdldEdQUiwgYWRk
cmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKyAgICAKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIAorICAgIEdQUlJlc3VsdCByZXN1
bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aDsKKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICBjYXNlIENh
bGw6CisgICAgICAgIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGFyZ2V0R1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRhcmdldEdQUiwgT0JKRUNUX09G
RlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRHUFIpOworICAgICAgICBt
X2ppdC5zdG9yZVB0cihyZXN1bHRHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6
U2NvcGVDaGFpbikpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgbV9qaXQuYWRkUHRyKElt
bTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdp
c3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIG1faml0Lm5vdGlmeUNh
bGwoZmFzdENhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8p
OworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAg
CisgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIAorICAgIG1faml0LmFkZFB0cihJbW0z
MihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZh
c3RFeGNlcHRpb25DaGVjayhvcGVyYXRpb25MaW5rQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBp
bGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgbV9qaXQubW92ZShJbW0zMihudW1BcmdzKSwg
R1BSSW5mbzo6cmVnVDEpOworICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2so
KS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOworICAgIG1faml0Lm5vdGlmeUNhbGwobV9qaXQuY2FsbChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiksIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlv
bkluZm8pOworICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIAorICAgIG1faml0Lm1v
dmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgCisgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAKKyAgICBtX2ppdC5hZGRK
U0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCB0cnVlLCBtX2ppdC5ncmFw
aCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKK30KKwogI2lmbmRlZiBOREVCVUcK
IHN0YXRpYyBjb25zdCBjaGFyKiBkYXRhRm9ybWF0U3RyaW5nKERhdGFGb3JtYXQgZm9ybWF0KQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMiw2ICs1MjIsMTMgQEAgcHJv
dGVjdGVkOgogICAgIAogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BS
UmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICAgICB2b2lkIGNhY2hl
ZFB1dEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIHNjcmF0Y2hH
UFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgCisgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzc09mQ2FsbERhdGEoaW50IGlkeCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGlkeCkgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBlbWl0Q2FsbChOb2RlJiwgR1BSUmVnIHRhcmdldEdQUik7CiAKICAgICAvLyBDYWxsZWQgb25j
ZSBhIG5vZGUgaGFzIGNvbXBsZXRlZCBjb2RlIGdlbmVyYXRpb24gYnV0IHByaW9yIHRvIHNldHRp
bmcKICAgICAvLyBpdHMgcmVzdWx0LCB0byBmcmVlIHVwIGl0cyBjaGlsZHJlbi4gKFRoaXMgbXVz
dCBoYXBwZW4gcHJpb3IgdG8gc2V0dGluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw2
ICsyOTQsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAgICAg
ICAgIC8vIElmIGNvbXBpbGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxlZCwg
dGhyb3cgYXdheSB0aGUgY29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xlYXIo
KTsKICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc2VzLmNsZWFyKCk7CisgICAgICAgIG1fanNDYWxs
cy5jbGVhcigpOwogICAgICAgICByZXdpbmRUb0xhYmVsKHNwZWN1bGF0aXZlUGF0aEJlZ2luKTsK
IAogICAgICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yIG5vQ2hlY2tzOwpAQCAtMzY5LDEzICsz
NzAsMTUgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogI2VuZGlm
CiAKICAgICAvLyBMaW5rIGFsbCBjYWxscyBvdXQgZnJvbSB0aGUgSklUIGNvZGUgdG8gdGhlaXIg
cmVzcGVjdGl2ZSBmdW5jdGlvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2Fs
bHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGxpbmtCdWZmZXIubGluayhtX2NhbGxzW2ldLm1fY2Fs
bCwgbV9jYWxsc1tpXS5tX2Z1bmN0aW9uKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9jYWxscy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9jYWxsc1tpXS5tX2Z1bmN0aW9u
LnZhbHVlKCkpCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5tX2NhbGws
IG1fY2FsbHNbaV0ubV9mdW5jdGlvbik7CisgICAgfQogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5u
ZWVkc0NhbGxSZXR1cm5JbmRpY2VzKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2stPmNhbGxSZXR1
cm5JbmRleFZlY3RvcigpLnJlc2VydmVDYXBhY2l0eShleGNlcHRpb25DaGVja0NvdW50KTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmIChtX2NhbGxzW2ldLm1fZXhjZXB0aW9uQ2hlY2suaXNTZXQoKSkgeworICAg
ICAgICAgICAgaWYgKG1fY2FsbHNbaV0ubV9oYW5kbGVzRXhjZXB0aW9ucykgewogICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJldHVybkFkZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFk
ZHJlc3NPZmZzZXQobV9jYWxsc1tpXS5tX2NhbGwpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGV4Y2VwdGlvbkluZm8gPSBtX2NhbGxzW2ldLm1fZXhjZXB0aW9uSW5mbzsKICAgICAgICAgICAg
ICAgICBtX2NvZGVCbG9jay0+Y2FsbFJldHVybkluZGV4VmVjdG9yKCkuYXBwZW5kKENhbGxSZXR1
cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0KHJldHVybkFkZHJlc3NPZmZzZXQsIGV4Y2VwdGlvbklu
Zm8pKTsKQEAgLTM5NiwxMyArMzk5LDIyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5j
dGlvbihKSVRDb2QKICAgICAgICAgaW5mby52YWx1ZUdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX3ZhbHVlR1BSOwogICAgICAgICBpbmZvLnUudW5zZXQuc2NyYXRjaEdQUiA9IG1fcHJvcGVy
dHlBY2Nlc3Nlc1tpXS5tX3NjcmF0Y2hHUFI7CiAgICAgfQotCisgICAgCisgICAgbV9jb2RlQmxv
Y2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhtX2pzQ2FsbHMuc2l6ZSgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIENh
bGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CisgICAgICAg
IGluZm8uaXNDYWxsID0gbV9qc0NhbGxzW2ldLm1faXNDYWxsOworICAgICAgICBpbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCkpOworICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0ubV90YXJnZXRUb0NoZWNrKTsKKyAgICAg
ICAgaW5mby5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pz
Q2FsbHNbaV0ubV9mYXN0Q2FsbCk7CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiBzd2l0Y2gg
dGhlIHJlZ2lzdGVyIGZpbGUgY2hlY2sgJiBhcml0eSBjaGVjayBvdmVyIHRvIERGR09wZXJ0YWlv
biBzdHlsZSBjYWxscywgbm90IEpJVCBzdHVicy4KICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbFJl
Z2lzdGVyRmlsZUNoZWNrLCBjdGlfcmVnaXN0ZXJfZmlsZV9jaGVjayk7CiAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3Rp
X29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7CiAKICAg
ICBlbnRyeVdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hlY2sp
OwotICAgIGVudHJ5ID0gbGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBlbnRyeSA9IEpJ
VENvZGUobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKSwgSklUQ29kZTo6REZHSklUKTsKIH0KIAog
I2lmIERGR19KSVRfQVNTRVJUCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCBzdHJ1
Y3QgQ2FsbFJlY29yZCB7CiAgICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
LCBGdW5jdGlvblB0ciBmdW5jdGlvbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAgICAgICAg
LCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1faGFuZGxlc0V4Y2VwdGlvbnMoZmFs
c2UpCiAgICAgewogICAgIH0KIApAQCAtNzQsNiArNzUsMTcgQEAgc3RydWN0IENhbGxSZWNvcmQg
ewogICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICwgbV9leGNlcHRpb25D
aGVjayhleGNlcHRpb25DaGVjaykKICAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9u
SW5mbykKKyAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCisgICAgeworICAgIH0K
KworICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwgdGhhdCBtYXkgY2F1c2UgZXhjZXB0aW9u
cywgYnV0IHdoaWNoIGFyZSBoYW5kbGVkCisgICAgLy8gdGhyb3VnaCBzb21lIG1lY2hhbmlzbSBv
dGhlciB0aGFuIHRoZSBpbi1saW5lIGV4Y2VwdGlvbiBoYW5kbGVyLgorICAgIENhbGxSZWNvcmQo
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEV4Y2VwdGlv
bkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICAgICAgOiBtX2NhbGwoY2FsbCkKKyAgICAgICAgLCBt
X2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQog
CkBAIC04MSw2ICs5Myw3IEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICBGdW5jdGlvblB0ciBt
X2Z1bmN0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fZXhjZXB0aW9uQ2hlY2s7CiAg
ICAgRXhjZXB0aW9uSW5mbyBtX2V4Y2VwdGlvbkluZm87CisgICAgYm9vbCBtX2hhbmRsZXNFeGNl
cHRpb25zOwogfTsKIAogLy8gPT09IEpJVENvbXBpbGVyID09PQpAQCAtMTU4LDYgKzE3MSwxMiBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwogICAgIH0K
KyAgICAKKyAgICAvLyBOb3RpZnkgdGhlIEpJVCBvZiBhIGNhbGwgdGhhdCBkb2VzIG5vdCByZXF1
aXJlIGxpbmtpbmcuCisgICAgdm9pZCBub3RpZnlDYWxsKENhbGwgY2FsbCwgdW5zaWduZWQgZXhj
ZXB0aW9uSW5mbykKKyAgICB7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2Fs
bCwgRnVuY3Rpb25QdHIoKSwgZXhjZXB0aW9uSW5mbykpOworICAgIH0KIAogICAgIC8vIEFkZCBh
IGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAg
IHZvaWQgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCkBAIC0xNzQsNiAr
MTkzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5j
dGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5mbykpOwogICAg
ICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KKyAgICAKKyAgICAvLyBBZGQgYSBjYWxs
IG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEgZmFzdCBleGNlcHRpb24gY2hlY2sgdGhhdCB0ZXN0
cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCisgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEZh
c3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVkIGV4
Y2VwdGlvbkluZm8pCisgICAgeworICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwoKTsK
KyAgICAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGJyYW5jaFRlc3RQdHIoWmVybywgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1
bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBleGNlcHRpb25JbmZvKSk7Cisg
ICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CisgICAgfQogCiAgICAgLy8gSGVscGVyIG1ldGhv
ZHMgdG8gY2hlY2sgbm9kZXMgZm9yIGNvbnN0YW50cy4KICAgICBib29sIGlzQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKQEAgLTIzNyw2ICsyNjUsMTEgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgbV9wcm9wZXJ0eUFjY2Vzc2VzLmFwcGVuZChQcm9wZXJ0eUFjY2Vzc1JlY29yZChmdW5j
dGlvbkNhbGwsIGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2ssIGRl
bHRhQ2FsbFRvTG9hZE9yU3RvcmUsIGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGRlbHRhQ2FsbFRvRG9u
ZSwgIGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKSk7CiAgICAgfQorICAgIAorICAgIHZv
aWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0
YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICB7
CisgICAgICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93Q2Fs
bCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBleGNlcHRpb25JbmZvKSk7CisgICAgfQogCiBwcml2
YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgdXNlZCBpbiBsaW5raW5nIHRoZSBzcGVjdWxhdGl2
ZSAmIG5vbi1zcGVjdWxhdGl2ZSBwYXRocyB0b2dldGhlci4KQEAgLTI1OSw3ICsyOTIsNyBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogCiAgICAgc3RydWN0IFBy
b3BlcnR5QWNjZXNzUmVjb3JkIHsKLSAgICAgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoSklUQ29t
cGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnQ4X3QgZGVsdGFDaGVja0ltbVRvQ2FsbCwgaW50
OF90IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2ssIGludDhfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3Jl
LCBpbnQ4X3QgZGVsdGFDYWxsVG9TbG93Q2FzZSwgaW50OF90IGRlbHRhQ2FsbFRvRG9uZSwgaW50
OF90IGJhc2VHUFIsIGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIpCisgICAgICAg
IFByb3BlcnR5QWNjZXNzUmVjb3JkKENhbGwgZnVuY3Rpb25DYWxsLCBpbnQ4X3QgZGVsdGFDaGVj
a0ltbVRvQ2FsbCwgaW50OF90IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2ssIGludDhfdCBkZWx0YUNh
bGxUb0xvYWRPclN0b3JlLCBpbnQ4X3QgZGVsdGFDYWxsVG9TbG93Q2FzZSwgaW50OF90IGRlbHRh
Q2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIsIGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0
Y2hHUFIpCiAgICAgICAgICAgICA6IG1fZnVuY3Rpb25DYWxsKGZ1bmN0aW9uQ2FsbCkKICAgICAg
ICAgICAgICwgbV9kZWx0YUNoZWNrSW1tVG9DYWxsKGRlbHRhQ2hlY2tJbW1Ub0NhbGwpCiAgICAg
ICAgICAgICAsIG1fZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayhkZWx0YUNhbGxUb1N0cnVjdENoZWNr
KQpAQCAtMjgyLDggKzMxNSwyNiBAQCBwcml2YXRlOgogICAgICAgICBpbnQ4X3QgbV92YWx1ZUdQ
UjsKICAgICAgICAgaW50OF90IG1fc2NyYXRjaEdQUjsKICAgICB9OworICAgIAorICAgIHN0cnVj
dCBKU0NhbGxSZWNvcmQgeworICAgICAgICBKU0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2Fs
bCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNp
Z25lZCBleGNlcHRpb25JbmZvKQorICAgICAgICAgICAgOiBtX2Zhc3RDYWxsKGZhc3RDYWxsKQor
ICAgICAgICAgICAgLCBtX3Nsb3dDYWxsKHNsb3dDYWxsKQorICAgICAgICAgICAgLCBtX3Rhcmdl
dFRvQ2hlY2sodGFyZ2V0VG9DaGVjaykKKyAgICAgICAgICAgICwgbV9pc0NhbGwoaXNDYWxsKQor
ICAgICAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDYWxsIG1fZmFzdENhbGw7CisgICAgICAgIENh
bGwgbV9zbG93Q2FsbDsKKyAgICAgICAgRGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9DaGVjazsKKyAg
ICAgICAgYm9vbCBtX2lzQ2FsbDsKKyAgICAgICAgdW5zaWduZWQgbV9leGNlcHRpb25JbmZvOwor
ICAgIH07CiAKICAgICBWZWN0b3I8UHJvcGVydHlBY2Nlc3NSZWNvcmQsIDQ+IG1fcHJvcGVydHlB
Y2Nlc3NlczsKKyAgICBWZWN0b3I8SlNDYWxsUmVjb3JkLCA0PiBtX2pzQ2FsbHM7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gOTAzMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCB0eXBlZGVmIHVpbnQzMl90IEV4
Y2VwdGlvbkluZm87CiAjZGVmaW5lIE5vZGVJc0p1bXAgICAgICAgIDB4NDAwMDAKICNkZWZpbmUg
Tm9kZUlzQnJhbmNoICAgICAgMHg4MDAwMAogI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgIDB4MTAw
MDAwCisjZGVmaW5lIE5vZGVIYXNWYXJBcmdzICAgMHgyMDAwMDAKIAogLy8gVGhlc2UgdmFsdWVz
IHJlY29yZCB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5vZGUgKGFzIGNoZWNrZWQgYnkgTm9kZVJl
c3VsdE1hc2ssIGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0LgogI2RlZmluZSBOb2RlUmVzdWx0SlMg
ICAgICAweDEwMDAKQEAgLTEzNiw2ICsxMzcsOSBAQCB0eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlv
bkluZm87CiAgICAgbWFjcm8oQ29tcGFyZUVxLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oQ29tcGFyZVN0cmljdEVxLCBOb2RlUmVzdWx0SlMpIFwKICAgICBc
CisgICAgLyogQ2FsbHMuICovXAorICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIFwKICAgICAvKiBOb2RlcyBmb3Ig
bWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCcmVha3BvaW50LCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEpTKSBcCkBAIC0xNzMsNDMg
KzE3Nyw2MCBAQCBzdHJ1Y3QgT3BJbmZvIHsKIC8vCiAvLyBOb2RlIHJlcHJlc2VudHMgYSBzaW5n
bGUgb3BlcmF0aW9uIGluIHRoZSBkYXRhIGZsb3cgZ3JhcGguCiBzdHJ1Y3QgTm9kZSB7CisgICAg
ZW51bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsKKwogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0
aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlw
ZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBOb2RlSW5kZXggY2hpbGQxID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2Rl
KQogICAgICAgICA6IG9wKG9wKQogICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5m
bykKLSAgICAgICAgLCBjaGlsZDEoY2hpbGQxKQotICAgICAgICAsIGNoaWxkMihjaGlsZDIpCi0g
ICAgICAgICwgY2hpbGQzKGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICB7CisgICAg
ICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgY2hpbGRyZW4uZml4
ZWQuY2hpbGQxID0gY2hpbGQxOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDIgPSBjaGls
ZDI7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IGNoaWxkMzsKICAgICB9CiAKICAg
ICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgYW4gaW1tZWRp
YXRlIHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9u
SW5mbywgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNo
aWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChv
cCkKICAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCi0gICAgICAgICwgY2hp
bGQxKGNoaWxkMSkKLSAgICAgICAgLCBjaGlsZDIoY2hpbGQyKQotICAgICAgICAsIGNoaWxkMyhj
aGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tLm1fdmFs
dWUpCiAgICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAg
ICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKKyAgICAgICAgY2hpbGRyZW4uZml4
ZWQuY2hpbGQyID0gY2hpbGQyOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBjaGls
ZDM7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRy
ZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2Vw
dGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5k
ZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXgg
Y2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQogICAgICAgICAsIGV4Y2VwdGlvbklu
Zm8oZXhjZXB0aW9uSW5mbykKLSAgICAgICAgLCBjaGlsZDEoY2hpbGQxKQotICAgICAgICAsIGNo
aWxkMihjaGlsZDIpCi0gICAgICAgICwgY2hpbGQzKGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1
YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQo
MCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCiAgICAgICAgICwgbV9vcEluZm8y
KGltbTIubV92YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFy
Z3MpKTsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQxOworICAgICAgICBj
aGlsZHJlbi5maXhlZC5jaGlsZDIgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNo
aWxkMyA9IGNoaWxkMzsKKyAgICB9CisgICAgCisgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRo
IGEgdmFyaWFibGUgbnVtYmVyIG9mIGNoaWxkcmVuIGFuZCBubyBpbW1lZGlhdGUgdmFsdWVzLgor
ICAgIE5vZGUoVmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25J
bmZvLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKKyAgICAgICAg
OiBvcChvcCkKKyAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAg
ICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgLCBt
X3JlZkNvdW50KDApCisgICAgeworICAgICAgICBBU1NFUlQob3AgJiBOb2RlSGFzVmFyQXJncyk7
CisgICAgICAgIGNoaWxkcmVuLnZhcmlhYmxlLmZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkOworICAg
ICAgICBjaGlsZHJlbi52YXJpYWJsZS5udW1DaGlsZHJlbiA9IG51bUNoaWxkcmVuOwogICAgIH0K
IAogICAgIGJvb2wgbXVzdEdlbmVyYXRlKCkKQEAgLTM1MCwxMyArMzcxLDUxIEBAIHN0cnVjdCBO
b2RlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBtdXN0R2VuZXJhdGUoKSA/IG1fcmVmQ291bnQg
LSAxIDogbV9yZWZDb3VudDsKICAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGNoaWxkMSgpCisg
ICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIHJl
dHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDE7CisgICAgfQogCisgICAgTm9kZUluZGV4IGNoaWxk
MigpCisgICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAg
ICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDI7CisgICAgfQorCisgICAgTm9kZUluZGV4
IGNoaWxkMygpCisgICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7
CisgICAgICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDM7CisgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIGZpcnN0Q2hpbGQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhh
c1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gY2hpbGRyZW4udmFyaWFibGUuZmlyc3RDaGlsZDsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gY2hpbGRyZW4udmFy
aWFibGUubnVtQ2hpbGRyZW47CisgICAgfQorICAgIAogICAgIC8vIFRoaXMgZW51bSB2YWx1ZSBk
ZXNjcmliZXMgdGhlIHR5cGUgb2YgdGhlIG5vZGUuCiAgICAgTm9kZVR5cGUgb3A7CiAgICAgLy8g
VXNlZCB0byBsb29rIHVwIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbiAoY3VycmVudGx5
IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgogICAgIEV4Y2VwdGlvbkluZm8gZXhj
ZXB0aW9uSW5mbzsKICAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRyZW4gKDAgZm9y
IG5vIGNoaWxkKS4KLSAgICBOb2RlSW5kZXggY2hpbGQxLCBjaGlsZDIsIGNoaWxkMzsKKyAgICB1
bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBOb2RlSW5kZXggY2hpbGQxLCBj
aGlsZDIsIGNoaWxkMzsKKyAgICAgICAgfSBmaXhlZDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQ7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1DaGls
ZHJlbjsKKyAgICAgICAgfSB2YXJpYWJsZTsKKyAgICB9IGNoaWxkcmVuOwogCiBwcml2YXRlOgog
ICAgIC8vIFRoZSB2aXJ0dWFsIHJlZ2lzdGVyIG51bWJlciAoc3BpbGwgbG9jYXRpb24pIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9u
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjUsOCArMjY1LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6a25vd25Db25zdGFu
dEFyaQogCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpiYXNpY0FyaXRoT3AoTm9kZVR5cGUgb3As
IE5vZGUgJm5vZGUpCiB7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxk
MSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIAogICAgIEdQUlJlZyBhcmcxR1BSID0g
YXJnMS5ncHIoKTsKICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CkBAIC0yNzcsOSAr
Mjc3LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9wKE5vZAogICAgIAog
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKLSAgICBpZiAoIWlzS25v
d25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hp
bGQxKCkpKQogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
Ci0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpCisgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMigpKSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOwogICAgIAogICAgIHN3aXRjaCAob3ApIHsKQEAgLTM0Niw4ICszNDYs
OCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vCiB7CiAgICAgLy8g
RklYTUU6IHNob3VsZCBkbyBzb21lIHBlZXBob2xlIHRvIGZ1c2UgY29tcGFyZS9icmFuY2gKICAg
ICAgICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAg
SlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAg
ICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAgICAgCkBAIC0zNTYsOSArMzU2LDkgQEAg
dm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBubwogICAgIAogICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKLSAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQxKSkKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQog
ICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpC
ZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLmNoaWxkMigpKSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOwogICAgIAogICAgIG1faml0LmNvbXBhcmUzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BS
LCByZXN1bHRHUFIpOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoU3BlY3VsYXQKIAogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIENvbnZlcnRU
aGlzOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxk
MSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgR1BSUmVnIHRoaXNHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CiAKQEAgLTQyNCw3ICs0MjQsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBtX2ppdC5z
dG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgp
KSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBA
IC00MzMsMjMgKzQzMywyMyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1
bGF0CiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNlIEJpdFhvcjoK
LSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAg
IEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AyKTsKIAotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQxKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAg
Yml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpLCBvcDIuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIo
KSkpIHsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAotICAgICAg
ICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSwgb3AxLmdw
cigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQyKCkpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEpOwotICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KTsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAg
ICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKQEAgLTQ2MywxMSArNDYzLDExIEBAIHZvaWQg
Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICBjYXNlIEJpdFJTaGlmdDoK
ICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgIGlmIChp
c0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAKLSAgICAgICAgICAgIGludCBzaGlmdEFtb3VudCA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQyKSAmIDB4MWY7CisgICAgICAgICAgICBpbnQgc2hpZnRBbW91bnQgPSB2YWx1ZU9m
SW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSAmIDB4MWY7CiAgICAgICAgICAgICAvLyBTaGlm
dHMgYnkgemVybyBzaG91bGQgaGF2ZSBiZWVuIG9wdGltaXplZCBvdXQgb2YgdGhlIGdyYXBoIQog
ICAgICAgICAgICAgQVNTRVJUKHNoaWZ0QW1vdW50KTsKICAgICAgICAgICAgIHNoaWZ0T3Aob3As
IG9wMS5ncHIoKSwgc2hpZnRBbW91bnQsIHJlc3VsdC5ncHIoKSk7CkBAIC00NzUsOCArNDc1LDgg
QEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgICAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIERvIG5vdCBhbGxvdyBzaGlmdCBhbW91bnQgdG8gYmUgdXNl
ZCBhcyB0aGUgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlciBkb2VzIG5vdCBwZXJtaXQgdGhpcy4KLSAg
ICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAg
ICAgICBJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICAgICAg
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgSW50
ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9w
MS5ncHIoKTsKQEAgLTQ4OCw3ICs0ODgsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKFNwZWN1bGF0CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBVSW50MzJUb051bWJlcjog
ewotICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAg
ICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEZQUlRl
bXBvcmFyeSBib3hlcih0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwogICAgICAgICAKQEAgLTUxMywyNiArNTEzLDI2IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewot
ICAgICAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpOworICAgICAgICBB
U1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7CiAKLSAgICAgICAgaWYgKGlz
S25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkgewotICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgaWYgKGlzS25vd25JbnRlZ2VyKG5vZGUu
Y2hpbGQxKCkpKSB7CisgICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBjaGlsZElu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZS5jaGlsZDFdLnZpcnR1YWxS
ZWdpc3RlcigpXTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGNoaWxkSW5mbyA9IG1fZ2VuZXJh
dGlvbkluZm9bbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXS52aXJ0dWFsUmVnaXN0ZXIoKV07
CiAgICAgICAgIGlmICgoY2hpbGRJbmZvLnJlZ2lzdGVyRm9ybWF0KCkgfCBEYXRhRm9ybWF0SlMp
ID09IERhdGFGb3JtYXRKU0RvdWJsZSkgewotICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
ICAgICAgICAgICAgbnVtYmVyVG9JbnQzMihvcDEuZnByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAg
ICAgICAgdmFsdWVUb0ludDMyKG9wMSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKQEAgLTU0MCwxOCArNTQwLDE4IEBA
IHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBj
YXNlIFZhbHVlVG9OdW1iZXI6IHsKLSAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDEpKTsKLSAgICAgICAgQVNTRVJUKCFpc0RvdWJsZUNvbnN0YW50KG5vZGUuY2hpbGQx
KSk7CisgICAgICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKKyAg
ICAgICAgQVNTRVJUKCFpc0RvdWJsZUNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKIAotICAgICAg
ICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBpZiAoaXNLbm93bk51bWVy
aWMobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwog
ICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
ICAgICB2YWx1ZVRvTnVtYmVyKG9wMSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKQEAgLTU2MCwxMyArNTYwLDEzIEBA
IHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKIAogICAgIGNhc2UgVmFs
dWVBZGQ6CiAgICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50
KG5vZGUuY2hpbGQxKSkgewotICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3Aob3AsIG5v
ZGUuY2hpbGQyLCBub2RlLmNoaWxkMSwgdHJ1ZSk7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIGtub3duQ29uc3RhbnRBcml0aE9wKG9w
LCBub2RlLmNoaWxkMigpLCBub2RlLmNoaWxkMSgpLCB0cnVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQyKSkgewotICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3Aob3AsIG5vZGUuY2hp
bGQxLCBub2RlLmNoaWxkMiwgZmFsc2UpOworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBrbm93bkNvbnN0YW50QXJpdGhPcChvcCwgbm9k
ZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC01NzUsOCArNTc1LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aFN1
YjogewotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAg
ICAgICAga25vd25Db25zdGFudEFyaXRoT3AoQXJpdGhTdWIsIG5vZGUuY2hpbGQxLCBub2RlLmNo
aWxkMiwgZmFsc2UpOworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkp
KSB7CisgICAgICAgICAgICBrbm93bkNvbnN0YW50QXJpdGhPcChBcml0aFN1Yiwgbm9kZS5jaGls
ZDEoKSwgbm9kZS5jaGlsZDIoKSwgZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC01OTAsOCArNTkwLDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAg
RG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBEb3VibGVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAg
ICAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZwcigpOwogICAgICAgICBGUFJSZWcgb3AyRlBSID0g
b3AyLmZwcigpOwpAQCAtNjA0LDggKzYwNCw4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVy
czo6ZWF4KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGVkeCh0aGlzLCBYODZSZWdpc3RlcnM6OmVk
eCk7CiAKQEAgLTYyMyw5ICs2MjMsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxl
KFNwZWN1bGF0CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOwogICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBtb2RCeVplcm87CiAgICAgCi0gICAgICAgIGlmICghaXNLbm93bklu
dGVnZXIobm9kZS5jaGlsZDEpKQorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hp
bGQxKCkpKQogICAgICAgICAgICAgZmlyc3RPcE5vdEludCA9IG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpCisgICAgICAgIGlm
ICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpCiAgICAgICAgICAgICBzZWNvbmRPcE5v
dEludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9wMkdQUiwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAKICAgICAgICAgbW9kQnlaZXJvID0g
bV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDJHUFIpOwpAQCAtNjU1
LDE4ICs2NTUsMTggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAog
ICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
KSkpLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CiAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEpKSB7Cisg
ICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKICAgICAgICAgICAg
IGZpcnN0T3BOb3RJbnQubGluaygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIHNlY29uZE9wTm90SW50MjsKICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkKKyAgICAgICAgICAgIGlmICghaXNLbm93bklu
dGVnZXIobm9kZS5jaGlsZDIoKSkpCiAgICAgICAgICAgICAgICAgc2Vjb25kT3BOb3RJbnQyID0g
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3AyR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBmaXJz
dCBvcCBpcyBhIGRvdWJsZSwgc2Vjb25kIG9wIGlzIGFuIGludC4KICAgICAgICAgICAgIG1faml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMkdQUiwgb3AyRlBSKTsKIAotICAgICAgICAgICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpIHsKKyAgICAgICAgICAgIGlmICghaXNLbm93
bkludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBnb3RTZWNvbmRPcCA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIHNlY29uZE9wTm90SW50Mi5saW5rKCZtX2ppdCk7CkBAIC02ODIsNyArNjgyLDcgQEAg
dm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgICAgICAgICAgZ290
RG91YmxlQXJncyA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkgeworICAgICAgICBpZiAoIWlzS25vd25JbnRl
Z2VyKG5vZGUuY2hpbGQyKCkpKSB7CiAgICAgICAgICAgICBzZWNvbmRPcE5vdEludC5saW5rKCZt
X2ppdCk7CiAgICAgICAgIAogICAgICAgICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSBmaXJzdCBv
cCBpcyBhbiBpbnQsIGFuZCB0aGUgc2Vjb25kIGlzIGEgZG91YmxlCkBAIC02OTAsMTAgKzY5MCwx
MCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgICAg
ICB1bmJveERvdWJsZShvcDJHUFIsIG9wMkZQUik7CiAgICAgICAgIH0KICAgICAKLSAgICAgICAg
aWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkpCisgICAgICAgIGlmICghaXNLbm93bklu
dGVnZXIobm9kZS5jaGlsZDEoKSkpCiAgICAgICAgICAgICBnb3REb3VibGVBcmdzLmxpbmsoJm1f
aml0KTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkgfHwg
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkgeworICAgICAgICBpZiAoIWlzS25vd25JbnRl
Z2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgewog
ICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoWDg2UmVnaXN0ZXJzOjplZHgpOwog
ICAgICAgICAgICAgc2V0dXBUd29TdHViQXJnczxGUFJJbmZvOjphcmd1bWVudEZQUjAsIEZQUklu
Zm86OmFyZ3VtZW50RlBSMT4ob3AxRlBSLCBvcDJGUFIpOwogICAgICAgICAgICAgbV9qaXQuYXBw
ZW5kQ2FsbChmbW9kKTsKQEAgLTcwOCw3ICs3MDgsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsK
QEAgLTc0OSw4ICs3NDksOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1
bGF0CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKIAogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0
aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGNsZWFuSW5kZXgodGhpcyk7CkBAIC04MDEsOSAr
ODAxLDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogCiAgICAg
Y2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRo
aXMsIG5vZGUuY2hpbGQzKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBub2RlLmNoaWxkMygpKTsK
ICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgICAgICBHUFJSZWcgYXJn
MkdQUiA9IGFyZzIuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBhcmczR1BSID0gYXJnMy5ncHIoKTsK
QEAgLTgxNyw3ICs4MTcsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1
bGF0CiAgICAgfQogCiAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBAIC04MzEsOCArODMxLDggQEAgdm9pZCBOb25T
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJ
ZDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwog
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC04NDYsOCArODQ2LDggQEAg
dm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNh
c2UgUHV0QnlJZERpcmVjdDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGls
ZDIpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC04
NzIsNyArODcyLDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAog
ICAgIH0KIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBnbG9iYWxPYmplY3Qo
dGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAKQEAg
LTg5OSw3ICs4OTksNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0
CiAgICAgfQogCiAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKQEAgLTkyOCw3ICs5MjgsNyBAQCB2b2lkIE5v
blNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAjZW5kaWYKIAogICAgICAgICAvLyBS
ZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1cm5WYWx1ZUdQUi4KLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNz
LgpAQCAtOTUyLDYgKzk1MiwxMyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNw
ZWN1bGF0CiAjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgorICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBDYWxsOgorICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBjYWxsZWUodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmly
c3RDaGlsZCgpXSk7CisgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Cisg
ICAgICAgIGVtaXRDYWxsKG5vZGUsIGNhbGxlZUdQUik7CisgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmIG5vZGUubXVzdEdlbmVyYXRlKCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogICAgICAgICAibW92ICglcnNwKSwgJSIg
U1RSSU5HSVpFKHJlZ2lzdGVyKSAiXG4iIFwKICAgICAgICAgImptcCBfIiBTVFJJTkdJWkUoZnVu
Y3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKKyNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX0FSRzJfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcnNpKQogI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfQVJHNF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbikgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCiAjZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9BUkc1X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHI4KQogCkBAIC0zODcsNiArMzg4LDEx
NCBAQCBib29sIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqCiAgICAgcmV0dXJu
IEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZSgpOworRW5jb2RlZEpTVmFsdWUgZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZVdpdGhFeGVjU3RhdGUoRXhlY1N0YXRlKik7CisKK2FzbSAoCisiLmdsb2JsIF8iIFNUUklOR0la
RShnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCisiXyIgU1RSSU5HSVpFKGdldEhvc3RDYWxs
UmV0dXJuVmFsdWUpICI6IiAiXG4iCisgICAgIm1vdiAtNDAoJXIxMyksICVyMTNcbiIKKyAgICAi
bW92ICVyMTMsICVyZGlcbiIKKyAgICAiam1wIF8iIFNUUklOR0laRShnZXRIb3N0Q2FsbFJldHVy
blZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgorKTsKKworRW5jb2RlZEpTVmFsdWUgZ2V0SG9zdENh
bGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+Z2xvYmFsRGF0YSgpLmhvc3RDYWxsUmV0dXJuVmFsdWUp
OworfQorCitzdGF0aWMgdm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
LCBKU1ZhbHVlIGNhbGxlZSkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBnZXRDYWxsRGF0YShjYWxsZWUsIGNhbGxEYXRhKTsKKyAgICAKKyAgICBBU1NFUlQoY2FsbFR5
cGUgIT0gQ2FsbFR5cGVKUyk7CisgICAgCisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9z
dCkgeworICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmludGVycHJldGVyLT5yZWdpc3RlckZpbGUo
KS5ncm93KGV4ZWNDYWxsZWUtPnJlZ2lzdGVycygpKSkgeworICAgICAgICAgICAgZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGV4ZWNDYWxsZWUtPnNl
dFNjb3BlQ2hhaW4oZXhlYy0+c2NvcGVDaGFpbigpKTsKKyAgICAgICAgCisgICAgICAgIGdsb2Jh
bERhdGEtPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChnbG9iYWxE
YXRhLT5leGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOworICAgIH0KKyAg
ICAKKyAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKKyAgICBleGVjLT5nbG9i
YWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVl
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCogb3BlcmF0aW9uTGlua0NhbGxXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKTsKK0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9BUkcyX1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvbkxpbmtDYWxsKTsKK3ZvaWQqIG9wZXJh
dGlvbkxpbmtDYWxsV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhl
Y0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4ZWNDYWxs
ZWUtPmNhbGxlZUFzVmFsdWUoKTsKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0g
Z2V0SlNGdW5jdGlvbigqZ2xvYmFsRGF0YSwgY2FsbGVlQXNWYWx1ZSk7CisgICAgaWYgKCFjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCkKKyAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxs
ZWUsIGNhbGxlZUFzVmFsdWUpOworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24o
Y2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
Y2FsbGVlLT5leGVjdXRhYmxlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHI7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOworICAgIGlmIChleGVjdXRhYmxl
LT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJh
dGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9yQ2FsbCgpOworICAgIGVsc2UgeworICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICBKU09iamVjdCogZXJyb3Ig
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGV4ZWMsIGNhbGxlZS0+c2NvcGUo
KSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0KKyAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+
Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpID09IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
LT5tX251bVBhcmFtZXRlcnMpKQorICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5hZGRyZXNzRm9yQ2FsbCgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0
ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCk7CisgICAgICAgIGV4ZWNDYWxsZWUtPnNl
dFNjb3BlQ2hhaW4oY2FsbGVlLT5zY29wZSgpKTsKKyAgICB9CisgICAgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKHJldHVybkFk
ZHJlc3MpOworICAgIGlmICghY2FsbExpbmtJbmZvLnNlZW5PbmNlKCkpCisgICAgICAgIGNhbGxM
aW5rSW5mby5zZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAgICBkZmdMaW5rQ2FsbChleGVjQ2Fs
bGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKKyAgICByZXR1
cm4gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworfQorCit2b2lkKiBvcGVyYXRpb25WaXJ0
dWFsQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgRXhlY1N0YXRlKiBleGVjID0g
ZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4ZWND
YWxsZWUtPmNhbGxlZUFzVmFsdWUoKTsKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxs
ID0gZ2V0SlNGdW5jdGlvbigqZ2xvYmFsRGF0YSwgY2FsbGVlQXNWYWx1ZSk7CisgICAgaWYgKCFj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCkKKyAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWND
YWxsZWUsIGNhbGxlZUFzVmFsdWUpOworICAgIAorICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
YXNGdW5jdGlvbihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChleGVjdXRhYmxlLT5p
c0hvc3RGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklU
Q29kZUZvckNhbGwoKS5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisKKyAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoZXhlYywgZnVuY3Rpb24tPnNjb3BlKCkp
OworICAgIGlmIChlcnJvcikgeworICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9u
ID0gZXJyb3I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBleGVjQ2FsbGVlLT5zZXRT
Y29wZUNoYWluKGZ1bmN0aW9uLT5zY29wZSgpKTsKKyAgICByZXR1cm4gZnVuY3Rpb25FeGVjdXRh
YmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKK30KKwogREZHSGFuZGxlciBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0
ZSogZXhlYywgUmV0dXJuQWRkcmVzc1B0ciBmYXVsdExvY2F0aW9uKQogewogICAgIEpTVmFsdWUg
ZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2
ICs3Niw4IEBAIGJvb2wgb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiwgRW4KIGJvb2wg
b3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKIGJvb2wgb3BlcmF0aW9uQ29tcGFyZUVx
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpOwogYm9vbCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7Cit2b2lk
KiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKTsKK3ZvaWQqIG9wZXJhdGlvbkxpbmtD
YWxsKEV4ZWNTdGF0ZSopOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBl
eGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcwogLy8gdGhl
IHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0aGUg
aGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYgKzM3NSwyMSBAQCB2
b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgCiAgICAgICAgIGRmZ1JlcGF0
Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFw
cHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIH0KIAordm9pZCBkZmdM
aW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2Rl
QmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVB0cikKK3sKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4
ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIGlmICghY2FsbGVlQ29k
ZUJsb2NrIHx8IHN0YXRpY19jYXN0PGludD4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSkgPT0gY2FsbGVlQ29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpIHsKKyAgICAgICAgQVNT
RVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgICAgIGNhbGxMaW5rSW5mby5jYWxs
ZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPmdsb2JhbERhdGEoKSwgY2FsbExpbmtJbmZvLmhv
dFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsK
KyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwg
Y29kZVB0cik7CisgICAgfQorICAgIAorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2Nh
dGlvbkNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG9wZXJhdGlvblZpcnR1
YWxDYWxsKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lvbiA5MDMxMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHZvaWQgZGZn
UmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ0J1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlE
KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCBkZmdMaW5rQ2FsbChF
eGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0aW9uKiBjYWxsZWUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MywxNyArMzYzLDE3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGUKICAgICAgICAgbm90VGFrZW4gPSB0
bXA7CiAgICAgfQogCi0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsKLSAg
ICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSk7Ci0g
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7Cisg
ICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpbnQzMl90
IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIGFk
ZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIEpJVENvbXBpbGVyOjpJbW0zMihpbW0p
LCBvcDIuZ3ByKCkpLCB0YWtlbik7Ci0gICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSk7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDIpOworICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQy
KCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwg
b3AxLmdwcigpLCBKSVRDb21waWxlcjo6SW1tMzIoaW1tKSksIHRha2VuKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEp
OwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIp
OworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgb3AxLmdw
cigpLCBvcDIuZ3ByKCkpLCB0YWtlbik7CiAgICAgfQogCkBAIC0zOTgsOCArMzk4LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQ2FsbAogICAgICAgICBub3RUYWtlbiA9
IHRtcDsKICAgICB9CiAKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEp
OwotICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwog
ICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKQEAg
LTQ0OCwyMCArNDQ4LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIHN3aXRjaCAobV9qaXQuZ3JhcGgoKS5n
ZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkpIHsKICAgICAgICAgY2FzZSBQcmVkaWN0SW50MzI6
IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQxKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5ncHIoKSwg
SklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIFByZWRpY3RBcnJheTogewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoY2VsbC5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAg
ICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
dmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAg
ICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC00NzMsMjMgKzQ3MywyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNlIEJpdFhvcjoK
LSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AyKTsKIAotICAgICAgICAgICAgYml0T3Aob3As
IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSwgb3AyLmdwcigpLCByZXN1bHQuZ3By
KCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQxKCkpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludGVnZXJS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
aXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgfSBlbHNlIGlmIChp
c0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkp
LCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBv
cDIpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKQEAgLTUwMywxNyAr
NTAzLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBj
YXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6
Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAg
ICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAgICAgIHNoaWZ0T3Ao
b3AsIG9wMS5ncHIoKSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpICYgMHgxZiwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgdmFsdWVP
ZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkgJiAweDFmLCByZXN1bHQuZ3ByKCkpOwogCiAg
ICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93IHNoaWZ0IGFtb3Vu
dCB0byBiZSB1c2VkIGFzIHRoZSByZXN1bHQsIE1hY3JvQXNzZW1ibGVyIGRvZXMgbm90IHBlcm1p
dCB0aGlzLgotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMik7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwpA
QCAtNTI1LDcgKzUyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7Ci0gICAgICAg
IEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhlIG9wZXJhbmQgaXMgcG9zaXRp
dmUuCkBAIC01MzcsNyArNTM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7Ci0gICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkpOwpAQCAtNTQ1LDE0ICs1NDUsMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgVmFs
dWVUb051bWJlcjogewotICAgICAgICBpZiAoaXNJbnRlZ2VyKG5vZGUuY2hpbGQxKSkgewotICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsK
KyAgICAgICAgaWYgKGlzSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAgICAgbV9qaXQubW92
ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIG9wMS5mb3JtYXQoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwogICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CkBAIC01NjEs
MTAgKzU2MSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAK
ICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkgewotICAgICAg
ICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAgICAg
ICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSk7Ci0gICAg
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9k
ZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGls
ZDEoKSkpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDIuZ3ByKCksIEltbTMy
KGltbTEpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTU3Myw5ICs1NzMsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICAgICAgaW50MzJfdCBpbW0y
ID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpOworICAgICAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKTsKICAg
ICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3Zl
cmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOwpAQCAtNTg0LDgg
KzU4NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIp
OworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEs
IG9wMik7CiAKICAgICAgICAgICAgIEdQUlJlZyBncHIxID0gb3AxLmdwcigpOwpAQCAtNjA0LDgg
KzYwNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CkBAIC02
MTcsMTAgKzYxNywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgfQogCiAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihub2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgICAgICBpZiAo
aXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICAgICAg
aW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpOworICAgICAg
ICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigp
KSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgewor
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hT
dWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJl
c3VsdC5ncHIoKSkpOwpAQCAtNjI5LDggKzYyOSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgb3AyLmdw
cigpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTYzOSw4ICs2MzksOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwor
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICBGUFJS
ZWcgcmVnMSA9IG9wMS5mcHIoKTsKQEAgLTY1Miw5ICs2NTIsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aE11bDogewot
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSwgbm9kZS5jaGls
ZDIpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5j
aGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdw
cigpOwpAQCAtNjcwLDggKzY3MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgRlBSUmVnIHJlZzEgPSBv
cDEuZnByKCk7CkBAIC02ODQsOCArNjg0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgRlBS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgIEZQUlJlZyByZWcxID0gb3Ax
LmZwcigpOwpAQCAtNjk3LDggKzY5Nyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IGVkeCh0aGlzLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAgICAgICAgIEdQUlJlZyBvcDFH
cHIgPSBvcDEuZ3ByKCk7CkBAIC03MjUsNyArNzI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgTG9naWNhbE5vdDogewotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOyAvLyBGSVhNRTogV2UgY291bGQgcmV1c2UsIGJ1dCBvbiBzcGVj
dWxhdGlvbiBmYWlsIHdvdWxkIG5lZWQgcmVjb3ZlcnkgdG8gcmVzdG9yZSB0YWcgKGFraW4gdG8g
YWRkKS4KIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpA
QCAtNzQ2LDIwICs3NDYsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgLy8gc28gY2FuIGJlIG5vIGludGVydmVuaW5nIG5vZGVzIHRvIGFs
c28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAKICAgICAgICAgICAgIEFTU0VSVChub2RlLmFkanVz
dGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAgICAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkKKyAgICAgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKQogICAgICAgICAg
ICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4
LCBKSVRDb21waWxlcjo6TGVzc1RoYW4pOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGNvbXBpbGVQZWVwSG9sZUNhbGwobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBvcGVyYXRpb25D
b21wYXJlTGVzcyk7CiAKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSk7Ci0gICAgICAgICAg
ICB1c2Uobm9kZS5jaGlsZDIpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgbV9jb21waWxlSW5kZXgg
PSBicmFuY2hOb2RlSW5kZXg7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBOb3JtYWwgY2FzZSwgbm90IGZ1c2VkIHRvIGJyYW5jaC4KLSAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIG1faml0LmNvbXBh
cmUzMihKSVRDb21waWxlcjo6TGVzc1RoYW4sIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQu
Z3ByKCkpOwpAQCAtNzc4LDIwICs3NzgsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgLy8gc28gY2FuIGJlIG5vIGludGVydmVuaW5nIG5v
ZGVzIHRvIGFsc28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAKICAgICAgICAgICAgIEFTU0VSVChu
b2RlLmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAgICAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkKKyAgICAgICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKQog
ICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNo
Tm9kZUluZGV4LCBKSVRDb21waWxlcjo6TGVzc1RoYW5PckVxdWFsKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVDYWxsKG5vZGUsIGJyYW5jaE5vZGVJ
bmRleCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSk7CiAKLSAgICAgICAgICAgIHVzZShub2RlLmNo
aWxkMSk7Ci0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIpOworICAgICAgICAgICAgdXNlKG5v
ZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAg
ICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3JtYWwgY2FzZSwgbm90IGZ1c2VkIHRvIGJyYW5j
aC4KLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAg
ICAgICAgIG1faml0LmNvbXBhcmUzMihKSVRDb21waWxlcjo6TGVzc1RoYW5PckVxdWFsLCBvcDEu
Z3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTgxMCwxOSArODEwLDE5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIC8vIHNv
IGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFy
ZS4gCiAgICAgICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAK
LSAgICAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxLCBub2Rl
LmNoaWxkMikpCisgICAgICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSgpLCBub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVJ
bnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OkVxdWFsKTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVDYWxsKG5v
ZGUsIGJyYW5jaE5vZGVJbmRleCwgb3BlcmF0aW9uQ29tcGFyZUVxKTsKIAotICAgICAgICAgICAg
dXNlKG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMik7CisgICAgICAg
ICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSwgb3AyKTsKIAogICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6
OkVxdWFsLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTgzNCw4ICs4
MzQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQog
CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIG1faml0LmNvbXBhcmUzMihKSVRDb21w
aWxlcjo6RXF1YWwsIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtODQ3
LDE4ICs4NDcsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgTm9kZUluZGV4IGFsaWFzID0g
bm9kZS5jaGlsZDM7CisgICAgICAgIE5vZGVJbmRleCBhbGlhcyA9IG5vZGUuY2hpbGQzKCk7CiAg
ICAgICAgIGlmIChhbGlhcyAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiByZXN1
bHQgc2hvdWxkIGJlIGFibGUgdG8gcmV1c2UgY2hpbGQxLCBjaGlsZDIuIFNob3VsZCBoYXZlIGFu
ICdVbnVzZWRPcGVyYW5kJyB0eXBlLgotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYWxpYXNl
ZFZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFs
aWFzZWRWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgYWxpYXNlZFZhbHVlKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoYWxp
YXNlZFZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2Uo
dGhpcyk7CiAKICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwpAQCAtODcxLDcg
Kzg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAg
ICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlz
IGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAv
LyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4g
c2tpcCB0aGUgY2hlY2suCi0gICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtu
b2RlLmNoaWxkMV07CisgICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2Rl
LmNoaWxkMSgpXTsKICAgICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8IG1faml0
LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihiYXNlTm9kZS5sb2NhbCgpKSAhPSBQcmVkaWN0QXJyYXkp
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkp
OwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKQEAgLTg4OCw5ICs4ODgsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAg
Y2FzZSBQdXRCeVZhbDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS5jaGlsZDMpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKIAogICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lzdGVy
cywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgpAQCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBDaGVjayB0
aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRo
aW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHBy
ZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2su
Ci0gICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMV07Cisg
ICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXTsKICAg
ICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExvY2FsIHx8IG1faml0LmdyYXBoKCkuZ2V0UHJl
ZGljdGlvbihiYXNlTm9kZS5sb2NhbCgpKSAhPSBQcmVkaWN0QXJyYXkpCiAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCB3aXRoaW5BcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CkBAIC05NDUsOSArOTQ1LDkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAg
IGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS5jaGlsZDMpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsK
QEAgLTk3Nyw3ICs5NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgfQogCiAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3By
KCk7CiAKICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKQEAgLTEwMTMs
NyArMTAxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICNl
bmRpZgogCiAgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSLgot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIG1faml0Lm1v
dmUob3AxLmdwcigpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICAgICAgLy8gR3Jh
YiB0aGUgcmV0dXJuIGFkZHJlc3MuCkBAIC0xMDI5LDcgKzEwMjksNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBDb252ZXJ0VGhp
czogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5j
aGlsZDEpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogCiAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CkBAIC0xMDQwLDcgKzEwNDAsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAg
Y2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwog
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBAIC0xMDUyLDggKzEw
NTIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQog
CiAgICAgY2FzZSBQdXRCeUlkOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hp
bGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBj
YWNoZWRQdXRCeUlkKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBzY3JhdGNoLmdwcigpLCBub2Rl
LmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKQEAgLTEwNjMsOCArMTA2Myw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IFB1dEJ5SWREaXJlY3Q6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAgIGNhY2hl
ZFB1dEJ5SWQoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIHNjcmF0Y2guZ3ByKCksIG5vZGUuaWRl
bnRpZmllck51bWJlcigpLCBEaXJlY3QpOwpAQCAtMTA4NSw3ICsxMDg1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0R2xv
YmFsVmFyOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQx
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSBnbG9iYWxPYmplY3QodGhpcyk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAKQEAgLTExMTIsNiArMTExMiwxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAjZWxzZQogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBDYWxsOgorICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgbV9qaXQuZ3Jh
cGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXSk7CisgICAgICAgIEdQUlJl
ZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CisgICAgICAgIGVtaXRDYWxsKG5vZGUsIGNhbGxl
ZUdQUik7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmIChub2RlLmhhc1Jlc3VsdCgp
ICYmIG5vZGUubXVzdEdlbmVyYXRlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTUy
LDcgKzE1Miw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxhc3ROb2Rl
IGlzIGEgYnJhbmNoIG9uIHRoaXMgbm9kZS4KICAgICAgICAgTm9kZSYgbGFzdE5vZGUgPSBtX2pp
dC5ncmFwaCgpW2xhc3ROb2RlSW5kZXhdOwotICAgICAgICByZXR1cm4gbGFzdE5vZGUub3AgPT0g
QnJhbmNoICYmIGxhc3ROb2RlLmNoaWxkMSA9PSBtX2NvbXBpbGVJbmRleCA/IGxhc3ROb2RlSW5k
ZXggOiBOb05vZGU7CisgICAgICAgIHJldHVybiBsYXN0Tm9kZS5vcCA9PSBCcmFuY2ggJiYgbGFz
dE5vZGUuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9Ob2Rl
OwogICAgIH0KIAogICAgIGJvb2wgaXNJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZp
c2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgLy8gUGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0IGZ1bmN0aW9ucy4KICAg
ICBjbGFzcyBFeGVjU3RhdGUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6CisgICAg
ICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJG
aWxlOjpDYWxsZWVdLmpzVmFsdWUoKTsgfQogICAgICAgICBKU09iamVjdCogY2FsbGVlKCkgY29u
c3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OkNhbGxlZV0uZnVuY3Rpb24oKTsgfQogICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJG
aWxlOjpDb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsgfQogICAgICAgICBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbigpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCShyZXZpc2lvbiA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNiBAQCBKSVQ6OkpJVChKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIENvZGVCCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAs
IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKLSAgICAsIG1fY2FsbFN0cnVjdHVyZVN0
dWJDb21waWxhdGlvbkluZm8oY29kZUJsb2NrID8gY29kZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5r
SW5mb3MoKSA6IDApCiAgICAgLCBtX2J5dGVjb2RlT2Zmc2V0KCh1bnNpZ25lZCktMSkKICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogICAgICwgbV9qdW1wVGFyZ2V0SW5kZXgoMCkKQEAgLTM0Nyw3ICsz
NDYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBBU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NvZGVCbG9jay0+bnVt
YmVyT2ZDYWxsTGlua0luZm9zKCkpOworICAgIEFTU0VSVChtX2NhbGxMaW5rSW5mb0luZGV4ID09
IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKIAogI2lmbmRlZiBO
REVCVUcKICAgICAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGgg
QVNTRVJUcy4KQEAgLTQ1MCw3ICs0NDksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgIH0KIAogICAgIEFTU0VSVChtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25J
bmRleCA9PSBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7Ci0gICAgQVNT
RVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJ
bmZvcygpKTsKKyAgICBBU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8g
UmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCkBAIC01
NzQsMTAgKzU3MywxMSBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVu
CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZihtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7
CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX3By
b3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAgfQorICAg
IG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9jYWxsU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsraSkgewogICAgICAgICBDYWxs
TGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwogICAgICAgICBp
bmZvLmlzQ2FsbCA9IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaXNDYWxs
OwotICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1
cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gQ29kZUxvY2F0
aW9uTGFiZWwocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0
dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVybkxvY2F0aW9uKSk7CiAgICAgICAgIGluZm8u
aG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAgICAgIGluZm8uaG90UGF0aE90
aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsKICAgICB9CkBAIC01OTIsNyArNTkyLDcg
QEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgIGlmIChtX2Nv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5
Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YoYXJpdHlDaGVjayk7CiAKLSAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVD
b2RlKCk7CisgICAgcmV0dXJuIEpJVENvZGUocGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCksIEpJ
VENvZGU6OkJhc2VsaW5lSklUKTsKIH0KIAogdm9pZCBKSVQ6OmxpbmtDYWxsKEpTRnVuY3Rpb24q
IGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9jayogY2FsbGVlQ29k
ZUJsb2NrLCBKSVQ6OkNvZGVQdHIgY29kZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIGlu
dCBjYWxsZXJBcmdDb3VudCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpAQCAtNjA4LDcgKzYw
OCw3IEBAIHZvaWQgSklUOjpsaW5rQ2FsbChKU0Z1bmN0aW9uKiBjYWxsZWUsIEMKICAgICB9CiAK
ICAgICAvLyBwYXRjaCB0aGUgY2FsbCBzbyB3ZSBkbyBub3QgY29udGludWUgdG8gdHJ5IHRvIGxp
bmsuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24sIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbCgpKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsTGlua0luZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbiksIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmxpbmtDb25zdHJ1Y3QoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxv
Y2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29k
ZVB0ciBjb2RlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgaW50IGNhbGxlckFyZ0NvdW50
LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCkBAIC02MjQsNyArNjI0LDcgQEAgdm9pZCBKSVQ6
OmxpbmtDb25zdHJ1Y3QoSlNGdW5jdGlvbiogY2FsbAogICAgIH0KIAogICAgIC8vIHBhdGNoIHRo
ZSBjYWxsIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0byB0cnkgdG8gbGluay4KLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3QoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24pLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdCgpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiw5IEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKE9wY29kZUlEIG9wY29kZUkKIAogICAgIGFkZFNsb3dDYXNlKGp1bXBUb1Nsb3cpOwog
ICAgIEFTU0VSVF9KSVRfT0ZGU0VUKGRpZmZlcmVuY2VCZXR3ZWVuKGFkZHJlc3NPZkxpbmtlZEZ1
bmN0aW9uQ2hlY2ssIGp1bXBUb1Nsb3cpLCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAp
OworICAgIAorICAgIEFTU0VSVChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNp
emUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mby5hcHBlbmQoU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbygpKTsKICAgICBt
X2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQ
YXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwogICAgIG1fY2FsbFN0cnVj
dHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmlzQ2FsbCA9IG9wY29k
ZUlEICE9IG9wX2NvbnN0cnVjdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE3ICszNywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBSZWdpc3RlckZpbGU7Ci0KKyAgICAK
ICAgICBjbGFzcyBKSVRDb2RlIHsKICAgICAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgQ29kZVJlZjsKICAgICAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0
cjsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0gSklUVHlwZSB7IEhvc3RDYWxsVGh1bmssIEJh
c2VsaW5lSklULCBERkdKSVQgfTsKKwogICAgICAgICBKSVRDb2RlKCkKICAgICAgICAgewogICAg
ICAgICB9CiAKLSAgICAgICAgSklUQ29kZShjb25zdCBDb2RlUmVmIHJlZikKKyAgICAgICAgSklU
Q29kZShjb25zdCBDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQogICAgICAgICAgICAgOiBt
X3JlZihyZWYpCisgICAgICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQogICAgICAgICB7CiAg
ICAgICAgIH0KIApAQCAtOTMsMTIgKzk2LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gbV9yZWYubV9leGVjdXRhYmxlUG9vbC5nZXQoKTsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgSklUVHlwZSBqaXRUeXBlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1faml0VHlwZTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEhvc3Qg
ZnVuY3Rpb25zIGFyZSBhIGJpdCBzcGVjaWFsOyB0aGV5IGhhdmUgYSBtX2NvZGUgcG9pbnRlciBi
dXQgdGhleQogICAgICAgICAvLyBkbyBub3QgaW5kaXZpZHVsbHkgcmVmIHRoZSBleGVjdXRhYmxl
IHBvb2wgY29udGFpbmluZyB0aGUgdHJhbXBvbGluZS4KICAgICAgICAgc3RhdGljIEpJVENvZGUg
SG9zdEZ1bmN0aW9uKENvZGVQdHIgY29kZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEpJVENvZGUoY29kZS5kYXRhTG9jYXRpb24oKSwgMCwgMCk7CisgICAgICAgICAgICByZXR1cm4g
SklUQ29kZShjb2RlLmRhdGFMb2NhdGlvbigpLCAwLCAwLCBIb3N0Q2FsbFRodW5rKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKQpAQCAtMTA4LDEyICsxMTYsMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpJVENvZGUodm9p
ZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIHNpemVf
dCBzaXplKQorICAgICAgICBKSVRDb2RlKHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJs
ZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qgc2l6ZSwgSklUVHlwZSBqaXRUeXBlKQogICAg
ICAgICAgICAgOiBtX3JlZihjb2RlLCBleGVjdXRhYmxlUG9vbCwgc2l6ZSkKKyAgICAgICAgICAg
ICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIENv
ZGVSZWYgbV9yZWY7CisgICAgICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIH07CiAKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lv
biA5MDMxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7CiAgICAgY2xh
c3MgVlB0ckhhY2tFeGVjdXRhYmxlOworICAgIG5hbWVzcGFjZSBERkcgeworICAgIGNsYXNzIEpJ
VENvZGVHZW5lcmF0b3I7CisgICAgfQogCiAgICAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKIAogICAgIGNsYXNz
IEpTRnVuY3Rpb24gOiBwdWJsaWMgSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29kZUdlbmVy
YXRvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKIAogICAgICAgICB0eXBl
ZGVmIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCBCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDkwMzEzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzNCw2ICsyMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb247CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciBleGNlcHRp
b25Mb2NhdGlvbjsKKyAgICAgICAgSlNWYWx1ZSBob3N0Q2FsbFJldHVyblZhbHVlOwogI2VuZGlm
CiAKICAgICAgICAgSGFzaE1hcDxPcGFxdWVKU0NsYXNzKiwgT3BhcXVlSlNDbGFzc0NvbnRleHRE
YXRhKj4gb3BhcXVlSlNDbGFzc0RhdGE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99748</attachid>
            <date>2011-07-05 14:48:33 -0700</date>
            <delta_ts>2011-07-05 17:04:53 -0700</delta_ts>
            <desc>the patch (fix merge conflicts)</desc>
            <filename>call_patch_9.diff</filename>
            <type>text/plain</type>
            <size>96077</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA0MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAK
KzIwMTEtMDctMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBO
ZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgIERG
RyBKSVQgZG9lcyBub3QgaW1wbGVtZW50IG9wX2NhbGwuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg1OAorCisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0
TnVtYmVyT2ZDYWxsTGlua0luZm9zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJP
ZkNhbGxMaW5rSW5mb3MpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3RydWN0KToKKyAgICAgICAgKiBk
ZmcvREZHQWxpYXNUcmFja2VyLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWxpYXNUcmFja2VyOjps
b29rdXBHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWxpYXNUcmFja2VyOjpyZWNvcmRD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpBbGlhc1RyYWNrZXI6OmVxdWFsSWdub3JpbmdMYXRl
ck51bWVyaWNDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjp0b0ludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6YWRkVG9HcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFk
ZFZhckFyZ0NoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJlZGlj
dEludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVmlydHVhbFJlZ2lzdGVy
cyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6b3BOYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OnJlZkNoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29kZUdlbmVyYXRvcjo6dXNlQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFkZHJlc3NPZkNh
bGxEYXRhKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpub3RpZnlDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRKU0NhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpQcm9wZXJ0eUFjY2Vzc1JlY29yZDo6UHJvcGVydHlBY2Nl
c3NSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpKU0NhbGxSZWNvcmQ6
OkpTQ2FsbFJlY29yZCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
Y2hpbGQzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpmaXJzdENoaWxkKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpudW1DaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR05vblNwZWN1
bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6YmFz
aWNBcml0aE9wKToKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGFy
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5oOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
ZmdMaW5rQ2FsbCk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guaDoKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpkZXRlY3RQZWVwSG9sZUJyYW5j
aCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4
ZWNTdGF0ZTo6Y2FsbGVlQXNWYWx1ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtD
YWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rQ29uc3RydWN0KToKKyAgICAgICAgKiBqaXQv
SklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAg
ICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6SklUQ29kZSk6CisgICAg
ICAgIChKU0M6OkpJVENvZGU6OmppdFR5cGUpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpIb3N0
RnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisKIDIwMTEtMDctMDUgIEdhdmluIEJhcnJhY2xvdWdoICA8
YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb2xsb3dpbmcgbGFz
dCBwYXRjaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiA5MDQwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMCArNDMsMTggQEAKICNpbmNs
dWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAorI2lmIEVOQUJM
RShERkdfSklUKQorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNlbmRpZgorCiAjZGVmaW5l
IERVTVBfQ09ERV9CTE9DS19TVEFUSVNUSUNTIDAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBF
TkFCTEUoREZHX0pJVCkKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisjZW5kaWYKKwogI2lmICFkZWZp
bmVkKE5ERUJVRykgfHwgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKIAogc3RhdGljIFVTdHJpbmcg
ZXNjYXBlUXVvdGVzKGNvbnN0IFVTdHJpbmcmIHN0cikKQEAgLTE3MzcsNyArMTc0NSwxNCBAQCB2
b2lkIENvZGVCbG9jazo6dW5saW5rQ2FsbHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9jYWxsTGlua0luZm9zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmICghbV9jYWxsTGlua0lu
Zm9zW2ldLmlzTGlua2VkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsobV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9j
YWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1
YWxDYWxsTGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVj
dExpbmsoKSk7CisgICAgICAgIGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6
OkRGR0pJVCkgeworI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxv
Y2F0aW9uKSwgb3BlcmF0aW9uTGlua0NhbGwpOworI2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwobV9jYWxsTGlua0luZm9zW2ldLmNh
bGxSZXR1cm5Mb2NhdGlvbiksIG1fY2FsbExpbmtJbmZvc1tpXS5pc0NhbGwgPyBtX2dsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSA6IG1fZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkpOwogICAgICAgICBtX2NhbGxMaW5rSW5mb3Nb
aV0udW5saW5rKCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTA0MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGwgY2FsbFJldHVybkxvY2F0aW9uOworICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBjYWxsUmV0dXJuTG9jYXRpb247IC8vIGl0J3MgYSBuZWFyIGNhbGwgaW4gdGhlIG9sZCBK
SVQsIG9yIGEgbm9ybWFsIGNhbGwgaW4gREZHCiAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0ciBob3RQYXRoQmVnaW47CiAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhP
dGhlcjsKICAgICAgICAgSklUV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKQEAgLTM3
OCw4ICszNzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgR2xvYmFsUmVzb2x2ZUluZm8m
IGdsb2JhbFJlc29sdmVJbmZvKGludCBpbmRleCkgeyByZXR1cm4gbV9nbG9iYWxSZXNvbHZlSW5m
b3NbaW5kZXhdOyB9CiAgICAgICAgIGJvb2wgaGFzR2xvYmFsUmVzb2x2ZUluZm9BdEJ5dGVjb2Rl
T2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKIAorICAgICAgICB2b2lkIHNldE51bWJl
ck9mQ2FsbExpbmtJbmZvcyhzaXplX3Qgc2l6ZSkgeyBtX2NhbGxMaW5rSW5mb3MuZ3JvdyhzaXpl
KTsgfQogICAgICAgICBzaXplX3QgbnVtYmVyT2ZDYWxsTGlua0luZm9zKCkgY29uc3QgeyByZXR1
cm4gbV9jYWxsTGlua0luZm9zLnNpemUoKTsgfQotICAgICAgICB2b2lkIGFkZENhbGxMaW5rSW5m
bygpIHsgbV9jYWxsTGlua0luZm9zLmFwcGVuZChDYWxsTGlua0luZm8oKSk7IH0KICAgICAgICAg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8oaW50IGluZGV4KSB7IHJldHVybiBtX2NhbGxMaW5r
SW5mb3NbaW5kZXhdOyB9CiAKICAgICAgICAgdm9pZCBhZGRNZXRob2RDYWxsTGlua0luZm9zKHVu
c2lnbmVkIG4pIHsgbV9tZXRob2RDYWxsTGlua0luZm9zLmdyb3cobik7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiA5MDQwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUyLDEw
ICsxNzUyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAogCiAg
ICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAot
I2lmIEVOQUJMRShKSVQpCi0gICAgbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotI2Vu
ZGlmCi0KICAgICAvLyBFbWl0IGNhbGwuCiAgICAgZW1pdE9wY29kZShvcGNvZGVJRCk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOyAvLyBmdW5jCkBAIC0xODY5LDEw
ICsxODY1LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdAogCiAg
ICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAot
I2lmIEVOQUJMRShKSVQpCi0gICAgbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotI2Vu
ZGlmCi0KICAgICBlbWl0T3Bjb2RlKG9wX2NvbnN0cnVjdCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGZ1bmMtPmluZGV4KCkpOyAvLyBmdW5jCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGNhbGxBcmd1bWVudHMuY291bnQoKSk7IC8vIGFyZ0NvdW50CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgJKHJldmlzaW9uIDkwNDA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBUaGlzIGNoZWNrIGVuc3Vy
ZXMgdGhlIGFjY2Vzc2VzIGFsaWFzLCBwcm92aWRlZCB0aGF0IHRoZSBzdWJzY3JpcHQgaXMgYW4K
ICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXggKHRoaXMgaXMgZ29vZCBlbm91Z2g7IHRoZSBz
cGVjdWxhdGl2ZSBwYXRoIHdpbGwgb25seSBnZW5lcmF0ZQogICAgICAgICAgICAgLy8gb3B0aW1p
emVkIGFjY2Vzc2VzIHRvIGhhbmRsZSBpbnRlZ2VyIHN1YnNjcmlwdHMpLgotICAgICAgICAgICAg
aWYgKHBvc3NpYmxlQWxpYXMuY2hpbGQxID09IGJhc2UgJiYgZXF1YWxJZ25vcmluZ0xhdGVyTnVt
ZXJpY0NvbnZlcnNpb24ocG9zc2libGVBbGlhcy5jaGlsZDIsIHByb3BlcnR5KSkKKyAgICAgICAg
ICAgIGlmIChwb3NzaWJsZUFsaWFzLmNoaWxkMSgpID09IGJhc2UgJiYgZXF1YWxJZ25vcmluZ0xh
dGVyTnVtZXJpY0NvbnZlcnNpb24ocG9zc2libGVBbGlhcy5jaGlsZDIoKSwgcHJvcGVydHkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWw7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTk0LDYgKzk0LDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChwdXRCeVZhbCwgbV9ncmFwaFtwdXRCeVZhbF0ub3AgPT0gUHV0
QnlJZERpcmVjdCk7CiAgICAgICAgIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsK
ICAgICB9CisgICAgCisgICAgdm9pZCByZWNvcmRDYWxsKE5vZGVJbmRleCBjYWxsKQorICAgIHsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChjYWxsLCBtX2dyYXBoW2NhbGxdLm9wID09IENhbGwpOwor
ICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7CisgICAgfQogCiBwcml2
YXRlOgogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgYXJndW1lbnRzOgpAQCAt
MTA2LDcgKzExMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIE5vZGUmIG5vZGUyID0gbV9ncmFwaFtvcDJdOwot
ICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwgbm9kZTIub3AgPT0g
VmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIuY2hpbGQxOworICAgICAgICByZXR1cm4gKG5v
ZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwgbm9kZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBv
cDEgPT0gbm9kZTIuY2hpbGQxKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIGdyYXBoLCB0byBsb29r
IHVwIHBvdGVudGlhbGx5IGFsaWFzaW5nIG5vZGVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDkwNDA1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDggQEAgcHVibGljOgogICAgICAgICAsIG1fbnVtQXJndW1lbnRz
KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKQogICAgICAgICAsIG1fbnVtTG9jYWxzKGNvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCiAgICAgICAgICwgbV9wcmVzZXJ2ZWRWYXJzKGNv
ZGVCbG9jay0+bV9udW1WYXJzKQorICAgICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkKKyAgICAg
ICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAgICB7CiAgICAgfQogCkBAIC0xMjQsNyArMTI2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExvY2FsKQogICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgICAgICBBU1NFUlQobm9kZS5v
cCA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDE7CisgICAgICAg
ICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNr
IGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9tIHByaW9yIGJsb2NrcywKQEAgLTE1NSw3ICsx
NTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIEFTU0VSVChub2Rl
Lm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMTsKKyAgICAg
ICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwogICAgICAgICB9CiAKICAgICAgICAgTm9kZUlu
ZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpKTsKQEAgLTE5MSw3ICsxOTMsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogCiAgICAgICAgIGlmIChub2RlLm9wID09IFVJbnQz
MlRvTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxOworICAgICAgICAgICAg
cmV0dXJuIG5vZGUuY2hpbGQxKCk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMgY29u
c3RhbnRzIGJveGVkIGFzIEpTVmFsdWVzLgogICAgICAgICBpZiAobm9kZS5vcCA9PSBKU0NvbnN0
YW50KSB7CkBAIC0zODIsNiArMzg0LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBo
LnJlZihyZXN1bHRJbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKICAgICB9Cisg
ICAgCisgICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBv
cCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9n
cmFwaC5zaXplKCk7CisgICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUoTm9kZTo6VmFyQXJnLCBv
cCwgbV9jdXJyZW50SW5kZXgsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251
bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykpOworICAgICAgICAKKyAgICAgICAg
bV9udW1QYXNzZWRWYXJBcmdzID0gMDsKKyAgICAgICAgCisgICAgICAgIGlmIChvcCAmIE5vZGVN
dXN0R2VuZXJhdGUpCisgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CisgICAg
ICAgIHJldHVybiByZXN1bHRJbmRleDsKKyAgICB9CisgICAgdm9pZCBhZGRWYXJBcmdDaGlsZChO
b2RlSW5kZXggY2hpbGQpCisgICAgeworICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4u
YXBwZW5kKGNoaWxkKTsKKyAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CisgICAgfQogCiAg
ICAgdm9pZCBwcmVkaWN0QXJyYXkoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBAIC0zOTYs
MTAgKzQxNSwxMCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhb
bm9kZUluZGV4XTsKIAogICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVmFsdWVUb051bWJlcikK
LSAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFtub2RlUHRyLT5jaGlsZDFdOworICAgICAg
ICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKIAogICAgICAgICBp
ZiAobm9kZVB0ci0+b3AgPT0gVmFsdWVUb0ludDMyKQotICAgICAgICAgICAgbm9kZVB0ciA9ICZt
X2dyYXBoW25vZGVQdHItPmNoaWxkMV07CisgICAgICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhb
bm9kZVB0ci0+Y2hpbGQxKCldOwogCiAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBHZXRMb2Nh
bCkKICAgICAgICAgICAgIG1fZ3JhcGgucHJlZGljdChub2RlUHRyLT5sb2NhbCgpLCBQcmVkaWN0
SW50MzIpOwpAQCAtNDUzLDYgKzQ3MiwxMyBAQCBwcml2YXRlOgogICAgIC8vIHR5cGljYWxseSBl
cXVhbCB0byB0aGUgbnVtYmVyIHZhcnMsIGJ1dCB3ZSBleHBhbmQgdGhpcyB0byBjb3ZlciBhbGwK
ICAgICAvLyB0ZW1wb3JhcmllcyB0aGF0IHBlcnNpc3QgYWNyb3NzIGJsb2NrcyAoZHVlcyB0byA/
OiwgJiYsIHx8LCBldGMpLgogICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFyczsKKyAgICAvLyBU
aGUgbnVtYmVyIG9mIHNsb3RzIChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdl
IG5lZWQgdG8KKyAgICAvLyBwcmVhbGxvY2F0ZSBmb3IgY2FsbHMgZW1hbmF0aW5nIGZyb20gdGhp
cyBmcmFtZS4gVGhpcyBpbmNsdWRlcyB0aGUKKyAgICAvLyBzaXplIG9mIHRoZSBDYWxsRnJhbWUs
IG9ubHkgaWYgdGhpcyBpcyBub3QgYSBsZWFmIGZ1bmN0aW9uLiAgKEkuZS4KKyAgICAvLyB0aGlz
IGlzIDAgaWYgYW5kIG9ubHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBhIGxlYWYuKQorICAgIHVuc2ln
bmVkIG1fcGFyYW1ldGVyU2xvdHM7CisgICAgLy8gVGhlIG51bWJlciBvZiB2YXIgYXJncyBwYXNz
ZWQgdG8gdGhlIG5leHQgdmFyIGFyZyBub2RlLgorICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkVmFy
QXJnczsKIAogICAgIHN0cnVjdCBQaGlTdGFja0VudHJ5IHsKICAgICAgICAgUGhpU3RhY2tFbnRy
eShCYXNpY0Jsb2NrKiBibG9jaywgTm9kZUluZGV4IHBoaSwgdW5zaWduZWQgdmFyTm8pCkBAIC0x
MDM5LDYgKzEwNjUsMzEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jYWxsOiB7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAg
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZmlyc3RBcmcgPSByZWdpc3Rlck9mZnNldCAtIGFy
Z0NvdW50IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAg
Zm9yIChpbnQgYXJnSWR4ID0gZmlyc3RBcmc7IGFyZ0lkeCA8IGZpcnN0QXJnICsgYXJnQ291bnQ7
IGFyZ0lkeCsrKQorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChhcmdJZHgpKTsK
KyAgICAgICAgICAgIE5vZGVJbmRleCBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIENh
bGwpOworICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRDYWxsKGNhbGwpOworICAgICAgICAgICAg
SW5zdHJ1Y3Rpb24qIHB1dEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RF
X0xFTkdUSChvcF9jYWxsKTsKKyAgICAgICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2Rl
SUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpCisgICAg
ICAgICAgICAgICAgc2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2FsbCk7CisgICAg
ICAgICAgICBpZiAoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgKHVuc2lnbmVk
KWFyZ0NvdW50ID4gbV9wYXJhbWV0ZXJTbG90cykKKyAgICAgICAgICAgICAgICBtX3BhcmFtZXRl
clNsb3RzID0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgYXJnQ291bnQ7Cisg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2Ugb3BfY2FsbF9wdXRfcmVzdWx0OiB7CisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGNhbGxJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0
cnVjdGlvbiAtIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CisgICAgICAgICAgICBBU1NFUlQoaW50
ZXJwcmV0ZXItPmdldE9wY29kZUlEKGNhbGxJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2Nh
bGwpOworI2VuZGlmCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3B1dF9yZXN1bHQp
OworICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIFBhcnNlIGZh
aWxlZCEKQEAgLTEwNzEsMjIgKzExMjIsMjIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vz
c1BoaVN0YWNrKCkKICAgICAgICAgICAgICAgICB2YXIudmFsdWUgPSB2YWx1ZUluUHJlZGVjZXNz
b3I7CiAgICAgICAgICAgICAgICAgcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVj
ZXNzb3JCbG9jaywgdmFsdWVJblByZWRlY2Vzc29yLCB2YXJObykpOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpCi0gICAg
ICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNz
b3JdLmNoaWxkMTsKKyAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBo
W3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7CiAgICAgICAgICAgICBBU1NFUlQobV9ncmFw
aFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFsdWVJblBy
ZWRlY2Vzc29yXS5vcCA9PSBQaGkpOwogCiAgICAgICAgICAgICBpZiAocGhpTm9kZS5yZWZDb3Vu
dCgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAK
LSAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMSA9PSBOb05vZGUpIHsKLSAgICAgICAgICAg
ICAgICBwaGlOb2RlLmNoaWxkMSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgIGlm
IChwaGlOb2RlLmNoaWxkMSgpID09IE5vTm9kZSkgeworICAgICAgICAgICAgICAgIHBoaU5vZGUu
Y2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gdmFsdWVJblByZWRlY2Vzc29yOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hp
bGQyID09IE5vTm9kZSkgewotICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQyID0gdmFsdWVJ
blByZWRlY2Vzc29yOworICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQyKCkgPT0gTm9Ob2Rl
KSB7CisgICAgICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSB2YWx1
ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDMgPT0gTm9Ob2RlKSB7Ci0gICAgICAgICAg
ICAgICAgcGhpTm9kZS5jaGlsZDMgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICBp
ZiAocGhpTm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBwaGlOb2Rl
LmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAtMTA5NSwxMyArMTE0NiwxMyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgaWYgKHBo
aU5vZGUucmVmQ291bnQoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkpOwog
Ci0gICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkMSA9IHBoaU5vZGUuY2hpbGQxOwotICAgICAg
ICAgICAgbmV3UGhpTm9kZS5jaGlsZDIgPSBwaGlOb2RlLmNoaWxkMjsKLSAgICAgICAgICAgIG5l
d1BoaU5vZGUuY2hpbGQzID0gcGhpTm9kZS5jaGlsZDM7Ci0KLSAgICAgICAgICAgIHBoaU5vZGUu
Y2hpbGQxID0gbmV3UGhpOwotICAgICAgICAgICAgcGhpTm9kZS5jaGlsZDEgPSB2YWx1ZUluUHJl
ZGVjZXNzb3I7Ci0gICAgICAgICAgICBwaGlOb2RlLmNoaWxkMyA9IE5vTm9kZTsKKyAgICAgICAg
ICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gcGhpTm9kZS5jaGlsZDEoKTsK
KyAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gcGhpTm9kZS5j
aGlsZDIoKTsKKyAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0g
cGhpTm9kZS5jaGlsZDMoKTsKKworICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5j
aGlsZDEgPSBuZXdQaGk7CisgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxk
MSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4
ZWQuY2hpbGQzID0gTm9Ob2RlOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTEyOSw5ICsxMTgw
LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVmlydHVhbFJlZ2kKICAgICB1bnNp
Z25lZCBzaXplRXhjbHVkaW5nUGhpTm9kZXMgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS0+ZW5k
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzOyArK2kp
IHsKICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaV07CisgICAgICAgIAogICAgICAgICBp
ZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCisgICAg
ICAgIAogICAgICAgICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVz
IGluIHRoZSBncmFwaCwgcmVmZXJlbmNpbmcKICAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9y
IGJsb2Nrcy4KICAgICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKQEAgLTExMzksOSAr
MTE5MSwxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpCiAgICAg
ICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBk
byBzbyBpbiB0aGlzCiAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMg
b24gaXRzIGxhc3QgdXNlLCBhbmQgYQogICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlz
IGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICBzY29y
ZUJvYXJkLnVzZShub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2Rl
LmNoaWxkMik7Ci0gICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMyk7CisgICAg
ICAgICAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5v
ZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAg
ICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcmVCb2Fy
ZC51c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9k
ZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMo
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW5vZGUuaGFzUmVz
dWx0KCkpCkBAIC0xMTU3LDcgKzEyMTQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0
ZVZpcnR1YWxSZWdpCiAgICAgLy8gJ21fbnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVy
IG9mIGxvY2FscyBhbmQgdGVtcG9yYXJpZXMgYWxsb2NhdGVkCiAgICAgLy8gZm9yIHRoZSBmdW5j
dGlvbiAoYW5kIGNoZWNrZWQgZm9yIG9uIGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBh
bmQKICAgICAvLyBkaWZmZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdp
c3RlcnMgbWF5IG5vdyBiZSByZXF1aXJlZC4KLSAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMg
PSBzY29yZUJvYXJkLmFsbG9jYXRlZENvdW50KCkgKyBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5z
aWduZWQgY2FsbGVlUmVnaXN0ZXJzID0gc2NvcmVCb2FyZC5hbGxvY2F0ZWRDb3VudCgpICsgbV9w
cmVzZXJ2ZWRWYXJzICsgbV9wYXJhbWV0ZXJTbG90czsKICAgICBpZiAoKHVuc2lnbmVkKW1fY29k
ZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyA8IGNhbGxlZVJlZ2lzdGVycykKICAgICAgICAg
bV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDkwNDA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDYgKzQxLDExIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7
CiAjdW5kZWYgU1RSSU5HSVpFX0RGR19PUF9FTlVNCiB9OwogCitjb25zdCBjaGFyICpHcmFwaDo6
b3BOYW1lKE5vZGVUeXBlIG9wKQoreworICAgIHJldHVybiBkZmdPcE5hbWVzW29wICYgTm9kZUlk
TWFza107Cit9CisKIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC03
NSwxNCArODAsMjUgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwog
ICAgICAgICBwcmludGYoIiV1Iiwgbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgZWxzZQog
ICAgICAgICBwcmludGYoIi0iKTsKLSAgICBwcmludGYoIj5cdCVzKCIsIGRmZ09wTmFtZXNbb3Ag
JiBOb2RlSWRNYXNrXSk7Ci0gICAgaWYgKG5vZGUuY2hpbGQxICE9IE5vTm9kZSkKLSAgICAgICAg
cHJpbnRmKCJAJXUiLCBub2RlLmNoaWxkMSk7Ci0gICAgaWYgKG5vZGUuY2hpbGQyICE9IE5vTm9k
ZSkKLSAgICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKTsKLSAgICBpZiAobm9kZS5j
aGlsZDMgIT0gTm9Ob2RlKQotICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMpOwot
ICAgIGJvb2wgaGFzUHJpbnRlZCA9IG5vZGUuY2hpbGQxICE9IE5vTm9kZTsKKyAgICBwcmludGYo
Ij5cdCVzKCIsIG9wTmFtZShvcCkpOworICAgIGJvb2wgaGFzUHJpbnRlZDsKKyAgICBpZiAob3Ag
JiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9k
ZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNo
aWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKKyAgICAgICAgICAgIGlmIChoYXNQcmludGVkKQorICAg
ICAgICAgICAgICAgIHByaW50ZigiLCAiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW50ZigiQCV1IiwgbV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKG5vZGUuY2hpbGQxKCkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgIT0gTm9Ob2RlKQorICAg
ICAgICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBpZiAobm9k
ZS5jaGlsZDMoKSAhPSBOb05vZGUpCisgICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5j
aGlsZDMoKSk7CisgICAgICAgIGhhc1ByaW50ZWQgPSBub2RlLmNoaWxkMSgpICE9IE5vTm9kZTsK
KyAgICB9CiAKICAgICBpZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewogICAgICAgICBwcmludGYo
IiVzdmFyJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLnZhck51bWJlcigpKTsKQEAg
LTEzOCwyMSArMTU0LDI2IEBAIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkK
IHsKICAgICBOb2RlJiBub2RlID0gYXQob3ApOwogCi0gICAgaWYgKG5vZGUuY2hpbGQxID09IE5v
Tm9kZSkgewotICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5vZGUuY2hp
bGQzID09IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmVmKG5vZGUuY2hp
bGQxKTsKLQotICAgIGlmIChub2RlLmNoaWxkMiA9PSBOb05vZGUpIHsKLSAgICAgICAgQVNTRVJU
KG5vZGUuY2hpbGQzID09IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobm9kZS5v
cCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVt
Q2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgIHJlZihtX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0g
Tm9Ob2RlKSB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgJiYg
bm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHJlZihub2RlLmNoaWxkMSgpKTsKKworICAgICAgICBpZiAobm9kZS5jaGlsZDIo
KSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5vTm9k
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVmKG5vZGUuY2hp
bGQyKCkpOworCisgICAgICAgIGlmIChub2RlLmNoaWxkMygpID09IE5vTm9kZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmVmKG5vZGUuY2hpbGQzKCkpOwogICAgIH0KLSAgICByZWYo
bm9kZS5jaGlsZDIpOwotCi0gICAgaWYgKG5vZGUuY2hpbGQzID09IE5vTm9kZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIHJlZihub2RlLmNoaWxkMyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDkw
NDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjAsNyArMTYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFByZWRpY3RO
b25lOwogICAgIH0KIAorI2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BO
YW1lKE5vZGVUeXBlKTsKKyNlbmRpZgorCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4g
LCA4PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJl
bjsKIHByaXZhdGU6CiAKICAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAw
IHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hp
bGRyZW4sIGFuZCB2aWNlIHZlcnNhLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5MDQwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwMCwyNCArMzAwLDI5IEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNW
YWx1ZShOb2QKIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJlbihOb2RlJiBub2Rl
KQogewotICAgIE5vZGVJbmRleCBjaGlsZDEgPSBub2RlLmNoaWxkMTsKLSAgICBpZiAoY2hpbGQx
ID09IE5vTm9kZSkgewotICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIgPT0gTm9Ob2RlICYmIG5v
ZGUuY2hpbGQzID09IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdXNlKGNo
aWxkMSk7Ci0KLSAgICBOb2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDI7Ci0gICAgaWYgKGNo
aWxkMiA9PSBOb05vZGUpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQzID09IE5vTm9kZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdXNlKGNoaWxkMik7Ci0KLSAgICBOb2RlSW5k
ZXggY2hpbGQzID0gbm9kZS5jaGlsZDM7Ci0gICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCi0gICAg
ICAgIHJldHVybjsKLSAgICB1c2UoY2hpbGQzKTsKKyAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNW
YXJBcmdzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hp
bGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsg
Y2hpbGRJZHgrKykKKyAgICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdKTsKKyAgICB9IGVsc2UgeworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0g
bm9kZS5jaGlsZDEoKTsKKyAgICAgICAgaWYgKGNoaWxkMSA9PSBOb05vZGUpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlLmNoaWxkMigpID09IE5vTm9kZSAmJiBub2RlLmNoaWxkMygpID09IE5v
Tm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXNlKGNoaWxk
MSk7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDIoKTsK
KyAgICAgICAgaWYgKGNoaWxkMiA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2Rl
LmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdXNlKGNoaWxkMik7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0g
bm9kZS5jaGlsZDMoKTsKKyAgICAgICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHVzZShjaGlsZDMpOworICAgIH0KIH0KIAogdm9pZCBKSVRDb2Rl
R2VuZXJhdG9yOjpjYWNoZWRHZXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BS
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRh
cmdldCkKQEAgLTQyNSw2ICs0MzAsODQgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNoZWRQ
dXRCeUlkKEdQUgogICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKGZ1bmN0aW9uQ2FsbCwgY2hl
Y2tJbW1Ub0NhbGwsIGNhbGxUb0NoZWNrLCBjYWxsVG9TdG9yZSwgY2FsbFRvU2xvd0Nhc2UsIGNh
bGxUb0RvbmUsIHN0YXRpY19jYXN0PGludDhfdD4oYmFzZUdQUiksIHN0YXRpY19jYXN0PGludDhf
dD4odmFsdWVHUFIpLCBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKTsKIH0KIAordm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBub2RlLCBHUFJSZWcgdGFyZ2V0R1BS
KQoreworICAgIC8vIHRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVy
IHRoZSBmdW5jdGlvbiAobm9ybWFsIGNhbGwpIG9yIHRoZQorICAgIC8vIHJlY2VpdmVyIChtZXRo
b2QgY2FsbCkuIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCisgICAgaW50
IG51bUFyZ3MgPSBub2RlLm51bUNoaWxkcmVuKCkgLSAxOworICAgIAorICAgIC8vIGFtb3VudCBv
ZiBzdHVmZiAoaW4gdW5pdHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvIHBs
YWNlIGF0IHRoZQorICAgIC8vIHRvcCBvZiB0aGUgSlMgc3RhY2suCisgICAgaW50IGNhbGxEYXRh
U2l6ZSA9IDA7CisKKyAgICAvLyBmaXJzdCB0aGVyZSBhcmUgdGhlIGFyZ3VtZW50cworICAgIGNh
bGxEYXRhU2l6ZSArPSBudW1BcmdzOworICAgIAorICAgIC8vIGFuZCB0aGVuIHRoZXJlIGlzIHRo
ZSBjYWxsIGZyYW1lIGhlYWRlcgorICAgIGNhbGxEYXRhU2l6ZSArPSBSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemU7CisgICAgCisgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bUFyZ3MpKSksIGFk
ZHJlc3NPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOworICAgIG1faml0
LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBhZGRyZXNzT2ZDYWxsRGF0YShS
ZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSk7CisgICAgCisgICAgZm9yIChpbnQgYXJnSWR4ID0g
MDsgYXJnSWR4IDwgbnVtQXJnczsgYXJnSWR4KyspIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YXJnKHRoaXMsIG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQo
KSArIDEgKyBhcmdJZHhdKTsKKyAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAg
ICAgICAgCisgICAgICAgIG1faml0LnN0b3JlUHRyKGFyZ0dQUiwgYWRkcmVzc09mQ2FsbERhdGEo
LWNhbGxEYXRhU2l6ZSArIGFyZ0lkeCkpOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUu
b3ApIHsKKyAgICBjYXNlIENhbGw6CisgICAgICAgIG1faml0LnN0b3JlUHRyKHRhcmdldEdQUiwg
YWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICAKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIAorICAgIEdQUlJlc3VsdCBy
ZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
IEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aDsKKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICBjYXNl
IENhbGw6CisgICAgICAgIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFyZ2V0R1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRhcmdldEdQUiwgT0JKRUNU
X09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRHUFIpOworICAgICAg
ICBtX2ppdC5zdG9yZVB0cihyZXN1bHRHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbikpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgbV9qaXQuYWRkUHRy
KEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihS
ZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIG1faml0Lm5vdGlm
eUNhbGwoZmFzdENhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbklu
Zm8pOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Cisg
ICAgCisgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIAorICAgIG1faml0LmFkZFB0cihJ
bW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0
aEZhc3RFeGNlcHRpb25DaGVjayhvcGVyYXRpb25MaW5rQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2Nv
bXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgbV9qaXQubW92ZShJbW0zMihudW1Bcmdz
KSwgR1BSSW5mbzo6cmVnVDEpOworICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxv
Y2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIG1faml0Lm5vdGlmeUNhbGwobV9qaXQuY2FsbChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiksIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2Vw
dGlvbkluZm8pOworICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIAorICAgIG1faml0
Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgCisgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAKKyAgICBtX2ppdC5h
ZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCB0cnVlLCBtX2ppdC5n
cmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKK30KKwogI2lmbmRlZiBOREVC
VUcKIHN0YXRpYyBjb25zdCBjaGFyKiBkYXRhRm9ybWF0U3RyaW5nKERhdGFGb3JtYXQgZm9ybWF0
KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDkwNDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMiw2ICs1MjIsMTMgQEAg
cHJvdGVjdGVkOgogICAgIAogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwg
R1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6
Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICAgICB2b2lkIGNh
Y2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIHNjcmF0
Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpK
dW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzc09mQ2FsbERhdGEoaW50IGlkeCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGlkeCkg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBlbWl0Q2FsbChOb2RlJiwgR1BSUmVnIHRhcmdldEdQUik7CiAKICAgICAvLyBDYWxsZWQg
b25jZSBhIG5vZGUgaGFzIGNvbXBsZXRlZCBjb2RlIGdlbmVyYXRpb24gYnV0IHByaW9yIHRvIHNl
dHRpbmcKICAgICAvLyBpdHMgcmVzdWx0LCB0byBmcmVlIHVwIGl0cyBjaGlsZHJlbi4gKFRoaXMg
bXVzdCBoYXBwZW4gcHJpb3IgdG8gc2V0dGluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDkwNDA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
NCw2ICsyOTQsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAg
ICAgICAgIC8vIElmIGNvbXBpbGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxl
ZCwgdGhyb3cgYXdheSB0aGUgY29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xl
YXIoKTsKICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc2VzLmNsZWFyKCk7CisgICAgICAgIG1fanND
YWxscy5jbGVhcigpOwogICAgICAgICByZXdpbmRUb0xhYmVsKHNwZWN1bGF0aXZlUGF0aEJlZ2lu
KTsKIAogICAgICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yIG5vQ2hlY2tzOwpAQCAtMzY5LDEz
ICszNzAsMTUgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogI2Vu
ZGlmCiAKICAgICAvLyBMaW5rIGFsbCBjYWxscyBvdXQgZnJvbSB0aGUgSklUIGNvZGUgdG8gdGhl
aXIgcmVzcGVjdGl2ZSBmdW5jdGlvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
Y2FsbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGxpbmtCdWZmZXIubGluayhtX2NhbGxzW2ldLm1f
Y2FsbCwgbV9jYWxsc1tpXS5tX2Z1bmN0aW9uKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jYWxscy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9jYWxsc1tpXS5tX2Z1bmN0
aW9uLnZhbHVlKCkpCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5tX2Nh
bGwsIG1fY2FsbHNbaV0ubV9mdW5jdGlvbik7CisgICAgfQogCiAgICAgaWYgKG1fY29kZUJsb2Nr
LT5uZWVkc0NhbGxSZXR1cm5JbmRpY2VzKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2stPmNhbGxS
ZXR1cm5JbmRleFZlY3RvcigpLnJlc2VydmVDYXBhY2l0eShleGNlcHRpb25DaGVja0NvdW50KTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGlmIChtX2NhbGxzW2ldLm1fZXhjZXB0aW9uQ2hlY2suaXNTZXQoKSkgewor
ICAgICAgICAgICAgaWYgKG1fY2FsbHNbaV0ubV9oYW5kbGVzRXhjZXB0aW9ucykgewogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHJldHVybkFkZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVy
bkFkZHJlc3NPZmZzZXQobV9jYWxsc1tpXS5tX2NhbGwpOwogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGV4Y2VwdGlvbkluZm8gPSBtX2NhbGxzW2ldLm1fZXhjZXB0aW9uSW5mbzsKICAgICAgICAg
ICAgICAgICBtX2NvZGVCbG9jay0+Y2FsbFJldHVybkluZGV4VmVjdG9yKCkuYXBwZW5kKENhbGxS
ZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0KHJldHVybkFkZHJlc3NPZmZzZXQsIGV4Y2VwdGlv
bkluZm8pKTsKQEAgLTM5NiwxMyArMzk5LDIyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVG
dW5jdGlvbihKSVRDb2QKICAgICAgICAgaW5mby52YWx1ZUdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nl
c1tpXS5tX3ZhbHVlR1BSOwogICAgICAgICBpbmZvLnUudW5zZXQuc2NyYXRjaEdQUiA9IG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX3NjcmF0Y2hHUFI7CiAgICAgfQotCisgICAgCisgICAgbV9jb2Rl
QmxvY2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhtX2pzQ2FsbHMuc2l6ZSgpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CisgICAg
ICAgIGluZm8uaXNDYWxsID0gbV9qc0NhbGxzW2ldLm1faXNDYWxsOworICAgICAgICBpbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCkpOworICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0ubV90YXJnZXRUb0NoZWNrKTsKKyAg
ICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbCht
X2pzQ2FsbHNbaV0ubV9mYXN0Q2FsbCk7CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiBzd2l0
Y2ggdGhlIHJlZ2lzdGVyIGZpbGUgY2hlY2sgJiBhcml0eSBjaGVjayBvdmVyIHRvIERGR09wZXJ0
YWlvbiBzdHlsZSBjYWxscywgbm90IEpJVCBzdHVicy4KICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bFJlZ2lzdGVyRmlsZUNoZWNrLCBjdGlfcmVnaXN0ZXJfZmlsZV9jaGVjayk7CiAgICAgbGlua0J1
ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8g
Y3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7CiAK
ICAgICBlbnRyeVdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hl
Y2spOwotICAgIGVudHJ5ID0gbGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBlbnRyeSA9
IEpJVENvZGUobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKSwgSklUQ29kZTo6REZHSklUKTsKIH0K
IAogI2lmIERGR19KSVRfQVNTRVJUCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5MDQwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCBz
dHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAgICAg
ICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1faGFuZGxlc0V4Y2VwdGlvbnMo
ZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAtNzQsNiArNzUsMTcgQEAgc3RydWN0IENhbGxSZWNv
cmQgewogICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICwgbV9leGNlcHRp
b25DaGVjayhleGNlcHRpb25DaGVjaykKICAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0
aW9uSW5mbykKKyAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCisgICAgeworICAg
IH0KKworICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwgdGhhdCBtYXkgY2F1c2UgZXhjZXB0
aW9ucywgYnV0IHdoaWNoIGFyZSBoYW5kbGVkCisgICAgLy8gdGhyb3VnaCBzb21lIG1lY2hhbmlz
bSBvdGhlciB0aGFuIHRoZSBpbi1saW5lIGV4Y2VwdGlvbiBoYW5kbGVyLgorICAgIENhbGxSZWNv
cmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEV4Y2Vw
dGlvbkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICAgICAgOiBtX2NhbGwoY2FsbCkKKyAgICAgICAg
LCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRp
b25JbmZvKQorICAgICAgICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAg
fQogCkBAIC04MSw2ICs5Myw3IEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICBGdW5jdGlvblB0
ciBtX2Z1bmN0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fZXhjZXB0aW9uQ2hlY2s7
CiAgICAgRXhjZXB0aW9uSW5mbyBtX2V4Y2VwdGlvbkluZm87CisgICAgYm9vbCBtX2hhbmRsZXNF
eGNlcHRpb25zOwogfTsKIAogLy8gPT09IEpJVENvbXBpbGVyID09PQpAQCAtMTU4LDYgKzE3MSwx
MiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwogICAg
IH0KKyAgICAKKyAgICAvLyBOb3RpZnkgdGhlIEpJVCBvZiBhIGNhbGwgdGhhdCBkb2VzIG5vdCBy
ZXF1aXJlIGxpbmtpbmcuCisgICAgdm9pZCBub3RpZnlDYWxsKENhbGwgY2FsbCwgdW5zaWduZWQg
ZXhjZXB0aW9uSW5mbykKKyAgICB7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQo
Y2FsbCwgRnVuY3Rpb25QdHIoKSwgZXhjZXB0aW9uSW5mbykpOworICAgIH0KIAogICAgIC8vIEFk
ZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgog
ICAgIHZvaWQgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCkBAIC0xNzQs
NiArMTkzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChm
dW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5mbykpOwog
ICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KKyAgICAKKyAgICAvLyBBZGQgYSBj
YWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEgZmFzdCBleGNlcHRpb24gY2hlY2sgdGhhdCB0
ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCisgICAgQ2FsbCBhcHBlbmRDYWxsV2l0
aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVk
IGV4Y2VwdGlvbkluZm8pCisgICAgeworICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwo
KTsKKyAgICAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGJyYW5jaFRlc3RQdHIoWmVybywgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3Jk
KGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBleGNlcHRpb25JbmZvKSk7
CisgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CisgICAgfQogCiAgICAgLy8gSGVscGVyIG1l
dGhvZHMgdG8gY2hlY2sgbm9kZXMgZm9yIGNvbnN0YW50cy4KICAgICBib29sIGlzQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkKQEAgLTIzOSw2ICsyNjcsMTEgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc2VzLmFwcGVuZChQcm9wZXJ0eUFjY2Vzc1JlY29yZChm
dW5jdGlvbkNhbGwsIGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2ss
IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUsIGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGRlbHRhQ2FsbFRv
RG9uZSwgIGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKSk7CiAgICAgfQorICAgIAorICAg
IHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0
ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAg
ICB7CisgICAgICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93
Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBleGNlcHRpb25JbmZvKSk7CisgICAgfQogCiBw
cml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgdXNlZCBpbiBsaW5raW5nIHRoZSBzcGVjdWxh
dGl2ZSAmIG5vbi1zcGVjdWxhdGl2ZSBwYXRocyB0b2dldGhlci4KQEAgLTI2MSw3ICsyOTQsNyBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogCiAgICAgc3RydWN0
IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKLSAgICAgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoSklU
Q29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnQ4X3QgZGVsdGFDaGVja0ltbVRvQ2FsbCwg
aW50OF90IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2ssIGludDhfdCBkZWx0YUNhbGxUb0xvYWRPclN0
b3JlLCBpbnQ4X3QgZGVsdGFDYWxsVG9TbG93Q2FzZSwgaW50OF90IGRlbHRhQ2FsbFRvRG9uZSwg
aW50OF90IGJhc2VHUFIsIGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIpCisgICAg
ICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKENhbGwgZnVuY3Rpb25DYWxsLCBpbnQ4X3QgZGVsdGFD
aGVja0ltbVRvQ2FsbCwgaW50OF90IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2ssIGludDhfdCBkZWx0
YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQ4X3QgZGVsdGFDYWxsVG9TbG93Q2FzZSwgaW50OF90IGRl
bHRhQ2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIsIGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNj
cmF0Y2hHUFIpCiAgICAgICAgICAgICA6IG1fZnVuY3Rpb25DYWxsKGZ1bmN0aW9uQ2FsbCkKICAg
ICAgICAgICAgICwgbV9kZWx0YUNoZWNrSW1tVG9DYWxsKGRlbHRhQ2hlY2tJbW1Ub0NhbGwpCiAg
ICAgICAgICAgICAsIG1fZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayhkZWx0YUNhbGxUb1N0cnVjdENo
ZWNrKQpAQCAtMjg0LDggKzMxNywyNiBAQCBwcml2YXRlOgogICAgICAgICBpbnQ4X3QgbV92YWx1
ZUdQUjsKICAgICAgICAgaW50OF90IG1fc2NyYXRjaEdQUjsKICAgICB9OworICAgIAorICAgIHN0
cnVjdCBKU0NhbGxSZWNvcmQgeworICAgICAgICBKU0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwg
Q2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1
bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgICAgICAgICAgOiBtX2Zhc3RDYWxsKGZhc3RDYWxs
KQorICAgICAgICAgICAgLCBtX3Nsb3dDYWxsKHNsb3dDYWxsKQorICAgICAgICAgICAgLCBtX3Rh
cmdldFRvQ2hlY2sodGFyZ2V0VG9DaGVjaykKKyAgICAgICAgICAgICwgbV9pc0NhbGwoaXNDYWxs
KQorICAgICAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDYWxsIG1fZmFzdENhbGw7CisgICAgICAg
IENhbGwgbV9zbG93Q2FsbDsKKyAgICAgICAgRGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9DaGVjazsK
KyAgICAgICAgYm9vbCBtX2lzQ2FsbDsKKyAgICAgICAgdW5zaWduZWQgbV9leGNlcHRpb25JbmZv
OworICAgIH07CiAKICAgICBWZWN0b3I8UHJvcGVydHlBY2Nlc3NSZWNvcmQsIDQ+IG1fcHJvcGVy
dHlBY2Nlc3NlczsKKyAgICBWZWN0b3I8SlNDYWxsUmVjb3JkLCA0PiBtX2pzQ2FsbHM7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gOTA0MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCB0eXBlZGVmIHVpbnQzMl90
IEV4Y2VwdGlvbkluZm87CiAjZGVmaW5lIE5vZGVJc0p1bXAgICAgICAgIDB4NDAwMDAKICNkZWZp
bmUgTm9kZUlzQnJhbmNoICAgICAgMHg4MDAwMAogI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgIDB4
MTAwMDAwCisjZGVmaW5lIE5vZGVIYXNWYXJBcmdzICAgMHgyMDAwMDAKIAogLy8gVGhlc2UgdmFs
dWVzIHJlY29yZCB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5vZGUgKGFzIGNoZWNrZWQgYnkgTm9k
ZVJlc3VsdE1hc2ssIGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0LgogI2RlZmluZSBOb2RlUmVzdWx0
SlMgICAgICAweDEwMDAKQEAgLTEzOCw2ICsxMzksOSBAQCB0eXBlZGVmIHVpbnQzMl90IEV4Y2Vw
dGlvbkluZm87CiAgICAgbWFjcm8oQ29tcGFyZUVxLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oQ29tcGFyZVN0cmljdEVxLCBOb2RlUmVzdWx0SlMpIFwKICAg
ICBcCisgICAgLyogQ2FsbHMuICovXAorICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIFwKICAgICAvKiBOb2RlcyBm
b3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCcmVha3BvaW50LCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tIYXNJbnN0YW5jZSwgTm9kZU11c3RHZW5lcmF0ZSkg
XApAQCAtMTc3LDQzICsxODEsNjAgQEAgc3RydWN0IE9wSW5mbyB7CiAvLwogLy8gTm9kZSByZXBy
ZXNlbnRzIGEgc2luZ2xlIG9wZXJhdGlvbiBpbiB0aGUgZGF0YSBmbG93IGdyYXBoLgogc3RydWN0
IE5vZGUgeworICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07CisKICAgICAvLyBDb25zdHJ1
Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgogICAg
IE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgTm9kZUluZGV4
IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNo
aWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKICAgICAgICAgLCBleGNlcHRpb25JbmZv
KGV4Y2VwdGlvbkluZm8pCi0gICAgICAgICwgY2hpbGQxKGNoaWxkMSkKLSAgICAgICAgLCBjaGls
ZDIoY2hpbGQyKQotICAgICAgICAsIGNoaWxkMyhjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFs
UmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDAp
CiAgICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAg
IGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQu
Y2hpbGQyID0gY2hpbGQyOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7
CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4g
YW5kIGFuIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25J
bmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAg
ICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQot
ICAgICAgICAsIGNoaWxkMShjaGlsZDEpCi0gICAgICAgICwgY2hpbGQyKGNoaWxkMikKLSAgICAg
ICAgLCBjaGlsZDMoY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJ
bmZvKGltbS5tX3ZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFy
QXJncykpOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBjaGlsZDE7CisgICAgICAg
IGNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IGNoaWxkMjsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQu
Y2hpbGQzID0gY2hpbGQzOwogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1
cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KICAgICBOb2RlKE5vZGVU
eXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0xLCBPcEluZm8g
aW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKICAgICAgICAg
LCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCi0gICAgICAgICwgY2hpbGQxKGNoaWxkMSkK
LSAgICAgICAgLCBjaGlsZDIoY2hpbGQyKQotICAgICAgICAsIGNoaWxkMyhjaGlsZDMpCiAgICAg
ICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAg
LCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQogICAgICAg
ICAsIG1fb3BJbmZvMihpbW0yLm1fdmFsdWUpCiAgICAgeworICAgICAgICBBU1NFUlQoIShvcCAm
IE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxk
MTsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gY2hpbGQyOworICAgICAgICBjaGls
ZHJlbi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7CisgICAgfQorICAgIAorICAgIC8vIENvbnN0cnVj
dCBhIG5vZGUgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBjaGlsZHJlbiBhbmQgbm8gaW1tZWRp
YXRlIHZhbHVlcy4KKyAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbklu
Zm8gZXhjZXB0aW9uSW5mbywgdW5zaWduZWQgZmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRy
ZW4pCisgICAgICAgIDogb3Aob3ApCisgICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
CisgICAgICAgICwgbV9yZWZDb3VudCgwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wICYgTm9k
ZUhhc1ZhckFyZ3MpOworICAgICAgICBjaGlsZHJlbi52YXJpYWJsZS5maXJzdENoaWxkID0gZmly
c3RDaGlsZDsKKyAgICAgICAgY2hpbGRyZW4udmFyaWFibGUubnVtQ2hpbGRyZW4gPSBudW1DaGls
ZHJlbjsKICAgICB9CiAKICAgICBib29sIG11c3RHZW5lcmF0ZSgpCkBAIC0zNTQsMTMgKzM3NSw1
MSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbXVzdEdlbmVyYXRlKCkg
PyBtX3JlZkNvdW50IC0gMSA6IG1fcmVmQ291bnQ7CiAgICAgfQorICAgIAorICAgIE5vZGVJbmRl
eCBjaGlsZDEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykp
OworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOworICAgIH0KIAorICAgIE5v
ZGVJbmRleCBjaGlsZDIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFy
QXJncykpOworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQyOworICAgIH0KKwor
ICAgIE5vZGVJbmRleCBjaGlsZDMoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEob3AgJiBOb2Rl
SGFzVmFyQXJncykpOworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQzOworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBmaXJzdENoaWxkKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChvcCAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnZhcmlhYmxl
LmZpcnN0Q2hpbGQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgcmV0dXJu
IGNoaWxkcmVuLnZhcmlhYmxlLm51bUNoaWxkcmVuOworICAgIH0KKyAgICAKICAgICAvLyBUaGlz
IGVudW0gdmFsdWUgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBl
IG9wOwogICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRp
b24gKGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KICAgICBFeGNl
cHRpb25JbmZvIGV4Y2VwdGlvbkluZm87CiAgICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNo
aWxkcmVuICgwIGZvciBubyBjaGlsZCkuCi0gICAgTm9kZUluZGV4IGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDM7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgTm9kZUlu
ZGV4IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDM7CisgICAgICAgIH0gZml4ZWQ7CisgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkOworICAgICAgICAgICAgdW5z
aWduZWQgbnVtQ2hpbGRyZW47CisgICAgICAgIH0gdmFyaWFibGU7CisgICAgfSBjaGlsZHJlbjsK
IAogcHJpdmF0ZToKICAgICAvLyBUaGUgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNwaWxsIGxv
Y2F0aW9uKSBhc3NvY2lhdGVkIHdpdGggdGhpcyAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTA0MDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjY1LDggKzI2NSw4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6
Omtub3duQ29uc3RhbnRBcmkKIAogdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9w
KE5vZGVUeXBlIG9wLCBOb2RlICZub2RlKQogewotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhp
cywgbm9kZS5jaGlsZDEpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGls
ZDIpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
SlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAKICAgICBHUFJS
ZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigp
OwpAQCAtMjc3LDkgKzI3Nyw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhP
cChOb2QKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCi0g
ICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkpCisgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMSgpKSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlcikpOwotICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKQorICAg
IGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpCiAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAKICAgICBzd2l0Y2ggKG9wKSB7CkBA
IC0zNDYsOCArMzQ2LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBu
bwogewogICAgIC8vIEZJWE1FOiBzaG91bGQgZG8gc29tZSBwZWVwaG9sZSB0byBmdXNlIGNvbXBh
cmUvYnJhbmNoCiAgICAgICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5j
aGlsZDEpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOworICAg
IEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9w
ZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICBHUFJSZWcgYXJnMUdQUiA9IGFy
ZzEuZ3ByKCk7CiAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwogICAgIApAQCAtMzU2
LDkgKzM1Niw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm8KICAg
ICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCi0gICAgaWYgKCFp
c0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkpCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2Rl
LmNoaWxkMSgpKSkKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cikpOwotICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKQorICAgIGlmICghaXNL
bm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAKICAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJn
MUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIE5vblNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAg
Y2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhp
cywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyB0aGlzR1BSID0gdGhpc1ZhbHVlLmdwcigp
OwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogCkBAIC00MjQsNyArNDI0LDcgQEAgdm9pZCBO
b25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgU2V0
TG9jYWw6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEp
OworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KG5vZGUubG9jYWwoKSkpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtNDMzLDIzICs0MzMsMjMgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShTcGVjdWxhdAogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CiAgICAg
Y2FzZSBCaXRYb3I6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7
Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAg
ICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBJ
bnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMik7CiAKLSAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1
ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgp
KSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICB9IGVsc2UgaWYgKGlzSW50
MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50
KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSk7CiAKLSAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNo
aWxkMiksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2
YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSwgb3AxLmdwcigpLCByZXN1bHQuZ3By
KCkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMik7CisgICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3Ay
KTsKIAogICAgICAgICAgICAgR1BSUmVnIHJlZzEgPSBvcDEuZ3ByKCk7CkBAIC00NjMsMTEgKzQ2
MywxMSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgY2Fz
ZSBCaXRSU2hpZnQ6CiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgY2FzZSBCaXRVUlNoaWZ0Ogot
ICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAg
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgaWYgKGlzSW50
MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwogCi0gICAgICAgICAgICBpbnQgc2hpZnRBbW91bnQgPSB2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlLmNoaWxkMikgJiAweDFmOworICAgICAgICAgICAgaW50IHNoaWZ0QW1v
dW50ID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkgJiAweDFmOwogICAgICAg
ICAgICAgLy8gU2hpZnRzIGJ5IHplcm8gc2hvdWxkIGhhdmUgYmVlbiBvcHRpbWl6ZWQgb3V0IG9m
IHRoZSBncmFwaCEKICAgICAgICAgICAgIEFTU0VSVChzaGlmdEFtb3VudCk7CiAgICAgICAgICAg
ICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIHNoaWZ0QW1vdW50LCByZXN1bHQuZ3ByKCkpOwpAQCAt
NDc1LDggKzQ3NSw4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQK
ICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgc2hpZnQgYW1v
dW50IHRvIGJlIHVzZWQgYXMgdGhlIHJlc3VsdCwgTWFjcm9Bc3NlbWJsZXIgZG9lcyBub3QgcGVy
bWl0IHRoaXMuCi0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEpOwotICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsK
KyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICAgICAgR1BS
UmVnIHJlZzEgPSBvcDEuZ3ByKCk7CkBAIC00ODgsNyArNDg4LDcgQEAgdm9pZCBOb25TcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVUlu
dDMyVG9OdW1iZXI6IHsKLSAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKTsKKyAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICBGUFJUZW1wb3JhcnkgYm94ZXIodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgCkBAIC01MTMsMjYgKzUxMywyNiBAQCB2b2lkIE5v
blNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBWYWx1
ZVRvSW50MzI6IHsKLSAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEp
KTsKKyAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOwogCi0g
ICAgICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAgIElu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIGlmIChpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEpOwogICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIo
KSk7CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBHZW5lcmF0aW9u
SW5mbyYgY2hpbGRJbmZvID0gbV9nZW5lcmF0aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGUuY2hp
bGQxXS52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBjaGlsZElu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV0udmlydHVh
bFJlZ2lzdGVyKCldOwogICAgICAgICBpZiAoKGNoaWxkSW5mby5yZWdpc3RlckZvcm1hdCgpIHwg
RGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGUpIHsKLSAgICAgICAgICAgIERvdWJs
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgICAgIERvdWJsZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICAgICAgICAgIG51bWJlclRvSW50MzIob3AxLmZwcigpLCByZXN1bHQu
Z3ByKCkpOwogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7CiAgICAgICAgIHZhbHVlVG9JbnQzMihvcDEsIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CkBAIC01NDAs
MTggKzU0MCwxOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAg
ICAgfQogCiAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOiB7Ci0gICAgICAgIEFTU0VSVCghaXNJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQxKSk7Ci0gICAgICAgIEFTU0VSVCghaXNEb3VibGVDb25zdGFu
dChub2RlLmNoaWxkMSkpOworICAgICAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNo
aWxkMSgpKSk7CisgICAgICAgIEFTU0VSVCghaXNEb3VibGVDb25zdGFudChub2RlLmNoaWxkMSgp
KSk7CiAKLSAgICAgICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKSkgewotICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgaWYg
KGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICAgICAgdmFsdWVUb051bWJlcihvcDEsIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CkBAIC01NjAs
MTMgKzU2MCwxMyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAK
ICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAgIGtub3duQ29uc3RhbnRB
cml0aE9wKG9wLCBub2RlLmNoaWxkMiwgbm9kZS5jaGlsZDEsIHRydWUpOworICAgICAgICBpZiAo
aXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBrbm93bkNvbnN0
YW50QXJpdGhPcChvcCwgbm9kZS5jaGlsZDIoKSwgbm9kZS5jaGlsZDEoKSwgdHJ1ZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGlzSW50MzJD
b25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgIGtub3duQ29uc3RhbnRBcml0aE9w
KG9wLCBub2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIsIGZhbHNlKTsKKyAgICAgICAgaWYgKGlzSW50
MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAga25vd25Db25zdGFudEFy
aXRoT3Aob3AsIG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIGZhbHNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTc1LDggKzU3NSw4IEBAIHZvaWQg
Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxk
MikpIHsKLSAgICAgICAgICAgIGtub3duQ29uc3RhbnRBcml0aE9wKEFyaXRoU3ViLCBub2RlLmNo
aWxkMSwgbm9kZS5jaGlsZDIsIGZhbHNlKTsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChu
b2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3AoQXJpdGhT
dWIsIG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIGZhbHNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTkwLDggKzU5MCw4IEBAIHZvaWQgTm9uU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIEFyaXRoRGl2
OiB7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAg
ICAgRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBEb3VibGVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKICAgICAgICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKICAgICAgICAgRlBS
UmVnIG9wMkZQUiA9IG9wMi5mcHIoKTsKQEAgLTYwNCw4ICs2MDQsOCBAQCB2b2lkIE5vblNwZWN1
bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBBcml0aE1vZDog
ewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGVheCh0aGlz
LCBYODZSZWdpc3RlcnM6OmVheCk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBlZHgodGhpcywgWDg2
UmVnaXN0ZXJzOjplZHgpOwogCkBAIC02MjMsOSArNjIzLDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9u
ZTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbW9kQnlaZXJvOwogICAgIAotICAgICAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMSgpKSkKICAgICAgICAgICAgIGZpcnN0T3BOb3RJbnQgPSBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIp
KQorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQogICAgICAgICAg
ICAgc2Vjb25kT3BOb3RJbnQgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCBvcDJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgCiAgICAgICAg
IG1vZEJ5WmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3Ay
R1BSKTsKQEAgLTY1NSwxOCArNjU1LDE4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoU3BlY3VsYXQKICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKSkpKSwgWDg2UmVnaXN0ZXJzOjplZHgpOwogICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUu
Y2hpbGQxKSkgeworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7
CiAgICAgICAgICAgICBmaXJzdE9wTm90SW50LmxpbmsoJm1faml0KTsKICAgICAgICAgCiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzZWNvbmRPcE5vdEludDI7CiAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpCisgICAgICAgICAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQogICAgICAgICAgICAgICAgIHNlY29u
ZE9wTm90SW50MiA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9wMkdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgLy8gZmlyc3Qgb3AgaXMgYSBkb3VibGUsIHNlY29uZCBvcCBpcyBhbiBpbnQuCiAgICAg
ICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDJHUFIsIG9wMkZQUik7CiAKLSAg
ICAgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKSB7CisgICAgICAgICAg
ICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CiAgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgZ290U2Vjb25kT3AgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBzZWNvbmRPcE5vdEludDIubGluaygmbV9qaXQpOwpAQCAtNjgy
LDcgKzY4Miw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAg
ICAgICAgICAgIGdvdERvdWJsZUFyZ3MgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIH0KICAgICAK
LSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpIHsKKyAgICAgICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgewogICAgICAgICAgICAgc2Vjb25kT3BO
b3RJbnQubGluaygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgICAgIC8vIHdlIGtub3cgdGhh
dCB0aGUgZmlyc3Qgb3AgaXMgYW4gaW50LCBhbmQgdGhlIHNlY29uZCBpcyBhIGRvdWJsZQpAQCAt
NjkwLDEwICs2OTAsMTAgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxh
dAogICAgICAgICAgICAgdW5ib3hEb3VibGUob3AyR1BSLCBvcDJGUFIpOwogICAgICAgICB9CiAg
ICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEpKQorICAgICAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQogICAgICAgICAgICAgZ290RG91Ymxl
QXJncy5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9k
ZS5jaGlsZDEpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpIHsKKyAgICAgICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS5j
aGlsZDIoKSkpIHsKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKFg4NlJlZ2lz
dGVyczo6ZWR4KTsKICAgICAgICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8RlBSSW5mbzo6YXJndW1l
bnRGUFIwLCBGUFJJbmZvOjphcmd1bWVudEZQUjE+KG9wMUZQUiwgb3AyRlBSKTsKICAgICAgICAg
ICAgIG1faml0LmFwcGVuZENhbGwoZm1vZCk7CkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBOb25T
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgTG9naWNh
bE5vdDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgYXJnMUdQUiA9
IGFyZzEuZ3ByKCk7CkBAIC03NTcsOCArNzU3LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShTcGVjdWxhdAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0QnlWYWw6IHsK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBjbGVhbkluZGV4KHRoaXMp
OwpAQCAtODA5LDkgKzgwOSw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3Bl
Y3VsYXQKIAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0g
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYXJnMyh0aGlzLCBub2RlLmNoaWxkMyk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFy
ZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzModGhpcywgbm9k
ZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICAg
ICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwogICAgICAgICBHUFJSZWcgYXJnM0dQUiA9
IGFyZzMuZ3ByKCk7CkBAIC04MjUsNyArODI1LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgR2V0QnlJZDogewotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwog
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpAQCAtODM5LDggKzgzOSw4
IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAg
ICBjYXNlIFB1dEJ5SWQ6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQy
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtODU0
LDggKzg1NCw4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAg
ICB9CiAKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGls
ZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwpAQCAtODgwLDcgKzg4MCw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
Z2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
ICAgICAgICAgCkBAIC05MDcsNyArOTA3LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogCkBAIC05MzYsNyArOTM2
LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogI2VuZGlmCiAK
ICAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVHUFIuCi0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgbV9qaXQubW92ZShvcDEu
Z3ByKCksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAogICAgICAgICAvLyBHcmFiIHRoZSBy
ZXR1cm4gYWRkcmVzcy4KQEAgLTk1Miw3ICs5NTIsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOiB7
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJU
ZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogCiAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFz
ZS5ncHIoKTsKQEAgLTk4MCw5ICs5ODAsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBJbnN0YW5jZU9mOiB7Ci0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHBy
b3RvdHlwZSh0aGlzLCBub2RlLmNoaWxkMyk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm90b3R5cGUodGhpcywg
bm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMsIGJhc2Up
OwogCiAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwpAQCAtMTA1MSw2ICsx
MDUxLDEzIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICNlbHNl
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCisgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBjYXNlIENhbGw6CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0
aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldKTsK
KyAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAgICAgICAgZW1pdENh
bGwobm9kZSwgY2FsbGVlR1BSKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKG5v
ZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gOTA0MDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw3IEBACiAgICAgICAgICJtb3YgKCVyc3ApLCAlIiBTVFJJTkdJWkUocmVn
aXN0ZXIpICJcbiIgXAogICAgICAgICAiam1wIF8iIFNUUklOR0laRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfQVJHMl9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kpCiAjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9BUkc0X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKICNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X0FSRzVfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCiAKQEAgLTM5Nyw2ICszOTgsMTE0IEBAIGJvb2wgb3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gSlNWYWx1ZTo6c3Ry
aWN0RXF1YWwoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMikpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBnZXRIb3N0Q2FsbFJldHVyblZh
bHVlKCk7CitFbmNvZGVkSlNWYWx1ZSBnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0
ZShFeGVjU3RhdGUqKTsKKworYXNtICgKKyIuZ2xvYmwgXyIgU1RSSU5HSVpFKGdldEhvc3RDYWxs
UmV0dXJuVmFsdWUpICJcbiIKKyJfIiBTVFJJTkdJWkUoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkg
IjoiICJcbiIKKyAgICAibW92IC00MCglcjEzKSwgJXIxM1xuIgorICAgICJtb3YgJXIxMywgJXJk
aVxuIgorICAgICJqbXAgXyIgU1RSSU5HSVpFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhl
Y1N0YXRlKSAiXG4iCispOworCitFbmNvZGVkSlNWYWx1ZSBnZXRIb3N0Q2FsbFJldHVyblZhbHVl
V2l0aEV4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShleGVjLT5nbG9iYWxEYXRhKCkuaG9zdENhbGxSZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRp
YyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2Fs
bGVlKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7
CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRh
KGNhbGxlZSwgY2FsbERhdGEpOworICAgIAorICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlw
ZUpTKTsKKyAgICAKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7CisgICAgICAg
IGlmICghZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coZXhlY0Nh
bGxlZS0+cmVnaXN0ZXJzKCkpKSB7CisgICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24g
PSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihl
eGVjLT5zY29wZUNoYWluKCkpOworICAgICAgICAKKyAgICAgICAgZ2xvYmFsRGF0YS0+aG9zdENh
bGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24o
ZXhlY0NhbGxlZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGdsb2JhbERhdGEtPmV4Y2VwdGlv
bikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSk7CisgICAgfQorICAgIAorICAgIEFTU0VS
VChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOworICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNl
cHRpb24gPSBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihleGVjLCBjYWxsZWUpOworICAgIHJldHVy
biAwOworfQorCit2b2lkKiBvcGVyYXRpb25MaW5rQ2FsbFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNT
dGF0ZSosIFJldHVybkFkZHJlc3NQdHIpOworRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FSRzJfUkVU
VVJOX0FERFJFU1Mob3BlcmF0aW9uTGlua0NhbGwpOwordm9pZCogb3BlcmF0aW9uTGlua0NhbGxX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcykKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxs
ZXJGcmFtZSgpOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7CisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNW
YWx1ZSgpOworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9u
KCpnbG9iYWxEYXRhLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25D
ZWxsKQorICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNW
YWx1ZSk7CisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gYXNGdW5jdGlvbihjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1
dGFibGUoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0
aW9uKCkpCisgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9y
Q2FsbCgpLmFkZHJlc3NGb3JDYWxsKCk7CisgICAgZWxzZSB7CisgICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoZXhlYywgY2FsbGVlLT5zY29wZSgpKTsKKyAgICAgICAg
aWYgKGVycm9yKSB7CisgICAgICAgICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVT
dGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgICAgICBjb2RlQmxvY2sgPSAmZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRl
Y29kZUZvckNhbGwoKTsKKyAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycykpCisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0
ZWRKSVRDb2RlRm9yQ2FsbCgpLmFkZHJlc3NGb3JDYWxsKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JD
YWxsV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihj
YWxsZWUtPnNjb3BlKCkpOworICAgIH0KKyAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8ocmV0dXJuQWRkcmVzcyk7CisgICAg
aWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnNldFNl
ZW4oKTsKKyAgICBlbHNlCisgICAgICAgIGRmZ0xpbmtDYWxsKGV4ZWNDYWxsZWUsIGNhbGxMaW5r
SW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOworICAgIHJldHVybiBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisKK3ZvaWQqIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNT
dGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7CisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVl
QXNWYWx1ZSgpOworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0
aW9uKCpnbG9iYWxEYXRhLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rp
b25DZWxsKQorICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVl
QXNWYWx1ZSk7CisgICAgCisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKGNh
bGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1
bmN0aW9uLT5leGVjdXRhYmxlKCk7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9u
KCkpCisgICAgICAgIHJldHVybiBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgp
LmFkZHJlc3NGb3JDYWxsKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKworICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oZXhlY3V0YWJsZSk7CisgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRh
YmxlLT5jb21waWxlRm9yQ2FsbChleGVjLCBmdW5jdGlvbi0+c2NvcGUoKSk7CisgICAgaWYgKGVy
cm9yKSB7CisgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBlcnJvcjsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlQ2hhaW4oZnVu
Y3Rpb24tPnNjb3BlKCkpOworICAgIHJldHVybiBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2soKS5leGVjdXRhYmxlQWRkcmVzcygpOworfQor
CiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25JbnN0YW5jZU9mKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFByb3RvdHlwZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTA0MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBA
QCBib29sIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosCiBib29sIG9wZXJhdGlv
bkNvbXBhcmVHcmVhdGVyRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CiBib29sIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AyKTsKIGJvb2wgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwordm9pZCogb3Bl
cmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKik7Cit2b2lkKiBvcGVyYXRpb25MaW5rQ2FsbChF
eGVjU3RhdGUqKTsKIAogLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0
aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2ggaXMKIC8vIHRoZSByZXR1
cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBl
ciBvcGVyYXRpb25zIGFib3ZlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
cGF0Y2guY3BwCShyZXZpc2lvbiA5MDQwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw2ICszNzUsMjEgQEAgdm9pZCBk
ZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIAogICAgICAgICBkZmdSZXBhdGNoQ2Fs
bChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3By
aWF0ZVB1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiB9CiAKK3ZvaWQgZGZnTGlua0Nh
bGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2Nr
KiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNvZGVQdHIpCit7CisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5j
YWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBpZiAoIWNhbGxlZUNvZGVCbG9j
ayB8fCBzdGF0aWNfY2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkp
ID09IGNhbGxlZUNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSB7CisgICAgICAgIEFTU0VSVCgh
Y2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOworICAgICAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNl
dChleGVjLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxMaW5rSW5mby5ob3RQYXRo
QmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQ
dHIpOworICAgIH0KKyAgICAKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25D
YWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLCBvcGVyYXRpb25WaXJ0dWFsQ2Fs
bCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNpb24gOTA0MDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NiArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiB2b2lkIGRmZ1JlcGF0
Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdCdWlsZEdldEJ5SURM
aXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVj
U3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgZGZnTGlua0NhbGwoRXhlY1N0
YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiA5MDQwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsMTcgKzM2MywxNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlCiAgICAgICAgIG5vdFRha2VuID0gdG1wOwog
ICAgIH0KIAotICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7Ci0gICAgICAg
IGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpOwotICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgaW50MzJfdCBpbW0g
PSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBhZGRCcmFu
Y2gobV9qaXQuYnJhbmNoMzIoY29uZGl0aW9uLCBKSVRDb21waWxlcjo6SW1tMzIoaW1tKSwgb3Ay
LmdwcigpKSwgdGFrZW4pOwotICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQyKSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEpOwotICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQyKTsKKyAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkg
eworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CisgICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGls
ZDIoKSk7CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIG9wMS5n
cHIoKSwgSklUQ29tcGlsZXI6OkltbTMyKGltbSkpLCB0YWtlbik7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIG9wMS5ncHIoKSwg
b3AyLmdwcigpKSwgdGFrZW4pOwogICAgIH0KIApAQCAtMzk4LDggKzM5OCw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUNhbGwKICAgICAgICAgbm90VGFrZW4gPSB0bXA7
CiAgICAgfQogCi0gICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgIEpTVmFsdWVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKICAgICBH
UFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBAIC00MjMs
MjAgKzQyMywyMCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAg
ICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5j
ZSB0aGUgY29tcGFyZS4gCiAgICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9
PSAxKTsKIAotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSwg
bm9kZS5jaGlsZDIpKQorICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSgpLCBub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVn
ZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kaXRpb24pOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVDYWxsKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwg
b3BlcmF0aW9uKTsKIAotICAgICAgICB1c2Uobm9kZS5jaGlsZDEpOwotICAgICAgICB1c2Uobm9k
ZS5jaGlsZDIpOworICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIE5vcm1hbCBjYXNlLCBub3QgZnVz
ZWQgdG8gYnJhbmNoLgotICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSk7Ci0gICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hp
bGQyKTsKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CisgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgbV9qaXQu
Y29tcGFyZTMyKGNvbmRpdGlvbiwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7
CkBAIC00ODIsMjAgKzQ4MiwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICBzd2l0Y2ggKG1faml0LmdyYXBo
KCkuZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpKSB7CiAgICAgICAgIGNhc2UgUHJlZGljdElu
dDMyOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLmNoaWxkMSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUuZ3By
KCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBQcmVkaWN0QXJyYXk6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKGNlbGwuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkp
OwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1faml0LnN0b3Jl
UHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsK
ICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtNTA3LDIzICs1MDcsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CiAgICAgY2FzZSBCaXRY
b3I6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAg
ICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMik7CiAKLSAgICAgICAgICAgIGJpdE9w
KG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSksIG9wMi5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSgpKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICB9IGVsc2Ug
aWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAgICAgIGJpdE9wKG9wLCB2
YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMiksIG9wMS5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxk
MigpKSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
Mik7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSwgb3AyKTsKIAogICAgICAgICAgICAgR1BSUmVnIHJlZzEgPSBvcDEuZ3ByKCk7CkBAIC01Mzcs
MTcgKzUzNywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgY2FzZSBCaXRVUlNo
aWZ0OgotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAg
ICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAgICAgICBzaGlm
dE9wKG9wLCBvcDEuZ3ByKCksIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSAmIDB4
MWYsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsK
IAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIERvIG5vdCBhbGxvdyBzaGlmdCBh
bW91bnQgdG8gYmUgdXNlZCBhcyB0aGUgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlciBkb2VzIG5vdCBw
ZXJtaXQgdGhpcy4KLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIo
KTsKQEAgLTU1OSw3ICs1NTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewotICAg
ICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICAvLyBUZXN0IHRoZSBvcGVyYW5kIGlzIHBv
c2l0aXZlLgpAQCAtNTcxLDcgKzU3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewotICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgbV9qaXQubW92ZShvcDEu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCwgb3AxLmZvcm1hdCgpKTsKQEAgLTU3OSwxNCArNTc5LDE0IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IFZhbHVlVG9OdW1iZXI6IHsKLSAgICAgICAgaWYgKGlzSW50ZWdlcihub2RlLmNoaWxkMSkpIHsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSk7CisgICAgICAgIGlmIChpc0ludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgICAgIG1faml0
Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwogICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsK
ICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwpAQCAt
NTk1LDEwICs1OTUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgIGlm
IChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMikpIHsKLSAg
ICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7Ci0gICAgICAgICAg
ICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpOwot
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNo
aWxkMik7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCks
IG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQxKCkpKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AyLmdwcigpLCBJ
bW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKSk7CkBAIC02MDcsOSArNjA3LDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzSW50MzJD
b25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgICAgIGludDMyX3Qg
aW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAg
ICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6
Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTYx
OCw4ICs2MTgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEp
OwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hp
bGQyKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxLCBvcDIpOwogCiAgICAgICAgICAgICBHUFJSZWcgZ3ByMSA9IG9wMS5ncHIoKTsKQEAgLTYz
OCw4ICs2MzgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwpA
QCAtNjUxLDEwICs2NTEsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAg
aWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKLSAgICAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAg
ICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKTsKKyAg
ICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGls
ZDIoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkp
IHsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIp
LCByZXN1bHQuZ3ByKCkpKTsKQEAgLTY2Myw4ICs2NjMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
bV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIG9w
Mi5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CkBAIC02NzMsOCArNjczLDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAg
RlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CkBAIC02ODYsOSArNjg2LDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNdWw6
IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUu
Y2hpbGQyKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9w
MS5ncHIoKTsKQEAgLTcwNCw4ICs3MDQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgIEZQUlJlZyByZWcx
ID0gb3AxLmZwcigpOwpAQCAtNzE4LDggKzcxOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICBGUFJSZWcgcmVnMSA9
IG9wMS5mcHIoKTsKQEAgLTczMSw4ICs3MzEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IGVheCh0aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSBlZHgodGhpcywgWDg2UmVnaXN0ZXJzOjplZHgpOwogICAgICAgICBHUFJSZWcg
b3AxR3ByID0gb3AxLmdwcigpOwpAQCAtNzU5LDcgKzc1OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklYTUU6IFdlIGNvdWxkIHJldXNlLCBidXQgb24g
c3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJlY292ZXJ5IHRvIHJlc3RvcmUgdGFnIChha2lu
IHRvIGFkZCkuCiAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKQEAgLTc5OCw4ICs3OTgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAg
IG1faml0LmNvbXBhcmUzMihKSVRDb21waWxlcjo6RXF1YWwsIG9wMS5ncHIoKSwgb3AyLmdwcigp
LCByZXN1bHQuZ3ByKCkpOwpAQCAtODExLDE4ICs4MTEsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAg
ICAgICAgTm9kZUluZGV4IGFsaWFzID0gbm9kZS5jaGlsZDM7CisgICAgICAgIE5vZGVJbmRleCBh
bGlhcyA9IG5vZGUuY2hpbGQzKCk7CiAgICAgICAgIGlmIChhbGlhcyAhPSBOb05vZGUpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiByZXN1bHQgc2hvdWxkIGJlIGFibGUgdG8gcmV1c2UgY2hpbGQx
LCBjaGlsZDIuIFNob3VsZCBoYXZlIGFuICdVbnVzZWRPcGVyYW5kJyB0eXBlLgotICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYWxpYXNlZFZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKTsKKyAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGFsaWFzZWRWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYWxpYXNlZFZhbHVlKTsKICAg
ICAgICAgICAgIG1faml0Lm1vdmUoYWxpYXNlZFZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwog
ICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOwpAQCAtODM1LDcgKzgzNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJy
YXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92
ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0
byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0gICAgICAgIE5vZGUmIGJh
c2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMV07CisgICAgICAgIE5vZGUmIGJhc2VO
b2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXTsKICAgICAgICAgaWYgKGJhc2VOb2Rl
Lm9wICE9IEdldExvY2FsIHx8IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihiYXNlTm9kZS5s
b2NhbCgpKSAhPSBQcmVkaWN0QXJyYXkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKQEAgLTg1Miw5ICs4NTIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbDogewotICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDMpOworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVy
dHkgJiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgpA
QCAtODY3LDcgKzg2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHBy
b3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgog
ICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5
LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0gICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQu
Z3JhcGgoKVtub2RlLmNoaWxkMV07CisgICAgICAgIE5vZGUmIGJhc2VOb2RlID0gbV9qaXQuZ3Jh
cGgoKVtub2RlLmNoaWxkMSgpXTsKICAgICAgICAgaWYgKGJhc2VOb2RlLm9wICE9IEdldExvY2Fs
IHx8IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihiYXNlTm9kZS5sb2NhbCgpKSAhPSBQcmVk
aWN0QXJyYXkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3aXRoaW5BcnJheUJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSk7CkBAIC05MDksOSArOTA5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDMpOworICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7
CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKQEAgLTk0MSw3ICs5NDEsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBCcmFuY2g6IHsK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BS
UmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CiAKICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9
IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRl
Y29kZU9mZnNldCgpKTsKQEAgLTk3Nyw3ICs5NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAjZW5kaWYKIAogICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3Vs
dCBpbiByZXR1cm5WYWx1ZUdQUi4KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOwogCiAgICAgICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgpAQCAtOTkzLDcgKzk5
Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAK
ICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRo
aXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyh0
aGlzVmFsdWUuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsK
QEAgLTEwMDQsNyArMTAwNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgYmFzZSk7CiAKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKQEAgLTEwMTYsOCArMTAxNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5SWQ6IHsKLSAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwogCiAgICAgICAgIGNhY2hlZFB1dEJ5SWQoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCks
IHNjcmF0Y2guZ3ByKCksIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QpOwpAQCAt
MTAyNyw4ICsxMDI3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewotICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CiAKICAgICAgICAgY2FjaGVkUHV0QnlJZChiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgc2Ny
YXRjaC5ncHIoKSwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7CkBAIC0xMDQ5LDcg
KzEwNDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGdsb2JhbE9iamVjdCh0aGlz
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIApAQCAtMTA2
OCw3ICsxMDY4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZTogewotICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHN0cnVjdHVyZSh0aGlzKTsKIAogICAgICAgICAvLyBTcGVjdWxhdGUgdGhhdCBiYXNlICdJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJy4KQEAgLTEwODAsOSArMTA4MCw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEluc3Rh
bmNlT2Y6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5j
aGlsZDEpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgLy8gQmFzZSB1bnVzZWQgc2luY2Ugd2Ugc3BlY3VsYXRlIGRlZmF1
bHQgSW5zdGFuY2VPZiBiZWhhdmlvdXIgaW4gQ2hlY2tIYXNJbnN0YW5jZS4KLSAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgcHJvdG90eXBlKHRoaXMsIG5vZGUuY2hpbGQzKTsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvdG90eXBlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogCiAg
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCkBAIC0xMTI1LDYgKzExMjUsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogI2Vsc2UKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIG1f
aml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV0pOworICAgICAg
ICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOworICAgICAgICBlbWl0Q2FsbChub2Rl
LCBjYWxsZWVHUFIpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAobm9kZS5oYXNS
ZXN1bHQoKSAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTA0MDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1Miw3ICsxNTIsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBs
YXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCiAgICAgICAgIE5vZGUmIGxhc3ROb2Rl
ID0gbV9qaXQuZ3JhcGgoKVtsYXN0Tm9kZUluZGV4XTsKLSAgICAgICAgcmV0dXJuIGxhc3ROb2Rl
Lm9wID09IEJyYW5jaCAmJiBsYXN0Tm9kZS5jaGlsZDEgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0
Tm9kZUluZGV4IDogTm9Ob2RlOworICAgICAgICByZXR1cm4gbGFzdE5vZGUub3AgPT0gQnJhbmNo
ICYmIGxhc3ROb2RlLmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4ID8gbGFzdE5vZGVJbmRleCA6
IE5vTm9kZTsKICAgICB9CiAKICAgICBib29sIGlzSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
aAkocmV2aXNpb24gOTA0MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpT
QyAgewogICAgIC8vIFBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gbW9zdCBmdW5jdGlv
bnMuCiAgICAgY2xhc3MgRXhlY1N0YXRlIDogcHJpdmF0ZSBSZWdpc3RlciB7CiAgICAgcHVibGlj
OgorICAgICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUoKSBjb25zdCB7IHJldHVybiB0aGlzW1Jl
Z2lzdGVyRmlsZTo6Q2FsbGVlXS5qc1ZhbHVlKCk7IH0KICAgICAgICAgSlNPYmplY3QqIGNhbGxl
ZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmZ1bmN0aW9uKCk7
IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiB0aGlzW1Jl
Z2lzdGVyRmlsZTo6Q29kZUJsb2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7IH0KICAgICAgICAg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkocmV2aXNpb24gOTA0MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDYgQEAgSklUOjpKSVQoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQgogICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEp
CiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sg
PyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCi0gICAgLCBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+bnVtYmVyT2ZD
YWxsTGlua0luZm9zKCkgOiAwKQogICAgICwgbV9ieXRlY29kZU9mZnNldCgodW5zaWduZWQpLTEp
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAsIG1fanVtcFRhcmdldEluZGV4KDApCkBAIC0z
NTUsNyArMzU0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jb2RlQmxv
Y2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpKTsKKyAgICBBU1NFUlQobV9jYWxsTGlua0luZm9J
bmRleCA9PSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVz
ZSB3aXRoIEFTU0VSVHMuCkBAIC00NjQsNyArNDYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICAgICB9CiAKICAgICBBU1NFUlQobV9wcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uSW5kZXggPT0gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOwot
ICAgIEFTU0VSVChtX2NhbGxMaW5rSW5mb0luZGV4ID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNh
bGxMaW5rSW5mb3MoKSk7CisgICAgQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogCiAjaWZuZGVmIE5ERUJVRwog
ICAgIC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRz
LgpAQCAtNTg4LDEwICs1ODcsMTEgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQ
dHIqIGZ1bgogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9j
YXRpb24pOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2YobV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4pOwogICAg
IH0KKyAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVj
dHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAg
ICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKICAg
ICAgICAgaW5mby5pc0NhbGwgPSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ld
LmlzQ2FsbDsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5j
YWxsUmV0dXJuTG9jYXRpb24pOworICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IENv
ZGVMb2NhdGlvbkxhYmVsKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbikpOwogICAgICAg
ICBpbmZvLmhvdFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9jYWxsU3RydWN0
dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4pOwogICAgICAgICBpbmZvLmhv
dFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhPdGhlcik7CiAgICAgfQpAQCAtNjA2LDcg
KzYwNiw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAgICBp
ZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIGZ1bmN0aW9uRW50
cnlBcml0eUNoZWNrKQogICAgICAgICAqZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwogCi0gICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZp
bmFsaXplQ29kZSgpOworICAgIHJldHVybiBKSVRDb2RlKHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZSgpLCBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiB9CiAKIHZvaWQgSklUOjpsaW5rQ2FsbChKU0Z1
bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNh
bGxlZUNvZGVCbG9jaywgSklUOjpDb2RlUHRyIGNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvLCBpbnQgY2FsbGVyQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKQEAgLTYy
Miw3ICs2MjIsNyBAQCB2b2lkIEpJVDo6bGlua0NhbGwoSlNGdW5jdGlvbiogY2FsbGVlLCBDCiAg
ICAgfQogCiAgICAgLy8gcGF0Y2ggdGhlIGNhbGwgc28gd2UgZG8gbm90IGNvbnRpbnVlIHRvIHRy
eSB0byBsaW5rLgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGwoKSk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoY2FsbExpbmtJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24pLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjpsaW5rQ29uc3RydWN0KEpTRnVuY3Rpb24qIGNhbGxlZSwg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBK
SVQ6OkNvZGVQdHIgY29kZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIGludCBjYWxsZXJB
cmdDb3VudCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpAQCAtNjM4LDcgKzYzOCw3IEBAIHZv
aWQgSklUOjpsaW5rQ29uc3RydWN0KEpTRnVuY3Rpb24qIGNhbGwKICAgICB9CiAKICAgICAvLyBw
YXRjaCB0aGUgY2FsbCBzbyB3ZSBkbyBub3QgY29udGludWUgdG8gdHJ5IHRvIGxpbmsuCi0gICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0KCkpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVy
bkxvY2F0aW9uKSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3QoKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCShyZXZpc2lvbiA5MDQwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIsOSBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBhZGRTbG93Q2FzZShqdW1wVG9T
bG93KTsKICAgICBBU1NFUlRfSklUX09GRlNFVChkaWZmZXJlbmNlQmV0d2VlbihhZGRyZXNzT2ZM
aW5rZWRGdW5jdGlvbkNoZWNrLCBqdW1wVG9TbG93KSwgcGF0Y2hPZmZzZXRPcENhbGxDb21wYXJl
VG9KdW1wKTsKKyAgICAKKyAgICBBU1NFUlQobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9u
SW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgIG1fY2FsbFN0cnVjdHVyZVN0
dWJDb21waWxhdGlvbkluZm8uYXBwZW5kKFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8oKSk7
CiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBtX2Nh
bGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5pc0NhbGwg
PSBvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCShyZXZpc2lvbiA5MDQwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMjAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3MgUmVnaXN0ZXJGaWxlOwot
CisgICAgCiAgICAgY2xhc3MgSklUQ29kZSB7CiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIENvZGVSZWY7CiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IENvZGVQdHI7CiAgICAgcHVibGljOgorICAgICAgICBlbnVtIEpJVFR5cGUgeyBIb3N0Q2FsbFRo
dW5rLCBCYXNlbGluZUpJVCwgREZHSklUIH07CisKICAgICAgICAgSklUQ29kZSgpCiAgICAgICAg
IHsKICAgICAgICAgfQogCi0gICAgICAgIEpJVENvZGUoY29uc3QgQ29kZVJlZiByZWYpCisgICAg
ICAgIEpJVENvZGUoY29uc3QgQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlwZSkKICAgICAgICAg
ICAgIDogbV9yZWYocmVmKQorICAgICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICAg
ICAgewogICAgICAgICB9CiAKQEAgLTkzLDEyICs5NiwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fZXhlY3V0YWJsZVBvb2wuZ2V0KCk7
CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpJVFR5cGUgaml0VHlwZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2ppdFR5cGU7CisgICAgICAgIH0KIAogICAgICAgICAv
LyBIb3N0IGZ1bmN0aW9ucyBhcmUgYSBiaXQgc3BlY2lhbDsgdGhleSBoYXZlIGEgbV9jb2RlIHBv
aW50ZXIgYnV0IHRoZXkKICAgICAgICAgLy8gZG8gbm90IGluZGl2aWR1bGx5IHJlZiB0aGUgZXhl
Y3V0YWJsZSBwb29sIGNvbnRhaW5pbmcgdGhlIHRyYW1wb2xpbmUuCiAgICAgICAgIHN0YXRpYyBK
SVRDb2RlIEhvc3RGdW5jdGlvbihDb2RlUHRyIGNvZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBKSVRDb2RlKGNvZGUuZGF0YUxvY2F0aW9uKCksIDAsIDApOworICAgICAgICAgICAg
cmV0dXJuIEpJVENvZGUoY29kZS5kYXRhTG9jYXRpb24oKSwgMCwgMCwgSG9zdENhbGxUaHVuayk7
CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNsZWFyKCkKQEAgLTEwOCwxMiArMTE2LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBKSVRD
b2RlKHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29s
LCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgSklUQ29kZSh2b2lkKiBjb2RlLCBQYXNzUmVmUHRyPEV4
ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgc2l6ZV90IHNpemUsIEpJVFR5cGUgaml0VHlw
ZSkKICAgICAgICAgICAgIDogbV9yZWYoY29kZSwgZXhlY3V0YWJsZVBvb2wsIHNpemUpCisgICAg
ICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAg
ICAgICBDb2RlUmVmIG1fcmVmOworICAgICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICB9Owog
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
cmV2aXNpb24gOTA0MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwog
ICAgIGNsYXNzIFZQdHJIYWNrRXhlY3V0YWJsZTsKKyAgICBuYW1lc3BhY2UgREZHIHsKKyAgICBj
bGFzcyBKSVRDb2RlR2VuZXJhdG9yOworICAgIH0KIAogICAgIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7CiAKICAg
ICBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OkpJVENv
ZGVHZW5lcmF0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAKICAgICAg
ICAgdHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFzZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5MDQwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzQsNiArMjM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFs
dWUgZXhjZXB0aW9uOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIFJldHVybkFkZHJlc3NQdHIg
ZXhjZXB0aW9uTG9jYXRpb247CisgICAgICAgIEpTVmFsdWUgaG9zdENhbGxSZXR1cm5WYWx1ZTsK
ICNlbmRpZgogCiAgICAgICAgIEhhc2hNYXA8T3BhcXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xhc3ND
b250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xhc3NEYXRhOwo=
</data>
<flag name="review"
          id="94288"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="94289"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99764</attachid>
            <date>2011-07-05 17:04:53 -0700</date>
            <delta_ts>2011-07-05 17:57:03 -0700</delta_ts>
            <desc>the patch (fix more merge conflicts)</desc>
            <filename>call_patch_10.diff</filename>
            <type>text/plain</type>
            <size>95886</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA0MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAK
KzIwMTEtMDctMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGltcGxlbWVudCBvcF9jYWxsLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4NTgKKworICAgICAgICBSZXZpZXdlZCBieSBH
YXZpbiBCYXJyYWNsb3VnaC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rQ2FsbHMpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE51bWJlck9mQ2FsbExp
bmtJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZDYWxsTGlua0luZm9z
KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0FsaWFzVHJh
Y2tlci5oOgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6bG9va3VwR2V0QnlWYWwp
OgorICAgICAgICAoSlNDOjpERkc6OkFsaWFzVHJhY2tlcjo6cmVjb3JkQ2FsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWxpYXNUcmFja2VyOjplcXVhbElnbm9yaW5nTGF0ZXJOdW1lcmljQ29udmVy
c2lvbik6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6dG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZFRvR3Jh
cGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRWYXJBcmdDaGlsZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByZWRpY3RJbnQzMik6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om9wTmFtZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpyZWZDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5l
cmF0b3I6OnVzZUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9y
OjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjphZGRyZXNzT2ZDYWxsRGF0YSk6CisgICAg
ICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVjb3JkOjpDYWxsUmVjb3JkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6bm90aWZ5Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmFwcGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6UHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlByb3BlcnR5QWNjZXNzUmVjb3JkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlNDYWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQp
OgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Tm9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQxKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpjaGlsZDIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZH
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnTGlua0NhbGwpOgor
ICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlSW50ZWdlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZGV0ZWN0UGVlcEhvbGVCcmFuY2gpOgorICAgICAgICAq
IGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxl
ZUFzVmFsdWUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJ
VCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rQ2FsbCk6CisgICAgICAg
IChKU0M6OkpJVDo6bGlua0NvbnN0cnVjdCk6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAqIGppdC9KSVRDb2Rl
Lmg6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAoSlNDOjpKSVRD
b2RlOjpqaXRUeXBlKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6SG9zdEZ1bmN0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
RGF0YS5oOgorCiAyMDExLTA3LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgSlNDIEpJVCBoYXMgY29kZSBkdXBsaWNhdGlvbiBmb3IgdGhlIGhhbmRsaW5nIG9m
IGNhbGwgYW5kIGNvbnN0cnVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDkwNDE0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEwICs0Mywx
OCBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgog
CisjaWYgRU5BQkxFKERGR19KSVQpCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2VuZGlm
CisKICNkZWZpbmUgRFVNUF9DT0RFX0JMT0NLX1NUQVRJU1RJQ1MgMAogCiBuYW1lc3BhY2UgSlND
IHsKIAorI2lmIEVOQUJMRShERkdfSklUKQordXNpbmcgbmFtZXNwYWNlIERGRzsKKyNlbmRpZgor
CiAjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogCiBzdGF0
aWMgVVN0cmluZyBlc2NhcGVRdW90ZXMoY29uc3QgVVN0cmluZyYgc3RyKQpAQCAtMTczNyw3ICsx
NzQ1LDE0IEBAIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxscygpCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKCFt
X2NhbGxMaW5rSW5mb3NbaV0uaXNMaW5rZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxv
Y2F0aW9uLCBtX2NhbGxMaW5rSW5mb3NbaV0uaXNDYWxsID8gbV9nbG9iYWxEYXRhLT5qaXRTdHVi
cy0+Y3RpVmlydHVhbENhbGxMaW5rKCkgOiBtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0
dWFsQ29uc3RydWN0TGluaygpKTsKKyAgICAgICAgaWYgKGdldEpJVENvZGUoKS5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6REZHSklUKSB7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxsKG1fY2FsbExpbmtJbmZvc1tpXS5j
YWxsUmV0dXJuTG9jYXRpb24pLCBvcGVyYXRpb25MaW5rQ2FsbCk7CisjZWxzZQorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChtX2NhbGxMaW5r
SW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/
IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogbV9nbG9iYWxE
YXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7CiAgICAgICAgIG1fY2Fs
bExpbmtJbmZvc1tpXS51bmxpbmsoKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5MDQxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTAy
LDcgKzEwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CisgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbjsgLy8gaXQncyBhIG5lYXIgY2FsbCBp
biB0aGUgb2xkIEpJVCwgb3IgYSBub3JtYWwgY2FsbCBpbiBERkcKICAgICAgICAgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNh
bGwgaG90UGF0aE90aGVyOwogICAgICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2Fs
bGVlOwpAQCAtMzc4LDggKzM3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBHbG9iYWxS
ZXNvbHZlSW5mbyYgZ2xvYmFsUmVzb2x2ZUluZm8oaW50IGluZGV4KSB7IHJldHVybiBtX2dsb2Jh
bFJlc29sdmVJbmZvc1tpbmRleF07IH0KICAgICAgICAgYm9vbCBoYXNHbG9iYWxSZXNvbHZlSW5m
b0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogCisgICAgICAgIHZv
aWQgc2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKHNpemVfdCBzaXplKSB7IG1fY2FsbExpbmtJbmZv
cy5ncm93KHNpemUpOyB9CiAgICAgICAgIHNpemVfdCBudW1iZXJPZkNhbGxMaW5rSW5mb3MoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpOyB9Ci0gICAgICAgIHZvaWQgYWRk
Q2FsbExpbmtJbmZvKCkgeyBtX2NhbGxMaW5rSW5mb3MuYXBwZW5kKENhbGxMaW5rSW5mbygpKTsg
fQogICAgICAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJu
IG1fY2FsbExpbmtJbmZvc1tpbmRleF07IH0KIAogICAgICAgICB2b2lkIGFkZE1ldGhvZENhbGxM
aW5rSW5mb3ModW5zaWduZWQgbikgeyBtX21ldGhvZENhbGxMaW5rSW5mb3MuZ3JvdyhuKTsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDkwNDE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3NTIsMTAgKzE3NTIsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dENhbGwoCiAKICAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJ
bmZvKCk7Ci0jZW5kaWYKLQogICAgIC8vIEVtaXQgY2FsbC4KICAgICBlbWl0T3Bjb2RlKG9wY29k
ZUlEKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7IC8vIGZ1bmMK
QEAgLTE4NjksMTAgKzE4NjUsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dENvbnN0CiAKICAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJ
bmZvKCk7Ci0jZW5kaWYKLQogICAgIGVtaXRPcGNvZGUob3BfY29uc3RydWN0KTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7IC8vIGZ1bmMKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5jb3VudCgpKTsgLy8gYXJnQ291bnQKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAkocmV2aXNpb24gOTA0
MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFRoaXMg
Y2hlY2sgZW5zdXJlcyB0aGUgYWNjZXNzZXMgYWxpYXMsIHByb3ZpZGVkIHRoYXQgdGhlIHN1YnNj
cmlwdCBpcyBhbgogICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCAodGhpcyBpcyBnb29kIGVu
b3VnaDsgdGhlIHNwZWN1bGF0aXZlIHBhdGggd2lsbCBvbmx5IGdlbmVyYXRlCiAgICAgICAgICAg
ICAvLyBvcHRpbWl6ZWQgYWNjZXNzZXMgdG8gaGFuZGxlIGludGVnZXIgc3Vic2NyaXB0cykuCi0g
ICAgICAgICAgICBpZiAocG9zc2libGVBbGlhcy5jaGlsZDEgPT0gYmFzZSAmJiBlcXVhbElnbm9y
aW5nTGF0ZXJOdW1lcmljQ29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMiwgcHJvcGVydHkp
KQorICAgICAgICAgICAgaWYgKHBvc3NpYmxlQWxpYXMuY2hpbGQxKCkgPT0gYmFzZSAmJiBlcXVh
bElnbm9yaW5nTGF0ZXJOdW1lcmljQ29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMigpLCBw
cm9wZXJ0eSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZh
bDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtOTQsNiArOTQsMTIgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlRfVU5VU0VEKHB1dEJ5VmFsLCBtX2dyYXBoW3B1dEJ5VmFs
XS5vcCA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFs
ID0gTm9Ob2RlOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJlY29yZENhbGwoTm9kZUluZGV4IGNh
bGwpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGNhbGwsIG1fZ3JhcGhbY2FsbF0ub3Ag
PT0gQ2FsbCk7CisgICAgICAgIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsKKyAg
ICB9CiAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGZvciBhcmd1
bWVudHM6CkBAIC0xMDYsNyArMTEyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG9wMSA9PSBv
cDIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgTm9kZSYgbm9kZTIgPSBtX2dy
YXBoW29wMl07Ci0gICAgICAgIHJldHVybiAobm9kZTIub3AgPT0gVmFsdWVUb051bWJlciB8fCBu
b2RlMi5vcCA9PSBWYWx1ZVRvSW50MzIpICYmIG9wMSA9PSBub2RlMi5jaGlsZDE7CisgICAgICAg
IHJldHVybiAobm9kZTIub3AgPT0gVmFsdWVUb051bWJlciB8fCBub2RlMi5vcCA9PSBWYWx1ZVRv
SW50MzIpICYmIG9wMSA9PSBub2RlMi5jaGlsZDEoKTsKICAgICB9CiAKICAgICAvLyBUaGUgZ3Jh
cGgsIHRvIGxvb2sgdXAgcG90ZW50aWFsbHkgYWxpYXNpbmcgbm9kZXMuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
OTA0MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9u
dW1Bcmd1bWVudHMoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpCiAgICAgICAgICwgbV9udW1M
b2NhbHMoY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycykKICAgICAgICAgLCBtX3ByZXNl
cnZlZFZhcnMoY29kZUJsb2NrLT5tX251bVZhcnMpCisgICAgICAgICwgbV9wYXJhbWV0ZXJTbG90
cygwKQorICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQogICAgIHsKICAgICB9CiAKQEAg
LTEyNCw3ICsxMjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0
TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIEFT
U0VSVChub2RlLm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxk
MTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLApA
QCAtMTU1LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBH
ZXRMb2NhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAg
QVNTRVJUKG5vZGUub3AgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hp
bGQxOworICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGkpOwpAQCAtMTkxLDcgKzE5Myw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAKICAgICAgICAgaWYgKG5vZGUu
b3AgPT0gVUludDMyVG9OdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDE7Cisg
ICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKIAogICAgICAgICAvLyBDaGVjayBmb3Ig
bnVtZXJpYyBjb25zdGFudHMgYm94ZWQgYXMgSlNWYWx1ZXMuCiAgICAgICAgIGlmIChub2RlLm9w
ID09IEpTQ29uc3RhbnQpIHsKQEAgLTM4Miw2ICszODQsMjMgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdEluZGV4
OwogICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlOjpWYXJBcmdUYWcs
IE5vZGVUeXBlIG9wKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5v
ZGVJbmRleCltX2dyYXBoLnNpemUoKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2Rl
OjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRleCwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNp
emUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywgbV9udW1QYXNzZWRWYXJBcmdzKSk7CisgICAgICAg
IAorICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MgPSAwOworICAgICAgICAKKyAgICAgICAgaWYg
KG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKKyAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdElu
ZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdEluZGV4OworICAgIH0KKyAgICB2b2lkIGFkZFZh
ckFyZ0NoaWxkKE5vZGVJbmRleCBjaGlsZCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MrKzsK
KyAgICB9CiAKICAgICB2b2lkIHByZWRpY3RBcnJheShOb2RlSW5kZXggbm9kZUluZGV4KQogICAg
IHsKQEAgLTM5NiwxMCArNDE1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5vZGVQdHIg
PSAmbV9ncmFwaFtub2RlSW5kZXhdOwogCiAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBWYWx1
ZVRvTnVtYmVyKQotICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVQdHItPmNoaWxk
MV07CisgICAgICAgICAgICBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCldOwog
CiAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBWYWx1ZVRvSW50MzIpCi0gICAgICAgICAgICBu
b2RlUHRyID0gJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxXTsKKyAgICAgICAgICAgIG5vZGVQdHIg
PSAmbV9ncmFwaFtub2RlUHRyLT5jaGlsZDEoKV07CiAKICAgICAgICAgaWYgKG5vZGVQdHItPm9w
ID09IEdldExvY2FsKQogICAgICAgICAgICAgbV9ncmFwaC5wcmVkaWN0KG5vZGVQdHItPmxvY2Fs
KCksIFByZWRpY3RJbnQzMik7CkBAIC00NTMsNiArNDcyLDEzIEBAIHByaXZhdGU6CiAgICAgLy8g
dHlwaWNhbGx5IGVxdWFsIHRvIHRoZSBudW1iZXIgdmFycywgYnV0IHdlIGV4cGFuZCB0aGlzIHRv
IGNvdmVyIGFsbAogICAgIC8vIHRlbXBvcmFyaWVzIHRoYXQgcGVyc2lzdCBhY3Jvc3MgYmxvY2tz
IChkdWVzIHRvID86LCAmJiwgfHwsIGV0YykuCiAgICAgdW5zaWduZWQgbV9wcmVzZXJ2ZWRWYXJz
OworICAgIC8vIFRoZSBudW1iZXIgb2Ygc2xvdHMgKGluIHVuaXRzIG9mIHNpemVvZihSZWdpc3Rl
cikpIHRoYXQgd2UgbmVlZCB0bworICAgIC8vIHByZWFsbG9jYXRlIGZvciBjYWxscyBlbWFuYXRp
bmcgZnJvbSB0aGlzIGZyYW1lLiBUaGlzIGluY2x1ZGVzIHRoZQorICAgIC8vIHNpemUgb2YgdGhl
IENhbGxGcmFtZSwgb25seSBpZiB0aGlzIGlzIG5vdCBhIGxlYWYgZnVuY3Rpb24uICAoSS5lLgor
ICAgIC8vIHRoaXMgaXMgMCBpZiBhbmQgb25seSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGEgbGVhZi4p
CisgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKKyAgICAvLyBUaGUgbnVtYmVyIG9mIHZh
ciBhcmdzIHBhc3NlZCB0byB0aGUgbmV4dCB2YXIgYXJnIG5vZGUuCisgICAgdW5zaWduZWQgbV9u
dW1QYXNzZWRWYXJBcmdzOwogCiAgICAgc3RydWN0IFBoaVN0YWNrRW50cnkgewogICAgICAgICBQ
aGlTdGFja0VudHJ5KEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlSW5kZXggcGhpLCB1bnNpZ25lZCB2
YXJObykKQEAgLTEwMzksNiArMTA2NSwzMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3Jl
dCk7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NhbGw6IHsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSk7CisgICAgICAgICAgICBpbnQgYXJnQ291bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmaXJzdEFyZyA9IHJlZ2lzdGVy
T2Zmc2V0IC0gYXJnQ291bnQgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Cisg
ICAgICAgICAgICBmb3IgKGludCBhcmdJZHggPSBmaXJzdEFyZzsgYXJnSWR4IDwgZmlyc3RBcmcg
KyBhcmdDb3VudDsgYXJnSWR4KyspCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0
KGFyZ0lkeCkpOworICAgICAgICAgICAgTm9kZUluZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6
OlZhckFyZywgQ2FsbCk7CisgICAgICAgICAgICBhbGlhc2VzLnJlY29yZENhbGwoY2FsbCk7Cisg
ICAgICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rp
b24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICAgICAgaWYgKGludGVycHJldGVy
LT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jl
c3VsdCkKKyAgICAgICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBj
YWxsKTsKKyAgICAgICAgICAgIGlmIChSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUg
KyAodW5zaWduZWQpYXJnQ291bnQgPiBtX3BhcmFtZXRlclNsb3RzKQorICAgICAgICAgICAgICAg
IG1fcGFyYW1ldGVyU2xvdHMgPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBh
cmdDb3VudDsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jYWxsX3B1dF9yZXN1bHQ6IHsKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgICAgICAgICBJbnN0cnVjdGlvbiogY2FsbEluc3RydWN0aW9uID0g
Y3VycmVudEluc3RydWN0aW9uIC0gT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKKyAgICAgICAgICAg
IEFTU0VSVChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY2FsbEluc3RydWN0aW9uLT51Lm9wY29k
ZSkgPT0gb3BfY2FsbCk7CisjZW5kaWYKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxf
cHV0X3Jlc3VsdCk7CisgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
Ly8gUGFyc2UgZmFpbGVkIQpAQCAtMTA3MSwyMiArMTEyMiwyMiBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgICAgIHZhci52YWx1ZSA9IHZhbHVl
SW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAgICAgICBwaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tF
bnRyeShwcmVkZWNlc3NvckJsb2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBHZXRM
b2NhbCkKLSAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVl
SW5QcmVkZWNlc3Nvcl0uY2hpbGQxOworICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3Nv
ciA9IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKTsKICAgICAgICAgICAgIEFT
U0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFw
aFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFBoaSk7CiAKICAgICAgICAgICAgIGlmIChwaGlO
b2RlLnJlZkNvdW50KCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYodmFsdWVJblByZWRl
Y2Vzc29yKTsKIAotICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQxID09IE5vTm9kZSkgewot
ICAgICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQxID0gdmFsdWVJblByZWRlY2Vzc29yOworICAg
ICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQxKCkgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAg
ICAgcGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
cGhpTm9kZS5jaGlsZDIgPT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS5jaGls
ZDIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDIo
KSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNo
aWxkMiA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMyA9PSBOb05vZGUpIHsK
LSAgICAgICAgICAgICAgICBwaGlOb2RlLmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAg
ICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMygpID09IE5vTm9kZSkgeworICAgICAgICAgICAg
ICAgIHBoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gdmFsdWVJblByZWRlY2Vzc29yOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC0xMDk1LDEzICsx
MTQ2LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAg
ICAgICBpZiAocGhpTm9kZS5yZWZDb3VudCgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVm
KG5ld1BoaSk7CiAKLSAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGQxID0gcGhpTm9kZS5jaGls
ZDE7Ci0gICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkMiA9IHBoaU5vZGUuY2hpbGQyOwotICAg
ICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZDMgPSBwaGlOb2RlLmNoaWxkMzsKLQotICAgICAgICAg
ICAgcGhpTm9kZS5jaGlsZDEgPSBuZXdQaGk7Ci0gICAgICAgICAgICBwaGlOb2RlLmNoaWxkMSA9
IHZhbHVlSW5QcmVkZWNlc3NvcjsKLSAgICAgICAgICAgIHBoaU5vZGUuY2hpbGQzID0gTm9Ob2Rl
OworICAgICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBwaGlOb2Rl
LmNoaWxkMSgpOworICAgICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIg
PSBwaGlOb2RlLmNoaWxkMigpOworICAgICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZHJlbi5maXhl
ZC5jaGlsZDMgPSBwaGlOb2RlLmNoaWxkMygpOworCisgICAgICAgICAgICBwaGlOb2RlLmNoaWxk
cmVuLmZpeGVkLmNoaWxkMSA9IG5ld1BoaTsKKyAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4u
Zml4ZWQuY2hpbGQxID0gdmFsdWVJblByZWRlY2Vzc29yOworICAgICAgICAgICAgcGhpTm9kZS5j
aGlsZHJlbi5maXhlZC5jaGlsZDMgPSBOb05vZGU7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0x
MTI5LDkgKzExODAsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVWaXJ0dWFsUmVn
aQogICAgIHVuc2lnbmVkIHNpemVFeGNsdWRpbmdQaGlOb2RlcyA9IG1fZ3JhcGgubV9ibG9ja3Mu
bGFzdCgpLT5lbmQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplRXhjbHVkaW5nUGhp
Tm9kZXM7ICsraSkgewogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpXTsKKyAgICAgICAg
CiAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIEdldExvY2FsIG5vZGVzIGFyZSBlZmZlY3RpdmVs
eSBwaGkgbm9kZXMgaW4gdGhlIGdyYXBoLCByZWZlcmVuY2luZwogICAgICAgICAvLyByZXN1bHRz
IGZyb20gcHJpb3IgYmxvY2tzLgogICAgICAgICBpZiAobm9kZS5vcCAhPSBHZXRMb2NhbCkgewpA
QCAtMTEzOSw5ICsxMTkxLDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVmlydHVh
bFJlZ2kKICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlz
IG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKICAgICAgICAgICAgIC8vIG9yZGVyIHNvIHRoYXQgaWYg
YSBjaGlsZCBpcyBvbiBpdHMgbGFzdCB1c2UsIGFuZCBhCiAgICAgICAgICAgICAvLyBWaXJ0dWFs
UmVnaXN0ZXIgaXMgZnJlZWQsIHRoZW4gaXQgbWF5IGJlIHJldXNlZCBmb3Igbm9kZS4KLSAgICAg
ICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIHNjb3JlQm9h
cmQudXNlKG5vZGUuY2hpbGQyKTsKLSAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hp
bGQzKTsKKyAgICAgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNo
aWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4
KyspCisgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG1fZ3JhcGgubV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBzY29yZUJv
YXJkLnVzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShu
b2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
bm9kZS5oYXNSZXN1bHQoKSkKQEAgLTExNTcsNyArMTIxNCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmFsbG9jYXRlVmlydHVhbFJlZ2kKICAgICAvLyAnbV9udW1DYWxsZWVSZWdpc3RlcnMnIGlz
IHRoZSBudW1iZXIgb2YgbG9jYWxzIGFuZCB0ZW1wb3JhcmllcyBhbGxvY2F0ZWQKICAgICAvLyBm
b3IgdGhlIGZ1bmN0aW9uIChhbmQgY2hlY2tlZCBmb3Igb24gZW50cnkpLiBTaW5jZSB3ZSBwZXJm
b3JtIGEgbmV3IGFuZAogICAgIC8vIGRpZmZlcmVudCBhbGxvY2F0aW9uIG9mIHRlbXBvcmFyaWVz
LCBtb3JlIHJlZ2lzdGVycyBtYXkgbm93IGJlIHJlcXVpcmVkLgotICAgIHVuc2lnbmVkIGNhbGxl
ZVJlZ2lzdGVycyA9IHNjb3JlQm9hcmQuYWxsb2NhdGVkQ291bnQoKSArIG1fcHJlc2VydmVkVmFy
czsKKyAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFsbG9jYXRlZENv
dW50KCkgKyBtX3ByZXNlcnZlZFZhcnMgKyBtX3BhcmFtZXRlclNsb3RzOwogICAgIGlmICgodW5z
aWduZWQpbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJz
KQogICAgICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgPSBjYWxsZWVSZWdp
c3RlcnM7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2
aXNpb24gOTA0MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGRmZ09w
TmFtZXNbXSA9IHsKICN1bmRlZiBTVFJJTkdJWkVfREZHX09QX0VOVU0KIH07CiAKK2NvbnN0IGNo
YXIgKkdyYXBoOjpvcE5hbWUoTm9kZVR5cGUgb3ApCit7CisgICAgcmV0dXJuIGRmZ09wTmFtZXNb
b3AgJiBOb2RlSWRNYXNrXTsKK30KKwogdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUlu
ZGV4LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUlu
ZGV4KTsKQEAgLTc1LDE0ICs4MCwyNSBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2Rl
SW5kZXgsIENvCiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsK
ICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIpOwotICAgIHByaW50ZigiPlx0JXMoIiwgZGZn
T3BOYW1lc1tvcCAmIE5vZGVJZE1hc2tdKTsKLSAgICBpZiAobm9kZS5jaGlsZDEgIT0gTm9Ob2Rl
KQotICAgICAgICBwcmludGYoIkAldSIsIG5vZGUuY2hpbGQxKTsKLSAgICBpZiAobm9kZS5jaGls
ZDIgIT0gTm9Ob2RlKQotICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDIpOwotICAg
IGlmIChub2RlLmNoaWxkMyAhPSBOb05vZGUpCi0gICAgICAgIHByaW50ZigiLCBAJXUiLCBub2Rl
LmNoaWxkMyk7Ci0gICAgYm9vbCBoYXNQcmludGVkID0gbm9kZS5jaGlsZDEgIT0gTm9Ob2RlOwor
ICAgIHByaW50ZigiPlx0JXMoIiwgb3BOYW1lKG9wKSk7CisgICAgYm9vbCBoYXNQcmludGVkOwor
ICAgIGlmIChvcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSAr
IG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykgeworICAgICAgICAgICAgaWYgKGhhc1By
aW50ZWQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIsICIpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOworICAgICAgICAgICAgcHJpbnRmKCJA
JXUiLCBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSAhPSBOb05vZGUpCisgICAgICAgICAgICBwcmlu
dGYoIkAldSIsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSAhPSBO
b05vZGUpCisgICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDIoKSk7CisgICAg
ICAgIGlmIChub2RlLmNoaWxkMygpICE9IE5vTm9kZSkKKyAgICAgICAgICAgIHByaW50ZigiLCBA
JXUiLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IG5vZGUuY2hpbGQxKCkg
IT0gTm9Ob2RlOworICAgIH0KIAogICAgIGlmIChub2RlLmhhc1Zhck51bWJlcigpKSB7CiAgICAg
ICAgIHByaW50ZigiJXN2YXIldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUudmFyTnVt
YmVyKCkpOwpAQCAtMTM4LDIxICsxNTQsMjYgQEAgdm9pZCBHcmFwaDo6cmVmQ2hpbGRyZW4oTm9k
ZUluZGV4IG9wKQogewogICAgIE5vZGUmIG5vZGUgPSBhdChvcCk7CiAKLSAgICBpZiAobm9kZS5j
aGlsZDEgPT0gTm9Ob2RlKSB7Ci0gICAgICAgIEFTU0VSVChub2RlLmNoaWxkMiA9PSBOb05vZGUg
JiYgbm9kZS5jaGlsZDMgPT0gTm9Ob2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBy
ZWYobm9kZS5jaGlsZDEpOwotCi0gICAgaWYgKG5vZGUuY2hpbGQyID09IE5vTm9kZSkgewotICAg
ICAgICBBU1NFUlQobm9kZS5jaGlsZDMgPT0gTm9Ob2RlKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgp
ICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgcmVmKG1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobm9kZS5j
aGlsZDEoKSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMigpID09
IE5vTm9kZSAmJiBub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgcmVmKG5vZGUuY2hpbGQxKCkpOworCisgICAgICAgIGlmIChu
b2RlLmNoaWxkMigpID09IE5vTm9kZSkgeworICAgICAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQz
KCkgPT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBy
ZWYobm9kZS5jaGlsZDIoKSk7CisKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2Rl
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICByZWYobm9kZS5jaGlsZDMoKSk7CiAgICAg
fQotICAgIHJlZihub2RlLmNoaWxkMik7Ci0KLSAgICBpZiAobm9kZS5jaGlsZDMgPT0gTm9Ob2Rl
KQotICAgICAgICByZXR1cm47Ci0gICAgcmVmKG5vZGUuY2hpbGQzKTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gOTA0MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gUHJlZGljdE5vbmU7CiAgICAgfQogCisjaWZuZGVmIE5ERUJVRworICAgIHN0YXRpYyBjb25z
dCBjaGFyICpvcE5hbWUoTm9kZVR5cGUpOworI2VuZGlmCisKICAgICBWZWN0b3I8IE93blB0cjxC
YXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOworICAgIFZlY3RvcjxOb2RlSW5kZXgsIDE2PiBtX3Zh
ckFyZ0NoaWxkcmVuOwogcHJpdmF0ZToKIAogICAgIC8vIFdoZW4gYSBub2RlJ3MgcmVmQ291bnQg
Z29lcyBmcm9tIDAgdG8gMSwgaXQgbXVzdCAobG9naWNhbGx5KSByZWN1cnNpdmVseSByZWYgYWxs
IG9mIGl0cyBjaGlsZHJlbiwgYW5kIHZpY2UgdmVyc2EuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDkwNDE0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAwLDI0ICszMDAsMjkgQEAgR1BSUmVnIEpJVENvZGVHZW5lcmF0
b3I6OmZpbGxKU1ZhbHVlKE5vZAogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnVzZUNoaWxkcmVu
KE5vZGUmIG5vZGUpCiB7Ci0gICAgTm9kZUluZGV4IGNoaWxkMSA9IG5vZGUuY2hpbGQxOwotICAg
IGlmIChjaGlsZDEgPT0gTm9Ob2RlKSB7Ci0gICAgICAgIEFTU0VSVChub2RlLmNoaWxkMiA9PSBO
b05vZGUgJiYgbm9kZS5jaGlsZDMgPT0gTm9Ob2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICB1c2UoY2hpbGQxKTsKLQotICAgIE5vZGVJbmRleCBjaGlsZDIgPSBub2RlLmNoaWxkMjsK
LSAgICBpZiAoY2hpbGQyID09IE5vTm9kZSkgewotICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDMg
PT0gTm9Ob2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB1c2UoY2hpbGQyKTsKLQot
ICAgIE5vZGVJbmRleCBjaGlsZDMgPSBub2RlLmNoaWxkMzsKLSAgICBpZiAoY2hpbGQzID09IE5v
Tm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVzZShjaGlsZDMpOworICAgIGlmIChub2RlLm9w
ICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1D
aGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgdXNlKG1faml0LmdyYXBoKCkubV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgIH0gZWxzZSB7CisgICAgICAgIE5vZGVJbmRl
eCBjaGlsZDEgPSBub2RlLmNoaWxkMSgpOworICAgICAgICBpZiAoY2hpbGQxID09IE5vTm9kZSkg
eworICAgICAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQyKCkgPT0gTm9Ob2RlICYmIG5vZGUuY2hp
bGQzKCkgPT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICB1c2UoY2hpbGQxKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBjaGlsZDIgPSBub2Rl
LmNoaWxkMigpOworICAgICAgICBpZiAoY2hpbGQyID09IE5vTm9kZSkgeworICAgICAgICAgICAg
QVNTRVJUKG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICB1c2UoY2hpbGQyKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRl
eCBjaGlsZDMgPSBub2RlLmNoaWxkMygpOworICAgICAgICBpZiAoY2hpbGQzID09IE5vTm9kZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdXNlKGNoaWxkMyk7CisgICAgfQogfQogCiB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJl
ZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0KQpAQCAtNDI1LDYgKzQzMCw4NCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0
b3I6OmNhY2hlZFB1dEJ5SWQoR1BSCiAgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoZnVuY3Rp
b25DYWxsLCBjaGVja0ltbVRvQ2FsbCwgY2FsbFRvQ2hlY2ssIGNhbGxUb1N0b3JlLCBjYWxsVG9T
bG93Q2FzZSwgY2FsbFRvRG9uZSwgc3RhdGljX2Nhc3Q8aW50OF90PihiYXNlR1BSKSwgc3RhdGlj
X2Nhc3Q8aW50OF90Pih2YWx1ZUdQUiksIHN0YXRpY19jYXN0PGludDhfdD4oc2NyYXRjaEdQUikp
OwogfQogCit2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vZGUsIEdQUlJl
ZyB0YXJnZXRHUFIpCit7CisgICAgLy8gdGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGls
ZCBpcyBlaXRoZXIgdGhlIGZ1bmN0aW9uIChub3JtYWwgY2FsbCkgb3IgdGhlCisgICAgLy8gcmVj
ZWl2ZXIgKG1ldGhvZCBjYWxsKS4gc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50
cy4KKyAgICBpbnQgbnVtQXJncyA9IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgCisgICAg
Ly8gYW1vdW50IG9mIHN0dWZmIChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdl
IG5lZWQgdG8gcGxhY2UgYXQgdGhlCisgICAgLy8gdG9wIG9mIHRoZSBKUyBzdGFjay4KKyAgICBp
bnQgY2FsbERhdGFTaXplID0gMDsKKworICAgIC8vIGZpcnN0IHRoZXJlIGFyZSB0aGUgYXJndW1l
bnRzCisgICAgY2FsbERhdGFTaXplICs9IG51bUFyZ3M7CisgICAgCisgICAgLy8gYW5kIHRoZW4g
dGhlcmUgaXMgdGhlIGNhbGwgZnJhbWUgaGVhZGVyCisgICAgY2FsbERhdGFTaXplICs9IFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAKKyAgICBtX2ppdC5zdG9yZVB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobnVt
QXJncykpKSwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSk7
CisgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGFkZHJlc3NP
ZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKTsKKyAgICAKKyAgICBmb3IgKGlu
dCBhcmdJZHggPSAwOyBhcmdJZHggPCBudW1BcmdzOyBhcmdJZHgrKykgeworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUu
Zmlyc3RDaGlsZCgpICsgMSArIGFyZ0lkeF0pOworICAgICAgICBHUFJSZWcgYXJnR1BSID0gYXJn
LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoYXJnR1BSLCBhZGRyZXNz
T2ZDYWxsRGF0YSgtY2FsbERhdGFTaXplICsgYXJnSWR4KSk7CisgICAgfQorICAgIAorICAgIHN3
aXRjaCAobm9kZS5vcCkgeworICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIo
dGFyZ2V0R1BSLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxlZSkpOworICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgCisgICAg
R1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAg
IEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOworICAgIAorICAgIHN3aXRjaCAobm9kZS5vcCkg
eworICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRo
UGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YXJnZXRHUFIsIHRhcmdldFRvQ2hlY2ss
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
KSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGFyZ2V0
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgYWRkcmVzc09mQ2FsbERhdGEo
UmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBt
X2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAg
bV9qaXQubm90aWZ5Q2FsbChmYXN0Q2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0u
ZXhjZXB0aW9uSW5mbyk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKKyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9q
aXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAq
IHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0LmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkxpbmtDYWxsLCBtX2ppdC5n
cmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5tb3ZlKElt
bTMyKG51bUFyZ3MpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1f
aml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rlcikp
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgbV9qaXQubm90aWZ5Q2FsbChtX2pp
dC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJ
bmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAg
CisgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgIAor
ICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIHRy
dWUsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworfQorCiAj
aWZuZGVmIE5ERUJVRwogc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRTdHJpbmcoRGF0YUZv
cm1hdCBmb3JtYXQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTA0MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIyLDYg
KzUyMiwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKEdQUlJl
ZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBK
SVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwog
ICAgIHZvaWQgY2FjaGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklU
Q29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKKyAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzT2ZDYWxsRGF0YShpbnQgaWR4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCAobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICsgaWR4KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGVtaXRDYWxsKE5vZGUmLCBHUFJSZWcgdGFyZ2V0R1BSKTsKIAogICAg
IC8vIENhbGxlZCBvbmNlIGEgbm9kZSBoYXMgY29tcGxldGVkIGNvZGUgZ2VuZXJhdGlvbiBidXQg
cHJpb3IgdG8gc2V0dGluZwogICAgIC8vIGl0cyByZXN1bHQsIHRvIGZyZWUgdXAgaXRzIGNoaWxk
cmVuLiAoVGhpcyBtdXN0IGhhcHBlbiBwcmlvciB0byBzZXR0aW5nCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTA0MTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjk0LDYgKzI5NCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlv
bihKSVRDb2QKICAgICAgICAgLy8gSWYgY29tcGlsYXRpb24gdGhyb3VnaCB0aGUgU3BlY3VsYXRp
dmVKSVQgZmFpbGVkLCB0aHJvdyBhd2F5IHRoZSBjb2RlIHdlIGdlbmVyYXRlZC4KICAgICAgICAg
bV9jYWxscy5jbGVhcigpOwogICAgICAgICBtX3Byb3BlcnR5QWNjZXNzZXMuY2xlYXIoKTsKKyAg
ICAgICAgbV9qc0NhbGxzLmNsZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3VsYXRp
dmVQYXRoQmVnaW4pOwogCiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3Igbm9DaGVja3M7
CkBAIC0zNjksMTMgKzM3MCwxNSBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24o
SklUQ29kCiAjZW5kaWYKIAogICAgIC8vIExpbmsgYWxsIGNhbGxzIG91dCBmcm9tIHRoZSBKSVQg
Y29kZSB0byB0aGVpciByZXNwZWN0aXZlIGZ1bmN0aW9ucy4KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKG1f
Y2FsbHNbaV0ubV9jYWxsLCBtX2NhbGxzW2ldLm1fZnVuY3Rpb24pOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NhbGxz
W2ldLm1fZnVuY3Rpb24udmFsdWUoKSkKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhtX2Nh
bGxzW2ldLm1fY2FsbCwgbV9jYWxsc1tpXS5tX2Z1bmN0aW9uKTsKKyAgICB9CiAKICAgICBpZiAo
bV9jb2RlQmxvY2stPm5lZWRzQ2FsbFJldHVybkluZGljZXMoKSkgewogICAgICAgICBtX2NvZGVC
bG9jay0+Y2FsbFJldHVybkluZGV4VmVjdG9yKCkucmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvbkNo
ZWNrQ291bnQpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fY2FsbHNbaV0ubV9leGNlcHRpb25DaGVjay5p
c1NldCgpKSB7CisgICAgICAgICAgICBpZiAobV9jYWxsc1tpXS5tX2hhbmRsZXNFeGNlcHRpb25z
KSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmV0dXJuQWRkcmVzc09mZnNldCA9IGxpbmtC
dWZmZXIucmV0dXJuQWRkcmVzc09mZnNldChtX2NhbGxzW2ldLm1fY2FsbCk7CiAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgZXhjZXB0aW9uSW5mbyA9IG1fY2FsbHNbaV0ubV9leGNlcHRpb25JbmZv
OwogICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5h
cHBlbmQoQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQocmV0dXJuQWRkcmVzc09mZnNl
dCwgZXhjZXB0aW9uSW5mbykpOwpAQCAtMzk2LDEzICszOTksMjIgQEAgdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgICAgICBpbmZvLnZhbHVlR1BSID0gbV9wcm9w
ZXJ0eUFjY2Vzc2VzW2ldLm1fdmFsdWVHUFI7CiAgICAgICAgIGluZm8udS51bnNldC5zY3JhdGNo
R1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc2NyYXRjaEdQUjsKICAgICB9Ci0KKyAgICAK
KyAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fanNDYWxscy5zaXpl
KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5m
byhpKTsKKyAgICAgICAgaW5mby5pc0NhbGwgPSBtX2pzQ2FsbHNbaV0ubV9pc0NhbGw7CisgICAg
ICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsKSk7CisgICAgICAgIGluZm8uaG90
UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fanNDYWxsc1tpXS5tX3RhcmdldFRv
Q2hlY2spOworICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsKG1fanNDYWxsc1tpXS5tX2Zhc3RDYWxsKTsKKyAgICB9CisgICAgCiAgICAgLy8g
RklYTUU6IHN3aXRjaCB0aGUgcmVnaXN0ZXIgZmlsZSBjaGVjayAmIGFyaXR5IGNoZWNrIG92ZXIg
dG8gREZHT3BlcnRhaW9uIHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJzLgogICAgIGxpbmtCdWZm
ZXIubGluayhjYWxsUmVnaXN0ZXJGaWxlQ2hlY2ssIGN0aV9yZWdpc3Rlcl9maWxlX2NoZWNrKTsK
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5tX2lzQ29u
c3RydWN0b3IgPyBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2sgOiBjdGlfb3BfY2FsbF9hcml0
eUNoZWNrKTsKIAogICAgIGVudHJ5V2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YoYXJpdHlDaGVjayk7Ci0gICAgZW50cnkgPSBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpOwor
ICAgIGVudHJ5ID0gSklUQ29kZShsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpE
RkdKSVQpOwogfQogCiAjaWYgREZHX0pJVF9BU1NFUlQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDkwNDE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2
ICs2NSw3IEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQogICAgICAgICA6IG1fY2FsbChj
YWxsKQogICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgbV9oYW5kbGVz
RXhjZXB0aW9ucyhmYWxzZSkKICAgICB7CiAgICAgfQogCkBAIC03NCw2ICs3NSwxNyBAQCBzdHJ1
Y3QgQ2FsbFJlY29yZCB7CiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAgICAg
LCBtX2V4Y2VwdGlvbkNoZWNrKGV4Y2VwdGlvbkNoZWNrKQogICAgICAgICAsIG1fZXhjZXB0aW9u
SW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkK
KyAgICB7CisgICAgfQorCisgICAgLy8gQ29uc3RydWN0b3IgZm9yIGEgY2FsbCB0aGF0IG1heSBj
YXVzZSBleGNlcHRpb25zLCBidXQgd2hpY2ggYXJlIGhhbmRsZWQKKyAgICAvLyB0aHJvdWdoIHNv
bWUgbWVjaGFuaXNtIG90aGVyIHRoYW4gdGhlIGluLWxpbmUgZXhjZXB0aW9uIGhhbmRsZXIuCisg
ICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5j
dGlvbiwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvKQorICAgICAgICA6IG1fY2FsbChjYWxs
KQorICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgbV9leGNlcHRpb25J
bmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0aW9ucyh0cnVlKQog
ICAgIHsKICAgICB9CiAKQEAgLTgxLDYgKzkzLDcgQEAgc3RydWN0IENhbGxSZWNvcmQgewogICAg
IEZ1bmN0aW9uUHRyIG1fZnVuY3Rpb247CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9leGNl
cHRpb25DaGVjazsKICAgICBFeGNlcHRpb25JbmZvIG1fZXhjZXB0aW9uSW5mbzsKKyAgICBib29s
IG1faGFuZGxlc0V4Y2VwdGlvbnM7CiB9OwogCiAvLyA9PT0gSklUQ29tcGlsZXIgPT09CkBAIC0x
NTgsNiArMTcxLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSk7CiAgICAgfQorICAgIAorICAgIC8vIE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0
IGRvZXMgbm90IHJlcXVpcmUgbGlua2luZy4KKyAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBjYWxs
LCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQo
Q2FsbFJlY29yZChjYWxsLCBGdW5jdGlvblB0cigpLCBleGNlcHRpb25JbmZvKSk7CisgICAgfQog
CiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRp
b24gY2hlY2suCiAgICAgdm9pZCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlv
bikKQEAgLTE3NCw2ICsxOTMsMTUgQEAgcHVibGljOgogICAgICAgICBtX2NhbGxzLmFwcGVuZChD
YWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBleGNlcHRp
b25JbmZvKSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgfQorICAgIAorICAg
IC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGggYSBmYXN0IGV4Y2VwdGlvbiBj
aGVjayB0aGF0IHRlc3RzIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KKyAgICBDYWxsIGFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlv
biwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICB7CisgICAgICAgIENhbGwgZnVuY3Rpb25D
YWxsID0gY2FsbCgpOworICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0
cihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1fY2FsbHMuYXBwZW5k
KENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2Vw
dGlvbkluZm8pKTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKKyAgICB9CiAKICAgICAv
LyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgogICAgIGJvb2wg
aXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQpAQCAtMjM5LDYgKzI2NywxMSBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBtX3Byb3BlcnR5QWNjZXNzZXMuYXBwZW5kKFByb3BlcnR5QWNj
ZXNzUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZGVsdGFDaGVja0ltbVRvQ2FsbCwgZGVsdGFDYWxsVG9T
dHJ1Y3RDaGVjaywgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgZGVsdGFDYWxsVG9TbG93Q2FzZSwg
ZGVsdGFDYWxsVG9Eb25lLCAgYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIpKTsKICAgICB9
CisgICAgCisgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwg
RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRp
b25JbmZvKQorICAgIHsKKyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFz
dENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGV4Y2VwdGlvbkluZm8pKTsK
KyAgICB9CiAKIHByaXZhdGU6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB1c2VkIGluIGxpbmtpbmcg
dGhlIHNwZWN1bGF0aXZlICYgbm9uLXNwZWN1bGF0aXZlIHBhdGhzIHRvZ2V0aGVyLgpAQCAtMjYx
LDcgKzI5NCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAK
ICAgICBzdHJ1Y3QgUHJvcGVydHlBY2Nlc3NSZWNvcmQgewotICAgICAgICBQcm9wZXJ0eUFjY2Vz
c1JlY29yZChKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludDhfdCBkZWx0YUNoZWNr
SW1tVG9DYWxsLCBpbnQ4X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgaW50OF90IGRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUsIGludDhfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlLCBpbnQ4X3QgZGVsdGFD
YWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRj
aEdQUikKKyAgICAgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoQ2FsbCBmdW5jdGlvbkNhbGwsIGlu
dDhfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQ4X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywg
aW50OF90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUsIGludDhfdCBkZWx0YUNhbGxUb1Nsb3dDYXNl
LCBpbnQ4X3QgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BS
LCBpbnQ4X3Qgc2NyYXRjaEdQUikKICAgICAgICAgICAgIDogbV9mdW5jdGlvbkNhbGwoZnVuY3Rp
b25DYWxsKQogICAgICAgICAgICAgLCBtX2RlbHRhQ2hlY2tJbW1Ub0NhbGwoZGVsdGFDaGVja0lt
bVRvQ2FsbCkKICAgICAgICAgICAgICwgbV9kZWx0YUNhbGxUb1N0cnVjdENoZWNrKGRlbHRhQ2Fs
bFRvU3RydWN0Q2hlY2spCkBAIC0yODQsOCArMzE3LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGlu
dDhfdCBtX3ZhbHVlR1BSOwogICAgICAgICBpbnQ4X3QgbV9zY3JhdGNoR1BSOwogICAgIH07Cisg
ICAgCisgICAgc3RydWN0IEpTQ2FsbFJlY29yZCB7CisgICAgICAgIEpTQ2FsbFJlY29yZChDYWxs
IGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9v
bCBpc0NhbGwsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgICAgICAgICA6IG1fZmFzdENh
bGwoZmFzdENhbGwpCisgICAgICAgICAgICAsIG1fc2xvd0NhbGwoc2xvd0NhbGwpCisgICAgICAg
ICAgICAsIG1fdGFyZ2V0VG9DaGVjayh0YXJnZXRUb0NoZWNrKQorICAgICAgICAgICAgLCBtX2lz
Q2FsbChpc0NhbGwpCisgICAgICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZv
KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENhbGwgbV9mYXN0Q2Fs
bDsKKyAgICAgICAgQ2FsbCBtX3Nsb3dDYWxsOworICAgICAgICBEYXRhTGFiZWxQdHIgbV90YXJn
ZXRUb0NoZWNrOworICAgICAgICBib29sIG1faXNDYWxsOworICAgICAgICB1bnNpZ25lZCBtX2V4
Y2VwdGlvbkluZm87CisgICAgfTsKIAogICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwg
ND4gbV9wcm9wZXJ0eUFjY2Vzc2VzOworICAgIFZlY3RvcjxKU0NhbGxSZWNvcmQsIDQ+IG1fanND
YWxsczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5MDQxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBAIHR5cGVk
ZWYgdWludDMyX3QgRXhjZXB0aW9uSW5mbzsKICNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgMHg0
MDAwMAogI2RlZmluZSBOb2RlSXNCcmFuY2ggICAgICAweDgwMDAwCiAjZGVmaW5lIE5vZGVJc1Rl
cm1pbmFsICAgMHgxMDAwMDAKKyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAweDIwMDAwMAogCiAv
LyBUaGVzZSB2YWx1ZXMgcmVjb3JkIHRoZSByZXN1bHQgdHlwZSBvZiB0aGUgbm9kZSAoYXMgY2hl
Y2tlZCBieSBOb2RlUmVzdWx0TWFzaywgYWJvdmUpLCAwIGZvciBubyByZXN1bHQuCiAjZGVmaW5l
IE5vZGVSZXN1bHRKUyAgICAgIDB4MTAwMApAQCAtMTM4LDYgKzEzOSw5IEBAIHR5cGVkZWYgdWlu
dDMyX3QgRXhjZXB0aW9uSW5mbzsKICAgICBtYWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDb21wYXJlU3RyaWN0RXEsIE5vZGVSZXN1
bHRKUykgXAogICAgIFwKKyAgICAvKiBDYWxscy4gKi9cCisgICAgbWFjcm8oQ2FsbCwgTm9kZVJl
c3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgXAogICAg
IC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJyZWFrcG9pbnQs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDaGVja0hhc0luc3RhbmNlLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCkBAIC0xNzcsNDMgKzE4MSw2MCBAQCBzdHJ1Y3QgT3BJbmZvIHsKIC8vCiAv
LyBOb2RlIHJlcHJlc2VudHMgYSBzaW5nbGUgb3BlcmF0aW9uIGluIHRoZSBkYXRhIGZsb3cgZ3Jh
cGguCiBzdHJ1Y3QgTm9kZSB7CisgICAgZW51bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsKKwogICAg
IC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUg
dmFsdWUuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZv
LCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQogICAgICAgICAsIGV4
Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKLSAgICAgICAgLCBjaGlsZDEoY2hpbGQxKQotICAg
ICAgICAsIGNoaWxkMihjaGlsZDIpCi0gICAgICAgICwgY2hpbGQzKGNoaWxkMykKICAgICAgICAg
LCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1f
cmVmQ291bnQoMCkKICAgICB7CisgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3Mp
KTsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQxOworICAgICAgICBjaGls
ZHJlbi5maXhlZC5jaGlsZDIgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxk
MyA9IGNoaWxkMzsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8g
MyBjaGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3As
IEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKICAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2Vw
dGlvbkluZm8pCi0gICAgICAgICwgY2hpbGQxKGNoaWxkMSkKLSAgICAgICAgLCBjaGlsZDIoY2hp
bGQyKQotICAgICAgICAsIGNoaWxkMyhjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAg
ICAgICwgbV9vcEluZm8oaW1tLm1fdmFsdWUpCiAgICAgeworICAgICAgICBBU1NFUlQoIShvcCAm
IE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxk
MTsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gY2hpbGQyOworICAgICAgICBjaGls
ZHJlbi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEg
bm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgogICAg
IE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGlt
bTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9w
KQogICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKLSAgICAgICAgLCBjaGls
ZDEoY2hpbGQxKQotICAgICAgICAsIGNoaWxkMihjaGlsZDIpCi0gICAgICAgICwgY2hpbGQzKGNo
aWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFs
dWUpCiAgICAgICAgICwgbV9vcEluZm8yKGltbTIubV92YWx1ZSkKICAgICB7CisgICAgICAgIEFT
U0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hp
bGQxID0gY2hpbGQxOworICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDIgPSBjaGlsZDI7Cisg
ICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IGNoaWxkMzsKKyAgICB9CisgICAgCisgICAg
Ly8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNoaWxkcmVuIGFu
ZCBubyBpbW1lZGlhdGUgdmFsdWVzLgorICAgIE5vZGUoVmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwg
RXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25l
ZCBudW1DaGlsZHJlbikKKyAgICAgICAgOiBvcChvcCkKKyAgICAgICAgLCBleGNlcHRpb25JbmZv
KGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1
YWxSZWdpc3RlcikKKyAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgeworICAgICAgICBBU1NF
UlQob3AgJiBOb2RlSGFzVmFyQXJncyk7CisgICAgICAgIGNoaWxkcmVuLnZhcmlhYmxlLmZpcnN0
Q2hpbGQgPSBmaXJzdENoaWxkOworICAgICAgICBjaGlsZHJlbi52YXJpYWJsZS5udW1DaGlsZHJl
biA9IG51bUNoaWxkcmVuOwogICAgIH0KIAogICAgIGJvb2wgbXVzdEdlbmVyYXRlKCkKQEAgLTM1
NCwxMyArMzc1LDUxIEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBtdXN0
R2VuZXJhdGUoKSA/IG1fcmVmQ291bnQgLSAxIDogbV9yZWZDb3VudDsKICAgICB9CisgICAgCisg
ICAgTm9kZUluZGV4IGNoaWxkMSgpCisgICAgeworICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVI
YXNWYXJBcmdzKSk7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDE7CisgICAg
fQogCisgICAgTm9kZUluZGV4IGNoaWxkMigpCisgICAgeworICAgICAgICBBU1NFUlQoIShvcCAm
IE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDI7
CisgICAgfQorCisgICAgTm9kZUluZGV4IGNoaWxkMygpCisgICAgeworICAgICAgICBBU1NFUlQo
IShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5j
aGlsZDM7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQoKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICByZXR1cm4gY2hpbGRy
ZW4udmFyaWFibGUuZmlyc3RDaGlsZDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtQ2hp
bGRyZW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3MpOworICAg
ICAgICByZXR1cm4gY2hpbGRyZW4udmFyaWFibGUubnVtQ2hpbGRyZW47CisgICAgfQorICAgIAog
ICAgIC8vIFRoaXMgZW51bSB2YWx1ZSBkZXNjcmliZXMgdGhlIHR5cGUgb2YgdGhlIG5vZGUuCiAg
ICAgTm9kZVR5cGUgb3A7CiAgICAgLy8gVXNlZCB0byBsb29rIHVwIGV4Y2VwdGlvbiBoYW5kbGlu
ZyBpbmZvcm1hdGlvbiAoY3VycmVudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgp
LgogICAgIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbzsKICAgICAvLyBSZWZlcmVuY2VzIHRv
IHVwIHRvIDMgY2hpbGRyZW4gKDAgZm9yIG5vIGNoaWxkKS4KLSAgICBOb2RlSW5kZXggY2hpbGQx
LCBjaGlsZDIsIGNoaWxkMzsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAg
ICAgICBOb2RlSW5kZXggY2hpbGQxLCBjaGlsZDIsIGNoaWxkMzsKKyAgICAgICAgfSBmaXhlZDsK
KyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQ7CisgICAg
ICAgICAgICB1bnNpZ25lZCBudW1DaGlsZHJlbjsKKyAgICAgICAgfSB2YXJpYWJsZTsKKyAgICB9
IGNoaWxkcmVuOwogCiBwcml2YXRlOgogICAgIC8vIFRoZSB2aXJ0dWFsIHJlZ2lzdGVyIG51bWJl
ciAoc3BpbGwgbG9jYXRpb24pIGFzc29jaWF0ZWQgd2l0aCB0aGlzIC4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiA5MDQxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsOCArMjY1LDggQEAgdm9pZCBOb25TcGVj
dWxhdGl2ZUpJVDo6a25vd25Db25zdGFudEFyaQogCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpi
YXNpY0FyaXRoT3AoTm9kZVR5cGUgb3AsIE5vZGUgJm5vZGUpCiB7Ci0gICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlz
LCBub2RlLmNoaWxkMik7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
IAogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJSZWcgYXJnMkdQUiA9
IGFyZzIuZ3ByKCk7CkBAIC0yNzcsOSArMjc3LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
YmFzaWNBcml0aE9wKE5vZAogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0
aDsKICAgICAKLSAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkKKyAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQogICAgICAgICBzbG93UGF0aC5hcHBlbmQo
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMikpCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFy
ZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgIAogICAgIHN3aXRj
aCAob3ApIHsKQEAgLTM0Niw4ICszNDYsOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21w
YXJlKE5vZGUmIG5vCiB7CiAgICAgLy8gRklYTUU6IHNob3VsZCBkbyBzb21lIHBlZXBob2xlIHRv
IGZ1c2UgY29tcGFyZS9icmFuY2gKICAgICAgICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0
aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNo
aWxkMik7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlJlZyBh
cmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAg
ICAgCkBAIC0zNTYsOSArMzU2LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShO
b2RlJiBubwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAK
LSAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkKKyAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSk7Ci0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpCisg
ICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgIAogICAgIG1faml0LmNvbXBhcmUz
Mihjb25kLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpOwpAQCAtMzk3LDcgKzM5Nyw3IEBA
IHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKIAogICAgIHN3aXRjaCAo
b3ApIHsKICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHRo
aXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNW
YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHRoaXNHUFIgPSB0aGlz
VmFsdWUuZ3ByKCk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKQEAgLTQyNCw3ICs0MjQs
NyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAg
ICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwogICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC00MzMsMjMgKzQzMywyMyBAQCB2b2lkIE5vblNwZWN1
bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBC
aXRPcjoKICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSkpIHsKLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNo
aWxkMik7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAg
ICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AyKTsKIAotICAgICAgICAgICAgYml0
T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSwgb3AyLmdwcigpLCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQxKCkpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxKTsKIAotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQyKSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAg
Yml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpLCBvcDEuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgSW50ZWdlck9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxLCBvcDIpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKQEAg
LTQ2MywxMSArNDYzLDExIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNlIEJp
dFVSU2hpZnQ6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7Ci0g
ICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAg
ICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAgICAgIGludCBzaGlmdEFtb3VudCA9
IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSAmIDB4MWY7CisgICAgICAgICAgICBp
bnQgc2hpZnRBbW91bnQgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSAmIDB4
MWY7CiAgICAgICAgICAgICAvLyBTaGlmdHMgYnkgemVybyBzaG91bGQgaGF2ZSBiZWVuIG9wdGlt
aXplZCBvdXQgb2YgdGhlIGdyYXBoIQogICAgICAgICAgICAgQVNTRVJUKHNoaWZ0QW1vdW50KTsK
ICAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgc2hpZnRBbW91bnQsIHJlc3VsdC5n
cHIoKSk7CkBAIC00NzUsOCArNDc1LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShTcGVjdWxhdAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIERvIG5vdCBhbGxv
dyBzaGlmdCBhbW91bnQgdG8gYmUgdXNlZCBhcyB0aGUgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlciBk
b2VzIG5vdCBwZXJtaXQgdGhpcy4KLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIpOworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAg
ICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKQEAgLTQ4OCw3ICs0ODgsNyBAQCB2b2lk
IE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBVSW50MzJUb051bWJlcjogewotICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEpOworICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSBib3hlcih0aGlzKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAKQEAgLTUxMywyNiArNTEzLDI2
IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAg
ICBjYXNlIFZhbHVlVG9JbnQzMjogewotICAgICAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChu
b2RlLmNoaWxkMSkpOworICAgICAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxk
MSgpKSk7CiAKLSAgICAgICAgaWYgKGlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkgewotICAg
ICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAg
aWYgKGlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAg
IEdlbmVyYXRpb25JbmZvJiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBo
KClbbm9kZS5jaGlsZDFdLnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgR2VuZXJhdGlvbklu
Zm8mIGNoaWxkSW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxk
MSgpXS52aXJ0dWFsUmVnaXN0ZXIoKV07CiAgICAgICAgIGlmICgoY2hpbGRJbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0RvdWJsZSkgewotICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAg
RG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgbnVtYmVyVG9JbnQzMihvcDEuZnBy
KCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgdmFsdWVUb0ludDMyKG9wMSwgcmVzdWx0Lmdw
cigpKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKQEAgLTU0MCwxOCArNTQwLDE4IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
U3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6IHsKLSAgICAgICAgQVNT
RVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKTsKLSAgICAgICAgQVNTRVJUKCFpc0Rv
dWJsZUNvbnN0YW50KG5vZGUuY2hpbGQxKSk7CisgICAgICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgQVNTRVJUKCFpc0RvdWJsZUNvbnN0YW50KG5v
ZGUuY2hpbGQxKCkpKTsKIAotICAgICAgICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEp
KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwor
ICAgICAgICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3Ax
LmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICB2YWx1ZVRvTnVtYmVyKG9wMSwgcmVzdWx0Lmdw
cigpKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKQEAgLTU2MCwxMyArNTYwLDEzIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
U3BlY3VsYXQKIAogICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgY2FzZSBBcml0aEFkZDogewotICAg
ICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSkgewotICAgICAgICAgICAga25v
d25Db25zdGFudEFyaXRoT3Aob3AsIG5vZGUuY2hpbGQyLCBub2RlLmNoaWxkMSwgdHJ1ZSk7Cisg
ICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAg
IGtub3duQ29uc3RhbnRBcml0aE9wKG9wLCBub2RlLmNoaWxkMigpLCBub2RlLmNoaWxkMSgpLCB0
cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAga25vd25Db25z
dGFudEFyaXRoT3Aob3AsIG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMiwgZmFsc2UpOworICAgICAg
ICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBrbm93
bkNvbnN0YW50QXJpdGhPcChvcCwgbm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgZmFsc2Up
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01NzUsOCArNTc1
LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50
KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3AoQXJpdGhT
dWIsIG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMiwgZmFsc2UpOworICAgICAgICBpZiAoaXNJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBrbm93bkNvbnN0YW50QXJp
dGhPcChBcml0aFN1Yiwgbm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgZmFsc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01OTAsOCArNTkwLDggQEAg
dm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNh
c2UgQXJpdGhEaXY6IHsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEpOwotICAgICAgICBEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAg
ICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBEb3Vi
bGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZwcigpOwog
ICAgICAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOwpAQCAtNjA0LDggKzYwNCw4IEBAIHZv
aWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNl
IEFyaXRoTW9kOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jh
cnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGVk
eCh0aGlzLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAKQEAgLTYyMyw5ICs2MjMsOSBAQCB2b2lkIE5v
blNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBkb25lOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBtb2RCeVplcm87CiAgICAg
Ci0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEpKQorICAgICAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQogICAgICAgICAgICAgZmlyc3RPcE5vdElu
dCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9wMUdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLmNoaWxkMikpCisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkp
CiAgICAgICAgICAgICBzZWNvbmRPcE5vdEludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIG9wMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAg
ICAKICAgICAgICAgbW9kQnlaZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBvcDJHUFIpOwpAQCAtNjU1LDE4ICs2NTUsMTggQEAgdm9pZCBOb25TcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpKSkpLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgCi0gICAgICAgIGlmICghaXNLbm93bklu
dGVnZXIobm9kZS5jaGlsZDEpKSB7CisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5j
aGlsZDEoKSkpIHsKICAgICAgICAgICAgIGZpcnN0T3BOb3RJbnQubGluaygmbV9qaXQpOwogICAg
ICAgICAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNlY29uZE9wTm90SW50MjsKICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkKKyAg
ICAgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpCiAgICAgICAgICAg
ICAgICAgc2Vjb25kT3BOb3RJbnQyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpC
ZWxvdywgb3AyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAvLyBmaXJzdCBvcCBpcyBhIGRvdWJsZSwgc2Vjb25kIG9wIGlzIGFu
IGludC4KICAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMkdQUiwgb3Ay
RlBSKTsKIAotICAgICAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpIHsK
KyAgICAgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKICAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBnb3RTZWNvbmRPcCA9IG1faml0Lmp1bXAoKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNlY29uZE9wTm90SW50Mi5saW5rKCZtX2pp
dCk7CkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShT
cGVjdWxhdAogICAgICAgICAgICAgZ290RG91YmxlQXJncyA9IG1faml0Lmp1bXAoKTsKICAgICAg
ICAgfQogICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkgewor
ICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CiAgICAgICAgICAg
ICBzZWNvbmRPcE5vdEludC5saW5rKCZtX2ppdCk7CiAgICAgICAgIAogICAgICAgICAgICAgLy8g
d2Uga25vdyB0aGF0IHRoZSBmaXJzdCBvcCBpcyBhbiBpbnQsIGFuZCB0aGUgc2Vjb25kIGlzIGEg
ZG91YmxlCkBAIC02OTAsMTAgKzY5MCwxMCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKFNwZWN1bGF0CiAgICAgICAgICAgICB1bmJveERvdWJsZShvcDJHUFIsIG9wMkZQUik7CiAg
ICAgICAgIH0KICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkp
CisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkpCiAgICAgICAgICAg
ICBnb3REb3VibGVBcmdzLmxpbmsoJm1faml0KTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkgewor
ICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMigpKSkgewogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3Rl
cnMoWDg2UmVnaXN0ZXJzOjplZHgpOwogICAgICAgICAgICAgc2V0dXBUd29TdHViQXJnczxGUFJJ
bmZvOjphcmd1bWVudEZQUjAsIEZQUkluZm86OmFyZ3VtZW50RlBSMT4ob3AxRlBSLCBvcDJGUFIp
OwogICAgICAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChmbW9kKTsKQEAgLTcwOCw3ICs3MDgsNyBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAg
Y2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9k
ZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgIEdQUlJl
ZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKQEAgLTc1Nyw4ICs3NTcsOCBAQCB2b2lkIE5vblNwZWN1
bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBH
ZXRCeVZhbDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIpOwor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKIAogICAgICAg
ICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGNsZWFu
SW5kZXgodGhpcyk7CkBAIC04MDksOSArODA5LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShTcGVjdWxhdAogCiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOwotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIG5vZGUuY2hpbGQzKTsKKyAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
Myh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdw
cigpOwogICAgICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAgICAgICAgIEdQUlJl
ZyBhcmczR1BSID0gYXJnMy5ncHIoKTsKQEAgLTgyNSw3ICs4MjUsNyBAQCB2b2lkIE5vblNwZWN1
bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBHZXRCeUlkOiB7
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgYmFzZSk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBAIC04
MzksOCArODM5LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAog
ICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS5jaGlsZDIpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigp
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CkBAIC04NTQsOCArODU0LDggQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShT
cGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC04ODAsNyArODgwLDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSBnbG9iYWxPYmplY3QodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOwogICAgICAgICAKQEAgLTkwNyw3ICs5MDcsNyBAQCB2b2lkIE5vblNwZWN1bGF0
aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgfQogCiAgICAgY2FzZSBCcmFuY2g6IHsKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKQEAg
LTkzNiw3ICs5MzYsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0
CiAjZW5kaWYKIAogICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1cm5WYWx1ZUdQ
Ui4KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBtX2pp
dC5tb3ZlKG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgICAgIC8v
IEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgpAQCAtOTUyLDcgKzk1Miw3IEBAIHZvaWQgTm9uU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIENoZWNrSGFz
SW5zdGFuY2U6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIGJh
c2VSZWcgPSBiYXNlLmdwcigpOwpAQCAtOTgwLDkgKzk4MCw5IEBAIHZvaWQgTm9uU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIEluc3RhbmNlT2Y6IHsK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgcHJvdG90eXBlKHRoaXMsIG5vZGUuY2hpbGQzKTsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3Rv
dHlwZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcywgYmFzZSk7CiAKICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CkBA
IC0xMDUxLDYgKzEwNTEsMTMgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVj
dWxhdAogI2Vsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgY2FsbGVlKHRoaXMsIG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0
Q2hpbGQoKV0pOworICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOworICAg
ICAgICBlbWl0Q2FsbChub2RlLCBjYWxsZWVHUFIpOworICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA5
MDQxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICAgICAgICAgIm1vdiAoJXJzcCksICUiIFNU
UklOR0laRShyZWdpc3RlcikgIlxuIiBcCiAgICAgICAgICJqbXAgXyIgU1RSSU5HSVpFKGZ1bmN0
aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CisjZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9BUkcyX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJzaSkKICNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX0FSRzRfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQogI2RlZmluZSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfQVJHNV9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByOCkKIApAQCAtMzk3LDYgKzM5OCwxMTQg
QEAgYm9vbCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKgogICAgIHJldHVybiBK
U1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUoKTsKK0VuY29kZWRKU1ZhbHVlIGdldEhvc3RDYWxsUmV0dXJuVmFsdWVX
aXRoRXhlY1N0YXRlKEV4ZWNTdGF0ZSopOworCithc20gKAorIi5nbG9ibCBfIiBTVFJJTkdJWkUo
Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgorIl8iIFNUUklOR0laRShnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlKSAiOiIgIlxuIgorICAgICJtb3YgLTQwKCVyMTMpLCAlcjEzXG4iCisgICAgIm1v
diAlcjEzLCAlcmRpXG4iCisgICAgImptcCBfIiBTVFJJTkdJWkUoZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKKyk7CisKK0VuY29kZWRKU1ZhbHVlIGdldEhvc3RDYWxs
UmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPmdsb2JhbERhdGEoKS5ob3N0Q2FsbFJldHVyblZhbHVlKTsK
K30KKworc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
SlNWYWx1ZSBjYWxsZWUpCit7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2Fs
bGVyRnJhbWUoKTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
Z2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7CisgICAgCisgICAgQVNTRVJUKGNhbGxUeXBl
ICE9IENhbGxUeXBlSlMpOworICAgIAorICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3Qp
IHsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCku
Z3JvdyhleGVjQ2FsbGVlLT5yZWdpc3RlcnMoKSkpIHsKKyAgICAgICAgICAgIGdsb2JhbERhdGEt
PmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBleGVjQ2FsbGVlLT5zZXRT
Y29wZUNoYWluKGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CisgICAgICAgIAorICAgICAgICBnbG9iYWxE
YXRhLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2
ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CisgICAgICAgIAorICAgICAgICBpZiAoZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKKyAgICB9CisgICAg
CisgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7CisgICAgZXhlYy0+Z2xvYmFs
RGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIG9wZXJhdGlvbkxpbmtDYWxsV2l0aFJldHVybkFk
ZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cik7CitGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfQVJHMl9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25MaW5rQ2FsbCk7Cit2b2lkKiBvcGVyYXRp
b25MaW5rQ2FsbFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWND
YWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVl
LT5jYWxsZWVBc1ZhbHVlKCk7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdl
dEpTRnVuY3Rpb24oKmdsb2JhbERhdGEsIGNhbGxlZUFzVmFsdWUpOworICAgIGlmICghY2FsbGVl
QXNGdW5jdGlvbkNlbGwpCisgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVl
LCBjYWxsZWVBc1ZhbHVlKTsKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0Z1bmN0aW9uKGNh
bGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNh
bGxlZS0+ZXhlY3V0YWJsZSgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
UHRyOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKKyAgICBpZiAoZXhlY3V0YWJsZS0+
aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAgICAgSlNPYmplY3QqIGVycm9yID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChleGVjLCBjYWxsZWUtPnNjb3BlKCkp
OworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGdsb2JhbERhdGEtPmV4Y2VwdGlv
biA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisgICAgICAgIGNvZGVCbG9jayA9ICZmdW5jdGlvbkV4ZWN1dGFibGUtPmdl
bmVyYXRlZEJ5dGVjb2RlRm9yQ2FsbCgpOworICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+
bV9udW1QYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFi
bGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpOworICAgICAgICBleGVjQ2FsbGVlLT5zZXRT
Y29wZUNoYWluKGNhbGxlZS0+c2NvcGUoKSk7CisgICAgfQorICAgIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhyZXR1cm5BZGRy
ZXNzKTsKKyAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVuT25jZSgpKQorICAgICAgICBjYWxsTGlu
a0luZm8uc2V0U2VlbigpOworICAgIGVsc2UKKyAgICAgICAgZGZnTGlua0NhbGwoZXhlY0NhbGxl
ZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CisgICAgcmV0dXJu
IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKwordm9pZCogb3BlcmF0aW9uVmlydHVh
bENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4
ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2Fs
bGVlLT5jYWxsZWVBc1ZhbHVlKCk7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9
IGdldEpTRnVuY3Rpb24oKmdsb2JhbERhdGEsIGNhbGxlZUFzVmFsdWUpOworICAgIGlmICghY2Fs
bGVlQXNGdW5jdGlvbkNlbGwpCisgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2Fs
bGVlLCBjYWxsZWVBc1ZhbHVlKTsKKyAgICAKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFz
RnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNI
b3N0RnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENv
ZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKS5leGVjdXRhYmxlQWRkcmVzcygpOworCisgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSBmdW5j
dGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGV4ZWMsIGZ1bmN0aW9uLT5zY29wZSgpKTsK
KyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9
IGVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZXhlY0NhbGxlZS0+c2V0U2Nv
cGVDaGFpbihmdW5jdGlvbi0+c2NvcGUoKSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkluc3RhbmNlT2YoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvdG90eXBlKQogewogICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA5MDQxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MCw2ICs4MCw4IEBAIGJvb2wgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIoRXhlY1N0YXRlKiwKIGJv
b2wgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKIGJvb2wgb3BlcmF0aW9uQ29t
cGFyZUVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIpOwogYm9vbCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7
Cit2b2lkKiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKTsKK3ZvaWQqIG9wZXJhdGlv
bkxpbmtDYWxsKEV4ZWNTdGF0ZSopOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1
cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcwog
Ly8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBv
ZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDkwNDE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYgKzM3NSwy
MSBAQCB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgCiAgICAgICAgIGRm
Z1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIH0KIAordm9p
ZCBkZmdMaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
LCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY29kZVB0cikKK3sKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9j
ayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIAorICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIGlmICghY2Fs
bGVlQ29kZUJsb2NrIHx8IHN0YXRpY19jYXN0PGludD4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSkgPT0gY2FsbGVlQ29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpIHsKKyAgICAg
ICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgICAgIGNhbGxMaW5rSW5m
by5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPmdsb2JhbERhdGEoKSwgY2FsbExpbmtJ
bmZvLmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2Fs
bGVlKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhP
dGhlciwgY29kZVB0cik7CisgICAgfQorICAgIAorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENv
ZGVMb2NhdGlvbkNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG9wZXJhdGlv
blZpcnR1YWxDYWxsKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lvbiA5MDQx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHZv
aWQgZGZnUmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ0J1
aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1JlcGF0Y2hQ
dXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQ
cm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCBkZmdMaW5r
Q2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0aW9uKiBj
YWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDkwNDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MywxNyArMzYzLDE3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGUKICAgICAgICAgbm90VGFr
ZW4gPSB0bXA7CiAgICAgfQogCi0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkp
IHsKLSAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxk
MSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
Mik7CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBp
bnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIEpJVENvbXBpbGVyOjpJbW0z
MihpbW0pLCBvcDIuZ3ByKCkpLCB0YWtlbik7Ci0gICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDIpOworICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQyKCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMigpKTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRp
dGlvbiwgb3AxLmdwcigpLCBKSVRDb21waWxlcjo6SW1tMzIoaW1tKSksIHRha2VuKTsKICAgICB9
IGVsc2UgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwg
b3AxLmdwcigpLCBvcDIuZ3ByKCkpLCB0YWtlbik7CiAgICAgfQogCkBAIC0zOTgsOCArMzk4LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQ2FsbAogICAgICAgICBub3RU
YWtlbiA9IHRtcDsKICAgICB9CiAKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEpOwotICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdw
cigpOwogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKQEAgLTQyMywyMCArNDIzLDIwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9k
ZSYgbm9kZSwKICAgICAgICAgLy8gc28gY2FuIGJlIG5vIGludGVydmVuaW5nIG5vZGVzIHRvIGFs
c28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAKICAgICAgICAgQVNTRVJUKG5vZGUuYWRqdXN0ZWRS
ZWZDb3VudCgpID09IDEpOwogCi0gICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUuY2hpbGQxLCBub2RlLmNoaWxkMikpCisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKQogICAgICAgICAgICAgY29tcGlsZVBl
ZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIGNvbmRpdGlvbik7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUNhbGwobm9kZSwgYnJhbmNo
Tm9kZUluZGV4LCBvcGVyYXRpb24pOwogCi0gICAgICAgIHVzZShub2RlLmNoaWxkMSk7Ci0gICAg
ICAgIHVzZShub2RlLmNoaWxkMik7CisgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5v
ZGVJbmRleDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLy8gTm9ybWFsIGNh
c2UsIG5vdCBmdXNlZCB0byBicmFuY2guCi0gICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIpOworICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAK
ICAgICBtX2ppdC5jb21wYXJlMzIoY29uZGl0aW9uLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKQEAgLTQ4MiwyMCArNDgyLDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIHN3aXRjaCAo
bV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkpIHsKICAgICAgICAgY2Fz
ZSBQcmVkaWN0SW50MzI6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUz
Mih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAg
ICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIFByZWRpY3RBcnJheTogewotICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoY2VsbC5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9k
ZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUu
bG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC01MDcsMjMgKzUwNywyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAg
ICBjYXNlIEJpdFhvcjoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkp
IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNo
aWxkMik7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigp
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AyKTsKIAotICAgICAg
ICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSwgb3AyLmdw
cigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQxKCkpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAotICAgICAgICAgICAg
Yml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSwgb3AxLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGUuY2hpbGQyKCkpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAg
IGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxLCBvcDIpOwogCiAgICAgICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIo
KTsKQEAgLTUzNywxNyArNTM3LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBj
YXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIp
KSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEpOworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAg
ICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDIpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9w
MS5ncHIoKSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkgJiAweDFmLCByZXN1
bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRG8gbm90IGFs
bG93IHNoaWZ0IGFtb3VudCB0byBiZSB1c2VkIGFzIHRoZSByZXN1bHQsIE1hY3JvQXNzZW1ibGVy
IGRvZXMgbm90IHBlcm1pdCB0aGlzLgotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAgICAgIEdQUlJlZyByZWcx
ID0gb3AxLmdwcigpOwpAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFVJbnQzMlRvTnVt
YmVyOiB7Ci0gICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Cisg
ICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhlIG9w
ZXJhbmQgaXMgcG9zaXRpdmUuCkBAIC01NzEsNyArNTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7
Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7
CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2pp
dC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChy
ZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkpOwpAQCAtNTc5LDE0ICs1
NzksMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgVmFsdWVUb051bWJlcjogewotICAgICAgICBpZiAoaXNJbnRlZ2VyKG5vZGUu
Y2hpbGQxKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKTsKKyAgICAgICAgaWYgKGlzSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgewor
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAg
ICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIG9wMS5mb3JtYXQoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1
bHQuZnByKCkpOwogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CkBAIC01OTUsMTAgKzU5NSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAKICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsK
LSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEsIG5vZGUuY2hp
bGQyKSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSkpIHsK
LSAgICAgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSk7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2
YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBv
cDIuZ3ByKCksIEltbTMyKGltbTEpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTYwNyw5ICs2MDcsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICAg
ICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpOworICAg
ICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNy
b0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIo
KSkpOwpAQCAtNjE4LDggKzYxOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgICAgIEdQUlJlZyBncHIxID0gb3AxLmdw
cigpOwpAQCAtNjM4LDggKzYzOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAgRlBSUmVnIHJlZzEgPSBv
cDEuZnByKCk7CkBAIC02NTEsMTAgKzY1MSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIpKSB7Ci0g
ICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgewotICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0g
ICAgICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDIpOworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgp
LCBub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMigpKSkgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2
YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwg
SW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOwpAQCAtNjYzLDggKzY2Myw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9w
MS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTY3Myw4ICs2NzMsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsK
IAogICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKQEAgLTY4Niw5ICs2ODYsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBBcml0aE11bDogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSwgbm9kZS5jaGlsZDIpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgIEdQUlJl
ZyByZWcxID0gb3AxLmdwcigpOwpAQCAtNzA0LDggKzcwNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwot
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7Cisg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAKICAgICAgICAg
RlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CkBAIC03MTgsOCArNzE4LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhEaXY6
IHsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEp
OwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7
CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigp
KTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgIEZQ
UlJlZyByZWcxID0gb3AxLmZwcigpOwpAQCAtNzMxLDggKzczMSw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoTW9kOiB7
Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7
Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7
CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IGVkeCh0aGlzLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAgICAg
ICAgIEdQUlJlZyBvcDFHcHIgPSBvcDEuZ3ByKCk7CkBAIC03NTksNyArNzU5LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgTG9n
aWNhbE5vdDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxk
MSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOyAvLyBGSVhNRTogV2UgY291bGQgcmV1
c2UsIGJ1dCBvbiBzcGVjdWxhdGlvbiBmYWlsIHdvdWxkIG5lZWQgcmVjb3ZlcnkgdG8gcmVzdG9y
ZSB0YWcgKGFraW4gdG8gYWRkKS4KIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOwpAQCAtNzk4LDggKzc5OCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENvbXBhcmVTdHJp
Y3RFcTogewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7
CiAKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxLmdwcigp
LCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkBAIC04MTEsMTggKzgxMSwxOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRC
eVZhbDogewotICAgICAgICBOb2RlSW5kZXggYWxpYXMgPSBub2RlLmNoaWxkMzsKKyAgICAgICAg
Tm9kZUluZGV4IGFsaWFzID0gbm9kZS5jaGlsZDMoKTsKICAgICAgICAgaWYgKGFsaWFzICE9IE5v
Tm9kZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IHJlc3VsdCBzaG91bGQgYmUgYWJsZSB0byBy
ZXVzZSBjaGlsZDEsIGNoaWxkMi4gU2hvdWxkIGhhdmUgYW4gJ1VudXNlZE9wZXJhbmQnIHR5cGUu
Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhbGlhc2VkVmFsdWUodGhpcywgbm9kZS5jaGls
ZDMpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYWxpYXNlZFZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQzKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhbGlhc2Vk
VmFsdWUpOwogICAgICAgICAgICAgbV9qaXQubW92ZShhbGlhc2VkVmFsdWUuZ3ByKCksIHJlc3Vs
dC5ncHIoKSk7CiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKTsKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKIAogICAgICAgICBHUFJS
ZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CkBAIC04MzUsNyArODM1LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFz
ZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3Zl
Y3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVk
IHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAg
ICAgTm9kZSYgYmFzZU5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxXTsKKyAgICAgICAg
Tm9kZSYgYmFzZU5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxKCldOwogICAgICAgICBp
ZiAoYmFzZU5vZGUub3AgIT0gR2V0TG9jYWwgfHwgbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9u
KGJhc2VOb2RlLmxvY2FsKCkpICE9IFByZWRpY3RBcnJheSkKICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSkpOwpAQCAtODUyLDkgKzg1Miw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFsOiB7Ci0gICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIp
OwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMyk7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxk
MigpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDMoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAgIC8vIE1hcCBi
YXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2gg
cmVnaXN0ZXIuCkBAIC04NjcsNyArODY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwg
YW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rv
ckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJl
IHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgTm9kZSYgYmFzZU5v
ZGUgPSBtX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxXTsKKyAgICAgICAgTm9kZSYgYmFzZU5vZGUg
PSBtX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxKCldOwogICAgICAgICBpZiAoYmFzZU5vZGUub3Ag
IT0gR2V0TG9jYWwgfHwgbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKGJhc2VOb2RlLmxvY2Fs
KCkpICE9IFByZWRpY3RBcnJheSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdpdGhp
bkFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKQEAgLTkwOSw5ICs5MDksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7
Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwot
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5j
aGlsZDIpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMyk7
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGls
ZDMoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAKICAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwpAQCAtOTQxLDcgKzk0MSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IEJyYW5jaDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxk
MSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKIAogICAgICAgICBCbG9ja0lu
ZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9k
ZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwpAQCAtOTc3LDcgKzk3Nyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICNlbmRpZgogCiAgICAgICAgIC8vIFJldHVy
biB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSLgotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CiAKICAgICAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCkBA
IC05OTMsNyArOTkzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgdGVtcCh0aGlzKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRl
bXAuZ3ByKCkpOwpAQCAtMTAwNCw3ICsxMDA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlJZDogewotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKIAogICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwpAQCAtMTAxNiw4ICsxMDE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZDogewotICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIpOworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAgY2FjaGVkUHV0QnlJZChiYXNlLmdwcigpLCB2
YWx1ZS5ncHIoKSwgc2NyYXRjaC5ncHIoKSwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERp
cmVjdCk7CkBAIC0xMDI3LDggKzEwMjcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMik7CisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBjYWNoZWRQdXRCeUlkKGJhc2UuZ3ByKCksIHZhbHVl
LmdwcigpLCBzY3JhdGNoLmdwcigpLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsK
QEAgLTEwNDksNyArMTA0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgZ2xvYmFs
T2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAg
ICAgCkBAIC0xMDY4LDcgKzEwNjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOiB7Ci0gICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBH
UFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogCiAgICAgICAgIC8vIFNwZWN1bGF0ZSB0aGF0
IGJhc2UgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnLgpAQCAtMTA4MCw5ICsxMDgwLDkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAg
IGNhc2UgSW5zdGFuY2VPZjogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAvLyBCYXNlIHVudXNlZCBzaW5jZSB3ZSBzcGVj
dWxhdGUgZGVmYXVsdCBJbnN0YW5jZU9mIGJlaGF2aW91ciBpbiBDaGVja0hhc0luc3RhbmNlLgot
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm90b3R5cGUodGhpcywgbm9kZS5jaGlsZDMp
OworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm90b3R5cGUodGhpcywgbm9kZS5jaGls
ZDMoKSk7CiAKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKQEAgLTExMjUs
NiArMTEyNSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAj
ZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgorICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgY2FzZSBDYWxsOgorICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxs
ZWUodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgp
XSk7CisgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CisgICAgICAgIGVt
aXRDYWxsKG5vZGUsIGNhbGxlZUdQUik7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlm
IChub2RlLmhhc1Jlc3VsdCgpICYmIG5vZGUubXVzdEdlbmVyYXRlKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5MDQx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQ2hl
Y2sgaWYgdGhlIGxhc3ROb2RlIGlzIGEgYnJhbmNoIG9uIHRoaXMgbm9kZS4KICAgICAgICAgTm9k
ZSYgbGFzdE5vZGUgPSBtX2ppdC5ncmFwaCgpW2xhc3ROb2RlSW5kZXhdOwotICAgICAgICByZXR1
cm4gbGFzdE5vZGUub3AgPT0gQnJhbmNoICYmIGxhc3ROb2RlLmNoaWxkMSA9PSBtX2NvbXBpbGVJ
bmRleCA/IGxhc3ROb2RlSW5kZXggOiBOb05vZGU7CisgICAgICAgIHJldHVybiBsYXN0Tm9kZS5v
cCA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0
Tm9kZUluZGV4IDogTm9Ob2RlOwogICAgIH0KIAogICAgIGJvb2wgaXNJbnRlZ2VyKE5vZGVJbmRl
eCBub2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5oCShyZXZpc2lvbiA5MDQxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBu
YW1lc3BhY2UgSlNDICB7CiAgICAgLy8gUGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBt
b3N0IGZ1bmN0aW9ucy4KICAgICBjbGFzcyBFeGVjU3RhdGUgOiBwcml2YXRlIFJlZ2lzdGVyIHsK
ICAgICBwdWJsaWM6CisgICAgICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmpzVmFsdWUoKTsgfQogICAgICAgICBKU09i
amVjdCogY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OkNhbGxlZV0u
ZnVuY3Rpb24oKTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0
dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsg
fQogICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbigpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5MDQxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNiBAQCBKSVQ6
OkpJVChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCCiAgICAgLCBtX2dsb2JhbERhdGEo
Z2xvYmFsRGF0YSkKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fbGFiZWxz
KGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKLSAgICAs
IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8oY29kZUJsb2NrID8gY29kZUJsb2Nr
LT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKSA6IDApCiAgICAgLCBtX2J5dGVjb2RlT2Zmc2V0KCh1
bnNpZ25lZCktMSkKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICwgbV9qdW1wVGFyZ2V0SW5k
ZXgoMCkKQEAgLTM1NSw3ICszNTQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9
PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCkpOworICAgIEFTU0VSVChtX2Nh
bGxMaW5rSW5mb0luZGV4ID09IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6
ZSgpKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBn
dWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KQEAgLTQ2NCw3ICs0NjMsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIH0KIAogICAgIEFTU0VSVChtX3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9PSBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZv
LnNpemUoKSk7Ci0gICAgQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jb2RlQmxvY2st
Pm51bWJlck9mQ2FsbExpbmtJbmZvcygpKTsKKyAgICBBU1NFUlQobV9jYWxsTGlua0luZm9JbmRl
eCA9PSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAKICNpZm5k
ZWYgTkRFQlVHCiAgICAgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3
aXRoIEFTU0VSVHMuCkBAIC01ODgsMTAgKzU4NywxMSBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNv
bXBpbGUoQ29kZVB0ciogZnVuCiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNh
bGxSZXR1cm5Mb2NhdGlvbik7CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhC
ZWdpbik7CiAgICAgfQorICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3Mo
bV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsr
aSkgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJ
bmZvKGkpOwogICAgICAgICBpbmZvLmlzQ2FsbCA9IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm9baV0uaXNDYWxsOwotICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgICAgIGluZm8uY2FsbFJldHVybkxv
Y2F0aW9uID0gQ29kZUxvY2F0aW9uTGFiZWwocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVybkxvY2F0aW9u
KSk7CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZiht
X2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAg
ICAgIGluZm8uaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1f
Y2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsKICAgICB9
CkBAIC02MDYsNyArNjA2LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIq
IGZ1bgogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYg
ZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5QXJpdHlDaGVj
ayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CiAKLSAgICByZXR1cm4gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CisgICAgcmV0dXJuIEpJVENvZGUocGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlKCksIEpJVENvZGU6OkJhc2VsaW5lSklUKTsKIH0KIAogdm9pZCBKSVQ6Omxp
bmtGb3IoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29k
ZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0ciBjb2RlLCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbywgaW50IGNhbGxlckFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTYyMywxMiArNjIzLDEyIEBAIHZv
aWQgSklUOjpsaW5rRm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ28KIAogICAgIC8vIHBhdGNoIHRo
ZSBjYWxsIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0byB0cnkgdG8gbGluay4KICAgICBpZiAoa2lu
ZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlu
a0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1
YWxDYWxsKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFy
Q2FsbChjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiksIGdsb2JhbERhdGEtPmppdFN0
dWJzLT5jdGlWaXJ0dWFsQ2FsbCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFT
U0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpVmlydHVhbENvbnN0cnVjdCgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9j
YXRpb25OZWFyQ2FsbChjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiksIGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24g
OTA0MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsNiArMTMyLDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2Rl
SUQgb3Bjb2RlSQogCiAgICAgYWRkU2xvd0Nhc2UoanVtcFRvU2xvdyk7CiAgICAgQVNTRVJUX0pJ
VF9PRkZTRVQoZGlmZmVyZW5jZUJldHdlZW4oYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywg
anVtcFRvU2xvdyksIHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCk7CisgICAgCisgICAg
QVNTRVJUKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxM
aW5rSW5mb0luZGV4KTsKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvKCkpOwogICAgIG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFk
ZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaXNDYWxsID0gb3Bjb2RlSUQgIT0gb3BfY29u
c3RydWN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24g
OTA0MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMTcgKzM3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNH
bG9iYWxEYXRhOwogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZTsKLQorICAgIAogICAgIGNsYXNzIEpJ
VENvZGUgewogICAgICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBDb2RlUmVmOwog
ICAgICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBDb2RlUHRyOwogICAgIHB1Ymxp
YzoKKyAgICAgICAgZW51bSBKSVRUeXBlIHsgSG9zdENhbGxUaHVuaywgQmFzZWxpbmVKSVQsIERG
R0pJVCB9OworCiAgICAgICAgIEpJVENvZGUoKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICBKSVRDb2RlKGNvbnN0IENvZGVSZWYgcmVmKQorICAgICAgICBKSVRDb2RlKGNvbnN0IENv
ZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCiAgICAgICAgICAgICA6IG1fcmVmKHJlZikKKyAg
ICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBA
IC05MywxMiArOTYsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBtX3JlZi5tX2V4ZWN1dGFibGVQb29sLmdldCgpOwogICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBKSVRUeXBlIGppdFR5cGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9qaXRUeXBlOworICAgICAgICB9CiAKICAgICAgICAgLy8gSG9zdCBmdW5jdGlvbnMgYXJl
IGEgYml0IHNwZWNpYWw7IHRoZXkgaGF2ZSBhIG1fY29kZSBwb2ludGVyIGJ1dCB0aGV5CiAgICAg
ICAgIC8vIGRvIG5vdCBpbmRpdmlkdWxseSByZWYgdGhlIGV4ZWN1dGFibGUgcG9vbCBjb250YWlu
aW5nIHRoZSB0cmFtcG9saW5lLgogICAgICAgICBzdGF0aWMgSklUQ29kZSBIb3N0RnVuY3Rpb24o
Q29kZVB0ciBjb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUQ29kZShjb2Rl
LmRhdGFMb2NhdGlvbigpLCAwLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBKSVRDb2RlKGNvZGUu
ZGF0YUxvY2F0aW9uKCksIDAsIDAsIEhvc3RDYWxsVGh1bmspOwogICAgICAgICB9CiAKICAgICAg
ICAgdm9pZCBjbGVhcigpCkBAIC0xMDgsMTIgKzExNiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSklUQ29kZSh2b2lkKiBjb2RlLCBQYXNz
UmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgc2l6ZV90IHNpemUpCisgICAg
ICAgIEpJVENvZGUodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0
YWJsZVBvb2wsIHNpemVfdCBzaXplLCBKSVRUeXBlIGppdFR5cGUpCiAgICAgICAgICAgICA6IG1f
cmVmKGNvZGUsIGV4ZWN1dGFibGVQb29sLCBzaXplKQorICAgICAgICAgICAgLCBtX2ppdFR5cGUo
aml0VHlwZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgQ29kZVJlZiBtX3JlZjsK
KyAgICAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgfTsKIAogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkwNDE0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSwxMSArMzUsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNHbG9iYWxP
YmplY3Q7CiAgICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKICAgICBjbGFzcyBWUHRySGFja0V4
ZWN1dGFibGU7CisgICAgbmFtZXNwYWNlIERGRyB7CisgICAgY2xhc3MgSklUQ29kZUdlbmVyYXRv
cjsKKyAgICB9CiAKICAgICBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVu
Y3Rpb25Bc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopOwogCiAgICAgY2xhc3MgSlNGdW5jdGlvbiA6
IHB1YmxpYyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3Mg
SklUOworICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpKSVRDb2RlR2VuZXJhdG9yOwogICAgICAg
ICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwogCiAgICAgICAgIHR5cGVkZWYgSlNPYmplY3RX
aXRoR2xvYmFsT2JqZWN0IEJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gOTA0MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDYgKzIz
NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKICNpZiBF
TkFCTEUoSklUKQogICAgICAgICBSZXR1cm5BZGRyZXNzUHRyIGV4Y2VwdGlvbkxvY2F0aW9uOwor
ICAgICAgICBKU1ZhbHVlIGhvc3RDYWxsUmV0dXJuVmFsdWU7CiAjZW5kaWYKIAogICAgICAgICBI
YXNoTWFwPE9wYXF1ZUpTQ2xhc3MqLCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEqPiBvcGFxdWVK
U0NsYXNzRGF0YTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>