<?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>169300</bug_id>
          
          <creation_ts>2017-03-07 12:34:24 -0800</creation_ts>
          <short_desc>WTF should make it super easy to do ARM concurrency tricks</short_desc>
          <delta_ts>2017-03-11 01:24:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>169510</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1284489</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-07 12:34:24 -0800</bug_when>
    <thetext>Patch forthcoming.

So far I&apos;ve been able to make it so that this code:

                    lock.transaction(
                        [&amp;] (LockType&amp; value) -&gt; bool {
                            value &amp;= ~mask;
                            if (result.mayHaveMoreThreads)
                                value |= hasParkedBit;
                            return true;
                        });

Emits this code:

0000000000000338	ldaxrb	w9, [x8]
000000000000033c	and	w9, w9, #0xfffffffc
0000000000000340	orr	w9, w9, #0x2
0000000000000344	stlxrb	w10, w9, [x8]
0000000000000348	tbnz	w10, #0x0, 0x338

That&apos;s some nice LL/SC code!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284517</commentid>
    <comment_count>1</comment_count>
      <attachid>303709</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-07 13:07:14 -0800</bug_when>
    <thetext>Created attachment 303709
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284518</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-07 13:08:20 -0800</bug_when>
    <thetext>Attachment 303709 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:116:  The parameter name &quot;order&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Atomics.h:117:  The parameter name &quot;order&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Atomics.h:186:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/Atomics.h:188:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:189:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:189:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Platform.h:762:  CPP comments are not allowed in Platform.h, please use C comments /* ... */  [build/cpp_comment] [5]
Total errors found: 7 in 7 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>1284526</commentid>
    <comment_count>3</comment_count>
      <attachid>303709</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-03-07 13:24:32 -0800</bug_when>
    <thetext>Comment on attachment 303709
the patch

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

r=me

&gt; Source/WTF/wtf/Atomics.h:125
&gt; +        return load(std::memory_order_relaxed);

Need UNUSED_PARAM(order) here.

&gt; Source/WTF/wtf/Atomics.h:184
&gt; +        int ## width ## _t result; \

/int/uint/ to match return type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284710</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-07 19:46:19 -0800</bug_when>
    <thetext>Oh man, this is a perf regression.  But it inspired me to look at GC codegen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284713</commentid>
    <comment_count>5</comment_count>
      <attachid>303763</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-07 19:47:57 -0800</bug_when>
    <thetext>Created attachment 303763
more

This is a crazy patch.  I sort of went on an optimization walkabout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284730</commentid>
    <comment_count>6</comment_count>
      <attachid>303769</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-07 20:31:23 -0800</bug_when>
    <thetext>Created attachment 303769
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284732</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-07 20:33:15 -0800</bug_when>
    <thetext>Attachment 303769 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:121:  The parameter name &quot;order&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Atomics.h:122:  The parameter name &quot;order&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Atomics.h:188:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/Atomics.h:190:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:191:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:191:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:445:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:451:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:445:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:451:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Platform.h:762:  CPP comments are not allowed in Platform.h, please use C comments /* ... */  [build/cpp_comment] [5]
Total errors found: 11 in 16 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>1284737</commentid>
    <comment_count>8</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-07 21:02:06 -0800</bug_when>
    <thetext>Bots don&apos;t look happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284739</commentid>
    <comment_count>9</comment_count>
      <attachid>303773</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-07 21:10:10 -0800</bug_when>
    <thetext>Created attachment 303773
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284741</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-07 21:12:58 -0800</bug_when>
    <thetext>Attachment 303773 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:121:  The parameter name &quot;order&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Atomics.h:122:  The parameter name &quot;order&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Atomics.h:188:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/Atomics.h:190:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:191:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:191:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:445:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:451:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:445:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:451:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Platform.h:762:  CPP comments are not allowed in Platform.h, please use C comments /* ... */  [build/cpp_comment] [5]
Total errors found: 11 in 16 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>1284751</commentid>
    <comment_count>11</comment_count>
      <attachid>303773</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-03-07 21:29:43 -0800</bug_when>
    <thetext>Comment on attachment 303773
the patch

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

&gt; Source/WTF/ChangeLog:53
&gt; +        (WTF::consumeLoad): Deleted.

Since you deleted this, you also need to delete the corresponding test from the API tests.  It looks like this is what&apos;s causing the GTK bot to be sad.  You should also check to see if the other deleted functions have corresponding tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284916</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-08 11:31:59 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 303773 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=303773&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:53
&gt; &gt; +        (WTF::consumeLoad): Deleted.
&gt; 
&gt; Since you deleted this, you also need to delete the corresponding test from
&gt; the API tests.  It looks like this is what&apos;s causing the GTK bot to be sad. 
&gt; You should also check to see if the other deleted functions have
&gt; corresponding tests.

Oh man, I almost got a perfect score on EWS!  That&apos;s what I get for not building all of WK.  Will do that now, and use that as an opportunity to measure JetStream perf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285024</commentid>
    <comment_count>13</comment_count>
      <attachid>303845</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-08 14:29:49 -0800</bug_when>
    <thetext>Created attachment 303845
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285029</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-08 14:32:03 -0800</bug_when>
    <thetext>Attachment 303845 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:121:  The parameter name &quot;order&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Atomics.h:122:  The parameter name &quot;order&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Atomics.h:188:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/Atomics.h:190:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:191:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:191:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:445:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:451:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:445:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:451:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Platform.h:762:  CPP comments are not allowed in Platform.h, please use C comments /* ... */  [build/cpp_comment] [5]
Total errors found: 11 in 17 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>1285166</commentid>
    <comment_count>15</comment_count>
      <attachid>303845</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-03-08 18:27:43 -0800</bug_when>
    <thetext>Comment on attachment 303845
the patch

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

&gt; Source/JavaScriptCore/heap/SlotVisitor.cpp:-247
&gt; -    SuperSamplerScope superSamplerScope(false);
&gt; -    

Should this be deleted, or should it be moved up to SlotVisitor::appendSlow() and SlotVisitor::appendHiddenSlow()?

&gt; Source/JavaScriptCore/heap/SlotVisitorInlines.h:64
&gt; +    appendHiddenSlow(cell, dependency);

I think this should be appendSlow() because we need to be able to handle the m_heapSnapshotBuilder case.

&gt; Source/WTF/wtf/Atomics.h:125
&gt; +    // Props to 

What is this comment trying to say?

&gt; Source/WTF/wtf/Atomics.h:151
&gt; +    

This added space indentation is unneeded.

&gt; Source/WTF/wtf/Atomics.h:456
&gt;  template &lt;typename T, typename std::enable_if&lt;sizeof(T) == 4&gt;::type* = nullptr&gt;
&gt; -ALWAYS_INLINE ConsumeDependency zeroWithConsumeDependency(T value)
&gt; +ALWAYS_INLINE Dependency dependency(T value)
&gt;  {
&gt; -    uint32_t dependency;
&gt; +    unsigned dependency;
&gt;      uint32_t copy = bitwise_cast&lt;uint32_t&gt;(value);
&gt;  #if CPU(ARM64)
&gt;      asm volatile(&quot;eor %w[dependency], %w[in], %w[in]&quot;

The only difference between this &lt;sizeof(T) == 4&gt; version and the &lt;sizeof(T) == 8&gt; above is that the inline asm in this one is declared &quot;volatile&quot; and touching &quot;memory&quot;.  If these are not needed for the &lt;sizeof(T) == 8&gt; above, then they are not needed here.  As a result, do we really need separate &lt;sizeof(T) == 4&gt; and &lt;sizeof(T) == 8&gt; versions?  Both returns an unsigned sized Dependency anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285235</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-08 22:23:54 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 303845 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=303845&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SlotVisitor.cpp:-247
&gt; &gt; -    SuperSamplerScope superSamplerScope(false);
&gt; &gt; -    
&gt; 
&gt; Should this be deleted, or should it be moved up to
&gt; SlotVisitor::appendSlow() and SlotVisitor::appendHiddenSlow()?

It doesn&apos;t do anything unless you change `false` to `true`.  So, I think we should just remove these things whenever they are in the way of a refactoring.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SlotVisitorInlines.h:64
&gt; &gt; +    appendHiddenSlow(cell, dependency);
&gt; 
&gt; I think this should be appendSlow() because we need to be able to handle the
&gt; m_heapSnapshotBuilder case.

Right!  Fixed!

&gt; 
&gt; &gt; Source/WTF/wtf/Atomics.h:125
&gt; &gt; +    // Props to 
&gt; 
&gt; What is this comment trying to say?

Nah.  I was going to cite where I learned the prepare/attempt jargon from, but I think I found that the origin is ambiguous.

&gt; 
&gt; &gt; Source/WTF/wtf/Atomics.h:151
&gt; &gt; +    
&gt; 
&gt; This added space indentation is unneeded.

Removed.

&gt; 
&gt; &gt; Source/WTF/wtf/Atomics.h:456
&gt; &gt;  template &lt;typename T, typename std::enable_if&lt;sizeof(T) == 4&gt;::type* = nullptr&gt;
&gt; &gt; -ALWAYS_INLINE ConsumeDependency zeroWithConsumeDependency(T value)
&gt; &gt; +ALWAYS_INLINE Dependency dependency(T value)
&gt; &gt;  {
&gt; &gt; -    uint32_t dependency;
&gt; &gt; +    unsigned dependency;
&gt; &gt;      uint32_t copy = bitwise_cast&lt;uint32_t&gt;(value);
&gt; &gt;  #if CPU(ARM64)
&gt; &gt;      asm volatile(&quot;eor %w[dependency], %w[in], %w[in]&quot;
&gt; 
&gt; The only difference between this &lt;sizeof(T) == 4&gt; version and the &lt;sizeof(T)
&gt; == 8&gt; above is that the inline asm in this one is declared &quot;volatile&quot; and
&gt; touching &quot;memory&quot;.  If these are not needed for the &lt;sizeof(T) == 8&gt; above,
&gt; then they are not needed here.  As a result, do we really need separate
&gt; &lt;sizeof(T) == 4&gt; and &lt;sizeof(T) == 8&gt; versions?  Both returns an unsigned
&gt; sized Dependency anyway.

I removed volatile/&quot;memory&quot; - it&apos;s not needed for either.

There&apos;s still one more difference - bitwise casting to uint64_t versus uint32_t.  I can see a few ways to refactor this to combine code, but it&apos;s a bit tricky, so I&apos;ll file a bug and add a FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285237</commentid>
    <comment_count>17</comment_count>
      <attachid>303845</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-03-08 22:27:49 -0800</bug_when>
    <thetext>Comment on attachment 303845
the patch

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

r=me with fixes applied.

&gt;&gt;&gt; Source/WTF/wtf/Atomics.h:456
&gt;&gt;&gt;      asm volatile(&quot;eor %w[dependency], %w[in], %w[in]&quot;
&gt;&gt; 
&gt;&gt; The only difference between this &lt;sizeof(T) == 4&gt; version and the &lt;sizeof(T) == 8&gt; above is that the inline asm in this one is declared &quot;volatile&quot; and touching &quot;memory&quot;.  If these are not needed for the &lt;sizeof(T) == 8&gt; above, then they are not needed here.  As a result, do we really need separate &lt;sizeof(T) == 4&gt; and &lt;sizeof(T) == 8&gt; versions?  Both returns an unsigned sized Dependency anyway.
&gt; 
&gt; I removed volatile/&quot;memory&quot; - it&apos;s not needed for either.
&gt; 
&gt; There&apos;s still one more difference - bitwise casting to uint64_t versus uint32_t.  I can see a few ways to refactor this to combine code, but it&apos;s a bit tricky, so I&apos;ll file a bug and add a FIXME.

Ah yes, I missed that part.  I agree the refactoring need not happen in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285243</commentid>
    <comment_count>18</comment_count>
      <attachid>303899</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-08 22:33:43 -0800</bug_when>
    <thetext>Created attachment 303899
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285244</commentid>
    <comment_count>19</comment_count>
      <attachid>303899</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-08 22:35:05 -0800</bug_when>
    <thetext>Comment on attachment 303899
the patch

r=mlam</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285245</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-08 22:36:23 -0800</bug_when>
    <thetext>Attachment 303899 did not pass style-queue:


ERROR: Source/WTF/wtf/Atomics.h:121:  The parameter name &quot;order&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Atomics.h:122:  The parameter name &quot;order&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Atomics.h:187:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/Atomics.h:189:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:190:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:190:  Wrong number of spaces before statement. (expected: 20)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:444:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:449:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:452:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:444:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:449:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:452:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:467:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:473:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:467:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Atomics.h:473:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Platform.h:762:  CPP comments are not allowed in Platform.h, please use C comments /* ... */  [build/cpp_comment] [5]
Total errors found: 17 in 17 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>1285352</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-09 09:40:38 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/213645</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285558</commentid>
    <comment_count>22</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-03-09 13:50:12 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Landed in https://trac.webkit.org/changeset/213645

It broke the JSCOnly AArch64 build:

../../Source/WTF/wtf/Atomics.h:238:64: error: redefinition of &apos;T WTF::Atomic&lt;T&gt;::loadLink(std::memory_order) [with T = long unsigned int; std::memory_order = std::memory_order]&apos;
In file included from ../../Source/WTF/wtf/Threading.h:40:0,
                 from ../../Source/WTF/wtf/CompilationThread.cpp:31:
../../Source/WTF/wtf/Atomics.h:237:63: note: &apos;T WTF::Atomic&lt;T&gt;::loadLink(std::memory_order) [with T = long unsigned int; std::memory_order = std::memory_order]&apos; previously declared here
In file included from ../../Source/WTF/wtf/Threading.h:40:0,
                 from ../../Source/WTF/wtf/CompilationThread.cpp:31:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285568</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-09 13:58:55 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; Landed in https://trac.webkit.org/changeset/213645
&gt; 
&gt; It broke the JSCOnly AArch64 build:
&gt; 
&gt; ../../Source/WTF/wtf/Atomics.h:238:64: error: redefinition of &apos;T
&gt; WTF::Atomic&lt;T&gt;::loadLink(std::memory_order) [with T = long unsigned int;
&gt; std::memory_order = std::memory_order]&apos;
&gt; In file included from ../../Source/WTF/wtf/Threading.h:40:0,
&gt;                  from ../../Source/WTF/wtf/CompilationThread.cpp:31:
&gt; ../../Source/WTF/wtf/Atomics.h:237:63: note: &apos;T
&gt; WTF::Atomic&lt;T&gt;::loadLink(std::memory_order) [with T = long unsigned int;
&gt; std::memory_order = std::memory_order]&apos; previously declared here
&gt; In file included from ../../Source/WTF/wtf/Threading.h:40:0,
&gt;                  from ../../Source/WTF/wtf/CompilationThread.cpp:31:

Right - because on Linux, intptr_t and int64_t are typedefs for the same thing.

Do you know if there is a #define that we could case on, that tells us if intptr_t and int64_t are the same or different types?  If there isn&apos;t such a thing, then maybe guarding this with OS(DARWIN) would be enough: 

#if OS(DARWIN)
DEFINE_LL_SC(ptr, &quot;&quot;, &quot;&quot;)
#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285778</commentid>
    <comment_count>24</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-03-10 02:33:59 -0800</bug_when>
    <thetext>(In reply to comment #23)

&gt; Right - because on Linux, intptr_t and int64_t are typedefs for the same
&gt; thing.
&gt; 
&gt; Do you know if there is a #define that we could case on, that tells us if
&gt; intptr_t and int64_t are the same or different types?  If there isn&apos;t such a
&gt; thing, then maybe guarding this with OS(DARWIN) would be enough: 
&gt; 
&gt; #if OS(DARWIN)
&gt; DEFINE_LL_SC(ptr, &quot;&quot;, &quot;&quot;)
&gt; #endif

Unfortunately there is no way to check if intptr_t and int64_t are
same types or not in preprocess time. But they are always same on
Linux (64-bit), so the easiest way is to add a DARWIN guard here.

Fix landed in https://trac.webkit.org/changeset/213705</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1286106</commentid>
    <comment_count>25</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-03-11 00:48:02 -0800</bug_when>
    <thetext>It completely broke JSC on AArch64 Linux, please see bug169510 for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1286111</commentid>
    <comment_count>26</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-11 01:24:01 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; It completely broke JSC on AArch64 Linux, please see bug169510 for details.

In the meantime, can we fix it by chainging

#if CPU(ARM64)
#define HAVE_LL_SC 1
#endif // CPU(ARM64)

in Platform.h to

#if OS(DARWIN) &amp;&amp; CPU(ARM64)
#define HAVE_LL_SC 1
#endif // OS(DARWIN) &amp;&amp; CPU(ARM64)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303709</attachid>
            <date>2017-03-07 13:07:14 -0800</date>
            <delta_ts>2017-03-07 19:47:57 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11482</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzNTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDE3LTAzLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBoYXZlIExML1NDIGFuZCBBdG9taWM6OnRyYW5zYWN0aW9uIHNob3VsZCBnZXQg
aXQgZm9yIGZyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2OTMwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0R0NEaWRKSVQpOiBB
ZGFwdCB0byBuZXcgQXRvbWljOjp0cmFuc2FjdGlvbiBBUEkuCisKIDIwMTctMDMtMDYgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IEltcGxl
bWVudCB0aGUgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUgQVBJCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjEzNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NTMsOSArMTg1MywxMCBAQCB2
b2lkIEhlYXA6OmhhbmRsZU5lZWRGaW5hbGl6ZSgpCiB2b2lkIEhlYXA6OnNldEdDRGlkSklUKCkK
IHsKICAgICBtX3dvcmxkU3RhdGUudHJhbnNhY3Rpb24oCi0gICAgICAgIFsmXSAodW5zaWduZWQm
IHN0YXRlKSB7CisgICAgICAgIFsmXSAodW5zaWduZWQmIHN0YXRlKSAtPiBib29sIHsKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlICYgc3RvcHBlZEJpdCk7CiAgICAgICAgICAgICBz
dGF0ZSB8PSBnY0RpZEpJVEJpdDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
KTsKIH0KIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTctMDMtMDcgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBXVEYgc2hvdWxkIGhhdmUgTEwvU0MgYW5k
IEF0b21pYzo6dHJhbnNhY3Rpb24gc2hvdWxkIGdldCBpdCBmb3IgZnJlZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MzAwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgQXRv
bWljPD46OmxvYWRMaW5rIGFuZCBBdG9taWM8Pjo6c3RvcmVDb25kLCBhdmFpbGFibGUgb25seSB3
aGVuIEhBVkUoTExfU0MpLgorICAgICAgICAKKyAgICAgICAgSXQgYWJzdHJhY3RzIGxvYWRMaW5r
L3N0b3JlQ29uZCBiZWhpbmQgcHJlcGFyZS9hdHRlbXB0LiBZb3UgY2FuIHdyaXRlIHByZXBhcmUv
YXR0ZW1wdAorICAgICAgICBsb29wcyB3aGVuZXZlciB5b3VyIGxvb3AgZml0cyBpbnRvIHRoZSBs
ZWFzdCBjb21tb24gZGVub21pbmF0b3Igb2YgTEwvU0MgYW5kIENBUy4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgbW9kaWZpZXMgQXRvbWljPD46OnRyYW5zYWN0aW9uIHRvIHVzZSBwcmVwYXJlL2F0
dGVtcHQuIFNvLCBpZiB5b3Ugd3JpdGUgeW91ciBsb29wCisgICAgICAgIHVzaW5nIEF0b21pYzw+
Ojp0cmFuc2FjdGlvbiwgdGhlbiB5b3UgZ2V0IExML1NDIGZvciBmcmVlLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgaXMgbWVhbnQgYXMgYSBHQyBzcGVlZC11cCBvbiBMTC9TQyBwbGF0
Zm9ybXMgYnkgZHJhbWF0aWNhbGx5IHNpbXBsaWZ5aW5nCisgICAgICAgIHRoZSBjb2RlIGZvciBC
aXRtYXAncyBhdG9taWMgYml0IHNldC9jbGVhciBvcGVyYXRpb25zLiBUaGUgZ2VuZXJhdGVkIG1h
Y2hpbmUgY29kZSBpcworICAgICAgICBpbmRlZWQgYSBsb3QgYmV0dGVyIG5vdyB0aGFuIGl0IHdh
cyBiZWZvcmUuCisKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjpoYXNG
ZW5jZSk6CisgICAgICAgIChXVEY6OkF0b21pYzo6cHJlcGFyZSk6CisgICAgICAgIChXVEY6OkF0
b21pYzo6YXR0ZW1wdCk6CisgICAgICAgIChXVEY6OkF0b21pYzo6dHJ5VHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV1RGOjpBdG9taWM6OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdURjo6QXRvbWlj
Ojp0cnlUcmFuc2FjdGlvblJlbGF4ZWQpOgorICAgICAgICAoV1RGOjpBdG9taWM6OnRyYW5zYWN0
aW9uUmVsYXhlZCk6CisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46OmNvbmN1cnJlbnRUZXN0QW5kU2V0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojpj
b25jdXJyZW50VGVzdEFuZENsZWFyKToKKyAgICAgICAgKiB3dGYvTG9ja0FsZ29yaXRobS5oOgor
ICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2tTbG93KToKKyAgICAgICAgKiB3dGYv
UGxhdGZvcm0uaDoKKwogMjAxNy0wMy0wNiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgW2lPU10gUmVwb3J0IGRvbWFpbnMgY3Jhc2hpbmcgdW5kZXIgbWVtb3J5
IHByZXNzdXJlIHZpYSBlbmhhbmNlZCBwcml2YWN5IGxvZ2dpbmcuCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShy
ZXZpc2lvbiAyMTM1MjkpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDExIEBAIGV4dGVybiAiQyIgdm9pZCBfUmVhZFdyaXRlQmFycmllcih2
b2lkKTsKIAogbmFtZXNwYWNlIFdURiB7CiAKK0FMV0FZU19JTkxJTkUgYm9vbCBoYXNGZW5jZShz
dGQ6Om1lbW9yeV9vcmRlciBvcmRlcikKK3sKKyAgICByZXR1cm4gb3JkZXIgIT0gc3RkOjptZW1v
cnlfb3JkZXJfcmVsYXhlZDsKK30KKwogLy8gQXRvbWljIHdyYXBzIGFyb3VuZCBzdGQ6OmF0b21p
YyB3aXRoIHRoZSBzb2xlIHB1cnBvc2Ugb2YgbWFraW5nIHRoZSBjb21wYXJlX2V4Y2hhbmdlCiAv
LyBvcGVyYXRpb25zIG5vdCBhbHRlciB0aGUgZXhwZWN0ZWQgdmFsdWUuIFRoaXMgaXMgbW9yZSBp
biBsaW5lIHdpdGggaG93IHdlIHR5cGljYWxseQogLy8gdXNlIENBUyBpbiBvdXIgY29kZS4KQEAg
LTEwNywzOSArMTEyLDEzMyBAQCBzdHJ1Y3QgQXRvbWljIHsKICAgICAKICAgICBBTFdBWVNfSU5M
SU5FIFQgZXhjaGFuZ2UoVCBuZXdWYWx1ZSwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6
Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSB7IHJldHVybiB2YWx1ZS5leGNoYW5nZShuZXdWYWx1ZSwg
b3JkZXIpOyB9CiAgICAgCisjaWYgSEFWRShMTF9TQykKKyAgICBBTFdBWVNfSU5MSU5FIFQgbG9h
ZExpbmsoc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0
KTsKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc3RvcmVDb25kKFQgdmFsdWUsICBzdGQ6Om1lbW9y
eV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpOworI2VuZGlmIC8vIEhB
VkUoTExfU0MpCisgICAgCisgICAgQUxXQVlTX0lOTElORSBUIHByZXBhcmUoc3RkOjptZW1vcnlf
b3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KQorICAgIHsKKyNpZiBIQVZF
KExMX1NDKQorICAgICAgICByZXR1cm4gbG9hZExpbmsob3JkZXIpOworI2Vsc2UKKyAgICAgICAg
cmV0dXJuIGxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisjZW5kaWYKKyAgICB9Cisg
ICAgCisgICAgQUxXQVlTX0lOTElORSBib29sIGF0dGVtcHQoVCBvbGRWYWx1ZSwgVCBuZXdWYWx1
ZSwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KQor
ICAgIHsKKyNpZiBIQVZFKExMX1NDKQorICAgICAgICBVTlVTRURfUEFSQU0ob2xkVmFsdWUpOwor
ICAgICAgICByZXR1cm4gc3RvcmVDb25kKG5ld1ZhbHVlLCBvcmRlcik7CisjZWxzZQorICAgICAg
ICByZXR1cm4gY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgbmV3VmFsdWUsIG9yZGVyKTsK
KyNlbmRpZgorICAgIH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIEFM
V0FZU19JTkxJTkUgYm9vbCB0cnlUcmFuc2FjdGlvblJlbGF4ZWQoY29uc3QgRnVuYyYgZnVuYykK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb24oY29uc3QgRnVuYyYgZnVuYywg
c3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KQogICAg
IHsKLSAgICAgICAgVCBvbGRWYWx1ZSA9IGxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7
CisgICAgICAgIFQgb2xkVmFsdWUgPSBwcmVwYXJlKG9yZGVyKTsKICAgICAgICAgVCBuZXdWYWx1
ZSA9IG9sZFZhbHVlOwotICAgICAgICBmdW5jKG5ld1ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGNv
bXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgICAgIGlm
ICghZnVuYyhuZXdWYWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBhdHRlbXB0KG9sZFZhbHVlLCBuZXdWYWx1ZSwgb3JkZXIpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9u
UmVsYXhlZChjb25zdCBGdW5jJiBmdW5jKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB0cmFuc2Fj
dGlvbihjb25zdCBGdW5jJiBmdW5jLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVt
b3J5X29yZGVyX3NlcV9jc3QpCiAgICAgewotICAgICAgICB3aGlsZSAoIXRyeVRyYW5zYXRpb25S
ZWxheGVkKGZ1bmMpKSB7IH0KKyAgICAgICAgLy8gTk9URTogVGhpcyBkZWxpYmVyYXRlbHkgZG9l
cyBub3QgdHJ5IHRvIHVzZSB0cnlUcmFuc2FjdGlvbiBhcyBhbiBhYnN0cmFjdGlvbiBiZWNhdXNl
CisgICAgICAgIC8vIExMVk0gaGFzIGEgaGFyZCB0aW1lIHRhaWwtZHVwbGljYXRpbmcgc3VjaCBj
b2RlLgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBUIG9sZFZhbHVlID0gcHJlcGFy
ZShvcmRlcik7CisgICAgICAgICAgICBUIG5ld1ZhbHVlID0gb2xkVmFsdWU7CisgICAgICAgICAg
ICBpZiAoIWZ1bmMobmV3VmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmIChhdHRlbXB0KG9sZFZhbHVlLCBuZXdWYWx1ZSwgb3JkZXIpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb24oY29u
c3QgRnVuYyYgZnVuYykKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb25SZWxh
eGVkKGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewotICAgICAgICBUIG9sZFZhbHVlID0gbG9hZChz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICAgICAgVCBuZXdWYWx1ZSA9IG9sZFZhbHVl
OwotICAgICAgICBmdW5jKG5ld1ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVFeGNoYW5n
ZVdlYWsob2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRyeVRyYW5zYWN0aW9u
KGZ1bmMsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9uKGNvbnN0
IEZ1bmMmIGZ1bmMpCisgICAgQUxXQVlTX0lOTElORSBib29sIHRyYW5zYWN0aW9uUmVsYXhlZChj
b25zdCBGdW5jJiBmdW5jKQogICAgIHsKLSAgICAgICAgd2hpbGUgKCF0cnlUcmFuc2FjdGlvbihm
dW5jKSkgeyB9CisgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbihmdW5jLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxheGVkKTsKICAgICB9CiAKICAgICBzdGQ6OmF0b21pYzxUPiB2YWx1ZTsKIH07CiAK
KyNpZiBDUFUoQVJNNjQpCisjZGVmaW5lIERFRklORV9MTF9TQyh3aWR0aCwgbW9kaWZpZXIsIHN1
ZmZpeCkgICBcCisgICAgdGVtcGxhdGU8PiBcCisgICAgQUxXQVlTX0lOTElORSB1aW50ICMjIHdp
ZHRoICMjIF90IEF0b21pYzx1aW50ICMjIHdpZHRoICMjX3Q+Ojpsb2FkTGluayhzdGQ6Om1lbW9y
eV9vcmRlciBvcmRlcikgXAorICAgIHsgXAorICAgICAgICBpbnQgIyMgd2lkdGggIyMgX3QgcmVz
dWx0OyBcCisgICAgICAgIGlmIChoYXNGZW5jZShvcmRlcikpIHsgXAorICAgICAgICAgICAgYXNt
IHZvbGF0aWxlICggXAorICAgICAgICAgICAgICAgICJsZGF4ciIgc3VmZml4ICIgJSIgbW9kaWZp
ZXIgIjAsIFslMV0iIFwKKyAgICAgICAgICAgICAgICA6ICI9ciIocmVzdWx0KSBcCisgICAgICAg
ICAgICAgICAgOiAiciIodGhpcykgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyBcCisg
ICAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgICAgIGFzbSAoIFwKKyAgICAgICAgICAgICAgICAi
bGR4ciIgc3VmZml4ICIgJSIgbW9kaWZpZXIgIjAsIFslMV0iIFwKKyAgICAgICAgICAgICAgICA6
ICI9ciIocmVzdWx0KSBcCisgICAgICAgICAgICAgICAgOiAiciIodGhpcykgXAorICAgICAgICAg
ICAgICAgIDogIm1lbW9yeSIpOyBcCisgICAgICAgIH0gXAorICAgICAgICByZXR1cm4gcmVzdWx0
OyBcCisgICAgfSBcCisgICAgXAorICAgIHRlbXBsYXRlPD4gXAorICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBBdG9taWM8dWludCAjIyB3aWR0aCAjIyBfdD46OnN0b3JlQ29uZCh1aW50ICMjIHdpZHRo
ICMjIF90IHZhbHVlLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlcikgXAorICAgIHsgXAorICAgICAg
ICBib29sIHJlc3VsdDsgXAorICAgICAgICBpZiAoaGFzRmVuY2Uob3JkZXIpKSB7IFwKKyAgICAg
ICAgICAgIGFzbSB2b2xhdGlsZSAoIFwKKyAgICAgICAgICAgICAgICAic3RseHIiIHN1ZmZpeCAi
ICV3MCwgJSIgbW9kaWZpZXIgIjEsIFslMl0iIFwKKyAgICAgICAgICAgICAgICA6ICI9JnIiKHJl
c3VsdCkgXAorICAgICAgICAgICAgICAgIDogInIiKHZhbHVlKSwgInIiKHRoaXMpIFwKKyAgICAg
ICAgICAgICAgICA6ICJtZW1vcnkiKTsgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgICAg
ICBhc20gKCBcCisgICAgICAgICAgICAgICAgInN0eHIiIHN1ZmZpeCAiICV3MCwgJSIgbW9kaWZp
ZXIgIjEsIFslMl0iIFwKKyAgICAgICAgICAgICAgICA6ICI9JnIiKHJlc3VsdCkgXAorICAgICAg
ICAgICAgICAgIDogInIiKHZhbHVlKSwgInIiKHRoaXMpIFwKKyAgICAgICAgICAgICAgICA6ICJt
ZW1vcnkiKTsgXAorICAgICAgICB9IFwKKyAgICAgICAgcmV0dXJuICFyZXN1bHQ7IFwKKyAgICB9
IFwKKyAgICBcCisgICAgdGVtcGxhdGU8PiBcCisgICAgQUxXQVlTX0lOTElORSBpbnQgIyMgd2lk
dGggIyMgX3QgQXRvbWljPGludCAjIyB3aWR0aCAjIyBfdD46OmxvYWRMaW5rKHN0ZDo6bWVtb3J5
X29yZGVyIG9yZGVyKSBcCisgICAgeyBcCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QXRv
bWljPHVpbnQgIyMgd2lkdGggIyMgX3Q+Kj4odGhpcyktPmxvYWRMaW5rKG9yZGVyKTsgXAorICAg
IH0gXAorICAgIFwKKyAgICB0ZW1wbGF0ZTw+IFwKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgQXRv
bWljPGludCAjIyB3aWR0aCAjIyBfdD46OnN0b3JlQ29uZChpbnQgIyMgd2lkdGggIyMgX3QgdmFs
dWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyKSBcCisgICAgeyBcCisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8QXRvbWljPHVpbnQgIyMgd2lkdGggIyMgX3Q+Kj4odGhpcyktPnN0b3JlQ29u
ZCh2YWx1ZSwgb3JkZXIpOyBcCisgICAgfQorCitERUZJTkVfTExfU0MoOCwgInciLCAiYiIpCitE
RUZJTkVfTExfU0MoMTYsICJ3IiwgImgiKQorREVGSU5FX0xMX1NDKDMyLCAidyIsICIiKQorREVG
SU5FX0xMX1NDKDY0LCAiIiwgIiIpCitERUZJTkVfTExfU0MocHRyLCAiIiwgIiIpCisKKyN1bmRl
ZiBERUZJTkVfTExfU0MKKyNlbmRpZiAvLyBDUFUoQVJNNjQpCisKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBpbmxpbmUgVCBhdG9taWNMb2FkKFQqIGxvY2F0aW9uLCBzdGQ6Om1lbW9yeV9vcmRlciBv
cmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpCiB7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkocmV2aXNp
b24gMjEzNTI5KQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzNiwxNCArMTM2LDE0IEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlw
ZT4KIHsKICAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgd29yZFNpemUpOwogICAgIHNp
emVfdCBpbmRleCA9IG4gLyB3b3JkU2l6ZTsKLSAgICBXb3JkVHlwZSogd29yZFB0ciA9IGJpdHMu
ZGF0YSgpICsgaW5kZXg7Ci0gICAgV29yZFR5cGUgb2xkVmFsdWU7Ci0gICAgZG8gewotICAgICAg
ICBvbGRWYWx1ZSA9ICp3b3JkUHRyOwotICAgICAgICBpZiAob2xkVmFsdWUgJiBtYXNrKQorICAg
IHJldHVybiAhYml0d2lzZV9jYXN0PEF0b21pYzxXb3JkVHlwZT4qPihiaXRzLmRhdGEoKSArIGlu
ZGV4KS0+dHJhbnNhY3Rpb25SZWxheGVkKAorICAgICAgICBbJl0gKFdvcmRUeXBlJiB2YWx1ZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICBpZiAodmFsdWUgJiBtYXNrKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFsdWUgfD0gbWFzazsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gd2hpbGUgKCFhdG9taWNDb21wYXJlRXhj
aGFuZ2VXZWFrUmVsYXhlZCh3b3JkUHRyLCBvbGRWYWx1ZSwgc3RhdGljX2Nhc3Q8V29yZFR5cGU+
KG9sZFZhbHVlIHwgbWFzaykpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0pOwogfQog
CiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CkBAIC0xNTEs
MTQgKzE1MSwxNCBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiB7
CiAgICAgV29yZFR5cGUgbWFzayA9IG9uZSA8PCAobiAlIHdvcmRTaXplKTsKICAgICBzaXplX3Qg
aW5kZXggPSBuIC8gd29yZFNpemU7Ci0gICAgV29yZFR5cGUqIHdvcmRQdHIgPSBiaXRzLmRhdGEo
KSArIGluZGV4OwotICAgIFdvcmRUeXBlIG9sZFZhbHVlOwotICAgIGRvIHsKLSAgICAgICAgb2xk
VmFsdWUgPSAqd29yZFB0cjsKLSAgICAgICAgaWYgKCEob2xkVmFsdWUgJiBtYXNrKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IHdoaWxlICghYXRvbWljQ29tcGFyZUV4Y2hhbmdl
V2Vha1JlbGF4ZWQod29yZFB0ciwgb2xkVmFsdWUsIHN0YXRpY19jYXN0PFdvcmRUeXBlPihvbGRW
YWx1ZSAmIH5tYXNrKSkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiAhYml0d2lzZV9j
YXN0PEF0b21pYzxXb3JkVHlwZT4qPihiaXRzLmRhdGEoKSArIGluZGV4KS0+dHJhbnNhY3Rpb25S
ZWxheGVkKAorICAgICAgICBbJl0gKFdvcmRUeXBlJiB2YWx1ZSkgLT4gYm9vbCB7CisgICAgICAg
ICAgICBpZiAoISh2YWx1ZSAmIG1hc2spKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFsdWUgJj0gfm1hc2s7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3JkVHlwZT4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgJKHJldmlzaW9u
IDIxMzUyOSkKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAkod29ya2luZyBjb3B5
KQpAQCAtMjA2LDEwICsyMDYsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBsb2NrLnRyYW5zYWN0aW9u
KAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChMb2NrVHlwZSYgdmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoTG9ja1R5cGUmIHZhbHVlKSAtPiBib29sIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAmPSB+bWFzazsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0Lm1heUhhdmVNb3JlVGhyZWFkcykKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgfD0gaGFzUGFya2VkQml0OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7CiAgICAgICAgICAg
ICAgICAgfSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1Nyw2ICs3NTcsMTAgQEAKICNk
ZWZpbmUgRU5BQkxFX0NPTkNVUlJFTlRfSlMgMQogI2VuZGlmCiAKKyNpZiBDUFUoQVJNNjQpCisj
ZGVmaW5lIEhBVkVfTExfU0MgMQorI2VuZGlmIC8vIENQVShBUk02NCkKKwogLyogVGhpcyBjb250
cm9scyB3aGV0aGVyIEIzIGlzIGJ1aWx0LiBCMyBpcyBuZWVkZWQgZm9yIEZUTCBKSVQgYW5kIFdl
YkFzc2VtYmx5ICovCiAjaWYgRU5BQkxFKEZUTF9KSVQpIHx8IEVOQUJMRShXRUJBU1NFTUJMWSkK
ICNkZWZpbmUgRU5BQkxFX0IzX0pJVCAxCg==
</data>
<flag name="review"
          id="325317"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303763</attachid>
            <date>2017-03-07 19:47:57 -0800</date>
            <delta_ts>2017-03-07 20:31:23 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35698</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzNTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDE3LTAzLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBoYXZlIExML1NDIGFuZCBBdG9taWM6OnRyYW5zYWN0aW9uIHNob3VsZCBnZXQg
aXQgZm9yIGZyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2OTMwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6c2V0R0NEaWRKSVQpOiBB
ZGFwdCB0byBuZXcgQXRvbWljOjp0cmFuc2FjdGlvbiBBUEkuCisKIDIwMTctMDMtMDYgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IEltcGxl
bWVudCB0aGUgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUgQVBJCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjEzNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NTMsOSArMTg1MywxMCBAQCB2
b2lkIEhlYXA6OmhhbmRsZU5lZWRGaW5hbGl6ZSgpCiB2b2lkIEhlYXA6OnNldEdDRGlkSklUKCkK
IHsKICAgICBtX3dvcmxkU3RhdGUudHJhbnNhY3Rpb24oCi0gICAgICAgIFsmXSAodW5zaWduZWQm
IHN0YXRlKSB7CisgICAgICAgIFsmXSAodW5zaWduZWQmIHN0YXRlKSAtPiBib29sIHsKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlICYgc3RvcHBlZEJpdCk7CiAgICAgICAgICAgICBz
dGF0ZSB8PSBnY0RpZEpJVEJpdDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShy
ZXZpc2lvbiAyMTM1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw4ICs5Myw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBI
ZWFwOjp0ZXN0QW5kU2V0TWFya2UKICAgICBpZiAoY2VsbC0+aXNMYXJnZUFsbG9jYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuIGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLnRlc3RBbmRTZXRNYXJrZWQo
KTsKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOwotICAgIGJs
b2NrLmFib3V0VG9NYXJrKG1hcmtpbmdWZXJzaW9uKTsKLSAgICByZXR1cm4gYmxvY2sudGVzdEFu
ZFNldE1hcmtlZChjZWxsKTsKKyAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3kgPSBibG9jay5hYm91
dFRvTWFyayhtYXJraW5nVmVyc2lvbik7CisgICAgcmV0dXJuIGJsb2NrLnRlc3RBbmRTZXRNYXJr
ZWQoY2VsbCwgZGVwZW5kZW5jeSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgc2l6ZV90IEhlYXA6OmNl
bGxTaXplKGNvbnN0IHZvaWQqIHJhd0NlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9MYXJnZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9MYXJnZUFsbG9jYXRpb24uaAkocmV2aXNpb24gMjEzNTI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDggKzc0LDkgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNOZXdseUFsbG9jYXRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNOZXdseUFsbG9jYXRlZDsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc01hcmtlZCgpIHsgcmV0dXJuIG1faXNNYXJrZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkKTsgfQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZChIZWFwQ2VsbCopIHsg
cmV0dXJuIG1faXNNYXJrZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsgfQotICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiwgSGVh
cENlbGwqKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwqKSB7IHJldHVy
biBpc01hcmtlZCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2VkKEhlYXBDZWxs
KiwgRGVwZW5kZW5jeSkgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiwgSGVhcENlbGwqKSB7IHJldHVy
biBpc01hcmtlZCgpOyB9CiAgICAgYm9vbCBpc0xpdmUoKSB7IHJldHVybiBpc01hcmtlZCgpIHx8
IGlzTmV3bHlBbGxvY2F0ZWQoKTsgfQogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDZWxsKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNWYWxpZENlbGw7IH0KQEAgLTEwOSw3ICsxMTAsNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogICAgIAotICAgIHZvaWQgYWJvdXRUb01hcmsoSGVh
cFZlcnNpb24pIHsgfQorICAgIERlcGVuZGVuY3kgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24pIHsg
cmV0dXJuIG51bGxEZXBlbmRlbmN5KCk7IH0KICAgICAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
dGVzdEFuZFNldE1hcmtlZCgpCiAgICAgewpAQCAtMTIwLDcgKzEyMSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gbV9pc01hcmtlZC5jb21wYXJl
RXhjaGFuZ2VTdHJvbmcoZmFsc2UsIHRydWUpOwogICAgIH0KLSAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgdGVzdEFuZFNldE1hcmtlZChIZWFwQ2VsbCopIHsgcmV0dXJuIHRlc3RBbmRTZXRNYXJrZWQo
KTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKEhlYXBDZWxsKiwg
RGVwZW5kZW5jeSwgVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2QgPSBUcmFuc2FjdGlvbkFib3J0
TGlrZWxpaG9vZDo6TGlrZWx5KSB7IHJldHVybiB0ZXN0QW5kU2V0TWFya2VkKCk7IH0KICAgICB2
b2lkIGNsZWFyTWFya2VkKCkgeyBtX2lzTWFya2VkLnN0b3JlKGZhbHNlKTsgfQogICAgIAogICAg
IHZvaWQgbm90ZU1hcmtlZCgpIHsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMTM1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNyArMjU4LDggQEAgcHVi
bGljOgogICAgIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIGJvb2wgaXNNYXJrZWQo
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqKTsKICAgICBib29sIGlzTWFy
a2VkQ29uY3VycmVudGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKik7
Ci0gICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKKyAgICBib29sIGlzTWFy
a2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5KTsKKyAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQo
Y29uc3Qgdm9pZCosIERlcGVuZGVuY3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kID0gVHJh
bnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6Okxpa2VseSk7CiAgICAgICAgIAogICAgIGJvb2wgaXNB
dG9tKGNvbnN0IHZvaWQqKTsKICAgICB2b2lkIGNsZWFyTWFya2VkKGNvbnN0IHZvaWQqKTsKQEAg
LTI3OCwxMyArMjc5LDkgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBh
cmVNYXJrc1N0YWxlKCk7CiAgICAgYm9vbCBhcmVNYXJrc1N0YWxlKEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uKTsKLSAgICBzdHJ1Y3QgTWFya3NXaXRoRGVwZW5kZW5jeSB7Ci0gICAgICAgIGJv
b2wgYXJlU3RhbGU7Ci0gICAgICAgIENvbnN1bWVEZXBlbmRlbmN5IGRlcGVuZGVuY3k7Ci0gICAg
fTsKLSAgICBNYXJrc1dpdGhEZXBlbmRlbmN5IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CisgICAgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gYXJl
TWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAg
ICAKLSAgICB2b2lkIGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKKyAg
ICBEZXBlbmRlbmN5IGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAg
ICAgICAgCiAgICAgdm9pZCBhc3NlcnRNYXJrc05vdFN0YWxlKCk7CiAgICAgICAgIApAQCAtMzA2
LDcgKzMwMyw3IEBAIHByaXZhdGU6CiAgICAgTWFya2VkQmxvY2soVk0mLCBIYW5kbGUmKTsKICAg
ICBBdG9tKiBhdG9tcygpOwogICAgICAgICAKLSAgICB2b2lkIGFib3V0VG9NYXJrU2xvdyhIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhYm91
dFRvTWFya1Nsb3coSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIHZvaWQgY2xlYXJI
YXNBbnlNYXJrZWQoKTsKICAgICAKICAgICB2b2lkIG5vdGVNYXJrZWRTbG93KCk7CkBAIC00OTEs
MjAgKzQ4OCwxOCBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZShICiAg
ICAgcmV0dXJuIG1hcmtpbmdWZXJzaW9uICE9IG1fbWFya2luZ1ZlcnNpb247CiB9CiAKLUFMV0FZ
U19JTkxJTkUgTWFya2VkQmxvY2s6Ok1hcmtzV2l0aERlcGVuZGVuY3kgTWFya2VkQmxvY2s6OmFy
ZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKK0FM
V0FZU19JTkxJTkUgRGVwZW5kZW5jeVdpdGg8Ym9vbD4gTWFya2VkQmxvY2s6OmFyZU1hcmtzU3Rh
bGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsKLSAgICBhdXRv
IGNvbnN1bWVkID0gY29uc3VtZUxvYWQoJm1fbWFya2luZ1ZlcnNpb24pOwotICAgIE1hcmtzV2l0
aERlcGVuZGVuY3kgcmV0OwotICAgIHJldC5hcmVTdGFsZSA9IGNvbnN1bWVkLnZhbHVlICE9IG1h
cmtpbmdWZXJzaW9uOwotICAgIHJldC5kZXBlbmRlbmN5ID0gY29uc3VtZWQuZGVwZW5kZW5jeTsK
LSAgICByZXR1cm4gcmV0OworICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJz
aW9uOworICAgIHJldHVybiBkZXBlbmRlbmN5V2l0aChkZXBlbmRlbmN5KHZlcnNpb24pLCB2ZXJz
aW9uICE9IG1hcmtpbmdWZXJzaW9uKTsKIH0KIAotaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OmFi
b3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQoraW5saW5lIERlcGVuZGVuY3kg
TWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewot
ICAgIGlmIChVTkxJS0VMWShhcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSkpCisgICAgYXV0
byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24pOwor
ICAgIGlmIChVTkxJS0VMWShyZXN1bHQudmFsdWUpKQogICAgICAgICBhYm91dFRvTWFya1Nsb3co
bWFya2luZ1ZlcnNpb24pOwotICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgIHJldHVybiBy
ZXN1bHQuZGVwZW5kZW5jeTsKIH0KIAogI2lmIEFTU0VSVF9ESVNBQkxFRApAQCAtNTMwLDE2ICs1
MjUsMjIgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKEhlYXBWZQogCiBpbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFy
a2luZ1ZlcnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgYXV0byBtYXJrc1dpdGhEZXBlbmRl
bmN5ID0gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBp
ZiAobWFya3NXaXRoRGVwZW5kZW5jeS5hcmVTdGFsZSkKKyAgICBhdXRvIHJlc3VsdCA9IGFyZU1h
cmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7CisgICAgaWYgKHJlc3VsdC52
YWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9t
TnVtYmVyKHApICsgbWFya3NXaXRoRGVwZW5kZW5jeS5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4g
bV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOwogfQogCi1pbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiBwKQoraW5s
aW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kg
ZGVwZW5kZW5jeSkKIHsKICAgICBhc3NlcnRNYXJrc05vdFN0YWxlKCk7Ci0gICAgcmV0dXJuIG1f
bWFya3MuY29uY3VycmVudFRlc3RBbmRTZXQoYXRvbU51bWJlcihwKSk7CisgICAgcmV0dXJuIG1f
bWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kpOworfQorCitpbmxpbmUgYm9vbCBN
YXJrZWRCbG9jazo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRl
cGVuZGVuY3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kIGFib3J0TGlrZWxpaG9vZCkKK3sK
KyAgICBhc3NlcnRNYXJrc05vdFN0YWxlKCk7CisgICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVu
dFRlc3RBbmRTZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSwgYWJvcnRMaWtlbGlob29kKTsK
IH0KIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNOZXdseUFsbG9jYXRlZChj
b25zdCB2b2lkKiBwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMjEzNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNDkgKzIyMiwzNyBAQCB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyCiAgICAgfSB9CiB9CiAKLXZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQog
ewotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKLSAgICAgICAgbV9oZWFw
U25hcHNob3RCdWlsZGVyLT5hcHBlbmRFZGdlKG1fY3VycmVudENlbGwsIHZhbHVlLmFzQ2VsbCgp
KTsKLQotICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgpKTsK
KyAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmRFZGdlKG1fY3VycmVudENlbGws
IGNlbGwpOworICAgIAorICAgIGFwcGVuZEhpZGRlblNsb3dJbXBsKGNlbGwsIGRlcGVuZGVuY3kp
OwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oSlNWYWx1ZSB2YWx1ZSkKK3Zv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlblNsb3coSlNDZWxsKiBjZWxsLCBEZXBlbmRlbmN5
IGRlcGVuZGVuY3kpCiB7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFz
Q2VsbCgpKTsKKyAgICBhcHBlbmRIaWRkZW5TbG93SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0K
IAotdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxs
KiBjZWxsKQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5TbG93
SW1wbChKU0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKLSAgICBTdXBlclNh
bXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgCiAgICAgQVNTRVJUKCFt
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7Ci0gICAgaWYgKCFjZWxsKQotICAg
ICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICB2YWxpZGF0ZShj
ZWxsKTsKICNlbmRpZgogICAgIAogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQot
ICAgICAgICBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsLT5sYXJnZUFsbG9jYXRp
b24oKSwgY2VsbCk7CisgICAgICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwt
PmxhcmdlQWxsb2NhdGlvbigpLCBjZWxsLCBkZXBlbmRlbmN5KTsKICAgICBlbHNlCi0gICAgICAg
IHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwp
OworICAgICAgICBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsLT5tYXJrZWRCbG9j
aygpLCBjZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVy
VHlwZT4KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5k
VG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0NlbGwqIGNlbGwpCitBTFdB
WVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNr
KENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3kpCiB7Ci0gICAgY29udGFpbmVyLmFib3V0VG9NYXJrKG1fbWFya2luZ1ZlcnNpb24pOwot
ICAgIAotICAgIGlmIChjb250YWluZXIudGVzdEFuZFNldE1hcmtlZChjZWxsKSkKKyAgICBpZiAo
Y29udGFpbmVyLnRlc3RBbmRTZXRNYXJrZWQoY2VsbCwgZGVwZW5kZW5jeSwgVHJhbnNhY3Rpb25B
Ym9ydExpa2VsaWhvb2Q6OlVubGlrZWx5KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEFT
U0VSVChjZWxsLT5zdHJ1Y3R1cmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSwxMSArMTc1LDE0IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2Vs
bCopOwogICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpTVmFsdWUpOworICAgIHZvaWQgYXBwZW5kSGlk
ZGVuKEpTQ2VsbCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRNYXJrZWRBbmRB
cHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFw
cGVuZFNsb3coSlNDZWxsKiwgRGVwZW5kZW5jeSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBhcHBlbmRIaWRkZW5TbG93KEpTQ2VsbCosIERlcGVuZGVuY3kpOworICAgIHZvaWQgYXBwZW5k
SGlkZGVuU2xvd0ltcGwoSlNDZWxsKiwgRGVwZW5kZW5jeSk7CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KLSAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFy
a1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwqKTsKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFw
cGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwqLCBEZXBlbmRlbmN5KTsKICAg
ICAKICAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDIxMzUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0OSArMzEsMTA2IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1
ZSogc2xvdCwgc2l6ZV90IGNvdW50KQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCiB7CiAgICAgZm9y
IChzaXplX3QgaSA9IGNvdW50OyBpLS07KQogICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90
W2ldKTsKIH0KIAotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpT
Q2VsbCogY2VsbCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJy
aWVyZWQoSlNDZWxsKiBjZWxsKQogewotICAgIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUoY2Vs
bCkpOworICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgd3JpdHRlbiBpbiBhIHZlcnkgc3BlY2lmaWMg
d2F5IHRvIGVuc3VyZSB0aGF0IGl0IGdldHMgaW5saW5lZAorICAgIC8vIHByb3Blcmx5LiBJbiBw
YXJ0aWN1bGFyLCBpdCBhcHBlYXJzIHRoYXQgdXNpbmcgdGVtcGxhdGVzIGhlcmUgYnJlYWtzIEFM
V0FZU19JTkxJTkUuCisgICAgCisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5OworICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc0xh
cmdlQWxsb2NhdGlvbigpKSkgeworICAgICAgICBkZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3ko
KTsKKyAgICAgICAgaWYgKExJS0VMWShjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgp
KSkgeworICAgICAgICAgICAgaWYgKExJS0VMWSghbV9oZWFwU25hcHNob3RCdWlsZGVyKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBN
YXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOworICAgICAgICBkZXBlbmRl
bmN5ID0gYmxvY2suYWJvdXRUb01hcmsobV9tYXJraW5nVmVyc2lvbik7CisgICAgICAgIGlmIChM
SUtFTFkoYmxvY2suaXNNYXJrZWQoY2VsbCwgZGVwZW5kZW5jeSkpKSB7CisgICAgICAgICAgICBp
ZiAoTElLRUxZKCFtX2hlYXBTbmFwc2hvdEJ1aWxkZXIpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBhcHBlbmRIaWRkZW5TbG93KGNlbGwsIGRl
cGVuZGVuY3kpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVu
YmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICBhcHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKEpTVmFsdWUgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRIaWRkZW4odmFsdWUuYXNDZWxsKCkp
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihKU0Nl
bGwqIGNlbGwpCit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIGluIGEgdmVyeSBz
cGVjaWZpYyB3YXkgdG8gZW5zdXJlIHRoYXQgaXQgZ2V0cyBpbmxpbmVkCisgICAgLy8gcHJvcGVy
bHkuIEluIHBhcnRpY3VsYXIsIGl0IGFwcGVhcnMgdGhhdCB1c2luZyB0ZW1wbGF0ZXMgaGVyZSBi
cmVha3MgQUxXQVlTX0lOTElORS4KKyAgICAKKyAgICBpZiAoIWNlbGwpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7CisgICAgaWYgKFVOTElLRUxZKGNl
bGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpKSB7CisgICAgICAgIGRlcGVuZGVuY3kgPSBudWxsRGVw
ZW5kZW5jeSgpOworICAgICAgICBpZiAoTElLRUxZKGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlz
TWFya2VkKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIE1h
cmtlZEJsb2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7CisgICAgICAgIGRlcGVuZGVu
Y3kgPSBibG9jay5hYm91dFRvTWFyayhtX21hcmtpbmdWZXJzaW9uKTsKKyAgICAgICAgaWYgKExJ
S0VMWShibG9jay5pc01hcmtlZChjZWxsLCBkZXBlbmRlbmN5KSkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGFwcGVuZEhpZGRlblNsb3coY2VsbCwgZGVwZW5kZW5jeSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kKGNvbnN0IFdlYWs8VD4mIHdlYWspCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQogewogICAgIGFwcGVuZFVuYmFycmllcmVkKHdl
YWsuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQ+JiBzbG90KQorQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxUPiYg
c2xvdCkKIHsKICAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxUPiYgc2xvdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VD4mIHNsb3QpCiB7CiAg
ICAgYXBwZW5kSGlkZGVuKHNsb3QuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVy
YXRvcj4KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0
ZXJhdG9yIGVuZCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJh
dG9yIGJlZ2luLCBJdGVyYXRvciBlbmQpCiB7CiAgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0
ICE9IGVuZDsgKytpdCkKICAgICAgICAgYXBwZW5kKCppdCk7CiB9CiAKLWlubGluZSB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
YmFycmllcnMsIHNpemVfdCBjb3VudCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBz
aXplX3QgY291bnQpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQog
ICAgICAgICBhcHBlbmQoYmFycmllcnNbaV0pOwogfQogCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJh
cnJpZXJzLCBzaXplX3QgY291bnQpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFw
cGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVy
cywgc2l6ZV90IGNvdW50KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKICAgICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcAkocmV2
aXNpb24gMjEzNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0
dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogCi0jaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIlNs
b3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgyLDYgKzM4Miw3IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQK
ICAgICBzdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgIGxhc3RP
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmxhc3RPZmZzZXQoKTsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBEZXBlbmRlbmN5IGluZGV4
aW5nVHlwZURlcGVuZGVuY3kgPSBkZXBlbmRlbmN5KGluZGV4aW5nVHlwZSk7CiAgICAgTG9ja2Vy
PEpTQ2VsbD4gbG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeSk7CiAgICAgc3dpdGNoIChpbmRleGlu
Z1R5cGUpIHsKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgpAQCAtMzk1
LDE0ICszOTYsMTMgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKLSAgICBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKKyAgICBidXR0ZXJmbHkg
PSBjb25zdW1lKHRoaXMsIGluZGV4aW5nVHlwZURlcGVuZGVuY3kpLT5idXR0ZXJmbHkoKTsKKyAg
ICBEZXBlbmRlbmN5IGJ1dHRlcmZseURlcGVuZGVuY3kgPSBkZXBlbmRlbmN5KGJ1dHRlcmZseSk7
CiAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgV1RG
Ojpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgaWYgKHRoaXMtPnN0cnVjdHVyZUlEKCkgIT0gc3RydWN0
dXJlSUQpCisgICAgaWYgKGNvbnN1bWUodGhpcywgYnV0dGVyZmx5RGVwZW5kZW5jeSktPnN0cnVj
dHVyZUlEKCkgIT0gc3RydWN0dXJlSUQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlm
IChzdHJ1Y3R1cmUtPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KQorICAgIGlmIChjb25zdW1l
KHN0cnVjdHVyZSwgYnV0dGVyZmx5RGVwZW5kZW5jeSktPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zm
c2V0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBtYXJrQXV4aWxpYXJ5QW5k
VmlzaXRPdXRPZkxpbmVQcm9wZXJ0aWVzKHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlLCBs
YXN0T2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAkocmV2aXNpb24gMjEzNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjY0LDcgKzY2NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1
dHRlcmZseS5nZXQoKTsgfQogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9i
dXR0ZXJmbHkuZ2V0KCk7IH0KLSAgICAgICAgCisgICAgCiAgICAgQ29uc3RQcm9wZXJ0eVN0b3Jh
Z2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5w
cm9wZXJ0eVN0b3JhZ2UoKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdl
KCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMTM1MjkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE3LTAzLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgV1RGIHNob3VsZCBoYXZlIExML1NDIGFuZCBBdG9taWM6OnRy
YW5zYWN0aW9uIHNob3VsZCBnZXQgaXQgZm9yIGZyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTMwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIEF0b21pYzw+Ojpsb2Fk
TGluayBhbmQgQXRvbWljPD46OnN0b3JlQ29uZCwgYXZhaWxhYmxlIG9ubHkgd2hlbiBIQVZFKExM
X1NDKS4KKyAgICAgICAgCisgICAgICAgIEl0IGFic3RyYWN0cyBsb2FkTGluay9zdG9yZUNvbmQg
YmVoaW5kIHByZXBhcmUvYXR0ZW1wdC4gWW91IGNhbiB3cml0ZSBwcmVwYXJlL2F0dGVtcHQKKyAg
ICAgICAgbG9vcHMgd2hlbmV2ZXIgeW91ciBsb29wIGZpdHMgaW50byB0aGUgbGVhc3QgY29tbW9u
IGRlbm9taW5hdG9yIG9mIExML1NDIGFuZCBDQVMuCisgICAgICAgIAorICAgICAgICBUaGlzIG1v
ZGlmaWVzIEF0b21pYzw+Ojp0cmFuc2FjdGlvbiB0byB1c2UgcHJlcGFyZS9hdHRlbXB0LiBTbywg
aWYgeW91IHdyaXRlIHlvdXIgbG9vcAorICAgICAgICB1c2luZyBBdG9taWM8Pjo6dHJhbnNhY3Rp
b24sIHRoZW4geW91IGdldCBMTC9TQyBmb3IgZnJlZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
Y2hhbmdlIGlzIG1lYW50IGFzIGEgR0Mgc3BlZWQtdXAgb24gTEwvU0MgcGxhdGZvcm1zIGJ5IGRy
YW1hdGljYWxseSBzaW1wbGlmeWluZworICAgICAgICB0aGUgY29kZSBmb3IgQml0bWFwJ3MgYXRv
bWljIGJpdCBzZXQvY2xlYXIgb3BlcmF0aW9ucy4gVGhlIGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUg
aXMKKyAgICAgICAgaW5kZWVkIGEgbG90IGJldHRlciBub3cgdGhhbiBpdCB3YXMgYmVmb3JlLgor
CisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdURjo6aGFzRmVuY2UpOgorICAg
ICAgICAoV1RGOjpBdG9taWM6OnByZXBhcmUpOgorICAgICAgICAoV1RGOjpBdG9taWM6OmF0dGVt
cHQpOgorICAgICAgICAoV1RGOjpBdG9taWM6OnRyeVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdU
Rjo6QXRvbWljOjp0cmFuc2FjdGlvbik6CisgICAgICAgIChXVEY6OkF0b21pYzo6dHJ5VHJhbnNh
Y3Rpb25SZWxheGVkKToKKyAgICAgICAgKFdURjo6QXRvbWljOjp0cmFuc2FjdGlvblJlbGF4ZWQp
OgorICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojpjb25j
dXJyZW50VGVzdEFuZFNldCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6Y29uY3VycmVudFRl
c3RBbmRDbGVhcik6CisgICAgICAgICogd3RmL0xvY2tBbGdvcml0aG0uaDoKKyAgICAgICAgKFdU
Rjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrU2xvdyk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6
CisKIDIwMTctMDMtMDYgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtpT1NdIFJlcG9ydCBkb21haW5zIGNyYXNoaW5nIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSB2
aWEgZW5oYW5jZWQgcHJpdmFjeSBsb2dnaW5nLgpJbmRleDogU291cmNlL1dURi93dGYvQXRvbWlj
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkocmV2aXNpb24gMjEz
NTI5KQorKysgU291cmNlL1dURi93dGYvQXRvbWljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4LCAyMDEwLCAyMDEyLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3
IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTQwLDYgKzQwLDE2IEBAIGV4dGVybiAiQyIgdm9pZCBfUmVhZFdyaXRlQmFycmllcih2b2lk
KTsKIAogbmFtZXNwYWNlIFdURiB7CiAKK0FMV0FZU19JTkxJTkUgYm9vbCBoYXNGZW5jZShzdGQ6
Om1lbW9yeV9vcmRlciBvcmRlcikKK3sKKyAgICByZXR1cm4gb3JkZXIgIT0gc3RkOjptZW1vcnlf
b3JkZXJfcmVsYXhlZDsKK30KKworZW51bSBjbGFzcyBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9v
ZCB7CisgICAgVW5saWtlbHksCisgICAgTGlrZWx5Cit9OworICAgIAogLy8gQXRvbWljIHdyYXBz
IGFyb3VuZCBzdGQ6OmF0b21pYyB3aXRoIHRoZSBzb2xlIHB1cnBvc2Ugb2YgbWFraW5nIHRoZSBj
b21wYXJlX2V4Y2hhbmdlCiAvLyBvcGVyYXRpb25zIG5vdCBhbHRlciB0aGUgZXhwZWN0ZWQgdmFs
dWUuIFRoaXMgaXMgbW9yZSBpbiBsaW5lIHdpdGggaG93IHdlIHR5cGljYWxseQogLy8gdXNlIENB
UyBpbiBvdXIgY29kZS4KQEAgLTEwNywzOSArMTE3LDEzMCBAQCBzdHJ1Y3QgQXRvbWljIHsKICAg
ICAKICAgICBBTFdBWVNfSU5MSU5FIFQgZXhjaGFuZ2UoVCBuZXdWYWx1ZSwgc3RkOjptZW1vcnlf
b3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSB7IHJldHVybiB2YWx1ZS5l
eGNoYW5nZShuZXdWYWx1ZSwgb3JkZXIpOyB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb25SZWxheGVkKGNvbnN0
IEZ1bmMmIGZ1bmMpCisjaWYgSEFWRShMTF9TQykKKyAgICBBTFdBWVNfSU5MSU5FIFQgbG9hZExp
bmsoc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc3RvcmVDb25kKFQgdmFsdWUsICBzdGQ6Om1lbW9yeV9v
cmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpOworI2VuZGlmIC8vIEhBVkUo
TExfU0MpCisKKyAgICAvLyBQcm9wcyB0byAKKyAgICBBTFdBWVNfSU5MSU5FIFQgcHJlcGFyZShz
dGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpCiAgICAg
ewotICAgICAgICBUIG9sZFZhbHVlID0gbG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsK
LSAgICAgICAgVCBuZXdWYWx1ZSA9IG9sZFZhbHVlOwotICAgICAgICBmdW5jKG5ld1ZhbHVlKTsK
LSAgICAgICAgcmV0dXJuIGNvbXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKG9sZFZhbHVlLCBuZXdW
YWx1ZSk7CisjaWYgSEFWRShMTF9TQykKKyAgICAgICAgcmV0dXJuIGxvYWRMaW5rKG9yZGVyKTsK
KyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShvcmRlcik7CisgICAgICAgIHJldHVybiBsb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworI2VuZGlmCiAgICAgfQorICAgIAorI2lmIEhB
VkUoTExfU0MpCisgICAgc3RhdGljIGNvbnN0IGJvb2wgcHJlcGFyZUlzRmFzdCA9IGZhbHNlOwor
I2Vsc2UKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBwcmVwYXJlSXNGYXN0ID0gdHJ1ZTsKKyNlbmRp
ZgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
dHJhbnNhY3Rpb25SZWxheGVkKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgQUxXQVlTX0lOTElORSBi
b29sIGF0dGVtcHQoVCBvbGRWYWx1ZSwgVCBuZXdWYWx1ZSwgc3RkOjptZW1vcnlfb3JkZXIgb3Jk
ZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KQogICAgIHsKLSAgICAgICAgd2hpbGUgKCF0
cnlUcmFuc2F0aW9uUmVsYXhlZChmdW5jKSkgeyB9CisjaWYgSEFWRShMTF9TQykKKyAgICAgICAg
VU5VU0VEX1BBUkFNKG9sZFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0b3JlQ29uZChuZXdWYWx1
ZSwgb3JkZXIpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVFeGNoYW5nZVdlYWsob2xk
VmFsdWUsIG5ld1ZhbHVlLCBvcmRlcik7CisjZW5kaWYKICAgICB9Ci0KKyAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIEFMV0FZU19JTkxJTkUgYm9vbCB0cnlUcmFuc2FjdGlv
bihjb25zdCBGdW5jJiBmdW5jKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB0cmFuc2FjdGlvbihj
b25zdCBGdW5jJiBmdW5jLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29y
ZGVyX3NlcV9jc3QsIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kIGFib3J0TGlrZWxpaG9vZCA9
IFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpCiAgICAgewotICAgICAgICBUIG9s
ZFZhbHVlID0gbG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICAgICAgVCBuZXdW
YWx1ZSA9IG9sZFZhbHVlOwotICAgICAgICBmdW5jKG5ld1ZhbHVlKTsKLSAgICAgICAgcmV0dXJu
IGNvbXBhcmVFeGNoYW5nZVdlYWsob2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAgICAgLy8gSWYg
cHJlcGFyaW5nIGlzIG5vdCBmYXN0IHRoZW4gd2Ugd2FudCB0byBza2lwIHRoZSBsb29wIHdoZW4g
ZnVuYyB3b3VsZCBmYWlsLgorICAgICAgICBpZiAoIXByZXBhcmVJc0Zhc3QgJiYgYWJvcnRMaWtl
bGlob29kID09IFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpIHsKKyAgICAgICAg
ICAgIFQgb2xkVmFsdWUgPSBsb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAg
ICAgICAgLy8gTm90ZTogbWFueSBmdW5jcyB3aWxsIGNvbnN0YW50LWZvbGQgdG8gdHJ1ZSwgd2hp
Y2ggd2lsbCBraWxsIGFsbCBvZiB0aGlzIGNvZGUuCisgICAgICAgICAgICBpZiAoIWZ1bmMob2xk
VmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICBUIG9sZFZhbHVlID0gcHJlcGFyZShvcmRlcik7Cisg
ICAgICAgICAgICBUIG5ld1ZhbHVlID0gb2xkVmFsdWU7CisgICAgICAgICAgICBpZiAoIWZ1bmMo
bmV3VmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlm
IChhdHRlbXB0KG9sZFZhbHVlLCBuZXdWYWx1ZSwgb3JkZXIpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdHJhbnNhY3Rpb24oY29uc3QgRnVuYyYgZnVuYykK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJhbnNhY3Rpb25SZWxheGVkKGNvbnN0IEZ1bmMmIGZ1
bmMsIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kIGFib3J0TGlrZWxpaG9vZCA9IFRyYW5zYWN0
aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpCiAgICAgewotICAgICAgICB3aGlsZSAoIXRyeVRy
YW5zYWN0aW9uKGZ1bmMpKSB7IH0KKyAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uKGZ1bmMsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQsIGFib3J0TGlrZWxpaG9vZCk7CiAgICAgfQogCiAgICAg
c3RkOjphdG9taWM8VD4gdmFsdWU7CiB9OwogCisjaWYgQ1BVKEFSTTY0KQorI2RlZmluZSBERUZJ
TkVfTExfU0Mod2lkdGgsIG1vZGlmaWVyLCBzdWZmaXgpICAgXAorICAgIHRlbXBsYXRlPD4gXAor
ICAgIEFMV0FZU19JTkxJTkUgdWludCAjIyB3aWR0aCAjIyBfdCBBdG9taWM8dWludCAjIyB3aWR0
aCAjI190Pjo6bG9hZExpbmsoc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIpIFwKKyAgICB7IFwKKyAg
ICAgICAgaW50ICMjIHdpZHRoICMjIF90IHJlc3VsdDsgXAorICAgICAgICBpZiAoaGFzRmVuY2Uo
b3JkZXIpKSB7IFwKKyAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoIFwKKyAgICAgICAgICAgICAg
ICAibGRheHIiIHN1ZmZpeCAiICUiIG1vZGlmaWVyICIwLCBbJTFdIiBcCisgICAgICAgICAgICAg
ICAgOiAiPXIiKHJlc3VsdCkgXAorICAgICAgICAgICAgICAgIDogInIiKHRoaXMpIFwKKyAgICAg
ICAgICAgICAgICA6ICJtZW1vcnkiKTsgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgICAg
ICBhc20gKCBcCisgICAgICAgICAgICAgICAgImxkeHIiIHN1ZmZpeCAiICUiIG1vZGlmaWVyICIw
LCBbJTFdIiBcCisgICAgICAgICAgICAgICAgOiAiPXIiKHJlc3VsdCkgXAorICAgICAgICAgICAg
ICAgIDogInIiKHRoaXMpIFwKKyAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgXAorICAgICAg
ICB9IFwKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0gXAorICAgIFwKKyAgICB0ZW1w
bGF0ZTw+IFwKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgQXRvbWljPHVpbnQgIyMgd2lkdGggIyMg
X3Q+OjpzdG9yZUNvbmQodWludCAjIyB3aWR0aCAjIyBfdCB2YWx1ZSwgc3RkOjptZW1vcnlfb3Jk
ZXIgb3JkZXIpIFwKKyAgICB7IFwKKyAgICAgICAgYm9vbCByZXN1bHQ7IFwKKyAgICAgICAgaWYg
KGhhc0ZlbmNlKG9yZGVyKSkgeyBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCBcCisgICAg
ICAgICAgICAgICAgInN0bHhyIiBzdWZmaXggIiAldzAsICUiIG1vZGlmaWVyICIxLCBbJTJdIiBc
CisgICAgICAgICAgICAgICAgOiAiPSZyIihyZXN1bHQpIFwKKyAgICAgICAgICAgICAgICA6ICJy
Iih2YWx1ZSksICJyIih0aGlzKSBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7IFwKKyAg
ICAgICAgfSBlbHNlIHsgXAorICAgICAgICAgICAgYXNtICggXAorICAgICAgICAgICAgICAgICJz
dHhyIiBzdWZmaXggIiAldzAsICUiIG1vZGlmaWVyICIxLCBbJTJdIiBcCisgICAgICAgICAgICAg
ICAgOiAiPSZyIihyZXN1bHQpIFwKKyAgICAgICAgICAgICAgICA6ICJyIih2YWx1ZSksICJyIih0
aGlzKSBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7IFwKKyAgICAgICAgfSBcCisgICAg
ICAgIHJldHVybiAhcmVzdWx0OyBcCisgICAgfSBcCisgICAgXAorICAgIHRlbXBsYXRlPD4gXAor
ICAgIEFMV0FZU19JTkxJTkUgaW50ICMjIHdpZHRoICMjIF90IEF0b21pYzxpbnQgIyMgd2lkdGgg
IyMgX3Q+Ojpsb2FkTGluayhzdGQ6Om1lbW9yeV9vcmRlciBvcmRlcikgXAorICAgIHsgXAorICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEF0b21pYzx1aW50ICMjIHdpZHRoICMjIF90Pio+KHRo
aXMpLT5sb2FkTGluayhvcmRlcik7IFwKKyAgICB9IFwKKyAgICBcCisgICAgdGVtcGxhdGU8PiBc
CisgICAgQUxXQVlTX0lOTElORSBib29sIEF0b21pYzxpbnQgIyMgd2lkdGggIyMgX3Q+OjpzdG9y
ZUNvbmQoaW50ICMjIHdpZHRoICMjIF90IHZhbHVlLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlcikg
XAorICAgIHsgXAorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEF0b21pYzx1aW50ICMjIHdp
ZHRoICMjIF90Pio+KHRoaXMpLT5zdG9yZUNvbmQodmFsdWUsIG9yZGVyKTsgXAorICAgIH0KKwor
REVGSU5FX0xMX1NDKDgsICJ3IiwgImIiKQorREVGSU5FX0xMX1NDKDE2LCAidyIsICJoIikKK0RF
RklORV9MTF9TQygzMiwgInciLCAiIikKK0RFRklORV9MTF9TQyg2NCwgIiIsICIiKQorREVGSU5F
X0xMX1NDKHB0ciwgIiIsICIiKQorCisjdW5kZWYgREVGSU5FX0xMX1NDCisjZW5kaWYgLy8gQ1BV
KEFSTTY0KQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQgYXRvbWljTG9hZChUKiBs
b2NhdGlvbiwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFf
Y3N0KQogewpAQCAtMzA4LDEzICs0MDksMTggQEAgaW5saW5lIHZvaWQgY3Jvc3NNb2RpZnlpbmdD
b2RlRmVuY2UoKSB7IAogCiAjZW5kaWYKIAotdHlwZWRlZiBzaXplX3QgQ29uc3VtZURlcGVuZGVu
Y3k7Cit0eXBlZGVmIHVuc2lnbmVkIERlcGVuZGVuY3k7CisKK0FMV0FZU19JTkxJTkUgRGVwZW5k
ZW5jeSBudWxsRGVwZW5kZW5jeSgpCit7CisgICAgcmV0dXJuIDA7Cit9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUq
ID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgQ29uc3VtZURlcGVuZGVuY3kgemVyb1dpdGhDb25z
dW1lRGVwZW5kZW5jeShUIHZhbHVlKQorQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3koVCB2YWx1ZSkKIHsKLSAgICB1aW50NjRfdCBkZXBlbmRlbmN5OwotICAgIHVpbnQ2NF90IGNv
cHkgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICB1bnNpZ25lZCBkZXBlbmRl
bmN5OworICAgIHVpbnQ2NF90IGNvcHkgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpOwog
I2lmIENQVShBUk02NCkKICAgICAvLyBDcmVhdGUgYSBtYWdpY2FsIHplcm8gdmFsdWUgdGhyb3Vn
aCBpbmxpbmUgYXNzZW1ibHksIHdob3NlIGNvbXB1dGF0aW9uCiAgICAgLy8gaXNuJ3QgdmlzaWJs
ZSB0byB0aGUgb3B0aW1pemVyLiBUaGlzIHplcm8gaXMgdGhlbiB1c2FibGUgYXMgYW4gb2Zmc2V0
IGluCkBAIC0zMjUsMzEgKzQzMSwyNyBAQCBBTFdBWVNfSU5MSU5FIENvbnN1bWVEZXBlbmRlbmN5
IHplcm9XaXRoCiAgICAgLy8gb3JkZXJpbmcuIFRoaXMgZm9yY2VzIHdlYWsgbWVtb3J5IG9yZGVy
IENQVXMgdG8gb2JzZXJ2ZSBgbG9jYXRpb25gIGFuZAogICAgIC8vIGRlcGVuZGVudCBsb2FkcyBp
biB0aGVpciBzdG9yZSBvcmRlciB3aXRob3V0IHRoZSByZWFkZXIgdXNpbmcgYSBiYXJyaWVyCiAg
ICAgLy8gb3IgYW4gYWNxdWlyZSBsb2FkLgotICAgIGFzbSB2b2xhdGlsZSgiZW9yICV4W2RlcGVu
ZGVuY3ldLCAleFtpbl0sICV4W2luXSIKLSAgICAgICAgICAgICAgICAgOiBbZGVwZW5kZW5jeV0g
Ij1yIihkZXBlbmRlbmN5KQotICAgICAgICAgICAgICAgICA6IFtpbl0gInIiKGNvcHkpCi0gICAg
ICAgICAgICAgICAgIC8vIExpZSBhYm91dCB0b3VjaGluZyBtZW1vcnkuIE5vdCBzdHJpY3RseSBu
ZWVkZWQsIGJ1dCBpcwotICAgICAgICAgICAgICAgICAvLyBsaWtlbHkgdG8gYXZvaWQgdW53YW50
ZWQgbG9hZC9zdG9yZSBtb3Rpb24uCi0gICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOworICAg
IGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2luXSIKKyAgICAgICAgOiBbZGVw
ZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQorICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKICNl
bGlmIENQVShBUk0pCi0gICAgYXNtIHZvbGF0aWxlKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0s
ICVbaW5dIgotICAgICAgICAgICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kp
Ci0gICAgICAgICAgICAgICAgIDogW2luXSAiciIoY29weSkKLSAgICAgICAgICAgICAgICAgOiAi
bWVtb3J5Iik7CisgICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5dIgorICAg
ICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCisgICAgICAgIDogW2luXSAiciIo
Y29weSkpOwogI2Vsc2UKICAgICAvLyBObyBkZXBlbmRlbmN5IGlzIG5lZWRlZCBmb3IgdGhpcyBh
cmNoaXRlY3R1cmUuCiAgICAgbG9hZExvYWRGZW5jZSgpOwogICAgIGRlcGVuZGVuY3kgPSAwOwot
ICAgICh2b2lkKWNvcHk7CisgICAgVU5VU0VEX1BBUkFNKGNvcHkpOwogI2VuZGlmCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PENvbnN1bWVEZXBlbmRlbmN5PihkZXBlbmRlbmN5KTsKKyAgICByZXR1
cm4gZGVwZW5kZW5jeTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA0Pjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElO
RSBDb25zdW1lRGVwZW5kZW5jeSB6ZXJvV2l0aENvbnN1bWVEZXBlbmRlbmN5KFQgdmFsdWUpCitB
TFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQogewotICAgIHVpbnQz
Ml90IGRlcGVuZGVuY3k7Ci0gICAgdWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50MzJf
dD4odmFsdWUpOworICAgIHVuc2lnbmVkIGRlcGVuZGVuY3k7CisgICAgdWludDMyX3QgY29weSA9
IHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSk7CiAjaWYgQ1BVKEFSTTY0KQogICAgIGFzbSB2
b2xhdGlsZSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2luXSIKICAgICAgICAgICAg
ICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQpAQCAtMzYzLDY2ICs0NjUsNjcg
QEAgQUxXQVlTX0lOTElORSBDb25zdW1lRGVwZW5kZW5jeSB6ZXJvV2l0aAogI2Vsc2UKICAgICBs
b2FkTG9hZEZlbmNlKCk7CiAgICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgKHZvaWQpY29weTsKKyAg
ICBVTlVTRURfUEFSQU0oY29weSk7CiAjZW5kaWYKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29u
c3VtZURlcGVuZGVuY3k+KGRlcGVuZGVuY3kpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihk
ZXBlbmRlbmN5KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPHNpemVvZihUKSA9PSAyPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBD
b25zdW1lRGVwZW5kZW5jeSB6ZXJvV2l0aENvbnN1bWVEZXBlbmRlbmN5KFQgdmFsdWUpCitBTFdB
WVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQogewotICAgIHVpbnQxNl90
IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDE2X3Q+KHZhbHVlKTsKLSAgICByZXR1cm4gemVyb1dp
dGhDb25zdW1lRGVwZW5kZW5jeShzdGF0aWNfY2FzdDxzaXplX3Q+KGNvcHkpKTsKKyAgICByZXR1
cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSAxPjo6
dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBDb25zdW1lRGVwZW5kZW5jeSB6ZXJvV2l0
aENvbnN1bWVEZXBlbmRlbmN5KFQgdmFsdWUpCitBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVw
ZW5kZW5jeShUIHZhbHVlKQogewotICAgIHVpbnQ4X3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50
OF90Pih2YWx1ZSk7Ci0gICAgcmV0dXJuIHplcm9XaXRoQ29uc3VtZURlcGVuZGVuY3koc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb3B5KSk7CisgICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IENv
bnN1bWVkIHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgRGVwZW5kZW5jeVdpdGggewor
cHVibGljOgorICAgIERlcGVuZGVuY3lXaXRoKCkKKyAgICAgICAgOiBkZXBlbmRlbmN5KG51bGxE
ZXBlbmRlbmN5KCkpCisgICAgICAgICwgdmFsdWUoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
RGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKKyAg
ICAgICAgOiBkZXBlbmRlbmN5KGRlcGVuZGVuY3kpCisgICAgICAgICwgdmFsdWUodmFsdWUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7CiAgICAgVCB2YWx1
ZTsKLSAgICBDb25zdW1lRGVwZW5kZW5jeSBkZXBlbmRlbmN5OwogfTsKKyAgICAKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitpbmxpbmUgRGVwZW5kZW5jeVdpdGg8VD4gZGVwZW5kZW5jeVdpdGgoRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVwZW5k
ZW5jeVdpdGg8VD4oZGVwZW5kZW5jeSwgdmFsdWUpOworfQogCi0vLyBDb25zdW1lIGxvYWQsIHJl
dHVybmluZyB0aGUgbG9hZGVkIGB2YWx1ZWAgYXQgYGxvY2F0aW9uYCBhbmQgYSBkZXBlbmRlbnQt
emVybwotLy8gd2hpY2ggY3JlYXRlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgZnJvbSB0aGUgYGxv
Y2F0aW9uYC4KLS8vCi0vLyBVc2FnZSBub3RlczoKLS8vCi0vLyAgKiBSZWdhcmRpbmcgY29udHJv
bCBkZXBlbmRlbmNpZXM6IG1lcmVseSBicmFuY2hpbmcgYmFzZWQgb24gYHZhbHVlYCBvcgotLy8g
ICAgYGRlcGVuZGVuY3lgIGlzbid0IHN1ZmZpY2llbnQgdG8gaW1wb3NlIGEgZGVwZW5kZW5jeSBv
cmRlcmluZzogeW91IG11c3QKLS8vICAgIHVzZSBgZGVwZW5kZW5jeWAgaW4gdGhlIGFkZHJlc3Mg
Y29tcHV0YXRpb24gb2Ygc3Vic2VxdWVudCBsb2FkcyB3aGljaAotLy8gICAgc2hvdWxkIG9ic2Vy
dmUgdGhlIHN0b3JlIG9yZGVyIHcuci50LiBgbG9jYXRpb25gLgotLy8gKiBSZWdhcmRpbmcgbWVt
b3J5IG9yZGVyaW5nOiBjb25zdW1lIGxvYWQgb3JkZXJzIHRoZSBgbG9jYXRpb25gIGxvYWQgd2l0
aAotLy8gICBzdXNlcXVlbnQgZGVwZW5kZW50IGxvYWRzICpvbmx5Ki4gSXQgc2F5cyBub3RoaW5n
IGFib3V0IG9yZGVyaW5nIG9mIG90aGVyCi0vLyAgIGxvYWRzIQotLy8KLS8vIENhdmVhdCBlbXB0
b3IuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBjb25zdW1lTG9h
ZChjb25zdCBUKiBsb2NhdGlvbikKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cmVtb3Zl
X2N2PFQ+Ojp0eXBlIFJldHVybmVkOwotICAgIENvbnN1bWVkPFJldHVybmVkPiByZXQgeyB9Owot
ICAgIC8vIEZvcmNlIHRoZSByZWFkIG9mIGBsb2NhdGlvbmAgdG8gb2NjdXIgZXhhY3RseSBvbmNl
IGFuZCB3aXRob3V0IGZ1c2luZyBvcgotICAgIC8vIGZvcndhcmRpbmcgdXNpbmcgdm9sYXRpbGUu
IFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGNvbXBpbGVyIGNvdWxkCi0gICAgLy8gb3Ro
ZXJ3aXNlIHJlbWF0ZXJpYWxpemUgb3IgZmluZCBlcXVpdmFsZW50IGxvYWRzLCBvciBzaW1wbHkg
Zm9yd2FyZCBmcm9tCi0gICAgLy8gYSBwcmV2aW91cyBvbmUsIGFuZCBsb3NlIHRoZSBkZXBlbmRl
bmN5IHdlJ3JlIHRyeWluZyBzbyBoYXJkIHRvCi0gICAgLy8gY3JlYXRlLiBQcmV2ZW50IHRlYXJp
bmcgYnkgdXNpbmcgYW4gYXRvbWljLCBidXQgbGV0IGl0IG1vdmUgYXJvdW5kIGJ5Ci0gICAgLy8g
dXNpbmcgcmVsYXhlZC4gV2UgaGF2ZSBhdCBsZWFzdCBhIG1lbW9yeSBmZW5jZSBhZnRlciB0aGlz
IHdoaWNoIHByZXZlbnRzCi0gICAgLy8gdGhlIGxvYWQgZnJvbSBtb3ZpbmcgdG9vIG11Y2guCi0g
ICAgcmV0LnZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2xhdGlsZSBzdGQ6OmF0b21p
YzxSZXR1cm5lZD4qPihsb2NhdGlvbiktPmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7
Ci0gICAgcmV0LmRlcGVuZGVuY3kgPSB6ZXJvV2l0aENvbnN1bWVEZXBlbmRlbmN5KHJldC52YWx1
ZSk7Ci0gICAgcmV0dXJuIHJldDsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVCogY29u
c3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCit7CisjaWYgQ1BVKEFSTTY0
KSB8fCBDUFUoQVJNKQorICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KGJpdHdpc2VfY2FzdDxj
aGFyKj4ocG9pbnRlcikgKyBkZXBlbmRlbmN5KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRl
cGVuZGVuY3kpOworICAgIHJldHVybiBwb2ludGVyOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdURgogCiB1c2luZyBXVEY6OkF0b21pYzsKLXVzaW5nIFdURjo6Q29uc3VtZURlcGVuZGVu
Y3k7Ci11c2luZyBXVEY6OmNvbnN1bWVMb2FkOwordXNpbmcgV1RGOjpEZXBlbmRlbmN5OwordXNp
bmcgV1RGOjpEZXBlbmRlbmN5V2l0aDsKK3VzaW5nIFdURjo6VHJhbnNhY3Rpb25BYm9ydExpa2Vs
aWhvb2Q7Cit1c2luZyBXVEY6OmRlcGVuZGVuY3k7Cit1c2luZyBXVEY6OmRlcGVuZGVuY3lXaXRo
OwordXNpbmcgV1RGOjpudWxsRGVwZW5kZW5jeTsKIAogI2VuZGlmIC8vIEF0b21pY3NfaApJbmRl
eDogU291cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Qml0bWFwLmgJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
Yml0bWFwU2l6ZTsKICAgICB9CiAKLSAgICBib29sIGdldChzaXplX3QpIGNvbnN0OworICAgIGJv
b2wgZ2V0KHNpemVfdCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5KCkpIGNvbnN0OwogICAg
IHZvaWQgc2V0KHNpemVfdCk7CiAgICAgdm9pZCBzZXQoc2l6ZV90LCBib29sKTsKICAgICBib29s
IHRlc3RBbmRTZXQoc2l6ZV90KTsKICAgICBib29sIHRlc3RBbmRDbGVhcihzaXplX3QpOwotICAg
IGJvb2wgY29uY3VycmVudFRlc3RBbmRTZXQoc2l6ZV90KTsKLSAgICBib29sIGNvbmN1cnJlbnRU
ZXN0QW5kQ2xlYXIoc2l6ZV90KTsKKyAgICBib29sIGNvbmN1cnJlbnRUZXN0QW5kU2V0KHNpemVf
dCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5KCksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlo
b29kID0gVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6Okxpa2VseSk7CisgICAgYm9vbCBjb25j
dXJyZW50VGVzdEFuZENsZWFyKHNpemVfdCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5KCks
IFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kID0gVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6
Okxpa2VseSk7CiAgICAgc2l6ZV90IG5leHRQb3NzaWJseVVuc2V0KHNpemVfdCkgY29uc3Q7CiAg
ICAgdm9pZCBjbGVhcihzaXplX3QpOwogICAgIHZvaWQgY2xlYXJBbGwoKTsKQEAgLTkxLDkgKzkx
LDkgQEAgaW5saW5lIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OkJpdAogfQogCiB0ZW1w
bGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Ci1pbmxpbmUgYm9vbCBC
aXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpnZXQoc2l6ZV90IG4pIGNvbnN0CitpbmxpbmUg
Ym9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpnZXQoc2l6ZV90IG4sIERlcGVuZGVu
Y3kgZGVwZW5kZW5jeSkgY29uc3QKIHsKLSAgICByZXR1cm4gISEoYml0c1tuIC8gd29yZFNpemVd
ICYgKG9uZSA8PCAobiAlIHdvcmRTaXplKSkpOworICAgIHJldHVybiAhIShiaXRzW24gLyB3b3Jk
U2l6ZSArIGRlcGVuZGVuY3ldICYgKG9uZSA8PCAobiAlIHdvcmRTaXplKSkpOwogfQogCiB0ZW1w
bGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CkBAIC0xMzIsMzMgKzEz
MiwzNyBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiB9CiAKIHRl
bXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KLWlubGluZSBib29s
IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNvbmN1cnJlbnRUZXN0QW5kU2V0KHNpemVf
dCBuKQorQUxXQVlTX0lOTElORSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNv
bmN1cnJlbnRUZXN0QW5kU2V0KHNpemVfdCBuLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIFRyYW5z
YWN0aW9uQWJvcnRMaWtlbGlob29kIGFib3J0TGlrZWxpaG9vZCkKIHsKICAgICBXb3JkVHlwZSBt
YXNrID0gb25lIDw8IChuICUgd29yZFNpemUpOwogICAgIHNpemVfdCBpbmRleCA9IG4gLyB3b3Jk
U2l6ZTsKLSAgICBXb3JkVHlwZSogd29yZFB0ciA9IGJpdHMuZGF0YSgpICsgaW5kZXg7Ci0gICAg
V29yZFR5cGUgb2xkVmFsdWU7Ci0gICAgZG8gewotICAgICAgICBvbGRWYWx1ZSA9ICp3b3JkUHRy
OwotICAgICAgICBpZiAob2xkVmFsdWUgJiBtYXNrKQorICAgIFdvcmRUeXBlKiBkYXRhID0gYml0
cy5kYXRhKCkgKyBpbmRleCArIGRlcGVuZGVuY3k7CisgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8
QXRvbWljPFdvcmRUeXBlPio+KGRhdGEpLT50cmFuc2FjdGlvblJlbGF4ZWQoCisgICAgICAgIFsm
XSAoV29yZFR5cGUmIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmIG1h
c2spCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICB2YWx1ZSB8PSBtYXNrOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSB3aGls
ZSAoIWF0b21pY0NvbXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKHdvcmRQdHIsIG9sZFZhbHVlLCBz
dGF0aWNfY2FzdDxXb3JkVHlwZT4ob2xkVmFsdWUgfCBtYXNrKSkpOwotICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfSwKKyAgICAgICAgYWJvcnRMaWtlbGlob29kKTsKIH0KIAogdGVtcGxhdGU8
c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgotaW5saW5lIGJvb2wgQml0bWFw
PGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRDbGVhcihzaXplX3QgbikK
K0FMV0FZU19JTkxJTkUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpjb25jdXJy
ZW50VGVzdEFuZENsZWFyKHNpemVfdCBuLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIFRyYW5zYWN0
aW9uQWJvcnRMaWtlbGlob29kIGFib3J0TGlrZWxpaG9vZCkKIHsKICAgICBXb3JkVHlwZSBtYXNr
ID0gb25lIDw8IChuICUgd29yZFNpemUpOwogICAgIHNpemVfdCBpbmRleCA9IG4gLyB3b3JkU2l6
ZTsKLSAgICBXb3JkVHlwZSogd29yZFB0ciA9IGJpdHMuZGF0YSgpICsgaW5kZXg7Ci0gICAgV29y
ZFR5cGUgb2xkVmFsdWU7Ci0gICAgZG8gewotICAgICAgICBvbGRWYWx1ZSA9ICp3b3JkUHRyOwot
ICAgICAgICBpZiAoIShvbGRWYWx1ZSAmIG1hc2spKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0gd2hpbGUgKCFhdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCh3b3JkUHRy
LCBvbGRWYWx1ZSwgc3RhdGljX2Nhc3Q8V29yZFR5cGU+KG9sZFZhbHVlICYgfm1hc2spKSk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgV29yZFR5cGUqIGRhdGEgPSBiaXRzLmRhdGEoKSArIGluZGV4
ICsgZGVwZW5kZW5jeTsKKyAgICByZXR1cm4gIWJpdHdpc2VfY2FzdDxBdG9taWM8V29yZFR5cGU+
Kj4oZGF0YSktPnRyYW5zYWN0aW9uUmVsYXhlZCgKKyAgICAgICAgWyZdIChXb3JkVHlwZSYgdmFs
dWUpIC0+IGJvb2wgeworICAgICAgICAgICAgaWYgKCEodmFsdWUgJiBtYXNrKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhbHVlICY9
IH5tYXNrOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sCisgICAgICAgIGFi
b3J0TGlrZWxpaG9vZCk7CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFt
ZSBXb3JkVHlwZT4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgJKHJldmlzaW9uIDIxMzUyOSkK
KysrIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtMjA2
LDEwICsyMDYsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBsb2NrLnRyYW5zYWN0aW9uKAotICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdIChMb2NrVHlwZSYgdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFsmXSAoTG9ja1R5cGUmIHZhbHVlKSAtPiBib29sIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSAmPSB+bWFzazsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0Lm1heUhhdmVNb3JlVGhyZWFkcykKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgfD0gaGFzUGFya2VkQml0OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7CiAgICAgICAgICAgICAgICAgfSk7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1Nyw2ICs3NTcsMTAgQEAKICNkZWZpbmUgRU5B
QkxFX0NPTkNVUlJFTlRfSlMgMQogI2VuZGlmCiAKKyNpZiBDUFUoQVJNNjQpCisjZGVmaW5lIEhB
VkVfTExfU0MgMQorI2VuZGlmIC8vIENQVShBUk02NCkKKwogLyogVGhpcyBjb250cm9scyB3aGV0
aGVyIEIzIGlzIGJ1aWx0LiBCMyBpcyBuZWVkZWQgZm9yIEZUTCBKSVQgYW5kIFdlYkFzc2VtYmx5
ICovCiAjaWYgRU5BQkxFKEZUTF9KSVQpIHx8IEVOQUJMRShXRUJBU1NFTUJMWSkKICNkZWZpbmUg
RU5BQkxFX0IzX0pJVCAxCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303769</attachid>
            <date>2017-03-07 20:31:23 -0800</date>
            <delta_ts>2017-03-07 21:10:10 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40364</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzNTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE3LTAzLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBtYWtlIGl0IHN1cGVyIGVhc3kgdG8gZG8gQVJNIGNvbmN1cnJlbmN5IHRyaWNr
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MzAw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZXMgYSBidW5jaCBvZiBHQyBob3QgcGF0aHMgdG8gdXNlIG5ldyBjb25jdXJy
ZW5jeSBBUElzIHRoYXQgbGVhZCB0byBvcHRpbWFsCisgICAgICAgIGNvZGUgb24gYm90aCB4ODYg
KGZ1bGx5IGxldmVyYWdlIFRTTywgdHJhbnNhY3Rpb25zIGJlY29tZSBDQVMgbG9vcHMpIGFuZCBB
Uk0gKHVzZQorICAgICAgICBkZXBlbmRlbmN5IGNoYWlucyBmb3IgZmVuY2luZywgdHJhbnNhY3Rp
b25zIGJlY29tZSBMTC9TQyBsb29wcykuIFdoaWxlIGluc3BlY3RpbmcgdGhlCisgICAgICAgIG1h
Y2hpbmUgY29kZSwgSSBmb3VuZCBvdGhlciBvcHBvcnR1bml0aWVzIGZvciBpbXByb3ZlbWVudCwg
bGlrZSBpbmxpbmluZyB0aGUgImFtIEkKKyAgICAgICAgbWFya2VkIiBwYXJ0IG9mIHRoZSBtYXJr
aW5nIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6
OkhlYXA6OnNldEdDRGlkSklUKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkhlYXA6OnRlc3RBbmRTZXRNYXJrZWQpOgorICAgICAgICAqIGhlYXAvTGFyZ2VB
bGxvY2F0aW9uLmg6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlvbjo6aXNNYXJrZWQpOgor
ICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkQ29uY3VycmVudGx5KToKKyAg
ICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjphYm91dFRvTWFyayk6CisgICAgICAgIChKU0M6
OkxhcmdlQWxsb2NhdGlvbjo6dGVzdEFuZFNldE1hcmtlZCk6CisgICAgICAgICogaGVhcC9NYXJr
ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhE
ZXBlbmRlbmN5KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OnRlc3RBbmRTZXRNYXJrZWQpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kU2xvdyk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjphcHBlbmRIaWRkZW5TbG93KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlblNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtl
ZEFuZEFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVu
ZFVuYmFycmllcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVu
ZEhpZGRlbik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmRVbmJhcnJpZXJlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRI
aWRkZW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmRWYWx1ZXNIaWRkZW4pOgorICAgICAgICAqIHJ1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0
dGVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbCk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5oOgorCiAyMDE3LTAzLTA3ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAg
ICAgICBTb21lIHBsYXRmb3JtcyB3b24ndCBiZSBhYmxlIHRvIGNyZWF0ZSBhIEdQVURldmljZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMzUyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODUzLDkgKzE4NTMsMTAgQEAgdm9pZCBIZWFwOjpoYW5kbGVOZWVkRmluYWxpemUoKQogdm9pZCBI
ZWFwOjpzZXRHQ0RpZEpJVCgpCiB7CiAgICAgbV93b3JsZFN0YXRlLnRyYW5zYWN0aW9uKAotICAg
ICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0ZSkgeworICAgICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0
ZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZSAmIHN0b3BwZWRC
aXQpOwogICAgICAgICAgICAgc3RhdGUgfD0gZ2NEaWRKSVRCaXQ7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjEzNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsOCArOTMsOCBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6dGVzdEFuZFNldE1hcmtlCiAgICAgaWYgKGNlbGwtPmlz
TGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRpb24o
KS50ZXN0QW5kU2V0TWFya2VkKCk7CiAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFy
a2VkQmxvY2soKTsKLSAgICBibG9jay5hYm91dFRvTWFyayhtYXJraW5nVmVyc2lvbik7Ci0gICAg
cmV0dXJuIGJsb2NrLnRlc3RBbmRTZXRNYXJrZWQoY2VsbCk7CisgICAgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5ID0gYmxvY2suYWJvdXRUb01hcmsobWFya2luZ1ZlcnNpb24pOworICAgIHJldHVybiBi
bG9jay50ZXN0QW5kU2V0TWFya2VkKGNlbGwsIGRlcGVuZGVuY3kpOwogfQogCiBBTFdBWVNfSU5M
SU5FIHNpemVfdCBIZWFwOjpjZWxsU2l6ZShjb25zdCB2b2lkKiByYXdDZWxsKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDIx
MzUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlz
TmV3bHlBbGxvY2F0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzTmV3bHlBbGxvY2F0ZWQ7IH0KICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNN
YXJrZWQoSGVhcENlbGwqKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQoc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsYXhlZCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50
bHkoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gbV9pc01hcmtlZC5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2Vk
KEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24s
IEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkgeyBy
ZXR1cm4gaXNNYXJrZWQoKSB8fCBpc05ld2x5QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBib29s
IGhhc1ZhbGlkQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRDZWxsOyB9CkBAIC0xMDks
NyArMTEwLDcgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMm
IGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KICAgICAKLSAgICB2
b2lkIGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uKSB7IH0KKyAgICBEZXBlbmRlbmN5IGFib3V0VG9N
YXJrKEhlYXBWZXJzaW9uKSB7IHJldHVybiBudWxsRGVwZW5kZW5jeSgpOyB9CiAgICAgCiAgICAg
QUxXQVlTX0lOTElORSBib29sIHRlc3RBbmRTZXRNYXJrZWQoKQogICAgIHsKQEAgLTEyMCw3ICsx
MjEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IG1faXNNYXJrZWQuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKGZhbHNlLCB0cnVlKTsKICAgICB9Ci0g
ICAgQUxXQVlTX0lOTElORSBib29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcENlbGwqKSB7IHJldHVy
biB0ZXN0QW5kU2V0TWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdGVzdEFuZFNl
dE1hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29k
ID0gVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6Okxpa2VseSkgeyByZXR1cm4gdGVzdEFuZFNl
dE1hcmtlZCgpOyB9CiAgICAgdm9pZCBjbGVhck1hcmtlZCgpIHsgbV9pc01hcmtlZC5zdG9yZShm
YWxzZSk7IH0KICAgICAKICAgICB2b2lkIG5vdGVNYXJrZWQoKSB7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjEzNTI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MjU4LDcgKzI1OCw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsK
ICAgICBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lk
Kik7CiAgICAgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbiwgY29uc3Qgdm9pZCopOwotICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lk
Kik7CisgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CisgICAgYm9v
bCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5LCBUcmFuc2FjdGlvbkFi
b3J0TGlrZWxpaG9vZCA9IFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpOwogICAg
ICAgICAKICAgICBib29sIGlzQXRvbShjb25zdCB2b2lkKik7CiAgICAgdm9pZCBjbGVhck1hcmtl
ZChjb25zdCB2b2lkKik7CkBAIC0yNzgsMTMgKzI3OSw5IEBAIHB1YmxpYzoKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgYXJlTWFya3NTdGFsZSgpOwogICAgIGJvb2wgYXJlTWFya3NTdGFs
ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7Ci0gICAgc3RydWN0IE1hcmtzV2l0aERlcGVu
ZGVuY3kgewotICAgICAgICBib29sIGFyZVN0YWxlOwotICAgICAgICBDb25zdW1lRGVwZW5kZW5j
eSBkZXBlbmRlbmN5OwotICAgIH07Ci0gICAgTWFya3NXaXRoRGVwZW5kZW5jeSBhcmVNYXJrc1N0
YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOworICAgIERlcGVu
ZGVuY3lXaXRoPGJvb2w+IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbik7CiAgICAgCi0gICAgdm9pZCBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbik7CisgICAgRGVwZW5kZW5jeSBhYm91dFRvTWFyayhIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbik7CiAgICAgICAgIAogICAgIHZvaWQgYXNzZXJ0TWFya3NOb3RTdGFsZSgp
OwogICAgICAgICAKQEAgLTMwNiw3ICszMDMsNyBAQCBwcml2YXRlOgogICAgIE1hcmtlZEJsb2Nr
KFZNJiwgSGFuZGxlJik7CiAgICAgQXRvbSogYXRvbXMoKTsKICAgICAgICAgCi0gICAgdm9pZCBh
Ym91dFRvTWFya1Nsb3coSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9u
KTsKICAgICB2b2lkIGNsZWFySGFzQW55TWFya2VkKCk7CiAgICAgCiAgICAgdm9pZCBub3RlTWFy
a2VkU2xvdygpOwpAQCAtNDkxLDIwICs0ODgsMTggQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6
OmFyZU1hcmtzU3RhbGUoSAogICAgIHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBtX21hcmtpbmdW
ZXJzaW9uOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hcmtlZEJsb2NrOjpNYXJrc1dpdGhEZXBlbmRl
bmN5IE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24pCitBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3lXaXRoPGJvb2w+IE1hcmtl
ZEJsb2NrOjphcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24pCiB7Ci0gICAgYXV0byBjb25zdW1lZCA9IGNvbnN1bWVMb2FkKCZtX21hcmtpbmdWZXJz
aW9uKTsKLSAgICBNYXJrc1dpdGhEZXBlbmRlbmN5IHJldDsKLSAgICByZXQuYXJlU3RhbGUgPSBj
b25zdW1lZC52YWx1ZSAhPSBtYXJraW5nVmVyc2lvbjsKLSAgICByZXQuZGVwZW5kZW5jeSA9IGNv
bnN1bWVkLmRlcGVuZGVuY3k7Ci0gICAgcmV0dXJuIHJldDsKKyAgICBIZWFwVmVyc2lvbiB2ZXJz
aW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICByZXR1cm4gZGVwZW5kZW5jeVdpdGgoZGVwZW5k
ZW5jeSh2ZXJzaW9uKSwgdmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbik7CiB9CiAKLWlubGluZSB2
b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikK
K2lubGluZSBEZXBlbmRlbmN5IE1hcmtlZEJsb2NrOjphYm91dFRvTWFyayhIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoYXJlTWFya3NTdGFsZShtYXJraW5n
VmVyc2lvbikpKQorICAgIGF1dG8gcmVzdWx0ID0gYXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5
KG1hcmtpbmdWZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkocmVzdWx0LnZhbHVlKSkKICAgICAg
ICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKKyAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY3k7CiB9CiAKICNpZiBBU1NFUlRfRElT
QUJMRUQKQEAgLTUzMCwxNiArNTI1LDIyIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01h
cmtlZChIZWFwVmUKIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVu
dGx5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lkKiBwKQogewotICAgIGF1
dG8gbWFya3NXaXRoRGVwZW5kZW5jeSA9IGFyZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJr
aW5nVmVyc2lvbik7Ci0gICAgaWYgKG1hcmtzV2l0aERlcGVuZGVuY3kuYXJlU3RhbGUpCisgICAg
YXV0byByZXN1bHQgPSBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3kobWFya2luZ1ZlcnNpb24p
OworICAgIGlmIChyZXN1bHQudmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSArIG1hcmtzV2l0aERlcGVuZGVuY3kuZGVwZW5k
ZW5jeSk7CisgICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIHJlc3VsdC5kZXBl
bmRlbmN5KTsKIH0KIAotaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OnRlc3RBbmRTZXRNYXJrZWQo
Y29uc3Qgdm9pZCogcCkKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2
b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CiAgICAgYXNzZXJ0TWFya3NOb3RTdGFs
ZSgpOwotICAgIHJldHVybiBtX21hcmtzLmNvbmN1cnJlbnRUZXN0QW5kU2V0KGF0b21OdW1iZXIo
cCkpOworICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KTsK
K30KKworaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OnRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9p
ZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZCBh
Ym9ydExpa2VsaWhvb2QpCit7CisgICAgYXNzZXJ0TWFya3NOb3RTdGFsZSgpOworICAgIHJldHVy
biBtX21hcmtzLmNvbmN1cnJlbnRUZXN0QW5kU2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3ks
IGFib3J0TGlrZWxpaG9vZCk7CiB9CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCogcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIy
LDQ5ICsyMjIsMzcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgog
ICAgIH0gfQogfQogCi12b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVl
IHZhbHVlKQordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kU2xvdyhKU0NlbGwqIGNlbGwsIERlcGVu
ZGVuY3kgZGVwZW5kZW5jeSkKIHsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKFVOTElLRUxZKG1faGVhcFNuYXBzaG90QnVpbGRl
cikpCi0gICAgICAgIG1faGVhcFNuYXBzaG90QnVpbGRlci0+YXBwZW5kRWRnZShtX2N1cnJlbnRD
ZWxsLCB2YWx1ZS5hc0NlbGwoKSk7Ci0KLSAgICBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFj
ayh2YWx1ZS5hc0NlbGwoKSk7CisgICAgICAgIG1faGVhcFNuYXBzaG90QnVpbGRlci0+YXBwZW5k
RWRnZShtX2N1cnJlbnRDZWxsLCBjZWxsKTsKKyAgICAKKyAgICBhcHBlbmRIaWRkZW5TbG93SW1w
bChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVu
KEpTVmFsdWUgdmFsdWUpCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5TbG93KEpTQ2Vs
bCogY2VsbCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewotICAgIGlmICghdmFsdWUgfHwgIXZh
bHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRNYXJrZWRBbmRBcHBlbmRU
b01hcmtTdGFjayh2YWx1ZS5hc0NlbGwoKSk7CisgICAgYXBwZW5kSGlkZGVuU2xvd0ltcGwoY2Vs
bCwgZGVwZW5kZW5jeSk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVu
ZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kSGlkZGVuU2xvd0ltcGwoSlNDZWxsKiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3kpCiB7Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwot
ICAgIAogICAgIEFTU0VSVCghbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24pOwot
ICAgIGlmICghY2VsbCkKLSAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJ
T04pCiAgICAgdmFsaWRhdGUoY2VsbCk7CiAjZW5kaWYKICAgICAKICAgICBpZiAoY2VsbC0+aXNM
YXJnZUFsbG9jYXRpb24oKSkKLSAgICAgICAgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2so
Y2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCksIGNlbGwpOworICAgICAgICBzZXRNYXJrZWRBbmRBcHBl
bmRUb01hcmtTdGFjayhjZWxsLT5sYXJnZUFsbG9jYXRpb24oKSwgY2VsbCwgZGVwZW5kZW5jeSk7
CiAgICAgZWxzZQotICAgICAgICBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsLT5t
YXJrZWRCbG9jaygpLCBjZWxsKTsKKyAgICAgICAgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3Rh
Y2soY2VsbC0+bWFya2VkQmxvY2soKSwgY2VsbCwgZGVwZW5kZW5jeSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwg
SlNDZWxsKiBjZWxsKQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZWRB
bmRBcHBlbmRUb01hcmtTdGFjayhDb250YWluZXJUeXBlJiBjb250YWluZXIsIEpTQ2VsbCogY2Vs
bCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewotICAgIGNvbnRhaW5lci5hYm91dFRvTWFyayht
X21hcmtpbmdWZXJzaW9uKTsKLSAgICAKLSAgICBpZiAoY29udGFpbmVyLnRlc3RBbmRTZXRNYXJr
ZWQoY2VsbCkpCisgICAgaWYgKGNvbnRhaW5lci50ZXN0QW5kU2V0TWFya2VkKGNlbGwsIGRlcGVu
ZGVuY3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOjpVbmxpa2VseSkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBBU1NFUlQoY2VsbC0+c3RydWN0dXJlKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMTM1MjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzUsMTEgKzE3NSwxNCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgYXBwZW5kSlNDZWxs
T3JBdXhpbGlhcnkoSGVhcENlbGwqKTsKICAgICB2b2lkIGFwcGVuZEhpZGRlbihKU1ZhbHVlKTsK
KyAgICB2b2lkIGFwcGVuZEhpZGRlbihKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRTbG93KEpTQ2VsbCosIERlcGVuZGVuY3kpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kSGlkZGVuU2xvdyhKU0NlbGwqLCBEZXBlbmRlbmN5
KTsKKyAgICB2b2lkIGFwcGVuZEhpZGRlblNsb3dJbXBsKEpTQ2VsbCosIERlcGVuZGVuY3kpOwog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+Ci0gICAgdm9pZCBzZXRN
YXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhDb250YWluZXJUeXBlJiwgSlNDZWxsKik7CisgICAg
dm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhDb250YWluZXJUeXBlJiwgSlNDZWxs
KiwgRGVwZW5kZW5jeSk7CiAgICAgCiAgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhKU0NlbGwq
KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMTM1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNDkgKzMxLDEw
NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZFVuYmFycmllcmVkKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSogc2xvdCwgc2l6ZV90
IGNvdW50KQogewogICAgIGZvciAoc2l6ZV90IGkgPSBjb3VudDsgaS0tOykKICAgICAgICAgYXBw
ZW5kVW5iYXJyaWVyZWQoc2xvdFtpXSk7CiB9CiAKLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRVbmJhcnJpZXJlZChKU0NlbGwqIGNlbGwpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCogY2VsbCkKIHsKLSAgICBhcHBlbmRVbmJh
cnJpZXJlZChKU1ZhbHVlKGNlbGwpKTsKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIHdyaXR0ZW4g
aW4gYSB2ZXJ5IHNwZWNpZmljIHdheSB0byBlbnN1cmUgdGhhdCBpdCBnZXRzIGlubGluZWQKKyAg
ICAvLyBwcm9wZXJseS4gSW4gcGFydGljdWxhciwgaXQgYXBwZWFycyB0aGF0IHVzaW5nIHRlbXBs
YXRlcyBoZXJlIGJyZWFrcyBBTFdBWVNfSU5MSU5FLgorICAgIAorICAgIGlmICghY2VsbCkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeTsKKyAgICBpZiAo
VU5MSUtFTFkoY2VsbC0+aXNMYXJnZUFsbG9jYXRpb24oKSkpIHsKKyAgICAgICAgZGVwZW5kZW5j
eSA9IG51bGxEZXBlbmRlbmN5KCk7CisgICAgICAgIGlmIChMSUtFTFkoY2VsbC0+bGFyZ2VBbGxv
Y2F0aW9uKCkuaXNNYXJrZWQoKSkpIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoIW1faGVhcFNu
YXBzaG90QnVpbGRlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2so
KTsKKyAgICAgICAgZGVwZW5kZW5jeSA9IGJsb2NrLmFib3V0VG9NYXJrKG1fbWFya2luZ1ZlcnNp
b24pOworICAgICAgICBpZiAoTElLRUxZKGJsb2NrLmlzTWFya2VkKGNlbGwsIGRlcGVuZGVuY3kp
KSkgeworICAgICAgICAgICAgaWYgKExJS0VMWSghbV9oZWFwU25hcHNob3RCdWlsZGVyKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYXBwZW5k
SGlkZGVuU2xvdyhjZWxsLCBkZXBlbmRlbmN5KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYXBwZW5kVW5iYXJyaWVyZWQodmFsdWUuYXNDZWxsKCkp
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihKU1Zh
bHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYXBwZW5kSGlk
ZGVuKHZhbHVlLmFzQ2VsbCgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRIaWRkZW4oSlNDZWxsKiBjZWxsKQoreworICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUg
d3JpdHRlbiBpbiBhIHZlcnkgc3BlY2lmaWMgd2F5IHRvIGVuc3VyZSB0aGF0IGl0IGdldHMgaW5s
aW5lZAorICAgIC8vIHByb3Blcmx5LiBJbiBwYXJ0aWN1bGFyLCBpdCBhcHBlYXJzIHRoYXQgdXNp
bmcgdGVtcGxhdGVzIGhlcmUgYnJlYWtzIEFMV0FZU19JTkxJTkUuCisgICAgCisgICAgaWYgKCFj
ZWxsKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgRGVwZW5kZW5jeSBkZXBlbmRlbmN5Owor
ICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKSkgeworICAgICAgICBk
ZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKTsKKyAgICAgICAgaWYgKExJS0VMWShjZWxsLT5s
YXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
IGVsc2UgeworICAgICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygp
OworICAgICAgICBkZXBlbmRlbmN5ID0gYmxvY2suYWJvdXRUb01hcmsobV9tYXJraW5nVmVyc2lv
bik7CisgICAgICAgIGlmIChMSUtFTFkoYmxvY2suaXNNYXJrZWQoY2VsbCwgZGVwZW5kZW5jeSkp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhcHBlbmRIaWRkZW5TbG93
KGNlbGwsIGRlcGVuZGVuY3kpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQorQUxXQVlTX0lOTElO
RSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV2VhazxUPiYgd2VhaykKIHsKICAgICBh
cHBlbmRVbmJhcnJpZXJlZCh3ZWFrLmdldCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxU
PiYgc2xvdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VD4mIHNsb3QpCiB7CiAgICAgYXBwZW5kVW5iYXJyaWVyZWQoc2xvdC5n
ZXQoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VD4mIHNsb3QpCitBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFQ+JiBzbG90KQogewogICAgIGFwcGVuZEhpZGRlbihzbG90LmdldCgpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+Ci1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
KEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBlbmQpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQogewogICAgIGZvciAo
YXV0byBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGFwcGVuZCgqaXQpOwog
fQogCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCitBTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKICAgICAgICAgYXBwZW5kKGJhcnJpZXJzW2ldKTsKIH0KIAotaW5s
aW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNvdW50KQorQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKIHsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIGFwcGVuZEhpZGRlbihiYXJyaWVyc1tpXSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdl
dHRlclNldHRlci5jcHAJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0
ZXIuaCIKIAotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEpTQyB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lv
biAyMTM1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4Miw2ICszODIsNyBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVy
ZSogSlNPYmplY3Q6OnZpc2l0CiAgICAgc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVj
dHVyZUlEKTsKICAgICBsYXN0T2Zmc2V0ID0gc3RydWN0dXJlLT5sYXN0T2Zmc2V0KCk7CiAgICAg
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7Cisg
ICAgRGVwZW5kZW5jeSBpbmRleGluZ1R5cGVEZXBlbmRlbmN5ID0gZGVwZW5kZW5jeShpbmRleGlu
Z1R5cGUpOwogICAgIExvY2tlcjxKU0NlbGw+IGxvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpOwog
ICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKQEAgLTM5NSwxNCArMzk2LDEzIEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJl
KiBKU09iamVjdDo6dmlzaXQKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5
KCk7CisgICAgYnV0dGVyZmx5ID0gY29uc3VtZSh0aGlzLCBpbmRleGluZ1R5cGVEZXBlbmRlbmN5
KS0+YnV0dGVyZmx5KCk7CisgICAgRGVwZW5kZW5jeSBidXR0ZXJmbHlEZXBlbmRlbmN5ID0gZGVw
ZW5kZW5jeShidXR0ZXJmbHkpOwogICAgIGlmICghYnV0dGVyZmx5KQogICAgICAgICByZXR1cm4g
c3RydWN0dXJlOwotICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgIGlmICh0aGlzLT5zdHJ1
Y3R1cmVJRCgpICE9IHN0cnVjdHVyZUlEKQorICAgIGlmIChjb25zdW1lKHRoaXMsIGJ1dHRlcmZs
eURlcGVuZGVuY3kpLT5zdHJ1Y3R1cmVJRCgpICE9IHN0cnVjdHVyZUlEKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoc3RydWN0dXJlLT5sYXN0T2Zmc2V0KCkgIT0gbGFzdE9mZnNl
dCkKKyAgICBpZiAoY29uc3VtZShzdHJ1Y3R1cmUsIGJ1dHRlcmZseURlcGVuZGVuY3kpLT5sYXN0
T2Zmc2V0KCkgIT0gbGFzdE9mZnNldCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAg
ICAgbWFya0F1eGlsaWFyeUFuZFZpc2l0T3V0T2ZMaW5lUHJvcGVydGllcyh2aXNpdG9yLCBidXR0
ZXJmbHksIHN0cnVjdHVyZSwgbGFzdE9mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2NCw3ICs2NjQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkg
Y29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCk7IH0KICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpOyB9Ci0gICAgICAgIAorICAgIAogICAg
IENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBt
X2J1dHRlcmZseS5nZXQoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KICAgICBQcm9wZXJ0eVN0b3Jh
Z2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0
eVN0b3JhZ2UoKTsgfQogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzNTYzKQorKysgU291cmNlL1dURi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NiBAQAorMjAxNy0wMy0wNyAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFdURiBzaG91bGQgbWFrZSBp
dCBzdXBlciBlYXN5IHRvIGRvIEFSTSBjb25jdXJyZW5jeSB0cmlja3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTMwMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIEF0b21p
Yzw+Ojpsb2FkTGluayBhbmQgQXRvbWljPD46OnN0b3JlQ29uZCwgYXZhaWxhYmxlIG9ubHkgd2hl
biBIQVZFKExMX1NDKS4KKyAgICAgICAgCisgICAgICAgIEl0IGFic3RyYWN0cyBsb2FkTGluay9z
dG9yZUNvbmQgYmVoaW5kIHByZXBhcmUvYXR0ZW1wdC4gWW91IGNhbiB3cml0ZSBwcmVwYXJlL2F0
dGVtcHQKKyAgICAgICAgbG9vcHMgd2hlbmV2ZXIgeW91ciBsb29wIGZpdHMgaW50byB0aGUgbGVh
c3QgY29tbW9uIGRlbm9taW5hdG9yIG9mIExML1NDIGFuZCBDQVMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIG1vZGlmaWVzIEF0b21pYzw+Ojp0cmFuc2FjdGlvbiB0byB1c2UgcHJlcGFyZS9hdHRl
bXB0LiBTbywgaWYgeW91IHdyaXRlIHlvdXIgbG9vcAorICAgICAgICB1c2luZyBBdG9taWM8Pjo6
dHJhbnNhY3Rpb24sIHRoZW4geW91IGdldCBMTC9TQyBmb3IgZnJlZS4KKworICAgICAgICBEZXBl
bmRpbmcgb24gdGhlIGtpbmQgb2YgdHJhbnNhY3Rpb24geW91IGFyZSBkb2luZywgeW91IG1heSBu
b3Qgd2FudCB0byBwZXJmb3JtIGFuIExMCisgICAgICAgIHVudGlsIHlvdSBoYXZlIGEgY2hhbmNl
IHRvIGp1c3QgbG9hZCB0aGUgY3VycmVudCB2YWx1ZS4gQXRvbWljPD46OnRyYW5zYWN0aW9uKCkg
YXNzdW1lcworICAgICAgICB0aGF0IHlvdSBkbyBub3QgY2FyZSB0byBoYXZlIGFueSBvcmRlcmlu
ZyBndWFyYW50ZWVzIGluIHRoYXQgY2FzZS4gSWYgeW91IHRoaW5rIHRoYXQKKyAgICAgICAgdGhl
IHRyYW5zYWN0aW9uIGhhcyBhIGdvb2QgY2hhbmNlIG9mIGFib3J0aW5nIHRoaXMgd2F5LCB5b3Ug
d2FudAorICAgICAgICBBdG9taWM8Pjo6dHJhbnNhY3Rpb24oKSB0byBmaXJzdCBkbyBhIHBsYWlu
IGxvYWQuIEJ1dCBpZiB5b3UgZG9uJ3QgdGhpbmsgdGhhdCBzdWNoIGFuCisgICAgICAgIGFib3J0
IGlzIGxpa2VseSwgdGhlbiB5b3Ugd2FudCB0byBnbyBzdHJhaWdodCB0byB0aGUgTEwuIFRoZSBB
UEkgc3VwcG9ydHMgdGhpcyBjb25jZXB0CisgICAgICAgIHZpYSBUcmFuc2FjdGlvbkFib3J0TGlr
ZWxpaG9vZC4KKyAgICAgICAgCisgICAgICAgIEFkZGl0aW9uYWxseSwgdGhpcyByZWRvZXMgdGhl
IGRlcGVuZC9jb25zdW1lIEFQSSB0byBiZSBkZWFkIHNpbXBsZS4gRGVwZW5kZW5jeSBpcworICAg
ICAgICB1bnNpZ25lZC4gWW91IGdldCBhIGRlcGVuZGVuY3kgb24gYSBsb2FkZWQgdmFsdWUgYnkg
anVzdCBzYXlpbmcKKyAgICAgICAgZGVwZW5kZW5jeShsb2FkZWRWYWx1ZSkuIFlvdSBjb25zdW1l
IHRoZSBkZXBlbmRlbmN5IGJ5IHVzaW5nIGl0IGFzIGEgYm9udXMgaW5kZXggdG8KKyAgICAgICAg
c29tZSBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGlzIGlzIG1hZGUgZWFzeSB3aXRoIHRoZSBjb25z
dW1lPFQqPihwdHIsIGRlcGVuZGVuY3kpCisgICAgICAgIGhlbHBlci4gSW4gdGhvc2UgY2FzZXMg
d2hlcmUgeW91IHdhbnQgdG8gcGFzcyBhcm91bmQgYm90aCBhIGNvbXB1dGVkIHZhbHVlIGFuZCBh
CisgICAgICAgIGRlcGVuZGVuY3ksIHRoZXJlJ3MgRGVwZW5kZW5jeVdpdGg8VD4uIEJ1dCB5b3Ug
d29uJ3QgbmVlZCBpdCBpbiBtb3N0IGNhc2VzLiBUaGUgbG9hZGVkCisgICAgICAgIHZhbHVlIG9y
IGFueSB2YWx1ZSBjb21wdXRlZCBmcm9tIHRoZSBsb2FkZWQgdmFsdWUgaXMgYSBmaW5lIGlucHV0
IHRvIGRlcGVuZGVuY3koKSEKKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlIHVwZGF0ZXMg
YSBidW5jaCBvZiBob3QgcGF0aHMgdG8gdXNlIHRoZSBuZXcgQVBJcy4gVXNpbmcgdHJhbnNhY3Rp
b24oKSBnaXZlcworICAgICAgICB1cyBvcHRpbWFsIExML1NDIGxvb3BzIGZvciBvYmplY3QgbWFy
a2luZyBhbmQgbG9jayBhY3F1aXNpdGlvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdl
IGFsc28gdXBkYXRlcyBhIGJ1bmNoIG9mIGhvdCBwYXRocyB0byB1c2UgZGVwZW5kZW5jeSgpL2Nv
bnN1bWUoKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBzaWduaWZpY2FudCBPY3RhbmUv
c3BsYXkgc3BlZWQtdXAgb24gQVJNLgorCisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAgICAg
ICAgKFdURjo6aGFzRmVuY2UpOgorICAgICAgICAoV1RGOjpBdG9taWM6OnByZXBhcmUpOgorICAg
ICAgICAoV1RGOjpBdG9taWM6OmF0dGVtcHQpOgorICAgICAgICAoV1RGOjpBdG9taWM6OnRyYW5z
YWN0aW9uKToKKyAgICAgICAgKFdURjo6QXRvbWljOjp0cmFuc2FjdGlvblJlbGF4ZWQpOgorICAg
ICAgICAoV1RGOjpudWxsRGVwZW5kZW5jeSk6CisgICAgICAgIChXVEY6OmRlcGVuZGVuY3kpOgor
ICAgICAgICAoV1RGOjpEZXBlbmRlbmN5V2l0aDo6RGVwZW5kZW5jeVdpdGgpOgorICAgICAgICAo
V1RGOjpkZXBlbmRlbmN5V2l0aCk6CisgICAgICAgIChXVEY6OmNvbnN1bWUpOgorICAgICAgICAo
V1RGOjpBdG9taWM6OnRyeVRyYW5zYWN0aW9uUmVsYXhlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OkF0b21pYzo6dHJ5VHJhbnNhY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp6ZXJv
V2l0aENvbnN1bWVEZXBlbmRlbmN5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y29uc3VtZUxv
YWQpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAgKFdURjo6V29y
ZFR5cGU+OjpnZXQpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmNvbmN1cnJlbnRUZXN0QW5k
U2V0KToKKyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojpjb25jdXJyZW50VGVzdEFuZENsZWFyKToK
KyAgICAgICAgKiB3dGYvTG9ja0FsZ29yaXRobS5oOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3Jp
dGhtOjpsb2NrRmFzdCk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OnVubG9ja0Zhc3Qp
OgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2tTbG93KToKKyAgICAgICAgKiB3
dGYvUGxhdGZvcm0uaDoKKwogMjAxNy0wMy0wNiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBs
ZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVwb3J0IGRvbWFpbnMgY3Jhc2hpbmcgdW5kZXIgbWVt
b3J5IHByZXNzdXJlIHZpYSBlbmhhbmNlZCBwcml2YWN5IGxvZ2dpbmcuCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5o
CShyZXZpc2lvbiAyMTM1MjkpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIw
MTAsIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtNDAsNiArNDAsMTYgQEAgZXh0ZXJuICJDIiB2b2lkIF9SZWFkV3Jp
dGVCYXJyaWVyKHZvaWQpOwogCiBuYW1lc3BhY2UgV1RGIHsKIAorQUxXQVlTX0lOTElORSBib29s
IGhhc0ZlbmNlKHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyKQoreworICAgIHJldHVybiBvcmRlciAh
PSBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkOworfQorCitlbnVtIGNsYXNzIFRyYW5zYWN0aW9u
QWJvcnRMaWtlbGlob29kIHsKKyAgICBVbmxpa2VseSwKKyAgICBMaWtlbHkKK307CisgICAgCiAv
LyBBdG9taWMgd3JhcHMgYXJvdW5kIHN0ZDo6YXRvbWljIHdpdGggdGhlIHNvbGUgcHVycG9zZSBv
ZiBtYWtpbmcgdGhlIGNvbXBhcmVfZXhjaGFuZ2UKIC8vIG9wZXJhdGlvbnMgbm90IGFsdGVyIHRo
ZSBleHBlY3RlZCB2YWx1ZS4gVGhpcyBpcyBtb3JlIGluIGxpbmUgd2l0aCBob3cgd2UgdHlwaWNh
bGx5CiAvLyB1c2UgQ0FTIGluIG91ciBjb2RlLgpAQCAtMTA3LDM5ICsxMTcsMTMwIEBAIHN0cnVj
dCBBdG9taWMgewogICAgIAogICAgIEFMV0FZU19JTkxJTkUgVCBleGNoYW5nZShUIG5ld1ZhbHVl
LCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpIHsg
cmV0dXJuIHZhbHVlLmV4Y2hhbmdlKG5ld1ZhbHVlLCBvcmRlcik7IH0KICAgICAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIEFMV0FZU19JTkxJTkUgYm9vbCB0cnlUcmFuc2FjdGlv
blJlbGF4ZWQoY29uc3QgRnVuYyYgZnVuYykKKyNpZiBIQVZFKExMX1NDKQorICAgIEFMV0FZU19J
TkxJTkUgVCBsb2FkTGluayhzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29y
ZGVyX3NlcV9jc3QpOworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzdG9yZUNvbmQoVCB2YWx1ZSwg
IHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7Cisj
ZW5kaWYgLy8gSEFWRShMTF9TQykKKworICAgIC8vIFByb3BzIHRvIAorICAgIEFMV0FZU19JTkxJ
TkUgVCBwcmVwYXJlKHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJf
c2VxX2NzdCkKICAgICB7Ci0gICAgICAgIFQgb2xkVmFsdWUgPSBsb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGF4ZWQpOwotICAgICAgICBUIG5ld1ZhbHVlID0gb2xkVmFsdWU7Ci0gICAgICAgIGZ1
bmMobmV3VmFsdWUpOwotICAgICAgICByZXR1cm4gY29tcGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQo
b2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyNpZiBIQVZFKExMX1NDKQorICAgICAgICByZXR1cm4gbG9h
ZExpbmsob3JkZXIpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG9yZGVyKTsKKyAgICAg
ICAgcmV0dXJuIGxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisjZW5kaWYKICAgICB9
CisgICAgCisjaWYgSEFWRShMTF9TQykKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBwcmVwYXJlSXNG
YXN0ID0gZmFsc2U7CisjZWxzZQorICAgIHN0YXRpYyBjb25zdCBib29sIHByZXBhcmVJc0Zhc3Qg
PSB0cnVlOworI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCB0cmFuc2FjdGlvblJlbGF4ZWQoY29uc3QgRnVuYyYgZnVuYykKKyAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgYXR0ZW1wdChUIG9sZFZhbHVlLCBUIG5ld1ZhbHVlLCBzdGQ6Om1l
bW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpCiAgICAgewotICAg
ICAgICB3aGlsZSAoIXRyeVRyYW5zYXRpb25SZWxheGVkKGZ1bmMpKSB7IH0KKyNpZiBIQVZFKExM
X1NDKQorICAgICAgICBVTlVTRURfUEFSQU0ob2xkVmFsdWUpOworICAgICAgICByZXR1cm4gc3Rv
cmVDb25kKG5ld1ZhbHVlLCBvcmRlcik7CisjZWxzZQorICAgICAgICByZXR1cm4gY29tcGFyZUV4
Y2hhbmdlV2VhayhvbGRWYWx1ZSwgbmV3VmFsdWUsIG9yZGVyKTsKKyNlbmRpZgogICAgIH0KLQor
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgQUxXQVlTX0lOTElORSBib29s
IHRyeVRyYW5zYWN0aW9uKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgQUxXQVlTX0lOTElORSBib29s
IHRyYW5zYWN0aW9uKGNvbnN0IEZ1bmMmIGZ1bmMsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0g
c3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCwgVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2QgYWJv
cnRMaWtlbGlob29kID0gVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6Okxpa2VseSkKICAgICB7
Ci0gICAgICAgIFQgb2xkVmFsdWUgPSBsb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwot
ICAgICAgICBUIG5ld1ZhbHVlID0gb2xkVmFsdWU7Ci0gICAgICAgIGZ1bmMobmV3VmFsdWUpOwot
ICAgICAgICByZXR1cm4gY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgbmV3VmFsdWUpOwor
ICAgICAgICAvLyBJZiBwcmVwYXJpbmcgaXMgbm90IGZhc3QgdGhlbiB3ZSB3YW50IHRvIHNraXAg
dGhlIGxvb3Agd2hlbiBmdW5jIHdvdWxkIGZhaWwuCisgICAgICAgIGlmICghcHJlcGFyZUlzRmFz
dCAmJiBhYm9ydExpa2VsaWhvb2QgPT0gVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6Okxpa2Vs
eSkgeworICAgICAgICAgICAgVCBvbGRWYWx1ZSA9IGxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVs
YXhlZCk7CisgICAgICAgICAgICAvLyBOb3RlOiBtYW55IGZ1bmNzIHdpbGwgY29uc3RhbnQtZm9s
ZCB0byB0cnVlLCB3aGljaCB3aWxsIGtpbGwgYWxsIG9mIHRoaXMgY29kZS4KKyAgICAgICAgICAg
IGlmICghZnVuYyhvbGRWYWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIFQgb2xkVmFsdWUgPSBwcmVw
YXJlKG9yZGVyKTsKKyAgICAgICAgICAgIFQgbmV3VmFsdWUgPSBvbGRWYWx1ZTsKKyAgICAgICAg
ICAgIGlmICghZnVuYyhuZXdWYWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgaWYgKGF0dGVtcHQob2xkVmFsdWUsIG5ld1ZhbHVlLCBvcmRlcikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB0cmFuc2FjdGlvbihjb25z
dCBGdW5jJiBmdW5jKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB0cmFuc2FjdGlvblJlbGF4ZWQo
Y29uc3QgRnVuYyYgZnVuYywgVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2QgYWJvcnRMaWtlbGlo
b29kID0gVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6Okxpa2VseSkKICAgICB7Ci0gICAgICAg
IHdoaWxlICghdHJ5VHJhbnNhY3Rpb24oZnVuYykpIHsgfQorICAgICAgICByZXR1cm4gdHJhbnNh
Y3Rpb24oZnVuYywgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCwgYWJvcnRMaWtlbGlob29kKTsK
ICAgICB9CiAKICAgICBzdGQ6OmF0b21pYzxUPiB2YWx1ZTsKIH07CiAKKyNpZiBDUFUoQVJNNjQp
CisjZGVmaW5lIERFRklORV9MTF9TQyh3aWR0aCwgbW9kaWZpZXIsIHN1ZmZpeCkgICBcCisgICAg
dGVtcGxhdGU8PiBcCisgICAgQUxXQVlTX0lOTElORSB1aW50ICMjIHdpZHRoICMjIF90IEF0b21p
Yzx1aW50ICMjIHdpZHRoICMjX3Q+Ojpsb2FkTGluayhzdGQ6Om1lbW9yeV9vcmRlciBvcmRlcikg
XAorICAgIHsgXAorICAgICAgICBpbnQgIyMgd2lkdGggIyMgX3QgcmVzdWx0OyBcCisgICAgICAg
IGlmIChoYXNGZW5jZShvcmRlcikpIHsgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICggXAor
ICAgICAgICAgICAgICAgICJsZGF4ciIgc3VmZml4ICIgJSIgbW9kaWZpZXIgIjAsIFslMV0iIFwK
KyAgICAgICAgICAgICAgICA6ICI9ciIocmVzdWx0KSBcCisgICAgICAgICAgICAgICAgOiAiciIo
dGhpcykgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyBcCisgICAgICAgIH0gZWxzZSB7
IFwKKyAgICAgICAgICAgIGFzbSAoIFwKKyAgICAgICAgICAgICAgICAibGR4ciIgc3VmZml4ICIg
JSIgbW9kaWZpZXIgIjAsIFslMV0iIFwKKyAgICAgICAgICAgICAgICA6ICI9ciIocmVzdWx0KSBc
CisgICAgICAgICAgICAgICAgOiAiciIodGhpcykgXAorICAgICAgICAgICAgICAgIDogIm1lbW9y
eSIpOyBcCisgICAgICAgIH0gXAorICAgICAgICByZXR1cm4gcmVzdWx0OyBcCisgICAgfSBcCisg
ICAgXAorICAgIHRlbXBsYXRlPD4gXAorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBBdG9taWM8dWlu
dCAjIyB3aWR0aCAjIyBfdD46OnN0b3JlQ29uZCh1aW50ICMjIHdpZHRoICMjIF90IHZhbHVlLCBz
dGQ6Om1lbW9yeV9vcmRlciBvcmRlcikgXAorICAgIHsgXAorICAgICAgICBib29sIHJlc3VsdDsg
XAorICAgICAgICBpZiAoaGFzRmVuY2Uob3JkZXIpKSB7IFwKKyAgICAgICAgICAgIGFzbSB2b2xh
dGlsZSAoIFwKKyAgICAgICAgICAgICAgICAic3RseHIiIHN1ZmZpeCAiICV3MCwgJSIgbW9kaWZp
ZXIgIjEsIFslMl0iIFwKKyAgICAgICAgICAgICAgICA6ICI9JnIiKHJlc3VsdCkgXAorICAgICAg
ICAgICAgICAgIDogInIiKHZhbHVlKSwgInIiKHRoaXMpIFwKKyAgICAgICAgICAgICAgICA6ICJt
ZW1vcnkiKTsgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgICAgICBhc20gKCBcCisgICAg
ICAgICAgICAgICAgInN0eHIiIHN1ZmZpeCAiICV3MCwgJSIgbW9kaWZpZXIgIjEsIFslMl0iIFwK
KyAgICAgICAgICAgICAgICA6ICI9JnIiKHJlc3VsdCkgXAorICAgICAgICAgICAgICAgIDogInIi
KHZhbHVlKSwgInIiKHRoaXMpIFwKKyAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgXAorICAg
ICAgICB9IFwKKyAgICAgICAgcmV0dXJuICFyZXN1bHQ7IFwKKyAgICB9IFwKKyAgICBcCisgICAg
dGVtcGxhdGU8PiBcCisgICAgQUxXQVlTX0lOTElORSBpbnQgIyMgd2lkdGggIyMgX3QgQXRvbWlj
PGludCAjIyB3aWR0aCAjIyBfdD46OmxvYWRMaW5rKHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyKSBc
CisgICAgeyBcCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QXRvbWljPHVpbnQgIyMgd2lk
dGggIyMgX3Q+Kj4odGhpcyktPmxvYWRMaW5rKG9yZGVyKTsgXAorICAgIH0gXAorICAgIFwKKyAg
ICB0ZW1wbGF0ZTw+IFwKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgQXRvbWljPGludCAjIyB3aWR0
aCAjIyBfdD46OnN0b3JlQ29uZChpbnQgIyMgd2lkdGggIyMgX3QgdmFsdWUsIHN0ZDo6bWVtb3J5
X29yZGVyIG9yZGVyKSBcCisgICAgeyBcCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QXRv
bWljPHVpbnQgIyMgd2lkdGggIyMgX3Q+Kj4odGhpcyktPnN0b3JlQ29uZCh2YWx1ZSwgb3JkZXIp
OyBcCisgICAgfQorCitERUZJTkVfTExfU0MoOCwgInciLCAiYiIpCitERUZJTkVfTExfU0MoMTYs
ICJ3IiwgImgiKQorREVGSU5FX0xMX1NDKDMyLCAidyIsICIiKQorREVGSU5FX0xMX1NDKDY0LCAi
IiwgIiIpCitERUZJTkVfTExfU0MocHRyLCAiIiwgIiIpCisKKyN1bmRlZiBERUZJTkVfTExfU0MK
KyNlbmRpZiAvLyBDUFUoQVJNNjQpCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCBh
dG9taWNMb2FkKFQqIGxvY2F0aW9uLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVt
b3J5X29yZGVyX3NlcV9jc3QpCiB7CkBAIC0zMDgsMTIgKzQwOSwxNyBAQCBpbmxpbmUgdm9pZCBj
cm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpIHsgCiAKICNlbmRpZgogCi10eXBlZGVmIHNpemVfdCBD
b25zdW1lRGVwZW5kZW5jeTsKK3R5cGVkZWYgdW5zaWduZWQgRGVwZW5kZW5jeTsKKworQUxXQVlT
X0lOTElORSBEZXBlbmRlbmN5IG51bGxEZXBlbmRlbmN5KCkKK3sKKyAgICByZXR1cm4gMDsKK30K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihU
KSA9PSA4Pjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBDb25zdW1lRGVwZW5kZW5j
eSB6ZXJvV2l0aENvbnN1bWVEZXBlbmRlbmN5KFQgdmFsdWUpCitBTFdBWVNfSU5MSU5FIERlcGVu
ZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQogewotICAgIHVpbnQ2NF90IGRlcGVuZGVuY3k7Cisg
ICAgdW5zaWduZWQgZGVwZW5kZW5jeTsKICAgICB1aW50NjRfdCBjb3B5ID0gYml0d2lzZV9jYXN0
PHVpbnQ2NF90Pih2YWx1ZSk7CiAjaWYgQ1BVKEFSTTY0KQogICAgIC8vIENyZWF0ZSBhIG1hZ2lj
YWwgemVybyB2YWx1ZSB0aHJvdWdoIGlubGluZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0YXRpb24K
QEAgLTMyNSwzMCArNDMxLDI2IEBAIEFMV0FZU19JTkxJTkUgQ29uc3VtZURlcGVuZGVuY3kgemVy
b1dpdGgKICAgICAvLyBvcmRlcmluZy4gVGhpcyBmb3JjZXMgd2VhayBtZW1vcnkgb3JkZXIgQ1BV
cyB0byBvYnNlcnZlIGBsb2NhdGlvbmAgYW5kCiAgICAgLy8gZGVwZW5kZW50IGxvYWRzIGluIHRo
ZWlyIHN0b3JlIG9yZGVyIHdpdGhvdXQgdGhlIHJlYWRlciB1c2luZyBhIGJhcnJpZXIKICAgICAv
LyBvciBhbiBhY3F1aXJlIGxvYWQuCi0gICAgYXNtIHZvbGF0aWxlKCJlb3IgJXhbZGVwZW5kZW5j
eV0sICV4W2luXSwgJXhbaW5dIgotICAgICAgICAgICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIi
KGRlcGVuZGVuY3kpCi0gICAgICAgICAgICAgICAgIDogW2luXSAiciIoY29weSkKLSAgICAgICAg
ICAgICAgICAgLy8gTGllIGFib3V0IHRvdWNoaW5nIG1lbW9yeS4gTm90IHN0cmljdGx5IG5lZWRl
ZCwgYnV0IGlzCi0gICAgICAgICAgICAgICAgIC8vIGxpa2VseSB0byBhdm9pZCB1bndhbnRlZCBs
b2FkL3N0b3JlIG1vdGlvbi4KLSAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CisgICAgYXNt
KCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgorICAgICAgICA6IFtkZXBlbmRl
bmN5XSAiPXIiKGRlcGVuZGVuY3kpCisgICAgICAgIDogW2luXSAiciIoY29weSkpOwogI2VsaWYg
Q1BVKEFSTSkKLSAgICBhc20gdm9sYXRpbGUoImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtp
bl0iCi0gICAgICAgICAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAg
ICAgICAgICAgICAgICAgOiBbaW5dICJyIihjb3B5KQotICAgICAgICAgICAgICAgICA6ICJtZW1v
cnkiKTsKKyAgICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCisgICAgICAg
IDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKKyAgICAgICAgOiBbaW5dICJyIihjb3B5
KSk7CiAjZWxzZQogICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVlZGVkIGZvciB0aGlzIGFyY2hp
dGVjdHVyZS4KICAgICBsb2FkTG9hZEZlbmNlKCk7CiAgICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAg
KHZvaWQpY29weTsKKyAgICBVTlVTRURfUEFSQU0oY29weSk7CiAjZW5kaWYKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q29uc3VtZURlcGVuZGVuY3k+KGRlcGVuZGVuY3kpOworICAgIHJldHVybiBk
ZXBlbmRlbmN5OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIENv
bnN1bWVEZXBlbmRlbmN5IHplcm9XaXRoQ29uc3VtZURlcGVuZGVuY3koVCB2YWx1ZSkKK0FMV0FZ
U19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCiB7Ci0gICAgdWludDMyX3Qg
ZGVwZW5kZW5jeTsKKyAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwogICAgIHVpbnQzMl90IGNvcHkg
PSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKICNpZiBDUFUoQVJNNjQpCiAgICAgYXNt
IHZvbGF0aWxlKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgpAQCAtMzYzLDY2
ICs0NjUsNjggQEAgQUxXQVlTX0lOTElORSBDb25zdW1lRGVwZW5kZW5jeSB6ZXJvV2l0aAogI2Vs
c2UKICAgICBsb2FkTG9hZEZlbmNlKCk7CiAgICAgZGVwZW5kZW5jeSA9IDA7Ci0gICAgKHZvaWQp
Y29weTsKKyAgICBVTlVTRURfUEFSQU0oY29weSk7CiAjZW5kaWYKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q29uc3VtZURlcGVuZGVuY3k+KGRlcGVuZGVuY3kpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUPihkZXBlbmRlbmN5KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSAyPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlT
X0lOTElORSBDb25zdW1lRGVwZW5kZW5jeSB6ZXJvV2l0aENvbnN1bWVEZXBlbmRlbmN5KFQgdmFs
dWUpCitBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQogewotICAg
IHVpbnQxNl90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDE2X3Q+KHZhbHVlKTsKLSAgICByZXR1
cm4gemVyb1dpdGhDb25zdW1lRGVwZW5kZW5jeShzdGF0aWNfY2FzdDxzaXplX3Q+KGNvcHkpKTsK
KyAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihU
KSA9PSAxPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBDb25zdW1lRGVwZW5kZW5j
eSB6ZXJvV2l0aENvbnN1bWVEZXBlbmRlbmN5KFQgdmFsdWUpCitBTFdBWVNfSU5MSU5FIERlcGVu
ZGVuY3kgZGVwZW5kZW5jeShUIHZhbHVlKQogewotICAgIHVpbnQ4X3QgY29weSA9IGJpdHdpc2Vf
Y2FzdDx1aW50OF90Pih2YWx1ZSk7Ci0gICAgcmV0dXJuIHplcm9XaXRoQ29uc3VtZURlcGVuZGVu
Y3koc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb3B5KSk7CisgICAgcmV0dXJuIGRlcGVuZGVuY3koc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
c3RydWN0IENvbnN1bWVkIHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgRGVwZW5kZW5j
eVdpdGggeworcHVibGljOgorICAgIERlcGVuZGVuY3lXaXRoKCkKKyAgICAgICAgOiBkZXBlbmRl
bmN5KG51bGxEZXBlbmRlbmN5KCkpCisgICAgICAgICwgdmFsdWUoKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgRGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2
YWx1ZSkKKyAgICAgICAgOiBkZXBlbmRlbmN5KGRlcGVuZGVuY3kpCisgICAgICAgICwgdmFsdWUo
dmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7CiAg
ICAgVCB2YWx1ZTsKLSAgICBDb25zdW1lRGVwZW5kZW5jeSBkZXBlbmRlbmN5OwogfTsKKyAgICAK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgRGVwZW5kZW5jeVdpdGg8VD4gZGVwZW5kZW5j
eVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gRGVwZW5kZW5jeVdpdGg8VD4oZGVwZW5kZW5jeSwgdmFsdWUpOworfQogCi0vLyBDb25zdW1l
IGxvYWQsIHJldHVybmluZyB0aGUgbG9hZGVkIGB2YWx1ZWAgYXQgYGxvY2F0aW9uYCBhbmQgYSBk
ZXBlbmRlbnQtemVybwotLy8gd2hpY2ggY3JlYXRlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgZnJv
bSB0aGUgYGxvY2F0aW9uYC4KLS8vCi0vLyBVc2FnZSBub3RlczoKLS8vCi0vLyAgKiBSZWdhcmRp
bmcgY29udHJvbCBkZXBlbmRlbmNpZXM6IG1lcmVseSBicmFuY2hpbmcgYmFzZWQgb24gYHZhbHVl
YCBvcgotLy8gICAgYGRlcGVuZGVuY3lgIGlzbid0IHN1ZmZpY2llbnQgdG8gaW1wb3NlIGEgZGVw
ZW5kZW5jeSBvcmRlcmluZzogeW91IG11c3QKLS8vICAgIHVzZSBgZGVwZW5kZW5jeWAgaW4gdGhl
IGFkZHJlc3MgY29tcHV0YXRpb24gb2Ygc3Vic2VxdWVudCBsb2FkcyB3aGljaAotLy8gICAgc2hv
dWxkIG9ic2VydmUgdGhlIHN0b3JlIG9yZGVyIHcuci50LiBgbG9jYXRpb25gLgotLy8gKiBSZWdh
cmRpbmcgbWVtb3J5IG9yZGVyaW5nOiBjb25zdW1lIGxvYWQgb3JkZXJzIHRoZSBgbG9jYXRpb25g
IGxvYWQgd2l0aAotLy8gICBzdXNlcXVlbnQgZGVwZW5kZW50IGxvYWRzICpvbmx5Ki4gSXQgc2F5
cyBub3RoaW5nIGFib3V0IG9yZGVyaW5nIG9mIG90aGVyCi0vLyAgIGxvYWRzIQotLy8KLS8vIENh
dmVhdCBlbXB0b3IuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBj
b25zdW1lTG9hZChjb25zdCBUKiBsb2NhdGlvbikKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHN0
ZDo6cmVtb3ZlX2N2PFQ+Ojp0eXBlIFJldHVybmVkOwotICAgIENvbnN1bWVkPFJldHVybmVkPiBy
ZXQgeyB9OwotICAgIC8vIEZvcmNlIHRoZSByZWFkIG9mIGBsb2NhdGlvbmAgdG8gb2NjdXIgZXhh
Y3RseSBvbmNlIGFuZCB3aXRob3V0IGZ1c2luZyBvcgotICAgIC8vIGZvcndhcmRpbmcgdXNpbmcg
dm9sYXRpbGUuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGNvbXBpbGVyIGNvdWxkCi0g
ICAgLy8gb3RoZXJ3aXNlIHJlbWF0ZXJpYWxpemUgb3IgZmluZCBlcXVpdmFsZW50IGxvYWRzLCBv
ciBzaW1wbHkgZm9yd2FyZCBmcm9tCi0gICAgLy8gYSBwcmV2aW91cyBvbmUsIGFuZCBsb3NlIHRo
ZSBkZXBlbmRlbmN5IHdlJ3JlIHRyeWluZyBzbyBoYXJkIHRvCi0gICAgLy8gY3JlYXRlLiBQcmV2
ZW50IHRlYXJpbmcgYnkgdXNpbmcgYW4gYXRvbWljLCBidXQgbGV0IGl0IG1vdmUgYXJvdW5kIGJ5
Ci0gICAgLy8gdXNpbmcgcmVsYXhlZC4gV2UgaGF2ZSBhdCBsZWFzdCBhIG1lbW9yeSBmZW5jZSBh
ZnRlciB0aGlzIHdoaWNoIHByZXZlbnRzCi0gICAgLy8gdGhlIGxvYWQgZnJvbSBtb3ZpbmcgdG9v
IG11Y2guCi0gICAgcmV0LnZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2xhdGlsZSBz
dGQ6OmF0b21pYzxSZXR1cm5lZD4qPihsb2NhdGlvbiktPmxvYWQoc3RkOjptZW1vcnlfb3JkZXJf
cmVsYXhlZCk7Ci0gICAgcmV0LmRlcGVuZGVuY3kgPSB6ZXJvV2l0aENvbnN1bWVEZXBlbmRlbmN5
KHJldC52YWx1ZSk7Ci0gICAgcmV0dXJuIHJldDsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citpbmxp
bmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCit7CisjaWYg
Q1BVKEFSTTY0KSB8fCBDUFUoQVJNKQorICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KGJpdHdp
c2VfY2FzdDxjaGFyKj4ocG9pbnRlcikgKyBkZXBlbmRlbmN5KTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGRlcGVuZGVuY3kpOworICAgIHJldHVybiBwb2ludGVyOworI2VuZGlmCiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OkF0b21pYzsKLXVzaW5nIFdURjo6Q29uc3Vt
ZURlcGVuZGVuY3k7Ci11c2luZyBXVEY6OmNvbnN1bWVMb2FkOwordXNpbmcgV1RGOjpEZXBlbmRl
bmN5OwordXNpbmcgV1RGOjpEZXBlbmRlbmN5V2l0aDsKK3VzaW5nIFdURjo6VHJhbnNhY3Rpb25B
Ym9ydExpa2VsaWhvb2Q7Cit1c2luZyBXVEY6OmNvbnN1bWU7Cit1c2luZyBXVEY6OmRlcGVuZGVu
Y3k7Cit1c2luZyBXVEY6OmRlcGVuZGVuY3lXaXRoOwordXNpbmcgV1RGOjpudWxsRGVwZW5kZW5j
eTsKIAogI2VuZGlmIC8vIEF0b21pY3NfaApJbmRleDogU291cmNlL1dURi93dGYvQml0bWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0bWFwLmgJKHJldmlzaW9uIDIxMzUyOSkK
KysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAs
MTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYml0bWFwU2l6ZTsKICAgICB9CiAKLSAgICBi
b29sIGdldChzaXplX3QpIGNvbnN0OworICAgIGJvb2wgZ2V0KHNpemVfdCwgRGVwZW5kZW5jeSA9
IG51bGxEZXBlbmRlbmN5KCkpIGNvbnN0OwogICAgIHZvaWQgc2V0KHNpemVfdCk7CiAgICAgdm9p
ZCBzZXQoc2l6ZV90LCBib29sKTsKICAgICBib29sIHRlc3RBbmRTZXQoc2l6ZV90KTsKICAgICBi
b29sIHRlc3RBbmRDbGVhcihzaXplX3QpOwotICAgIGJvb2wgY29uY3VycmVudFRlc3RBbmRTZXQo
c2l6ZV90KTsKLSAgICBib29sIGNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIoc2l6ZV90KTsKKyAgICBi
b29sIGNvbmN1cnJlbnRUZXN0QW5kU2V0KHNpemVfdCwgRGVwZW5kZW5jeSA9IG51bGxEZXBlbmRl
bmN5KCksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kID0gVHJhbnNhY3Rpb25BYm9ydExpa2Vs
aWhvb2Q6Okxpa2VseSk7CisgICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZENsZWFyKHNpemVfdCwg
RGVwZW5kZW5jeSA9IG51bGxEZXBlbmRlbmN5KCksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29k
ID0gVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6Okxpa2VseSk7CiAgICAgc2l6ZV90IG5leHRQ
b3NzaWJseVVuc2V0KHNpemVfdCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhcihzaXplX3QpOwogICAg
IHZvaWQgY2xlYXJBbGwoKTsKQEAgLTkxLDkgKzkxLDkgQEAgaW5saW5lIEJpdG1hcDxiaXRtYXBT
aXplLCBXb3JkVHlwZT46OkJpdAogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlw
ZW5hbWUgV29yZFR5cGU+Ci1pbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+
OjpnZXQoc2l6ZV90IG4pIGNvbnN0CitpbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29y
ZFR5cGU+OjpnZXQoc2l6ZV90IG4sIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gISEoYml0c1tuIC8gd29yZFNpemVdICYgKG9uZSA8PCAobiAlIHdvcmRTaXplKSkp
OworICAgIHJldHVybiAhIShiaXRzW24gLyB3b3JkU2l6ZSArIGRlcGVuZGVuY3ldICYgKG9uZSA8
PCAobiAlIHdvcmRTaXplKSkpOwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlw
ZW5hbWUgV29yZFR5cGU+CkBAIC0xMzIsMzMgKzEzMiwzNyBAQCBpbmxpbmUgYm9vbCBCaXRtYXA8
Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0
eXBlbmFtZSBXb3JkVHlwZT4KLWlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlw
ZT46OmNvbmN1cnJlbnRUZXN0QW5kU2V0KHNpemVfdCBuKQorQUxXQVlTX0lOTElORSBib29sIEJp
dG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmNvbmN1cnJlbnRUZXN0QW5kU2V0KHNpemVfdCBu
LCBEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kIGFib3J0
TGlrZWxpaG9vZCkKIHsKICAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgd29yZFNpemUp
OwogICAgIHNpemVfdCBpbmRleCA9IG4gLyB3b3JkU2l6ZTsKLSAgICBXb3JkVHlwZSogd29yZFB0
ciA9IGJpdHMuZGF0YSgpICsgaW5kZXg7Ci0gICAgV29yZFR5cGUgb2xkVmFsdWU7Ci0gICAgZG8g
ewotICAgICAgICBvbGRWYWx1ZSA9ICp3b3JkUHRyOwotICAgICAgICBpZiAob2xkVmFsdWUgJiBt
YXNrKQorICAgIFdvcmRUeXBlKiBkYXRhID0gYml0cy5kYXRhKCkgKyBpbmRleCArIGRlcGVuZGVu
Y3k7CisgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8QXRvbWljPFdvcmRUeXBlPio+KGRhdGEpLT50
cmFuc2FjdGlvblJlbGF4ZWQoCisgICAgICAgIFsmXSAoV29yZFR5cGUmIHZhbHVlKSAtPiBib29s
IHsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmIG1hc2spCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YWx1ZSB8PSBtYXNrOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSB3aGlsZSAoIWF0b21pY0NvbXBhcmVFeGNoYW5nZVdl
YWtSZWxheGVkKHdvcmRQdHIsIG9sZFZhbHVlLCBzdGF0aWNfY2FzdDxXb3JkVHlwZT4ob2xkVmFs
dWUgfCBtYXNrKSkpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgYWJv
cnRMaWtlbGlob29kKTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1l
IFdvcmRUeXBlPgotaW5saW5lIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y29u
Y3VycmVudFRlc3RBbmRDbGVhcihzaXplX3QgbikKK0FMV0FZU19JTkxJTkUgYm9vbCBCaXRtYXA8
Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpjb25jdXJyZW50VGVzdEFuZENsZWFyKHNpemVfdCBuLCBE
ZXBlbmRlbmN5IGRlcGVuZGVuY3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kIGFib3J0TGlr
ZWxpaG9vZCkKIHsKICAgICBXb3JkVHlwZSBtYXNrID0gb25lIDw8IChuICUgd29yZFNpemUpOwog
ICAgIHNpemVfdCBpbmRleCA9IG4gLyB3b3JkU2l6ZTsKLSAgICBXb3JkVHlwZSogd29yZFB0ciA9
IGJpdHMuZGF0YSgpICsgaW5kZXg7Ci0gICAgV29yZFR5cGUgb2xkVmFsdWU7Ci0gICAgZG8gewot
ICAgICAgICBvbGRWYWx1ZSA9ICp3b3JkUHRyOwotICAgICAgICBpZiAoIShvbGRWYWx1ZSAmIG1h
c2spKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gd2hpbGUgKCFhdG9taWNDb21w
YXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCh3b3JkUHRyLCBvbGRWYWx1ZSwgc3RhdGljX2Nhc3Q8V29y
ZFR5cGU+KG9sZFZhbHVlICYgfm1hc2spKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgV29yZFR5
cGUqIGRhdGEgPSBiaXRzLmRhdGEoKSArIGluZGV4ICsgZGVwZW5kZW5jeTsKKyAgICByZXR1cm4g
IWJpdHdpc2VfY2FzdDxBdG9taWM8V29yZFR5cGU+Kj4oZGF0YSktPnRyYW5zYWN0aW9uUmVsYXhl
ZCgKKyAgICAgICAgWyZdIChXb3JkVHlwZSYgdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAg
aWYgKCEodmFsdWUgJiBtYXNrKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHZhbHVlICY9IH5tYXNrOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0sCisgICAgICAgIGFib3J0TGlrZWxpaG9vZCk7CiB9CiAKIHRlbXBs
YXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0xvY2tBbGdvcml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2Nr
QWxnb3JpdGhtLmgJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdv
cml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTAgKzUwLDE1IEBAIHB1YmxpYzoKICAgICAK
ICAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQogICAgIHsK
LSAgICAgICAgTG9ja1R5cGUgb2xkVmFsdWUgPSBsb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJf
cmVsYXhlZCk7Ci0gICAgICAgIGlmIChvbGRWYWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhv
bGRWYWx1ZSwgb2xkVmFsdWUgfCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUp
OworICAgICAgICByZXR1cm4gbG9jay50cmFuc2FjdGlvbigKKyAgICAgICAgICAgIFsmXSAoTG9j
a1R5cGUmIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiBpc0hl
bGRCaXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB2YWx1ZSB8PSBpc0hlbGRCaXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSwKKyAgICAg
ICAgICAgIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOjpVbmxpa2VseSk7CiAgICAgfQogICAg
IAogICAgIHN0YXRpYyB2b2lkIGxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKQEAgLTgwLDEw
ICs4NSwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgdW5sb2NrRmFzdChBdG9t
aWM8TG9ja1R5cGU+JiBsb2NrKQogICAgIHsKLSAgICAgICAgTG9ja1R5cGUgb2xkVmFsdWUgPSBs
b2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICAgIGlmICgob2xkVmFs
dWUgJiBtYXNrKSAhPSBpc0hlbGRCaXQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkVmFsdWUsIG9sZFZhbHVlICYg
fmlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgICAgIHJldHVybiBs
b2NrLnRyYW5zYWN0aW9uKAorICAgICAgICAgICAgWyZdIChMb2NrVHlwZSYgdmFsdWUpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgIGlmICgodmFsdWUgJiBtYXNrKSAhPSBpc0hlbGRCaXQpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB2YWx1ZSAm
PSB+aXNIZWxkQml0OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQsCisgICAgICAgICAgICBU
cmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZDo6VW5saWtlbHkpOwogICAgIH0KICAgICAKICAgICBz
dGF0aWMgdm9pZCB1bmxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKQEAgLTIwNiwxMCArMjE2
LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgbG9jay50cmFuc2FjdGlvbigKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFsmXSAoTG9ja1R5cGUmIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKExvY2tUeXBlJiB2YWx1ZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgJj0gfm1hc2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlIHw9IGhhc1BhcmtlZEJpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQmFyZ2luZ09wcG9ydHVuaXR5OwogICAgICAgICAgICAgICAgIH0pOwpJbmRleDog
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybS5oCShyZXZpc2lvbiAyMTM1MjkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NTcsNiArNzU3LDEwIEBACiAjZGVmaW5lIEVOQUJMRV9DT05D
VVJSRU5UX0pTIDEKICNlbmRpZgogCisjaWYgQ1BVKEFSTTY0KQorI2RlZmluZSBIQVZFX0xMX1ND
IDEKKyNlbmRpZiAvLyBDUFUoQVJNNjQpCisKIC8qIFRoaXMgY29udHJvbHMgd2hldGhlciBCMyBp
cyBidWlsdC4gQjMgaXMgbmVlZGVkIGZvciBGVEwgSklUIGFuZCBXZWJBc3NlbWJseSAqLwogI2lm
IEVOQUJMRShGVExfSklUKSB8fCBFTkFCTEUoV0VCQVNTRU1CTFkpCiAjZGVmaW5lIEVOQUJMRV9C
M19KSVQgMQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303773</attachid>
            <date>2017-03-07 21:10:10 -0800</date>
            <delta_ts>2017-03-08 14:29:49 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40722</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzNTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE3LTAzLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBtYWtlIGl0IHN1cGVyIGVhc3kgdG8gZG8gQVJNIGNvbmN1cnJlbmN5IHRyaWNr
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MzAw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZXMgYSBidW5jaCBvZiBHQyBob3QgcGF0aHMgdG8gdXNlIG5ldyBjb25jdXJy
ZW5jeSBBUElzIHRoYXQgbGVhZCB0byBvcHRpbWFsCisgICAgICAgIGNvZGUgb24gYm90aCB4ODYg
KGZ1bGx5IGxldmVyYWdlIFRTTywgdHJhbnNhY3Rpb25zIGJlY29tZSBDQVMgbG9vcHMpIGFuZCBB
Uk0gKHVzZQorICAgICAgICBkZXBlbmRlbmN5IGNoYWlucyBmb3IgZmVuY2luZywgdHJhbnNhY3Rp
b25zIGJlY29tZSBMTC9TQyBsb29wcykuIFdoaWxlIGluc3BlY3RpbmcgdGhlCisgICAgICAgIG1h
Y2hpbmUgY29kZSwgSSBmb3VuZCBvdGhlciBvcHBvcnR1bml0aWVzIGZvciBpbXByb3ZlbWVudCwg
bGlrZSBpbmxpbmluZyB0aGUgImFtIEkKKyAgICAgICAgbWFya2VkIiBwYXJ0IG9mIHRoZSBtYXJr
aW5nIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6
OkhlYXA6OnNldEdDRGlkSklUKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkhlYXA6OnRlc3RBbmRTZXRNYXJrZWQpOgorICAgICAgICAqIGhlYXAvTGFyZ2VB
bGxvY2F0aW9uLmg6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlvbjo6aXNNYXJrZWQpOgor
ICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkQ29uY3VycmVudGx5KToKKyAg
ICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjphYm91dFRvTWFyayk6CisgICAgICAgIChKU0M6
OkxhcmdlQWxsb2NhdGlvbjo6dGVzdEFuZFNldE1hcmtlZCk6CisgICAgICAgICogaGVhcC9NYXJr
ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhE
ZXBlbmRlbmN5KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OnRlc3RBbmRTZXRNYXJrZWQpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kU2xvdyk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjphcHBlbmRIaWRkZW5TbG93KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlblNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtl
ZEFuZEFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVu
ZFVuYmFycmllcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVu
ZEhpZGRlbik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmRVbmJhcnJpZXJlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRI
aWRkZW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmRWYWx1ZXNIaWRkZW4pOgorICAgICAgICAqIHJ1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0
dGVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbCk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5oOgorCiAyMDE3LTAzLTA3ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAg
ICAgICBTb21lIHBsYXRmb3JtcyB3b24ndCBiZSBhYmxlIHRvIGNyZWF0ZSBhIEdQVURldmljZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMzUyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODUzLDkgKzE4NTMsMTAgQEAgdm9pZCBIZWFwOjpoYW5kbGVOZWVkRmluYWxpemUoKQogdm9pZCBI
ZWFwOjpzZXRHQ0RpZEpJVCgpCiB7CiAgICAgbV93b3JsZFN0YXRlLnRyYW5zYWN0aW9uKAotICAg
ICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0ZSkgeworICAgICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0
ZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZSAmIHN0b3BwZWRC
aXQpOwogICAgICAgICAgICAgc3RhdGUgfD0gZ2NEaWRKSVRCaXQ7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjEzNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsOCArOTMsOCBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6dGVzdEFuZFNldE1hcmtlCiAgICAgaWYgKGNlbGwtPmlz
TGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRpb24o
KS50ZXN0QW5kU2V0TWFya2VkKCk7CiAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFy
a2VkQmxvY2soKTsKLSAgICBibG9jay5hYm91dFRvTWFyayhtYXJraW5nVmVyc2lvbik7Ci0gICAg
cmV0dXJuIGJsb2NrLnRlc3RBbmRTZXRNYXJrZWQoY2VsbCk7CisgICAgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5ID0gYmxvY2suYWJvdXRUb01hcmsobWFya2luZ1ZlcnNpb24pOworICAgIHJldHVybiBi
bG9jay50ZXN0QW5kU2V0TWFya2VkKGNlbGwsIGRlcGVuZGVuY3kpOwogfQogCiBBTFdBWVNfSU5M
SU5FIHNpemVfdCBIZWFwOjpjZWxsU2l6ZShjb25zdCB2b2lkKiByYXdDZWxsKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDIx
MzUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlz
TmV3bHlBbGxvY2F0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzTmV3bHlBbGxvY2F0ZWQ7IH0KICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNN
YXJrZWQoSGVhcENlbGwqKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQoc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsYXhlZCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50
bHkoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gbV9pc01hcmtlZC5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2Vk
KEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24s
IEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkgeyBy
ZXR1cm4gaXNNYXJrZWQoKSB8fCBpc05ld2x5QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBib29s
IGhhc1ZhbGlkQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRDZWxsOyB9CkBAIC0xMDks
NyArMTEwLDcgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMm
IGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KICAgICAKLSAgICB2
b2lkIGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uKSB7IH0KKyAgICBEZXBlbmRlbmN5IGFib3V0VG9N
YXJrKEhlYXBWZXJzaW9uKSB7IHJldHVybiBudWxsRGVwZW5kZW5jeSgpOyB9CiAgICAgCiAgICAg
QUxXQVlTX0lOTElORSBib29sIHRlc3RBbmRTZXRNYXJrZWQoKQogICAgIHsKQEAgLTEyMCw3ICsx
MjEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IG1faXNNYXJrZWQuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKGZhbHNlLCB0cnVlKTsKICAgICB9Ci0g
ICAgQUxXQVlTX0lOTElORSBib29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcENlbGwqKSB7IHJldHVy
biB0ZXN0QW5kU2V0TWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdGVzdEFuZFNl
dE1hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29k
ID0gVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6Okxpa2VseSkgeyByZXR1cm4gdGVzdEFuZFNl
dE1hcmtlZCgpOyB9CiAgICAgdm9pZCBjbGVhck1hcmtlZCgpIHsgbV9pc01hcmtlZC5zdG9yZShm
YWxzZSk7IH0KICAgICAKICAgICB2b2lkIG5vdGVNYXJrZWQoKSB7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjEzNTI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MjU4LDcgKzI1OCw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsK
ICAgICBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lk
Kik7CiAgICAgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbiwgY29uc3Qgdm9pZCopOwotICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lk
Kik7CisgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CisgICAgYm9v
bCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5LCBUcmFuc2FjdGlvbkFi
b3J0TGlrZWxpaG9vZCA9IFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpOwogICAg
ICAgICAKICAgICBib29sIGlzQXRvbShjb25zdCB2b2lkKik7CiAgICAgdm9pZCBjbGVhck1hcmtl
ZChjb25zdCB2b2lkKik7CkBAIC0yNzgsMTUgKzI3OSwxNSBAQCBwdWJsaWM6CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtzU3Rh
bGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIHN0cnVjdCBNYXJrc1dpdGhEZXBl
bmRlbmN5IHsKLSAgICAgICAgYm9vbCBhcmVTdGFsZTsKLSAgICAgICAgQ29uc3VtZURlcGVuZGVu
Y3kgZGVwZW5kZW5jeTsKLSAgICB9OwotICAgIE1hcmtzV2l0aERlcGVuZGVuY3kgYXJlTWFya3NT
dGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKKyAgICBEZXBl
bmRlbmN5V2l0aDxib29sPiBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24pOwogICAgIAotICAgIHZvaWQgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24pOworICAgIERlcGVuZGVuY3kgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKLSAgICB2b2lkIGFzc2VydE1hcmtzTm90U3RhbGUo
KTsKKyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICB2b2lkIGFzc2VydE1hcmtzTm90U3RhbGUoKSB7
IH0KKyNlbHNlCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhc3NlcnRNYXJrc05vdFN0YWxl
KCk7CisjZW5kaWYKICAgICAgICAgCiAgICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc0Rlc3RydWN0aW9uOyB9CiAgICAgCkBAIC0zMDYsNyArMzA3LDcgQEAg
cHJpdmF0ZToKICAgICBNYXJrZWRCbG9jayhWTSYsIEhhbmRsZSYpOwogICAgIEF0b20qIGF0b21z
KCk7CiAgICAgICAgIAotICAgIHZvaWQgYWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFib3V0VG9NYXJrU2xvdyhI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgdm9pZCBjbGVhckhhc0FueU1hcmtlZCgp
OwogICAgIAogICAgIHZvaWQgbm90ZU1hcmtlZFNsb3coKTsKQEAgLTQ5MSwyOCArNDkyLDIwIEBA
IGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlKEgKICAgICByZXR1cm4gbWFy
a2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0KIAotQUxXQVlTX0lOTElORSBNYXJr
ZWRCbG9jazo6TWFya3NXaXRoRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdp
dGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQorQUxXQVlTX0lOTElORSBE
ZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRl
bmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewotICAgIGF1dG8gY29uc3VtZWQgPSBj
b25zdW1lTG9hZCgmbV9tYXJraW5nVmVyc2lvbik7Ci0gICAgTWFya3NXaXRoRGVwZW5kZW5jeSBy
ZXQ7Ci0gICAgcmV0LmFyZVN0YWxlID0gY29uc3VtZWQudmFsdWUgIT0gbWFya2luZ1ZlcnNpb247
Ci0gICAgcmV0LmRlcGVuZGVuY3kgPSBjb25zdW1lZC5kZXBlbmRlbmN5OwotICAgIHJldHVybiBy
ZXQ7CisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgcmV0
dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNpb24gIT0gbWFya2lu
Z1ZlcnNpb24pOwogfQogCi1pbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCitpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6
YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgaWYgKFVOTElL
RUxZKGFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pKSkKKyAgICBhdXRvIHJlc3VsdCA9IGFy
ZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7CisgICAgaWYgKFVOTElL
RUxZKHJlc3VsdC52YWx1ZSkpCiAgICAgICAgIGFib3V0VG9NYXJrU2xvdyhtYXJraW5nVmVyc2lv
bik7Ci0gICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRl
bmN5OwogfQogCi0jaWYgQVNTRVJUX0RJU0FCTEVECi1pbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6
YXNzZXJ0TWFya3NOb3RTdGFsZSgpCi17Ci19Ci0jZW5kaWYgLy8gQVNTRVJUX0RJU0FCTEVECi0K
IGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUoKQog
ewogICAgIGJsb2NrKCkuYXNzZXJ0TWFya3NOb3RTdGFsZSgpOwpAQCAtNTMwLDE2ICs1MjMsMjIg
QEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKEhlYXBWZQogCiBpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgYXV0byBtYXJrc1dpdGhEZXBlbmRlbmN5ID0g
YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAobWFy
a3NXaXRoRGVwZW5kZW5jeS5hcmVTdGFsZSkKKyAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3Rh
bGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7CisgICAgaWYgKHJlc3VsdC52YWx1ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVy
KHApICsgbWFya3NXaXRoRGVwZW5kZW5jeS5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJr
cy5nZXQoYXRvbU51bWJlcihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOworfQorCitpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRl
bmN5KQoreworICAgIGFzc2VydE1hcmtzTm90U3RhbGUoKTsKKyAgICByZXR1cm4gbV9tYXJrcy5n
ZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJs
b2NrOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIHApCitpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kIGFib3J0TGlrZWxpaG9vZCkKIHsKICAgICBh
c3NlcnRNYXJrc05vdFN0YWxlKCk7Ci0gICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRlc3RB
bmRTZXQoYXRvbU51bWJlcihwKSk7CisgICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRlc3RB
bmRTZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSwgYWJvcnRMaWtlbGlob29kKTsKIH0KIAog
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNOZXdseUFsbG9jYXRlZChjb25zdCB2
b2lkKiBwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNw
cAkocmV2aXNpb24gMjEzNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNDkgKzIyMiwzNyBAQCB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyCiAgICAgfSB9CiB9CiAKLXZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewotICAg
IGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBp
ZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKLSAgICAgICAgbV9oZWFwU25hcHNo
b3RCdWlsZGVyLT5hcHBlbmRFZGdlKG1fY3VycmVudENlbGwsIHZhbHVlLmFzQ2VsbCgpKTsKLQot
ICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgpKTsKKyAgICAg
ICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmRFZGdlKG1fY3VycmVudENlbGwsIGNlbGwp
OworICAgIAorICAgIGFwcGVuZEhpZGRlblNsb3dJbXBsKGNlbGwsIGRlcGVuZGVuY3kpOwogfQog
Ci12b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZEhpZGRlblNsb3coSlNDZWxsKiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3kpCiB7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgp
KTsKKyAgICBhcHBlbmRIaWRkZW5TbG93SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAotdm9p
ZCBTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxs
KQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5TbG93SW1wbChK
U0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKLSAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgCiAgICAgQVNTRVJUKCFtX2lzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7Ci0gICAgaWYgKCFjZWxsKQotICAgICAgICBy
ZXR1cm47CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICB2YWxpZGF0ZShjZWxsKTsK
ICNlbmRpZgogICAgIAogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAgICAg
ICBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsLT5sYXJnZUFsbG9jYXRpb24oKSwg
Y2VsbCk7CisgICAgICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwtPmxhcmdl
QWxsb2NhdGlvbigpLCBjZWxsLCBkZXBlbmRlbmN5KTsKICAgICBlbHNlCi0gICAgICAgIHNldE1h
cmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworICAg
ICAgICBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsLT5tYXJrZWRCbG9jaygpLCBj
ZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4K
LUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJr
U3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0NlbGwqIGNlbGwpCitBTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKENvbnRh
aW5lclR5cGUmIGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kp
CiB7Ci0gICAgY29udGFpbmVyLmFib3V0VG9NYXJrKG1fbWFya2luZ1ZlcnNpb24pOwotICAgIAot
ICAgIGlmIChjb250YWluZXIudGVzdEFuZFNldE1hcmtlZChjZWxsKSkKKyAgICBpZiAoY29udGFp
bmVyLnRlc3RBbmRTZXRNYXJrZWQoY2VsbCwgZGVwZW5kZW5jeSwgVHJhbnNhY3Rpb25BYm9ydExp
a2VsaWhvb2Q6OlVubGlrZWx5KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VSVChj
ZWxsLT5zdHJ1Y3R1cmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSwxMSArMTc1LDE0IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgdm9pZCBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2VsbCopOwog
ICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpTVmFsdWUpOworICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpT
Q2VsbCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRU
b01hcmtTdGFjayhKU0NlbGwqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFNs
b3coSlNDZWxsKiwgRGVwZW5kZW5jeSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBl
bmRIaWRkZW5TbG93KEpTQ2VsbCosIERlcGVuZGVuY3kpOworICAgIHZvaWQgYXBwZW5kSGlkZGVu
U2xvd0ltcGwoSlNDZWxsKiwgRGVwZW5kZW5jeSk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29udGFpbmVyVHlwZT4KLSAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNr
KENvbnRhaW5lclR5cGUmLCBKU0NlbGwqKTsKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRv
TWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwqLCBEZXBlbmRlbmN5KTsKICAgICAKICAg
ICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIx
MzUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0OSArMzEsMTA2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSogc2xv
dCwgc2l6ZV90IGNvdW50KQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRV
bmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCiB7CiAgICAgZm9yIChzaXpl
X3QgaSA9IGNvdW50OyBpLS07KQogICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90W2ldKTsK
IH0KIAotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCog
Y2VsbCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQo
SlNDZWxsKiBjZWxsKQogewotICAgIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUoY2VsbCkpOwor
ICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgd3JpdHRlbiBpbiBhIHZlcnkgc3BlY2lmaWMgd2F5IHRv
IGVuc3VyZSB0aGF0IGl0IGdldHMgaW5saW5lZAorICAgIC8vIHByb3Blcmx5LiBJbiBwYXJ0aWN1
bGFyLCBpdCBhcHBlYXJzIHRoYXQgdXNpbmcgdGVtcGxhdGVzIGhlcmUgYnJlYWtzIEFMV0FZU19J
TkxJTkUuCisgICAgCisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
RGVwZW5kZW5jeSBkZXBlbmRlbmN5OworICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc0xhcmdlQWxs
b2NhdGlvbigpKSkgeworICAgICAgICBkZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKTsKKyAg
ICAgICAgaWYgKExJS0VMWShjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpKSkgewor
ICAgICAgICAgICAgaWYgKExJS0VMWSghbV9oZWFwU25hcHNob3RCdWlsZGVyKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBNYXJrZWRC
bG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOworICAgICAgICBkZXBlbmRlbmN5ID0g
YmxvY2suYWJvdXRUb01hcmsobV9tYXJraW5nVmVyc2lvbik7CisgICAgICAgIGlmIChMSUtFTFko
YmxvY2suaXNNYXJrZWQoY2VsbCwgZGVwZW5kZW5jeSkpKSB7CisgICAgICAgICAgICBpZiAoTElL
RUxZKCFtX2hlYXBTbmFwc2hvdEJ1aWxkZXIpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBhcHBlbmRIaWRkZW5TbG93KGNlbGwsIGRlcGVuZGVu
Y3kpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmll
cmVkKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBh
cHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRIaWRkZW4odmFsdWUuYXNDZWxsKCkpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihKU0NlbGwqIGNl
bGwpCit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIGluIGEgdmVyeSBzcGVjaWZp
YyB3YXkgdG8gZW5zdXJlIHRoYXQgaXQgZ2V0cyBpbmxpbmVkCisgICAgLy8gcHJvcGVybHkuIElu
IHBhcnRpY3VsYXIsIGl0IGFwcGVhcnMgdGhhdCB1c2luZyB0ZW1wbGF0ZXMgaGVyZSBicmVha3Mg
QUxXQVlTX0lOTElORS4KKyAgICAKKyAgICBpZiAoIWNlbGwpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7CisgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlz
TGFyZ2VBbGxvY2F0aW9uKCkpKSB7CisgICAgICAgIGRlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5j
eSgpOworICAgICAgICBpZiAoTElLRUxZKGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlzTWFya2Vk
KCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hcmtlZEJs
b2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7CisgICAgICAgIGRlcGVuZGVuY3kgPSBi
bG9jay5hYm91dFRvTWFyayhtX21hcmtpbmdWZXJzaW9uKTsKKyAgICAgICAgaWYgKExJS0VMWShi
bG9jay5pc01hcmtlZChjZWxsLCBkZXBlbmRlbmN5KSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGFwcGVuZEhpZGRlblNsb3coY2VsbCwgZGVwZW5kZW5jeSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNv
bnN0IFdlYWs8VD4mIHdlYWspCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQogewogICAgIGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0
KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQ+JiBzbG90KQorQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxUPiYgc2xvdCkK
IHsKICAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxUPiYgc2xvdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VD4mIHNsb3QpCiB7CiAgICAgYXBw
ZW5kSGlkZGVuKHNsb3QuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4K
LWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9y
IGVuZCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJl
Z2luLCBJdGVyYXRvciBlbmQpCiB7CiAgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVu
ZDsgKytpdCkKICAgICAgICAgYXBwZW5kKCppdCk7CiB9CiAKLWlubGluZSB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmll
cnMsIHNpemVfdCBjb3VudCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
VmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3Qg
Y291bnQpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAg
ICBhcHBlbmQoYmFycmllcnNbaV0pOwogfQogCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJz
LCBzaXplX3QgY291bnQpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZh
bHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6
ZV90IGNvdW50KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKICAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24g
MjEzNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIlNsb3RWaXNp
dG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDYg
KzM4Miw3IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQKICAgICBz
dHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgIGxhc3RPZmZzZXQg
PSBzdHJ1Y3R1cmUtPmxhc3RPZmZzZXQoKTsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
ID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBEZXBlbmRlbmN5IGluZGV4aW5nVHlw
ZURlcGVuZGVuY3kgPSBkZXBlbmRlbmN5KGluZGV4aW5nVHlwZSk7CiAgICAgTG9ja2VyPEpTQ2Vs
bD4gbG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeSk7CiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUp
IHsKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgpAQCAtMzk1LDE0ICsz
OTYsMTMgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsK
LSAgICBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKKyAgICBidXR0ZXJmbHkgPSBjb25z
dW1lKHRoaXMsIGluZGV4aW5nVHlwZURlcGVuZGVuY3kpLT5idXR0ZXJmbHkoKTsKKyAgICBEZXBl
bmRlbmN5IGJ1dHRlcmZseURlcGVuZGVuY3kgPSBkZXBlbmRlbmN5KGJ1dHRlcmZseSk7CiAgICAg
aWYgKCFidXR0ZXJmbHkpCiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgV1RGOjpsb2Fk
TG9hZEZlbmNlKCk7Ci0gICAgaWYgKHRoaXMtPnN0cnVjdHVyZUlEKCkgIT0gc3RydWN0dXJlSUQp
CisgICAgaWYgKGNvbnN1bWUodGhpcywgYnV0dGVyZmx5RGVwZW5kZW5jeSktPnN0cnVjdHVyZUlE
KCkgIT0gc3RydWN0dXJlSUQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChzdHJ1
Y3R1cmUtPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KQorICAgIGlmIChjb25zdW1lKHN0cnVj
dHVyZSwgYnV0dGVyZmx5RGVwZW5kZW5jeSktPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRP
dXRPZkxpbmVQcm9wZXJ0aWVzKHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlLCBsYXN0T2Zm
c2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2
aXNpb24gMjEzNTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNjY0LDcgKzY2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZs
eS5nZXQoKTsgfQogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJm
bHkuZ2V0KCk7IH0KLSAgICAgICAgCisgICAgCiAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0
T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0
eVN0b3JhZ2UoKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKSW5kZXg6IFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMTM1NjMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDY2IEBACisyMDE3LTAzLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgV1RGIHNob3VsZCBtYWtlIGl0IHN1cGVyIGVhc3kgdG8gZG8gQVJNIGNv
bmN1cnJlbmN5IHRyaWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5MzAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgQXRvbWljPD46OmxvYWRMaW5rIGFuZCBBdG9taWM8
Pjo6c3RvcmVDb25kLCBhdmFpbGFibGUgb25seSB3aGVuIEhBVkUoTExfU0MpLgorICAgICAgICAK
KyAgICAgICAgSXQgYWJzdHJhY3RzIGxvYWRMaW5rL3N0b3JlQ29uZCBiZWhpbmQgcHJlcGFyZS9h
dHRlbXB0LiBZb3UgY2FuIHdyaXRlIHByZXBhcmUvYXR0ZW1wdAorICAgICAgICBsb29wcyB3aGVu
ZXZlciB5b3VyIGxvb3AgZml0cyBpbnRvIHRoZSBsZWFzdCBjb21tb24gZGVub21pbmF0b3Igb2Yg
TEwvU0MgYW5kIENBUy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbW9kaWZpZXMgQXRvbWljPD46
OnRyYW5zYWN0aW9uIHRvIHVzZSBwcmVwYXJlL2F0dGVtcHQuIFNvLCBpZiB5b3Ugd3JpdGUgeW91
ciBsb29wCisgICAgICAgIHVzaW5nIEF0b21pYzw+Ojp0cmFuc2FjdGlvbiwgdGhlbiB5b3UgZ2V0
IExML1NDIGZvciBmcmVlLgorCisgICAgICAgIERlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0cmFu
c2FjdGlvbiB5b3UgYXJlIGRvaW5nLCB5b3UgbWF5IG5vdCB3YW50IHRvIHBlcmZvcm0gYW4gTEwK
KyAgICAgICAgdW50aWwgeW91IGhhdmUgYSBjaGFuY2UgdG8ganVzdCBsb2FkIHRoZSBjdXJyZW50
IHZhbHVlLiBBdG9taWM8Pjo6dHJhbnNhY3Rpb24oKSBhc3N1bWVzCisgICAgICAgIHRoYXQgeW91
IGRvIG5vdCBjYXJlIHRvIGhhdmUgYW55IG9yZGVyaW5nIGd1YXJhbnRlZXMgaW4gdGhhdCBjYXNl
LiBJZiB5b3UgdGhpbmsgdGhhdAorICAgICAgICB0aGUgdHJhbnNhY3Rpb24gaGFzIGEgZ29vZCBj
aGFuY2Ugb2YgYWJvcnRpbmcgdGhpcyB3YXksIHlvdSB3YW50CisgICAgICAgIEF0b21pYzw+Ojp0
cmFuc2FjdGlvbigpIHRvIGZpcnN0IGRvIGEgcGxhaW4gbG9hZC4gQnV0IGlmIHlvdSBkb24ndCB0
aGluayB0aGF0IHN1Y2ggYW4KKyAgICAgICAgYWJvcnQgaXMgbGlrZWx5LCB0aGVuIHlvdSB3YW50
IHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBMTC4gVGhlIEFQSSBzdXBwb3J0cyB0aGlzIGNvbmNlcHQK
KyAgICAgICAgdmlhIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kLgorICAgICAgICAKKyAgICAg
ICAgQWRkaXRpb25hbGx5LCB0aGlzIHJlZG9lcyB0aGUgZGVwZW5kL2NvbnN1bWUgQVBJIHRvIGJl
IGRlYWQgc2ltcGxlLiBEZXBlbmRlbmN5IGlzCisgICAgICAgIHVuc2lnbmVkLiBZb3UgZ2V0IGEg
ZGVwZW5kZW5jeSBvbiBhIGxvYWRlZCB2YWx1ZSBieSBqdXN0IHNheWluZworICAgICAgICBkZXBl
bmRlbmN5KGxvYWRlZFZhbHVlKS4gWW91IGNvbnN1bWUgdGhlIGRlcGVuZGVuY3kgYnkgdXNpbmcg
aXQgYXMgYSBib251cyBpbmRleCB0bworICAgICAgICBzb21lIHBvaW50ZXIgZGVyZWZlcmVuY2Uu
IFRoaXMgaXMgbWFkZSBlYXN5IHdpdGggdGhlIGNvbnN1bWU8VCo+KHB0ciwgZGVwZW5kZW5jeSkK
KyAgICAgICAgaGVscGVyLiBJbiB0aG9zZSBjYXNlcyB3aGVyZSB5b3Ugd2FudCB0byBwYXNzIGFy
b3VuZCBib3RoIGEgY29tcHV0ZWQgdmFsdWUgYW5kIGEKKyAgICAgICAgZGVwZW5kZW5jeSwgdGhl
cmUncyBEZXBlbmRlbmN5V2l0aDxUPi4gQnV0IHlvdSB3b24ndCBuZWVkIGl0IGluIG1vc3QgY2Fz
ZXMuIFRoZSBsb2FkZWQKKyAgICAgICAgdmFsdWUgb3IgYW55IHZhbHVlIGNvbXB1dGVkIGZyb20g
dGhlIGxvYWRlZCB2YWx1ZSBpcyBhIGZpbmUgaW5wdXQgdG8gZGVwZW5kZW5jeSgpIQorICAgICAg
ICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgdXBkYXRlcyBhIGJ1bmNoIG9mIGhvdCBwYXRocyB0byB1
c2UgdGhlIG5ldyBBUElzLiBVc2luZyB0cmFuc2FjdGlvbigpIGdpdmVzCisgICAgICAgIHVzIG9w
dGltYWwgTEwvU0MgbG9vcHMgZm9yIG9iamVjdCBtYXJraW5nIGFuZCBsb2NrIGFjcXVpc2l0aW9u
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyB1cGRhdGVzIGEgYnVuY2ggb2Yg
aG90IHBhdGhzIHRvIHVzZSBkZXBlbmRlbmN5KCkvY29uc3VtZSgpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBhIHNpZ25pZmljYW50IE9jdGFuZS9zcGxheSBzcGVlZC11cCBvbiBBUk0uCisK
KyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjpoYXNGZW5jZSk6CisgICAg
ICAgIChXVEY6OkF0b21pYzo6cHJlcGFyZSk6CisgICAgICAgIChXVEY6OkF0b21pYzo6YXR0ZW1w
dCk6CisgICAgICAgIChXVEY6OkF0b21pYzo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV1RGOjpB
dG9taWM6OnRyYW5zYWN0aW9uUmVsYXhlZCk6CisgICAgICAgIChXVEY6Om51bGxEZXBlbmRlbmN5
KToKKyAgICAgICAgKFdURjo6ZGVwZW5kZW5jeSk6CisgICAgICAgIChXVEY6OkRlcGVuZGVuY3lX
aXRoOjpEZXBlbmRlbmN5V2l0aCk6CisgICAgICAgIChXVEY6OmRlcGVuZGVuY3lXaXRoKToKKyAg
ICAgICAgKFdURjo6Y29uc3VtZSk6CisgICAgICAgIChXVEY6OkF0b21pYzo6dHJ5VHJhbnNhY3Rp
b25SZWxheGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6QXRvbWljOjp0cnlUcmFuc2FjdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Onplcm9XaXRoQ29uc3VtZURlcGVuZGVuY3kpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpjb25zdW1lTG9hZCk6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmdldCk6CisgICAgICAgIChX
VEY6OldvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRTZXQpOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46OmNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIpOgorICAgICAgICAqIHd0Zi9Mb2NrQWxnb3Jp
dGhtLmg6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2tGYXN0KToKKyAgICAgICAg
KFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFzdCk6CisgICAgICAgIChXVEY6OkxvY2tBbGdv
cml0aG06OnVubG9ja1Nsb3cpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDE3LTAz
LTA2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBS
ZXBvcnQgZG9tYWlucyBjcmFzaGluZyB1bmRlciBtZW1vcnkgcHJlc3N1cmUgdmlhIGVuaGFuY2Vk
IHByaXZhY3kgbG9nZ2luZy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIxMzUyOSkKKysrIFNv
dXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCwgMjAxMCwgMjAxMi0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5
Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MCw2ICs0
MCwxNiBAQCBleHRlcm4gIkMiIHZvaWQgX1JlYWRXcml0ZUJhcnJpZXIodm9pZCk7CiAKIG5hbWVz
cGFjZSBXVEYgewogCitBTFdBWVNfSU5MSU5FIGJvb2wgaGFzRmVuY2Uoc3RkOjptZW1vcnlfb3Jk
ZXIgb3JkZXIpCit7CisgICAgcmV0dXJuIG9yZGVyICE9IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4
ZWQ7Cit9CisKK2VudW0gY2xhc3MgVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2QgeworICAgIFVu
bGlrZWx5LAorICAgIExpa2VseQorfTsKKyAgICAKIC8vIEF0b21pYyB3cmFwcyBhcm91bmQgc3Rk
OjphdG9taWMgd2l0aCB0aGUgc29sZSBwdXJwb3NlIG9mIG1ha2luZyB0aGUgY29tcGFyZV9leGNo
YW5nZQogLy8gb3BlcmF0aW9ucyBub3QgYWx0ZXIgdGhlIGV4cGVjdGVkIHZhbHVlLiBUaGlzIGlz
IG1vcmUgaW4gbGluZSB3aXRoIGhvdyB3ZSB0eXBpY2FsbHkKIC8vIHVzZSBDQVMgaW4gb3VyIGNv
ZGUuCkBAIC0xMDcsMzkgKzExNywxMzAgQEAgc3RydWN0IEF0b21pYyB7CiAgICAgCiAgICAgQUxX
QVlTX0lOTElORSBUIGV4Y2hhbmdlKFQgbmV3VmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVy
ID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgeyByZXR1cm4gdmFsdWUuZXhjaGFuZ2UobmV3
VmFsdWUsIG9yZGVyKTsgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAg
QUxXQVlTX0lOTElORSBib29sIHRyeVRyYW5zYWN0aW9uUmVsYXhlZChjb25zdCBGdW5jJiBmdW5j
KQorI2lmIEhBVkUoTExfU0MpCisgICAgQUxXQVlTX0lOTElORSBUIGxvYWRMaW5rKHN0ZDo6bWVt
b3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgQUxXQVlT
X0lOTElORSBib29sIHN0b3JlQ29uZChUIHZhbHVlLCAgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIg
PSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKKyNlbmRpZiAvLyBIQVZFKExMX1NDKQorCisg
ICAgLy8gUHJvcHMgdG8gCisgICAgQUxXQVlTX0lOTElORSBUIHByZXBhcmUoc3RkOjptZW1vcnlf
b3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KQogICAgIHsKLSAgICAgICAg
VCBvbGRWYWx1ZSA9IGxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICAgIFQg
bmV3VmFsdWUgPSBvbGRWYWx1ZTsKLSAgICAgICAgZnVuYyhuZXdWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBjb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZChvbGRWYWx1ZSwgbmV3VmFsdWUpOworI2lm
IEhBVkUoTExfU0MpCisgICAgICAgIHJldHVybiBsb2FkTGluayhvcmRlcik7CisjZWxzZQorICAg
ICAgICBVTlVTRURfUEFSQU0ob3JkZXIpOworICAgICAgICByZXR1cm4gbG9hZChzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxheGVkKTsKKyNlbmRpZgogICAgIH0KKyAgICAKKyNpZiBIQVZFKExMX1NDKQor
ICAgIHN0YXRpYyBjb25zdCBib29sIHByZXBhcmVJc0Zhc3QgPSBmYWxzZTsKKyNlbHNlCisgICAg
c3RhdGljIGNvbnN0IGJvb2wgcHJlcGFyZUlzRmFzdCA9IHRydWU7CisjZW5kaWYKIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9u
UmVsYXhlZChjb25zdCBGdW5jJiBmdW5jKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBhdHRlbXB0
KFQgb2xkVmFsdWUsIFQgbmV3VmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjpt
ZW1vcnlfb3JkZXJfc2VxX2NzdCkKICAgICB7Ci0gICAgICAgIHdoaWxlICghdHJ5VHJhbnNhdGlv
blJlbGF4ZWQoZnVuYykpIHsgfQorI2lmIEhBVkUoTExfU0MpCisgICAgICAgIFVOVVNFRF9QQVJB
TShvbGRWYWx1ZSk7CisgICAgICAgIHJldHVybiBzdG9yZUNvbmQobmV3VmFsdWUsIG9yZGVyKTsK
KyNlbHNlCisgICAgICAgIHJldHVybiBjb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdW
YWx1ZSwgb3JkZXIpOworI2VuZGlmCiAgICAgfQotCisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb24oY29uc3QgRnVu
YyYgZnVuYykKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJhbnNhY3Rpb24oY29uc3QgRnVuYyYg
ZnVuYywgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0
LCBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZCBhYm9ydExpa2VsaWhvb2QgPSBUcmFuc2FjdGlv
bkFib3J0TGlrZWxpaG9vZDo6TGlrZWx5KQogICAgIHsKLSAgICAgICAgVCBvbGRWYWx1ZSA9IGxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICAgIFQgbmV3VmFsdWUgPSBvbGRW
YWx1ZTsKLSAgICAgICAgZnVuYyhuZXdWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBjb21wYXJlRXhj
aGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgICAgIC8vIElmIHByZXBhcmluZyBp
cyBub3QgZmFzdCB0aGVuIHdlIHdhbnQgdG8gc2tpcCB0aGUgbG9vcCB3aGVuIGZ1bmMgd291bGQg
ZmFpbC4KKyAgICAgICAgaWYgKCFwcmVwYXJlSXNGYXN0ICYmIGFib3J0TGlrZWxpaG9vZCA9PSBU
cmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZDo6TGlrZWx5KSB7CisgICAgICAgICAgICBUIG9sZFZh
bHVlID0gbG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgICAgIC8vIE5v
dGU6IG1hbnkgZnVuY3Mgd2lsbCBjb25zdGFudC1mb2xkIHRvIHRydWUsIHdoaWNoIHdpbGwga2ls
bCBhbGwgb2YgdGhpcyBjb2RlLgorICAgICAgICAgICAgaWYgKCFmdW5jKG9sZFZhbHVlKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgVCBvbGRWYWx1ZSA9IHByZXBhcmUob3JkZXIpOworICAgICAgICAgICAg
VCBuZXdWYWx1ZSA9IG9sZFZhbHVlOworICAgICAgICAgICAgaWYgKCFmdW5jKG5ld1ZhbHVlKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoYXR0ZW1wdChv
bGRWYWx1ZSwgbmV3VmFsdWUsIG9yZGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgQUxX
QVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9uKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgQUxXQVlT
X0lOTElORSBib29sIHRyYW5zYWN0aW9uUmVsYXhlZChjb25zdCBGdW5jJiBmdW5jLCBUcmFuc2Fj
dGlvbkFib3J0TGlrZWxpaG9vZCBhYm9ydExpa2VsaWhvb2QgPSBUcmFuc2FjdGlvbkFib3J0TGlr
ZWxpaG9vZDo6TGlrZWx5KQogICAgIHsKLSAgICAgICAgd2hpbGUgKCF0cnlUcmFuc2FjdGlvbihm
dW5jKSkgeyB9CisgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbihmdW5jLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxheGVkLCBhYm9ydExpa2VsaWhvb2QpOwogICAgIH0KIAogICAgIHN0ZDo6YXRvbWlj
PFQ+IHZhbHVlOwogfTsKIAorI2lmIENQVShBUk02NCkKKyNkZWZpbmUgREVGSU5FX0xMX1NDKHdp
ZHRoLCBtb2RpZmllciwgc3VmZml4KSAgIFwKKyAgICB0ZW1wbGF0ZTw+IFwKKyAgICBBTFdBWVNf
SU5MSU5FIHVpbnQgIyMgd2lkdGggIyMgX3QgQXRvbWljPHVpbnQgIyMgd2lkdGggIyNfdD46Omxv
YWRMaW5rKHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyKSBcCisgICAgeyBcCisgICAgICAgIGludCAj
IyB3aWR0aCAjIyBfdCByZXN1bHQ7IFwKKyAgICAgICAgaWYgKGhhc0ZlbmNlKG9yZGVyKSkgeyBc
CisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCBcCisgICAgICAgICAgICAgICAgImxkYXhyIiBz
dWZmaXggIiAlIiBtb2RpZmllciAiMCwgWyUxXSIgXAorICAgICAgICAgICAgICAgIDogIj1yIihy
ZXN1bHQpIFwKKyAgICAgICAgICAgICAgICA6ICJyIih0aGlzKSBcCisgICAgICAgICAgICAgICAg
OiAibWVtb3J5Iik7IFwKKyAgICAgICAgfSBlbHNlIHsgXAorICAgICAgICAgICAgYXNtICggXAor
ICAgICAgICAgICAgICAgICJsZHhyIiBzdWZmaXggIiAlIiBtb2RpZmllciAiMCwgWyUxXSIgXAor
ICAgICAgICAgICAgICAgIDogIj1yIihyZXN1bHQpIFwKKyAgICAgICAgICAgICAgICA6ICJyIih0
aGlzKSBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7IFwKKyAgICAgICAgfSBcCisgICAg
ICAgIHJldHVybiByZXN1bHQ7IFwKKyAgICB9IFwKKyAgICBcCisgICAgdGVtcGxhdGU8PiBcCisg
ICAgQUxXQVlTX0lOTElORSBib29sIEF0b21pYzx1aW50ICMjIHdpZHRoICMjIF90Pjo6c3RvcmVD
b25kKHVpbnQgIyMgd2lkdGggIyMgX3QgdmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyKSBc
CisgICAgeyBcCisgICAgICAgIGJvb2wgcmVzdWx0OyBcCisgICAgICAgIGlmIChoYXNGZW5jZShv
cmRlcikpIHsgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICggXAorICAgICAgICAgICAgICAg
ICJzdGx4ciIgc3VmZml4ICIgJXcwLCAlIiBtb2RpZmllciAiMSwgWyUyXSIgXAorICAgICAgICAg
ICAgICAgIDogIj0mciIocmVzdWx0KSBcCisgICAgICAgICAgICAgICAgOiAiciIodmFsdWUpLCAi
ciIodGhpcykgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyBcCisgICAgICAgIH0gZWxz
ZSB7IFwKKyAgICAgICAgICAgIGFzbSAoIFwKKyAgICAgICAgICAgICAgICAic3R4ciIgc3VmZml4
ICIgJXcwLCAlIiBtb2RpZmllciAiMSwgWyUyXSIgXAorICAgICAgICAgICAgICAgIDogIj0mciIo
cmVzdWx0KSBcCisgICAgICAgICAgICAgICAgOiAiciIodmFsdWUpLCAiciIodGhpcykgXAorICAg
ICAgICAgICAgICAgIDogIm1lbW9yeSIpOyBcCisgICAgICAgIH0gXAorICAgICAgICByZXR1cm4g
IXJlc3VsdDsgXAorICAgIH0gXAorICAgIFwKKyAgICB0ZW1wbGF0ZTw+IFwKKyAgICBBTFdBWVNf
SU5MSU5FIGludCAjIyB3aWR0aCAjIyBfdCBBdG9taWM8aW50ICMjIHdpZHRoICMjIF90Pjo6bG9h
ZExpbmsoc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIpIFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxBdG9taWM8dWludCAjIyB3aWR0aCAjIyBfdD4qPih0aGlzKS0+bG9hZExp
bmsob3JkZXIpOyBcCisgICAgfSBcCisgICAgXAorICAgIHRlbXBsYXRlPD4gXAorICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBBdG9taWM8aW50ICMjIHdpZHRoICMjIF90Pjo6c3RvcmVDb25kKGludCAj
IyB3aWR0aCAjIyBfdCB2YWx1ZSwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIpIFwKKyAgICB7IFwK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBdG9taWM8dWludCAjIyB3aWR0aCAjIyBfdD4q
Pih0aGlzKS0+c3RvcmVDb25kKHZhbHVlLCBvcmRlcik7IFwKKyAgICB9CisKK0RFRklORV9MTF9T
Qyg4LCAidyIsICJiIikKK0RFRklORV9MTF9TQygxNiwgInciLCAiaCIpCitERUZJTkVfTExfU0Mo
MzIsICJ3IiwgIiIpCitERUZJTkVfTExfU0MoNjQsICIiLCAiIikKK0RFRklORV9MTF9TQyhwdHIs
ICIiLCAiIikKKworI3VuZGVmIERFRklORV9MTF9TQworI2VuZGlmIC8vIENQVShBUk02NCkKKwog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUIGF0b21pY0xvYWQoVCogbG9jYXRpb24sIHN0
ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkKIHsKQEAg
LTMwOCwxMiArNDA5LDE3IEBAIGlubGluZSB2b2lkIGNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCkg
eyAKIAogI2VuZGlmCiAKLXR5cGVkZWYgc2l6ZV90IENvbnN1bWVEZXBlbmRlbmN5OwordHlwZWRl
ZiB1bnNpZ25lZCBEZXBlbmRlbmN5OworCitBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgbnVsbERl
cGVuZGVuY3koKQoreworICAgIHJldHVybiAwOworfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBlKiA9IG51bGxwdHI+
Ci1BTFdBWVNfSU5MSU5FIENvbnN1bWVEZXBlbmRlbmN5IHplcm9XaXRoQ29uc3VtZURlcGVuZGVu
Y3koVCB2YWx1ZSkKK0FMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUp
CiB7Ci0gICAgdWludDY0X3QgZGVwZW5kZW5jeTsKKyAgICB1bnNpZ25lZCBkZXBlbmRlbmN5Owog
ICAgIHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKICNpZiBD
UFUoQVJNNjQpCiAgICAgLy8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5s
aW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgpAQCAtMzI1LDMwICs0MzEsMjYgQEAgQUxX
QVlTX0lOTElORSBDb25zdW1lRGVwZW5kZW5jeSB6ZXJvV2l0aAogICAgIC8vIG9yZGVyaW5nLiBU
aGlzIGZvcmNlcyB3ZWFrIG1lbW9yeSBvcmRlciBDUFVzIHRvIG9ic2VydmUgYGxvY2F0aW9uYCBh
bmQKICAgICAvLyBkZXBlbmRlbnQgbG9hZHMgaW4gdGhlaXIgc3RvcmUgb3JkZXIgd2l0aG91dCB0
aGUgcmVhZGVyIHVzaW5nIGEgYmFycmllcgogICAgIC8vIG9yIGFuIGFjcXVpcmUgbG9hZC4KLSAg
ICBhc20gdm9sYXRpbGUoImVvciAleFtkZXBlbmRlbmN5XSwgJXhbaW5dLCAleFtpbl0iCi0gICAg
ICAgICAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgICAg
ICAgICAgOiBbaW5dICJyIihjb3B5KQotICAgICAgICAgICAgICAgICAvLyBMaWUgYWJvdXQgdG91
Y2hpbmcgbWVtb3J5LiBOb3Qgc3RyaWN0bHkgbmVlZGVkLCBidXQgaXMKLSAgICAgICAgICAgICAg
ICAgLy8gbGlrZWx5IHRvIGF2b2lkIHVud2FudGVkIGxvYWQvc3RvcmUgbW90aW9uLgotICAgICAg
ICAgICAgICAgICA6ICJtZW1vcnkiKTsKKyAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdb
aW5dLCAld1tpbl0iCisgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKKyAg
ICAgICAgOiBbaW5dICJyIihjb3B5KSk7CiAjZWxpZiBDUFUoQVJNKQotICAgIGFzbSB2b2xhdGls
ZSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgICAgICAgICAgOiBb
ZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICAgICAgICAgICA6IFtpbl0gInIi
KGNvcHkpCi0gICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOworICAgIGFzbSgiZW9yICVbZGVw
ZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKKyAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBl
bmRlbmN5KQorICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8gZGVw
ZW5kZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2FkRmVu
Y2UoKTsKICAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICAodm9pZCljb3B5OworICAgIFVOVVNFRF9Q
QVJBTShjb3B5KTsKICNlbmRpZgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb25zdW1lRGVwZW5k
ZW5jeT4oZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIGRlcGVuZGVuY3k7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gND46OnR5
cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgQ29uc3VtZURlcGVuZGVuY3kgemVyb1dpdGhD
b25zdW1lRGVwZW5kZW5jeShUIHZhbHVlKQorQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3koVCB2YWx1ZSkKIHsKLSAgICB1aW50MzJfdCBkZXBlbmRlbmN5OworICAgIHVuc2lnbmVk
IGRlcGVuZGVuY3k7CiAgICAgdWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
dmFsdWUpOwogI2lmIENQVShBUk02NCkKICAgICBhc20gdm9sYXRpbGUoImVvciAld1tkZXBlbmRl
bmN5XSwgJXdbaW5dLCAld1tpbl0iCkBAIC0zNjMsNjYgKzQ2NSw2OCBAQCBBTFdBWVNfSU5MSU5F
IENvbnN1bWVEZXBlbmRlbmN5IHplcm9XaXRoCiAjZWxzZQogICAgIGxvYWRMb2FkRmVuY2UoKTsK
ICAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICAodm9pZCljb3B5OworICAgIFVOVVNFRF9QQVJBTShj
b3B5KTsKICNlbmRpZgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb25zdW1lRGVwZW5kZW5jeT4o
ZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIGRlcGVuZGVuY3k7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0g
bnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgQ29uc3VtZURlcGVuZGVuY3kgemVyb1dpdGhDb25zdW1l
RGVwZW5kZW5jeShUIHZhbHVlKQorQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3ko
VCB2YWx1ZSkKIHsKLSAgICB1aW50MTZfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQxNl90Pih2
YWx1ZSk7Ci0gICAgcmV0dXJuIHplcm9XaXRoQ29uc3VtZURlcGVuZGVuY3koc3RhdGljX2Nhc3Q8
c2l6ZV90Pihjb3B5KSk7CisgICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzaXplb2YoVCkgPT0gMT46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUg
Q29uc3VtZURlcGVuZGVuY3kgemVyb1dpdGhDb25zdW1lRGVwZW5kZW5jeShUIHZhbHVlKQorQUxX
QVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKIHsKLSAgICB1aW50OF90
IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdD4odmFsdWUpOwotICAgIHJldHVybiB6ZXJvV2l0
aENvbnN1bWVEZXBlbmRlbmN5KHN0YXRpY19jYXN0PHNpemVfdD4oY29weSkpOworICAgIHJldHVy
biBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwogfQogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBDb25zdW1lZCB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
c3RydWN0IERlcGVuZGVuY3lXaXRoIHsKK3B1YmxpYzoKKyAgICBEZXBlbmRlbmN5V2l0aCgpCisg
ICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgpKQorICAgICAgICAsIHZhbHVlKCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5k
ZW5jeSwgY29uc3QgVCYgdmFsdWUpCisgICAgICAgIDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQor
ICAgICAgICAsIHZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5OwogICAgIFQgdmFsdWU7Ci0gICAgQ29uc3VtZURlcGVuZGVuY3kgZGVwZW5k
ZW5jeTsKIH07CisgICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIERlcGVuZGVuY3lX
aXRoPFQ+IGRlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFs
dWUpCit7CisgICAgcmV0dXJuIERlcGVuZGVuY3lXaXRoPFQ+KGRlcGVuZGVuY3ksIHZhbHVlKTsK
K30KIAotLy8gQ29uc3VtZSBsb2FkLCByZXR1cm5pbmcgdGhlIGxvYWRlZCBgdmFsdWVgIGF0IGBs
b2NhdGlvbmAgYW5kIGEgZGVwZW5kZW50LXplcm8KLS8vIHdoaWNoIGNyZWF0ZXMgYW4gYWRkcmVz
cyBkZXBlbmRlbmN5IGZyb20gdGhlIGBsb2NhdGlvbmAuCi0vLwotLy8gVXNhZ2Ugbm90ZXM6Ci0v
LwotLy8gICogUmVnYXJkaW5nIGNvbnRyb2wgZGVwZW5kZW5jaWVzOiBtZXJlbHkgYnJhbmNoaW5n
IGJhc2VkIG9uIGB2YWx1ZWAgb3IKLS8vICAgIGBkZXBlbmRlbmN5YCBpc24ndCBzdWZmaWNpZW50
IHRvIGltcG9zZSBhIGRlcGVuZGVuY3kgb3JkZXJpbmc6IHlvdSBtdXN0Ci0vLyAgICB1c2UgYGRl
cGVuZGVuY3lgIGluIHRoZSBhZGRyZXNzIGNvbXB1dGF0aW9uIG9mIHN1YnNlcXVlbnQgbG9hZHMg
d2hpY2gKLS8vICAgIHNob3VsZCBvYnNlcnZlIHRoZSBzdG9yZSBvcmRlciB3LnIudC4gYGxvY2F0
aW9uYC4KLS8vICogUmVnYXJkaW5nIG1lbW9yeSBvcmRlcmluZzogY29uc3VtZSBsb2FkIG9yZGVy
cyB0aGUgYGxvY2F0aW9uYCBsb2FkIHdpdGgKLS8vICAgc3VzZXF1ZW50IGRlcGVuZGVudCBsb2Fk
cyAqb25seSouIEl0IHNheXMgbm90aGluZyBhYm91dCBvcmRlcmluZyBvZiBvdGhlcgotLy8gICBs
b2FkcyEKLS8vCi0vLyBDYXZlYXQgZW1wdG9yLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1BTFdB
WVNfSU5MSU5FIGF1dG8gY29uc3VtZUxvYWQoY29uc3QgVCogbG9jYXRpb24pCi17Ci0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjxUPjo6dHlwZSBSZXR1cm5lZDsKLSAgICBDb25z
dW1lZDxSZXR1cm5lZD4gcmV0IHsgfTsKLSAgICAvLyBGb3JjZSB0aGUgcmVhZCBvZiBgbG9jYXRp
b25gIHRvIG9jY3VyIGV4YWN0bHkgb25jZSBhbmQgd2l0aG91dCBmdXNpbmcgb3IKLSAgICAvLyBm
b3J3YXJkaW5nIHVzaW5nIHZvbGF0aWxlLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBj
b21waWxlciBjb3VsZAotICAgIC8vIG90aGVyd2lzZSByZW1hdGVyaWFsaXplIG9yIGZpbmQgZXF1
aXZhbGVudCBsb2Fkcywgb3Igc2ltcGx5IGZvcndhcmQgZnJvbQotICAgIC8vIGEgcHJldmlvdXMg
b25lLCBhbmQgbG9zZSB0aGUgZGVwZW5kZW5jeSB3ZSdyZSB0cnlpbmcgc28gaGFyZCB0bwotICAg
IC8vIGNyZWF0ZS4gUHJldmVudCB0ZWFyaW5nIGJ5IHVzaW5nIGFuIGF0b21pYywgYnV0IGxldCBp
dCBtb3ZlIGFyb3VuZCBieQotICAgIC8vIHVzaW5nIHJlbGF4ZWQuIFdlIGhhdmUgYXQgbGVhc3Qg
YSBtZW1vcnkgZmVuY2UgYWZ0ZXIgdGhpcyB3aGljaCBwcmV2ZW50cwotICAgIC8vIHRoZSBsb2Fk
IGZyb20gbW92aW5nIHRvbyBtdWNoLgotICAgIHJldC52YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3Qgdm9sYXRpbGUgc3RkOjphdG9taWM8UmV0dXJuZWQ+Kj4obG9jYXRpb24pLT5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgIHJldC5kZXBlbmRlbmN5ID0gemVyb1dpdGhD
b25zdW1lRGVwZW5kZW5jeShyZXQudmFsdWUpOwotICAgIHJldHVybiByZXQ7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIFQqIGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5KQoreworI2lmIENQVShBUk02NCkgfHwgQ1BVKEFSTSkKKyAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpICsgZGVwZW5kZW5jeSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShkZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gcG9pbnRlcjsK
KyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpBdG9taWM7Ci11
c2luZyBXVEY6OkNvbnN1bWVEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpjb25zdW1lTG9hZDsKK3Vz
aW5nIFdURjo6RGVwZW5kZW5jeTsKK3VzaW5nIFdURjo6RGVwZW5kZW5jeVdpdGg7Cit1c2luZyBX
VEY6OlRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOwordXNpbmcgV1RGOjpjb25zdW1lOwordXNp
bmcgV1RGOjpkZXBlbmRlbmN5OwordXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKK3VzaW5nIFdU
Rjo6bnVsbERlcGVuZGVuY3k7CiAKICNlbmRpZiAvLyBBdG9taWNzX2gKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCShy
ZXZpc2lvbiAyMTM1MjkpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTMgKzQwLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdG1hcFNpemU7
CiAgICAgfQogCi0gICAgYm9vbCBnZXQoc2l6ZV90KSBjb25zdDsKKyAgICBib29sIGdldChzaXpl
X3QsIERlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5jeSgpKSBjb25zdDsKICAgICB2b2lkIHNldChz
aXplX3QpOwogICAgIHZvaWQgc2V0KHNpemVfdCwgYm9vbCk7CiAgICAgYm9vbCB0ZXN0QW5kU2V0
KHNpemVfdCk7CiAgICAgYm9vbCB0ZXN0QW5kQ2xlYXIoc2l6ZV90KTsKLSAgICBib29sIGNvbmN1
cnJlbnRUZXN0QW5kU2V0KHNpemVfdCk7Ci0gICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZENsZWFy
KHNpemVfdCk7CisgICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZFNldChzaXplX3QsIERlcGVuZGVu
Y3kgPSBudWxsRGVwZW5kZW5jeSgpLCBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZCA9IFRyYW5z
YWN0aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpOworICAgIGJvb2wgY29uY3VycmVudFRlc3RB
bmRDbGVhcihzaXplX3QsIERlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5jeSgpLCBUcmFuc2FjdGlv
bkFib3J0TGlrZWxpaG9vZCA9IFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpOwog
ICAgIHNpemVfdCBuZXh0UG9zc2libHlVbnNldChzaXplX3QpIGNvbnN0OwogICAgIHZvaWQgY2xl
YXIoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7CkBAIC05MSw5ICs5MSw5IEBAIGlubGlu
ZSBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpCaXQKIH0KIAogdGVtcGxhdGU8c2l6ZV90
IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgotaW5saW5lIGJvb2wgQml0bWFwPGJpdG1h
cFNpemUsIFdvcmRUeXBlPjo6Z2V0KHNpemVfdCBuKSBjb25zdAoraW5saW5lIGJvb2wgQml0bWFw
PGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Z2V0KHNpemVfdCBuLCBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3kpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEhKGJpdHNbbiAvIHdvcmRTaXplXSAmIChvbmUgPDwg
KG4gJSB3b3JkU2l6ZSkpKTsKKyAgICByZXR1cm4gISEoYml0c1tuIC8gd29yZFNpemUgKyBkZXBl
bmRlbmN5XSAmIChvbmUgPDwgKG4gJSB3b3JkU2l6ZSkpKTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90
IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgpAQCAtMTMyLDMzICsxMzIsMzcgQEAgaW5s
aW5lIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPgogfQogCiB0ZW1wbGF0ZTxzaXpl
X3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Ci1pbmxpbmUgYm9vbCBCaXRtYXA8Yml0
bWFwU2l6ZSwgV29yZFR5cGU+Ojpjb25jdXJyZW50VGVzdEFuZFNldChzaXplX3QgbikKK0FMV0FZ
U19JTkxJTkUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpjb25jdXJyZW50VGVz
dEFuZFNldChzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBUcmFuc2FjdGlvbkFib3J0
TGlrZWxpaG9vZCBhYm9ydExpa2VsaWhvb2QpCiB7CiAgICAgV29yZFR5cGUgbWFzayA9IG9uZSA8
PCAobiAlIHdvcmRTaXplKTsKICAgICBzaXplX3QgaW5kZXggPSBuIC8gd29yZFNpemU7Ci0gICAg
V29yZFR5cGUqIHdvcmRQdHIgPSBiaXRzLmRhdGEoKSArIGluZGV4OwotICAgIFdvcmRUeXBlIG9s
ZFZhbHVlOwotICAgIGRvIHsKLSAgICAgICAgb2xkVmFsdWUgPSAqd29yZFB0cjsKLSAgICAgICAg
aWYgKG9sZFZhbHVlICYgbWFzaykKKyAgICBXb3JkVHlwZSogZGF0YSA9IGJpdHMuZGF0YSgpICsg
aW5kZXggKyBkZXBlbmRlbmN5OworICAgIHJldHVybiAhYml0d2lzZV9jYXN0PEF0b21pYzxXb3Jk
VHlwZT4qPihkYXRhKS0+dHJhbnNhY3Rpb25SZWxheGVkKAorICAgICAgICBbJl0gKFdvcmRUeXBl
JiB2YWx1ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICBpZiAodmFsdWUgJiBtYXNrKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFsdWUg
fD0gbWFzazsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gd2hpbGUgKCFhdG9taWND
b21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCh3b3JkUHRyLCBvbGRWYWx1ZSwgc3RhdGljX2Nhc3Q8
V29yZFR5cGU+KG9sZFZhbHVlIHwgbWFzaykpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0sCisgICAgICAgIGFib3J0TGlrZWxpaG9vZCk7CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRt
YXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KLWlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OmNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIoc2l6ZV90IG4pCitBTFdBWVNfSU5M
SU5FIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRD
bGVhcihzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBUcmFuc2FjdGlvbkFib3J0TGlr
ZWxpaG9vZCBhYm9ydExpa2VsaWhvb2QpCiB7CiAgICAgV29yZFR5cGUgbWFzayA9IG9uZSA8PCAo
biAlIHdvcmRTaXplKTsKICAgICBzaXplX3QgaW5kZXggPSBuIC8gd29yZFNpemU7Ci0gICAgV29y
ZFR5cGUqIHdvcmRQdHIgPSBiaXRzLmRhdGEoKSArIGluZGV4OwotICAgIFdvcmRUeXBlIG9sZFZh
bHVlOwotICAgIGRvIHsKLSAgICAgICAgb2xkVmFsdWUgPSAqd29yZFB0cjsKLSAgICAgICAgaWYg
KCEob2xkVmFsdWUgJiBtYXNrKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IHdo
aWxlICghYXRvbWljQ29tcGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQod29yZFB0ciwgb2xkVmFsdWUs
IHN0YXRpY19jYXN0PFdvcmRUeXBlPihvbGRWYWx1ZSAmIH5tYXNrKSkpOwotICAgIHJldHVybiB0
cnVlOworICAgIFdvcmRUeXBlKiBkYXRhID0gYml0cy5kYXRhKCkgKyBpbmRleCArIGRlcGVuZGVu
Y3k7CisgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8QXRvbWljPFdvcmRUeXBlPio+KGRhdGEpLT50
cmFuc2FjdGlvblJlbGF4ZWQoCisgICAgICAgIFsmXSAoV29yZFR5cGUmIHZhbHVlKSAtPiBib29s
IHsKKyAgICAgICAgICAgIGlmICghKHZhbHVlICYgbWFzaykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YWx1ZSAmPSB+bWFzazsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorICAgICAgICBhYm9ydExpa2VsaWhv
b2QpOwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCShyZXZpc2lvbiAyMTM1MjkpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEwICs1MCwxNSBA
QCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgbG9ja0Zhc3QoQXRvbWljPExvY2tUeXBl
PiYgbG9jaykKICAgICB7Ci0gICAgICAgIExvY2tUeXBlIG9sZFZhbHVlID0gbG9jay5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgICAgICBpZiAob2xkVmFsdWUgJiBpc0hlbGRC
aXQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBsb2NrLmNvbXBh
cmVFeGNoYW5nZVdlYWsob2xkVmFsdWUsIG9sZFZhbHVlIHwgaXNIZWxkQml0LCBzdGQ6Om1lbW9y
eV9vcmRlcl9hY3F1aXJlKTsKKyAgICAgICAgcmV0dXJuIGxvY2sudHJhbnNhY3Rpb24oCisgICAg
ICAgICAgICBbJl0gKExvY2tUeXBlJiB2YWx1ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
aWYgKHZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgdmFsdWUgfD0gaXNIZWxkQml0OworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHN0ZDo6bWVtb3J5X29yZGVy
X2FjcXVpcmUsCisgICAgICAgICAgICBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZDo6VW5saWtl
bHkpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgdm9pZCBsb2NrKEF0b21pYzxMb2NrVHlwZT4m
IGxvY2spCkBAIC04MCwxMCArODUsMTUgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBib29s
IHVubG9ja0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKICAgICB7Ci0gICAgICAgIExvY2tU
eXBlIG9sZFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAg
ICAgICBpZiAoKG9sZFZhbHVlICYgbWFzaykgIT0gaXNIZWxkQml0KQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZh
bHVlLCBvbGRWYWx1ZSAmIH5pc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwor
ICAgICAgICByZXR1cm4gbG9jay50cmFuc2FjdGlvbigKKyAgICAgICAgICAgIFsmXSAoTG9ja1R5
cGUmIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAoKHZhbHVlICYgbWFzaykg
IT0gaXNIZWxkQml0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgdmFsdWUgJj0gfmlzSGVsZEJpdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
LAorICAgICAgICAgICAgVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6OlVubGlrZWx5KTsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2sp
CkBAIC0yMDYsMTAgKzIxNiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGxvY2sudHJhbnNhY3Rpb24o
Ci0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKExvY2tUeXBlJiB2YWx1ZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdIChMb2NrVHlwZSYgdmFsdWUpIC0+IGJvb2wgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICY9IH5tYXNrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSB8PSBoYXNQYXJrZWRCaXQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEJhcmdpbmdPcHBvcnR1bml0eTsKICAgICAgICAgICAg
ICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMjEzNTI5KQorKysgU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDYgKzc1NywxMCBAQAogI2Rl
ZmluZSBFTkFCTEVfQ09OQ1VSUkVOVF9KUyAxCiAjZW5kaWYKIAorI2lmIENQVShBUk02NCkKKyNk
ZWZpbmUgSEFWRV9MTF9TQyAxCisjZW5kaWYgLy8gQ1BVKEFSTTY0KQorCiAvKiBUaGlzIGNvbnRy
b2xzIHdoZXRoZXIgQjMgaXMgYnVpbHQuIEIzIGlzIG5lZWRlZCBmb3IgRlRMIEpJVCBhbmQgV2Vi
QXNzZW1ibHkgKi8KICNpZiBFTkFCTEUoRlRMX0pJVCkgfHwgRU5BQkxFKFdFQkFTU0VNQkxZKQog
I2RlZmluZSBFTkFCTEVfQjNfSklUIDEK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303845</attachid>
            <date>2017-03-08 14:29:49 -0800</date>
            <delta_ts>2017-03-08 22:33:43 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50645</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE3LTAzLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBtYWtlIGl0IHN1cGVyIGVhc3kgdG8gZG8gQVJNIGNvbmN1cnJlbmN5IHRyaWNr
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MzAw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZXMgYSBidW5jaCBvZiBHQyBob3QgcGF0aHMgdG8gdXNlIG5ldyBjb25jdXJy
ZW5jeSBBUElzIHRoYXQgbGVhZCB0byBvcHRpbWFsCisgICAgICAgIGNvZGUgb24gYm90aCB4ODYg
KGZ1bGx5IGxldmVyYWdlIFRTTywgdHJhbnNhY3Rpb25zIGJlY29tZSBDQVMgbG9vcHMpIGFuZCBB
Uk0gKHVzZQorICAgICAgICBkZXBlbmRlbmN5IGNoYWlucyBmb3IgZmVuY2luZywgdHJhbnNhY3Rp
b25zIGJlY29tZSBMTC9TQyBsb29wcykuIFdoaWxlIGluc3BlY3RpbmcgdGhlCisgICAgICAgIG1h
Y2hpbmUgY29kZSwgSSBmb3VuZCBvdGhlciBvcHBvcnR1bml0aWVzIGZvciBpbXByb3ZlbWVudCwg
bGlrZSBpbmxpbmluZyB0aGUgImFtIEkKKyAgICAgICAgbWFya2VkIiBwYXJ0IG9mIHRoZSBtYXJr
aW5nIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6
OkhlYXA6OnNldEdDRGlkSklUKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkhlYXA6OnRlc3RBbmRTZXRNYXJrZWQpOgorICAgICAgICAqIGhlYXAvTGFyZ2VB
bGxvY2F0aW9uLmg6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlvbjo6aXNNYXJrZWQpOgor
ICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkQ29uY3VycmVudGx5KToKKyAg
ICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjphYm91dFRvTWFyayk6CisgICAgICAgIChKU0M6
OkxhcmdlQWxsb2NhdGlvbjo6dGVzdEFuZFNldE1hcmtlZCk6CisgICAgICAgICogaGVhcC9NYXJr
ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhE
ZXBlbmRlbmN5KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OnRlc3RBbmRTZXRNYXJrZWQpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kU2xvdyk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjphcHBlbmRIaWRkZW5TbG93KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlblNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtl
ZEFuZEFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVu
ZFVuYmFycmllcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVu
ZEhpZGRlbik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmRVbmJhcnJpZXJlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRI
aWRkZW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmRWYWx1ZXNIaWRkZW4pOgorICAgICAgICAqIHJ1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0
dGVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbCk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5oOgorCiAyMDE3LTAzLTA3ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAg
ICAgICBTb21lIHBsYXRmb3JtcyB3b24ndCBiZSBhYmxlIHRvIGNyZWF0ZSBhIEdQVURldmljZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMzU4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODUzLDkgKzE4NTMsMTAgQEAgdm9pZCBIZWFwOjpoYW5kbGVOZWVkRmluYWxpemUoKQogdm9pZCBI
ZWFwOjpzZXRHQ0RpZEpJVCgpCiB7CiAgICAgbV93b3JsZFN0YXRlLnRyYW5zYWN0aW9uKAotICAg
ICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0ZSkgeworICAgICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0
ZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZSAmIHN0b3BwZWRC
aXQpOwogICAgICAgICAgICAgc3RhdGUgfD0gZ2NEaWRKSVRCaXQ7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsOCArOTMsOCBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6dGVzdEFuZFNldE1hcmtlCiAgICAgaWYgKGNlbGwtPmlz
TGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRpb24o
KS50ZXN0QW5kU2V0TWFya2VkKCk7CiAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFy
a2VkQmxvY2soKTsKLSAgICBibG9jay5hYm91dFRvTWFyayhtYXJraW5nVmVyc2lvbik7Ci0gICAg
cmV0dXJuIGJsb2NrLnRlc3RBbmRTZXRNYXJrZWQoY2VsbCk7CisgICAgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5ID0gYmxvY2suYWJvdXRUb01hcmsobWFya2luZ1ZlcnNpb24pOworICAgIHJldHVybiBi
bG9jay50ZXN0QW5kU2V0TWFya2VkKGNlbGwsIGRlcGVuZGVuY3kpOwogfQogCiBBTFdBWVNfSU5M
SU5FIHNpemVfdCBIZWFwOjpjZWxsU2l6ZShjb25zdCB2b2lkKiByYXdDZWxsKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDIx
MzU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlz
TmV3bHlBbGxvY2F0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzTmV3bHlBbGxvY2F0ZWQ7IH0KICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNN
YXJrZWQoSGVhcENlbGwqKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQoc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsYXhlZCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50
bHkoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gbV9pc01hcmtlZC5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2Vk
KEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24s
IEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkgeyBy
ZXR1cm4gaXNNYXJrZWQoKSB8fCBpc05ld2x5QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBib29s
IGhhc1ZhbGlkQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRDZWxsOyB9CkBAIC0xMDks
NyArMTEwLDcgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMm
IGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KICAgICAKLSAgICB2
b2lkIGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uKSB7IH0KKyAgICBEZXBlbmRlbmN5IGFib3V0VG9N
YXJrKEhlYXBWZXJzaW9uKSB7IHJldHVybiBudWxsRGVwZW5kZW5jeSgpOyB9CiAgICAgCiAgICAg
QUxXQVlTX0lOTElORSBib29sIHRlc3RBbmRTZXRNYXJrZWQoKQogICAgIHsKQEAgLTEyMCw3ICsx
MjEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IG1faXNNYXJrZWQuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKGZhbHNlLCB0cnVlKTsKICAgICB9Ci0g
ICAgQUxXQVlTX0lOTElORSBib29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcENlbGwqKSB7IHJldHVy
biB0ZXN0QW5kU2V0TWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdGVzdEFuZFNl
dE1hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29k
ID0gVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6Okxpa2VseSkgeyByZXR1cm4gdGVzdEFuZFNl
dE1hcmtlZCgpOyB9CiAgICAgdm9pZCBjbGVhck1hcmtlZCgpIHsgbV9pc01hcmtlZC5zdG9yZShm
YWxzZSk7IH0KICAgICAKICAgICB2b2lkIG5vdGVNYXJrZWQoKSB7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjEzNTg4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MjU4LDcgKzI1OCw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsK
ICAgICBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lk
Kik7CiAgICAgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbiwgY29uc3Qgdm9pZCopOwotICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lk
Kik7CisgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CisgICAgYm9v
bCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5LCBUcmFuc2FjdGlvbkFi
b3J0TGlrZWxpaG9vZCA9IFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpOwogICAg
ICAgICAKICAgICBib29sIGlzQXRvbShjb25zdCB2b2lkKik7CiAgICAgdm9pZCBjbGVhck1hcmtl
ZChjb25zdCB2b2lkKik7CkBAIC0yNzgsMTUgKzI3OSwxNSBAQCBwdWJsaWM6CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtzU3Rh
bGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIHN0cnVjdCBNYXJrc1dpdGhEZXBl
bmRlbmN5IHsKLSAgICAgICAgYm9vbCBhcmVTdGFsZTsKLSAgICAgICAgQ29uc3VtZURlcGVuZGVu
Y3kgZGVwZW5kZW5jeTsKLSAgICB9OwotICAgIE1hcmtzV2l0aERlcGVuZGVuY3kgYXJlTWFya3NT
dGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKKyAgICBEZXBl
bmRlbmN5V2l0aDxib29sPiBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24pOwogICAgIAotICAgIHZvaWQgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24pOworICAgIERlcGVuZGVuY3kgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKLSAgICB2b2lkIGFzc2VydE1hcmtzTm90U3RhbGUo
KTsKKyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICB2b2lkIGFzc2VydE1hcmtzTm90U3RhbGUoKSB7
IH0KKyNlbHNlCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhc3NlcnRNYXJrc05vdFN0YWxl
KCk7CisjZW5kaWYKICAgICAgICAgCiAgICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc0Rlc3RydWN0aW9uOyB9CiAgICAgCkBAIC0zMDYsNyArMzA3LDcgQEAg
cHJpdmF0ZToKICAgICBNYXJrZWRCbG9jayhWTSYsIEhhbmRsZSYpOwogICAgIEF0b20qIGF0b21z
KCk7CiAgICAgICAgIAotICAgIHZvaWQgYWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFib3V0VG9NYXJrU2xvdyhI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgdm9pZCBjbGVhckhhc0FueU1hcmtlZCgp
OwogICAgIAogICAgIHZvaWQgbm90ZU1hcmtlZFNsb3coKTsKQEAgLTQ5MSwyOCArNDkyLDIwIEBA
IGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlKEgKICAgICByZXR1cm4gbWFy
a2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0KIAotQUxXQVlTX0lOTElORSBNYXJr
ZWRCbG9jazo6TWFya3NXaXRoRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdp
dGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQorQUxXQVlTX0lOTElORSBE
ZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRl
bmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewotICAgIGF1dG8gY29uc3VtZWQgPSBj
b25zdW1lTG9hZCgmbV9tYXJraW5nVmVyc2lvbik7Ci0gICAgTWFya3NXaXRoRGVwZW5kZW5jeSBy
ZXQ7Ci0gICAgcmV0LmFyZVN0YWxlID0gY29uc3VtZWQudmFsdWUgIT0gbWFya2luZ1ZlcnNpb247
Ci0gICAgcmV0LmRlcGVuZGVuY3kgPSBjb25zdW1lZC5kZXBlbmRlbmN5OwotICAgIHJldHVybiBy
ZXQ7CisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgcmV0
dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNpb24gIT0gbWFya2lu
Z1ZlcnNpb24pOwogfQogCi1pbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCitpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6
YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgaWYgKFVOTElL
RUxZKGFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pKSkKKyAgICBhdXRvIHJlc3VsdCA9IGFy
ZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7CisgICAgaWYgKFVOTElL
RUxZKHJlc3VsdC52YWx1ZSkpCiAgICAgICAgIGFib3V0VG9NYXJrU2xvdyhtYXJraW5nVmVyc2lv
bik7Ci0gICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRl
bmN5OwogfQogCi0jaWYgQVNTRVJUX0RJU0FCTEVECi1pbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6
YXNzZXJ0TWFya3NOb3RTdGFsZSgpCi17Ci19Ci0jZW5kaWYgLy8gQVNTRVJUX0RJU0FCTEVECi0K
IGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUoKQog
ewogICAgIGJsb2NrKCkuYXNzZXJ0TWFya3NOb3RTdGFsZSgpOwpAQCAtNTMwLDE2ICs1MjMsMjIg
QEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKEhlYXBWZQogCiBpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgYXV0byBtYXJrc1dpdGhEZXBlbmRlbmN5ID0g
YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAobWFy
a3NXaXRoRGVwZW5kZW5jeS5hcmVTdGFsZSkKKyAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3Rh
bGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7CisgICAgaWYgKHJlc3VsdC52YWx1ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVy
KHApICsgbWFya3NXaXRoRGVwZW5kZW5jeS5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJr
cy5nZXQoYXRvbU51bWJlcihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOworfQorCitpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRl
bmN5KQoreworICAgIGFzc2VydE1hcmtzTm90U3RhbGUoKTsKKyAgICByZXR1cm4gbV9tYXJrcy5n
ZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJs
b2NrOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIHApCitpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kIGFib3J0TGlrZWxpaG9vZCkKIHsKICAgICBh
c3NlcnRNYXJrc05vdFN0YWxlKCk7Ci0gICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRlc3RB
bmRTZXQoYXRvbU51bWJlcihwKSk7CisgICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRlc3RB
bmRTZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSwgYWJvcnRMaWtlbGlob29kKTsKIH0KIAog
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNOZXdseUFsbG9jYXRlZChjb25zdCB2
b2lkKiBwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNw
cAkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNDkgKzIyMiwzNyBAQCB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyCiAgICAgfSB9CiB9CiAKLXZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewotICAg
IGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBp
ZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKLSAgICAgICAgbV9oZWFwU25hcHNo
b3RCdWlsZGVyLT5hcHBlbmRFZGdlKG1fY3VycmVudENlbGwsIHZhbHVlLmFzQ2VsbCgpKTsKLQot
ICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgpKTsKKyAgICAg
ICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmRFZGdlKG1fY3VycmVudENlbGwsIGNlbGwp
OworICAgIAorICAgIGFwcGVuZEhpZGRlblNsb3dJbXBsKGNlbGwsIGRlcGVuZGVuY3kpOwogfQog
Ci12b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZEhpZGRlblNsb3coSlNDZWxsKiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3kpCiB7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgp
KTsKKyAgICBhcHBlbmRIaWRkZW5TbG93SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAotdm9p
ZCBTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxs
KQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5TbG93SW1wbChK
U0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKLSAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgCiAgICAgQVNTRVJUKCFtX2lzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7Ci0gICAgaWYgKCFjZWxsKQotICAgICAgICBy
ZXR1cm47CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICB2YWxpZGF0ZShjZWxsKTsK
ICNlbmRpZgogICAgIAogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAgICAg
ICBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsLT5sYXJnZUFsbG9jYXRpb24oKSwg
Y2VsbCk7CisgICAgICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwtPmxhcmdl
QWxsb2NhdGlvbigpLCBjZWxsLCBkZXBlbmRlbmN5KTsKICAgICBlbHNlCi0gICAgICAgIHNldE1h
cmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworICAg
ICAgICBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsLT5tYXJrZWRCbG9jaygpLCBj
ZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4K
LUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJr
U3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0NlbGwqIGNlbGwpCitBTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKENvbnRh
aW5lclR5cGUmIGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kp
CiB7Ci0gICAgY29udGFpbmVyLmFib3V0VG9NYXJrKG1fbWFya2luZ1ZlcnNpb24pOwotICAgIAot
ICAgIGlmIChjb250YWluZXIudGVzdEFuZFNldE1hcmtlZChjZWxsKSkKKyAgICBpZiAoY29udGFp
bmVyLnRlc3RBbmRTZXRNYXJrZWQoY2VsbCwgZGVwZW5kZW5jeSwgVHJhbnNhY3Rpb25BYm9ydExp
a2VsaWhvb2Q6OlVubGlrZWx5KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VSVChj
ZWxsLT5zdHJ1Y3R1cmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgJKHJldmlzaW9uIDIxMzU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSwxMSArMTc1LDE0IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgdm9pZCBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2VsbCopOwog
ICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpTVmFsdWUpOworICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpT
Q2VsbCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRU
b01hcmtTdGFjayhKU0NlbGwqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFNs
b3coSlNDZWxsKiwgRGVwZW5kZW5jeSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBl
bmRIaWRkZW5TbG93KEpTQ2VsbCosIERlcGVuZGVuY3kpOworICAgIHZvaWQgYXBwZW5kSGlkZGVu
U2xvd0ltcGwoSlNDZWxsKiwgRGVwZW5kZW5jeSk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29udGFpbmVyVHlwZT4KLSAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNr
KENvbnRhaW5lclR5cGUmLCBKU0NlbGwqKTsKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRv
TWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwqLCBEZXBlbmRlbmN5KTsKICAgICAKICAg
ICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIx
MzU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0OSArMzEsMTA2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSogc2xv
dCwgc2l6ZV90IGNvdW50KQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRV
bmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCiB7CiAgICAgZm9yIChzaXpl
X3QgaSA9IGNvdW50OyBpLS07KQogICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90W2ldKTsK
IH0KIAotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCog
Y2VsbCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQo
SlNDZWxsKiBjZWxsKQogewotICAgIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUoY2VsbCkpOwor
ICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgd3JpdHRlbiBpbiBhIHZlcnkgc3BlY2lmaWMgd2F5IHRv
IGVuc3VyZSB0aGF0IGl0IGdldHMgaW5saW5lZAorICAgIC8vIHByb3Blcmx5LiBJbiBwYXJ0aWN1
bGFyLCBpdCBhcHBlYXJzIHRoYXQgdXNpbmcgdGVtcGxhdGVzIGhlcmUgYnJlYWtzIEFMV0FZU19J
TkxJTkUuCisgICAgCisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
RGVwZW5kZW5jeSBkZXBlbmRlbmN5OworICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc0xhcmdlQWxs
b2NhdGlvbigpKSkgeworICAgICAgICBkZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKTsKKyAg
ICAgICAgaWYgKExJS0VMWShjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpKSkgewor
ICAgICAgICAgICAgaWYgKExJS0VMWSghbV9oZWFwU25hcHNob3RCdWlsZGVyKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBNYXJrZWRC
bG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOworICAgICAgICBkZXBlbmRlbmN5ID0g
YmxvY2suYWJvdXRUb01hcmsobV9tYXJraW5nVmVyc2lvbik7CisgICAgICAgIGlmIChMSUtFTFko
YmxvY2suaXNNYXJrZWQoY2VsbCwgZGVwZW5kZW5jeSkpKSB7CisgICAgICAgICAgICBpZiAoTElL
RUxZKCFtX2hlYXBTbmFwc2hvdEJ1aWxkZXIpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBhcHBlbmRIaWRkZW5TbG93KGNlbGwsIGRlcGVuZGVu
Y3kpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmll
cmVkKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBh
cHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRIaWRkZW4odmFsdWUuYXNDZWxsKCkpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihKU0NlbGwqIGNl
bGwpCit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIGluIGEgdmVyeSBzcGVjaWZp
YyB3YXkgdG8gZW5zdXJlIHRoYXQgaXQgZ2V0cyBpbmxpbmVkCisgICAgLy8gcHJvcGVybHkuIElu
IHBhcnRpY3VsYXIsIGl0IGFwcGVhcnMgdGhhdCB1c2luZyB0ZW1wbGF0ZXMgaGVyZSBicmVha3Mg
QUxXQVlTX0lOTElORS4KKyAgICAKKyAgICBpZiAoIWNlbGwpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7CisgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlz
TGFyZ2VBbGxvY2F0aW9uKCkpKSB7CisgICAgICAgIGRlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5j
eSgpOworICAgICAgICBpZiAoTElLRUxZKGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlzTWFya2Vk
KCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hcmtlZEJs
b2NrJiBibG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7CisgICAgICAgIGRlcGVuZGVuY3kgPSBi
bG9jay5hYm91dFRvTWFyayhtX21hcmtpbmdWZXJzaW9uKTsKKyAgICAgICAgaWYgKExJS0VMWShi
bG9jay5pc01hcmtlZChjZWxsLCBkZXBlbmRlbmN5KSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGFwcGVuZEhpZGRlblNsb3coY2VsbCwgZGVwZW5kZW5jeSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNv
bnN0IFdlYWs8VD4mIHdlYWspCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZChjb25zdCBXZWFrPFQ+JiB3ZWFrKQogewogICAgIGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0
KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQ+JiBzbG90KQorQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxUPiYgc2xvdCkK
IHsKICAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxUPiYgc2xvdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VD4mIHNsb3QpCiB7CiAgICAgYXBw
ZW5kSGlkZGVuKHNsb3QuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4K
LWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9y
IGVuZCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJl
Z2luLCBJdGVyYXRvciBlbmQpCiB7CiAgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVu
ZDsgKytpdCkKICAgICAgICAgYXBwZW5kKCppdCk7CiB9CiAKLWlubGluZSB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmll
cnMsIHNpemVfdCBjb3VudCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
VmFsdWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3Qg
Y291bnQpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAg
ICBhcHBlbmQoYmFycmllcnNbaV0pOwogfQogCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJz
LCBzaXplX3QgY291bnQpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZh
bHVlc0hpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6
ZV90IGNvdW50KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKICAg
ICAgICAgYXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24g
MjEzNTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIlNsb3RWaXNp
dG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIxMzU4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDYg
KzM4Miw3IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQKICAgICBz
dHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgIGxhc3RPZmZzZXQg
PSBzdHJ1Y3R1cmUtPmxhc3RPZmZzZXQoKTsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
ID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBEZXBlbmRlbmN5IGluZGV4aW5nVHlw
ZURlcGVuZGVuY3kgPSBkZXBlbmRlbmN5KGluZGV4aW5nVHlwZSk7CiAgICAgTG9ja2VyPEpTQ2Vs
bD4gbG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeSk7CiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUp
IHsKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgpAQCAtMzk1LDE0ICsz
OTYsMTMgQEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsK
LSAgICBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKKyAgICBidXR0ZXJmbHkgPSBjb25z
dW1lKHRoaXMsIGluZGV4aW5nVHlwZURlcGVuZGVuY3kpLT5idXR0ZXJmbHkoKTsKKyAgICBEZXBl
bmRlbmN5IGJ1dHRlcmZseURlcGVuZGVuY3kgPSBkZXBlbmRlbmN5KGJ1dHRlcmZseSk7CiAgICAg
aWYgKCFidXR0ZXJmbHkpCiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgV1RGOjpsb2Fk
TG9hZEZlbmNlKCk7Ci0gICAgaWYgKHRoaXMtPnN0cnVjdHVyZUlEKCkgIT0gc3RydWN0dXJlSUQp
CisgICAgaWYgKGNvbnN1bWUodGhpcywgYnV0dGVyZmx5RGVwZW5kZW5jeSktPnN0cnVjdHVyZUlE
KCkgIT0gc3RydWN0dXJlSUQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChzdHJ1
Y3R1cmUtPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KQorICAgIGlmIChjb25zdW1lKHN0cnVj
dHVyZSwgYnV0dGVyZmx5RGVwZW5kZW5jeSktPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRP
dXRPZkxpbmVQcm9wZXJ0aWVzKHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlLCBsYXN0T2Zm
c2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2
aXNpb24gMjEzNTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNjY0LDcgKzY2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZs
eS5nZXQoKTsgfQogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJm
bHkuZ2V0KCk7IH0KLSAgICAgICAgCisgICAgCiAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0
T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0
eVN0b3JhZ2UoKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKSW5kZXg6IFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMTM1ODgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDY2IEBACisyMDE3LTAzLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgV1RGIHNob3VsZCBtYWtlIGl0IHN1cGVyIGVhc3kgdG8gZG8gQVJNIGNv
bmN1cnJlbmN5IHRyaWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5MzAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgQXRvbWljPD46OmxvYWRMaW5rIGFuZCBBdG9taWM8
Pjo6c3RvcmVDb25kLCBhdmFpbGFibGUgb25seSB3aGVuIEhBVkUoTExfU0MpLgorICAgICAgICAK
KyAgICAgICAgSXQgYWJzdHJhY3RzIGxvYWRMaW5rL3N0b3JlQ29uZCBiZWhpbmQgcHJlcGFyZS9h
dHRlbXB0LiBZb3UgY2FuIHdyaXRlIHByZXBhcmUvYXR0ZW1wdAorICAgICAgICBsb29wcyB3aGVu
ZXZlciB5b3VyIGxvb3AgZml0cyBpbnRvIHRoZSBsZWFzdCBjb21tb24gZGVub21pbmF0b3Igb2Yg
TEwvU0MgYW5kIENBUy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbW9kaWZpZXMgQXRvbWljPD46
OnRyYW5zYWN0aW9uIHRvIHVzZSBwcmVwYXJlL2F0dGVtcHQuIFNvLCBpZiB5b3Ugd3JpdGUgeW91
ciBsb29wCisgICAgICAgIHVzaW5nIEF0b21pYzw+Ojp0cmFuc2FjdGlvbiwgdGhlbiB5b3UgZ2V0
IExML1NDIGZvciBmcmVlLgorCisgICAgICAgIERlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0cmFu
c2FjdGlvbiB5b3UgYXJlIGRvaW5nLCB5b3UgbWF5IG5vdCB3YW50IHRvIHBlcmZvcm0gYW4gTEwK
KyAgICAgICAgdW50aWwgeW91IGhhdmUgYSBjaGFuY2UgdG8ganVzdCBsb2FkIHRoZSBjdXJyZW50
IHZhbHVlLiBBdG9taWM8Pjo6dHJhbnNhY3Rpb24oKSBhc3N1bWVzCisgICAgICAgIHRoYXQgeW91
IGRvIG5vdCBjYXJlIHRvIGhhdmUgYW55IG9yZGVyaW5nIGd1YXJhbnRlZXMgaW4gdGhhdCBjYXNl
LiBJZiB5b3UgdGhpbmsgdGhhdAorICAgICAgICB0aGUgdHJhbnNhY3Rpb24gaGFzIGEgZ29vZCBj
aGFuY2Ugb2YgYWJvcnRpbmcgdGhpcyB3YXksIHlvdSB3YW50CisgICAgICAgIEF0b21pYzw+Ojp0
cmFuc2FjdGlvbigpIHRvIGZpcnN0IGRvIGEgcGxhaW4gbG9hZC4gQnV0IGlmIHlvdSBkb24ndCB0
aGluayB0aGF0IHN1Y2ggYW4KKyAgICAgICAgYWJvcnQgaXMgbGlrZWx5LCB0aGVuIHlvdSB3YW50
IHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBMTC4gVGhlIEFQSSBzdXBwb3J0cyB0aGlzIGNvbmNlcHQK
KyAgICAgICAgdmlhIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kLgorICAgICAgICAKKyAgICAg
ICAgQWRkaXRpb25hbGx5LCB0aGlzIHJlZG9lcyB0aGUgZGVwZW5kL2NvbnN1bWUgQVBJIHRvIGJl
IGRlYWQgc2ltcGxlLiBEZXBlbmRlbmN5IGlzCisgICAgICAgIHVuc2lnbmVkLiBZb3UgZ2V0IGEg
ZGVwZW5kZW5jeSBvbiBhIGxvYWRlZCB2YWx1ZSBieSBqdXN0IHNheWluZworICAgICAgICBkZXBl
bmRlbmN5KGxvYWRlZFZhbHVlKS4gWW91IGNvbnN1bWUgdGhlIGRlcGVuZGVuY3kgYnkgdXNpbmcg
aXQgYXMgYSBib251cyBpbmRleCB0bworICAgICAgICBzb21lIHBvaW50ZXIgZGVyZWZlcmVuY2Uu
IFRoaXMgaXMgbWFkZSBlYXN5IHdpdGggdGhlIGNvbnN1bWU8VCo+KHB0ciwgZGVwZW5kZW5jeSkK
KyAgICAgICAgaGVscGVyLiBJbiB0aG9zZSBjYXNlcyB3aGVyZSB5b3Ugd2FudCB0byBwYXNzIGFy
b3VuZCBib3RoIGEgY29tcHV0ZWQgdmFsdWUgYW5kIGEKKyAgICAgICAgZGVwZW5kZW5jeSwgdGhl
cmUncyBEZXBlbmRlbmN5V2l0aDxUPi4gQnV0IHlvdSB3b24ndCBuZWVkIGl0IGluIG1vc3QgY2Fz
ZXMuIFRoZSBsb2FkZWQKKyAgICAgICAgdmFsdWUgb3IgYW55IHZhbHVlIGNvbXB1dGVkIGZyb20g
dGhlIGxvYWRlZCB2YWx1ZSBpcyBhIGZpbmUgaW5wdXQgdG8gZGVwZW5kZW5jeSgpIQorICAgICAg
ICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgdXBkYXRlcyBhIGJ1bmNoIG9mIGhvdCBwYXRocyB0byB1
c2UgdGhlIG5ldyBBUElzLiBVc2luZyB0cmFuc2FjdGlvbigpIGdpdmVzCisgICAgICAgIHVzIG9w
dGltYWwgTEwvU0MgbG9vcHMgZm9yIG9iamVjdCBtYXJraW5nIGFuZCBsb2NrIGFjcXVpc2l0aW9u
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyB1cGRhdGVzIGEgYnVuY2ggb2Yg
aG90IHBhdGhzIHRvIHVzZSBkZXBlbmRlbmN5KCkvY29uc3VtZSgpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBhIHNpZ25pZmljYW50IE9jdGFuZS9zcGxheSBzcGVlZC11cCBvbiBBUk0uCisK
KyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjpoYXNGZW5jZSk6CisgICAg
ICAgIChXVEY6OkF0b21pYzo6cHJlcGFyZSk6CisgICAgICAgIChXVEY6OkF0b21pYzo6YXR0ZW1w
dCk6CisgICAgICAgIChXVEY6OkF0b21pYzo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV1RGOjpB
dG9taWM6OnRyYW5zYWN0aW9uUmVsYXhlZCk6CisgICAgICAgIChXVEY6Om51bGxEZXBlbmRlbmN5
KToKKyAgICAgICAgKFdURjo6ZGVwZW5kZW5jeSk6CisgICAgICAgIChXVEY6OkRlcGVuZGVuY3lX
aXRoOjpEZXBlbmRlbmN5V2l0aCk6CisgICAgICAgIChXVEY6OmRlcGVuZGVuY3lXaXRoKToKKyAg
ICAgICAgKFdURjo6Y29uc3VtZSk6CisgICAgICAgIChXVEY6OkF0b21pYzo6dHJ5VHJhbnNhY3Rp
b25SZWxheGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6QXRvbWljOjp0cnlUcmFuc2FjdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Onplcm9XaXRoQ29uc3VtZURlcGVuZGVuY3kpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpjb25zdW1lTG9hZCk6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmdldCk6CisgICAgICAgIChX
VEY6OldvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRTZXQpOgorICAgICAgICAoV1RGOjpXb3Jk
VHlwZT46OmNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIpOgorICAgICAgICAqIHd0Zi9Mb2NrQWxnb3Jp
dGhtLmg6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2tGYXN0KToKKyAgICAgICAg
KFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFzdCk6CisgICAgICAgIChXVEY6OkxvY2tBbGdv
cml0aG06OnVubG9ja1Nsb3cpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDE3LTAz
LTA2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBS
ZXBvcnQgZG9tYWlucyBjcmFzaGluZyB1bmRlciBtZW1vcnkgcHJlc3N1cmUgdmlhIGVuaGFuY2Vk
IHByaXZhY3kgbG9nZ2luZy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIxMzU4OCkKKysrIFNv
dXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCwgMjAxMCwgMjAxMi0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5
Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MCw2ICs0
MCwxNiBAQCBleHRlcm4gIkMiIHZvaWQgX1JlYWRXcml0ZUJhcnJpZXIodm9pZCk7CiAKIG5hbWVz
cGFjZSBXVEYgewogCitBTFdBWVNfSU5MSU5FIGJvb2wgaGFzRmVuY2Uoc3RkOjptZW1vcnlfb3Jk
ZXIgb3JkZXIpCit7CisgICAgcmV0dXJuIG9yZGVyICE9IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4
ZWQ7Cit9CisKK2VudW0gY2xhc3MgVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2QgeworICAgIFVu
bGlrZWx5LAorICAgIExpa2VseQorfTsKKyAgICAKIC8vIEF0b21pYyB3cmFwcyBhcm91bmQgc3Rk
OjphdG9taWMgd2l0aCB0aGUgc29sZSBwdXJwb3NlIG9mIG1ha2luZyB0aGUgY29tcGFyZV9leGNo
YW5nZQogLy8gb3BlcmF0aW9ucyBub3QgYWx0ZXIgdGhlIGV4cGVjdGVkIHZhbHVlLiBUaGlzIGlz
IG1vcmUgaW4gbGluZSB3aXRoIGhvdyB3ZSB0eXBpY2FsbHkKIC8vIHVzZSBDQVMgaW4gb3VyIGNv
ZGUuCkBAIC0xMDcsMzkgKzExNywxMzAgQEAgc3RydWN0IEF0b21pYyB7CiAgICAgCiAgICAgQUxX
QVlTX0lOTElORSBUIGV4Y2hhbmdlKFQgbmV3VmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVy
ID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgeyByZXR1cm4gdmFsdWUuZXhjaGFuZ2UobmV3
VmFsdWUsIG9yZGVyKTsgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAg
QUxXQVlTX0lOTElORSBib29sIHRyeVRyYW5zYWN0aW9uUmVsYXhlZChjb25zdCBGdW5jJiBmdW5j
KQorI2lmIEhBVkUoTExfU0MpCisgICAgQUxXQVlTX0lOTElORSBUIGxvYWRMaW5rKHN0ZDo6bWVt
b3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgQUxXQVlT
X0lOTElORSBib29sIHN0b3JlQ29uZChUIHZhbHVlLCAgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIg
PSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKKyNlbmRpZiAvLyBIQVZFKExMX1NDKQorCisg
ICAgLy8gUHJvcHMgdG8gCisgICAgQUxXQVlTX0lOTElORSBUIHByZXBhcmUoc3RkOjptZW1vcnlf
b3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KQogICAgIHsKLSAgICAgICAg
VCBvbGRWYWx1ZSA9IGxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICAgIFQg
bmV3VmFsdWUgPSBvbGRWYWx1ZTsKLSAgICAgICAgZnVuYyhuZXdWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBjb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZChvbGRWYWx1ZSwgbmV3VmFsdWUpOworI2lm
IEhBVkUoTExfU0MpCisgICAgICAgIHJldHVybiBsb2FkTGluayhvcmRlcik7CisjZWxzZQorICAg
ICAgICBVTlVTRURfUEFSQU0ob3JkZXIpOworICAgICAgICByZXR1cm4gbG9hZChzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxheGVkKTsKKyNlbmRpZgogICAgIH0KKyAgICAKKyNpZiBIQVZFKExMX1NDKQor
ICAgIHN0YXRpYyBjb25zdCBib29sIHByZXBhcmVJc0Zhc3QgPSBmYWxzZTsKKyNlbHNlCisgICAg
c3RhdGljIGNvbnN0IGJvb2wgcHJlcGFyZUlzRmFzdCA9IHRydWU7CisjZW5kaWYKIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9u
UmVsYXhlZChjb25zdCBGdW5jJiBmdW5jKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBhdHRlbXB0
KFQgb2xkVmFsdWUsIFQgbmV3VmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjpt
ZW1vcnlfb3JkZXJfc2VxX2NzdCkKICAgICB7Ci0gICAgICAgIHdoaWxlICghdHJ5VHJhbnNhdGlv
blJlbGF4ZWQoZnVuYykpIHsgfQorI2lmIEhBVkUoTExfU0MpCisgICAgICAgIFVOVVNFRF9QQVJB
TShvbGRWYWx1ZSk7CisgICAgICAgIHJldHVybiBzdG9yZUNvbmQobmV3VmFsdWUsIG9yZGVyKTsK
KyNlbHNlCisgICAgICAgIHJldHVybiBjb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdW
YWx1ZSwgb3JkZXIpOworI2VuZGlmCiAgICAgfQotCisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb24oY29uc3QgRnVu
YyYgZnVuYykKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJhbnNhY3Rpb24oY29uc3QgRnVuYyYg
ZnVuYywgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0
LCBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZCBhYm9ydExpa2VsaWhvb2QgPSBUcmFuc2FjdGlv
bkFib3J0TGlrZWxpaG9vZDo6TGlrZWx5KQogICAgIHsKLSAgICAgICAgVCBvbGRWYWx1ZSA9IGxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICAgIFQgbmV3VmFsdWUgPSBvbGRW
YWx1ZTsKLSAgICAgICAgZnVuYyhuZXdWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBjb21wYXJlRXhj
aGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgICAgIC8vIElmIHByZXBhcmluZyBp
cyBub3QgZmFzdCB0aGVuIHdlIHdhbnQgdG8gc2tpcCB0aGUgbG9vcCB3aGVuIGZ1bmMgd291bGQg
ZmFpbC4KKyAgICAgICAgaWYgKCFwcmVwYXJlSXNGYXN0ICYmIGFib3J0TGlrZWxpaG9vZCA9PSBU
cmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZDo6TGlrZWx5KSB7CisgICAgICAgICAgICBUIG9sZFZh
bHVlID0gbG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgICAgIC8vIE5v
dGU6IG1hbnkgZnVuY3Mgd2lsbCBjb25zdGFudC1mb2xkIHRvIHRydWUsIHdoaWNoIHdpbGwga2ls
bCBhbGwgb2YgdGhpcyBjb2RlLgorICAgICAgICAgICAgaWYgKCFmdW5jKG9sZFZhbHVlKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgVCBvbGRWYWx1ZSA9IHByZXBhcmUob3JkZXIpOworICAgICAgICAgICAg
VCBuZXdWYWx1ZSA9IG9sZFZhbHVlOworICAgICAgICAgICAgaWYgKCFmdW5jKG5ld1ZhbHVlKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoYXR0ZW1wdChv
bGRWYWx1ZSwgbmV3VmFsdWUsIG9yZGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgQUxX
QVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9uKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgQUxXQVlT
X0lOTElORSBib29sIHRyYW5zYWN0aW9uUmVsYXhlZChjb25zdCBGdW5jJiBmdW5jLCBUcmFuc2Fj
dGlvbkFib3J0TGlrZWxpaG9vZCBhYm9ydExpa2VsaWhvb2QgPSBUcmFuc2FjdGlvbkFib3J0TGlr
ZWxpaG9vZDo6TGlrZWx5KQogICAgIHsKLSAgICAgICAgd2hpbGUgKCF0cnlUcmFuc2FjdGlvbihm
dW5jKSkgeyB9CisgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbihmdW5jLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxheGVkLCBhYm9ydExpa2VsaWhvb2QpOwogICAgIH0KIAogICAgIHN0ZDo6YXRvbWlj
PFQ+IHZhbHVlOwogfTsKIAorI2lmIENQVShBUk02NCkKKyNkZWZpbmUgREVGSU5FX0xMX1NDKHdp
ZHRoLCBtb2RpZmllciwgc3VmZml4KSAgIFwKKyAgICB0ZW1wbGF0ZTw+IFwKKyAgICBBTFdBWVNf
SU5MSU5FIHVpbnQgIyMgd2lkdGggIyMgX3QgQXRvbWljPHVpbnQgIyMgd2lkdGggIyNfdD46Omxv
YWRMaW5rKHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyKSBcCisgICAgeyBcCisgICAgICAgIGludCAj
IyB3aWR0aCAjIyBfdCByZXN1bHQ7IFwKKyAgICAgICAgaWYgKGhhc0ZlbmNlKG9yZGVyKSkgeyBc
CisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCBcCisgICAgICAgICAgICAgICAgImxkYXhyIiBz
dWZmaXggIiAlIiBtb2RpZmllciAiMCwgWyUxXSIgXAorICAgICAgICAgICAgICAgIDogIj1yIihy
ZXN1bHQpIFwKKyAgICAgICAgICAgICAgICA6ICJyIih0aGlzKSBcCisgICAgICAgICAgICAgICAg
OiAibWVtb3J5Iik7IFwKKyAgICAgICAgfSBlbHNlIHsgXAorICAgICAgICAgICAgYXNtICggXAor
ICAgICAgICAgICAgICAgICJsZHhyIiBzdWZmaXggIiAlIiBtb2RpZmllciAiMCwgWyUxXSIgXAor
ICAgICAgICAgICAgICAgIDogIj1yIihyZXN1bHQpIFwKKyAgICAgICAgICAgICAgICA6ICJyIih0
aGlzKSBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7IFwKKyAgICAgICAgfSBcCisgICAg
ICAgIHJldHVybiByZXN1bHQ7IFwKKyAgICB9IFwKKyAgICBcCisgICAgdGVtcGxhdGU8PiBcCisg
ICAgQUxXQVlTX0lOTElORSBib29sIEF0b21pYzx1aW50ICMjIHdpZHRoICMjIF90Pjo6c3RvcmVD
b25kKHVpbnQgIyMgd2lkdGggIyMgX3QgdmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyKSBc
CisgICAgeyBcCisgICAgICAgIGJvb2wgcmVzdWx0OyBcCisgICAgICAgIGlmIChoYXNGZW5jZShv
cmRlcikpIHsgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICggXAorICAgICAgICAgICAgICAg
ICJzdGx4ciIgc3VmZml4ICIgJXcwLCAlIiBtb2RpZmllciAiMSwgWyUyXSIgXAorICAgICAgICAg
ICAgICAgIDogIj0mciIocmVzdWx0KSBcCisgICAgICAgICAgICAgICAgOiAiciIodmFsdWUpLCAi
ciIodGhpcykgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyBcCisgICAgICAgIH0gZWxz
ZSB7IFwKKyAgICAgICAgICAgIGFzbSAoIFwKKyAgICAgICAgICAgICAgICAic3R4ciIgc3VmZml4
ICIgJXcwLCAlIiBtb2RpZmllciAiMSwgWyUyXSIgXAorICAgICAgICAgICAgICAgIDogIj0mciIo
cmVzdWx0KSBcCisgICAgICAgICAgICAgICAgOiAiciIodmFsdWUpLCAiciIodGhpcykgXAorICAg
ICAgICAgICAgICAgIDogIm1lbW9yeSIpOyBcCisgICAgICAgIH0gXAorICAgICAgICByZXR1cm4g
IXJlc3VsdDsgXAorICAgIH0gXAorICAgIFwKKyAgICB0ZW1wbGF0ZTw+IFwKKyAgICBBTFdBWVNf
SU5MSU5FIGludCAjIyB3aWR0aCAjIyBfdCBBdG9taWM8aW50ICMjIHdpZHRoICMjIF90Pjo6bG9h
ZExpbmsoc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIpIFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxBdG9taWM8dWludCAjIyB3aWR0aCAjIyBfdD4qPih0aGlzKS0+bG9hZExp
bmsob3JkZXIpOyBcCisgICAgfSBcCisgICAgXAorICAgIHRlbXBsYXRlPD4gXAorICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBBdG9taWM8aW50ICMjIHdpZHRoICMjIF90Pjo6c3RvcmVDb25kKGludCAj
IyB3aWR0aCAjIyBfdCB2YWx1ZSwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIpIFwKKyAgICB7IFwK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBdG9taWM8dWludCAjIyB3aWR0aCAjIyBfdD4q
Pih0aGlzKS0+c3RvcmVDb25kKHZhbHVlLCBvcmRlcik7IFwKKyAgICB9CisKK0RFRklORV9MTF9T
Qyg4LCAidyIsICJiIikKK0RFRklORV9MTF9TQygxNiwgInciLCAiaCIpCitERUZJTkVfTExfU0Mo
MzIsICJ3IiwgIiIpCitERUZJTkVfTExfU0MoNjQsICIiLCAiIikKK0RFRklORV9MTF9TQyhwdHIs
ICIiLCAiIikKKworI3VuZGVmIERFRklORV9MTF9TQworI2VuZGlmIC8vIENQVShBUk02NCkKKwog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUIGF0b21pY0xvYWQoVCogbG9jYXRpb24sIHN0
ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkKIHsKQEAg
LTMwOCwxMiArNDA5LDE3IEBAIGlubGluZSB2b2lkIGNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCkg
eyAKIAogI2VuZGlmCiAKLXR5cGVkZWYgc2l6ZV90IENvbnN1bWVEZXBlbmRlbmN5OwordHlwZWRl
ZiB1bnNpZ25lZCBEZXBlbmRlbmN5OworCitBTFdBWVNfSU5MSU5FIERlcGVuZGVuY3kgbnVsbERl
cGVuZGVuY3koKQoreworICAgIHJldHVybiAwOworfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDg+Ojp0eXBlKiA9IG51bGxwdHI+
Ci1BTFdBWVNfSU5MSU5FIENvbnN1bWVEZXBlbmRlbmN5IHplcm9XaXRoQ29uc3VtZURlcGVuZGVu
Y3koVCB2YWx1ZSkKK0FMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUp
CiB7Ci0gICAgdWludDY0X3QgZGVwZW5kZW5jeTsKKyAgICB1bnNpZ25lZCBkZXBlbmRlbmN5Owog
ICAgIHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKICNpZiBD
UFUoQVJNNjQpCiAgICAgLy8gQ3JlYXRlIGEgbWFnaWNhbCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5s
aW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlvbgpAQCAtMzI1LDMwICs0MzEsMjYgQEAgQUxX
QVlTX0lOTElORSBDb25zdW1lRGVwZW5kZW5jeSB6ZXJvV2l0aAogICAgIC8vIG9yZGVyaW5nLiBU
aGlzIGZvcmNlcyB3ZWFrIG1lbW9yeSBvcmRlciBDUFVzIHRvIG9ic2VydmUgYGxvY2F0aW9uYCBh
bmQKICAgICAvLyBkZXBlbmRlbnQgbG9hZHMgaW4gdGhlaXIgc3RvcmUgb3JkZXIgd2l0aG91dCB0
aGUgcmVhZGVyIHVzaW5nIGEgYmFycmllcgogICAgIC8vIG9yIGFuIGFjcXVpcmUgbG9hZC4KLSAg
ICBhc20gdm9sYXRpbGUoImVvciAleFtkZXBlbmRlbmN5XSwgJXhbaW5dLCAleFtpbl0iCi0gICAg
ICAgICAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgICAg
ICAgICAgOiBbaW5dICJyIihjb3B5KQotICAgICAgICAgICAgICAgICAvLyBMaWUgYWJvdXQgdG91
Y2hpbmcgbWVtb3J5LiBOb3Qgc3RyaWN0bHkgbmVlZGVkLCBidXQgaXMKLSAgICAgICAgICAgICAg
ICAgLy8gbGlrZWx5IHRvIGF2b2lkIHVud2FudGVkIGxvYWQvc3RvcmUgbW90aW9uLgotICAgICAg
ICAgICAgICAgICA6ICJtZW1vcnkiKTsKKyAgICBhc20oImVvciAld1tkZXBlbmRlbmN5XSwgJXdb
aW5dLCAld1tpbl0iCisgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKKyAg
ICAgICAgOiBbaW5dICJyIihjb3B5KSk7CiAjZWxpZiBDUFUoQVJNKQotICAgIGFzbSB2b2xhdGls
ZSgiZW9yICVbZGVwZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKLSAgICAgICAgICAgICAgICAgOiBb
ZGVwZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQotICAgICAgICAgICAgICAgICA6IFtpbl0gInIi
KGNvcHkpCi0gICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOworICAgIGFzbSgiZW9yICVbZGVw
ZW5kZW5jeV0sICVbaW5dLCAlW2luXSIKKyAgICAgICAgOiBbZGVwZW5kZW5jeV0gIj1yIihkZXBl
bmRlbmN5KQorICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKICNlbHNlCiAgICAgLy8gTm8gZGVw
ZW5kZW5jeSBpcyBuZWVkZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogICAgIGxvYWRMb2FkRmVu
Y2UoKTsKICAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICAodm9pZCljb3B5OworICAgIFVOVVNFRF9Q
QVJBTShjb3B5KTsKICNlbmRpZgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb25zdW1lRGVwZW5k
ZW5jeT4oZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIGRlcGVuZGVuY3k7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gND46OnR5
cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgQ29uc3VtZURlcGVuZGVuY3kgemVyb1dpdGhD
b25zdW1lRGVwZW5kZW5jeShUIHZhbHVlKQorQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3koVCB2YWx1ZSkKIHsKLSAgICB1aW50MzJfdCBkZXBlbmRlbmN5OworICAgIHVuc2lnbmVk
IGRlcGVuZGVuY3k7CiAgICAgdWludDMyX3QgY29weSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
dmFsdWUpOwogI2lmIENQVShBUk02NCkKICAgICBhc20gdm9sYXRpbGUoImVvciAld1tkZXBlbmRl
bmN5XSwgJXdbaW5dLCAld1tpbl0iCkBAIC0zNjMsNjYgKzQ2NSw2OCBAQCBBTFdBWVNfSU5MSU5F
IENvbnN1bWVEZXBlbmRlbmN5IHplcm9XaXRoCiAjZWxzZQogICAgIGxvYWRMb2FkRmVuY2UoKTsK
ICAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICAodm9pZCljb3B5OworICAgIFVOVVNFRF9QQVJBTShj
b3B5KTsKICNlbmRpZgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb25zdW1lRGVwZW5kZW5jeT4o
ZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIGRlcGVuZGVuY3k7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0g
bnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgQ29uc3VtZURlcGVuZGVuY3kgemVyb1dpdGhDb25zdW1l
RGVwZW5kZW5jeShUIHZhbHVlKQorQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3ko
VCB2YWx1ZSkKIHsKLSAgICB1aW50MTZfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQxNl90Pih2
YWx1ZSk7Ci0gICAgcmV0dXJuIHplcm9XaXRoQ29uc3VtZURlcGVuZGVuY3koc3RhdGljX2Nhc3Q8
c2l6ZV90Pihjb3B5KSk7CisgICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzaXplb2YoVCkgPT0gMT46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUg
Q29uc3VtZURlcGVuZGVuY3kgemVyb1dpdGhDb25zdW1lRGVwZW5kZW5jeShUIHZhbHVlKQorQUxX
QVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKIHsKLSAgICB1aW50OF90
IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdD4odmFsdWUpOwotICAgIHJldHVybiB6ZXJvV2l0
aENvbnN1bWVEZXBlbmRlbmN5KHN0YXRpY19jYXN0PHNpemVfdD4oY29weSkpOworICAgIHJldHVy
biBkZXBlbmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwogfQogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBDb25zdW1lZCB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
c3RydWN0IERlcGVuZGVuY3lXaXRoIHsKK3B1YmxpYzoKKyAgICBEZXBlbmRlbmN5V2l0aCgpCisg
ICAgICAgIDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgpKQorICAgICAgICAsIHZhbHVlKCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5k
ZW5jeSwgY29uc3QgVCYgdmFsdWUpCisgICAgICAgIDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQor
ICAgICAgICAsIHZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5OwogICAgIFQgdmFsdWU7Ci0gICAgQ29uc3VtZURlcGVuZGVuY3kgZGVwZW5k
ZW5jeTsKIH07CisgICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIERlcGVuZGVuY3lX
aXRoPFQ+IGRlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFs
dWUpCit7CisgICAgcmV0dXJuIERlcGVuZGVuY3lXaXRoPFQ+KGRlcGVuZGVuY3ksIHZhbHVlKTsK
K30KIAotLy8gQ29uc3VtZSBsb2FkLCByZXR1cm5pbmcgdGhlIGxvYWRlZCBgdmFsdWVgIGF0IGBs
b2NhdGlvbmAgYW5kIGEgZGVwZW5kZW50LXplcm8KLS8vIHdoaWNoIGNyZWF0ZXMgYW4gYWRkcmVz
cyBkZXBlbmRlbmN5IGZyb20gdGhlIGBsb2NhdGlvbmAuCi0vLwotLy8gVXNhZ2Ugbm90ZXM6Ci0v
LwotLy8gICogUmVnYXJkaW5nIGNvbnRyb2wgZGVwZW5kZW5jaWVzOiBtZXJlbHkgYnJhbmNoaW5n
IGJhc2VkIG9uIGB2YWx1ZWAgb3IKLS8vICAgIGBkZXBlbmRlbmN5YCBpc24ndCBzdWZmaWNpZW50
IHRvIGltcG9zZSBhIGRlcGVuZGVuY3kgb3JkZXJpbmc6IHlvdSBtdXN0Ci0vLyAgICB1c2UgYGRl
cGVuZGVuY3lgIGluIHRoZSBhZGRyZXNzIGNvbXB1dGF0aW9uIG9mIHN1YnNlcXVlbnQgbG9hZHMg
d2hpY2gKLS8vICAgIHNob3VsZCBvYnNlcnZlIHRoZSBzdG9yZSBvcmRlciB3LnIudC4gYGxvY2F0
aW9uYC4KLS8vICogUmVnYXJkaW5nIG1lbW9yeSBvcmRlcmluZzogY29uc3VtZSBsb2FkIG9yZGVy
cyB0aGUgYGxvY2F0aW9uYCBsb2FkIHdpdGgKLS8vICAgc3VzZXF1ZW50IGRlcGVuZGVudCBsb2Fk
cyAqb25seSouIEl0IHNheXMgbm90aGluZyBhYm91dCBvcmRlcmluZyBvZiBvdGhlcgotLy8gICBs
b2FkcyEKLS8vCi0vLyBDYXZlYXQgZW1wdG9yLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1BTFdB
WVNfSU5MSU5FIGF1dG8gY29uc3VtZUxvYWQoY29uc3QgVCogbG9jYXRpb24pCi17Ci0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjxUPjo6dHlwZSBSZXR1cm5lZDsKLSAgICBDb25z
dW1lZDxSZXR1cm5lZD4gcmV0IHsgfTsKLSAgICAvLyBGb3JjZSB0aGUgcmVhZCBvZiBgbG9jYXRp
b25gIHRvIG9jY3VyIGV4YWN0bHkgb25jZSBhbmQgd2l0aG91dCBmdXNpbmcgb3IKLSAgICAvLyBm
b3J3YXJkaW5nIHVzaW5nIHZvbGF0aWxlLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBj
b21waWxlciBjb3VsZAotICAgIC8vIG90aGVyd2lzZSByZW1hdGVyaWFsaXplIG9yIGZpbmQgZXF1
aXZhbGVudCBsb2Fkcywgb3Igc2ltcGx5IGZvcndhcmQgZnJvbQotICAgIC8vIGEgcHJldmlvdXMg
b25lLCBhbmQgbG9zZSB0aGUgZGVwZW5kZW5jeSB3ZSdyZSB0cnlpbmcgc28gaGFyZCB0bwotICAg
IC8vIGNyZWF0ZS4gUHJldmVudCB0ZWFyaW5nIGJ5IHVzaW5nIGFuIGF0b21pYywgYnV0IGxldCBp
dCBtb3ZlIGFyb3VuZCBieQotICAgIC8vIHVzaW5nIHJlbGF4ZWQuIFdlIGhhdmUgYXQgbGVhc3Qg
YSBtZW1vcnkgZmVuY2UgYWZ0ZXIgdGhpcyB3aGljaCBwcmV2ZW50cwotICAgIC8vIHRoZSBsb2Fk
IGZyb20gbW92aW5nIHRvbyBtdWNoLgotICAgIHJldC52YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3Qgdm9sYXRpbGUgc3RkOjphdG9taWM8UmV0dXJuZWQ+Kj4obG9jYXRpb24pLT5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgIHJldC5kZXBlbmRlbmN5ID0gemVyb1dpdGhD
b25zdW1lRGVwZW5kZW5jeShyZXQudmFsdWUpOwotICAgIHJldHVybiByZXQ7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIFQqIGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5KQoreworI2lmIENQVShBUk02NCkgfHwgQ1BVKEFSTSkKKyAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpICsgZGVwZW5kZW5jeSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShkZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gcG9pbnRlcjsK
KyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpBdG9taWM7Ci11
c2luZyBXVEY6OkNvbnN1bWVEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpjb25zdW1lTG9hZDsKK3Vz
aW5nIFdURjo6RGVwZW5kZW5jeTsKK3VzaW5nIFdURjo6RGVwZW5kZW5jeVdpdGg7Cit1c2luZyBX
VEY6OlRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOwordXNpbmcgV1RGOjpjb25zdW1lOwordXNp
bmcgV1RGOjpkZXBlbmRlbmN5OwordXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKK3VzaW5nIFdU
Rjo6bnVsbERlcGVuZGVuY3k7CiAKICNlbmRpZiAvLyBBdG9taWNzX2gKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCShy
ZXZpc2lvbiAyMTM1ODgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTMgKzQwLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdG1hcFNpemU7
CiAgICAgfQogCi0gICAgYm9vbCBnZXQoc2l6ZV90KSBjb25zdDsKKyAgICBib29sIGdldChzaXpl
X3QsIERlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5jeSgpKSBjb25zdDsKICAgICB2b2lkIHNldChz
aXplX3QpOwogICAgIHZvaWQgc2V0KHNpemVfdCwgYm9vbCk7CiAgICAgYm9vbCB0ZXN0QW5kU2V0
KHNpemVfdCk7CiAgICAgYm9vbCB0ZXN0QW5kQ2xlYXIoc2l6ZV90KTsKLSAgICBib29sIGNvbmN1
cnJlbnRUZXN0QW5kU2V0KHNpemVfdCk7Ci0gICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZENsZWFy
KHNpemVfdCk7CisgICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZFNldChzaXplX3QsIERlcGVuZGVu
Y3kgPSBudWxsRGVwZW5kZW5jeSgpLCBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZCA9IFRyYW5z
YWN0aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpOworICAgIGJvb2wgY29uY3VycmVudFRlc3RB
bmRDbGVhcihzaXplX3QsIERlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5jeSgpLCBUcmFuc2FjdGlv
bkFib3J0TGlrZWxpaG9vZCA9IFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpOwog
ICAgIHNpemVfdCBuZXh0UG9zc2libHlVbnNldChzaXplX3QpIGNvbnN0OwogICAgIHZvaWQgY2xl
YXIoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7CkBAIC05MSw5ICs5MSw5IEBAIGlubGlu
ZSBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpCaXQKIH0KIAogdGVtcGxhdGU8c2l6ZV90
IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgotaW5saW5lIGJvb2wgQml0bWFwPGJpdG1h
cFNpemUsIFdvcmRUeXBlPjo6Z2V0KHNpemVfdCBuKSBjb25zdAoraW5saW5lIGJvb2wgQml0bWFw
PGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Z2V0KHNpemVfdCBuLCBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3kpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEhKGJpdHNbbiAvIHdvcmRTaXplXSAmIChvbmUgPDwg
KG4gJSB3b3JkU2l6ZSkpKTsKKyAgICByZXR1cm4gISEoYml0c1tuIC8gd29yZFNpemUgKyBkZXBl
bmRlbmN5XSAmIChvbmUgPDwgKG4gJSB3b3JkU2l6ZSkpKTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90
IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgpAQCAtMTMyLDMzICsxMzIsMzcgQEAgaW5s
aW5lIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPgogfQogCiB0ZW1wbGF0ZTxzaXpl
X3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Ci1pbmxpbmUgYm9vbCBCaXRtYXA8Yml0
bWFwU2l6ZSwgV29yZFR5cGU+Ojpjb25jdXJyZW50VGVzdEFuZFNldChzaXplX3QgbikKK0FMV0FZ
U19JTkxJTkUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpjb25jdXJyZW50VGVz
dEFuZFNldChzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBUcmFuc2FjdGlvbkFib3J0
TGlrZWxpaG9vZCBhYm9ydExpa2VsaWhvb2QpCiB7CiAgICAgV29yZFR5cGUgbWFzayA9IG9uZSA8
PCAobiAlIHdvcmRTaXplKTsKICAgICBzaXplX3QgaW5kZXggPSBuIC8gd29yZFNpemU7Ci0gICAg
V29yZFR5cGUqIHdvcmRQdHIgPSBiaXRzLmRhdGEoKSArIGluZGV4OwotICAgIFdvcmRUeXBlIG9s
ZFZhbHVlOwotICAgIGRvIHsKLSAgICAgICAgb2xkVmFsdWUgPSAqd29yZFB0cjsKLSAgICAgICAg
aWYgKG9sZFZhbHVlICYgbWFzaykKKyAgICBXb3JkVHlwZSogZGF0YSA9IGJpdHMuZGF0YSgpICsg
aW5kZXggKyBkZXBlbmRlbmN5OworICAgIHJldHVybiAhYml0d2lzZV9jYXN0PEF0b21pYzxXb3Jk
VHlwZT4qPihkYXRhKS0+dHJhbnNhY3Rpb25SZWxheGVkKAorICAgICAgICBbJl0gKFdvcmRUeXBl
JiB2YWx1ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICBpZiAodmFsdWUgJiBtYXNrKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFsdWUg
fD0gbWFzazsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gd2hpbGUgKCFhdG9taWND
b21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCh3b3JkUHRyLCBvbGRWYWx1ZSwgc3RhdGljX2Nhc3Q8
V29yZFR5cGU+KG9sZFZhbHVlIHwgbWFzaykpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0sCisgICAgICAgIGFib3J0TGlrZWxpaG9vZCk7CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRt
YXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KLWlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OmNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIoc2l6ZV90IG4pCitBTFdBWVNfSU5M
SU5FIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRD
bGVhcihzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBUcmFuc2FjdGlvbkFib3J0TGlr
ZWxpaG9vZCBhYm9ydExpa2VsaWhvb2QpCiB7CiAgICAgV29yZFR5cGUgbWFzayA9IG9uZSA8PCAo
biAlIHdvcmRTaXplKTsKICAgICBzaXplX3QgaW5kZXggPSBuIC8gd29yZFNpemU7Ci0gICAgV29y
ZFR5cGUqIHdvcmRQdHIgPSBiaXRzLmRhdGEoKSArIGluZGV4OwotICAgIFdvcmRUeXBlIG9sZFZh
bHVlOwotICAgIGRvIHsKLSAgICAgICAgb2xkVmFsdWUgPSAqd29yZFB0cjsKLSAgICAgICAgaWYg
KCEob2xkVmFsdWUgJiBtYXNrKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IHdo
aWxlICghYXRvbWljQ29tcGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQod29yZFB0ciwgb2xkVmFsdWUs
IHN0YXRpY19jYXN0PFdvcmRUeXBlPihvbGRWYWx1ZSAmIH5tYXNrKSkpOwotICAgIHJldHVybiB0
cnVlOworICAgIFdvcmRUeXBlKiBkYXRhID0gYml0cy5kYXRhKCkgKyBpbmRleCArIGRlcGVuZGVu
Y3k7CisgICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8QXRvbWljPFdvcmRUeXBlPio+KGRhdGEpLT50
cmFuc2FjdGlvblJlbGF4ZWQoCisgICAgICAgIFsmXSAoV29yZFR5cGUmIHZhbHVlKSAtPiBib29s
IHsKKyAgICAgICAgICAgIGlmICghKHZhbHVlICYgbWFzaykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YWx1ZSAmPSB+bWFzazsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorICAgICAgICBhYm9ydExpa2VsaWhv
b2QpOwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCShyZXZpc2lvbiAyMTM1ODgpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEwICs1MCwxNSBA
QCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgbG9ja0Zhc3QoQXRvbWljPExvY2tUeXBl
PiYgbG9jaykKICAgICB7Ci0gICAgICAgIExvY2tUeXBlIG9sZFZhbHVlID0gbG9jay5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgICAgICBpZiAob2xkVmFsdWUgJiBpc0hlbGRC
aXQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBsb2NrLmNvbXBh
cmVFeGNoYW5nZVdlYWsob2xkVmFsdWUsIG9sZFZhbHVlIHwgaXNIZWxkQml0LCBzdGQ6Om1lbW9y
eV9vcmRlcl9hY3F1aXJlKTsKKyAgICAgICAgcmV0dXJuIGxvY2sudHJhbnNhY3Rpb24oCisgICAg
ICAgICAgICBbJl0gKExvY2tUeXBlJiB2YWx1ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
aWYgKHZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgdmFsdWUgfD0gaXNIZWxkQml0OworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHN0ZDo6bWVtb3J5X29yZGVy
X2FjcXVpcmUsCisgICAgICAgICAgICBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZDo6VW5saWtl
bHkpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgdm9pZCBsb2NrKEF0b21pYzxMb2NrVHlwZT4m
IGxvY2spCkBAIC04MCwxMCArODUsMTUgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBib29s
IHVubG9ja0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKICAgICB7Ci0gICAgICAgIExvY2tU
eXBlIG9sZFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAg
ICAgICBpZiAoKG9sZFZhbHVlICYgbWFzaykgIT0gaXNIZWxkQml0KQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZh
bHVlLCBvbGRWYWx1ZSAmIH5pc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwor
ICAgICAgICByZXR1cm4gbG9jay50cmFuc2FjdGlvbigKKyAgICAgICAgICAgIFsmXSAoTG9ja1R5
cGUmIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAoKHZhbHVlICYgbWFzaykg
IT0gaXNIZWxkQml0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgdmFsdWUgJj0gfmlzSGVsZEJpdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
LAorICAgICAgICAgICAgVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6OlVubGlrZWx5KTsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2sp
CkBAIC0yMDYsMTAgKzIxNiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGxvY2sudHJhbnNhY3Rpb24o
Ci0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKExvY2tUeXBlJiB2YWx1ZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdIChMb2NrVHlwZSYgdmFsdWUpIC0+IGJvb2wgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICY9IH5tYXNrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSB8PSBoYXNQYXJrZWRCaXQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEJhcmdpbmdPcHBvcnR1bml0eTsKICAgICAgICAgICAg
ICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDYgKzc1NywxMCBAQAogI2Rl
ZmluZSBFTkFCTEVfQ09OQ1VSUkVOVF9KUyAxCiAjZW5kaWYKIAorI2lmIENQVShBUk02NCkKKyNk
ZWZpbmUgSEFWRV9MTF9TQyAxCisjZW5kaWYgLy8gQ1BVKEFSTTY0KQorCiAvKiBUaGlzIGNvbnRy
b2xzIHdoZXRoZXIgQjMgaXMgYnVpbHQuIEIzIGlzIG5lZWRlZCBmb3IgRlRMIEpJVCBhbmQgV2Vi
QXNzZW1ibHkgKi8KICNpZiBFTkFCTEUoRlRMX0pJVCkgfHwgRU5BQkxFKFdFQkFTU0VNQkxZKQog
I2RlZmluZSBFTkFCTEVfQjNfSklUIDEKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU5NykKKysrIFRvb2xzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE3LTAzLTA4ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGIHNob3VsZCBtYWtlIGl0IHN1cGVy
IGVhc3kgdG8gZG8gQVJNIGNvbmN1cnJlbmN5IHRyaWNrcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MzAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIHZhc3RseSBzaW1wbGlmaWVz
IHRoZSBjb25zdW1lIEFQSS4gVGhlIG5ldyBBUEkgaXMgdGhvcm91Z2hseSB0ZXN0ZWQgYnkgYmVp
bmcgdXNlZAorICAgICAgICBpbiB0aGUgR0MncyBndXRzLiBJIHRoaW5rIHRoYXQgdW5pdCB0ZXN0
cyBhcmUgYSBwYWluIHRvIG1haW50YWluLCBzbyB3ZSBzaG91bGRuJ3QgaGF2ZQorICAgICAgICB0
aGVtIHVubGVzcyB3ZSBhcmUgbGVnaXRpbWF0ZWx5IHdvcnJpZWQgYWJvdXQgY292ZXJhZ2UuIFdl
J3JlIG5vdCBpbiB0aGlzIGNhc2UuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbnN1
bWUuY3BwOiBSZW1vdmVkLgorCiAyMDE3LTAzLTA4ICBNYXR0IFJhamNhICA8bXJhamNhQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdXBkYXRpbmcgYXV0b3BsYXkgcG9saWNp
ZXMgYWZ0ZXIgYSBwYWdlIGhhcyBiZWVuIGxvYWRlZC4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjEzNTg4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCBzZXQoVGVzdFdURl9T
T1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHNDb250cm9sbGVyLmNwcAogICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9BdG9taWNTdHJpbmcuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAotICAgICR7VEVTVFdF
QktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9Db25zdW1lLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9Dcm9zc1RocmVhZFRhc2suY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV1RGL0NTdHJpbmcuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMv
V1RGL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMTM1ODgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcg
KzQ5Miw2IEBACiAJCUFENTdBQzIxMURBNzQ2NUIwMEZGMUJERSAvKiBEaWRSZW1vdmVGcmFtZUZy
b21IaWVhcmNoeUluUGFnZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFENTdBQzFGMURBNzQ2NEQwMEZGMUJERSAvKiBEaWRSZW1vdmVGcmFt
ZUZyb21IaWVhcmNoeUluUGFnZUNhY2hlLmNwcCAqLzsgfTsKIAkJQUQ1N0FDMjIxREE3NDY2RTAw
RkYxQkRFIC8qIG1hbnktaWZyYW1lcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENTdBQzFEMURBNzQ2MzgwMEZGMUJERSAvKiBtYW55
LWlmcmFtZXMuaHRtbCAqLzsgfTsKIAkJQUQ3QzQzNEQxREQyQTU0RTAwMjY4ODhCIC8qIEV4cGVj
dGVkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFE
N0M0MzRDMUREMkE1NDcwMDI2ODg4QiAvKiBFeHBlY3RlZC5jcHAgKi87IH07Ci0JCUFEQ0VCQkE2
MUQ5QUUyMjkwMDJFMjgzQSAvKiBDb25zdW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEQ0VCQkE1MUQ5OUQ0Q0YwMDJFMjgzQSAvKiBDb25zdW1l
LmNwcCAqLzsgfTsKIAkJQjU1QUQxRDUxNzlGM0IzMDAwQUMxNDk0IC8qIFByZXZlbnRJbWFnZUxv
YWRXaXRoQXV0b1Jlc2l6aW5nX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVBRDFEMzE3OUYzQUJGMDBBQzE0OTQgLyogUHJldmVudElt
YWdlTG9hZFdpdGhBdXRvUmVzaXppbmdfQnVuZGxlLmNwcCAqLzsgfTsKIAkJQjU1RjExQjcxNTE3
RDAzMzAwOTE1OTE2IC8qIGF0dHJpYnV0ZWRTdHJpbmdDdXN0b21Gb250Lmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RjExQjAxNTE3
QTJDNDAwOTE1OTE2IC8qIGF0dHJpYnV0ZWRTdHJpbmdDdXN0b21Gb250Lmh0bWwgKi87IH07CiAJ
CUI1NUYxMUJFMTUxOTFBMDYwMDkxNTkxNiAvKiBBaGVtLnR0ZiBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVGMTFCOTE1MTkxNkU2MDA5MTU5
MTYgLyogQWhlbS50dGYgKi87IH07CkBAIC0xMjQ3LDcgKzEyNDYsNiBAQAogCQlBRDU3QUMxRTFE
QTc0NjREMDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZV9C
dW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlkUmVtb3Zl
RnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZV9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBRDU3QUMxRjFEQTc0NjREMDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVG
cm9tSGllYXJjaHlJblBhZ2VDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaWRSZW1vdmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNhY2hlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3QzQzNEMxREQyQTU0NzAwMjY4ODhCIC8qIEV4cGVj
dGVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4cGVjdGVkLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQURDRUJCQTUxRDk5RDRDRjAwMkUyODNB
IC8qIENvbnN1bWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29u
c3VtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI0MDM5RjlDMTVFNkQ4QjMw
MDcyNTVENiAvKiBNYXRoRXh0cmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hdGhFeHRyYXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVB
RDFEMTE3OUYzMzY2MDBBQzE0OTQgLyogUHJldmVudEltYWdlTG9hZFdpdGhBdXRvUmVzaXppbmcu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQcmV2ZW50SW1hZ2VMb2FkV2l0aEF1dG9SZXNpemlu
Zy5tbTsgcGF0aCA9IFdlYktpdDJPYmpDL1ByZXZlbnRJbWFnZUxvYWRXaXRoQXV0b1Jlc2l6aW5n
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVBRDFEMzE3OUYzQUJGMDBBQzE0
OTQgLyogUHJldmVudEltYWdlTG9hZFdpdGhBdXRvUmVzaXppbmdfQnVuZGxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByZXZlbnRJbWFnZUxvYWRXaXRoQXV0b1Jl
c2l6aW5nX0J1bmRsZS5jcHA7IHBhdGggPSBXZWJLaXQyT2JqQy9QcmV2ZW50SW1hZ2VMb2FkV2l0
aEF1dG9SZXNpemluZ19CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjAyNSw3ICsyMDIzLDYgQEAKIAkJCQlFNDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEgLyogQmxvb21G
aWx0ZXIuY3BwICovLAogCQkJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJp
dGhtZXRpY09wZXJhdGlvbnMuY3BwICovLAogCQkJCTBGRUFFMzY3MUI3RDE5Q0IwMENFMTdGMiAv
KiBDb25kaXRpb24uY3BwICovLAotCQkJCUFEQ0VCQkE1MUQ5OUQ0Q0YwMDJFMjgzQSAvKiBDb25z
dW1lLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRU
YXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAg
Ki8sCiAJCQkJN0FBMDIxQkExQUIwOUVBNzAwNTI5NTNGIC8qIERhdGVNYXRoLmNwcCAqLywKQEAg
LTI1OTQsNyArMjU5MSw2IEBACiAJCQkJN0M4M0RFRkUxRDBBNTkwQzAwRkVCQ0YzIC8qIE5ha2Vk
UHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzMUMxRDhFMURGOEVGNzIwMDZFOTc5RiAvKiBM
RUJEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNG
MyAvKiBPcHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBRENFQkJBNjFEOUFFMjI5MDAy
RTI4M0EgLyogQ29uc3VtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDdDNDM0RDFERDJBNTRF
MDAyNjg4OEIgLyogRXhwZWN0ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDIxRDBB
NTkwQzAwRkVCQ0YzIC8qIE9TT2JqZWN0UHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNE
RjU5MUQwQTU5MEMwMEZFQkNGMyAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uc3VtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uc3VtZS5jcHAJKHJldmlzaW9uIDIx
MzU4OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbnN1bWUuY3BwCShub25l
eGlzdGVudCkKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDx0aHJlYWQ+
Ci0jaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1ORVZF
Ul9JTkxJTkUgYXV0byB0ZXN0Q29uc3VtZShjb25zdCBUKiBsb2NhdGlvbikKLXsKLSAgICBXVEY6
OmNvbXBpbGVyRmVuY2UoKTsgLy8gUGFyYW5vaWQgdGVzdGluZy4KLSAgICBhdXRvIHJldCA9IFdU
Rjo6Y29uc3VtZUxvYWQobG9jYXRpb24pOwotICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOyAvLyBQ
YXJhbm9pZCB0ZXN0aW5nLgotICAgIHJldHVybiByZXQ7Ci19Ci0KLW5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJIHsKLQotVEVTVChXVEYsIENvbnN1bWVpOCkKLXsKLSAgICB1aW50OF90IGk4ID0gNDI7
Ci0gICAgYXV0byBpOF9jb25zdW1lZCA9IHRlc3RDb25zdW1lKCZpOCk7Ci0gICAgQVNTRVJUX0VR
KGk4X2NvbnN1bWVkLnZhbHVlLCA0MnUpOwotICAgIEFTU0VSVF9FUShpOF9jb25zdW1lZC5kZXBl
bmRlbmN5LCAwdSk7Ci19Ci0KLVRFU1QoV1RGLCBDb25zdW1laTE2KQotewotICAgIHVpbnQxNl90
IGkxNiA9IDQyOwotICAgIGF1dG8gaTE2X2NvbnN1bWVkID0gdGVzdENvbnN1bWUoJmkxNik7Ci0g
ICAgQVNTRVJUX0VRKGkxNl9jb25zdW1lZC52YWx1ZSwgNDJ1KTsKLSAgICBBU1NFUlRfRVEoaTE2
X2NvbnN1bWVkLmRlcGVuZGVuY3ksIDB1KTsKLX0KLQotVEVTVChXVEYsIENvbnN1bWVpMzIpCi17
Ci0gICAgdWludDMyX3QgaTMyID0gNDI7Ci0gICAgYXV0byBpMzJfY29uc3VtZWQgPSB0ZXN0Q29u
c3VtZSgmaTMyKTsKLSAgICBBU1NFUlRfRVEoaTMyX2NvbnN1bWVkLnZhbHVlLCA0MnUpOwotICAg
IEFTU0VSVF9FUShpMzJfY29uc3VtZWQuZGVwZW5kZW5jeSwgMHUpOwotfQotCi1URVNUKFdURiwg
Q29uc3VtZWk2NCkKLXsKLSAgICB1aW50NjRfdCBpNjQgPSA0MjsKLSAgICBhdXRvIGk2NF9jb25z
dW1lZCA9IHRlc3RDb25zdW1lKCZpNjQpOwotICAgIEFTU0VSVF9FUShpNjRfY29uc3VtZWQudmFs
dWUsIDQydSk7Ci0gICAgQVNTRVJUX0VRKGk2NF9jb25zdW1lZC5kZXBlbmRlbmN5LCAwdSk7Ci19
Ci0KLVRFU1QoV1RGLCBDb25zdW1lZjMyKQotewotICAgIGZsb2F0IGYzMiA9IDQyLmY7Ci0gICAg
YXV0byBmMzJfY29uc3VtZWQgPSB0ZXN0Q29uc3VtZSgmZjMyKTsKLSAgICBBU1NFUlRfRVEoZjMy
X2NvbnN1bWVkLnZhbHVlLCA0Mi5mKTsKLSAgICBBU1NFUlRfRVEoZjMyX2NvbnN1bWVkLmRlcGVu
ZGVuY3ksIDB1KTsKLX0KLQotVEVTVChXVEYsIENvbnN1bWVmNjQpCi17Ci0gICAgZG91YmxlIGY2
NCA9IDQyLjsKLSAgICBhdXRvIGY2NF9jb25zdW1lZCA9IHRlc3RDb25zdW1lKCZmNjQpOwotICAg
IEFTU0VSVF9FUShmNjRfY29uc3VtZWQudmFsdWUsIDQyLik7Ci0gICAgQVNTRVJUX0VRKGY2NF9j
b25zdW1lZC5kZXBlbmRlbmN5LCAwdSk7Ci19Ci0KLXN0YXRpYyBpbnQqIGdsb2JhbDsKLQotVEVT
VChXVEYsIENvbnN1bWVHbG9iYWxQdHIpCi17Ci0gICAgYXV0byogcHRyID0gJmdsb2JhbDsKLSAg
ICBhdXRvIHB0cl9jb25zdW1lZCA9IHRlc3RDb25zdW1lKCZwdHIpOwotICAgIEFTU0VSVF9FUShw
dHJfY29uc3VtZWQudmFsdWUsICZnbG9iYWwpOwotICAgIEFTU0VSVF9FUShwdHJfY29uc3VtZWQu
ZGVwZW5kZW5jeSwgMHUpOwotfQotCi1zdGF0aWMgaW50KiBnbG9iYWxBcnJheVsxMjhdOwotCi1U
RVNUKFdURiwgQ29uc3VtZUdsb2JhbEFycmF5UHRyKQotewotICAgIGF1dG8qIHB0ciA9ICZnbG9i
YWxBcnJheVs2NF07Ci0gICAgYXV0byBwdHJfY29uc3VtZWQgPSB0ZXN0Q29uc3VtZSgmcHRyKTsK
LSAgICBBU1NFUlRfRVEocHRyX2NvbnN1bWVkLnZhbHVlLCAmZ2xvYmFsQXJyYXlbNjRdKTsKLSAg
ICBBU1NFUlRfRVEocHRyX2NvbnN1bWVkLmRlcGVuZGVuY3ksIDB1KTsKLX0KLQotVEVTVChXVEYs
IENvbnN1bWVTdGFja1B0cikKLXsKLSAgICBjaGFyKiBoZWxsbyA9IG51bGxwdHI7Ci0gICAgYXV0
byogc3RhY2sgPSAmaGVsbG87Ci0gICAgYXV0byBzdGFja19jb25zdW1lZCA9IHRlc3RDb25zdW1l
KCZzdGFjayk7Ci0gICAgQVNTRVJUX0VRKHN0YWNrX2NvbnN1bWVkLnZhbHVlLCAmaGVsbG8pOwot
ICAgIEFTU0VSVF9FUShzdGFja19jb25zdW1lZC5kZXBlbmRlbmN5LCAwdSk7Ci19Ci0KLVRFU1Qo
V1RGLCBDb25zdW1lV2l0aFRocmVhZCkKLXsKLSAgICBib29sIHJlYWR5ID0gZmFsc2U7Ci0gICAg
Y29uc3RleHByIHNpemVfdCBudW0gPSAxMDI0OwotICAgIHVpbnQzMl90KiB2ZWMgPSBuZXcgdWlu
dDMyX3RbbnVtXTsKLSAgICBzdGQ6OnRocmVhZCB0KFsmXSgpIHsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgIT0gbnVtOyArK2kpCi0gICAgICAgICAgICB2ZWNbaV0gPSBpICogMjsKLSAg
ICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgcmVhZHkgPSB0cnVlOwotICAg
IH0pOwotICAgIGRvIHsKLSAgICAgICAgYXV0byBzdGFja19jb25zdW1lZCA9IHRlc3RDb25zdW1l
KCZyZWFkeSk7Ci0gICAgICAgIGlmIChzdGFja19jb25zdW1lZC52YWx1ZSkgewotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbnVtOyArK2kpCi0gICAgICAgICAgICAgICAgQVNT
RVJUX0VRKHZlY1tpICsgc3RhY2tfY29uc3VtZWQuZGVwZW5kZW5jeV0sIGkgKiAyKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAodHJ1ZSk7Ci0gICAgdC5qb2lu
KCk7Ci0gICAgZGVsZXRlW10gdmVjOwotfQotfQo=
</data>
<flag name="review"
          id="325445"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303899</attachid>
            <date>2017-03-08 22:33:43 -0800</date>
            <delta_ts>2017-03-08 22:35:05 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>51209</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE3LTAzLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBtYWtlIGl0IHN1cGVyIGVhc3kgdG8gZG8gQVJNIGNvbmN1cnJlbmN5IHRyaWNr
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MzAw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZXMgYSBidW5jaCBvZiBHQyBob3QgcGF0aHMgdG8gdXNlIG5ldyBjb25jdXJy
ZW5jeSBBUElzIHRoYXQgbGVhZCB0byBvcHRpbWFsCisgICAgICAgIGNvZGUgb24gYm90aCB4ODYg
KGZ1bGx5IGxldmVyYWdlIFRTTywgdHJhbnNhY3Rpb25zIGJlY29tZSBDQVMgbG9vcHMpIGFuZCBB
Uk0gKHVzZQorICAgICAgICBkZXBlbmRlbmN5IGNoYWlucyBmb3IgZmVuY2luZywgdHJhbnNhY3Rp
b25zIGJlY29tZSBMTC9TQyBsb29wcykuIFdoaWxlIGluc3BlY3RpbmcgdGhlCisgICAgICAgIG1h
Y2hpbmUgY29kZSwgSSBmb3VuZCBvdGhlciBvcHBvcnR1bml0aWVzIGZvciBpbXByb3ZlbWVudCwg
bGlrZSBpbmxpbmluZyB0aGUgImFtIEkKKyAgICAgICAgbWFya2VkIiBwYXJ0IG9mIHRoZSBtYXJr
aW5nIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6
OkhlYXA6OnNldEdDRGlkSklUKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkhlYXA6OnRlc3RBbmRTZXRNYXJrZWQpOgorICAgICAgICAqIGhlYXAvTGFyZ2VB
bGxvY2F0aW9uLmg6CisgICAgICAgIChKU0M6OkxhcmdlQWxsb2NhdGlvbjo6aXNNYXJrZWQpOgor
ICAgICAgICAoSlNDOjpMYXJnZUFsbG9jYXRpb246OmlzTWFya2VkQ29uY3VycmVudGx5KToKKyAg
ICAgICAgKEpTQzo6TGFyZ2VBbGxvY2F0aW9uOjphYm91dFRvTWFyayk6CisgICAgICAgIChKU0M6
OkxhcmdlQWxsb2NhdGlvbjo6dGVzdEFuZFNldE1hcmtlZCk6CisgICAgICAgICogaGVhcC9NYXJr
ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhE
ZXBlbmRlbmN5KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkQ29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OmlzTWFya2VkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OnRlc3RBbmRTZXRNYXJrZWQpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kU2xvdyk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjphcHBlbmRIaWRkZW5TbG93KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFw
cGVuZEhpZGRlblNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtl
ZEFuZEFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVu
ZFVuYmFycmllcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVu
ZEhpZGRlbik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmRVbmJhcnJpZXJlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRI
aWRkZW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmRWYWx1ZXNIaWRkZW4pOgorICAgICAgICAqIHJ1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0
dGVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbCk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5oOgorCiAyMDE3LTAzLTA3ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAg
ICAgICBTb21lIHBsYXRmb3JtcyB3b24ndCBiZSBhYmxlIHRvIGNyZWF0ZSBhIEdQVURldmljZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMzU4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODUzLDkgKzE4NTMsMTAgQEAgdm9pZCBIZWFwOjpoYW5kbGVOZWVkRmluYWxpemUoKQogdm9pZCBI
ZWFwOjpzZXRHQ0RpZEpJVCgpCiB7CiAgICAgbV93b3JsZFN0YXRlLnRyYW5zYWN0aW9uKAotICAg
ICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0ZSkgeworICAgICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0
ZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZSAmIHN0b3BwZWRC
aXQpOwogICAgICAgICAgICAgc3RhdGUgfD0gZ2NEaWRKSVRCaXQ7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsOCArOTMsOCBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgSGVhcDo6dGVzdEFuZFNldE1hcmtlCiAgICAgaWYgKGNlbGwtPmlz
TGFyZ2VBbGxvY2F0aW9uKCkpCiAgICAgICAgIHJldHVybiBjZWxsLT5sYXJnZUFsbG9jYXRpb24o
KS50ZXN0QW5kU2V0TWFya2VkKCk7CiAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFy
a2VkQmxvY2soKTsKLSAgICBibG9jay5hYm91dFRvTWFyayhtYXJraW5nVmVyc2lvbik7Ci0gICAg
cmV0dXJuIGJsb2NrLnRlc3RBbmRTZXRNYXJrZWQoY2VsbCk7CisgICAgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5ID0gYmxvY2suYWJvdXRUb01hcmsobWFya2luZ1ZlcnNpb24pOworICAgIHJldHVybiBi
bG9jay50ZXN0QW5kU2V0TWFya2VkKGNlbGwsIGRlcGVuZGVuY3kpOwogfQogCiBBTFdBWVNfSU5M
SU5FIHNpemVfdCBIZWFwOjpjZWxsU2l6ZShjb25zdCB2b2lkKiByYXdDZWxsKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGFyZ2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDIx
MzU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xhcmdlQWxsb2NhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlz
TmV3bHlBbGxvY2F0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzTmV3bHlBbGxvY2F0ZWQ7IH0KICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNN
YXJrZWQoSGVhcENlbGwqKSB7IHJldHVybiBtX2lzTWFya2VkLmxvYWQoc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsYXhlZCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50
bHkoSGVhcFZlcnNpb24sIEhlYXBDZWxsKikgeyByZXR1cm4gbV9pc01hcmtlZC5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzTWFya2Vk
KEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc01hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3kpIHsgcmV0dXJuIGlzTWFya2VkKCk7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24s
IEhlYXBDZWxsKikgeyByZXR1cm4gaXNNYXJrZWQoKTsgfQogICAgIGJvb2wgaXNMaXZlKCkgeyBy
ZXR1cm4gaXNNYXJrZWQoKSB8fCBpc05ld2x5QWxsb2NhdGVkKCk7IH0KICAgICAKICAgICBib29s
IGhhc1ZhbGlkQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRDZWxsOyB9CkBAIC0xMDks
NyArMTEwLDcgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMm
IGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KICAgICAKLSAgICB2
b2lkIGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uKSB7IH0KKyAgICBEZXBlbmRlbmN5IGFib3V0VG9N
YXJrKEhlYXBWZXJzaW9uKSB7IHJldHVybiBudWxsRGVwZW5kZW5jeSgpOyB9CiAgICAgCiAgICAg
QUxXQVlTX0lOTElORSBib29sIHRlc3RBbmRTZXRNYXJrZWQoKQogICAgIHsKQEAgLTEyMCw3ICsx
MjEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IG1faXNNYXJrZWQuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKGZhbHNlLCB0cnVlKTsKICAgICB9Ci0g
ICAgQUxXQVlTX0lOTElORSBib29sIHRlc3RBbmRTZXRNYXJrZWQoSGVhcENlbGwqKSB7IHJldHVy
biB0ZXN0QW5kU2V0TWFya2VkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdGVzdEFuZFNl
dE1hcmtlZChIZWFwQ2VsbCosIERlcGVuZGVuY3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29k
ID0gVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6Okxpa2VseSkgeyByZXR1cm4gdGVzdEFuZFNl
dE1hcmtlZCgpOyB9CiAgICAgdm9pZCBjbGVhck1hcmtlZCgpIHsgbV9pc01hcmtlZC5zdG9yZShm
YWxzZSk7IH0KICAgICAKICAgICB2b2lkIG5vdGVNYXJrZWQoKSB7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjEzNTg4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MjU4LDcgKzI1OCw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsK
ICAgICBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBjb25zdCB2b2lk
Kik7CiAgICAgYm9vbCBpc01hcmtlZENvbmN1cnJlbnRseShIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbiwgY29uc3Qgdm9pZCopOwotICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lk
Kik7CisgICAgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKiwgRGVwZW5kZW5jeSk7CisgICAgYm9v
bCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqLCBEZXBlbmRlbmN5LCBUcmFuc2FjdGlvbkFi
b3J0TGlrZWxpaG9vZCA9IFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpOwogICAg
ICAgICAKICAgICBib29sIGlzQXRvbShjb25zdCB2b2lkKik7CiAgICAgdm9pZCBjbGVhck1hcmtl
ZChjb25zdCB2b2lkKik7CkBAIC0yNzgsMTUgKzI3OSwxNSBAQCBwdWJsaWM6CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIGFyZU1hcmtzU3RhbGUoKTsKICAgICBib29sIGFyZU1hcmtzU3Rh
bGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgIHN0cnVjdCBNYXJrc1dpdGhEZXBl
bmRlbmN5IHsKLSAgICAgICAgYm9vbCBhcmVTdGFsZTsKLSAgICAgICAgQ29uc3VtZURlcGVuZGVu
Y3kgZGVwZW5kZW5jeTsKLSAgICB9OwotICAgIE1hcmtzV2l0aERlcGVuZGVuY3kgYXJlTWFya3NT
dGFsZVdpdGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKKyAgICBEZXBl
bmRlbmN5V2l0aDxib29sPiBhcmVNYXJrc1N0YWxlV2l0aERlcGVuZGVuY3koSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24pOwogICAgIAotICAgIHZvaWQgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24pOworICAgIERlcGVuZGVuY3kgYWJvdXRUb01hcmsoSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24pOwogICAgICAgICAKLSAgICB2b2lkIGFzc2VydE1hcmtzTm90U3RhbGUo
KTsKKyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICB2b2lkIGFzc2VydE1hcmtzTm90U3RhbGUoKSB7
IH0KKyNlbHNlCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhc3NlcnRNYXJrc05vdFN0YWxl
KCk7CisjZW5kaWYKICAgICAgICAgCiAgICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc0Rlc3RydWN0aW9uOyB9CiAgICAgCkBAIC0zMDYsNyArMzA3LDcgQEAg
cHJpdmF0ZToKICAgICBNYXJrZWRCbG9jayhWTSYsIEhhbmRsZSYpOwogICAgIEF0b20qIGF0b21z
KCk7CiAgICAgICAgIAotICAgIHZvaWQgYWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFib3V0VG9NYXJrU2xvdyhI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgdm9pZCBjbGVhckhhc0FueU1hcmtlZCgp
OwogICAgIAogICAgIHZvaWQgbm90ZU1hcmtlZFNsb3coKTsKQEAgLTQ5MSwyOCArNDkyLDIwIEBA
IGlubGluZSBib29sIE1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxlKEgKICAgICByZXR1cm4gbWFy
a2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKIH0KIAotQUxXQVlTX0lOTElORSBNYXJr
ZWRCbG9jazo6TWFya3NXaXRoRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdp
dGhEZXBlbmRlbmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQorQUxXQVlTX0lOTElORSBE
ZXBlbmRlbmN5V2l0aDxib29sPiBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRl
bmN5KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewotICAgIGF1dG8gY29uc3VtZWQgPSBj
b25zdW1lTG9hZCgmbV9tYXJraW5nVmVyc2lvbik7Ci0gICAgTWFya3NXaXRoRGVwZW5kZW5jeSBy
ZXQ7Ci0gICAgcmV0LmFyZVN0YWxlID0gY29uc3VtZWQudmFsdWUgIT0gbWFya2luZ1ZlcnNpb247
Ci0gICAgcmV0LmRlcGVuZGVuY3kgPSBjb25zdW1lZC5kZXBlbmRlbmN5OwotICAgIHJldHVybiBy
ZXQ7CisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAgcmV0
dXJuIGRlcGVuZGVuY3lXaXRoKGRlcGVuZGVuY3kodmVyc2lvbiksIHZlcnNpb24gIT0gbWFya2lu
Z1ZlcnNpb24pOwogfQogCi1pbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCitpbmxpbmUgRGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6
YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgaWYgKFVOTElL
RUxZKGFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pKSkKKyAgICBhdXRvIHJlc3VsdCA9IGFy
ZU1hcmtzU3RhbGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7CisgICAgaWYgKFVOTElL
RUxZKHJlc3VsdC52YWx1ZSkpCiAgICAgICAgIGFib3V0VG9NYXJrU2xvdyhtYXJraW5nVmVyc2lv
bik7Ci0gICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRl
bmN5OwogfQogCi0jaWYgQVNTRVJUX0RJU0FCTEVECi1pbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6
YXNzZXJ0TWFya3NOb3RTdGFsZSgpCi17Ci19Ci0jZW5kaWYgLy8gQVNTRVJUX0RJU0FCTEVECi0K
IGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc2VydE1hcmtzTm90U3RhbGUoKQog
ewogICAgIGJsb2NrKCkuYXNzZXJ0TWFya3NOb3RTdGFsZSgpOwpAQCAtNTMwLDE2ICs1MjMsMjIg
QEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKEhlYXBWZQogCiBpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6aXNNYXJrZWRDb25jdXJyZW50bHkoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgYXV0byBtYXJrc1dpdGhEZXBlbmRlbmN5ID0g
YXJlTWFya3NTdGFsZVdpdGhEZXBlbmRlbmN5KG1hcmtpbmdWZXJzaW9uKTsKLSAgICBpZiAobWFy
a3NXaXRoRGVwZW5kZW5jeS5hcmVTdGFsZSkKKyAgICBhdXRvIHJlc3VsdCA9IGFyZU1hcmtzU3Rh
bGVXaXRoRGVwZW5kZW5jeShtYXJraW5nVmVyc2lvbik7CisgICAgaWYgKHJlc3VsdC52YWx1ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVy
KHApICsgbWFya3NXaXRoRGVwZW5kZW5jeS5kZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gbV9tYXJr
cy5nZXQoYXRvbU51bWJlcihwKSwgcmVzdWx0LmRlcGVuZGVuY3kpOworfQorCitpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBkZXBlbmRl
bmN5KQoreworICAgIGFzc2VydE1hcmtzTm90U3RhbGUoKTsKKyAgICByZXR1cm4gbV9tYXJrcy5n
ZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJs
b2NrOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIHApCitpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3ksIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kIGFib3J0TGlrZWxpaG9vZCkKIHsKICAgICBh
c3NlcnRNYXJrc05vdFN0YWxlKCk7Ci0gICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRlc3RB
bmRTZXQoYXRvbU51bWJlcihwKSk7CisgICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRlc3RB
bmRTZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSwgYWJvcnRMaWtlbGlob29kKTsKIH0KIAog
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNOZXdseUFsbG9jYXRlZChjb25zdCB2
b2lkKiBwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNw
cAkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNDkgKzIyMiwzNyBAQCB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyCiAgICAgfSB9CiB9CiAKLXZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUgdmFsdWUpCit2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRTbG93KEpTQ2VsbCogY2VsbCwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQogewotICAg
IGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBp
ZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkKLSAgICAgICAgbV9oZWFwU25hcHNo
b3RCdWlsZGVyLT5hcHBlbmRFZGdlKG1fY3VycmVudENlbGwsIHZhbHVlLmFzQ2VsbCgpKTsKLQot
ICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgpKTsKKyAgICAg
ICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmRFZGdlKG1fY3VycmVudENlbGwsIGNlbGwp
OworICAgIAorICAgIGFwcGVuZEhpZGRlblNsb3dJbXBsKGNlbGwsIGRlcGVuZGVuY3kpOwogfQog
Ci12b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZEhpZGRlblNsb3coSlNDZWxsKiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3kpCiB7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgp
KTsKKyAgICBhcHBlbmRIaWRkZW5TbG93SW1wbChjZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAotdm9p
ZCBTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxs
KQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5TbG93SW1wbChK
U0NlbGwqIGNlbGwsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKLSAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgCiAgICAgQVNTRVJUKCFtX2lzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7Ci0gICAgaWYgKCFjZWxsKQotICAgICAgICBy
ZXR1cm47CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICB2YWxpZGF0ZShjZWxsKTsK
ICNlbmRpZgogICAgIAogICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKQotICAgICAg
ICBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsLT5sYXJnZUFsbG9jYXRpb24oKSwg
Y2VsbCk7CisgICAgICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwtPmxhcmdl
QWxsb2NhdGlvbigpLCBjZWxsLCBkZXBlbmRlbmN5KTsKICAgICBlbHNlCi0gICAgICAgIHNldE1h
cmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKGNlbGwtPm1hcmtlZEJsb2NrKCksIGNlbGwpOworICAg
ICAgICBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhjZWxsLT5tYXJrZWRCbG9jaygpLCBj
ZWxsLCBkZXBlbmRlbmN5KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4K
LUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJr
U3RhY2soQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBKU0NlbGwqIGNlbGwpCitBTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKENvbnRh
aW5lclR5cGUmIGNvbnRhaW5lciwgSlNDZWxsKiBjZWxsLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kp
CiB7Ci0gICAgY29udGFpbmVyLmFib3V0VG9NYXJrKG1fbWFya2luZ1ZlcnNpb24pOwotICAgIAot
ICAgIGlmIChjb250YWluZXIudGVzdEFuZFNldE1hcmtlZChjZWxsKSkKKyAgICBpZiAoY29udGFp
bmVyLnRlc3RBbmRTZXRNYXJrZWQoY2VsbCwgZGVwZW5kZW5jeSwgVHJhbnNhY3Rpb25BYm9ydExp
a2VsaWhvb2Q6OlVubGlrZWx5KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VSVChj
ZWxsLT5zdHJ1Y3R1cmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgJKHJldmlzaW9uIDIxMzU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSwxMSArMTc1LDE0IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgdm9pZCBhcHBlbmRKU0NlbGxPckF1eGlsaWFyeShIZWFwQ2VsbCopOwog
ICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpTVmFsdWUpOworICAgIHZvaWQgYXBwZW5kSGlkZGVuKEpT
Q2VsbCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRNYXJrZWRBbmRBcHBlbmRU
b01hcmtTdGFjayhKU0NlbGwqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFNs
b3coSlNDZWxsKiwgRGVwZW5kZW5jeSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBl
bmRIaWRkZW5TbG93KEpTQ2VsbCosIERlcGVuZGVuY3kpOworICAgIHZvaWQgYXBwZW5kSGlkZGVu
U2xvd0ltcGwoSlNDZWxsKiwgRGVwZW5kZW5jeSk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29udGFpbmVyVHlwZT4KLSAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNr
KENvbnRhaW5lclR5cGUmLCBKU0NlbGwqKTsKKyAgICB2b2lkIHNldE1hcmtlZEFuZEFwcGVuZFRv
TWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwqLCBEZXBlbmRlbmN5KTsKICAgICAKICAg
ICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCopOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIx
MzU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0OSArMzEsMTA2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQoSlNWYWx1ZSogc2xv
dCwgc2l6ZV90IGNvdW50KQorQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRV
bmJhcnJpZXJlZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCiB7CiAgICAgZm9yIChzaXpl
X3QgaSA9IGNvdW50OyBpLS07KQogICAgICAgICBhcHBlbmRVbmJhcnJpZXJlZChzbG90W2ldKTsK
IH0KIAotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpTQ2VsbCog
Y2VsbCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWQo
SlNDZWxsKiBjZWxsKQogewotICAgIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUoY2VsbCkpOwor
ICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgd3JpdHRlbiBpbiBhIHZlcnkgc3BlY2lmaWMgd2F5IHRv
IGVuc3VyZSB0aGF0IGl0IGdldHMgaW5saW5lZAorICAgIC8vIHByb3Blcmx5LiBJbiBwYXJ0aWN1
bGFyLCBpdCBhcHBlYXJzIHRoYXQgdXNpbmcgdGVtcGxhdGVzIGhlcmUgYnJlYWtzIEFMV0FZU19J
TkxJTkUuCisgICAgCisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
RGVwZW5kZW5jeSBkZXBlbmRlbmN5OworICAgIGlmIChVTkxJS0VMWShjZWxsLT5pc0xhcmdlQWxs
b2NhdGlvbigpKSkgeworICAgICAgICBkZXBlbmRlbmN5ID0gbnVsbERlcGVuZGVuY3koKTsKKyAg
ICAgICAgaWYgKExJS0VMWShjZWxsLT5sYXJnZUFsbG9jYXRpb24oKS5pc01hcmtlZCgpKSkgewor
ICAgICAgICAgICAgaWYgKExJS0VMWSghbV9oZWFwU25hcHNob3RCdWlsZGVyKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBNYXJrZWRC
bG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOworICAgICAgICBkZXBlbmRlbmN5ID0g
YmxvY2suYWJvdXRUb01hcmsobV9tYXJraW5nVmVyc2lvbik7CisgICAgICAgIGlmIChMSUtFTFko
YmxvY2suaXNNYXJrZWQoY2VsbCwgZGVwZW5kZW5jeSkpKSB7CisgICAgICAgICAgICBpZiAoTElL
RUxZKCFtX2hlYXBTbmFwc2hvdEJ1aWxkZXIpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBhcHBlbmRTbG93KGNlbGwsIGRlcGVuZGVuY3kpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkKEpT
VmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhcHBlbmRV
bmJhcnJpZXJlZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kSGlkZGVuKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlz
Q2VsbCgpKQorICAgICAgICBhcHBlbmRIaWRkZW4odmFsdWUuYXNDZWxsKCkpOworfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihKU0NlbGwqIGNlbGwpCit7
CisgICAgLy8gVGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIGluIGEgdmVyeSBzcGVjaWZpYyB3YXkg
dG8gZW5zdXJlIHRoYXQgaXQgZ2V0cyBpbmxpbmVkCisgICAgLy8gcHJvcGVybHkuIEluIHBhcnRp
Y3VsYXIsIGl0IGFwcGVhcnMgdGhhdCB1c2luZyB0ZW1wbGF0ZXMgaGVyZSBicmVha3MgQUxXQVlT
X0lOTElORS4KKyAgICAKKyAgICBpZiAoIWNlbGwpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBEZXBlbmRlbmN5IGRlcGVuZGVuY3k7CisgICAgaWYgKFVOTElLRUxZKGNlbGwtPmlzTGFyZ2VB
bGxvY2F0aW9uKCkpKSB7CisgICAgICAgIGRlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5jeSgpOwor
ICAgICAgICBpZiAoTElLRUxZKGNlbGwtPmxhcmdlQWxsb2NhdGlvbigpLmlzTWFya2VkKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hcmtlZEJsb2NrJiBi
bG9jayA9IGNlbGwtPm1hcmtlZEJsb2NrKCk7CisgICAgICAgIGRlcGVuZGVuY3kgPSBibG9jay5h
Ym91dFRvTWFyayhtX21hcmtpbmdWZXJzaW9uKTsKKyAgICAgICAgaWYgKExJS0VMWShibG9jay5p
c01hcmtlZChjZWxsLCBkZXBlbmRlbmN5KSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGFwcGVuZEhpZGRlblNsb3coY2VsbCwgZGVwZW5kZW5jeSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKGNvbnN0IFdl
YWs8VD4mIHdlYWspCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25z
dCBXZWFrPFQ+JiB3ZWFrKQogewogICAgIGFwcGVuZFVuYmFycmllcmVkKHdlYWsuZ2V0KCkpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZChjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQ+JiBzbG90KQorQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxUPiYgc2xvdCkKIHsKICAg
ICBhcHBlbmRVbmJhcnJpZXJlZChzbG90LmdldCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxUPiYgc2xvdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
SGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VD4mIHNsb3QpCiB7CiAgICAgYXBwZW5kSGlk
ZGVuKHNsb3QuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KLWlubGlu
ZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2luLCBJ
dGVyYXRvciBlbmQpCiB7CiAgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytp
dCkKICAgICAgICAgYXBwZW5kKCppdCk7CiB9CiAKLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRWYWx1ZXMoY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNp
emVfdCBjb3VudCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVz
KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQp
CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAgICBhcHBl
bmQoYmFycmllcnNbaV0pOwogfQogCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFs
dWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXpl
X3QgY291bnQpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlc0hp
ZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV90IGNv
dW50KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKICAgICAgICAg
YXBwZW5kSGlkZGVuKGJhcnJpZXJzW2ldKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0N1c3RvbUdldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24gMjEzNTg4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKLSNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIxMzU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDYgKzM4Miw3
IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQKICAgICBzdHJ1Y3R1
cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgIGxhc3RPZmZzZXQgPSBzdHJ1
Y3R1cmUtPmxhc3RPZmZzZXQoKTsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBEZXBlbmRlbmN5IGluZGV4aW5nVHlwZURlcGVu
ZGVuY3kgPSBkZXBlbmRlbmN5KGluZGV4aW5nVHlwZSk7CiAgICAgTG9ja2VyPEpTQ2VsbD4gbG9j
a2VyKE5vTG9ja2luZ05lY2Vzc2FyeSk7CiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgpAQCAtMzk1LDE0ICszOTYsMTMg
QEAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojp2aXNpdAogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICBi
dXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKKyAgICBidXR0ZXJmbHkgPSBjb25zdW1lKHRo
aXMsIGluZGV4aW5nVHlwZURlcGVuZGVuY3kpLT5idXR0ZXJmbHkoKTsKKyAgICBEZXBlbmRlbmN5
IGJ1dHRlcmZseURlcGVuZGVuY3kgPSBkZXBlbmRlbmN5KGJ1dHRlcmZseSk7CiAgICAgaWYgKCFi
dXR0ZXJmbHkpCiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgV1RGOjpsb2FkTG9hZEZl
bmNlKCk7Ci0gICAgaWYgKHRoaXMtPnN0cnVjdHVyZUlEKCkgIT0gc3RydWN0dXJlSUQpCisgICAg
aWYgKGNvbnN1bWUodGhpcywgYnV0dGVyZmx5RGVwZW5kZW5jeSktPnN0cnVjdHVyZUlEKCkgIT0g
c3RydWN0dXJlSUQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChzdHJ1Y3R1cmUt
Pmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KQorICAgIGlmIChjb25zdW1lKHN0cnVjdHVyZSwg
YnV0dGVyZmx5RGVwZW5kZW5jeSktPmxhc3RPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBtYXJrQXV4aWxpYXJ5QW5kVmlzaXRPdXRPZkxp
bmVQcm9wZXJ0aWVzKHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlLCBsYXN0T2Zmc2V0KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24g
MjEzNTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNjY0LDcgKzY2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgY29u
c3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQo
KTsgfQogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0
KCk7IH0KLSAgICAgICAgCisgICAgCiAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5l
U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0eVN0b3Jh
Z2UoKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4g
bV9idXR0ZXJmbHkuZ2V0KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMTM1ODgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDY2IEBACisyMDE3LTAzLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1RGIHNob3VsZCBtYWtlIGl0IHN1cGVyIGVhc3kgdG8gZG8gQVJNIGNvbmN1cnJl
bmN5IHRyaWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY5MzAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBUaGlzIGFkZHMgQXRvbWljPD46OmxvYWRMaW5rIGFuZCBBdG9taWM8Pjo6c3Rv
cmVDb25kLCBhdmFpbGFibGUgb25seSB3aGVuIEhBVkUoTExfU0MpLgorICAgICAgICAKKyAgICAg
ICAgSXQgYWJzdHJhY3RzIGxvYWRMaW5rL3N0b3JlQ29uZCBiZWhpbmQgcHJlcGFyZS9hdHRlbXB0
LiBZb3UgY2FuIHdyaXRlIHByZXBhcmUvYXR0ZW1wdAorICAgICAgICBsb29wcyB3aGVuZXZlciB5
b3VyIGxvb3AgZml0cyBpbnRvIHRoZSBsZWFzdCBjb21tb24gZGVub21pbmF0b3Igb2YgTEwvU0Mg
YW5kIENBUy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbW9kaWZpZXMgQXRvbWljPD46OnRyYW5z
YWN0aW9uIHRvIHVzZSBwcmVwYXJlL2F0dGVtcHQuIFNvLCBpZiB5b3Ugd3JpdGUgeW91ciBsb29w
CisgICAgICAgIHVzaW5nIEF0b21pYzw+Ojp0cmFuc2FjdGlvbiwgdGhlbiB5b3UgZ2V0IExML1ND
IGZvciBmcmVlLgorCisgICAgICAgIERlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0cmFuc2FjdGlv
biB5b3UgYXJlIGRvaW5nLCB5b3UgbWF5IG5vdCB3YW50IHRvIHBlcmZvcm0gYW4gTEwKKyAgICAg
ICAgdW50aWwgeW91IGhhdmUgYSBjaGFuY2UgdG8ganVzdCBsb2FkIHRoZSBjdXJyZW50IHZhbHVl
LiBBdG9taWM8Pjo6dHJhbnNhY3Rpb24oKSBhc3N1bWVzCisgICAgICAgIHRoYXQgeW91IGRvIG5v
dCBjYXJlIHRvIGhhdmUgYW55IG9yZGVyaW5nIGd1YXJhbnRlZXMgaW4gdGhhdCBjYXNlLiBJZiB5
b3UgdGhpbmsgdGhhdAorICAgICAgICB0aGUgdHJhbnNhY3Rpb24gaGFzIGEgZ29vZCBjaGFuY2Ug
b2YgYWJvcnRpbmcgdGhpcyB3YXksIHlvdSB3YW50CisgICAgICAgIEF0b21pYzw+Ojp0cmFuc2Fj
dGlvbigpIHRvIGZpcnN0IGRvIGEgcGxhaW4gbG9hZC4gQnV0IGlmIHlvdSBkb24ndCB0aGluayB0
aGF0IHN1Y2ggYW4KKyAgICAgICAgYWJvcnQgaXMgbGlrZWx5LCB0aGVuIHlvdSB3YW50IHRvIGdv
IHN0cmFpZ2h0IHRvIHRoZSBMTC4gVGhlIEFQSSBzdXBwb3J0cyB0aGlzIGNvbmNlcHQKKyAgICAg
ICAgdmlhIFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kLgorICAgICAgICAKKyAgICAgICAgQWRk
aXRpb25hbGx5LCB0aGlzIHJlZG9lcyB0aGUgZGVwZW5kL2NvbnN1bWUgQVBJIHRvIGJlIGRlYWQg
c2ltcGxlLiBEZXBlbmRlbmN5IGlzCisgICAgICAgIHVuc2lnbmVkLiBZb3UgZ2V0IGEgZGVwZW5k
ZW5jeSBvbiBhIGxvYWRlZCB2YWx1ZSBieSBqdXN0IHNheWluZworICAgICAgICBkZXBlbmRlbmN5
KGxvYWRlZFZhbHVlKS4gWW91IGNvbnN1bWUgdGhlIGRlcGVuZGVuY3kgYnkgdXNpbmcgaXQgYXMg
YSBib251cyBpbmRleCB0bworICAgICAgICBzb21lIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoaXMg
aXMgbWFkZSBlYXN5IHdpdGggdGhlIGNvbnN1bWU8VCo+KHB0ciwgZGVwZW5kZW5jeSkKKyAgICAg
ICAgaGVscGVyLiBJbiB0aG9zZSBjYXNlcyB3aGVyZSB5b3Ugd2FudCB0byBwYXNzIGFyb3VuZCBi
b3RoIGEgY29tcHV0ZWQgdmFsdWUgYW5kIGEKKyAgICAgICAgZGVwZW5kZW5jeSwgdGhlcmUncyBE
ZXBlbmRlbmN5V2l0aDxUPi4gQnV0IHlvdSB3b24ndCBuZWVkIGl0IGluIG1vc3QgY2FzZXMuIFRo
ZSBsb2FkZWQKKyAgICAgICAgdmFsdWUgb3IgYW55IHZhbHVlIGNvbXB1dGVkIGZyb20gdGhlIGxv
YWRlZCB2YWx1ZSBpcyBhIGZpbmUgaW5wdXQgdG8gZGVwZW5kZW5jeSgpIQorICAgICAgICAKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgdXBkYXRlcyBhIGJ1bmNoIG9mIGhvdCBwYXRocyB0byB1c2UgdGhl
IG5ldyBBUElzLiBVc2luZyB0cmFuc2FjdGlvbigpIGdpdmVzCisgICAgICAgIHVzIG9wdGltYWwg
TEwvU0MgbG9vcHMgZm9yIG9iamVjdCBtYXJraW5nIGFuZCBsb2NrIGFjcXVpc2l0aW9uLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyB1cGRhdGVzIGEgYnVuY2ggb2YgaG90IHBh
dGhzIHRvIHVzZSBkZXBlbmRlbmN5KCkvY29uc3VtZSgpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBpcyBhIHNpZ25pZmljYW50IE9jdGFuZS9zcGxheSBzcGVlZC11cCBvbiBBUk0uCisKKyAgICAg
ICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjpoYXNGZW5jZSk6CisgICAgICAgIChX
VEY6OkF0b21pYzo6cHJlcGFyZSk6CisgICAgICAgIChXVEY6OkF0b21pYzo6YXR0ZW1wdCk6Cisg
ICAgICAgIChXVEY6OkF0b21pYzo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV1RGOjpBdG9taWM6
OnRyYW5zYWN0aW9uUmVsYXhlZCk6CisgICAgICAgIChXVEY6Om51bGxEZXBlbmRlbmN5KToKKyAg
ICAgICAgKFdURjo6ZGVwZW5kZW5jeSk6CisgICAgICAgIChXVEY6OkRlcGVuZGVuY3lXaXRoOjpE
ZXBlbmRlbmN5V2l0aCk6CisgICAgICAgIChXVEY6OmRlcGVuZGVuY3lXaXRoKToKKyAgICAgICAg
KFdURjo6Y29uc3VtZSk6CisgICAgICAgIChXVEY6OkF0b21pYzo6dHJ5VHJhbnNhY3Rpb25SZWxh
eGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6QXRvbWljOjp0cnlUcmFuc2FjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Onplcm9XaXRoQ29uc3VtZURlcGVuZGVuY3kpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpjb25zdW1lTG9hZCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0Jp
dG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmdldCk6CisgICAgICAgIChXVEY6Oldv
cmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRTZXQpOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46
OmNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIpOgorICAgICAgICAqIHd0Zi9Mb2NrQWxnb3JpdGhtLmg6
CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2tGYXN0KToKKyAgICAgICAgKFdURjo6
TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFzdCk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06
OnVubG9ja1Nsb3cpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDE3LTAzLTA2ICBB
bmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBSZXBvcnQg
ZG9tYWlucyBjcmFzaGluZyB1bmRlciBtZW1vcnkgcHJlc3N1cmUgdmlhIGVuaGFuY2VkIHByaXZh
Y3kgbG9nZ2luZy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIxMzU4OCkKKysrIFNvdXJjZS9X
VEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAwOCwgMjAxMCwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAo
amhheWdvb2RAcmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MCw2ICs0MCwxNiBA
QCBleHRlcm4gIkMiIHZvaWQgX1JlYWRXcml0ZUJhcnJpZXIodm9pZCk7CiAKIG5hbWVzcGFjZSBX
VEYgewogCitBTFdBWVNfSU5MSU5FIGJvb2wgaGFzRmVuY2Uoc3RkOjptZW1vcnlfb3JkZXIgb3Jk
ZXIpCit7CisgICAgcmV0dXJuIG9yZGVyICE9IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQ7Cit9
CisKK2VudW0gY2xhc3MgVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2QgeworICAgIFVubGlrZWx5
LAorICAgIExpa2VseQorfTsKKyAgICAKIC8vIEF0b21pYyB3cmFwcyBhcm91bmQgc3RkOjphdG9t
aWMgd2l0aCB0aGUgc29sZSBwdXJwb3NlIG9mIG1ha2luZyB0aGUgY29tcGFyZV9leGNoYW5nZQog
Ly8gb3BlcmF0aW9ucyBub3QgYWx0ZXIgdGhlIGV4cGVjdGVkIHZhbHVlLiBUaGlzIGlzIG1vcmUg
aW4gbGluZSB3aXRoIGhvdyB3ZSB0eXBpY2FsbHkKIC8vIHVzZSBDQVMgaW4gb3VyIGNvZGUuCkBA
IC0xMDcsMzkgKzExNywxMjkgQEAgc3RydWN0IEF0b21pYyB7CiAgICAgCiAgICAgQUxXQVlTX0lO
TElORSBUIGV4Y2hhbmdlKFQgbmV3VmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3Rk
OjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgeyByZXR1cm4gdmFsdWUuZXhjaGFuZ2UobmV3VmFsdWUs
IG9yZGVyKTsgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgQUxXQVlT
X0lOTElORSBib29sIHRyeVRyYW5zYWN0aW9uUmVsYXhlZChjb25zdCBGdW5jJiBmdW5jKQorI2lm
IEhBVkUoTExfU0MpCisgICAgQUxXQVlTX0lOTElORSBUIGxvYWRMaW5rKHN0ZDo6bWVtb3J5X29y
ZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgQUxXQVlTX0lOTElO
RSBib29sIHN0b3JlQ29uZChUIHZhbHVlLCAgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6
Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKKyNlbmRpZiAvLyBIQVZFKExMX1NDKQorCisgICAgQUxX
QVlTX0lOTElORSBUIHByZXBhcmUoc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9y
eV9vcmRlcl9zZXFfY3N0KQogICAgIHsKLSAgICAgICAgVCBvbGRWYWx1ZSA9IGxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICAgIFQgbmV3VmFsdWUgPSBvbGRWYWx1ZTsKLSAg
ICAgICAgZnVuYyhuZXdWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBjb21wYXJlRXhjaGFuZ2VXZWFr
UmVsYXhlZChvbGRWYWx1ZSwgbmV3VmFsdWUpOworI2lmIEhBVkUoTExfU0MpCisgICAgICAgIHJl
dHVybiBsb2FkTGluayhvcmRlcik7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0ob3JkZXIp
OworICAgICAgICByZXR1cm4gbG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyNlbmRp
ZgogICAgIH0KKyAgICAKKyNpZiBIQVZFKExMX1NDKQorICAgIHN0YXRpYyBjb25zdCBib29sIHBy
ZXBhcmVJc0Zhc3QgPSBmYWxzZTsKKyNlbHNlCisgICAgc3RhdGljIGNvbnN0IGJvb2wgcHJlcGFy
ZUlzRmFzdCA9IHRydWU7CisjZW5kaWYKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0g
ICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9uUmVsYXhlZChjb25zdCBGdW5jJiBmdW5j
KQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBhdHRlbXB0KFQgb2xkVmFsdWUsIFQgbmV3VmFsdWUs
IHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkKICAg
ICB7Ci0gICAgICAgIHdoaWxlICghdHJ5VHJhbnNhdGlvblJlbGF4ZWQoZnVuYykpIHsgfQorI2lm
IEhBVkUoTExfU0MpCisgICAgICAgIFVOVVNFRF9QQVJBTShvbGRWYWx1ZSk7CisgICAgICAgIHJl
dHVybiBzdG9yZUNvbmQobmV3VmFsdWUsIG9yZGVyKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBj
b21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdWYWx1ZSwgb3JkZXIpOworI2VuZGlmCiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgdHJ5VHJhbnNhY3Rpb24oY29uc3QgRnVuYyYgZnVuYykKKyAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgdHJhbnNhY3Rpb24oY29uc3QgRnVuYyYgZnVuYywgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIg
PSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0LCBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZCBh
Ym9ydExpa2VsaWhvb2QgPSBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZDo6TGlrZWx5KQogICAg
IHsKLSAgICAgICAgVCBvbGRWYWx1ZSA9IGxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7
Ci0gICAgICAgIFQgbmV3VmFsdWUgPSBvbGRWYWx1ZTsKLSAgICAgICAgZnVuYyhuZXdWYWx1ZSk7
Ci0gICAgICAgIHJldHVybiBjb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdWYWx1ZSk7
CisgICAgICAgIC8vIElmIHByZXBhcmluZyBpcyBub3QgZmFzdCB0aGVuIHdlIHdhbnQgdG8gc2tp
cCB0aGUgbG9vcCB3aGVuIGZ1bmMgd291bGQgZmFpbC4KKyAgICAgICAgaWYgKCFwcmVwYXJlSXNG
YXN0ICYmIGFib3J0TGlrZWxpaG9vZCA9PSBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZDo6TGlr
ZWx5KSB7CisgICAgICAgICAgICBUIG9sZFZhbHVlID0gbG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkKTsKKyAgICAgICAgICAgIC8vIE5vdGU6IG1hbnkgZnVuY3Mgd2lsbCBjb25zdGFudC1m
b2xkIHRvIHRydWUsIHdoaWNoIHdpbGwga2lsbCBhbGwgb2YgdGhpcyBjb2RlLgorICAgICAgICAg
ICAgaWYgKCFmdW5jKG9sZFZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgVCBvbGRWYWx1ZSA9IHBy
ZXBhcmUob3JkZXIpOworICAgICAgICAgICAgVCBuZXdWYWx1ZSA9IG9sZFZhbHVlOworICAgICAg
ICAgICAgaWYgKCFmdW5jKG5ld1ZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBpZiAoYXR0ZW1wdChvbGRWYWx1ZSwgbmV3VmFsdWUsIG9yZGVyKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9uKGNv
bnN0IEZ1bmMmIGZ1bmMpCisgICAgQUxXQVlTX0lOTElORSBib29sIHRyYW5zYWN0aW9uUmVsYXhl
ZChjb25zdCBGdW5jJiBmdW5jLCBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZCBhYm9ydExpa2Vs
aWhvb2QgPSBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZDo6TGlrZWx5KQogICAgIHsKLSAgICAg
ICAgd2hpbGUgKCF0cnlUcmFuc2FjdGlvbihmdW5jKSkgeyB9CisgICAgICAgIHJldHVybiB0cmFu
c2FjdGlvbihmdW5jLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkLCBhYm9ydExpa2VsaWhvb2Qp
OwogICAgIH0KIAogICAgIHN0ZDo6YXRvbWljPFQ+IHZhbHVlOwogfTsKIAorI2lmIENQVShBUk02
NCkKKyNkZWZpbmUgREVGSU5FX0xMX1NDKHdpZHRoLCBtb2RpZmllciwgc3VmZml4KSAgIFwKKyAg
ICB0ZW1wbGF0ZTw+IFwKKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQgIyMgd2lkdGggIyMgX3QgQXRv
bWljPHVpbnQgIyMgd2lkdGggIyNfdD46OmxvYWRMaW5rKHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVy
KSBcCisgICAgeyBcCisgICAgICAgIGludCAjIyB3aWR0aCAjIyBfdCByZXN1bHQ7IFwKKyAgICAg
ICAgaWYgKGhhc0ZlbmNlKG9yZGVyKSkgeyBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCBc
CisgICAgICAgICAgICAgICAgImxkYXhyIiBzdWZmaXggIiAlIiBtb2RpZmllciAiMCwgWyUxXSIg
XAorICAgICAgICAgICAgICAgIDogIj1yIihyZXN1bHQpIFwKKyAgICAgICAgICAgICAgICA6ICJy
Iih0aGlzKSBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7IFwKKyAgICAgICAgfSBlbHNl
IHsgXAorICAgICAgICAgICAgYXNtICggXAorICAgICAgICAgICAgICAgICJsZHhyIiBzdWZmaXgg
IiAlIiBtb2RpZmllciAiMCwgWyUxXSIgXAorICAgICAgICAgICAgICAgIDogIj1yIihyZXN1bHQp
IFwKKyAgICAgICAgICAgICAgICA6ICJyIih0aGlzKSBcCisgICAgICAgICAgICAgICAgOiAibWVt
b3J5Iik7IFwKKyAgICAgICAgfSBcCisgICAgICAgIHJldHVybiByZXN1bHQ7IFwKKyAgICB9IFwK
KyAgICBcCisgICAgdGVtcGxhdGU8PiBcCisgICAgQUxXQVlTX0lOTElORSBib29sIEF0b21pYzx1
aW50ICMjIHdpZHRoICMjIF90Pjo6c3RvcmVDb25kKHVpbnQgIyMgd2lkdGggIyMgX3QgdmFsdWUs
IHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyKSBcCisgICAgeyBcCisgICAgICAgIGJvb2wgcmVzdWx0
OyBcCisgICAgICAgIGlmIChoYXNGZW5jZShvcmRlcikpIHsgXAorICAgICAgICAgICAgYXNtIHZv
bGF0aWxlICggXAorICAgICAgICAgICAgICAgICJzdGx4ciIgc3VmZml4ICIgJXcwLCAlIiBtb2Rp
ZmllciAiMSwgWyUyXSIgXAorICAgICAgICAgICAgICAgIDogIj0mciIocmVzdWx0KSBcCisgICAg
ICAgICAgICAgICAgOiAiciIodmFsdWUpLCAiciIodGhpcykgXAorICAgICAgICAgICAgICAgIDog
Im1lbW9yeSIpOyBcCisgICAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgICAgIGFzbSAoIFwKKyAg
ICAgICAgICAgICAgICAic3R4ciIgc3VmZml4ICIgJXcwLCAlIiBtb2RpZmllciAiMSwgWyUyXSIg
XAorICAgICAgICAgICAgICAgIDogIj0mciIocmVzdWx0KSBcCisgICAgICAgICAgICAgICAgOiAi
ciIodmFsdWUpLCAiciIodGhpcykgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyBcCisg
ICAgICAgIH0gXAorICAgICAgICByZXR1cm4gIXJlc3VsdDsgXAorICAgIH0gXAorICAgIFwKKyAg
ICB0ZW1wbGF0ZTw+IFwKKyAgICBBTFdBWVNfSU5MSU5FIGludCAjIyB3aWR0aCAjIyBfdCBBdG9t
aWM8aW50ICMjIHdpZHRoICMjIF90Pjo6bG9hZExpbmsoc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIp
IFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBdG9taWM8dWludCAjIyB3
aWR0aCAjIyBfdD4qPih0aGlzKS0+bG9hZExpbmsob3JkZXIpOyBcCisgICAgfSBcCisgICAgXAor
ICAgIHRlbXBsYXRlPD4gXAorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBBdG9taWM8aW50ICMjIHdp
ZHRoICMjIF90Pjo6c3RvcmVDb25kKGludCAjIyB3aWR0aCAjIyBfdCB2YWx1ZSwgc3RkOjptZW1v
cnlfb3JkZXIgb3JkZXIpIFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxB
dG9taWM8dWludCAjIyB3aWR0aCAjIyBfdD4qPih0aGlzKS0+c3RvcmVDb25kKHZhbHVlLCBvcmRl
cik7IFwKKyAgICB9CisKK0RFRklORV9MTF9TQyg4LCAidyIsICJiIikKK0RFRklORV9MTF9TQygx
NiwgInciLCAiaCIpCitERUZJTkVfTExfU0MoMzIsICJ3IiwgIiIpCitERUZJTkVfTExfU0MoNjQs
ICIiLCAiIikKK0RFRklORV9MTF9TQyhwdHIsICIiLCAiIikKKworI3VuZGVmIERFRklORV9MTF9T
QworI2VuZGlmIC8vIENQVShBUk02NCkKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBU
IGF0b21pY0xvYWQoVCogbG9jYXRpb24sIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjpt
ZW1vcnlfb3JkZXJfc2VxX2NzdCkKIHsKQEAgLTMwOCwxMiArNDA4LDE3IEBAIGlubGluZSB2b2lk
IGNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCkgeyAKIAogI2VuZGlmCiAKLXR5cGVkZWYgc2l6ZV90
IENvbnN1bWVEZXBlbmRlbmN5OwordHlwZWRlZiB1bnNpZ25lZCBEZXBlbmRlbmN5OworCitBTFdB
WVNfSU5MSU5FIERlcGVuZGVuY3kgbnVsbERlcGVuZGVuY3koKQoreworICAgIHJldHVybiAwOwor
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9m
KFQpID09IDg+Ojp0eXBlKiA9IG51bGxwdHI+Ci1BTFdBWVNfSU5MSU5FIENvbnN1bWVEZXBlbmRl
bmN5IHplcm9XaXRoQ29uc3VtZURlcGVuZGVuY3koVCB2YWx1ZSkKK0FMV0FZU19JTkxJTkUgRGVw
ZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCiB7Ci0gICAgdWludDY0X3QgZGVwZW5kZW5jeTsK
KyAgICB1bnNpZ25lZCBkZXBlbmRlbmN5OwogICAgIHVpbnQ2NF90IGNvcHkgPSBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KHZhbHVlKTsKICNpZiBDUFUoQVJNNjQpCiAgICAgLy8gQ3JlYXRlIGEgbWFn
aWNhbCB6ZXJvIHZhbHVlIHRocm91Z2ggaW5saW5lIGFzc2VtYmx5LCB3aG9zZSBjb21wdXRhdGlv
bgpAQCAtMzI1LDEwNCArNDMwLDEwMiBAQCBBTFdBWVNfSU5MSU5FIENvbnN1bWVEZXBlbmRlbmN5
IHplcm9XaXRoCiAgICAgLy8gb3JkZXJpbmcuIFRoaXMgZm9yY2VzIHdlYWsgbWVtb3J5IG9yZGVy
IENQVXMgdG8gb2JzZXJ2ZSBgbG9jYXRpb25gIGFuZAogICAgIC8vIGRlcGVuZGVudCBsb2FkcyBp
biB0aGVpciBzdG9yZSBvcmRlciB3aXRob3V0IHRoZSByZWFkZXIgdXNpbmcgYSBiYXJyaWVyCiAg
ICAgLy8gb3IgYW4gYWNxdWlyZSBsb2FkLgotICAgIGFzbSB2b2xhdGlsZSgiZW9yICV4W2RlcGVu
ZGVuY3ldLCAleFtpbl0sICV4W2luXSIKLSAgICAgICAgICAgICAgICAgOiBbZGVwZW5kZW5jeV0g
Ij1yIihkZXBlbmRlbmN5KQotICAgICAgICAgICAgICAgICA6IFtpbl0gInIiKGNvcHkpCi0gICAg
ICAgICAgICAgICAgIC8vIExpZSBhYm91dCB0b3VjaGluZyBtZW1vcnkuIE5vdCBzdHJpY3RseSBu
ZWVkZWQsIGJ1dCBpcwotICAgICAgICAgICAgICAgICAvLyBsaWtlbHkgdG8gYXZvaWQgdW53YW50
ZWQgbG9hZC9zdG9yZSBtb3Rpb24uCi0gICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOworICAg
IGFzbSgiZW9yICV3W2RlcGVuZGVuY3ldLCAld1tpbl0sICV3W2luXSIKKyAgICAgICAgOiBbZGVw
ZW5kZW5jeV0gIj1yIihkZXBlbmRlbmN5KQorICAgICAgICA6IFtpbl0gInIiKGNvcHkpKTsKICNl
bGlmIENQVShBUk0pCi0gICAgYXNtIHZvbGF0aWxlKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0s
ICVbaW5dIgotICAgICAgICAgICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kp
Ci0gICAgICAgICAgICAgICAgIDogW2luXSAiciIoY29weSkKLSAgICAgICAgICAgICAgICAgOiAi
bWVtb3J5Iik7CisgICAgYXNtKCJlb3IgJVtkZXBlbmRlbmN5XSwgJVtpbl0sICVbaW5dIgorICAg
ICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCisgICAgICAgIDogW2luXSAiciIo
Y29weSkpOwogI2Vsc2UKICAgICAvLyBObyBkZXBlbmRlbmN5IGlzIG5lZWRlZCBmb3IgdGhpcyBh
cmNoaXRlY3R1cmUuCiAgICAgbG9hZExvYWRGZW5jZSgpOwogICAgIGRlcGVuZGVuY3kgPSAwOwot
ICAgICh2b2lkKWNvcHk7CisgICAgVU5VU0VEX1BBUkFNKGNvcHkpOwogI2VuZGlmCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PENvbnN1bWVEZXBlbmRlbmN5PihkZXBlbmRlbmN5KTsKKyAgICByZXR1
cm4gZGVwZW5kZW5jeTsKIH0KIAorLy8gRklYTUU6IFRoaXMgY29kZSBpcyBhbG1vc3QgaWRlbnRp
Y2FsIHRvIHRoZSBvdGhlciBkZXBlbmRlbmN5KCkgb3ZlcmxvYWQuCisvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDA1CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c2l6ZW9mKFQpID09IDQ+Ojp0eXBlKiA9IG51bGxwdHI+
Ci1BTFdBWVNfSU5MSU5FIENvbnN1bWVEZXBlbmRlbmN5IHplcm9XaXRoQ29uc3VtZURlcGVuZGVu
Y3koVCB2YWx1ZSkKK0FMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUp
CiB7Ci0gICAgdWludDMyX3QgZGVwZW5kZW5jeTsKKyAgICB1bnNpZ25lZCBkZXBlbmRlbmN5Owog
ICAgIHVpbnQzMl90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKICNpZiBD
UFUoQVJNNjQpCi0gICAgYXNtIHZvbGF0aWxlKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwg
JXdbaW5dIgotICAgICAgICAgICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kp
Ci0gICAgICAgICAgICAgICAgIDogW2luXSAiciIoY29weSkKLSAgICAgICAgICAgICAgICAgOiAi
bWVtb3J5Iik7CisgICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgor
ICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCisgICAgICAgIDogW2luXSAi
ciIoY29weSkpOwogI2VsaWYgQ1BVKEFSTSkKLSAgICBhc20gdm9sYXRpbGUoImVvciAlW2RlcGVu
ZGVuY3ldLCAlW2luXSwgJVtpbl0iCi0gICAgICAgICAgICAgICAgIDogW2RlcGVuZGVuY3ldICI9
ciIoZGVwZW5kZW5jeSkKLSAgICAgICAgICAgICAgICAgOiBbaW5dICJyIihjb3B5KQotICAgICAg
ICAgICAgICAgICA6ICJtZW1vcnkiKTsKKyAgICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2lu
XSwgJVtpbl0iCisgICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKKyAgICAg
ICAgOiBbaW5dICJyIihjb3B5KSk7CiAjZWxzZQogICAgIGxvYWRMb2FkRmVuY2UoKTsKICAgICBk
ZXBlbmRlbmN5ID0gMDsKLSAgICAodm9pZCljb3B5OworICAgIFVOVVNFRF9QQVJBTShjb3B5KTsK
ICNlbmRpZgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb25zdW1lRGVwZW5kZW5jeT4oZGVwZW5k
ZW5jeSk7CisgICAgcmV0dXJuIGRlcGVuZGVuY3k7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gMj46OnR5cGUqID0gbnVsbHB0
cj4KLUFMV0FZU19JTkxJTkUgQ29uc3VtZURlcGVuZGVuY3kgemVyb1dpdGhDb25zdW1lRGVwZW5k
ZW5jeShUIHZhbHVlKQorQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1
ZSkKIHsKLSAgICB1aW50MTZfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQxNl90Pih2YWx1ZSk7
Ci0gICAgcmV0dXJuIHplcm9XaXRoQ29uc3VtZURlcGVuZGVuY3koc3RhdGljX2Nhc3Q8c2l6ZV90
Pihjb3B5KSk7CisgICAgcmV0dXJuIGRlcGVuZGVuY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZh
bHVlKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzaXplb2YoVCkgPT0gMT46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19JTkxJTkUgQ29uc3Vt
ZURlcGVuZGVuY3kgemVyb1dpdGhDb25zdW1lRGVwZW5kZW5jeShUIHZhbHVlKQorQUxXQVlTX0lO
TElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKIHsKLSAgICB1aW50OF90IGNvcHkg
PSBiaXR3aXNlX2Nhc3Q8dWludDhfdD4odmFsdWUpOwotICAgIHJldHVybiB6ZXJvV2l0aENvbnN1
bWVEZXBlbmRlbmN5KHN0YXRpY19jYXN0PHNpemVfdD4oY29weSkpOworICAgIHJldHVybiBkZXBl
bmRlbmN5KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXN0cnVjdCBDb25zdW1lZCB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0
IERlcGVuZGVuY3lXaXRoIHsKK3B1YmxpYzoKKyAgICBEZXBlbmRlbmN5V2l0aCgpCisgICAgICAg
IDogZGVwZW5kZW5jeShudWxsRGVwZW5kZW5jeSgpKQorICAgICAgICAsIHZhbHVlKCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIERlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwg
Y29uc3QgVCYgdmFsdWUpCisgICAgICAgIDogZGVwZW5kZW5jeShkZXBlbmRlbmN5KQorICAgICAg
ICAsIHZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRGVwZW5kZW5jeSBkZXBl
bmRlbmN5OwogICAgIFQgdmFsdWU7Ci0gICAgQ29uc3VtZURlcGVuZGVuY3kgZGVwZW5kZW5jeTsK
IH07CisgICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIERlcGVuZGVuY3lXaXRoPFQ+
IGRlcGVuZGVuY3lXaXRoKERlcGVuZGVuY3kgZGVwZW5kZW5jeSwgY29uc3QgVCYgdmFsdWUpCit7
CisgICAgcmV0dXJuIERlcGVuZGVuY3lXaXRoPFQ+KGRlcGVuZGVuY3ksIHZhbHVlKTsKK30KIAot
Ly8gQ29uc3VtZSBsb2FkLCByZXR1cm5pbmcgdGhlIGxvYWRlZCBgdmFsdWVgIGF0IGBsb2NhdGlv
bmAgYW5kIGEgZGVwZW5kZW50LXplcm8KLS8vIHdoaWNoIGNyZWF0ZXMgYW4gYWRkcmVzcyBkZXBl
bmRlbmN5IGZyb20gdGhlIGBsb2NhdGlvbmAuCi0vLwotLy8gVXNhZ2Ugbm90ZXM6Ci0vLwotLy8g
ICogUmVnYXJkaW5nIGNvbnRyb2wgZGVwZW5kZW5jaWVzOiBtZXJlbHkgYnJhbmNoaW5nIGJhc2Vk
IG9uIGB2YWx1ZWAgb3IKLS8vICAgIGBkZXBlbmRlbmN5YCBpc24ndCBzdWZmaWNpZW50IHRvIGlt
cG9zZSBhIGRlcGVuZGVuY3kgb3JkZXJpbmc6IHlvdSBtdXN0Ci0vLyAgICB1c2UgYGRlcGVuZGVu
Y3lgIGluIHRoZSBhZGRyZXNzIGNvbXB1dGF0aW9uIG9mIHN1YnNlcXVlbnQgbG9hZHMgd2hpY2gK
LS8vICAgIHNob3VsZCBvYnNlcnZlIHRoZSBzdG9yZSBvcmRlciB3LnIudC4gYGxvY2F0aW9uYC4K
LS8vICogUmVnYXJkaW5nIG1lbW9yeSBvcmRlcmluZzogY29uc3VtZSBsb2FkIG9yZGVycyB0aGUg
YGxvY2F0aW9uYCBsb2FkIHdpdGgKLS8vICAgc3VzZXF1ZW50IGRlcGVuZGVudCBsb2FkcyAqb25s
eSouIEl0IHNheXMgbm90aGluZyBhYm91dCBvcmRlcmluZyBvZiBvdGhlcgotLy8gICBsb2FkcyEK
LS8vCi0vLyBDYXZlYXQgZW1wdG9yLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5M
SU5FIGF1dG8gY29uc3VtZUxvYWQoY29uc3QgVCogbG9jYXRpb24pCi17Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjxUPjo6dHlwZSBSZXR1cm5lZDsKLSAgICBDb25zdW1lZDxS
ZXR1cm5lZD4gcmV0IHsgfTsKLSAgICAvLyBGb3JjZSB0aGUgcmVhZCBvZiBgbG9jYXRpb25gIHRv
IG9jY3VyIGV4YWN0bHkgb25jZSBhbmQgd2l0aG91dCBmdXNpbmcgb3IKLSAgICAvLyBmb3J3YXJk
aW5nIHVzaW5nIHZvbGF0aWxlLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBjb21waWxl
ciBjb3VsZAotICAgIC8vIG90aGVyd2lzZSByZW1hdGVyaWFsaXplIG9yIGZpbmQgZXF1aXZhbGVu
dCBsb2Fkcywgb3Igc2ltcGx5IGZvcndhcmQgZnJvbQotICAgIC8vIGEgcHJldmlvdXMgb25lLCBh
bmQgbG9zZSB0aGUgZGVwZW5kZW5jeSB3ZSdyZSB0cnlpbmcgc28gaGFyZCB0bwotICAgIC8vIGNy
ZWF0ZS4gUHJldmVudCB0ZWFyaW5nIGJ5IHVzaW5nIGFuIGF0b21pYywgYnV0IGxldCBpdCBtb3Zl
IGFyb3VuZCBieQotICAgIC8vIHVzaW5nIHJlbGF4ZWQuIFdlIGhhdmUgYXQgbGVhc3QgYSBtZW1v
cnkgZmVuY2UgYWZ0ZXIgdGhpcyB3aGljaCBwcmV2ZW50cwotICAgIC8vIHRoZSBsb2FkIGZyb20g
bW92aW5nIHRvbyBtdWNoLgotICAgIHJldC52YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dm9sYXRpbGUgc3RkOjphdG9taWM8UmV0dXJuZWQ+Kj4obG9jYXRpb24pLT5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOwotICAgIHJldC5kZXBlbmRlbmN5ID0gemVyb1dpdGhDb25zdW1l
RGVwZW5kZW5jeShyZXQudmFsdWUpOwotICAgIHJldHVybiByZXQ7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgoraW5saW5lIFQqIGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5
KQoreworI2lmIENQVShBUk02NCkgfHwgQ1BVKEFSTSkKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0
PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpICsgZGVwZW5kZW5jeSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShkZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gcG9pbnRlcjsKKyNlbmRp
ZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpBdG9taWM7Ci11c2luZyBX
VEY6OkNvbnN1bWVEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpjb25zdW1lTG9hZDsKK3VzaW5nIFdU
Rjo6RGVwZW5kZW5jeTsKK3VzaW5nIFdURjo6RGVwZW5kZW5jeVdpdGg7Cit1c2luZyBXVEY6OlRy
YW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOwordXNpbmcgV1RGOjpjb25zdW1lOwordXNpbmcgV1RG
OjpkZXBlbmRlbmN5OwordXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKK3VzaW5nIFdURjo6bnVs
bERlcGVuZGVuY3k7CiAKICNlbmRpZiAvLyBBdG9taWNzX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCShyZXZpc2lv
biAyMTM1ODgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsMTMgKzQwLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdG1hcFNpemU7CiAgICAg
fQogCi0gICAgYm9vbCBnZXQoc2l6ZV90KSBjb25zdDsKKyAgICBib29sIGdldChzaXplX3QsIERl
cGVuZGVuY3kgPSBudWxsRGVwZW5kZW5jeSgpKSBjb25zdDsKICAgICB2b2lkIHNldChzaXplX3Qp
OwogICAgIHZvaWQgc2V0KHNpemVfdCwgYm9vbCk7CiAgICAgYm9vbCB0ZXN0QW5kU2V0KHNpemVf
dCk7CiAgICAgYm9vbCB0ZXN0QW5kQ2xlYXIoc2l6ZV90KTsKLSAgICBib29sIGNvbmN1cnJlbnRU
ZXN0QW5kU2V0KHNpemVfdCk7Ci0gICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZENsZWFyKHNpemVf
dCk7CisgICAgYm9vbCBjb25jdXJyZW50VGVzdEFuZFNldChzaXplX3QsIERlcGVuZGVuY3kgPSBu
dWxsRGVwZW5kZW5jeSgpLCBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZCA9IFRyYW5zYWN0aW9u
QWJvcnRMaWtlbGlob29kOjpMaWtlbHkpOworICAgIGJvb2wgY29uY3VycmVudFRlc3RBbmRDbGVh
cihzaXplX3QsIERlcGVuZGVuY3kgPSBudWxsRGVwZW5kZW5jeSgpLCBUcmFuc2FjdGlvbkFib3J0
TGlrZWxpaG9vZCA9IFRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOjpMaWtlbHkpOwogICAgIHNp
emVfdCBuZXh0UG9zc2libHlVbnNldChzaXplX3QpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoc2l6
ZV90KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7CkBAIC05MSw5ICs5MSw5IEBAIGlubGluZSBCaXRt
YXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpCaXQKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1h
cFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgotaW5saW5lIGJvb2wgQml0bWFwPGJpdG1hcFNpemUs
IFdvcmRUeXBlPjo6Z2V0KHNpemVfdCBuKSBjb25zdAoraW5saW5lIGJvb2wgQml0bWFwPGJpdG1h
cFNpemUsIFdvcmRUeXBlPjo6Z2V0KHNpemVfdCBuLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICEhKGJpdHNbbiAvIHdvcmRTaXplXSAmIChvbmUgPDwgKG4gJSB3
b3JkU2l6ZSkpKTsKKyAgICByZXR1cm4gISEoYml0c1tuIC8gd29yZFNpemUgKyBkZXBlbmRlbmN5
XSAmIChvbmUgPDwgKG4gJSB3b3JkU2l6ZSkpKTsKIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1h
cFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgpAQCAtMTMyLDMzICsxMzIsMzcgQEAgaW5saW5lIGJv
b2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPgogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Ci1pbmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6
ZSwgV29yZFR5cGU+Ojpjb25jdXJyZW50VGVzdEFuZFNldChzaXplX3QgbikKK0FMV0FZU19JTkxJ
TkUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpjb25jdXJyZW50VGVzdEFuZFNl
dChzaXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBUcmFuc2FjdGlvbkFib3J0TGlrZWxp
aG9vZCBhYm9ydExpa2VsaWhvb2QpCiB7CiAgICAgV29yZFR5cGUgbWFzayA9IG9uZSA8PCAobiAl
IHdvcmRTaXplKTsKICAgICBzaXplX3QgaW5kZXggPSBuIC8gd29yZFNpemU7Ci0gICAgV29yZFR5
cGUqIHdvcmRQdHIgPSBiaXRzLmRhdGEoKSArIGluZGV4OwotICAgIFdvcmRUeXBlIG9sZFZhbHVl
OwotICAgIGRvIHsKLSAgICAgICAgb2xkVmFsdWUgPSAqd29yZFB0cjsKLSAgICAgICAgaWYgKG9s
ZFZhbHVlICYgbWFzaykKKyAgICBXb3JkVHlwZSogZGF0YSA9IGJpdHMuZGF0YSgpICsgaW5kZXgg
KyBkZXBlbmRlbmN5OworICAgIHJldHVybiAhYml0d2lzZV9jYXN0PEF0b21pYzxXb3JkVHlwZT4q
PihkYXRhKS0+dHJhbnNhY3Rpb25SZWxheGVkKAorICAgICAgICBbJl0gKFdvcmRUeXBlJiB2YWx1
ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICBpZiAodmFsdWUgJiBtYXNrKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFsdWUgfD0gbWFz
azsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gd2hpbGUgKCFhdG9taWNDb21wYXJl
RXhjaGFuZ2VXZWFrUmVsYXhlZCh3b3JkUHRyLCBvbGRWYWx1ZSwgc3RhdGljX2Nhc3Q8V29yZFR5
cGU+KG9sZFZhbHVlIHwgbWFzaykpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisg
ICAgICAgIGFib3J0TGlrZWxpaG9vZCk7CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3JkVHlwZT4KLWlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3Jk
VHlwZT46OmNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIoc2l6ZV90IG4pCitBTFdBWVNfSU5MSU5FIGJv
b2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y29uY3VycmVudFRlc3RBbmRDbGVhcihz
aXplX3QgbiwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9v
ZCBhYm9ydExpa2VsaWhvb2QpCiB7CiAgICAgV29yZFR5cGUgbWFzayA9IG9uZSA8PCAobiAlIHdv
cmRTaXplKTsKICAgICBzaXplX3QgaW5kZXggPSBuIC8gd29yZFNpemU7Ci0gICAgV29yZFR5cGUq
IHdvcmRQdHIgPSBiaXRzLmRhdGEoKSArIGluZGV4OwotICAgIFdvcmRUeXBlIG9sZFZhbHVlOwot
ICAgIGRvIHsKLSAgICAgICAgb2xkVmFsdWUgPSAqd29yZFB0cjsKLSAgICAgICAgaWYgKCEob2xk
VmFsdWUgJiBtYXNrKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IHdoaWxlICgh
YXRvbWljQ29tcGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQod29yZFB0ciwgb2xkVmFsdWUsIHN0YXRp
Y19jYXN0PFdvcmRUeXBlPihvbGRWYWx1ZSAmIH5tYXNrKSkpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIFdvcmRUeXBlKiBkYXRhID0gYml0cy5kYXRhKCkgKyBpbmRleCArIGRlcGVuZGVuY3k7Cisg
ICAgcmV0dXJuICFiaXR3aXNlX2Nhc3Q8QXRvbWljPFdvcmRUeXBlPio+KGRhdGEpLT50cmFuc2Fj
dGlvblJlbGF4ZWQoCisgICAgICAgIFsmXSAoV29yZFR5cGUmIHZhbHVlKSAtPiBib29sIHsKKyAg
ICAgICAgICAgIGlmICghKHZhbHVlICYgbWFzaykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YWx1ZSAmPSB+bWFzazsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorICAgICAgICBhYm9ydExpa2VsaWhvb2QpOwog
fQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvTG9ja0FsZ29yaXRobS5oCShyZXZpc2lvbiAyMTM1ODgpCisrKyBTb3VyY2UvV1RGL3d0
Zi9Mb2NrQWxnb3JpdGhtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEwICs1MCwxNSBAQCBwdWJs
aWM6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgbG9ja0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9j
aykKICAgICB7Ci0gICAgICAgIExvY2tUeXBlIG9sZFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOwotICAgICAgICBpZiAob2xkVmFsdWUgJiBpc0hlbGRCaXQpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNo
YW5nZVdlYWsob2xkVmFsdWUsIG9sZFZhbHVlIHwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRl
cl9hY3F1aXJlKTsKKyAgICAgICAgcmV0dXJuIGxvY2sudHJhbnNhY3Rpb24oCisgICAgICAgICAg
ICBbJl0gKExvY2tUeXBlJiB2YWx1ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgdmFsdWUgfD0gaXNIZWxkQml0OworICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVp
cmUsCisgICAgICAgICAgICBUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZDo6VW5saWtlbHkpOwog
ICAgIH0KICAgICAKICAgICBzdGF0aWMgdm9pZCBsb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2sp
CkBAIC04MCwxMCArODUsMTUgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBib29sIHVubG9j
a0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKICAgICB7Ci0gICAgICAgIExvY2tUeXBlIG9s
ZFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgICAgICBp
ZiAoKG9sZFZhbHVlICYgbWFzaykgIT0gaXNIZWxkQml0KQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBv
bGRWYWx1ZSAmIH5pc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAg
ICByZXR1cm4gbG9jay50cmFuc2FjdGlvbigKKyAgICAgICAgICAgIFsmXSAoTG9ja1R5cGUmIHZh
bHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAoKHZhbHVlICYgbWFzaykgIT0gaXNI
ZWxkQml0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgdmFsdWUgJj0gfmlzSGVsZEJpdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkLAorICAg
ICAgICAgICAgVHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q6OlVubGlrZWx5KTsKICAgICB9CiAg
ICAgCiAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCkBAIC0y
MDYsMTAgKzIxNiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGxvY2sudHJhbnNhY3Rpb24oCi0gICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKExvY2tUeXBlJiB2YWx1ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgWyZdIChMb2NrVHlwZSYgdmFsdWUpIC0+IGJvb2wgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlICY9IH5tYXNrOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSB8PSBoYXNQYXJrZWRCaXQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEJhcmdpbmdPcHBvcnR1bml0eTsKICAgICAgICAgICAgICAgICB9
KTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNlL1dURi93dGYv
UGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDYgKzc1NywxMCBAQAogI2RlZmluZSBF
TkFCTEVfQ09OQ1VSUkVOVF9KUyAxCiAjZW5kaWYKIAorI2lmIENQVShBUk02NCkKKyNkZWZpbmUg
SEFWRV9MTF9TQyAxCisjZW5kaWYgLy8gQ1BVKEFSTTY0KQorCiAvKiBUaGlzIGNvbnRyb2xzIHdo
ZXRoZXIgQjMgaXMgYnVpbHQuIEIzIGlzIG5lZWRlZCBmb3IgRlRMIEpJVCBhbmQgV2ViQXNzZW1i
bHkgKi8KICNpZiBFTkFCTEUoRlRMX0pJVCkgfHwgRU5BQkxFKFdFQkFTU0VNQkxZKQogI2RlZmlu
ZSBFTkFCTEVfQjNfSklUIDEKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU5NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE3LTAzLTA4ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGIHNob3VsZCBtYWtlIGl0IHN1cGVyIGVhc3kg
dG8gZG8gQVJNIGNvbmN1cnJlbmN5IHRyaWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MzAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIHZhc3RseSBzaW1wbGlmaWVzIHRoZSBj
b25zdW1lIEFQSS4gVGhlIG5ldyBBUEkgaXMgdGhvcm91Z2hseSB0ZXN0ZWQgYnkgYmVpbmcgdXNl
ZAorICAgICAgICBpbiB0aGUgR0MncyBndXRzLiBJIHRoaW5rIHRoYXQgdW5pdCB0ZXN0cyBhcmUg
YSBwYWluIHRvIG1haW50YWluLCBzbyB3ZSBzaG91bGRuJ3QgaGF2ZQorICAgICAgICB0aGVtIHVu
bGVzcyB3ZSBhcmUgbGVnaXRpbWF0ZWx5IHdvcnJpZWQgYWJvdXQgY292ZXJhZ2UuIFdlJ3JlIG5v
dCBpbiB0aGlzIGNhc2UuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbnN1bWUuY3Bw
OiBSZW1vdmVkLgorCiAyMDE3LTAzLTA4ICBNYXR0IFJhamNhICA8bXJhamNhQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdXBkYXRpbmcgYXV0b3BsYXkgcG9saWNpZXMgYWZ0
ZXIgYSBwYWdlIGhhcyBiZWVuIGxvYWRlZC4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMjEzNTg4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCBzZXQoVGVzdFdURl9TT1VSQ0VT
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHNDb250cm9sbGVyLmNwcAogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9BdG9taWNTdHJpbmcuY3BwCiAgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAotICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9Db25zdW1lLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dURi9Dcm9zc1RocmVhZFRhc2suY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV1RGL0NTdHJpbmcuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0No
ZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMTM1ODgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcgKzQ5Miw2
IEBACiAJCUFENTdBQzIxMURBNzQ2NUIwMEZGMUJERSAvKiBEaWRSZW1vdmVGcmFtZUZyb21IaWVh
cmNoeUluUGFnZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFENTdBQzFGMURBNzQ2NEQwMEZGMUJERSAvKiBEaWRSZW1vdmVGcmFtZUZyb21I
aWVhcmNoeUluUGFnZUNhY2hlLmNwcCAqLzsgfTsKIAkJQUQ1N0FDMjIxREE3NDY2RTAwRkYxQkRF
IC8qIG1hbnktaWZyYW1lcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFENTdBQzFEMURBNzQ2MzgwMEZGMUJERSAvKiBtYW55LWlmcmFt
ZXMuaHRtbCAqLzsgfTsKIAkJQUQ3QzQzNEQxREQyQTU0RTAwMjY4ODhCIC8qIEV4cGVjdGVkLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEN0M0MzRD
MUREMkE1NDcwMDI2ODg4QiAvKiBFeHBlY3RlZC5jcHAgKi87IH07Ci0JCUFEQ0VCQkE2MUQ5QUUy
MjkwMDJFMjgzQSAvKiBDb25zdW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFEQ0VCQkE1MUQ5OUQ0Q0YwMDJFMjgzQSAvKiBDb25zdW1lLmNwcCAq
LzsgfTsKIAkJQjU1QUQxRDUxNzlGM0IzMDAwQUMxNDk0IC8qIFByZXZlbnRJbWFnZUxvYWRXaXRo
QXV0b1Jlc2l6aW5nX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCNTVBRDFEMzE3OUYzQUJGMDBBQzE0OTQgLyogUHJldmVudEltYWdlTG9h
ZFdpdGhBdXRvUmVzaXppbmdfQnVuZGxlLmNwcCAqLzsgfTsKIAkJQjU1RjExQjcxNTE3RDAzMzAw
OTE1OTE2IC8qIGF0dHJpYnV0ZWRTdHJpbmdDdXN0b21Gb250Lmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RjExQjAxNTE3QTJDNDAw
OTE1OTE2IC8qIGF0dHJpYnV0ZWRTdHJpbmdDdXN0b21Gb250Lmh0bWwgKi87IH07CiAJCUI1NUYx
MUJFMTUxOTFBMDYwMDkxNTkxNiAvKiBBaGVtLnR0ZiBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVGMTFCOTE1MTkxNkU2MDA5MTU5MTYgLyog
QWhlbS50dGYgKi87IH07CkBAIC0xMjQ3LDcgKzEyNDYsNiBAQAogCQlBRDU3QUMxRTFEQTc0NjRE
MDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZV9CdW5kbGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlkUmVtb3ZlRnJhbWVG
cm9tSGllYXJjaHlJblBhZ2VDYWNoZV9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBRDU3QUMxRjFEQTc0NjREMDBGRjFCREUgLyogRGlkUmVtb3ZlRnJhbWVGcm9tSGll
YXJjaHlJblBhZ2VDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaWRSZW1vdmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3QzQzNEMxREQyQTU0NzAwMjY4ODhCIC8qIEV4cGVjdGVkLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4cGVjdGVkLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQURDRUJCQTUxRDk5RDRDRjAwMkUyODNBIC8qIENv
bnN1bWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3VtZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI0MDM5RjlDMTVFNkQ4QjMwMDcyNTVE
NiAvKiBNYXRoRXh0cmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1hdGhFeHRyYXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVBRDFEMTE3
OUYzMzY2MDBBQzE0OTQgLyogUHJldmVudEltYWdlTG9hZFdpdGhBdXRvUmVzaXppbmcubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBQcmV2ZW50SW1hZ2VMb2FkV2l0aEF1dG9SZXNpemluZy5tbTsg
cGF0aCA9IFdlYktpdDJPYmpDL1ByZXZlbnRJbWFnZUxvYWRXaXRoQXV0b1Jlc2l6aW5nLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVBRDFEMzE3OUYzQUJGMDBBQzE0OTQgLyog
UHJldmVudEltYWdlTG9hZFdpdGhBdXRvUmVzaXppbmdfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByZXZlbnRJbWFnZUxvYWRXaXRoQXV0b1Jlc2l6aW5n
X0J1bmRsZS5jcHA7IHBhdGggPSBXZWJLaXQyT2JqQy9QcmV2ZW50SW1hZ2VMb2FkV2l0aEF1dG9S
ZXNpemluZ19CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAyNSw3
ICsyMDIzLDYgQEAKIAkJCQlFNDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0ZXIu
Y3BwICovLAogCQkJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRp
Y09wZXJhdGlvbnMuY3BwICovLAogCQkJCTBGRUFFMzY3MUI3RDE5Q0IwMENFMTdGMiAvKiBDb25k
aXRpb24uY3BwICovLAotCQkJCUFEQ0VCQkE1MUQ5OUQ0Q0YwMDJFMjgzQSAvKiBDb25zdW1lLmNw
cCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRUYXNrLmNw
cCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAgKi8sCiAJ
CQkJN0FBMDIxQkExQUIwOUVBNzAwNTI5NTNGIC8qIERhdGVNYXRoLmNwcCAqLywKQEAgLTI1OTQs
NyArMjU5MSw2IEBACiAJCQkJN0M4M0RFRkUxRDBBNTkwQzAwRkVCQ0YzIC8qIE5ha2VkUHRyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUzMUMxRDhFMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNv
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAxMUQwQTU5MEMwMEZFQkNGMyAvKiBP
cHRpb25hbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBRENFQkJBNjFEOUFFMjI5MDAyRTI4M0Eg
LyogQ29uc3VtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDdDNDM0RDFERDJBNTRFMDAyNjg4
OEIgLyogRXhwZWN0ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDIxRDBBNTkwQzAw
RkVCQ0YzIC8qIE9TT2JqZWN0UHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjU5MUQw
QTU5MEMwMEZFQkNGMyAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uc3VtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uc3VtZS5jcHAJKHJldmlzaW9uIDIxMzU4OCkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbnN1bWUuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDx0aHJlYWQ+Ci0jaW5j
bHVkZSA8d3RmL0F0b21pY3MuaD4KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1ORVZFUl9JTkxJ
TkUgYXV0byB0ZXN0Q29uc3VtZShjb25zdCBUKiBsb2NhdGlvbikKLXsKLSAgICBXVEY6OmNvbXBp
bGVyRmVuY2UoKTsgLy8gUGFyYW5vaWQgdGVzdGluZy4KLSAgICBhdXRvIHJldCA9IFdURjo6Y29u
c3VtZUxvYWQobG9jYXRpb24pOwotICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOyAvLyBQYXJhbm9p
ZCB0ZXN0aW5nLgotICAgIHJldHVybiByZXQ7Ci19Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
IHsKLQotVEVTVChXVEYsIENvbnN1bWVpOCkKLXsKLSAgICB1aW50OF90IGk4ID0gNDI7Ci0gICAg
YXV0byBpOF9jb25zdW1lZCA9IHRlc3RDb25zdW1lKCZpOCk7Ci0gICAgQVNTRVJUX0VRKGk4X2Nv
bnN1bWVkLnZhbHVlLCA0MnUpOwotICAgIEFTU0VSVF9FUShpOF9jb25zdW1lZC5kZXBlbmRlbmN5
LCAwdSk7Ci19Ci0KLVRFU1QoV1RGLCBDb25zdW1laTE2KQotewotICAgIHVpbnQxNl90IGkxNiA9
IDQyOwotICAgIGF1dG8gaTE2X2NvbnN1bWVkID0gdGVzdENvbnN1bWUoJmkxNik7Ci0gICAgQVNT
RVJUX0VRKGkxNl9jb25zdW1lZC52YWx1ZSwgNDJ1KTsKLSAgICBBU1NFUlRfRVEoaTE2X2NvbnN1
bWVkLmRlcGVuZGVuY3ksIDB1KTsKLX0KLQotVEVTVChXVEYsIENvbnN1bWVpMzIpCi17Ci0gICAg
dWludDMyX3QgaTMyID0gNDI7Ci0gICAgYXV0byBpMzJfY29uc3VtZWQgPSB0ZXN0Q29uc3VtZSgm
aTMyKTsKLSAgICBBU1NFUlRfRVEoaTMyX2NvbnN1bWVkLnZhbHVlLCA0MnUpOwotICAgIEFTU0VS
VF9FUShpMzJfY29uc3VtZWQuZGVwZW5kZW5jeSwgMHUpOwotfQotCi1URVNUKFdURiwgQ29uc3Vt
ZWk2NCkKLXsKLSAgICB1aW50NjRfdCBpNjQgPSA0MjsKLSAgICBhdXRvIGk2NF9jb25zdW1lZCA9
IHRlc3RDb25zdW1lKCZpNjQpOwotICAgIEFTU0VSVF9FUShpNjRfY29uc3VtZWQudmFsdWUsIDQy
dSk7Ci0gICAgQVNTRVJUX0VRKGk2NF9jb25zdW1lZC5kZXBlbmRlbmN5LCAwdSk7Ci19Ci0KLVRF
U1QoV1RGLCBDb25zdW1lZjMyKQotewotICAgIGZsb2F0IGYzMiA9IDQyLmY7Ci0gICAgYXV0byBm
MzJfY29uc3VtZWQgPSB0ZXN0Q29uc3VtZSgmZjMyKTsKLSAgICBBU1NFUlRfRVEoZjMyX2NvbnN1
bWVkLnZhbHVlLCA0Mi5mKTsKLSAgICBBU1NFUlRfRVEoZjMyX2NvbnN1bWVkLmRlcGVuZGVuY3ks
IDB1KTsKLX0KLQotVEVTVChXVEYsIENvbnN1bWVmNjQpCi17Ci0gICAgZG91YmxlIGY2NCA9IDQy
LjsKLSAgICBhdXRvIGY2NF9jb25zdW1lZCA9IHRlc3RDb25zdW1lKCZmNjQpOwotICAgIEFTU0VS
VF9FUShmNjRfY29uc3VtZWQudmFsdWUsIDQyLik7Ci0gICAgQVNTRVJUX0VRKGY2NF9jb25zdW1l
ZC5kZXBlbmRlbmN5LCAwdSk7Ci19Ci0KLXN0YXRpYyBpbnQqIGdsb2JhbDsKLQotVEVTVChXVEYs
IENvbnN1bWVHbG9iYWxQdHIpCi17Ci0gICAgYXV0byogcHRyID0gJmdsb2JhbDsKLSAgICBhdXRv
IHB0cl9jb25zdW1lZCA9IHRlc3RDb25zdW1lKCZwdHIpOwotICAgIEFTU0VSVF9FUShwdHJfY29u
c3VtZWQudmFsdWUsICZnbG9iYWwpOwotICAgIEFTU0VSVF9FUShwdHJfY29uc3VtZWQuZGVwZW5k
ZW5jeSwgMHUpOwotfQotCi1zdGF0aWMgaW50KiBnbG9iYWxBcnJheVsxMjhdOwotCi1URVNUKFdU
RiwgQ29uc3VtZUdsb2JhbEFycmF5UHRyKQotewotICAgIGF1dG8qIHB0ciA9ICZnbG9iYWxBcnJh
eVs2NF07Ci0gICAgYXV0byBwdHJfY29uc3VtZWQgPSB0ZXN0Q29uc3VtZSgmcHRyKTsKLSAgICBB
U1NFUlRfRVEocHRyX2NvbnN1bWVkLnZhbHVlLCAmZ2xvYmFsQXJyYXlbNjRdKTsKLSAgICBBU1NF
UlRfRVEocHRyX2NvbnN1bWVkLmRlcGVuZGVuY3ksIDB1KTsKLX0KLQotVEVTVChXVEYsIENvbnN1
bWVTdGFja1B0cikKLXsKLSAgICBjaGFyKiBoZWxsbyA9IG51bGxwdHI7Ci0gICAgYXV0byogc3Rh
Y2sgPSAmaGVsbG87Ci0gICAgYXV0byBzdGFja19jb25zdW1lZCA9IHRlc3RDb25zdW1lKCZzdGFj
ayk7Ci0gICAgQVNTRVJUX0VRKHN0YWNrX2NvbnN1bWVkLnZhbHVlLCAmaGVsbG8pOwotICAgIEFT
U0VSVF9FUShzdGFja19jb25zdW1lZC5kZXBlbmRlbmN5LCAwdSk7Ci19Ci0KLVRFU1QoV1RGLCBD
b25zdW1lV2l0aFRocmVhZCkKLXsKLSAgICBib29sIHJlYWR5ID0gZmFsc2U7Ci0gICAgY29uc3Rl
eHByIHNpemVfdCBudW0gPSAxMDI0OwotICAgIHVpbnQzMl90KiB2ZWMgPSBuZXcgdWludDMyX3Rb
bnVtXTsKLSAgICBzdGQ6OnRocmVhZCB0KFsmXSgpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgIT0gbnVtOyArK2kpCi0gICAgICAgICAgICB2ZWNbaV0gPSBpICogMjsKLSAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgcmVhZHkgPSB0cnVlOwotICAgIH0pOwot
ICAgIGRvIHsKLSAgICAgICAgYXV0byBzdGFja19jb25zdW1lZCA9IHRlc3RDb25zdW1lKCZyZWFk
eSk7Ci0gICAgICAgIGlmIChzdGFja19jb25zdW1lZC52YWx1ZSkgewotICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgIT0gbnVtOyArK2kpCi0gICAgICAgICAgICAgICAgQVNTRVJUX0VR
KHZlY1tpICsgc3RhY2tfY29uc3VtZWQuZGVwZW5kZW5jeV0sIGkgKiAyKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAodHJ1ZSk7Ci0gICAgdC5qb2luKCk7Ci0g
ICAgZGVsZXRlW10gdmVjOwotfQotfQo=
</data>
<flag name="review"
          id="325500"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>