<?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>207827</bug_id>
          
          <creation_ts>2020-02-16 02:50:58 -0800</creation_ts>
          <short_desc>[JSC] Shrink Structure</short_desc>
          <delta_ts>2020-04-03 08:59:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1619485</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-16 02:50:58 -0800</bug_when>
    <thetext>Let&apos;s do super aggressive thing and gets small Structure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619765</commentid>
    <comment_count>1</comment_count>
      <attachid>390953</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 11:45:27 -0800</bug_when>
    <thetext>Created attachment 390953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619766</commentid>
    <comment_count>2</comment_count>
      <attachid>390954</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 11:46:08 -0800</bug_when>
    <thetext>Created attachment 390954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620025</commentid>
    <comment_count>3</comment_count>
      <attachid>391014</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 18:15:18 -0800</bug_when>
    <thetext>Created attachment 391014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620026</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-17 18:15:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/59534793&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620052</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 19:56:30 -0800</bug_when>
    <thetext>The failing test is known that it is relying on pointer orders. So, this is flaky.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620053</commentid>
    <comment_count>6</comment_count>
      <attachid>391023</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 20:26:01 -0800</bug_when>
    <thetext>Created attachment 391023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620069</commentid>
    <comment_count>7</comment_count>
      <attachid>391023</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-02-17 22:12:57 -0800</bug_when>
    <thetext>Comment on attachment 391023
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +            2. Instead of using bloom-filter of pointers for seen-properties, we should use bloom-filter of hash-codes.

You sure this is ok? I specifically didn’t do this because it made the bloom filter way less effective (IIRC, I measured rule-out rate running Speedo2 and browsing the web)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620071</commentid>
    <comment_count>8</comment_count>
      <attachid>391023</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-17 22:32:44 -0800</bug_when>
    <thetext>Comment on attachment 391023
Patch

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

&gt; Source/JavaScriptCore/runtime/Structure.h:501
&gt;      bool hasInlineStorage() const
&gt;      {
&gt; -        return !!m_inlineCapacity;
&gt; -    }
&gt; -    unsigned inlineCapacity() const
&gt; -    {
&gt; -        return m_inlineCapacity;
&gt; +        return !!inlineCapacity();
&gt;      }

nit: This can be a 1 liner too for compactness.

&gt; Source/JavaScriptCore/runtime/Structure.h:636
&gt; +#if CPU(LITTLE_ENDIAN)
&gt; +    static ptrdiff_t offsetOfInlineCapacity()
&gt;      {
&gt; -        return OBJECT_OFFSETOF(Structure, m_inlineCapacity);
&gt; +        return OBJECT_OFFSETOF(Structure, m_propertyHashAndInlineCapacity);
&gt;      }
&gt; +#endif

Can you just provide the BIG_ENDIAN version as well?  The MIPS folks would probably appreciate that.  I&apos;m thinking OBJECT_OFFSETOF(Structure, m_propertyHashAndInlineCapacity) + 3?

&gt; Source/JavaScriptCore/runtime/Structure.h:763
&gt; +    DEFINE_BITFIELD(unsigned, transitionPropertyAttributes, TransitionPropertyAttributes, 8, 6);

Is this enough bits?  Shouldn&apos;t this be 10 bits?

&gt; Source/JavaScriptCore/runtime/Structure.h:776
&gt;      static_assert(s_bitWidthOfTransitionPropertyAttributes &lt;= sizeof(TransitionPropertyAttributes) * 8);

Why &lt;= here?  Why not ==?

On the other hand, if I&apos;m correct that TransitionPropertyAttributes needs to be 10 bits, then this static_assert should stay unchanged.

&gt; Source/JavaScriptCore/runtime/Structure.h:894
&gt; +    // Should be accessed through ensurePropertyTable(). During GC, it may be set to 0 by another thread.
&gt; +    // During a Heap Snapshot GC we avoid clearing the table so it is safe to use.

This comment used to be associated with m_propertyTableUnsafe.  Now, this association is not totally clear.  I&apos;m also not sure if the comment is stale, but at minimum, we should give it some context, like:

The property table pointer should be accessed through ensurePropertyTable(). During GC, ...

&gt; Source/JavaScriptCore/runtime/Structure.h:916
&gt; +    PackedRefPtr&lt;UniquedStringImpl&gt; m_transitionPropertyName;

This is tricky.  At first, I was wondering how this saves any space.  And then I realized that StructureTransitionTable is byte aligned, and only contains a PackedPtr.  Can you static_assert that PackedRefPtr and StructureTransitionTable are byte aligned?  I think that this is essential in order for m_bitField to get packed in with them to only use 32 bytes.

&gt; Source/JavaScriptCore/runtime/StructureInlines.h:149
&gt; +    unsigned hashCode = propertyName.uid()-&gt;symbolAwareHash();
&gt; +    ASSERT(hashCode); // StringImpl hash never gets zero.
&gt; +    if ((m_seenProperties &amp; hashCode) != hashCode)

It would be good to factor this into an inline function ruleOutUnseenPropertyHash() and locate it near the addSeenPropertyHash() below.  The reason for doing this is so that the 2 are co-located, and it becomes easier to see that you&apos;re implementing a bloom filter here.  Right now, in this review, it&apos;s easy to see that, but it becomes less clear for someone reading this code later who does not have the benefit of reading this diff.

&gt; Source/JavaScriptCore/runtime/StructureInlines.h:499
&gt; +    unsigned hashCode = rep-&gt;existingSymbolAwareHash();
&gt; +    setPropertyHash(propertyHash() ^ hashCode);
&gt; +    m_seenProperties = m_seenProperties | hashCode;

Let&apos;s put this in an inline function addSeenPropertyHash() and locate it near the ruleOutUnseenPropertyHash() function above.

&gt; Source/JavaScriptCore/runtime/StructureTransitionTable.h:61
&gt; +inline constexpr uint8_t toAttributes(NonPropertyTransition transition)
&gt;  {
&gt;      return static_cast&lt;unsigned&gt;(transition) + FirstInternalAttribute;
&gt;  }

How can this be correct?  FirstInternalAttribute is 1 &lt;&lt; 6 i.e. 6 bits.  There are 11 NonPropertyTransitions i.e. 4 bits.  Total unique bits = 10.  Aren&apos;t we potentially losing the top 2 bits here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620074</commentid>
    <comment_count>9</comment_count>
      <attachid>391023</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-17 22:40:27 -0800</bug_when>
    <thetext>Comment on attachment 391023
Patch

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

r=me with other suggestions, and if there&apos;s no perf regression.

&gt;&gt; Source/JavaScriptCore/runtime/StructureTransitionTable.h:61
&gt;&gt;  }
&gt; 
&gt; How can this be correct?  FirstInternalAttribute is 1 &lt;&lt; 6 i.e. 6 bits.  There are 11 NonPropertyTransitions i.e. 4 bits.  Total unique bits = 10.  Aren&apos;t we potentially losing the top 2 bits here?

I was wrong.  Yusuke pointed out that we&apos;re computing NonPropertyTransition + 1&lt;&lt;6, not NonPropertyTransition &lt;&lt; 6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620079</commentid>
    <comment_count>10</comment_count>
      <attachid>391023</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-17 23:27:07 -0800</bug_when>
    <thetext>Comment on attachment 391023
Patch

Clearing the r+ for now. Yusuke and I have spotted some concurrency issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621837</commentid>
    <comment_count>11</comment_count>
      <attachid>391443</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-21 18:56:00 -0800</bug_when>
    <thetext>Created attachment 391443
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621855</commentid>
    <comment_count>12</comment_count>
      <attachid>391023</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-21 21:50:09 -0800</bug_when>
    <thetext>Comment on attachment 391023
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:14
&gt;&gt; +            2. Instead of using bloom-filter of pointers for seen-properties, we should use bloom-filter of hash-codes.
&gt; 
&gt; You sure this is ok? I specifically didn’t do this because it made the bloom filter way less effective (IIRC, I measured rule-out rate running Speedo2 and browsing the web)

For now, using pointer based filter.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.h:501
&gt;&gt;      }
&gt; 
&gt; nit: This can be a 1 liner too for compactness.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.h:636
&gt;&gt; +#endif
&gt; 
&gt; Can you just provide the BIG_ENDIAN version as well?  The MIPS folks would probably appreciate that.  I&apos;m thinking OBJECT_OFFSETOF(Structure, m_propertyHashAndInlineCapacity) + 3?

I think this is not necessary. This function is used only from JIT, and our JIT only supports little-endian environment.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.h:763
&gt;&gt; +    DEFINE_BITFIELD(unsigned, transitionPropertyAttributes, TransitionPropertyAttributes, 8, 6);
&gt; 
&gt; Is this enough bits?  Shouldn&apos;t this be 10 bits?

Discussed with Mark, it is enough.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.h:776
&gt;&gt;      static_assert(s_bitWidthOfTransitionPropertyAttributes &lt;= sizeof(TransitionPropertyAttributes) * 8);
&gt; 
&gt; Why &lt;= here?  Why not ==?
&gt; 
&gt; On the other hand, if I&apos;m correct that TransitionPropertyAttributes needs to be 10 bits, then this static_assert should stay unchanged.

So long as it is smaller than TransitionPropertyAttributes&apos;s size, it is OK.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.h:894
&gt;&gt; +    // During a Heap Snapshot GC we avoid clearing the table so it is safe to use.
&gt; 
&gt; This comment used to be associated with m_propertyTableUnsafe.  Now, this association is not totally clear.  I&apos;m also not sure if the comment is stale, but at minimum, we should give it some context, like:
&gt; 
&gt; The property table pointer should be accessed through ensurePropertyTable(). During GC, ...

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.h:916
&gt;&gt; +    PackedRefPtr&lt;UniquedStringImpl&gt; m_transitionPropertyName;
&gt; 
&gt; This is tricky.  At first, I was wondering how this saves any space.  And then I realized that StructureTransitionTable is byte aligned, and only contains a PackedPtr.  Can you static_assert that PackedRefPtr and StructureTransitionTable are byte aligned?  I think that this is essential in order for m_bitField to get packed in with them to only use 32 bytes.

Added.

&gt;&gt; Source/JavaScriptCore/runtime/StructureInlines.h:149
&gt;&gt; +    if ((m_seenProperties &amp; hashCode) != hashCode)
&gt; 
&gt; It would be good to factor this into an inline function ruleOutUnseenPropertyHash() and locate it near the addSeenPropertyHash() below.  The reason for doing this is so that the 2 are co-located, and it becomes easier to see that you&apos;re implementing a bloom filter here.  Right now, in this review, it&apos;s easy to see that, but it becomes less clear for someone reading this code later who does not have the benefit of reading this diff.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/StructureInlines.h:499
&gt;&gt; +    m_seenProperties = m_seenProperties | hashCode;
&gt; 
&gt; Let&apos;s put this in an inline function addSeenPropertyHash() and locate it near the ruleOutUnseenPropertyHash() function above.

I&apos;ve added addPropertyHashAndSeenProperty, which take hash and property, and update propertyHash and seenProperties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621856</commentid>
    <comment_count>13</comment_count>
      <attachid>391452</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-21 21:58:40 -0800</bug_when>
    <thetext>Created attachment 391452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621857</commentid>
    <comment_count>14</comment_count>
      <attachid>391453</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-21 22:30:06 -0800</bug_when>
    <thetext>Created attachment 391453
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621858</commentid>
    <comment_count>15</comment_count>
      <attachid>391452</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-02-21 22:43:40 -0800</bug_when>
    <thetext>Comment on attachment 391452
Patch

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

I only some of the files for now

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +            2. Instead of using bloom-filter of pointers for seen-properties, we should use bloom-filter of hash-codes.

Please update changelog since you apparently removed that change

&gt; Source/JavaScriptCore/ChangeLog:29
&gt; +        Combining all of the above techniques and getting 16 bytes.

nit: and getting =&gt; gets us

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:12937
&gt; +    m_jit.loadPtr(CCallHelpers::Address(structureGPR, Structure::offsetOfClassInfo()), scratch1GPR);

This pattern to load the classInfo of a structure seems to recur often enough to justify a small helper in AssemblyHelpers.h, just to help readability.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6094
&gt; +                LValue previousOrRareData = m_out.bitAnd(m_out.constIntPtr(Structure::previousOrRareDataMask), m_out.loadPtr(structure, m_heaps.Structure_previousOrRareData));

Structure::previousOrRareDataMask was protected by #if USE(JSVALUE64) before. Which one was correct?
This is another example of a pattern which would be less error prone if it was written only once in a helper function.
Also please test this patch on a 32-bit platform if you have not done so yet. The code paths are sufficiently different on 32 and 64 bits to be a likely source of bugs.

&gt; Source/JavaScriptCore/runtime/ConcurrentJSLock.h:37
&gt;  static_assert(sizeof(ConcurrentJSLock) == 1, &quot;Regardless of status of concurrent JS flag, size of ConurrentJSLock is always one byte.&quot;);

unrelated typo: Conurrent =&gt; Concurrent

&gt; Source/JavaScriptCore/runtime/Structure.cpp:367
&gt; +    Vector&lt;std::pair&lt;Structure*, UniquedStringImpl*&gt;, 8&gt; structures;

I am confused by this change.
1) The name no longer match
2) More importantly I can not find any access to the second element

&gt; Source/JavaScriptCore/runtime/Structure.cpp:709
&gt;      // This must always return a property table. It can&apos;t return null.

This comment is confusing. Does &quot;This&quot; refer to the next line (clearly wrong then) or to the overall function (In this case it would be much clearer to s/This/This function/)

&gt; Source/JavaScriptCore/runtime/Structure.cpp:1138
&gt;          // That&apos;s fine, because then the barrier will fire and we will scan this again.

This comment refer to a barrier, but you modify the next line to use appendUnbarriered, is it normal?

&gt; Source/JavaScriptCore/runtime/WriteBarrier.h:251
&gt; +using UnsafeCellPointer = uintptr_t;

Where is this used?

&gt; Source/WTF/wtf/CompactPointerTuple.h:34
&gt;  // The goal of this class is folding a pointer and 1 byte value into 8 bytes in both 32bit and 64bit architectures.

Please update comment since this class can now store 2 bytes + a pointer.

&gt; Source/WTF/wtf/CompactPointerTuple.h:59
&gt; +    static constexpr uint64_t encodeType(Type type)

This could be a private method.

&gt; Source/WTF/wtf/CompactPointerTuple.h:63
&gt; +    static constexpr Type decodeType(uint64_t value)

Ditto.

&gt; Source/WTF/wtf/text/SymbolImpl.h:44
&gt; +    unsigned hashForSymbol() const { return m_hashForSymbol &gt;&gt; s_flagCount; }

The name of &quot;m_hashForSymbol&quot; is not great if it stores more than just hashForSymbol</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621859</commentid>
    <comment_count>16</comment_count>
      <attachid>391452</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-21 23:01:41 -0800</bug_when>
    <thetext>Comment on attachment 391452
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:14
&gt;&gt; +            2. Instead of using bloom-filter of pointers for seen-properties, we should use bloom-filter of hash-codes.
&gt; 
&gt; Please update changelog since you apparently removed that change

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:29
&gt;&gt; +        Combining all of the above techniques and getting 16 bytes.
&gt; 
&gt; nit: and getting =&gt; gets us

Fixed.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:12937
&gt;&gt; +    m_jit.loadPtr(CCallHelpers::Address(structureGPR, Structure::offsetOfClassInfo()), scratch1GPR);
&gt; 
&gt; This pattern to load the classInfo of a structure seems to recur often enough to justify a small helper in AssemblyHelpers.h, just to help readability.

Sounds nice. Fixed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6094
&gt;&gt; +                LValue previousOrRareData = m_out.bitAnd(m_out.constIntPtr(Structure::previousOrRareDataMask), m_out.loadPtr(structure, m_heaps.Structure_previousOrRareData));
&gt; 
&gt; Structure::previousOrRareDataMask was protected by #if USE(JSVALUE64) before. Which one was correct?
&gt; This is another example of a pattern which would be less error prone if it was written only once in a helper function.
&gt; Also please test this patch on a 32-bit platform if you have not done so yet. The code paths are sufficiently different on 32 and 64 bits to be a likely source of bugs.

FTL only supports 64bit, and all the other code in FTL strongly assumes 64bit right now. So, I think this is OK.

&gt;&gt; Source/JavaScriptCore/runtime/ConcurrentJSLock.h:37
&gt;&gt;  static_assert(sizeof(ConcurrentJSLock) == 1, &quot;Regardless of status of concurrent JS flag, size of ConurrentJSLock is always one byte.&quot;);
&gt; 
&gt; unrelated typo: Conurrent =&gt; Concurrent

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.cpp:367
&gt;&gt; +    Vector&lt;std::pair&lt;Structure*, UniquedStringImpl*&gt;, 8&gt; structures;
&gt; 
&gt; I am confused by this change.
&gt; 1) The name no longer match
&gt; 2) More importantly I can not find any access to the second element

1) I&apos;ll update
2) UniquedStringImpl* is used in Structure::forEachPropertyConcurrently. This is added for that function because forEachPropertyConcurrently can be called concurrently. In that case, we should collect UniquedStringImpl* when structure lock is held.
For consistency, I&apos;ll use this UniquedStringImpl* in this function too.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.cpp:709
&gt;&gt;      // This must always return a property table. It can&apos;t return null.
&gt; 
&gt; This comment is confusing. Does &quot;This&quot; refer to the next line (clearly wrong then) or to the overall function (In this case it would be much clearer to s/This/This function/)

This is &quot;This function&quot;. Updated.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.cpp:1138
&gt;&gt;          // That&apos;s fine, because then the barrier will fire and we will scan this again.
&gt; 
&gt; This comment refer to a barrier, but you modify the next line to use appendUnbarriered, is it normal?

Yes. visitor.appendUnbarriered is used when we do not have WriteBarrier&lt;&gt; instance for this field, (Unbarrier =&gt; no WriteBarrier&lt;&gt; field).
But when setting propertyTableUnsafeOrNull&apos;s field, we are emitting a barrier (vm.heap.writeBarrier), so barrier exists.

&gt;&gt; Source/JavaScriptCore/runtime/WriteBarrier.h:251
&gt;&gt; +using UnsafeCellPointer = uintptr_t;
&gt; 
&gt; Where is this used?

This was originally used, but it is no longer used, removed.

&gt;&gt; Source/WTF/wtf/CompactPointerTuple.h:34
&gt;&gt;  // The goal of this class is folding a pointer and 1 byte value into 8 bytes in both 32bit and 64bit architectures.
&gt; 
&gt; Please update comment since this class can now store 2 bytes + a pointer.

Fixed.

&gt;&gt; Source/WTF/wtf/CompactPointerTuple.h:59
&gt;&gt; +    static constexpr uint64_t encodeType(Type type)
&gt; 
&gt; This could be a private method.

Right, fixed.

&gt;&gt; Source/WTF/wtf/CompactPointerTuple.h:63
&gt;&gt; +    static constexpr Type decodeType(uint64_t value)
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/WTF/wtf/text/SymbolImpl.h:44
&gt;&gt; +    unsigned hashForSymbol() const { return m_hashForSymbol &gt;&gt; s_flagCount; }
&gt; 
&gt; The name of &quot;m_hashForSymbol&quot; is not great if it stores more than just hashForSymbol

This only holds hash-for-symbol actually.  This field does not include any flags. It is shifted with flagCount because we would like to adjust effective-bits-of-hash with StringImpl (which only offers 24bits hash).
m_hashForSymbolShiftedWithFlagCount would be the precise name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621860</commentid>
    <comment_count>17</comment_count>
      <attachid>391454</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-21 23:11:12 -0800</bug_when>
    <thetext>Created attachment 391454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621863</commentid>
    <comment_count>18</comment_count>
      <attachid>391456</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-22 00:55:03 -0800</bug_when>
    <thetext>Created attachment 391456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621887</commentid>
    <comment_count>19</comment_count>
      <attachid>391456</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-22 11:45:29 -0800</bug_when>
    <thetext>Comment on attachment 391456
Patch

I&apos;ll do a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621979</commentid>
    <comment_count>20</comment_count>
      <attachid>391486</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-23 02:48:03 -0800</bug_when>
    <thetext>Created attachment 391486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621981</commentid>
    <comment_count>21</comment_count>
      <attachid>391488</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-23 03:28:38 -0800</bug_when>
    <thetext>Created attachment 391488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621997</commentid>
    <comment_count>22</comment_count>
      <attachid>391488</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-02-23 08:48:29 -0800</bug_when>
    <thetext>Comment on attachment 391488
Patch

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

&gt; Source/WTF/wtf/CompactPointerTuple.h:52
&gt; +    static_assert(WTF_OS_CONSTANT_EFFECTIVE_ADDRESS_WIDTH &lt;= 48);

This should be written as static_assert(OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH) &lt;= 48); if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622049</commentid>
    <comment_count>23</comment_count>
      <attachid>391488</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-02-23 18:18:39 -0800</bug_when>
    <thetext>Comment on attachment 391488
Patch

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

nice. r=me

Mostly minor nits.

Can you test this on arm64_32 to make sure nothing broke there?

Might also be worth filing a bug for Igalia folks to look into 32-bit on their architectures

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        This patch shrinks sizeof(Structure) from 112 to 96 (16 bytes) in 64 bit architectures.

it&apos;s not 64-bit architectures, its architectures with 64-bit pointers. (Since arm64_32 does not do this)

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +            1. StringHasher is always generating 24 bits hashes so far. By leveraging this fact,
&gt; +               we store hash code in Structure in 3 bytes (24 bits) for property-hash and seen-property-hash.

the code isn&apos;t actually doing this. AFAICT, it uses 48 bits for seen properties, and uses 16 bits to accumulate hash, and then uses the 64-bit combination of those things as the &quot;seen property hash&quot;

(On a side note, I wonder if we really even need the seen property hash anymore, since the bloom filter might be sufficient. But I guess if we have the spare bits, it doesn&apos;t hurt to keep it.)

&gt; Source/JavaScriptCore/ChangeLog:20
&gt; +               We are setting m_cachedPrototypeChain only if Structure is for JSObject. Clearing happens only if it is not

&quot;are&quot; =&gt; &quot;were&quot;.
&quot;happens&quot; =&gt; &quot;happened&quot;
&quot;it is not&quot; =&gt; &quot;it was not&quot;

&gt; Source/JavaScriptCore/ChangeLog:25
&gt; +        Combining all of the above techniques and gets us 16 bytes.

&quot;and gets us&quot; =&gt; &quot;saves us&quot;

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6094
&gt; +                LValue cachedPrototypeChainOrRareData = m_out.bitAnd(m_out.constIntPtr(Structure::cachedPrototypeChainOrRareDataMask), m_out.loadPtr(structure, m_heaps.Structure_cachedPrototypeChainOrRareData));

only do the and if address64?  (and a few other places too in this file)

You could even have a helper that masks out on address64 architectures

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1523
&gt; +#if CPU(ADDRESS64) // Not USE(JSVALUE64). Structure::m_classInfo&apos;s implementation is changed by size of pointer.

not sure this comment is needed given you do this everywhere without this comment

&gt; Source/JavaScriptCore/runtime/JSObjectInlines.h:219
&gt; +        [&amp;] (const GCSafeConcurrentJSCellLocker&amp;, PropertyOffset offset, PropertyOffset newMaxOffset) {

nit: also fix style like you did elsewhere?

&gt; Source/JavaScriptCore/runtime/Structure.h:920
&gt; +    // Structure is one of the most frequently allocated data structure. Moreover, Structure tends to be alive long!

&quot;alive long&quot; =&gt; &quot;alive a long time&quot;

&gt; Source/JavaScriptCore/runtime/Structure.h:929
&gt; +    //  Other pairs works well. We carefully put assertions to setters, analyze access patterns and pick appropriate pairs in Structure fields.

nice

&gt; Source/JavaScriptCore/runtime/StructureInlines.h:162
&gt; +inline bool Structure::ruleOutUnseenPropertyHash(UniquedStringImpl* uid) const

this should be called `ruleOutUnseenProperty`. It has nothing to do with hashes.

&gt; Source/JavaScriptCore/runtime/StructureInlines.h:177
&gt; +#if CPU(ADDRESS64)
&gt; +    return bitwise_cast&lt;uintptr_t&gt;(m_propertyHashAndSeenProperties.pointer());
&gt; +#else
&gt; +    return m_seenProperties;
&gt; +#endif

minor style nit: I&apos;d make this just return a TinyBloomFilter, and the code inside ruleOut can just call ruleOut.

&gt; Source/WTF/wtf/CompactPointerTuple.h:57
&gt; +        return 48 / 8;

should we give 48 a name instead of using it directly everywhere?

Maybe maxNumberOfBitsInPointer?

&gt; Source/WTF/wtf/CompactRefPtrTuple.h:34
&gt; +class CompactRefPtrTuple final {

nice

&gt; LayoutTests/ChangeLog:9
&gt; +        This test is half-broken since it relies on HashMap&apos;s order implicitly.
&gt; +        We changed SymbolImpl&apos;s hash code, so it makes the result different.

can you file a bug so we can make the test not reliant one this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622061</commentid>
    <comment_count>24</comment_count>
      <attachid>391488</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-23 23:52:39 -0800</bug_when>
    <thetext>Comment on attachment 391488
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/ChangeLog:8
&gt;&gt; +        This patch shrinks sizeof(Structure) from 112 to 96 (16 bytes) in 64 bit architectures.
&gt; 
&gt; it&apos;s not 64-bit architectures, its architectures with 64-bit pointers. (Since arm64_32 does not do this)

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:13
&gt;&gt; +               we store hash code in Structure in 3 bytes (24 bits) for property-hash and seen-property-hash.
&gt; 
&gt; the code isn&apos;t actually doing this. AFAICT, it uses 48 bits for seen properties, and uses 16 bits to accumulate hash, and then uses the 64-bit combination of those things as the &quot;seen property hash&quot;
&gt; 
&gt; (On a side note, I wonder if we really even need the seen property hash anymore, since the bloom filter might be sufficient. But I guess if we have the spare bits, it doesn&apos;t hurt to keep it.)

Yes. I&apos;ve just removed this (1).

&gt;&gt; Source/JavaScriptCore/ChangeLog:20
&gt;&gt; +               We are setting m_cachedPrototypeChain only if Structure is for JSObject. Clearing happens only if it is not
&gt; 
&gt; &quot;are&quot; =&gt; &quot;were&quot;.
&gt; &quot;happens&quot; =&gt; &quot;happened&quot;
&gt; &quot;it is not&quot; =&gt; &quot;it was not&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:25
&gt;&gt; +        Combining all of the above techniques and gets us 16 bytes.
&gt; 
&gt; &quot;and gets us&quot; =&gt; &quot;saves us&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1523
&gt;&gt; +#if CPU(ADDRESS64) // Not USE(JSVALUE64). Structure::m_classInfo&apos;s implementation is changed by size of pointer.
&gt; 
&gt; not sure this comment is needed given you do this everywhere without this comment

Removed.

&gt;&gt; Source/JavaScriptCore/runtime/JSObjectInlines.h:219
&gt;&gt; +        [&amp;] (const GCSafeConcurrentJSCellLocker&amp;, PropertyOffset offset, PropertyOffset newMaxOffset) {
&gt; 
&gt; nit: also fix style like you did elsewhere?

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.h:920
&gt;&gt; +    // Structure is one of the most frequently allocated data structure. Moreover, Structure tends to be alive long!
&gt; 
&gt; &quot;alive long&quot; =&gt; &quot;alive a long time&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/StructureInlines.h:162
&gt;&gt; +inline bool Structure::ruleOutUnseenPropertyHash(UniquedStringImpl* uid) const
&gt; 
&gt; this should be called `ruleOutUnseenProperty`. It has nothing to do with hashes.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/StructureInlines.h:177
&gt;&gt; +#endif
&gt; 
&gt; minor style nit: I&apos;d make this just return a TinyBloomFilter, and the code inside ruleOut can just call ruleOut.

Fixed.

&gt;&gt; Source/WTF/wtf/CompactPointerTuple.h:52
&gt;&gt; +    static_assert(WTF_OS_CONSTANT_EFFECTIVE_ADDRESS_WIDTH &lt;= 48);
&gt; 
&gt; This should be written as static_assert(OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH) &lt;= 48); if possible.

Fixed.

&gt;&gt; Source/WTF/wtf/CompactPointerTuple.h:57
&gt;&gt; +        return 48 / 8;
&gt; 
&gt; should we give 48 a name instead of using it directly everywhere?
&gt; 
&gt; Maybe maxNumberOfBitsInPointer?

Fixed.

&gt;&gt; LayoutTests/ChangeLog:9
&gt;&gt; +        We changed SymbolImpl&apos;s hash code, so it makes the result different.
&gt; 
&gt; can you file a bug so we can make the test not reliant one this?

Filed https://bugs.webkit.org/show_bug.cgi?id=208118</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622067</commentid>
    <comment_count>25</comment_count>
      <attachid>391488</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-24 00:35:58 -0800</bug_when>
    <thetext>Comment on attachment 391488
Patch

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

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6094
&gt;&gt; +                LValue cachedPrototypeChainOrRareData = m_out.bitAnd(m_out.constIntPtr(Structure::cachedPrototypeChainOrRareDataMask), m_out.loadPtr(structure, m_heaps.Structure_cachedPrototypeChainOrRareData));
&gt; 
&gt; only do the and if address64?  (and a few other places too in this file)
&gt; 
&gt; You could even have a helper that masks out on address64 architectures

I think the current FTL does not assume non-address-64 environment. FTL supports address64 environment and does not support other environments.

Just adding this helper is not enough to make FTL work with ARM64_32.
For example, so many places are using Int64 / pointerType() in the same meaning.
For now, I don&apos;t think we should assume non-address-64 case in FTL to make code simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622068</commentid>
    <comment_count>26</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-24 00:38:56 -0800</bug_when>
    <thetext>Committed r257201: &lt;https://trac.webkit.org/changeset/257201&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622210</commentid>
    <comment_count>27</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-24 09:42:25 -0800</bug_when>
    <thetext>Committed r257212: &lt;https://trac.webkit.org/changeset/257212&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622213</commentid>
    <comment_count>28</comment_count>
      <attachid>391488</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2020-02-24 09:46:46 -0800</bug_when>
    <thetext>Comment on attachment 391488
Patch

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

&gt; Source/JavaScriptCore/runtime/Structure.h:754
&gt; +        m_maxOffsetAndTransitionPropertyName.setPointer(transitionPropertyName);

We are missing 32-bit case here. This is causing build failures on ports where `CPU(ADDRESS64)` is false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622214</commentid>
    <comment_count>29</comment_count>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2020-02-24 09:59:41 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #27)
&gt; Committed r257212: &lt;https://trac.webkit.org/changeset/257212&gt;

This fix what I mentioned. Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622287</commentid>
    <comment_count>30</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-24 13:18:43 -0800</bug_when>
    <thetext>Committed r257237: &lt;https://trac.webkit.org/changeset/257237&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622338</commentid>
    <comment_count>31</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-24 14:46:13 -0800</bug_when>
    <thetext>Committed r257257: &lt;https://trac.webkit.org/changeset/257257&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637376</commentid>
    <comment_count>32</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-03 08:59:15 -0700</bug_when>
    <thetext>Committed r259463: &lt;https://trac.webkit.org/changeset/259463&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390953</attachid>
            <date>2020-02-17 11:45:27 -0800</date>
            <delta_ts>2020-02-17 11:46:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207827-20200217114526.patch</filename>
            <type>text/plain</type>
            <size>51427</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NDMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YzI2YjJhZGYwNWQxYWY1ODlmMmExOGEwMmJmMjQ0ZGM0ZDE1MTM1Li45MjZjM2ZmNGRiM2E5Mjc0
YWRiYTljNWYyMzg4YzEzMGIwNzUyNDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAyMC0wMi0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFNocmluayBTdHJ1Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzgyNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3ViQ2xhc3Mp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlUHJvbWlz
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVJbnRl
cm5hbEZpZWxkT2JqZWN0KToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlUHJvbWlzZSk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVJbnRlcm5hbEZpZWxkT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNoZWNr
U3ViQ2xhc3MpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q2xvbmVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1
bnRpbWUvQ29uY3VycmVudEpTTG9jay5oOgorICAgICAgICAoSlNDOjpDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlOjpDb25jdXJyZW50SlNMb2NrZXJCYXNlKToKKyAgICAgICAgKEpTQzo6R0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VySW1wbDo6R0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbCk6CisgICAg
ICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGw6On5HQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXJJbXBsKToKKyAgICAgICAgKEpTQzo6Q29uY3VycmVudEpTTG9ja2VySW1wbDo6Q29u
Y3VycmVudEpTTG9ja2VySW1wbCk6CisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlcjo6R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyOjp+R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29uY3VycmVudEpTTG9ja2VyOjpDb25jdXJyZW50SlNMb2Nr
ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVu
dGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0RGlyZWN0Q29uY3VycmVudGx5IGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJlcGFyZVRvUHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRN
YXBGb3JNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFs
aXplUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQ
cm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXRpb25TbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmbGF0
dGVuRGljdGlvbmFyeVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZW5zdXJl
UHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpjbGVhclByb3BlcnR5VGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvV3Jp
dGVCYXJyaWVyLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3cp
OgorCiAyMDIwLTAyLTEwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBQbGFjYXRlIGV4Y2VwdGlvbiBjaGVjayB2YWxpZGF0b3IgaW4gR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6cHV0KCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCmluZGV4IDY0MmIxNjM1NmY5MGU5YzM4NjAyZWJjNTdmZDllMDRhMGY0NWI1Mjgu
LmY4NmI1ZWM3M2MwMzZkZGE3YWZkY2ViMzVmODM0NWUwZmJiMDQzYTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC05NjA1LDcgKzk2
MDUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3ViQ2xhc3MoTm9kZSog
bm9kZSkKICAgICAgICAgR1BSUmVnIHNwZWNpZmllZEdQUiA9IHNwZWNpZmllZC5ncHIoKTsKIAog
ICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBiYXNlR1BSLCBvdGhlckdQUiwg
c3BlY2lmaWVkR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Mob3RoZXJHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBvdGhlckdQUik7Cisj
aWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Mob3RoZXJHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xh
c3NJbmZvKCkpLCBvdGhlckdQUik7CisgICAgICAgIG1faml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01h
c2spKSwgb3RoZXJHUFIpOworI2Vsc2UKKyAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Mob3RoZXJHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZDbGFzc0luZm8oKSksIG90
aGVyR1BSKTsKKyNlbmRpZgogICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihub2RlLT5jbGFzc0luZm8oKSksIHNwZWNpZmllZEdQUik7CiAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKQEAgLTEyODc3LDggKzEyODgy
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVQcm9taXNlKE5vZGUqIG5v
ZGUpCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCByYXJlRGF0YUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5j
dGlvbjo6cmFyZURhdGFUYWcpKSk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZJbnRlcm5hbEZ1bmN0
aW9uQWxsb2NhdGlvblByb2ZpbGUoKSArIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmls
ZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0
dXJlR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxI
ZWxwZXJzOjpaZXJvLCBzdHJ1Y3R1cmVHUFIpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIobm9kZS0+aXNJbnRlcm5hbFByb21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkg
OiBKU1Byb21pc2U6OmluZm8oKSksIHNjcmF0Y2gxR1BSKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZz
ZXQoKSkpKTsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpvZmZzZXRPZlRyYW5zaXRpb25P
ZmZzZXRBbmRDbGFzc0luZm8oKSksIHNjcmF0Y2gxR1BSKTsKKyAgICBtX2ppdC5hbmRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0dXJlOjpj
bGFzc0luZm9NYXNrKSksIHNjcmF0Y2gxR1BSKTsKKyNlbHNlCisgICAgbV9qaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6Om9mZnNldE9mQ2xh
c3NJbmZvKCkpLCBzY3JhdGNoMUdQUik7CisjZW5kaWYKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgVHJ1c3Rl
ZEltbVB0cihub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gSlNJbnRlcm5hbFByb21pc2U6Omlu
Zm8oKSA6IEpTUHJvbWlzZTo6aW5mbygpKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2JqZWN0KSwgc2NyYXRjaDFHUFIp
OwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHNjcmF0Y2gxR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSkpOwogCkBAIC0xMjkyNSw4ICsxMjkzNSwx
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVj
dChOb2RlKiBub2RlLCBPcGVyYXRpb24gb3BlcgogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmFyZURhdGFHUFIsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwogICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURh
dGE6Om9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlKCkgKyBJbnRlcm5h
bEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgc3RydWN0dXJlR1BSKSk7Ci0g
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKEpTQ2xhc3M6OmluZm8oKSksIHNjcmF0Y2gxR1BS
KTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwg
U3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkpKTsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAg
IG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0
dXJlOjpvZmZzZXRPZlRyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8oKSksIHNjcmF0Y2gxR1BS
KTsKKyAgICBtX2ppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSksIHNjcmF0Y2gxR1BSKTsKKyNl
bHNlCisgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BS
LCBTdHJ1Y3R1cmU6Om9mZnNldE9mQ2xhc3NJbmZvKCkpLCBzY3JhdGNoMUdQUik7CisjZW5kaWYK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoMUdQUiwgVHJ1c3RlZEltbVB0cihKU0NsYXNzOjppbmZvKCkpKSk7CiAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBnbG9i
YWxPYmplY3QpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5LmgKaW5kZXggYjEwOGFiZmNjYjg5NThhODMwN2MwYWE3OGNkNjdmMjAyZDNiOGM1
Yy4uYWIwMjQxODYwMDdkNWRmNzhiMzU1ZjRjNmZhZWVjYWJlOTBmMDEyNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgK
QEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAg
bWFjcm8oU3RyaW5nSW1wbF9kYXRhLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpIFwKICAgICBt
YWNybyhTdHJpbmdJbXBsX2hhc2hBbmRGbGFncywgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSkg
XAogICAgIG1hY3JvKFN0cmluZ0ltcGxfbGVuZ3RoLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlP
ZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVyZV9jbGFzc0luZm8sIFN0cnVjdHVyZTo6Y2xh
c3NJbmZvT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhTdHJ1Y3R1cmVfdHJhbnNpdGlvbk9mZnNldEFu
ZENsYXNzSW5mbywgU3RydWN0dXJlOjpvZmZzZXRPZlRyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0lu
Zm8oKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9nbG9iYWxPYmplY3QsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfaW5kZXhpbmdNb2RlSW5j
bHVkaW5nSGlzdG9yeSwgU3RydWN0dXJlOjppbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5T2Zm
c2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfaW5saW5lQ2FwYWNpdHksIFN0cnVjdHVyZTo6
aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDRkMzQyN2JjODJlOGM5YjI0N2FjODcxYTAyMDAwMWJi
MjM4MjlmMjYuLjc2M2Y4NDczMGU4MGY1MjFiMjk1YTE2ZmJjZWM4NmU0ZDU2YjliOTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTY2NzUs
NyArNjY3NSw4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaCht
X291dC5pc1plcm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1N0
cnVjdHVyZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0cnVjdHVyZSwgY2hlY2tH
bG9iYWxPYmplY3RDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0
LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5j
b25zdEludFB0cihtX25vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlz
ZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVj
dENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1f
b3V0LmJpdEFuZChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfdHJh
bnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyksIG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6
Y2xhc3NJbmZvTWFzaykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJ
bmZvLCBtX291dC5jb25zdEludFB0cihtX25vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0lu
dGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpKSwgdXN1YWxseShjaGVj
a0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjaGVja0dsb2JhbE9iamVjdENhc2UsIGZhc3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGRlcml2ZWRTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3Ioc3RydWN0
dXJlKTsKQEAgLTY3MzAsNyArNjczMSw4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAg
IG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2Up
LCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0
cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmplY3RDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFz
c0luZm8pLCBtX291dC5jb25zdEludFB0cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVj
a0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgTFZhbHVlIGNs
YXNzSW5mbyA9IG1fb3V0LmJpdEFuZChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5T
dHJ1Y3R1cmVfdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyksIG1fb3V0LmNvbnN0SW50UHRy
KFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFzaykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQu
ZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1
YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAg
ICBtX291dC5hcHBlbmRUbyhjaGVja0dsb2JhbE9iamVjdENhc2UsIGZhc3RBbGxvY2F0aW9uQ2Fz
ZSk7CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChtX291dC5sb2FkUHRyKHN0cnVj
dHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0KSwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSksIHVzdWFsbHkoZmFzdEFsbG9jYXRpb25DYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7
CkBAIC0xMzIwOCw3ICsxMzIxMCw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogCiAgICAgICAg
ICAgICBMVmFsdWUgc3RydWN0dXJlID0gbG9hZFN0cnVjdHVyZShjZWxsKTsKLSAgICAgICAgICAg
IExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1
Y3R1cmVfY2xhc3NJbmZvKTsKKyAgICAgICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5i
aXRBbmQobV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX3RyYW5zaXRp
b25PZmZzZXRBbmRDbGFzc0luZm8pLCBtX291dC5jb25zdEludFB0cihTdHJ1Y3R1cmU6OmNsYXNz
SW5mb01hc2spKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG90aGVyQXRTdGFydCA9IG1f
b3V0LmFuY2hvcihjbGFzc0luZm8pOwogICAgICAgICAgICAgbV9vdXQuanVtcChsb29wKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAK
aW5kZXggOTZhMzYzNWU2ODI3MzkzZWU4MzZkODA0Nzc3MjRhMjVkNTQ2YzI2MS4uMjQ5YmE1YWFj
NTFlNTA5MGNmMjNmN2Y5ZThlOWU0N2JjMjFlZjQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAg
U3RydWN0dXJlKiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2xvbmVk
QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIGluZGV4aW5nVHlwZSk7CiAg
ICAgc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAogICAgICAgICB2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSwKLSAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9m
ZnNldCkgeworICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIm
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09IGNsb25lZEFyZ3VtZW50c0xlbmd0
aFByb3BlcnR5T2Zmc2V0KTsKICAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0TWF4T2Zmc2V0KHZt
LCBuZXdNYXhPZmZzZXQpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2suaAppbmRleCBhYTI3M2JhZGJlZmE3MzdhMGVhYTUz
NGZiZWJhOWY1MDFmZGI4NjI3Li45NWViYTBiZjNmOWEyMDA1YjY0NTJlYWRmN2NlMGE0MjVjYTU2
YTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50
SlNMb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpT
TG9jay5oCkBAIC0zMywxOCArMzMsMTggQEAKIG5hbWVzcGFjZSBKU0MgewogCiB1c2luZyBDb25j
dXJyZW50SlNMb2NrID0gTG9jazsKLXVzaW5nIENvbmN1cnJlbnRKU0xvY2tlckltcGwgPSBMb2Nr
SG9sZGVyOwogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZihDb25jdXJyZW50SlNMb2NrKSA9PSAxLCAi
UmVnYXJkbGVzcyBvZiBzdGF0dXMgb2YgY29uY3VycmVudCBKUyBmbGFnLCBzaXplIG9mIENvbnVy
cmVudEpTTG9jayBpcyBhbHdheXMgb25lIGJ5dGUuIik7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExv
Y2s+CiBjbGFzcyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIDogcHVibGljIEFic3RyYWN0TG9ja2Vy
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50SlNMb2NrZXJCYXNlKTsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlKENvbmN1cnJlbnRKU0xv
Y2smIGxvY2thYmxlKQorICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoTG9jayYg
bG9ja2FibGUpCiAgICAgICAgIDogbV9sb2NrZXIoJmxvY2thYmxlKQogICAgIHsKICAgICB9Ci0g
ICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9ja2VyQmFzZShDb25jdXJyZW50SlNMb2NrKiBsb2Nr
YWJsZSkKKyAgICBleHBsaWNpdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlKExvY2sqIGxvY2thYmxl
KQogICAgICAgICA6IG1fbG9ja2VyKGxvY2thYmxlKQogICAgIHsKICAgICB9CkBAIC02NCw2MyAr
NjQsNjUgQEAgY2xhc3MgQ29uY3VycmVudEpTTG9ja2VyQmFzZSA6IHB1YmxpYyBBYnN0cmFjdExv
Y2tlciB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvbmN1cnJlbnRKU0xvY2tlckltcGwgbV9s
b2NrZXI7CisgICAgTG9ja2VyPExvY2s+IG1fbG9ja2VyOwogfTsKIAotY2xhc3MgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyIDogcHVibGljIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgewordGVtcGxh
dGU8dHlwZW5hbWUgTG9jaz4KK2NsYXNzIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwgOiBw
dWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPiB7CiBwdWJsaWM6Ci0gICAgR0NTYWZl
Q29uY3VycmVudEpTTG9ja2VyKENvbmN1cnJlbnRKU0xvY2smIGxvY2thYmxlLCBIZWFwJiBoZWFw
KQotICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UobG9ja2FibGUpCisgICAgR0NTYWZl
Q29uY3VycmVudEpTTG9ja2VySW1wbChMb2NrJiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKKyAgICAg
ICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+KGxvY2thYmxlKQogICAgICAgICAsIG1f
ZGVmZXJHQyhoZWFwKQogICAgIHsKICAgICB9CiAKLSAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIoQ29uY3VycmVudEpTTG9jayogbG9ja2FibGUsIEhlYXAmIGhlYXApCi0gICAgICAgIDogQ29u
Y3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJsZSkKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXJJbXBsKExvY2sqIGxvY2thYmxlLCBIZWFwJiBoZWFwKQorICAgICAgICA6IENvbmN1cnJlbnRK
U0xvY2tlckJhc2U8TG9jaz4obG9ja2FibGUpCiAgICAgICAgICwgbV9kZWZlckdDKGhlYXApCiAg
ICAgewogICAgIH0KIAotICAgIH5HQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIoKQorICAgIH5HQ1Nh
ZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsKCkKICAgICB7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8g
dW5sb2NrIGVhcmx5IGR1ZSB0byB0aGUgZGVzdHJ1Y3Rpb24gb3JkZXIgb2YgYmFzZQogICAgICAg
ICAvLyB2cy4gZGVyaXZlZCBjbGFzc2VzLiBJZiB3ZSBkaWRuJ3QsIHRoZW4gd2Ugd291bGQgZGVz
dHJveSB0aGUgCiAgICAgICAgIC8vIERlZmVyR0Mgb2JqZWN0IGJlZm9yZSB1bmxvY2tpbmcgdGhl
IGxvY2sgd2hpY2ggY291bGQgY2F1c2UgYSBHQwogICAgICAgICAvLyBhbmQgcmVzdWx0aW5nIGRl
YWRsb2NrLgotICAgICAgICB1bmxvY2tFYXJseSgpOworICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlPExvY2s+Ojp1bmxvY2tFYXJseSgpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBEZWZl
ckdDIG1fZGVmZXJHQzsKIH07CiAKLWNsYXNzIENvbmN1cnJlbnRKU0xvY2tlciA6IHB1YmxpYyBD
b25jdXJyZW50SlNMb2NrZXJCYXNlIHsKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2s+CitjbGFzcyBD
b25jdXJyZW50SlNMb2NrZXJJbXBsIDogcHVibGljIENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9j
az4gewogcHVibGljOgotICAgIENvbmN1cnJlbnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrJiBs
b2NrYWJsZSkKLSAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAg
IENvbmN1cnJlbnRKU0xvY2tlckltcGwoTG9jayYgbG9ja2FibGUpCisgICAgICAgIDogQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZTxMb2NrPihsb2NrYWJsZSkKICNpZiAhZGVmaW5lZChOREVCVUcpCiAg
ICAgICAgICwgbV9kaXNhbGxvd0dDKHN0ZDo6aW5fcGxhY2UpCiAjZW5kaWYKICAgICB7CiAgICAg
fQogCi0gICAgQ29uY3VycmVudEpTTG9ja2VyKENvbmN1cnJlbnRKU0xvY2sqIGxvY2thYmxlKQot
ICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UobG9ja2FibGUpCisgICAgQ29uY3VycmVu
dEpTTG9ja2VySW1wbChMb2NrKiBsb2NrYWJsZSkKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlPExvY2s+KGxvY2thYmxlKQogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICAgICAgLCBt
X2Rpc2FsbG93R0Moc3RkOjppbl9wbGFjZSkKICNlbmRpZgogICAgIHsKICAgICB9CiAKLSAgICBD
b25jdXJyZW50SlNMb2NrZXIoTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKQotICAgICAgICA6IENvbmN1
cnJlbnRKU0xvY2tlckJhc2UoTm9Mb2NraW5nTmVjZXNzYXJ5KQorICAgIENvbmN1cnJlbnRKU0xv
Y2tlckltcGwoTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKQorICAgICAgICA6IENvbmN1cnJlbnRKU0xv
Y2tlckJhc2U8TG9jaz4oTm9Mb2NraW5nTmVjZXNzYXJ5KQogI2lmICFkZWZpbmVkKE5ERUJVRykK
ICAgICAgICAgLCBtX2Rpc2FsbG93R0MoV1RGOjpudWxsb3B0KQogI2VuZGlmCiAgICAgewogICAg
IH0KICAgICAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIoaW50KSA9IGRlbGV0ZTsKKyAgICBDb25j
dXJyZW50SlNMb2NrZXJJbXBsKGludCkgPSBkZWxldGU7CiAKICNpZiAhZGVmaW5lZChOREVCVUcp
CiBwcml2YXRlOgpAQCAtMTI4LDQgKzEzMCw3IEBAIGNsYXNzIENvbmN1cnJlbnRKU0xvY2tlciA6
IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIHsKICNlbmRpZgogfTsKIAordXNpbmcgQ29u
Y3VycmVudEpTTG9ja2VyID0gQ29uY3VycmVudEpTTG9ja2VySW1wbDxDb25jdXJyZW50SlNMb2Nr
PjsKK3VzaW5nIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciA9IEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlckltcGw8Q29uY3VycmVudEpTTG9jaz47CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAppbmRleCA2NjVkMDg4OWNmNDQ2MWMzYWIwYTJh
ZjRiMDdjNmE1OGM5MDQyMWM0Li5kNTY1NmY4YmZkZmY2MzI5OTJhYzFkYTQ1MWUzNWMxYTU0OGQ0
NjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaApAQCAtMjQsNiArMjQs
NyBAQAogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKICNpbmNsdWRlICJDZWxsU3RhdGUuaCIKKyNp
bmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiQ29uc3RydWN0RGF0YS5oIgog
I2luY2x1ZGUgIkVudW1lcmF0aW9uTW9kZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTI4OCw2
ICsyODksOSBAQCBjbGFzcyBKU0NlbGxMb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CiB9OwogCit1c2luZyBDb25jdXJyZW50SlND
ZWxsTG9ja2VyID0gQ29uY3VycmVudEpTTG9ja2VySW1wbDxKU0NlbGxMb2NrPjsKK3VzaW5nIEdD
U2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgPSBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBs
PEpTQ2VsbExvY2s+OworCiAvLyBGSVhNRTogUmVmZXIgdG8gU3Vic3BhY2UgYnkgcmVmZXJlbmNl
LgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4OAogdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAppbmRleCBhY2QyOWRlZDgxMzUxZmIyODRiMjE1OWFkNDdhNjMxYzM0OTRmMWRmLi4y
OThhNWU3YzRkYmY0ZWIyZjg5MWI2ZjdiYWMwMmZhMGFhZmJjOTMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCkBAIC0yMDA1LDcgKzIwMDUsNyBAQCBib29s
IEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcgogCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGlu
dmFsaWRPZmZzZXQ7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkpCi0gICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgW10gKGNvbnN0IEdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKKyAgICAg
ICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlv
bih2bSwgcHJvcGVydHlOYW1lLCBbXShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2Vy
JiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCAmZGVmZXJyZWRXYXRjaHBv
aW50RmlyZSk7CiAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+bV9idXR0ZXJmbHkgJiYgIXN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhc3RydWN0dXJlLT5oYXNJbmRleGluZ0hl
YWRlcih0aGlzT2JqZWN0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgKaW5kZXggZWM2MzAwZWE5Yjk3MmNlOWJhMGZhZDgxODI1N2FmYjIwZDgyYTJlZC4uYTYyZmYy
MWQ4ZjUwMTA2ODI3ZDcwYjc5YjU2MzFlMDhkYWM0MWMxYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCkBAIC0xMzI5LDcgKzEzMjksNyBAQCBpbmxpbmUgSlNWYWx1
ZSBKU09iamVjdDo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIC8vIGZsYXR0ZW4gYW4gb2JqZWN0LgogaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6Omdl
dERpcmVjdENvbmN1cnJlbnRseShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KSBjb25zdAogewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3RydWN0dXJl
LT5sb2NrKCkpOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+
Y2VsbExvY2soKSk7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gZ2V0RGlyZWN0KG9mZnNldCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCmluZGV4IGE2
NzAwMzQ3ZjY5NzZlNjFiMDVkYjE4ZjJiMDk2YWFhNzllMmViYjMuLjk1YTY3MTBjMmUzNTY4NDM2
ZDVjY2EyOGM4NmIyZGM5NGQ4YTg4MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCkBAIC0yMTYsNyArMjE2LDcgQEAgQUxXQVlTX0lOTElO
RSBQcm9wZXJ0eU9mZnNldCBKU09iamVjdDo6cHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oVk0mIHYKICAgICBQcm9wZXJ0eU9mZnNldCByZXN1bHQ7CiAgICAgc3RydWN0dXJlLT5h
ZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAogICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLAotICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7Cisg
ICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBuZXdPdXRPZkxpbmVDYXBhY2l0eSA9IFN0cnVjdHVyZTo6b3V0T2ZMaW5lQ2Fw
YWNpdHkobmV3TWF4T2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChuZXdPdXRPZkxpbmVDYXBhY2l0
eSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0eSkgewogICAgICAgICAgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5l
Q2FwYWNpdHksIG5ld091dE9mTGluZUNhcGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCmluZGV4IDE5Nzc1OWVhNzljYjg3ZTIxNDAzYTgzY2Y4Mzcw
NWRkMmNlMTU0NzcuLmQ3YmU1YWNjYTQyYWZlM2VmMzhlZWU4ZTBhZGM3Y2VmMDRhZjJiMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcApAQCAtMTc4LDEy
ICsxNzgsMTUgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKIFN0cnVjdHVyZTo6
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFz
c0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5
KQogICAgIDogSlNDZWxsKHZtLCB2bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBt
X2Jsb2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJRCh0aGlzKSwgaW5kZXhp
bmdUeXBlLCB0eXBlSW5mbykKLSAgICAsIG1fb3V0T2ZMaW5lVHlwZUZsYWdzKHR5cGVJbmZvLm91
dE9mTGluZVR5cGVGbGFncygpKQogICAgICwgbV9pbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBhY2l0
eSkKICAgICAsIG1fYml0RmllbGQoMCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KHZtLCB0aGlzLCBn
bG9iYWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1heUJlTnVsbCkKICAg
ICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBwcm90b3R5cGUpCisjaWYgQ1BVKEFERFJFU1M2NCkg
JiYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgLCBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0lu
Zm8oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2xhc3NJbmZvKSkKKyNlbHNlCiAgICAgLCBtX2Ns
YXNzSW5mbyhjbGFzc0luZm8pCisjZW5kaWYKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRT
ZXQoSXNXYXRjaGVkKQogICAgICwgbV9wcm9wZXJ0eUhhc2goMCkKIHsKQEAgLTIwNCwxMyArMjA3
LDE5IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvCiAgICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9u
VHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9m
ZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKKworI2lmIENQVShB
RERSRVNTNjQpICYmIENQVShMSVRUTEVfRU5ESUFOKQorICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdz
QW5kUHJvcGVydHlUYWJsZVVuc2FmZSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odHlwZUluZm8u
b3V0T2ZMaW5lVHlwZUZsYWdzKCkpIDw8IG91dE9mTGluZVR5cGVGbGFnc1NoaWZ0OworI2Vsc2UK
KyAgICBtX291dE9mTGluZVR5cGVGbGFncyA9IHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygp
OworI2VuZGlmCiAgCiAgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6
Om1heElubGluZUNhcGFjaXR5KCkpOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxQcm9wZXJ0eU9m
ZnNldD4oaW5saW5lQ2FwYWNpdHkpIDwgZmlyc3RPdXRPZkxpbmVPZmZzZXQpOwogICAgIEFTU0VS
VCghaGFzUmFyZURhdGEoKSk7Ci0gICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRl
ck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzKCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVy
dGllcygpKTsKLSAgICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERh
dGEoKSB8fCBtX2NsYXNzSW5mby0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6
Z2V0Q2FsbERhdGEpOworICAgIEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVy
dGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIWNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJl
YWRvbmx5UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
cygpIHx8ICFjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMo
KSk7CisgICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkg
fHwgY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENh
bGxEYXRhKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIFN0cnVjdHVyZTo6c19pbmZvID0geyAiU3Ry
dWN0dXJlIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShT
dHJ1Y3R1cmUpIH07CkBAIC0yMjAsMTUgKzIyOSwxOSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShW
TSYgdm0pCiAgICAgLCBtX2lubGluZUNhcGFjaXR5KDApCiAgICAgLCBtX2JpdEZpZWxkKDApCiAg
ICAgLCBtX3Byb3RvdHlwZSh2bSwgdGhpcywganNOdWxsKCkpCisjaWYgQ1BVKEFERFJFU1M2NCkg
JiYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgLCBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0lu
Zm8oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaW5mbygpKSkKKyNlbHNlCiAgICAgLCBtX2NsYXNz
SW5mbyhpbmZvKCkpCisjZW5kaWYKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSXNX
YXRjaGVkKQogICAgICwgbV9wcm9wZXJ0eUhhc2goMCkKIHsKICAgICBzZXREaWN0aW9uYXJ5S2lu
ZChOb25lRGljdGlvbmFyeUtpbmQpOwogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZShmYWxz
ZSk7Ci0gICAgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhtX2NsYXNzSW5mby0+aGFzU3Rh
dGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgc2V0SGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllcyhjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRp
ZXMoKSk7CiAgICAgc2V0SGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcyhmYWxzZSk7Ci0g
ICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byht
X2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAg
c2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhjbGFz
c0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CiAgICAgc2V0
SGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKGZhbHNlKTsK
ICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24odHJ1ZSk7
CiAgICAgc2V0VHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygwKTsKQEAgLTI0NCwxMSArMjU3
LDE1IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAKICAgICBUeXBlSW5mbyB0eXBl
SW5mbyA9IFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyk7CiAgICAgbV9ibG9iID0g
U3RydWN0dXJlSURCbG9iKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQodGhp
cyksIDAsIHR5cGVJbmZvKTsKKyNpZiBDUFUoQUREUkVTUzY0KSAmJiBDUFUoTElUVExFX0VORElB
TikKKyAgICBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUgPSBzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpKSA8PCBvdXRP
ZkxpbmVUeXBlRmxhZ3NTaGlmdDsKKyNlbHNlCiAgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0
eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxhZ3MoKTsKKyNlbmRpZgogCi0gICAgQVNTRVJUKGhhc1Jl
YWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAhbV9jbGFz
c0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VS
VChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNT
ZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZv
KCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBtX2NsYXNzSW5mby0+bWV0aG9kVGFibGUuZ2V0
Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEpOworICAgIEFTU0VSVChoYXNSZWFkT25s
eU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIWNsYXNzSW5mbygp
LT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQoaGFz
R2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVy
T3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92
ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldENhbGxE
YXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKIH0KIAogU3RydWN0dXJlOjpTdHJ1Y3R1cmUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCkBAIC0yNTYsNyArMjczLDExIEBAIFN0cnVjdHVyZTo6
U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2aW91cywgRGVmZXJyZWRTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0CiAgICAgLCBtX2lubGluZUNhcGFjaXR5KHByZXZpb3VzLT5tX2lubGluZUNh
cGFjaXR5KQogICAgICwgbV9iaXRGaWVsZCgwKQogICAgICwgbV9wcm90b3R5cGUodm0sIHRoaXMs
IHByZXZpb3VzLT5tX3Byb3RvdHlwZS5nZXQoKSkKLSAgICAsIG1fY2xhc3NJbmZvKHByZXZpb3Vz
LT5tX2NsYXNzSW5mbykKKyNpZiBDUFUoQUREUkVTUzY0KSAmJiBDUFUoTElUVExFX0VORElBTikK
KyAgICAsIG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyhiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihwcmV2aW91cy0+Y2xhc3NJbmZvKCkpKQorI2Vsc2UKKyAgICAsIG1fY2xhc3NJbmZvKHBy
ZXZpb3VzLT5jbGFzc0luZm8oKSkKKyNlbmRpZgogICAgICwgbV90cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldChJc1dhdGNoZWQpCiAgICAgLCBtX3Byb3BlcnR5SGFzaChwcmV2aW91cy0+bV9wcm9wZXJ0
eUhhc2gpCiAgICAgLCBtX3NlZW5Qcm9wZXJ0aWVzKHByZXZpb3VzLT5tX3NlZW5Qcm9wZXJ0aWVz
KQpAQCAtMjgxLDcgKzMwMiwxMSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVj
dHVyZSogcHJldmlvdXMsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdAogIAogICAgIFR5
cGVJbmZvIHR5cGVJbmZvID0gcHJldmlvdXMtPnR5cGVJbmZvKCk7CiAgICAgbV9ibG9iID0gU3Ry
dWN0dXJlSURCbG9iKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQodGhpcyks
IHByZXZpb3VzLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCksIHR5cGVJbmZvKTsKKyNp
ZiBDUFUoQUREUkVTUzY0KSAmJiBDUFUoTElUVExFX0VORElBTikKKyAgICBtX291dE9mTGluZVR5
cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHR5
cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpKSA8PCBvdXRPZkxpbmVUeXBlRmxhZ3NTaGlmdDsK
KyNlbHNlCiAgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5vdXRPZkxpbmVUeXBl
RmxhZ3MoKTsKKyNlbmRpZgogCiAgICAgQVNTRVJUKCFwcmV2aW91cy0+dHlwZUluZm8oKS5zdHJ1
Y3R1cmVJc0ltbW9ydGFsKCkpOwogICAgIHNldFByZXZpb3VzSUQodm0sIHByZXZpb3VzKTsKQEAg
LTI5Myw5ICszMTgsOSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSog
cHJldmlvdXMsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdAogCiAgICAgaWYgKHByZXZp
b3VzLT5tX2dsb2JhbE9iamVjdCkKICAgICAgICAgbV9nbG9iYWxPYmplY3Quc2V0KHZtLCB0aGlz
LCBwcmV2aW91cy0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpOwotICAgIEFTU0VSVChoYXNSZWFkT25s
eU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIW1fY2xhc3NJbmZv
LT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NFUlQoaGFz
R2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVy
T3JSZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92
ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgbV9jbGFzc0luZm8tPm1ldGhvZFRhYmxlLmdldENhbGxE
YXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKKyAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdl
dHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8ICFjbGFzc0luZm8oKS0+aGFz
U3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKGhhc0dldHRl
clNldHRlclByb3BlcnRpZXMoKSB8fCAhY2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVh
ZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlk
ZXNHZXRDYWxsRGF0YSgpIHx8IGNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAh
PSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CiB9CiAKIFN0cnVjdHVyZTo6flN0cnVjdHVyZSgpCkBA
IC0zMTcsNyArMzQyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShQb2x5UHJvdG9U
YWcsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICB1bnNpZ25lZCBv
bGRPdXRPZkxpbmVDYXBhY2l0eSA9IHJlc3VsdC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBy
ZXN1bHQtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCiAgICAgICAgIHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wb2x5UHJvdG9OYW1lKCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLAotICAgICAgICBbJl0gKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVy
dHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3Vy
cmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQg
bmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTdHJ1Y3R1cmU6Om91
dE9mTGluZUNhcGFjaXR5KG5ld01heE9mZnNldCkgPT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkpOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09IGtub3duUG9seVByb3RvT2Zmc2V0
KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW5saW5lT2Zmc2V0KGtub3duUG9seVBy
b3RvT2Zmc2V0KSk7CkBAIC0zMzksNyArMzY0LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZpbmRTdHJ1
Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiYgc3QK
ICAgICB0YWJsZSA9IDA7CiAKICAgICBmb3IgKHN0cnVjdHVyZSA9IHRoaXM7IHN0cnVjdHVyZTsg
c3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpIHsKLSAgICAgICAgc3RydWN0dXJl
LT5tX2xvY2subG9jaygpOworICAgICAgICBzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkubG9jaygpOwog
ICAgICAgICAKICAgICAgICAgdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVPck51bGwo
KTsKICAgICAgICAgaWYgKHRhYmxlKSB7CkBAIC0zNDksNyArMzc0LDcgQEAgdm9pZCBTdHJ1Y3R1
cmU6OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKFZlY3RvcjxTdHJ1Y3R1
cmUqLCA4PiYgc3QKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RydWN0dXJlcy5hcHBl
bmQoc3RydWN0dXJlKTsKLSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAg
ICAgIHN0cnVjdHVyZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICB9CiAgICAgCiAgICAgQVNT
RVJUKCFzdHJ1Y3R1cmUpOwpAQCAtMzcyLDE0ICszOTcsMTQgQEAgUHJvcGVydHlUYWJsZSogU3Ry
dWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mIHZtLCBib29sIHNldFByb3BlcnR5
VGFibGUKICAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQo
bWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOwogICAgIGlmICh0YWJsZSkgewogICAgICAg
ICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBjYXBhY2l0eSk7Ci0gICAgICAgIHN0cnVjdHVyZS0+
bV9sb2NrLnVubG9jaygpOworICAgICAgICBzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7
CiAgICAgfSBlbHNlCiAgICAgICAgIHRhYmxlID0gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBj
YXBhY2l0eSk7CiAgICAgCiAgICAgLy8gTXVzdCBob2xkIHRoZSBsb2NrIG9uIHRoaXMgc3RydWN0
dXJlLCBzaW5jZSB3ZSB3aWxsIGJlIG1vZGlmeWluZyB0aGlzIHN0cnVjdHVyZSdzCiAgICAgLy8g
cHJvcGVydHkgbWFwLiBXZSBkb24ndCB3YW50IGdldENvbmN1cnJlbnRseSgpIHRvIHNlZSB0aGUg
cHJvcGVydHkgbWFwIGluIGEgaGFsZi1iYWtlZAogICAgIC8vIHN0YXRlLgotICAgIEdDU2FmZUNv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBHQ1NhZmVDb25j
dXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygpLCB2bS5oZWFwKTsKICAgICBpZiAo
c2V0UHJvcGVydHlUYWJsZSkKICAgICAgICAgdGhpcy0+c2V0UHJvcGVydHlUYWJsZSh2bSwgdGFi
bGUpOwogCkBAIC00NDAsNyArNDY1LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3QKIAogU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7Ci0gICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7CisgICAgQ29uY3Vy
cmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5jZWxsTG9jaygpKTsKICAgICByZXR1
cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoc3RydWN0dXJl
LCB1aWQsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9CiAKQEAgLTUxNCw3ICs1MzksNyBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFBybwogICAgIC8vIGNhc2UgYWxsIGlzIHdlbGwuICBJZiBpdCB3YXNu
J3QgZm9yIHRoZSBsb2NrLCB0aGUgR0Mgd291bGQgaGF2ZSBUT0NUT1U6IGlmIGNvdWxkIHJlYWQK
ICAgICAvLyBwcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyBiZWZvcmUgd2Ug
c2V0IGl0IHRvIHRydWUsIGFuZCB0aGVuIGJsb3cgdGhlIHRhYmxlIGF3YXkgYWZ0ZXIuCiAgICAg
ewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRyYW5zaXRpb24tPm1fbG9jayk7
CisgICAgICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKHRyYW5zaXRpb24tPmNlbExv
Y2soKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVU
cmFuc2l0aW9uaW5nKHRydWUpOwogICAgIH0KIApAQCAtNTM0LDcgKzU1OSw3IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvCiAKICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT50cmFuc2l0aW9u
T2Zmc2V0KCksIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIHsKLSAgICAgICAg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVh
cCk7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVy
ZS0+Y2VsbExvY2soKSwgdm0uaGVhcCk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9u
VGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB9CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tP
ZmZzZXRDb25zaXN0ZW5jeSgpOwpAQCAtNTk1LDcgKzYyMCw3IEBAIFN0cnVjdHVyZSogU3RydWN0
dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwKIAogICAgIC8vIFdoaWxlIHdlIGFyZSBkZWxldGluZyB0aGUgcHJvcGVydHksIHdlIG5l
ZWQgdG8gbWFrZSBzdXJlIHRoZSB0YWJsZSBpcyBub3QgY2xlYXJlZC4KICAgICB7Ci0gICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAgICAgICAg
Q29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2soKSk7CiAg
ICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9u
aW5nKHRydWUpOwogICAgIH0KIApAQCAtNjE2LDcgKzY0MSw3IEBAIFN0cnVjdHVyZSogU3RydWN0
dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwKIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwg
dHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgewotICAgICAgICBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrLCB2bS5oZWFwKTsKKyAgICAg
ICAgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5jZWxsTG9j
aygpLCB2bS5oZWFwKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQo
dm0sIHRyYW5zaXRpb24pOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNldENvbnNp
c3RlbmN5KCk7CkBAIC02MzQsNyArNjU5LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5n
ZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlMKICAg
ICB0cmFuc2l0aW9uLT5tX3Byb3RvdHlwZS5zZXQodm0sIHRyYW5zaXRpb24sIHByb3RvdHlwZSk7
CiAKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKHZtKTsKLSAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlv
bi0+bV9sb2NrKSwgdm0sIHRhYmxlKTsKKyAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJh
bnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0TWF4
T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKICAgICAKICAgICB0cmFuc2l0aW9u
LT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7CkBAIC02NDcsNyArNjcyLDcgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHIKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZt
LCBzdHJ1Y3R1cmUpOwogCiAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0dXJl
LT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgICAgICB0cmFuc2l0aW9uLT5w
aW4oaG9sZExvY2sodHJhbnNpdGlvbi0+bV9sb2NrKSwgdm0sIHRhYmxlKTsKKyAgICAgICAgdHJh
bnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUp
OwogICAgICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zm
c2V0KCkpOwogICAgICAgICAKICAgICAgICAgc3RydWN0dXJlID0gdHJhbnNpdGlvbjsKQEAgLTY2
OSw3ICs2OTQsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0aQogICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAKICAgICBQcm9wZXJ0
eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZt
KTsKLSAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+bV9sb2NrKSwgdm0s
IHRhYmxlKTsKKyAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+Y2VsbExv
Y2soKSksIHZtLCB0YWJsZSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1
Y3R1cmUtPm1heE9mZnNldCgpKTsKICAgICB0cmFuc2l0aW9uLT5zZXREaWN0aW9uYXJ5S2luZChr
aW5kKTsKICAgICB0cmFuc2l0aW9uLT5zZXRIYXNCZWVuRGljdGlvbmFyeSh0cnVlKTsKQEAgLTcx
MCw3ICs3MzUsNyBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxl
T3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgIGlmIChp
c1Bpbm5lZFByb3BlcnR5VGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQtPmNvcHko
dm0sIHJlc3VsdC0+c2l6ZSgpICsgMSk7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoY2VsbExv
Y2soKSk7CiAgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0sIG51bGxwdHIpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTc0Nyw3ICs3NzIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uU2xvdyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBObwogICAgICAgICAvLyB0YWJsZSBkb2Vzbid0IGtub3cgaG93IHRvIHRha2UgaW50byBh
Y2NvdW50IHN1Y2ggd2hvbGVzYWxlIGVkaXRzLgogCiAgICAgICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgICAg
ICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNoaW5nKGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayks
IHZtLCB0YWJsZSk7CisgICAgICAgIHRyYW5zaXRpb24tPnBpbkZvckNhY2hpbmcoaG9sZExvY2so
dHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgICAgIHRyYW5zaXRpb24t
PnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAgICAgICAgIAogICAg
ICAgICB0YWJsZSA9IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVPck51bGwoKTsKQEAgLTc3MCw5
ICs3OTUsOSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uU2xv
dyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBObwogICAgIAogICAgIGlmIChzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gdHJh
bnNpdGlvbi0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBp
bihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFu
c2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzdHJ1Y3R1cmUt
Pm1fbG9jayk7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc3RydWN0dXJlLT5jZWxs
TG9jaygpKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0sIHRy
YW5zaXRpb24pOwogICAgIH0KIApAQCAtODI0LDcgKzg0OSw3IEBAIFN0cnVjdHVyZSogU3RydWN0
dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3Qp
CiAgICAgQVNTRVJUKGlzRGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQob2JqZWN0LT5zdHJ1Y3R1
cmUodm0pID09IHRoaXMpOwogICAgIAotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxv
Y2tlcihjZWxsTG9jaygpLCB2bS5oZWFwKTsKICAgICAKICAgICBvYmplY3QtPnNldFN0cnVjdHVy
ZUlERGlyZWN0bHkobnVrZShpZCgpKSk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAg
LTkzMiw3ICs5NTcsNyBAQCBXYXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5
UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFZNJiB2bSwgUHJvcGVydAogICAgIAogICAgIGlmICgh
aGFzUmFyZURhdGEoKSkKICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7Ci0gICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIg
bG9ja2VyKGNlbGxMb2NrKCkpOwogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IHRo
aXMtPnJhcmVEYXRhKCk7CiAgICAgaWYgKCFyYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9p
bnRTZXRzKSB7CiAgICAgICAgIHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMg
PQpAQCAtMTA0MiwxNCArMTA2NywxNCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYgogewogICAg
IHJldHVybiBhZGQ8U2hvdWxkUGluOjpObz4oCiAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsCi0gICAgICAgIFt0aGlzLCAmdm1dIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7Cisg
ICAgICAgIFt0aGlzLCAmdm1dKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQ
cm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAg
ICBzZXRNYXhPZmZzZXQodm0sIG5ld01heE9mZnNldCk7CiAgICAgICAgIH0pOwogfQogCiBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46Ok5vPih2bSwgcHJvcGVydHlO
YW1lLCBbdGhpcywgJnZtXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVy
dHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAgIHJldHVybiByZW1v
dmU8U2hvdWxkUGluOjpObz4odm0sIHByb3BlcnR5TmFtZSwgW3RoaXMsICZ2bV0oY29uc3QgR0NT
YWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNl
dCBuZXdNYXhPZmZzZXQpIHsKICAgICAgICAgc2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQp
OwogICAgIH0pOwogfQpAQCAtMTEyMCw3ICsxMTQ1LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgCi0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5tX2xvY2spOworICAgIENvbmN1cnJlbnRKU0Nl
bGxMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmpl
Y3QtPmlzT2JqZWN0KCkpCkBAIC0xMTM0LDExICsxMTU5LDExIEBAIHZvaWQgU3RydWN0dXJlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgaWYg
KHRoaXNPYmplY3QtPmlzUGlubmVkUHJvcGVydHlUYWJsZSgpIHx8IHRoaXNPYmplY3QtPnByb3Rl
Y3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKCkpIHsKICAgICAgICAgLy8gTk9URTog
VGhpcyBjYW4gaW50ZXJsZWF2ZSBpbiBwaW4oKSwgaW4gd2hpY2ggY2FzZSBpdCBtYXkgc2VlIGEg
bnVsbCBwcm9wZXJ0eSB0YWJsZS4KICAgICAgICAgLy8gVGhhdCdzIGZpbmUsIGJlY2F1c2UgdGhl
biB0aGUgYmFycmllciB3aWxsIGZpcmUgYW5kIHdlIHdpbGwgc2NhbiB0aGlzIGFnYWluLgotICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwor
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXNPYmplY3QtPnByb3BlcnR5VGFi
bGVVbnNhZmUoKSk7CiAgICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKQot
ICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUp
OwotICAgIGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKLSAgICAg
ICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+cHJvcGVydHlUYWJsZVVuc2FmZSgp
KTsKKyAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5wcm9wZXJ0eVRhYmxlVW5zYWZlKCkpCisgICAg
ICAgIHRoaXNPYmplY3QtPmNsZWFyUHJvcGVydHlUYWJsZSgpOwogfQogCiBib29sIFN0cnVjdHVy
ZTo6aXNDaGVhcER1cmluZ0dDKFZNJiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKaW5kZXggYjNkYjM4NTZlMzgxMWQwZWYxYTE2NTNmZDdhYzFiOGFmZDIyMmJl
ZS4uZmM1YjAxZWNmN2E0NjZmMTJhMGE2YjlkY2I5YzFlOGRhNWM2YmViYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTI1OCw5ICsyNTgsMTggQEAgY2xh
c3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICByZXR1
cm4gdHlwZUluZm8oKS5nZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgpOwogICAgIH0KKworICAg
IFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3Mgb3V0T2ZMaW5lVHlwZUZsYWdzKCkgY29uc3QK
KyAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkgJiYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlSW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzPihtX291dE9m
TGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUgPj4gb3V0T2ZMaW5lVHlwZUZsYWdz
U2hpZnQpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lVHlwZUZsYWdzOworI2Vu
ZGlmCisgICAgfQogICAgIAogICAgIC8vIFR5cGUgYWNjZXNzb3JzLgotICAgIFR5cGVJbmZvIHR5
cGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZs
YWdzKTsgfQorICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnR5
cGVJbmZvKG91dE9mTGluZVR5cGVGbGFncygpKTsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25z
dCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KIAogICAgIEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdNb2RlSW5jbHVkaW5n
SGlzdG9yeSgpICYgQWxsV3JpdGFibGVBcnJheVR5cGVzOyB9CkBAIC0zODQsNyArMzkzLDExIEBA
IGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgUHJvcGVydHlP
ZmZzZXQgdHJhbnNpdGlvbk9mZnNldCgpIGNvbnN0CiAgICAgeworI2lmIENQVShBRERSRVNTNjQp
ICYmIENQVShMSVRUTEVfRU5ESUFOKQorICAgICAgICB1aW50MTZfdCB0cmFuc2l0aW9uT2Zmc2V0
ID0gbV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvID4+IHRyYW5zaXRpb25PZmZzZXRTaGlm
dDsKKyNlbHNlCiAgICAgICAgIHVpbnQxNl90IHRyYW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRp
b25PZmZzZXQ7CisjZW5kaWYKICAgICAgICAgaWYgKHRyYW5zaXRpb25PZmZzZXQgPT0gc2hvcnRJ
bnZhbGlkT2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAgICAgICAg
IGlmICh0cmFuc2l0aW9uT2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykKQEAgLTM5NCwxNyArNDA3
LDM2IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgdm9p
ZCBzZXRUcmFuc2l0aW9uT2Zmc2V0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAg
IHsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQotICAgICAgICAgICAgbV90
cmFuc2l0aW9uT2Zmc2V0ID0gc2hvcnRJbnZhbGlkT2Zmc2V0OwotICAgICAgICBlbHNlIGlmIChv
ZmZzZXQgPCB1c2VSYXJlRGF0YUZsYWcgJiYgb2Zmc2V0IDwgc2hvcnRJbnZhbGlkT2Zmc2V0KQot
ICAgICAgICAgICAgbV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIGlm
IChtX3RyYW5zaXRpb25PZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKQorICAgICAgICBhdXRvIGNv
bW1pdCA9IFsmXSh1aW50MTZfdCB2YWx1ZSkgeworI2lmIENQVShBRERSRVNTNjQpICYmIENQVShM
SVRUTEVfRU5ESUFOKQorICAgICAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IChtX3RyYW5zaXRp
b25PZmZzZXRBbmRDbGFzc0luZm8gJiBjbGFzc0luZm9NYXNrKSB8IChzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KHZhbHVlKSA8PCB0cmFuc2l0aW9uT2Zmc2V0U2hpZnQpOworICAgICAgICAgICAgbV90
cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvID0gcmVzdWx0OworI2Vsc2UKKyAgICAgICAgICAg
IG1fdHJhbnNpdGlvbk9mZnNldCA9IHZhbHVlOworI2VuZGlmCisgICAgICAgIH07CisKKyAgICAg
ICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBjb21taXQoc2hv
cnRJbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAob2Zmc2V0IDwgdXNlUmFyZURhdGFGbGFnICYmIG9mZnNldCA8IHNob3J0SW52YWxpZE9m
ZnNldCkgeworICAgICAgICAgICAgY29tbWl0KG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyNpZiBDUFUoQUREUkVTUzY0KSAmJiBDUFUoTElUVExFX0VORElBTikKKyAg
ICAgICAgdWludDE2X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9mZnNldEFuZENs
YXNzSW5mbyA+PiB0cmFuc2l0aW9uT2Zmc2V0U2hpZnQ7CisjZWxzZQorICAgICAgICB1aW50MTZf
dCB0cmFuc2l0aW9uT2Zmc2V0ID0gbV90cmFuc2l0aW9uT2Zmc2V0OworI2VuZGlmCisgICAgICAg
IGlmICh0cmFuc2l0aW9uT2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykgewogICAgICAgICAgICAg
cmFyZURhdGEoKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zm
c2V0OwotICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIG1f
dHJhbnNpdGlvbk9mZnNldCA9IHVzZVJhcmVEYXRhRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQorCisgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zm
c2V0ID0gb2Zmc2V0OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBj
b21taXQodXNlUmFyZURhdGFGbGFnKTsKICAgICB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQgb3V0
T2ZMaW5lQ2FwYWNpdHkoUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQpAQCAtNDY3LDcgKzQ5OSw3
IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgYm9vbCBo
aWphY2tzSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzVHlw
ZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgICAgICByZXR1
cm4gaXNUeXBlZFZpZXcoY2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAgICAg
fQogICAgIAogICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSBjb25zdApAQCAtNTM1
LDcgKzU2NywxNCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAog
ICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCosIFZNJiwgSlNT
dHJpbmcqIHZhbHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIAotICAg
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0luZm87
IH0KKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0CisgICAgeworI2lmIENQ
VShBRERSRVNTNjQpICYmIENQVShMSVRUTEVfRU5ESUFOKQorICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PGNvbnN0IENsYXNzSW5mbyo+KG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyAm
IGNsYXNzSW5mb01hc2spOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fY2xhc3NJbmZvOworI2Vu
ZGlmCisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAg
ICAgewpAQCAtNTUyLDIxICs1OTEsMjMgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2ds
b2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBjbGFzc0luZm9PZmZz
ZXQoKQorI2lmIENQVShBRERSRVNTNjQpICYmIENQVShMSVRUTEVfRU5ESUFOKQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX3RyYW5zaXRpb25P
ZmZzZXRBbmRDbGFzc0luZm8pOworICAgIH0KKyNlbHNlCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkNsYXNzSW5mbygpCiAgICAgewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFN0cnVjdHVyZSwgbV9jbGFzc0luZm8pOwogICAgIH0KKyNlbmRpZgogICAgICAgICAKICAgICBz
dGF0aWMgcHRyZGlmZl90IGluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fYmxvYikgKyBT
dHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKTsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIHB0cmRpZmZfdCBwcm9wZXJ0eVRhYmxlVW5zYWZlT2Zmc2V0
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX3By
b3BlcnR5VGFibGVVbnNhZmUpOwotICAgIH0KLQogICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5saW5l
Q2FwYWNpdHlPZmZzZXQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJ1Y3R1cmUsIG1faW5saW5lQ2FwYWNpdHkpOwpAQCAtNjUzLDggKzY5NCw2IEBAIGNsYXNzIFN0
cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIAogICAgIHN0YXRpYyB2b2lkIGR1
bXBDb250ZXh0SGVhZGVyKFByaW50U3RyZWFtJik7CiAgICAgCi0gICAgQ29uY3VycmVudEpTTG9j
ayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQotCiAgICAgdW5zaWduZWQgcHJvcGVydHlIYXNo
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUhhc2g7IH0KIAogICAgIHN0YXRpYyBib29sIHNo
b3VsZENvbnZlcnRUb1BvbHlQcm90byhjb25zdCBTdHJ1Y3R1cmUqIGEsIGNvbnN0IFN0cnVjdHVy
ZSogYik7CkBAIC03MzUsNyArNzc0LDcgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBtYXkgZ3JhYiB0aGUgbG9jaywgb3Igbm90LiBEbyBub3Qg
Y2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2suCiAgICAgUHJvcGVydHlUYWJs
ZSogZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkoVk0mIHZtKQogICAgIHsKLSAgICAgICAg
aWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkK
KyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IHByb3BlcnR5VGFibGVPck51bGwo
KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIGlmICghcHJldmlvdXNJRCgp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03NDUsMjAgKzc4NCwyNSBAQCBjbGFz
cyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBUaGlzIG1heSBncmFi
IHRoZSBsb2NrLCBvciBub3QuIERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jay4KICAgICBQcm9wZXJ0eVRhYmxlKiBlbnN1cmVQcm9wZXJ0eVRhYmxlKFZNJiB2bSkK
ICAgICB7Ci0gICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBtX3Byb3BlcnR5VGFi
bGVVbnNhZmUuZ2V0KCkpCisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9w
ZXJ0eVRhYmxlT3JOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICBy
ZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtKTsKICAgICB9CiAgICAgCiAgICAgUHJv
cGVydHlUYWJsZSogcHJvcGVydHlUYWJsZU9yTnVsbCgpIGNvbnN0CiAgICAgeworI2lmIENQVShB
RERSRVNTNjQpICYmIENQVShMSVRUTEVfRU5ESUFOKQorICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PFByb3BlcnR5VGFibGUqPihtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVV
bnNhZmUgJiBwcm9wZXJ0eVRhYmxlVW5zYWZlTWFzayk7CisjZWxzZQogICAgICAgICByZXR1cm4g
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIC8v
IFRoaXMgd2lsbCBncmFiIHRoZSBsb2NrLiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0
cnVjdHVyZSdzIGxvY2suCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlUYWJsZSogbWF0
ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gdHJ1ZSk7
CiAgICAgCiAgICAgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSog
dGFibGUpOworICAgIHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7CiAgICAgCiAgICAgUHJvcGVy
dHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mKTsKICAgICBQcm9w
ZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKQEAgLTgwNSwzOSAr
ODQ5LDUzIEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIC8v
IFRoZXNlIG5lZWQgdG8gYmUgcHJvcGVybHkgYWxpZ25lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSAnU3RydWN0dXJlJwogICAgIC8vIHBhcnQgb2YgdGhlIG9iamVjdC4KICAgICBTdHJ1Y3R1cmVJ
REJsb2IgbV9ibG9iOwotICAgIFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3MgbV9vdXRPZkxp
bmVUeXBlRmxhZ3M7CiAKLSAgICB1aW50OF90IG1faW5saW5lQ2FwYWNpdHk7CisgICAgLy8gU2hv
dWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0Ms
IGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KKyAgICAvLyBEdXJpbmcgYSBI
ZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZl
IHRvIHVzZS4KKyNpZiBDUFUoQUREUkVTUzY0KSAmJiBDUFUoTElUVExFX0VORElBTikKKyAgICAv
LyBIaWdoZXN0IDE2IGJpdHMgYXJlIGZvciBtX291dE9mTGluZVR5cGVGbGFncy4gUmVtYWluaW5n
IGJpdHMgYXJlIGZvciBtX3Byb3BlcnR5VGFibGVVbnNhZmUuCitwdWJsaWM6CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBvdXRPZkxpbmVUeXBlRmxhZ3NTaGlmdCA9IDQ4OworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHByb3BlcnR5VGFibGVVbnNhZmVNYXNrID0gKDFVTEwg
PDwgNDgpIC0gMTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBvdXRPZkxpbmVUeXBl
RmxhZ3NTaGlmdGVkTWFzayA9IH5wcm9wZXJ0eVRhYmxlVW5zYWZlTWFzazsKKyAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihUeXBlSW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzKSA9PSAyKTsKKworICAg
IC8vIEhpZ2hlc3QgMTYgYml0cyBhcmUgZm9yIG1fdHJhbnNpdGlvbk9mZnNldC4gUmVtYWluaW5n
IGJpdHMgYXJlIGZvciBtX2NsYXNzSW5mby4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IHRyYW5zaXRpb25PZmZzZXRTaGlmdCA9IDQ4OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0
cl90IGNsYXNzSW5mb01hc2sgPSAoMVVMTCA8PCA0OCkgLSAxOworcHJpdmF0ZToKKyAgICBVbnNh
ZmVDZWxsUG9pbnRlciBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmU7
CisgICAgdWludHB0cl90IG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbzsKKyNlbHNlCisg
ICAgVHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFncyBtX291dE9mTGluZVR5cGVGbGFnczsKKyAg
ICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOworICAg
IGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87IC8vIDIgSU1NCisgICAgdWludDE2X3QgbV90
cmFuc2l0aW9uT2Zmc2V0OworI2VuZGlmCiAKLSAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsK
KyAgICB1aW50OF90IG1faW5saW5lQ2FwYWNpdHk7IC8vIElNTQogCiAgICAgdWludDMyX3QgbV9i
aXRGaWVsZDsKIAotICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmpl
Y3Q7Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJvdG90eXBlOwotICAgIG11dGFibGUg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NhY2hlZFByb3RvdHlwZUNoYWluOworICAg
IFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7IC8vIDIgSU1NCisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJvdG90eXBlOyAvLyAyIElNTQorICAgIG11dGFi
bGUgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NhY2hlZFByb3RvdHlwZUNoYWluOyAv
LyAyCiAKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3ByZXZpb3VzT3JSYXJlRGF0YTsKIAog
ICAgIFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4gbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lOwog
Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKLQotICAgIFN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKKyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUgbV90cmFuc2l0aW9uVGFibGU7IC8vIDIKIAotICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0
aHJvdWdoIGVuc3VyZVByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRv
IDAgYnkgYW5vdGhlciB0aHJlYWQuCi0gICAgLy8gRHVyaW5nIGEgSGVhcCBTbmFwc2hvdCBHQyB3
ZSBhdm9pZCBjbGVhcmluZyB0aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0byB1c2UuCi0gICAgV3Jp
dGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIAogICAgIG11
dGFibGUgSW5saW5lV2F0Y2hwb2ludFNldCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0OwogCiAg
ICAgQ09NUElMRV9BU1NFUlQoZmlyc3RPdXRPZkxpbmVPZmZzZXQgPCAyNTYsIGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0X2ZpdHMpOwogCi0gICAgdWludDE2X3QgbV90cmFuc2l0aW9uT2Zmc2V0OwogICAg
IHVpbnQxNl90IG1fbWF4T2Zmc2V0OwogCi0gICAgdWludDMyX3QgbV9wcm9wZXJ0eUhhc2g7Ci0g
ICAgVGlueUJsb29tRmlsdGVyIG1fc2VlblByb3BlcnRpZXM7CisgICAgdWludDMyX3QgbV9wcm9w
ZXJ0eUhhc2g7IC8vIDEgSU1NCisgICAgVGlueUJsb29tRmlsdGVyIG1fc2VlblByb3BlcnRpZXM7
IC8vIDUgSU1NCiAKICAgICBmcmllbmQgY2xhc3MgVk1JbnNwZWN0b3I7CiAgICAgZnJpZW5kIGNs
YXNzIEpTRG9sbGFyVk1IZWxwZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKaW5kZXggMGNkOThkNTJhY2M3ZjcxNGMwNWIxNTNlMDgxMzll
NDkxY2Q4Y2Y4Yy4uYjViZWM3M2MyMmJkNzJhMzU2MGU2MjEyYjQ1MTJiYjAwOTgxMjU2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaApA
QCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgU3RydWN0dXJlOjpmb3JFYWNoUHJvcGVydHlDb25jdXJy
ZW50bHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIAogICAgICAgICBpZiAoIWZ1bmN0b3IoUHJv
cGVydHlNYXBFbnRyeShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSwg
c3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcygpKSkpIHsKICAgICAgICAgICAgIGlmICh0YWJsZSkKLSAgICAgICAgICAg
ICAgICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAgICAgICAgICAgICAgIHRh
YmxlU3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTkyLDExICsxOTIsMTEgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZv
ckVhY2hQcm9wZXJ0eUNvbmN1cnJlbnRseShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBpZiAoIWZ1bmN0b3IoZW50cnkpKSB7
Ci0gICAgICAgICAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKKyAgICAg
ICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgdGFibGVT
dHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKKyAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPmNlbGxM
b2NrKCkudW5sb2NrKCk7CiAgICAgfQogfQogCkBAIC0zNTAsNyArMzUwLDcgQEAgaW5saW5lIHZv
aWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
CiBpbmxpbmUgV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2VtZW50V2F0
Y2hwb2ludFNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNl
bGxMb2NrKCkpOwogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CkBAIC00MzksNyArNDM5LDcgQEAgaW5saW5l
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQKIHsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVBy
b3BlcnR5VGFibGUodm0pOwogCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2Vy
KGNlbGxMb2NrKCksIHZtLmhlYXApOwogCiAgICAgc3dpdGNoIChzaG91bGRQaW4pIHsKICAgICBj
YXNlIFNob3VsZFBpbjo6WWVzOgpAQCAtNDgyLDcgKzQ4Miw3IEBAIHRlbXBsYXRlPFN0cnVjdHVy
ZTo6U2hvdWxkUGluIHNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KIGlubGluZSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQ
cm9wZXJ0eVRhYmxlKHZtKTsKLSAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jaywgdm0uaGVhcCk7CisgICAgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIo
Y2VsbExvY2soKSwgdm0uaGVhcCk7CiAKICAgICBzd2l0Y2ggKHNob3VsZFBpbikgewogICAgIGNh
c2UgU2hvdWxkUGluOjpZZXM6CkBAIC01NTAsNyArNTUwLDIzIEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBTdHJ1Y3R1cmU6OnNldEdsb2JhbE9iamVjdChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldFByb3BlcnR5VGFibGUo
Vk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKKyNpZiBDUFUoQUREUkVTUzY0KSAmJiBD
UFUoTElUVExFX0VORElBTikKKyAgICB1aW50cHRyX3QgdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90Pih0YWJsZSkgfCAob3V0T2ZMaW5lVHlwZUZsYWdzU2hpZnRlZE1hc2sgJiBtX291dE9m
TGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUpOworICAgIG1fb3V0T2ZMaW5lVHlw
ZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZSA9IHZhbHVlOworICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKHRoaXMsIHRhYmxlKTsKKyNlbHNlCiAgICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLnNl
dE1heUJlTnVsbCh2bSwgdGhpcywgdGFibGUpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBTdHJ1Y3R1cmU6OmNsZWFyUHJvcGVydHlUYWJsZSgpCit7CisjaWYgQ1BVKEFERFJFU1M2
NCkgJiYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgdWludHB0cl90IHZhbHVlID0gb3V0T2ZMaW5l
VHlwZUZsYWdzU2hpZnRlZE1hc2sgJiBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFi
bGVVbnNhZmU7CisgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxlVW5zYWZl
ID0gdmFsdWU7CisjZWxzZQorICAgIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOworI2Vu
ZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldFByZXZpb3VzSUQoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV3JpdGVCYXJyaWVyLmgKaW5kZXggNzA3ZTIwYjZlNWFjM2Y2YmJiYzk3Yzk1NWRkMWUwMTdm
NjBkMjIwMi4uZjdkNDQ3MTk5NDA5OGM0MjE4ZWQwYTY4NzZiZGY1MjJiMzQ0MjZjZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKQEAgLTI0OCw0ICsy
NDgsNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VSwg
VHJhaXRzVT4mIGxocywgY29uc3QgV3JpdGVCYXJyaQogICAgIHJldHVybiBsaHMuZ2V0KCkgPT0g
cmhzLmdldCgpOwogfQogCit1c2luZyBVbnNhZmVDZWxsUG9pbnRlciA9IHVpbnRwdHJfdDsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDQ0Zjk5YmVjOTk3MmI1NzkyZWMxYjg3
MTQzOTMzNzAwMjBhYjNlNjUuLmM1OWEyMzE2MGY0NGQzMTdiNmNjY2EzZmYwMWQ5ZjY1NDc1ODRk
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwCkBAIC0yNzQsNyArMjc0LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93
KCkKIAogICAgICAgICAgICAgc3RhY2tMaW1pdEdQUklzQ2xvYmJlcmVkID0gdHJ1ZTsKICAgICAg
ICAgICAgIGppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwg
c3RhY2tMaW1pdEdQUik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSks
IHNjcmF0Y2hHUFIpOwogCiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8
V2ViQXNzZW1ibHlGdW5jdGlvbj46OnZhbHVlLCAiV2UgZG8gbm90IGNoZWNrIGZvciBzdWJ0eXBl
cyBiZWxvdyIpOwogICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsPFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uPjo6dmFsdWUsICJXZSBkbyBub3QgY2hlY2sgZm9yIHN1YnR5
cGVzIGJlbG93Iik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390954</attachid>
            <date>2020-02-17 11:46:08 -0800</date>
            <delta_ts>2020-02-17 18:15:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207827-20200217114608.patch</filename>
            <type>text/plain</type>
            <size>51427</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NDMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YzI2YjJhZGYwNWQxYWY1ODlmMmExOGEwMmJmMjQ0ZGM0ZDE1MTM1Li45MjZjM2ZmNGRiM2E5Mjc0
YWRiYTljNWYyMzg4YzEzMGIwNzUyNDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAyMC0wMi0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFNocmluayBTdHJ1Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzgyNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3ViQ2xhc3Mp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlUHJvbWlz
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVJbnRl
cm5hbEZpZWxkT2JqZWN0KToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlUHJvbWlzZSk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVJbnRlcm5hbEZpZWxkT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNoZWNr
U3ViQ2xhc3MpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q2xvbmVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1
bnRpbWUvQ29uY3VycmVudEpTTG9jay5oOgorICAgICAgICAoSlNDOjpDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlOjpDb25jdXJyZW50SlNMb2NrZXJCYXNlKToKKyAgICAgICAgKEpTQzo6R0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VySW1wbDo6R0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbCk6CisgICAg
ICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGw6On5HQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXJJbXBsKToKKyAgICAgICAgKEpTQzo6Q29uY3VycmVudEpTTG9ja2VySW1wbDo6Q29u
Y3VycmVudEpTTG9ja2VySW1wbCk6CisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlcjo6R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyOjp+R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29uY3VycmVudEpTTG9ja2VyOjpDb25jdXJyZW50SlNMb2Nr
ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVu
dGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0RGlyZWN0Q29uY3VycmVudGx5IGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJlcGFyZVRvUHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRN
YXBGb3JNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFs
aXplUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQ
cm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXRpb25TbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmbGF0
dGVuRGljdGlvbmFyeVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZW5zdXJl
UHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpjbGVhclByb3BlcnR5VGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvV3Jp
dGVCYXJyaWVyLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3cp
OgorCiAyMDIwLTAyLTEwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBQbGFjYXRlIGV4Y2VwdGlvbiBjaGVjayB2YWxpZGF0b3IgaW4gR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6cHV0KCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCmluZGV4IDY0MmIxNjM1NmY5MGU5YzM4NjAyZWJjNTdmZDllMDRhMGY0NWI1Mjgu
LmY4NmI1ZWM3M2MwMzZkZGE3YWZkY2ViMzVmODM0NWUwZmJiMDQzYTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC05NjA1LDcgKzk2
MDUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3ViQ2xhc3MoTm9kZSog
bm9kZSkKICAgICAgICAgR1BSUmVnIHNwZWNpZmllZEdQUiA9IHNwZWNpZmllZC5ncHIoKTsKIAog
ICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBiYXNlR1BSLCBvdGhlckdQUiwg
c3BlY2lmaWVkR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Mob3RoZXJHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBvdGhlckdQUik7Cisj
aWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Mob3RoZXJHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xh
c3NJbmZvKCkpLCBvdGhlckdQUik7CisgICAgICAgIG1faml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01h
c2spKSwgb3RoZXJHUFIpOworI2Vsc2UKKyAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Mob3RoZXJHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZDbGFzc0luZm8oKSksIG90
aGVyR1BSKTsKKyNlbmRpZgogICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihub2RlLT5jbGFzc0luZm8oKSksIHNwZWNpZmllZEdQUik7CiAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKQEAgLTEyODc3LDggKzEyODgy
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVQcm9taXNlKE5vZGUqIG5v
ZGUpCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCByYXJlRGF0YUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5j
dGlvbjo6cmFyZURhdGFUYWcpKSk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZJbnRlcm5hbEZ1bmN0
aW9uQWxsb2NhdGlvblByb2ZpbGUoKSArIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmls
ZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0
dXJlR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxI
ZWxwZXJzOjpaZXJvLCBzdHJ1Y3R1cmVHUFIpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIobm9kZS0+aXNJbnRlcm5hbFByb21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkg
OiBKU1Byb21pc2U6OmluZm8oKSksIHNjcmF0Y2gxR1BSKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZz
ZXQoKSkpKTsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpvZmZzZXRPZlRyYW5zaXRpb25P
ZmZzZXRBbmRDbGFzc0luZm8oKSksIHNjcmF0Y2gxR1BSKTsKKyAgICBtX2ppdC5hbmRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0dXJlOjpj
bGFzc0luZm9NYXNrKSksIHNjcmF0Y2gxR1BSKTsKKyNlbHNlCisgICAgbV9qaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6Om9mZnNldE9mQ2xh
c3NJbmZvKCkpLCBzY3JhdGNoMUdQUik7CisjZW5kaWYKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgVHJ1c3Rl
ZEltbVB0cihub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gSlNJbnRlcm5hbFByb21pc2U6Omlu
Zm8oKSA6IEpTUHJvbWlzZTo6aW5mbygpKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2JqZWN0KSwgc2NyYXRjaDFHUFIp
OwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHNjcmF0Y2gxR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSkpOwogCkBAIC0xMjkyNSw4ICsxMjkzNSwx
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVj
dChOb2RlKiBub2RlLCBPcGVyYXRpb24gb3BlcgogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmFyZURhdGFHUFIsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwogICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURh
dGE6Om9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlKCkgKyBJbnRlcm5h
bEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgc3RydWN0dXJlR1BSKSk7Ci0g
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKEpTQ2xhc3M6OmluZm8oKSksIHNjcmF0Y2gxR1BS
KTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwg
U3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkpKTsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAg
IG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0
dXJlOjpvZmZzZXRPZlRyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8oKSksIHNjcmF0Y2gxR1BS
KTsKKyAgICBtX2ppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSksIHNjcmF0Y2gxR1BSKTsKKyNl
bHNlCisgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BS
LCBTdHJ1Y3R1cmU6Om9mZnNldE9mQ2xhc3NJbmZvKCkpLCBzY3JhdGNoMUdQUik7CisjZW5kaWYK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoMUdQUiwgVHJ1c3RlZEltbVB0cihKU0NsYXNzOjppbmZvKCkpKSk7CiAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBnbG9i
YWxPYmplY3QpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5LmgKaW5kZXggYjEwOGFiZmNjYjg5NThhODMwN2MwYWE3OGNkNjdmMjAyZDNiOGM1
Yy4uYWIwMjQxODYwMDdkNWRmNzhiMzU1ZjRjNmZhZWVjYWJlOTBmMDEyNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgK
QEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAg
bWFjcm8oU3RyaW5nSW1wbF9kYXRhLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpIFwKICAgICBt
YWNybyhTdHJpbmdJbXBsX2hhc2hBbmRGbGFncywgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSkg
XAogICAgIG1hY3JvKFN0cmluZ0ltcGxfbGVuZ3RoLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlP
ZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVyZV9jbGFzc0luZm8sIFN0cnVjdHVyZTo6Y2xh
c3NJbmZvT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhTdHJ1Y3R1cmVfdHJhbnNpdGlvbk9mZnNldEFu
ZENsYXNzSW5mbywgU3RydWN0dXJlOjpvZmZzZXRPZlRyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0lu
Zm8oKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9nbG9iYWxPYmplY3QsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfaW5kZXhpbmdNb2RlSW5j
bHVkaW5nSGlzdG9yeSwgU3RydWN0dXJlOjppbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5T2Zm
c2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfaW5saW5lQ2FwYWNpdHksIFN0cnVjdHVyZTo6
aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDRkMzQyN2JjODJlOGM5YjI0N2FjODcxYTAyMDAwMWJi
MjM4MjlmMjYuLjc2M2Y4NDczMGU4MGY1MjFiMjk1YTE2ZmJjZWM4NmU0ZDU2YjliOTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTY2NzUs
NyArNjY3NSw4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaCht
X291dC5pc1plcm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1N0
cnVjdHVyZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0cnVjdHVyZSwgY2hlY2tH
bG9iYWxPYmplY3RDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0
LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5j
b25zdEludFB0cihtX25vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlz
ZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVj
dENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1f
b3V0LmJpdEFuZChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfdHJh
bnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyksIG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6
Y2xhc3NJbmZvTWFzaykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJ
bmZvLCBtX291dC5jb25zdEludFB0cihtX25vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0lu
dGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpKSwgdXN1YWxseShjaGVj
a0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjaGVja0dsb2JhbE9iamVjdENhc2UsIGZhc3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGRlcml2ZWRTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3Ioc3RydWN0
dXJlKTsKQEAgLTY3MzAsNyArNjczMSw4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAg
IG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2Up
LCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0
cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmplY3RDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFz
c0luZm8pLCBtX291dC5jb25zdEludFB0cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVj
a0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgTFZhbHVlIGNs
YXNzSW5mbyA9IG1fb3V0LmJpdEFuZChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5T
dHJ1Y3R1cmVfdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyksIG1fb3V0LmNvbnN0SW50UHRy
KFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFzaykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQu
ZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1
YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAg
ICBtX291dC5hcHBlbmRUbyhjaGVja0dsb2JhbE9iamVjdENhc2UsIGZhc3RBbGxvY2F0aW9uQ2Fz
ZSk7CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChtX291dC5sb2FkUHRyKHN0cnVj
dHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0KSwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSksIHVzdWFsbHkoZmFzdEFsbG9jYXRpb25DYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7
CkBAIC0xMzIwOCw3ICsxMzIxMCw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogCiAgICAgICAg
ICAgICBMVmFsdWUgc3RydWN0dXJlID0gbG9hZFN0cnVjdHVyZShjZWxsKTsKLSAgICAgICAgICAg
IExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1
Y3R1cmVfY2xhc3NJbmZvKTsKKyAgICAgICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5i
aXRBbmQobV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX3RyYW5zaXRp
b25PZmZzZXRBbmRDbGFzc0luZm8pLCBtX291dC5jb25zdEludFB0cihTdHJ1Y3R1cmU6OmNsYXNz
SW5mb01hc2spKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG90aGVyQXRTdGFydCA9IG1f
b3V0LmFuY2hvcihjbGFzc0luZm8pOwogICAgICAgICAgICAgbV9vdXQuanVtcChsb29wKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAK
aW5kZXggOTZhMzYzNWU2ODI3MzkzZWU4MzZkODA0Nzc3MjRhMjVkNTQ2YzI2MS4uMjQ5YmE1YWFj
NTFlNTA5MGNmMjNmN2Y5ZThlOWU0N2JjMjFlZjQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAg
U3RydWN0dXJlKiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2xvbmVk
QXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIGluZGV4aW5nVHlwZSk7CiAg
ICAgc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAogICAgICAgICB2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSwKLSAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9m
ZnNldCkgeworICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIm
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09IGNsb25lZEFyZ3VtZW50c0xlbmd0
aFByb3BlcnR5T2Zmc2V0KTsKICAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0TWF4T2Zmc2V0KHZt
LCBuZXdNYXhPZmZzZXQpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2suaAppbmRleCBhYTI3M2JhZGJlZmE3MzdhMGVhYTUz
NGZiZWJhOWY1MDFmZGI4NjI3Li45NWViYTBiZjNmOWEyMDA1YjY0NTJlYWRmN2NlMGE0MjVjYTU2
YTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50
SlNMb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpT
TG9jay5oCkBAIC0zMywxOCArMzMsMTggQEAKIG5hbWVzcGFjZSBKU0MgewogCiB1c2luZyBDb25j
dXJyZW50SlNMb2NrID0gTG9jazsKLXVzaW5nIENvbmN1cnJlbnRKU0xvY2tlckltcGwgPSBMb2Nr
SG9sZGVyOwogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZihDb25jdXJyZW50SlNMb2NrKSA9PSAxLCAi
UmVnYXJkbGVzcyBvZiBzdGF0dXMgb2YgY29uY3VycmVudCBKUyBmbGFnLCBzaXplIG9mIENvbnVy
cmVudEpTTG9jayBpcyBhbHdheXMgb25lIGJ5dGUuIik7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExv
Y2s+CiBjbGFzcyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIDogcHVibGljIEFic3RyYWN0TG9ja2Vy
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50SlNMb2NrZXJCYXNlKTsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlKENvbmN1cnJlbnRKU0xv
Y2smIGxvY2thYmxlKQorICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoTG9jayYg
bG9ja2FibGUpCiAgICAgICAgIDogbV9sb2NrZXIoJmxvY2thYmxlKQogICAgIHsKICAgICB9Ci0g
ICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9ja2VyQmFzZShDb25jdXJyZW50SlNMb2NrKiBsb2Nr
YWJsZSkKKyAgICBleHBsaWNpdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlKExvY2sqIGxvY2thYmxl
KQogICAgICAgICA6IG1fbG9ja2VyKGxvY2thYmxlKQogICAgIHsKICAgICB9CkBAIC02NCw2MyAr
NjQsNjUgQEAgY2xhc3MgQ29uY3VycmVudEpTTG9ja2VyQmFzZSA6IHB1YmxpYyBBYnN0cmFjdExv
Y2tlciB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvbmN1cnJlbnRKU0xvY2tlckltcGwgbV9s
b2NrZXI7CisgICAgTG9ja2VyPExvY2s+IG1fbG9ja2VyOwogfTsKIAotY2xhc3MgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyIDogcHVibGljIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgewordGVtcGxh
dGU8dHlwZW5hbWUgTG9jaz4KK2NsYXNzIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwgOiBw
dWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPiB7CiBwdWJsaWM6Ci0gICAgR0NTYWZl
Q29uY3VycmVudEpTTG9ja2VyKENvbmN1cnJlbnRKU0xvY2smIGxvY2thYmxlLCBIZWFwJiBoZWFw
KQotICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UobG9ja2FibGUpCisgICAgR0NTYWZl
Q29uY3VycmVudEpTTG9ja2VySW1wbChMb2NrJiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKKyAgICAg
ICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+KGxvY2thYmxlKQogICAgICAgICAsIG1f
ZGVmZXJHQyhoZWFwKQogICAgIHsKICAgICB9CiAKLSAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIoQ29uY3VycmVudEpTTG9jayogbG9ja2FibGUsIEhlYXAmIGhlYXApCi0gICAgICAgIDogQ29u
Y3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJsZSkKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXJJbXBsKExvY2sqIGxvY2thYmxlLCBIZWFwJiBoZWFwKQorICAgICAgICA6IENvbmN1cnJlbnRK
U0xvY2tlckJhc2U8TG9jaz4obG9ja2FibGUpCiAgICAgICAgICwgbV9kZWZlckdDKGhlYXApCiAg
ICAgewogICAgIH0KIAotICAgIH5HQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIoKQorICAgIH5HQ1Nh
ZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsKCkKICAgICB7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8g
dW5sb2NrIGVhcmx5IGR1ZSB0byB0aGUgZGVzdHJ1Y3Rpb24gb3JkZXIgb2YgYmFzZQogICAgICAg
ICAvLyB2cy4gZGVyaXZlZCBjbGFzc2VzLiBJZiB3ZSBkaWRuJ3QsIHRoZW4gd2Ugd291bGQgZGVz
dHJveSB0aGUgCiAgICAgICAgIC8vIERlZmVyR0Mgb2JqZWN0IGJlZm9yZSB1bmxvY2tpbmcgdGhl
IGxvY2sgd2hpY2ggY291bGQgY2F1c2UgYSBHQwogICAgICAgICAvLyBhbmQgcmVzdWx0aW5nIGRl
YWRsb2NrLgotICAgICAgICB1bmxvY2tFYXJseSgpOworICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlPExvY2s+Ojp1bmxvY2tFYXJseSgpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBEZWZl
ckdDIG1fZGVmZXJHQzsKIH07CiAKLWNsYXNzIENvbmN1cnJlbnRKU0xvY2tlciA6IHB1YmxpYyBD
b25jdXJyZW50SlNMb2NrZXJCYXNlIHsKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2s+CitjbGFzcyBD
b25jdXJyZW50SlNMb2NrZXJJbXBsIDogcHVibGljIENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9j
az4gewogcHVibGljOgotICAgIENvbmN1cnJlbnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrJiBs
b2NrYWJsZSkKLSAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAg
IENvbmN1cnJlbnRKU0xvY2tlckltcGwoTG9jayYgbG9ja2FibGUpCisgICAgICAgIDogQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZTxMb2NrPihsb2NrYWJsZSkKICNpZiAhZGVmaW5lZChOREVCVUcpCiAg
ICAgICAgICwgbV9kaXNhbGxvd0dDKHN0ZDo6aW5fcGxhY2UpCiAjZW5kaWYKICAgICB7CiAgICAg
fQogCi0gICAgQ29uY3VycmVudEpTTG9ja2VyKENvbmN1cnJlbnRKU0xvY2sqIGxvY2thYmxlKQot
ICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UobG9ja2FibGUpCisgICAgQ29uY3VycmVu
dEpTTG9ja2VySW1wbChMb2NrKiBsb2NrYWJsZSkKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlPExvY2s+KGxvY2thYmxlKQogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICAgICAgLCBt
X2Rpc2FsbG93R0Moc3RkOjppbl9wbGFjZSkKICNlbmRpZgogICAgIHsKICAgICB9CiAKLSAgICBD
b25jdXJyZW50SlNMb2NrZXIoTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKQotICAgICAgICA6IENvbmN1
cnJlbnRKU0xvY2tlckJhc2UoTm9Mb2NraW5nTmVjZXNzYXJ5KQorICAgIENvbmN1cnJlbnRKU0xv
Y2tlckltcGwoTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKQorICAgICAgICA6IENvbmN1cnJlbnRKU0xv
Y2tlckJhc2U8TG9jaz4oTm9Mb2NraW5nTmVjZXNzYXJ5KQogI2lmICFkZWZpbmVkKE5ERUJVRykK
ICAgICAgICAgLCBtX2Rpc2FsbG93R0MoV1RGOjpudWxsb3B0KQogI2VuZGlmCiAgICAgewogICAg
IH0KICAgICAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIoaW50KSA9IGRlbGV0ZTsKKyAgICBDb25j
dXJyZW50SlNMb2NrZXJJbXBsKGludCkgPSBkZWxldGU7CiAKICNpZiAhZGVmaW5lZChOREVCVUcp
CiBwcml2YXRlOgpAQCAtMTI4LDQgKzEzMCw3IEBAIGNsYXNzIENvbmN1cnJlbnRKU0xvY2tlciA6
IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIHsKICNlbmRpZgogfTsKIAordXNpbmcgQ29u
Y3VycmVudEpTTG9ja2VyID0gQ29uY3VycmVudEpTTG9ja2VySW1wbDxDb25jdXJyZW50SlNMb2Nr
PjsKK3VzaW5nIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciA9IEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlckltcGw8Q29uY3VycmVudEpTTG9jaz47CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAppbmRleCA2NjVkMDg4OWNmNDQ2MWMzYWIwYTJh
ZjRiMDdjNmE1OGM5MDQyMWM0Li5kNTY1NmY4YmZkZmY2MzI5OTJhYzFkYTQ1MWUzNWMxYTU0OGQ0
NjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaApAQCAtMjQsNiArMjQs
NyBAQAogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKICNpbmNsdWRlICJDZWxsU3RhdGUuaCIKKyNp
bmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiQ29uc3RydWN0RGF0YS5oIgog
I2luY2x1ZGUgIkVudW1lcmF0aW9uTW9kZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTI4OCw2
ICsyODksOSBAQCBjbGFzcyBKU0NlbGxMb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CiB9OwogCit1c2luZyBDb25jdXJyZW50SlND
ZWxsTG9ja2VyID0gQ29uY3VycmVudEpTTG9ja2VySW1wbDxKU0NlbGxMb2NrPjsKK3VzaW5nIEdD
U2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgPSBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBs
PEpTQ2VsbExvY2s+OworCiAvLyBGSVhNRTogUmVmZXIgdG8gU3Vic3BhY2UgYnkgcmVmZXJlbmNl
LgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4OAogdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAppbmRleCBhY2QyOWRlZDgxMzUxZmIyODRiMjE1OWFkNDdhNjMxYzM0OTRmMWRmLi4y
OThhNWU3YzRkYmY0ZWIyZjg5MWI2ZjdiYWMwMmZhMGFhZmJjOTMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCkBAIC0yMDA1LDcgKzIwMDUsNyBAQCBib29s
IEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcgogCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGlu
dmFsaWRPZmZzZXQ7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkpCi0gICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgW10gKGNvbnN0IEdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKKyAgICAg
ICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlv
bih2bSwgcHJvcGVydHlOYW1lLCBbXShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2Vy
JiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCAmZGVmZXJyZWRXYXRjaHBv
aW50RmlyZSk7CiAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+bV9idXR0ZXJmbHkgJiYgIXN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhc3RydWN0dXJlLT5oYXNJbmRleGluZ0hl
YWRlcih0aGlzT2JqZWN0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgKaW5kZXggZWM2MzAwZWE5Yjk3MmNlOWJhMGZhZDgxODI1N2FmYjIwZDgyYTJlZC4uYTYyZmYy
MWQ4ZjUwMTA2ODI3ZDcwYjc5YjU2MzFlMDhkYWM0MWMxYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCkBAIC0xMzI5LDcgKzEzMjksNyBAQCBpbmxpbmUgSlNWYWx1
ZSBKU09iamVjdDo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIC8vIGZsYXR0ZW4gYW4gb2JqZWN0LgogaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6Omdl
dERpcmVjdENvbmN1cnJlbnRseShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KSBjb25zdAogewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3RydWN0dXJl
LT5sb2NrKCkpOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+
Y2VsbExvY2soKSk7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gZ2V0RGlyZWN0KG9mZnNldCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCmluZGV4IGE2
NzAwMzQ3ZjY5NzZlNjFiMDVkYjE4ZjJiMDk2YWFhNzllMmViYjMuLjk1YTY3MTBjMmUzNTY4NDM2
ZDVjY2EyOGM4NmIyZGM5NGQ4YTg4MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCkBAIC0yMTYsNyArMjE2LDcgQEAgQUxXQVlTX0lOTElO
RSBQcm9wZXJ0eU9mZnNldCBKU09iamVjdDo6cHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oVk0mIHYKICAgICBQcm9wZXJ0eU9mZnNldCByZXN1bHQ7CiAgICAgc3RydWN0dXJlLT5h
ZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAogICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLAotICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7Cisg
ICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBuZXdPdXRPZkxpbmVDYXBhY2l0eSA9IFN0cnVjdHVyZTo6b3V0T2ZMaW5lQ2Fw
YWNpdHkobmV3TWF4T2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChuZXdPdXRPZkxpbmVDYXBhY2l0
eSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0eSkgewogICAgICAgICAgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5l
Q2FwYWNpdHksIG5ld091dE9mTGluZUNhcGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCmluZGV4IDE5Nzc1OWVhNzljYjg3ZTIxNDAzYTgzY2Y4Mzcw
NWRkMmNlMTU0NzcuLmQ3YmU1YWNjYTQyYWZlM2VmMzhlZWU4ZTBhZGM3Y2VmMDRhZjJiMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcApAQCAtMTc4LDEy
ICsxNzgsMTUgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKIFN0cnVjdHVyZTo6
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFz
c0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5
KQogICAgIDogSlNDZWxsKHZtLCB2bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBt
X2Jsb2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJRCh0aGlzKSwgaW5kZXhp
bmdUeXBlLCB0eXBlSW5mbykKLSAgICAsIG1fb3V0T2ZMaW5lVHlwZUZsYWdzKHR5cGVJbmZvLm91
dE9mTGluZVR5cGVGbGFncygpKQogICAgICwgbV9pbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBhY2l0
eSkKICAgICAsIG1fYml0RmllbGQoMCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KHZtLCB0aGlzLCBn
bG9iYWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1heUJlTnVsbCkKICAg
ICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBwcm90b3R5cGUpCisjaWYgQ1BVKEFERFJFU1M2NCkg
JiYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgLCBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0lu
Zm8oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2xhc3NJbmZvKSkKKyNlbHNlCiAgICAgLCBtX2Ns
YXNzSW5mbyhjbGFzc0luZm8pCisjZW5kaWYKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRT
ZXQoSXNXYXRjaGVkKQogICAgICwgbV9wcm9wZXJ0eUhhc2goMCkKIHsKQEAgLTIwNCwxMyArMjA3
LDE5IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvCiAgICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9u
VHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9m
ZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKKworI2lmIENQVShB
RERSRVNTNjQpICYmIENQVShMSVRUTEVfRU5ESUFOKQorICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdz
QW5kUHJvcGVydHlUYWJsZVVuc2FmZSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odHlwZUluZm8u
b3V0T2ZMaW5lVHlwZUZsYWdzKCkpIDw8IG91dE9mTGluZVR5cGVGbGFnc1NoaWZ0OworI2Vsc2UK
KyAgICBtX291dE9mTGluZVR5cGVGbGFncyA9IHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygp
OworI2VuZGlmCiAgCiAgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6
Om1heElubGluZUNhcGFjaXR5KCkpOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxQcm9wZXJ0eU9m
ZnNldD4oaW5saW5lQ2FwYWNpdHkpIDwgZmlyc3RPdXRPZkxpbmVPZmZzZXQpOwogICAgIEFTU0VS
VCghaGFzUmFyZURhdGEoKSk7Ci0gICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRl
ck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzKCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVy
dGllcygpKTsKLSAgICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERh
dGEoKSB8fCBtX2NsYXNzSW5mby0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6
Z2V0Q2FsbERhdGEpOworICAgIEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVy
dGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIWNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJl
YWRvbmx5UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
cygpIHx8ICFjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMo
KSk7CisgICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkg
fHwgY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENh
bGxEYXRhKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIFN0cnVjdHVyZTo6c19pbmZvID0geyAiU3Ry
dWN0dXJlIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShT
dHJ1Y3R1cmUpIH07CkBAIC0yMjAsMTUgKzIyOSwxOSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShW
TSYgdm0pCiAgICAgLCBtX2lubGluZUNhcGFjaXR5KDApCiAgICAgLCBtX2JpdEZpZWxkKDApCiAg
ICAgLCBtX3Byb3RvdHlwZSh2bSwgdGhpcywganNOdWxsKCkpCisjaWYgQ1BVKEFERFJFU1M2NCkg
JiYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgLCBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0lu
Zm8oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaW5mbygpKSkKKyNlbHNlCiAgICAgLCBtX2NsYXNz
SW5mbyhpbmZvKCkpCisjZW5kaWYKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSXNX
YXRjaGVkKQogICAgICwgbV9wcm9wZXJ0eUhhc2goMCkKIHsKICAgICBzZXREaWN0aW9uYXJ5S2lu
ZChOb25lRGljdGlvbmFyeUtpbmQpOwogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZShmYWxz
ZSk7Ci0gICAgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhtX2NsYXNzSW5mby0+aGFzU3Rh
dGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgc2V0SGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllcyhjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRp
ZXMoKSk7CiAgICAgc2V0SGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcyhmYWxzZSk7Ci0g
ICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byht
X2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAg
c2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhjbGFz
c0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CiAgICAgc2V0
SGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKGZhbHNlKTsK
ICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24odHJ1ZSk7
CiAgICAgc2V0VHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygwKTsKQEAgLTI0NCwxMSArMjU3
LDE1IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAKICAgICBUeXBlSW5mbyB0eXBl
SW5mbyA9IFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyk7CiAgICAgbV9ibG9iID0g
U3RydWN0dXJlSURCbG9iKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQodGhp
cyksIDAsIHR5cGVJbmZvKTsKKyNpZiBDUFUoQUREUkVTUzY0KSAmJiBDUFUoTElUVExFX0VORElB
TikKKyAgICBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUgPSBzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpKSA8PCBvdXRP
ZkxpbmVUeXBlRmxhZ3NTaGlmdDsKKyNlbHNlCiAgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0
eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxhZ3MoKTsKKyNlbmRpZgogCi0gICAgQVNTRVJUKGhhc1Jl
YWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAhbV9jbGFz
c0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VS
VChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNT
ZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZv
KCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBtX2NsYXNzSW5mby0+bWV0aG9kVGFibGUuZ2V0
Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEpOworICAgIEFTU0VSVChoYXNSZWFkT25s
eU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIWNsYXNzSW5mbygp
LT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQoaGFz
R2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVy
T3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92
ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldENhbGxE
YXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKIH0KIAogU3RydWN0dXJlOjpTdHJ1Y3R1cmUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCkBAIC0yNTYsNyArMjczLDExIEBAIFN0cnVjdHVyZTo6
U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2aW91cywgRGVmZXJyZWRTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0CiAgICAgLCBtX2lubGluZUNhcGFjaXR5KHByZXZpb3VzLT5tX2lubGluZUNh
cGFjaXR5KQogICAgICwgbV9iaXRGaWVsZCgwKQogICAgICwgbV9wcm90b3R5cGUodm0sIHRoaXMs
IHByZXZpb3VzLT5tX3Byb3RvdHlwZS5nZXQoKSkKLSAgICAsIG1fY2xhc3NJbmZvKHByZXZpb3Vz
LT5tX2NsYXNzSW5mbykKKyNpZiBDUFUoQUREUkVTUzY0KSAmJiBDUFUoTElUVExFX0VORElBTikK
KyAgICAsIG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyhiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihwcmV2aW91cy0+Y2xhc3NJbmZvKCkpKQorI2Vsc2UKKyAgICAsIG1fY2xhc3NJbmZvKHBy
ZXZpb3VzLT5jbGFzc0luZm8oKSkKKyNlbmRpZgogICAgICwgbV90cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldChJc1dhdGNoZWQpCiAgICAgLCBtX3Byb3BlcnR5SGFzaChwcmV2aW91cy0+bV9wcm9wZXJ0
eUhhc2gpCiAgICAgLCBtX3NlZW5Qcm9wZXJ0aWVzKHByZXZpb3VzLT5tX3NlZW5Qcm9wZXJ0aWVz
KQpAQCAtMjgxLDcgKzMwMiwxMSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVj
dHVyZSogcHJldmlvdXMsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdAogIAogICAgIFR5
cGVJbmZvIHR5cGVJbmZvID0gcHJldmlvdXMtPnR5cGVJbmZvKCk7CiAgICAgbV9ibG9iID0gU3Ry
dWN0dXJlSURCbG9iKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQodGhpcyks
IHByZXZpb3VzLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCksIHR5cGVJbmZvKTsKKyNp
ZiBDUFUoQUREUkVTUzY0KSAmJiBDUFUoTElUVExFX0VORElBTikKKyAgICBtX291dE9mTGluZVR5
cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHR5
cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpKSA8PCBvdXRPZkxpbmVUeXBlRmxhZ3NTaGlmdDsK
KyNlbHNlCiAgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5vdXRPZkxpbmVUeXBl
RmxhZ3MoKTsKKyNlbmRpZgogCiAgICAgQVNTRVJUKCFwcmV2aW91cy0+dHlwZUluZm8oKS5zdHJ1
Y3R1cmVJc0ltbW9ydGFsKCkpOwogICAgIHNldFByZXZpb3VzSUQodm0sIHByZXZpb3VzKTsKQEAg
LTI5Myw5ICszMTgsOSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSog
cHJldmlvdXMsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdAogCiAgICAgaWYgKHByZXZp
b3VzLT5tX2dsb2JhbE9iamVjdCkKICAgICAgICAgbV9nbG9iYWxPYmplY3Quc2V0KHZtLCB0aGlz
LCBwcmV2aW91cy0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpOwotICAgIEFTU0VSVChoYXNSZWFkT25s
eU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIW1fY2xhc3NJbmZv
LT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NFUlQoaGFz
R2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVy
T3JSZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92
ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgbV9jbGFzc0luZm8tPm1ldGhvZFRhYmxlLmdldENhbGxE
YXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKKyAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdl
dHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8ICFjbGFzc0luZm8oKS0+aGFz
U3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKGhhc0dldHRl
clNldHRlclByb3BlcnRpZXMoKSB8fCAhY2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVh
ZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlk
ZXNHZXRDYWxsRGF0YSgpIHx8IGNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAh
PSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CiB9CiAKIFN0cnVjdHVyZTo6flN0cnVjdHVyZSgpCkBA
IC0zMTcsNyArMzQyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShQb2x5UHJvdG9U
YWcsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICB1bnNpZ25lZCBv
bGRPdXRPZkxpbmVDYXBhY2l0eSA9IHJlc3VsdC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBy
ZXN1bHQtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCiAgICAgICAgIHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wb2x5UHJvdG9OYW1lKCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLAotICAgICAgICBbJl0gKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVy
dHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3Vy
cmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQg
bmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTdHJ1Y3R1cmU6Om91
dE9mTGluZUNhcGFjaXR5KG5ld01heE9mZnNldCkgPT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkpOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09IGtub3duUG9seVByb3RvT2Zmc2V0
KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW5saW5lT2Zmc2V0KGtub3duUG9seVBy
b3RvT2Zmc2V0KSk7CkBAIC0zMzksNyArMzY0LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZpbmRTdHJ1
Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiYgc3QK
ICAgICB0YWJsZSA9IDA7CiAKICAgICBmb3IgKHN0cnVjdHVyZSA9IHRoaXM7IHN0cnVjdHVyZTsg
c3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpIHsKLSAgICAgICAgc3RydWN0dXJl
LT5tX2xvY2subG9jaygpOworICAgICAgICBzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkubG9jaygpOwog
ICAgICAgICAKICAgICAgICAgdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVPck51bGwo
KTsKICAgICAgICAgaWYgKHRhYmxlKSB7CkBAIC0zNDksNyArMzc0LDcgQEAgdm9pZCBTdHJ1Y3R1
cmU6OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKFZlY3RvcjxTdHJ1Y3R1
cmUqLCA4PiYgc3QKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RydWN0dXJlcy5hcHBl
bmQoc3RydWN0dXJlKTsKLSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAg
ICAgIHN0cnVjdHVyZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICB9CiAgICAgCiAgICAgQVNT
RVJUKCFzdHJ1Y3R1cmUpOwpAQCAtMzcyLDE0ICszOTcsMTQgQEAgUHJvcGVydHlUYWJsZSogU3Ry
dWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mIHZtLCBib29sIHNldFByb3BlcnR5
VGFibGUKICAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQo
bWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOwogICAgIGlmICh0YWJsZSkgewogICAgICAg
ICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBjYXBhY2l0eSk7Ci0gICAgICAgIHN0cnVjdHVyZS0+
bV9sb2NrLnVubG9jaygpOworICAgICAgICBzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7
CiAgICAgfSBlbHNlCiAgICAgICAgIHRhYmxlID0gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBj
YXBhY2l0eSk7CiAgICAgCiAgICAgLy8gTXVzdCBob2xkIHRoZSBsb2NrIG9uIHRoaXMgc3RydWN0
dXJlLCBzaW5jZSB3ZSB3aWxsIGJlIG1vZGlmeWluZyB0aGlzIHN0cnVjdHVyZSdzCiAgICAgLy8g
cHJvcGVydHkgbWFwLiBXZSBkb24ndCB3YW50IGdldENvbmN1cnJlbnRseSgpIHRvIHNlZSB0aGUg
cHJvcGVydHkgbWFwIGluIGEgaGFsZi1iYWtlZAogICAgIC8vIHN0YXRlLgotICAgIEdDU2FmZUNv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBHQ1NhZmVDb25j
dXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygpLCB2bS5oZWFwKTsKICAgICBpZiAo
c2V0UHJvcGVydHlUYWJsZSkKICAgICAgICAgdGhpcy0+c2V0UHJvcGVydHlUYWJsZSh2bSwgdGFi
bGUpOwogCkBAIC00NDAsNyArNDY1LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3QKIAogU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7Ci0gICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7CisgICAgQ29uY3Vy
cmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5jZWxsTG9jaygpKTsKICAgICByZXR1
cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoc3RydWN0dXJl
LCB1aWQsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9CiAKQEAgLTUxNCw3ICs1MzksNyBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFBybwogICAgIC8vIGNhc2UgYWxsIGlzIHdlbGwuICBJZiBpdCB3YXNu
J3QgZm9yIHRoZSBsb2NrLCB0aGUgR0Mgd291bGQgaGF2ZSBUT0NUT1U6IGlmIGNvdWxkIHJlYWQK
ICAgICAvLyBwcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyBiZWZvcmUgd2Ug
c2V0IGl0IHRvIHRydWUsIGFuZCB0aGVuIGJsb3cgdGhlIHRhYmxlIGF3YXkgYWZ0ZXIuCiAgICAg
ewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRyYW5zaXRpb24tPm1fbG9jayk7
CisgICAgICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKHRyYW5zaXRpb24tPmNlbExv
Y2soKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVU
cmFuc2l0aW9uaW5nKHRydWUpOwogICAgIH0KIApAQCAtNTM0LDcgKzU1OSw3IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvCiAKICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT50cmFuc2l0aW9u
T2Zmc2V0KCksIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIHsKLSAgICAgICAg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVh
cCk7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVy
ZS0+Y2VsbExvY2soKSwgdm0uaGVhcCk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9u
VGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB9CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tP
ZmZzZXRDb25zaXN0ZW5jeSgpOwpAQCAtNTk1LDcgKzYyMCw3IEBAIFN0cnVjdHVyZSogU3RydWN0
dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwKIAogICAgIC8vIFdoaWxlIHdlIGFyZSBkZWxldGluZyB0aGUgcHJvcGVydHksIHdlIG5l
ZWQgdG8gbWFrZSBzdXJlIHRoZSB0YWJsZSBpcyBub3QgY2xlYXJlZC4KICAgICB7Ci0gICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAgICAgICAg
Q29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2soKSk7CiAg
ICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9u
aW5nKHRydWUpOwogICAgIH0KIApAQCAtNjE2LDcgKzY0MSw3IEBAIFN0cnVjdHVyZSogU3RydWN0
dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwKIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwg
dHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgewotICAgICAgICBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrLCB2bS5oZWFwKTsKKyAgICAg
ICAgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5jZWxsTG9j
aygpLCB2bS5oZWFwKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQo
dm0sIHRyYW5zaXRpb24pOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNldENvbnNp
c3RlbmN5KCk7CkBAIC02MzQsNyArNjU5LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5n
ZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlMKICAg
ICB0cmFuc2l0aW9uLT5tX3Byb3RvdHlwZS5zZXQodm0sIHRyYW5zaXRpb24sIHByb3RvdHlwZSk7
CiAKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKHZtKTsKLSAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlv
bi0+bV9sb2NrKSwgdm0sIHRhYmxlKTsKKyAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJh
bnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0TWF4
T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKICAgICAKICAgICB0cmFuc2l0aW9u
LT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7CkBAIC02NDcsNyArNjcyLDcgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHIKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZt
LCBzdHJ1Y3R1cmUpOwogCiAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0dXJl
LT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgICAgICB0cmFuc2l0aW9uLT5w
aW4oaG9sZExvY2sodHJhbnNpdGlvbi0+bV9sb2NrKSwgdm0sIHRhYmxlKTsKKyAgICAgICAgdHJh
bnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUp
OwogICAgICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zm
c2V0KCkpOwogICAgICAgICAKICAgICAgICAgc3RydWN0dXJlID0gdHJhbnNpdGlvbjsKQEAgLTY2
OSw3ICs2OTQsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0aQogICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAKICAgICBQcm9wZXJ0
eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZt
KTsKLSAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+bV9sb2NrKSwgdm0s
IHRhYmxlKTsKKyAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+Y2VsbExv
Y2soKSksIHZtLCB0YWJsZSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1
Y3R1cmUtPm1heE9mZnNldCgpKTsKICAgICB0cmFuc2l0aW9uLT5zZXREaWN0aW9uYXJ5S2luZChr
aW5kKTsKICAgICB0cmFuc2l0aW9uLT5zZXRIYXNCZWVuRGljdGlvbmFyeSh0cnVlKTsKQEAgLTcx
MCw3ICs3MzUsNyBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxl
T3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgIGlmIChp
c1Bpbm5lZFByb3BlcnR5VGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQtPmNvcHko
dm0sIHJlc3VsdC0+c2l6ZSgpICsgMSk7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoY2VsbExv
Y2soKSk7CiAgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0sIG51bGxwdHIpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTc0Nyw3ICs3NzIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uU2xvdyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBObwogICAgICAgICAvLyB0YWJsZSBkb2Vzbid0IGtub3cgaG93IHRvIHRha2UgaW50byBh
Y2NvdW50IHN1Y2ggd2hvbGVzYWxlIGVkaXRzLgogCiAgICAgICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgICAg
ICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNoaW5nKGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayks
IHZtLCB0YWJsZSk7CisgICAgICAgIHRyYW5zaXRpb24tPnBpbkZvckNhY2hpbmcoaG9sZExvY2so
dHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgICAgIHRyYW5zaXRpb24t
PnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAgICAgICAgIAogICAg
ICAgICB0YWJsZSA9IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVPck51bGwoKTsKQEAgLTc3MCw5
ICs3OTUsOSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uU2xv
dyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBObwogICAgIAogICAgIGlmIChzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gdHJh
bnNpdGlvbi0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBp
bihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFu
c2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzdHJ1Y3R1cmUt
Pm1fbG9jayk7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc3RydWN0dXJlLT5jZWxs
TG9jaygpKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0sIHRy
YW5zaXRpb24pOwogICAgIH0KIApAQCAtODI0LDcgKzg0OSw3IEBAIFN0cnVjdHVyZSogU3RydWN0
dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3Qp
CiAgICAgQVNTRVJUKGlzRGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQob2JqZWN0LT5zdHJ1Y3R1
cmUodm0pID09IHRoaXMpOwogICAgIAotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxv
Y2tlcihjZWxsTG9jaygpLCB2bS5oZWFwKTsKICAgICAKICAgICBvYmplY3QtPnNldFN0cnVjdHVy
ZUlERGlyZWN0bHkobnVrZShpZCgpKSk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAg
LTkzMiw3ICs5NTcsNyBAQCBXYXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5
UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFZNJiB2bSwgUHJvcGVydAogICAgIAogICAgIGlmICgh
aGFzUmFyZURhdGEoKSkKICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7Ci0gICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIg
bG9ja2VyKGNlbGxMb2NrKCkpOwogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IHRo
aXMtPnJhcmVEYXRhKCk7CiAgICAgaWYgKCFyYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9p
bnRTZXRzKSB7CiAgICAgICAgIHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMg
PQpAQCAtMTA0MiwxNCArMTA2NywxNCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYgogewogICAg
IHJldHVybiBhZGQ8U2hvdWxkUGluOjpObz4oCiAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsCi0gICAgICAgIFt0aGlzLCAmdm1dIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7Cisg
ICAgICAgIFt0aGlzLCAmdm1dKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQ
cm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAg
ICBzZXRNYXhPZmZzZXQodm0sIG5ld01heE9mZnNldCk7CiAgICAgICAgIH0pOwogfQogCiBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46Ok5vPih2bSwgcHJvcGVydHlO
YW1lLCBbdGhpcywgJnZtXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVy
dHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAgIHJldHVybiByZW1v
dmU8U2hvdWxkUGluOjpObz4odm0sIHByb3BlcnR5TmFtZSwgW3RoaXMsICZ2bV0oY29uc3QgR0NT
YWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNl
dCBuZXdNYXhPZmZzZXQpIHsKICAgICAgICAgc2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQp
OwogICAgIH0pOwogfQpAQCAtMTEyMCw3ICsxMTQ1LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgCi0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5tX2xvY2spOworICAgIENvbmN1cnJlbnRKU0Nl
bGxMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIAogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmpl
Y3QtPmlzT2JqZWN0KCkpCkBAIC0xMTM0LDExICsxMTU5LDExIEBAIHZvaWQgU3RydWN0dXJlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgaWYg
KHRoaXNPYmplY3QtPmlzUGlubmVkUHJvcGVydHlUYWJsZSgpIHx8IHRoaXNPYmplY3QtPnByb3Rl
Y3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKCkpIHsKICAgICAgICAgLy8gTk9URTog
VGhpcyBjYW4gaW50ZXJsZWF2ZSBpbiBwaW4oKSwgaW4gd2hpY2ggY2FzZSBpdCBtYXkgc2VlIGEg
bnVsbCBwcm9wZXJ0eSB0YWJsZS4KICAgICAgICAgLy8gVGhhdCdzIGZpbmUsIGJlY2F1c2UgdGhl
biB0aGUgYmFycmllciB3aWxsIGZpcmUgYW5kIHdlIHdpbGwgc2NhbiB0aGlzIGFnYWluLgotICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwor
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXNPYmplY3QtPnByb3BlcnR5VGFi
bGVVbnNhZmUoKSk7CiAgICAgfSBlbHNlIGlmICh2aXNpdG9yLmlzQW5hbHl6aW5nSGVhcCgpKQot
ICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUp
OwotICAgIGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKLSAgICAg
ICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+cHJvcGVydHlUYWJsZVVuc2FmZSgp
KTsKKyAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5wcm9wZXJ0eVRhYmxlVW5zYWZlKCkpCisgICAg
ICAgIHRoaXNPYmplY3QtPmNsZWFyUHJvcGVydHlUYWJsZSgpOwogfQogCiBib29sIFN0cnVjdHVy
ZTo6aXNDaGVhcER1cmluZ0dDKFZNJiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKaW5kZXggYjNkYjM4NTZlMzgxMWQwZWYxYTE2NTNmZDdhYzFiOGFmZDIyMmJl
ZS4uZmM1YjAxZWNmN2E0NjZmMTJhMGE2YjlkY2I5YzFlOGRhNWM2YmViYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTI1OCw5ICsyNTgsMTggQEAgY2xh
c3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICByZXR1
cm4gdHlwZUluZm8oKS5nZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgpOwogICAgIH0KKworICAg
IFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3Mgb3V0T2ZMaW5lVHlwZUZsYWdzKCkgY29uc3QK
KyAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkgJiYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlSW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzPihtX291dE9m
TGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUgPj4gb3V0T2ZMaW5lVHlwZUZsYWdz
U2hpZnQpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lVHlwZUZsYWdzOworI2Vu
ZGlmCisgICAgfQogICAgIAogICAgIC8vIFR5cGUgYWNjZXNzb3JzLgotICAgIFR5cGVJbmZvIHR5
cGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZs
YWdzKTsgfQorICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnR5
cGVJbmZvKG91dE9mTGluZVR5cGVGbGFncygpKTsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25z
dCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KIAogICAgIEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdNb2RlSW5jbHVkaW5n
SGlzdG9yeSgpICYgQWxsV3JpdGFibGVBcnJheVR5cGVzOyB9CkBAIC0zODQsNyArMzkzLDExIEBA
IGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgUHJvcGVydHlP
ZmZzZXQgdHJhbnNpdGlvbk9mZnNldCgpIGNvbnN0CiAgICAgeworI2lmIENQVShBRERSRVNTNjQp
ICYmIENQVShMSVRUTEVfRU5ESUFOKQorICAgICAgICB1aW50MTZfdCB0cmFuc2l0aW9uT2Zmc2V0
ID0gbV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvID4+IHRyYW5zaXRpb25PZmZzZXRTaGlm
dDsKKyNlbHNlCiAgICAgICAgIHVpbnQxNl90IHRyYW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRp
b25PZmZzZXQ7CisjZW5kaWYKICAgICAgICAgaWYgKHRyYW5zaXRpb25PZmZzZXQgPT0gc2hvcnRJ
bnZhbGlkT2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAgICAgICAg
IGlmICh0cmFuc2l0aW9uT2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykKQEAgLTM5NCwxNyArNDA3
LDM2IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgdm9p
ZCBzZXRUcmFuc2l0aW9uT2Zmc2V0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAg
IHsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQotICAgICAgICAgICAgbV90
cmFuc2l0aW9uT2Zmc2V0ID0gc2hvcnRJbnZhbGlkT2Zmc2V0OwotICAgICAgICBlbHNlIGlmIChv
ZmZzZXQgPCB1c2VSYXJlRGF0YUZsYWcgJiYgb2Zmc2V0IDwgc2hvcnRJbnZhbGlkT2Zmc2V0KQot
ICAgICAgICAgICAgbV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIGlm
IChtX3RyYW5zaXRpb25PZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKQorICAgICAgICBhdXRvIGNv
bW1pdCA9IFsmXSh1aW50MTZfdCB2YWx1ZSkgeworI2lmIENQVShBRERSRVNTNjQpICYmIENQVShM
SVRUTEVfRU5ESUFOKQorICAgICAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IChtX3RyYW5zaXRp
b25PZmZzZXRBbmRDbGFzc0luZm8gJiBjbGFzc0luZm9NYXNrKSB8IChzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KHZhbHVlKSA8PCB0cmFuc2l0aW9uT2Zmc2V0U2hpZnQpOworICAgICAgICAgICAgbV90
cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvID0gcmVzdWx0OworI2Vsc2UKKyAgICAgICAgICAg
IG1fdHJhbnNpdGlvbk9mZnNldCA9IHZhbHVlOworI2VuZGlmCisgICAgICAgIH07CisKKyAgICAg
ICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBjb21taXQoc2hv
cnRJbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAob2Zmc2V0IDwgdXNlUmFyZURhdGFGbGFnICYmIG9mZnNldCA8IHNob3J0SW52YWxpZE9m
ZnNldCkgeworICAgICAgICAgICAgY29tbWl0KG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyNpZiBDUFUoQUREUkVTUzY0KSAmJiBDUFUoTElUVExFX0VORElBTikKKyAg
ICAgICAgdWludDE2X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9mZnNldEFuZENs
YXNzSW5mbyA+PiB0cmFuc2l0aW9uT2Zmc2V0U2hpZnQ7CisjZWxzZQorICAgICAgICB1aW50MTZf
dCB0cmFuc2l0aW9uT2Zmc2V0ID0gbV90cmFuc2l0aW9uT2Zmc2V0OworI2VuZGlmCisgICAgICAg
IGlmICh0cmFuc2l0aW9uT2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykgewogICAgICAgICAgICAg
cmFyZURhdGEoKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zm
c2V0OwotICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIG1f
dHJhbnNpdGlvbk9mZnNldCA9IHVzZVJhcmVEYXRhRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQorCisgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zm
c2V0ID0gb2Zmc2V0OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBj
b21taXQodXNlUmFyZURhdGFGbGFnKTsKICAgICB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQgb3V0
T2ZMaW5lQ2FwYWNpdHkoUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQpAQCAtNDY3LDcgKzQ5OSw3
IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgYm9vbCBo
aWphY2tzSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzVHlw
ZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgICAgICByZXR1
cm4gaXNUeXBlZFZpZXcoY2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAgICAg
fQogICAgIAogICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSBjb25zdApAQCAtNTM1
LDcgKzU2NywxNCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAog
ICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCosIFZNJiwgSlNT
dHJpbmcqIHZhbHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIAotICAg
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0luZm87
IH0KKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0CisgICAgeworI2lmIENQ
VShBRERSRVNTNjQpICYmIENQVShMSVRUTEVfRU5ESUFOKQorICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PGNvbnN0IENsYXNzSW5mbyo+KG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyAm
IGNsYXNzSW5mb01hc2spOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fY2xhc3NJbmZvOworI2Vu
ZGlmCisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAg
ICAgewpAQCAtNTUyLDIxICs1OTEsMjMgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2ds
b2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBjbGFzc0luZm9PZmZz
ZXQoKQorI2lmIENQVShBRERSRVNTNjQpICYmIENQVShMSVRUTEVfRU5ESUFOKQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX3RyYW5zaXRpb25P
ZmZzZXRBbmRDbGFzc0luZm8pOworICAgIH0KKyNlbHNlCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkNsYXNzSW5mbygpCiAgICAgewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFN0cnVjdHVyZSwgbV9jbGFzc0luZm8pOwogICAgIH0KKyNlbmRpZgogICAgICAgICAKICAgICBz
dGF0aWMgcHRyZGlmZl90IGluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fYmxvYikgKyBT
dHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKTsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIHB0cmRpZmZfdCBwcm9wZXJ0eVRhYmxlVW5zYWZlT2Zmc2V0
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX3By
b3BlcnR5VGFibGVVbnNhZmUpOwotICAgIH0KLQogICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5saW5l
Q2FwYWNpdHlPZmZzZXQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJ1Y3R1cmUsIG1faW5saW5lQ2FwYWNpdHkpOwpAQCAtNjUzLDggKzY5NCw2IEBAIGNsYXNzIFN0
cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIAogICAgIHN0YXRpYyB2b2lkIGR1
bXBDb250ZXh0SGVhZGVyKFByaW50U3RyZWFtJik7CiAgICAgCi0gICAgQ29uY3VycmVudEpTTG9j
ayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQotCiAgICAgdW5zaWduZWQgcHJvcGVydHlIYXNo
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUhhc2g7IH0KIAogICAgIHN0YXRpYyBib29sIHNo
b3VsZENvbnZlcnRUb1BvbHlQcm90byhjb25zdCBTdHJ1Y3R1cmUqIGEsIGNvbnN0IFN0cnVjdHVy
ZSogYik7CkBAIC03MzUsNyArNzc0LDcgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBtYXkgZ3JhYiB0aGUgbG9jaywgb3Igbm90LiBEbyBub3Qg
Y2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2suCiAgICAgUHJvcGVydHlUYWJs
ZSogZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkoVk0mIHZtKQogICAgIHsKLSAgICAgICAg
aWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkK
KyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IHByb3BlcnR5VGFibGVPck51bGwo
KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIGlmICghcHJldmlvdXNJRCgp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03NDUsMjAgKzc4NCwyNSBAQCBjbGFz
cyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBUaGlzIG1heSBncmFi
IHRoZSBsb2NrLCBvciBub3QuIERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jay4KICAgICBQcm9wZXJ0eVRhYmxlKiBlbnN1cmVQcm9wZXJ0eVRhYmxlKFZNJiB2bSkK
ICAgICB7Ci0gICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBtX3Byb3BlcnR5VGFi
bGVVbnNhZmUuZ2V0KCkpCisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9w
ZXJ0eVRhYmxlT3JOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICBy
ZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtKTsKICAgICB9CiAgICAgCiAgICAgUHJv
cGVydHlUYWJsZSogcHJvcGVydHlUYWJsZU9yTnVsbCgpIGNvbnN0CiAgICAgeworI2lmIENQVShB
RERSRVNTNjQpICYmIENQVShMSVRUTEVfRU5ESUFOKQorICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PFByb3BlcnR5VGFibGUqPihtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVV
bnNhZmUgJiBwcm9wZXJ0eVRhYmxlVW5zYWZlTWFzayk7CisjZWxzZQogICAgICAgICByZXR1cm4g
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIC8v
IFRoaXMgd2lsbCBncmFiIHRoZSBsb2NrLiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0
cnVjdHVyZSdzIGxvY2suCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlUYWJsZSogbWF0
ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gdHJ1ZSk7
CiAgICAgCiAgICAgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSog
dGFibGUpOworICAgIHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7CiAgICAgCiAgICAgUHJvcGVy
dHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mKTsKICAgICBQcm9w
ZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKQEAgLTgwNSwzOSAr
ODQ5LDUzIEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIC8v
IFRoZXNlIG5lZWQgdG8gYmUgcHJvcGVybHkgYWxpZ25lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSAnU3RydWN0dXJlJwogICAgIC8vIHBhcnQgb2YgdGhlIG9iamVjdC4KICAgICBTdHJ1Y3R1cmVJ
REJsb2IgbV9ibG9iOwotICAgIFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3MgbV9vdXRPZkxp
bmVUeXBlRmxhZ3M7CiAKLSAgICB1aW50OF90IG1faW5saW5lQ2FwYWNpdHk7CisgICAgLy8gU2hv
dWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0Ms
IGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KKyAgICAvLyBEdXJpbmcgYSBI
ZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZl
IHRvIHVzZS4KKyNpZiBDUFUoQUREUkVTUzY0KSAmJiBDUFUoTElUVExFX0VORElBTikKKyAgICAv
LyBIaWdoZXN0IDE2IGJpdHMgYXJlIGZvciBtX291dE9mTGluZVR5cGVGbGFncy4gUmVtYWluaW5n
IGJpdHMgYXJlIGZvciBtX3Byb3BlcnR5VGFibGVVbnNhZmUuCitwdWJsaWM6CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBvdXRPZkxpbmVUeXBlRmxhZ3NTaGlmdCA9IDQ4OworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHByb3BlcnR5VGFibGVVbnNhZmVNYXNrID0gKDFVTEwg
PDwgNDgpIC0gMTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBvdXRPZkxpbmVUeXBl
RmxhZ3NTaGlmdGVkTWFzayA9IH5wcm9wZXJ0eVRhYmxlVW5zYWZlTWFzazsKKyAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihUeXBlSW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzKSA9PSAyKTsKKworICAg
IC8vIEhpZ2hlc3QgMTYgYml0cyBhcmUgZm9yIG1fdHJhbnNpdGlvbk9mZnNldC4gUmVtYWluaW5n
IGJpdHMgYXJlIGZvciBtX2NsYXNzSW5mby4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IHRyYW5zaXRpb25PZmZzZXRTaGlmdCA9IDQ4OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0
cl90IGNsYXNzSW5mb01hc2sgPSAoMVVMTCA8PCA0OCkgLSAxOworcHJpdmF0ZToKKyAgICBVbnNh
ZmVDZWxsUG9pbnRlciBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmU7
CisgICAgdWludHB0cl90IG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbzsKKyNlbHNlCisg
ICAgVHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFncyBtX291dE9mTGluZVR5cGVGbGFnczsKKyAg
ICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOworICAg
IGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87IC8vIDIgSU1NCisgICAgdWludDE2X3QgbV90
cmFuc2l0aW9uT2Zmc2V0OworI2VuZGlmCiAKLSAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsK
KyAgICB1aW50OF90IG1faW5saW5lQ2FwYWNpdHk7IC8vIElNTQogCiAgICAgdWludDMyX3QgbV9i
aXRGaWVsZDsKIAotICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmpl
Y3Q7Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJvdG90eXBlOwotICAgIG11dGFibGUg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NhY2hlZFByb3RvdHlwZUNoYWluOworICAg
IFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7IC8vIDIgSU1NCisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJvdG90eXBlOyAvLyAyIElNTQorICAgIG11dGFi
bGUgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NhY2hlZFByb3RvdHlwZUNoYWluOyAv
LyAyCiAKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3ByZXZpb3VzT3JSYXJlRGF0YTsKIAog
ICAgIFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4gbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lOwog
Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKLQotICAgIFN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKKyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUgbV90cmFuc2l0aW9uVGFibGU7IC8vIDIKIAotICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0
aHJvdWdoIGVuc3VyZVByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRv
IDAgYnkgYW5vdGhlciB0aHJlYWQuCi0gICAgLy8gRHVyaW5nIGEgSGVhcCBTbmFwc2hvdCBHQyB3
ZSBhdm9pZCBjbGVhcmluZyB0aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0byB1c2UuCi0gICAgV3Jp
dGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIAogICAgIG11
dGFibGUgSW5saW5lV2F0Y2hwb2ludFNldCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0OwogCiAg
ICAgQ09NUElMRV9BU1NFUlQoZmlyc3RPdXRPZkxpbmVPZmZzZXQgPCAyNTYsIGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0X2ZpdHMpOwogCi0gICAgdWludDE2X3QgbV90cmFuc2l0aW9uT2Zmc2V0OwogICAg
IHVpbnQxNl90IG1fbWF4T2Zmc2V0OwogCi0gICAgdWludDMyX3QgbV9wcm9wZXJ0eUhhc2g7Ci0g
ICAgVGlueUJsb29tRmlsdGVyIG1fc2VlblByb3BlcnRpZXM7CisgICAgdWludDMyX3QgbV9wcm9w
ZXJ0eUhhc2g7IC8vIDEgSU1NCisgICAgVGlueUJsb29tRmlsdGVyIG1fc2VlblByb3BlcnRpZXM7
IC8vIDUgSU1NCiAKICAgICBmcmllbmQgY2xhc3MgVk1JbnNwZWN0b3I7CiAgICAgZnJpZW5kIGNs
YXNzIEpTRG9sbGFyVk1IZWxwZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKaW5kZXggMGNkOThkNTJhY2M3ZjcxNGMwNWIxNTNlMDgxMzll
NDkxY2Q4Y2Y4Yy4uYjViZWM3M2MyMmJkNzJhMzU2MGU2MjEyYjQ1MTJiYjAwOTgxMjU2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaApA
QCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgU3RydWN0dXJlOjpmb3JFYWNoUHJvcGVydHlDb25jdXJy
ZW50bHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIAogICAgICAgICBpZiAoIWZ1bmN0b3IoUHJv
cGVydHlNYXBFbnRyeShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSwg
c3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcygpKSkpIHsKICAgICAgICAgICAgIGlmICh0YWJsZSkKLSAgICAgICAgICAg
ICAgICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAgICAgICAgICAgICAgIHRh
YmxlU3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTkyLDExICsxOTIsMTEgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZv
ckVhY2hQcm9wZXJ0eUNvbmN1cnJlbnRseShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBpZiAoIWZ1bmN0b3IoZW50cnkpKSB7
Ci0gICAgICAgICAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKKyAgICAg
ICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgdGFibGVT
dHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKKyAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPmNlbGxM
b2NrKCkudW5sb2NrKCk7CiAgICAgfQogfQogCkBAIC0zNTAsNyArMzUwLDcgQEAgaW5saW5lIHZv
aWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
CiBpbmxpbmUgV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2VtZW50V2F0
Y2hwb2ludFNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNl
bGxMb2NrKCkpOwogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CkBAIC00MzksNyArNDM5LDcgQEAgaW5saW5l
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQKIHsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVBy
b3BlcnR5VGFibGUodm0pOwogCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2Vy
KGNlbGxMb2NrKCksIHZtLmhlYXApOwogCiAgICAgc3dpdGNoIChzaG91bGRQaW4pIHsKICAgICBj
YXNlIFNob3VsZFBpbjo6WWVzOgpAQCAtNDgyLDcgKzQ4Miw3IEBAIHRlbXBsYXRlPFN0cnVjdHVy
ZTo6U2hvdWxkUGluIHNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KIGlubGluZSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQ
cm9wZXJ0eVRhYmxlKHZtKTsKLSAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jaywgdm0uaGVhcCk7CisgICAgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIo
Y2VsbExvY2soKSwgdm0uaGVhcCk7CiAKICAgICBzd2l0Y2ggKHNob3VsZFBpbikgewogICAgIGNh
c2UgU2hvdWxkUGluOjpZZXM6CkBAIC01NTAsNyArNTUwLDIzIEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBTdHJ1Y3R1cmU6OnNldEdsb2JhbE9iamVjdChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldFByb3BlcnR5VGFibGUo
Vk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKKyNpZiBDUFUoQUREUkVTUzY0KSAmJiBD
UFUoTElUVExFX0VORElBTikKKyAgICB1aW50cHRyX3QgdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90Pih0YWJsZSkgfCAob3V0T2ZMaW5lVHlwZUZsYWdzU2hpZnRlZE1hc2sgJiBtX291dE9m
TGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUpOworICAgIG1fb3V0T2ZMaW5lVHlw
ZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZSA9IHZhbHVlOworICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKHRoaXMsIHRhYmxlKTsKKyNlbHNlCiAgICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLnNl
dE1heUJlTnVsbCh2bSwgdGhpcywgdGFibGUpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBTdHJ1Y3R1cmU6OmNsZWFyUHJvcGVydHlUYWJsZSgpCit7CisjaWYgQ1BVKEFERFJFU1M2
NCkgJiYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgdWludHB0cl90IHZhbHVlID0gb3V0T2ZMaW5l
VHlwZUZsYWdzU2hpZnRlZE1hc2sgJiBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFi
bGVVbnNhZmU7CisgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxlVW5zYWZl
ID0gdmFsdWU7CisjZWxzZQorICAgIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOworI2Vu
ZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldFByZXZpb3VzSUQoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV3JpdGVCYXJyaWVyLmgKaW5kZXggNzA3ZTIwYjZlNWFjM2Y2YmJiYzk3Yzk1NWRkMWUwMTdm
NjBkMjIwMi4uZjdkNDQ3MTk5NDA5OGM0MjE4ZWQwYTY4NzZiZGY1MjJiMzQ0MjZjZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKQEAgLTI0OCw0ICsy
NDgsNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VSwg
VHJhaXRzVT4mIGxocywgY29uc3QgV3JpdGVCYXJyaQogICAgIHJldHVybiBsaHMuZ2V0KCkgPT0g
cmhzLmdldCgpOwogfQogCit1c2luZyBVbnNhZmVDZWxsUG9pbnRlciA9IHVpbnRwdHJfdDsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDQ0Zjk5YmVjOTk3MmI1NzkyZWMxYjg3
MTQzOTMzNzAwMjBhYjNlNjUuLmM1OWEyMzE2MGY0NGQzMTdiNmNjY2EzZmYwMWQ5ZjY1NDc1ODRk
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwCkBAIC0yNzQsNyArMjc0LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93
KCkKIAogICAgICAgICAgICAgc3RhY2tMaW1pdEdQUklzQ2xvYmJlcmVkID0gdHJ1ZTsKICAgICAg
ICAgICAgIGppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwg
c3RhY2tMaW1pdEdQUik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSks
IHNjcmF0Y2hHUFIpOwogCiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8
V2ViQXNzZW1ibHlGdW5jdGlvbj46OnZhbHVlLCAiV2UgZG8gbm90IGNoZWNrIGZvciBzdWJ0eXBl
cyBiZWxvdyIpOwogICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsPFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uPjo6dmFsdWUsICJXZSBkbyBub3QgY2hlY2sgZm9yIHN1YnR5
cGVzIGJlbG93Iik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391014</attachid>
            <date>2020-02-17 18:15:18 -0800</date>
            <delta_ts>2020-02-17 20:25:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207827-20200217181518.patch</filename>
            <type>text/plain</type>
            <size>82931</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NzYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MTBiMDVmMjk5NDNkNWJlNmUyNzA4ZDIyZGViNTI2MTUyMzAyMDczLi5jZTI5NDBlNjljNGUwNTE4
YTg5YzNkODg5MTY3NjAxYjNkY2VmMGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDggQEAKKzIwMjAtMDItMTcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNocmlua3Mgc2l6ZW9mKFN0
cnVjdHVyZSkgZnJvbSAxMTIgdG8gOTYgKDE2IGJ5dGVzKSBpbiA2NCBiaXQgYXJjaGl0ZWN0dXJl
cy4KKyAgICAgICAgU3RydWN0dXJlIGlzIG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IGFsbG9j
YXRlZCBKU0NlbGwgaW4gSlNDLiBTbyBpdCBpcyB3b3J0aCBkb2luZworICAgICAgICBhbGwgdGhl
IHNvcnQgb2YgYml0IGhhY2tzIHRvIG1ha2UgaXQgY29tcGFjdCBhcyBtdWNoIGFzIHBvc3NpYmxl
LgorCisgICAgICAgICAgICAxLiBTdHJpbmdIYXNoZXIgaXMgYWx3YXlzIGdlbmVyYXRpbmcgMjQg
Yml0cyBoYXNoZXMgc28gZmFyLiBCeSBsZXZlcmFnaW5nIHRoaXMgZmFjdCwKKyAgICAgICAgICAg
ICAgIHdlIHN0b3JlIGhhc2ggY29kZSBpbiBTdHJ1Y3R1cmUgaW4gMyBieXRlcyAoMjQgYml0cykg
Zm9yIHByb3BlcnR5LWhhc2ggYW5kIHNlZW4tcHJvcGVydHktaGFzaC4KKyAgICAgICAgICAgIDIu
IEluc3RlYWQgb2YgdXNpbmcgYmxvb20tZmlsdGVyIG9mIHBvaW50ZXJzIGZvciBzZWVuLXByb3Bl
cnRpZXMsIHdlIHNob3VsZCB1c2UgYmxvb20tZmlsdGVyIG9mIGhhc2gtY29kZXMuCisgICAgICAg
ICAgICAzLiBVc2VkIFBhY2tlZFB0ciBmb3IgQysrIG5vbi1jb25jdXJyZW50bHkgYWNjZXNzZWQg
ZGF0YSBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgNC4gUHV0IG91dE9mTGluZVR5cGVGbGFncywg
bWF4T2Zmc2V0IGFuZCB0cmFuc2l0aW9uT2Zmc2V0IGludG8gaGlnaGVzdCBiaXRzIG9mIG1fcHJv
cGVydHlUYWJsZVVuc2FmZSwKKyAgICAgICAgICAgICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4s
IGFuZCBtX2NsYXNzSW5mby4gRG8gbm90IHVzZSBQYWNrZWRQdHIgaGVyZSBzaW5jZSBzb21lIG9m
IHRoZW0gYXJlIGNvbmN1cnJlbnRseSBhY2Nlc3NlZAorICAgICAgICAgICAgICAgYnkgR0MuCisg
ICAgICAgICAgICA1LiBQdXQgbV9pbmxpbmVDYXBhY2l0eSBpbnRvIGxvd2VyIDggYml0cyBvZiBt
X3Byb3BlcnR5SGFzaC4KKyAgICAgICAgICAgIDYuIFJlbW92ZSBtX2xvY2ssIGFuZCB1c2UgU3Ry
dWN0dXJlOjpjZWxsTG9jaygpIGluc3RlYWQuCisKKyAgICAgICAgQ29tYmluaW5nIGFsbCBvZiB0
aGUgYWJvdmUgdGVjaG5pcXVlcyBhbmQgZ2V0dGluZyAxNiBieXRlcy4KKworICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUNyZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlUHJvbWlzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDcmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1Rv
QjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3Jl
YXRlUHJvbWlzZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVDcmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUNoZWNrU3ViQ2xhc3MpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKToKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6Cisg
ICAgICAgIChKU0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0NvbmN1cnJlbnRKU0xvY2suaDoKKyAgICAgICAgKEpTQzo6Q29uY3VycmVudEpT
TG9ja2VyQmFzZTo6Q29uY3VycmVudEpTTG9ja2VyQmFzZSk6CisgICAgICAgIChKU0M6OkdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlckltcGw6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwpOgor
ICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsOjp+R0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VySW1wbCk6CisgICAgICAgIChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlckltcGw6
OkNvbmN1cnJlbnRKU0xvY2tlckltcGwpOgorICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXI6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcjo6fkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlcjo6Q29uY3VycmVudEpT
TG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0
ZW5pbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldERpcmVjdENvbmN1cnJlbnRseSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9K
U09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXBhcmVUb1B1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2V0U2luZ2xlVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZv
ck1hdGVyaWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQ
cm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dG9E
aWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dGFrZVByb3Bl
cnR5VGFibGVPckNsb25lSWZQaW5uZWQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvblNsb3cpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZsYXR0ZW5E
aWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjplbnN1cmVQcm9w
ZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjph
ZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FuQ2Fj
aGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmdldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Zm9yRWFjaFBy
b3BlcnR5Q29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjYWNoZWRQcm90
b3R5cGVDaGFpbiBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0Q2FjaGVkUHJv
dG90eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsZWFyQ2FjaGVkUHJvdG90
eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2lu
dFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSBj
b25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldFByb3BlcnR5
VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsZWFyUHJvcGVydHlUYWJsZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0T3V0T2ZMaW5lVHlwZUZsYWdzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpzZXRDbGFzc0luZm8pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAgIChKU0M6OnRvQXR0cmlidXRlcyk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6U3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjppc1VzaW5nU2lu
Z2xlU2xvdCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6
bWFwIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjp3ZWFr
SW1wbCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2V0
TWFwKToKKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllci5oOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVu
Y3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKwogMjAyMC0wMi0xNyAgUGVyIEFybmUgVm9s
bGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFjaCBsb29rdXAgdG8gY29tLmFw
cGxlLndlYmluc3BlY3RvciBzaG91bGQgbm90IGJlIGFsbG93ZWQgaW4gV2ViS2l0J3MgV2ViQ29u
dGVudCBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IGQ4NjNjNjU2ZWQyYmM5MDZkZWQyN2I1YTg2YWI3YzdlZjBhNGUy
MjMuLjU2ZTdkZjA1MDRjMWE3MjFlMmZjNTczYmE2ZjBlODRlMTQyMTg4ZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMjAtMDItMTcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
KworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAg
ICAgKiB3dGYvdGV4dC9TeW1ib2xJbXBsLmg6CisgICAgICAgIChXVEY6OlN5bWJvbEltcGw6Omhh
c2hGb3JTeW1ib2wgY29uc3QpOgorCiAyMDIwLTAyLTE3ICBWw61jdG9yIE1hbnVlbCBKw6FxdWV6
IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgYSBsb3QgZ2NjIHdhcm5pbmdz
IGJlY2F1c2Ugb2YgJXtwdWJsaWN9cyBmb3JtYXQgc3BlY2lmaWVyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDY0MmIxNjM1NmY5MGU5
YzM4NjAyZWJjNTdmZDllMDRhMGY0NWI1MjguLjMyZGNmZDAyMDI3YzZlNTE4OGY3MjY4MTJiYzRm
YzI4NWJlOGVjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCkBAIC05NjA1LDcgKzk2MDUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNoZWNrU3ViQ2xhc3MoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHNwZWNpZmll
ZEdQUiA9IHNwZWNpZmllZC5ncHIoKTsKIAogICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBiYXNlR1BSLCBvdGhlckdQUiwgc3BlY2lmaWVkR1BSKTsKLSAgICAgICAgbV9qaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3RoZXJHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCBvdGhlckdQUik7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgbV9q
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3RoZXJHUFIsIFN0cnVjdHVyZTo6b2Zm
c2V0T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKCkpLCBvdGhlckdQUik7CisgICAgICAg
IG1faml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZv
aWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKSwgb3RoZXJHUFIpOworI2Vsc2UKKyAgICAg
ICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3RoZXJHUFIsIFN0cnVjdHVy
ZTo6b2Zmc2V0T2ZDbGFzc0luZm8oKSksIG90aGVyR1BSKTsKKyNlbmRpZgogICAgICAgICBtX2pp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihub2RlLT5jbGFzc0luZm8oKSksIHNw
ZWNpZmllZEdQUik7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBsb29wID0gbV9qaXQu
bGFiZWwoKTsKQEAgLTEyODM5LDcgKzEyODQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZVRoaXMoTm9kZSogbm9kZSkKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJ
bW1QdHIobnVsbHB0cik7CiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRB
bGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJm
bHksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAotICAgIG1faml0LmxvYWQ4KEpJVENvbXBpbGVy
OjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgaW5saW5lQ2FwYWNpdHlHUFIpOworICAgIG1faml0LmxvYWQ4KEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpLCBp
bmxpbmVDYXBhY2l0eUdQUik7CiAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdl
KHJlc3VsdEdQUiwgaW5saW5lQ2FwYWNpdHlHUFIpOwogICAgIG1faml0Lm11dGF0b3JGZW5jZSh2
bSgpKTsKIApAQCAtMTI4NzcsOCArMTI4ODIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZVByb21pc2UoTm9kZSogbm9kZSkKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgpICsgSW50ZXJu
YWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5j
dGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVHUFIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIHN0cnVjdHVyZUdQUikpOwot
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8g
SlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSA6IEpTUHJvbWlzZTo6aW5mbygpKSwgc2NyYXRjaDFH
UFIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BS
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSkpOworI2lmIENQVShBRERSRVNTNjQpCisg
ICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1
Y3R1cmU6Om9mZnNldE9mVHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbygpKSwgc2NyYXRjaDFH
UFIpOworICAgIG1faml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lz
ZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKSwgc2NyYXRjaDFHUFIpOwor
I2Vsc2UKKyAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVH
UFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZDbGFzc0luZm8oKSksIHNjcmF0Y2gxR1BSKTsKKyNlbmRp
ZgorICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmlzSW50ZXJuYWxQcm9taXNl
KCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpKSk7CiAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBn
bG9iYWxPYmplY3QpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
KSk7CiAKQEAgLTEyOTI1LDggKzEyOTM1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDcmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KE5vZGUqIG5vZGUsIE9wZXJhdGlvbiBvcGVyCiAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByYXJlRGF0YUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpKSk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhy
YXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZJbnRlcm5hbEZ1bmN0aW9uQWxs
b2NhdGlvblByb2ZpbGUoKSArIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6b2Zm
c2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlR1BS
KTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJz
OjpaZXJvLCBzdHJ1Y3R1cmVHUFIpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoSlND
bGFzczo6aW5mbygpKSwgc2NyYXRjaDFHUFIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSkp
OworI2lmIENQVShBRERSRVNTNjQpCisgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6Om9mZnNldE9mVHJhbnNpdGlvbk9mZnNldEFu
ZENsYXNzSW5mbygpKSwgc2NyYXRjaDFHUFIpOworICAgIG1faml0LmFuZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5m
b01hc2spKSwgc2NyYXRjaDFHUFIpOworI2Vsc2UKKyAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZDbGFzc0luZm8o
KSksIHNjcmF0Y2gxR1BSKTsKKyNlbmRpZgorICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRy
KEpTQ2xhc3M6OmluZm8oKSkpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1faml0LmdyYXBoKCksIGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBz
Y3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAppbmRleCBiMTA4YWJmY2NiODk1
OGE4MzA3YzBhYTc4Y2Q2N2YyMDJkM2I4YzVjLi5lMGRjMjg5MDZhYjAyY2NlZGQ3OWQ4YjgyMTBk
MTI5OWZhNjA5NzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaApAQCAtMTM5LDEwICsxMzksMTAgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5n
SW1wbDo6ZGF0YU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3Ms
IFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2xlbmd0
aCwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpIFwKLSAgICBtYWNybyhTdHJ1Y3R1
cmVfY2xhc3NJbmZvLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCisgICAgbWFjcm8o
U3RydWN0dXJlX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8sIFN0cnVjdHVyZTo6b2Zmc2V0
T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVf
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSBcCiAgICAgbWFj
cm8oU3RydWN0dXJlX2luZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnksIFN0cnVjdHVyZTo6aW5k
ZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpKSBcCi0gICAgbWFjcm8oU3RydWN0dXJl
X2lubGluZUNhcGFjaXR5LCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpIFwKKyAg
ICBtYWNybyhTdHJ1Y3R1cmVfaW5saW5lQ2FwYWNpdHksIFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxp
bmVDYXBhY2l0eSgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3ByZXZpb3VzT3JSYXJlRGF0YSwg
U3RydWN0dXJlOjpwcmV2aW91c09yUmFyZURhdGFPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVj
dHVyZV9wcm90b3R5cGUsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpIFwKICAgICBtYWNy
byhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSkg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4
IDRkMzQyN2JjODJlOGM5YjI0N2FjODcxYTAyMDAwMWJiMjM4MjlmMjYuLjc2M2Y4NDczMGU4MGY1
MjFiMjk1YTE2ZmJjZWM4NmU0ZDU2YjliOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTY2NzUsNyArNjY3NSw4IEBAIGNsYXNzIExvd2Vy
REZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChzdHJ1Y3R1cmUp
LCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOwogCiAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGhhc1N0cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmplY3RDYXNlKTsKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hl
YXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5jb25zdEludFB0cihtX25vZGUtPmlzSW50
ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjpp
bmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nhc2Up
KTsKKyAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmJpdEFuZChtX291dC5sb2FkUHRy
KHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5m
byksIG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFzaykpOworICAgICAg
ICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0ciht
X25vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpIDog
SlNQcm9taXNlOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJl
bHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0dsb2JhbE9iamVj
dENhc2UsIGZhc3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGRlcml2
ZWRTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3Ioc3RydWN0dXJlKTsKQEAgLTY3MzAsNyArNjczMSw4
IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1pl
cm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkp
OwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmpl
Y3RDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIo
c3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5jb25zdEludFB0
cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJl
bHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmJpdEFuZCht
X291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfdHJhbnNpdGlvbk9mZnNl
dEFuZENsYXNzSW5mbyksIG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFz
aykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5j
b25zdEludFB0cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENh
c2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0ds
b2JhbE9iamVjdENhc2UsIGZhc3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAgICAgIG1fb3V0LmJyYW5j
aChtX291dC5lcXVhbChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVf
Z2xvYmFsT2JqZWN0KSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSksIHVzdWFsbHkoZmFzdEFs
bG9jYXRpb25DYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CkBAIC0xMzIwOCw3ICsxMzIxMCw3IEBA
IGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOwogCiAgICAgICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0g
bG9hZFN0cnVjdHVyZShjZWxsKTsKLSAgICAgICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291
dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKTsKKyAgICAg
ICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5iaXRBbmQobV9vdXQubG9hZFB0cihzdHJ1
Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8pLCBt
X291dC5jb25zdEludFB0cihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKTsKICAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIG90aGVyQXRTdGFydCA9IG1fb3V0LmFuY2hvcihjbGFzc0luZm8pOwog
ICAgICAgICAgICAgbV9vdXQuanVtcChsb29wKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKaW5kZXggN2YzNThjMTIwM2JkZWFlOTBkNDRhMmM3ZmI4ODk5NzgwODlj
YTg1Zi4uZmRlMDBiY2M4YzkwNDU5Yzc1MzQ1MDYyYTYxMWRjMWRlNDI5Y2ZlZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC05NzksNyArOTc5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgYXV0byBidXR0ZXJmbHkgPSBU
cnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJl
ZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywg
YnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGxvYWQ4KEFkZHJlc3Moc3Ry
dWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVn
KTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjpvZmZzZXRPZklu
bGluZUNhcGFjaXR5KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0
b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGNkNjY3YjJlNTg3
ODIwZTM3MzVjZDM4MTM5MzZmOTZhOThjNzk2NmEuLmIxMWY2NTVmY2I2ZjY2MDU1Mjc5OWMxMmEx
MGNjYmY5MTkwZTg2MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKQEAgLTEwOTMsNyArMTA5Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRy
KTsKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFy
aWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJl
Zywgc2xvd0Nhc2VzKTsKLSAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJl
OjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgbG9hZDgoQWRkcmVz
cyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2Ny
YXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2Ny
YXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICBlbWl0U3RvcmVDZWxs
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKaW5kZXggOTZhMzYzNWU2ODI3MzkzZWU4MzZk
ODA0Nzc3MjRhMjVkNTQ2YzI2MS4uMjQ5YmE1YWFjNTFlNTA5MGNmMjNmN2Y5ZThlOWU0N2JjMjFl
ZjQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJn
dW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1
bWVudHMuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgU3RydWN0dXJlKiBDbG9uZWRBcmd1bWVudHM6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2xvbmVkQXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCksIGluZGV4aW5nVHlwZSk7CiAgICAgc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKAogICAgICAgICB2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwKLSAgICAg
ICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAgICAgICBbJl0gKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFBy
b3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
b2Zmc2V0ID09IGNsb25lZEFyZ3VtZW50c0xlbmd0aFByb3BlcnR5T2Zmc2V0KTsKICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+c2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQpOwogICAgICAgICB9
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRK
U0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2su
aAppbmRleCBhYTI3M2JhZGJlZmE3MzdhMGVhYTUzNGZiZWJhOWY1MDFmZGI4NjI3Li45NWViYTBi
ZjNmOWEyMDA1YjY0NTJlYWRmN2NlMGE0MjVjYTU2YTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SlNMb2NrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpTTG9jay5oCkBAIC0zMywxOCArMzMsMTggQEAK
IG5hbWVzcGFjZSBKU0MgewogCiB1c2luZyBDb25jdXJyZW50SlNMb2NrID0gTG9jazsKLXVzaW5n
IENvbmN1cnJlbnRKU0xvY2tlckltcGwgPSBMb2NrSG9sZGVyOwogCiBzdGF0aWNfYXNzZXJ0KHNp
emVvZihDb25jdXJyZW50SlNMb2NrKSA9PSAxLCAiUmVnYXJkbGVzcyBvZiBzdGF0dXMgb2YgY29u
Y3VycmVudCBKUyBmbGFnLCBzaXplIG9mIENvbnVycmVudEpTTG9jayBpcyBhbHdheXMgb25lIGJ5
dGUuIik7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2s+CiBjbGFzcyBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlIDogcHVibGljIEFic3RyYWN0TG9ja2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDb25jdXJyZW50SlNMb2NrZXJCYXNlKTsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDb25jdXJy
ZW50SlNMb2NrZXJCYXNlKENvbmN1cnJlbnRKU0xvY2smIGxvY2thYmxlKQorICAgIGV4cGxpY2l0
IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoTG9jayYgbG9ja2FibGUpCiAgICAgICAgIDogbV9sb2Nr
ZXIoJmxvY2thYmxlKQogICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9j
a2VyQmFzZShDb25jdXJyZW50SlNMb2NrKiBsb2NrYWJsZSkKKyAgICBleHBsaWNpdCBDb25jdXJy
ZW50SlNMb2NrZXJCYXNlKExvY2sqIGxvY2thYmxlKQogICAgICAgICA6IG1fbG9ja2VyKGxvY2th
YmxlKQogICAgIHsKICAgICB9CkBAIC02NCw2MyArNjQsNjUgQEAgY2xhc3MgQ29uY3VycmVudEpT
TG9ja2VyQmFzZSA6IHB1YmxpYyBBYnN0cmFjdExvY2tlciB7CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIENvbmN1cnJlbnRKU0xvY2tlckltcGwgbV9sb2NrZXI7CisgICAgTG9ja2VyPExvY2s+IG1f
bG9ja2VyOwogfTsKIAotY2xhc3MgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIDogcHVibGljIENv
bmN1cnJlbnRKU0xvY2tlckJhc2UgewordGVtcGxhdGU8dHlwZW5hbWUgTG9jaz4KK2NsYXNzIEdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwgOiBwdWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFz
ZTxMb2NrPiB7CiBwdWJsaWM6Ci0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKENvbmN1cnJl
bnRKU0xvY2smIGxvY2thYmxlLCBIZWFwJiBoZWFwKQotICAgICAgICA6IENvbmN1cnJlbnRKU0xv
Y2tlckJhc2UobG9ja2FibGUpCisgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbChMb2Nr
JiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNl
PExvY2s+KGxvY2thYmxlKQogICAgICAgICAsIG1fZGVmZXJHQyhoZWFwKQogICAgIHsKICAgICB9
CiAKLSAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIoQ29uY3VycmVudEpTTG9jayogbG9ja2Fi
bGUsIEhlYXAmIGhlYXApCi0gICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJs
ZSkKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsKExvY2sqIGxvY2thYmxlLCBIZWFw
JiBoZWFwKQorICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4obG9ja2FibGUp
CiAgICAgICAgICwgbV9kZWZlckdDKGhlYXApCiAgICAgewogICAgIH0KIAotICAgIH5HQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXIoKQorICAgIH5HQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsKCkK
ICAgICB7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gdW5sb2NrIGVhcmx5IGR1ZSB0byB0aGUgZGVz
dHJ1Y3Rpb24gb3JkZXIgb2YgYmFzZQogICAgICAgICAvLyB2cy4gZGVyaXZlZCBjbGFzc2VzLiBJ
ZiB3ZSBkaWRuJ3QsIHRoZW4gd2Ugd291bGQgZGVzdHJveSB0aGUgCiAgICAgICAgIC8vIERlZmVy
R0Mgb2JqZWN0IGJlZm9yZSB1bmxvY2tpbmcgdGhlIGxvY2sgd2hpY2ggY291bGQgY2F1c2UgYSBH
QwogICAgICAgICAvLyBhbmQgcmVzdWx0aW5nIGRlYWRsb2NrLgotICAgICAgICB1bmxvY2tFYXJs
eSgpOworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+Ojp1bmxvY2tFYXJseSgp
OwogICAgIH0KIAogcHJpdmF0ZToKICAgICBEZWZlckdDIG1fZGVmZXJHQzsKIH07CiAKLWNsYXNz
IENvbmN1cnJlbnRKU0xvY2tlciA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIHsKK3Rl
bXBsYXRlPHR5cGVuYW1lIExvY2s+CitjbGFzcyBDb25jdXJyZW50SlNMb2NrZXJJbXBsIDogcHVi
bGljIENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4gewogcHVibGljOgotICAgIENvbmN1cnJl
bnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrJiBsb2NrYWJsZSkKLSAgICAgICAgOiBDb25jdXJy
ZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAgIENvbmN1cnJlbnRKU0xvY2tlckltcGwoTG9j
ayYgbG9ja2FibGUpCisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPihsb2Nr
YWJsZSkKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgICAgICwgbV9kaXNhbGxvd0dDKHN0ZDo6
aW5fcGxhY2UpCiAjZW5kaWYKICAgICB7CiAgICAgfQogCi0gICAgQ29uY3VycmVudEpTTG9ja2Vy
KENvbmN1cnJlbnRKU0xvY2sqIGxvY2thYmxlKQotICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tl
ckJhc2UobG9ja2FibGUpCisgICAgQ29uY3VycmVudEpTTG9ja2VySW1wbChMb2NrKiBsb2NrYWJs
ZSkKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+KGxvY2thYmxlKQogI2lm
ICFkZWZpbmVkKE5ERUJVRykKICAgICAgICAgLCBtX2Rpc2FsbG93R0Moc3RkOjppbl9wbGFjZSkK
ICNlbmRpZgogICAgIHsKICAgICB9CiAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIoTm9Mb2NraW5n
TmVjZXNzYXJ5VGFnKQotICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoTm9Mb2NraW5n
TmVjZXNzYXJ5KQorICAgIENvbmN1cnJlbnRKU0xvY2tlckltcGwoTm9Mb2NraW5nTmVjZXNzYXJ5
VGFnKQorICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4oTm9Mb2NraW5nTmVj
ZXNzYXJ5KQogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICAgICAgLCBtX2Rpc2FsbG93R0MoV1RG
OjpudWxsb3B0KQogI2VuZGlmCiAgICAgewogICAgIH0KICAgICAKLSAgICBDb25jdXJyZW50SlNM
b2NrZXIoaW50KSA9IGRlbGV0ZTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXJJbXBsKGludCkgPSBk
ZWxldGU7CiAKICNpZiAhZGVmaW5lZChOREVCVUcpCiBwcml2YXRlOgpAQCAtMTI4LDQgKzEzMCw3
IEBAIGNsYXNzIENvbmN1cnJlbnRKU0xvY2tlciA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJC
YXNlIHsKICNlbmRpZgogfTsKIAordXNpbmcgQ29uY3VycmVudEpTTG9ja2VyID0gQ29uY3VycmVu
dEpTTG9ja2VySW1wbDxDb25jdXJyZW50SlNMb2NrPjsKK3VzaW5nIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciA9IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGw8Q29uY3VycmVudEpTTG9jaz47
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAppbmRleCA2NjVkMDg4OWNmNDQ2MWMzYWIwYTJhZjRiMDdjNmE1OGM5MDQyMWM0Li5kNTY1NmY4
YmZkZmY2MzI5OTJhYzFkYTQ1MWUzNWMxYTU0OGQ0NjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQ2FsbERhdGEu
aCIKICNpbmNsdWRlICJDZWxsU3RhdGUuaCIKKyNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgi
CiAjaW5jbHVkZSAiQ29uc3RydWN0RGF0YS5oIgogI2luY2x1ZGUgIkVudW1lcmF0aW9uTW9kZS5o
IgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTI4OCw2ICsyODksOSBAQCBjbGFzcyBKU0NlbGxMb2Nr
IDogcHVibGljIEpTQ2VsbCB7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93
KCk7CiB9OwogCit1c2luZyBDb25jdXJyZW50SlNDZWxsTG9ja2VyID0gQ29uY3VycmVudEpTTG9j
a2VySW1wbDxKU0NlbGxMb2NrPjsKK3VzaW5nIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIg
PSBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsPEpTQ2VsbExvY2s+OworCiAvLyBGSVhNRTog
UmVmZXIgdG8gU3Vic3BhY2UgYnkgcmVmZXJlbmNlLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Njk4OAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAppbmRleCBhY2QyOWRlZDgxMzUx
ZmIyODRiMjE1OWFkNDdhNjMxYzM0OTRmMWRmLi4zYTUxMjFkNjlkZmI0ZmIyZmI5Zjg4NWNhN2Zm
M2ZlNTVjMDRkZDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCkBAIC0yMDA1LDcgKzIwMDUsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShK
U0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcgogCiAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQ7CiAgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5
TmFtZSwgW10gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0
LCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKKyAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+
cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBbXShjb25z
dCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5
T2Zmc2V0KSB7IH0pOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHN0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgb2Zmc2V0LCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7CiAgICAgICAgICAgICBpZiAo
dGhpc09iamVjdC0+bV9idXR0ZXJmbHkgJiYgIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAmJiAhc3RydWN0dXJlLT5oYXNJbmRleGluZ0hlYWRlcih0aGlzT2JqZWN0KSkgewpAQCAtMzc2
Niw3ICszNzY2LDcgQEAgdm9pZCBKU09iamVjdDo6Y29udmVydFRvRGljdGlvbmFyeShWTSYgdm0p
CiAgICAgICAgIHZtLCBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKSk7CiB9CiAKLXZvaWQg
SlNPYmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciYsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRP
ZkxpbmVDYXBhY2l0eUFmdGVyKQordm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZs
YXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKQogewogICAg
IC8vIFRoaXMgY291bGQgaW50ZXJsZWF2ZSB2aXNpdENoaWxkcmVuIGJlY2F1c2Ugc29tZSBvbGQg
c3RydWN0dXJlIGNvdWxkIGhhdmUgYmVlbiBhIG5vbgogICAgIC8vIGRpY3Rpb25hcnkgc3RydWN0
dXJlLiBXZSBoYXZlIHRvIGJlIGNyYXp5IGNhcmVmdWwuIEJ1dCwgd2UgYXJlIGd1YXJhbnRlZWQg
dG8gYmUgaG9sZGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKaW5k
ZXggZWM2MzAwZWE5Yjk3MmNlOWJhMGZhZDgxODI1N2FmYjIwZDgyYTJlZC4uNjUxMTYwYmUwYjAx
Nzg3MGNlOTA5NmJmOTJhNTVkY2YwZTZjZGJiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCkBAIC04MTUsNyArODE1LDcgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJs
aWMgSlNDZWxsIHsKICAgICB7CiAgICAgICAgIHN0cnVjdHVyZSh2bSktPmZsYXR0ZW5EaWN0aW9u
YXJ5U3RydWN0dXJlKHZtLCB0aGlzKTsKICAgICB9Ci0gICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFm
dGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9p
ZCBzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlND
ZWxsTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1cmUqLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRl
cik7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QKICAgICB7CkBA
IC0xMzI5LDcgKzEzMjksNyBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0UHJvdG90eXBl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIC8vIGZsYXR0ZW4gYW4gb2Jq
ZWN0LgogaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldERpcmVjdENvbmN1cnJlbnRseShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogewotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5sb2NrKCkpOworICAgIENvbmN1cnJl
bnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+Y2VsbExvY2soKSk7CiAgICAgaWYgKCFz
dHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICByZXR1cm4gZ2V0RGlyZWN0KG9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCmluZGV4IGE2NzAwMzQ3ZjY5NzZlNjFiMDVkYjE4ZjJi
MDk2YWFhNzllMmViYjMuLjk1YTY3MTBjMmUzNTY4NDM2ZDVjY2EyOGM4NmIyZGM5NGQ4YTg4MDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
CkBAIC0yMTYsNyArMjE2LDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBKU09iamVj
dDo6cHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mIHYKICAgICBQcm9wZXJ0
eU9mZnNldCByZXN1bHQ7CiAgICAgc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0
aW9uKAogICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLAotICAgICAgICBbJl0g
KGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
UHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIFsmXSAoY29uc3QgR0NTYWZl
Q29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlP
ZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBuZXdPdXRPZkxpbmVD
YXBhY2l0eSA9IFN0cnVjdHVyZTo6b3V0T2ZMaW5lQ2FwYWNpdHkobmV3TWF4T2Zmc2V0KTsKICAg
ICAgICAgICAgIGlmIChuZXdPdXRPZkxpbmVDYXBhY2l0eSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0
eSkgewogICAgICAgICAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gYWxsb2NhdGVNb3Jl
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNpdHksIG5ld091dE9mTGluZUNh
cGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCmlu
ZGV4IGVkYTQ0NmJmYmUyNjdhYjAxYjg1MmUxNWZkZTljOWMzMGU2ZjU4ZTYuLjNiNmVmZDNhYzBl
YTE5YjFlYjAwMjhmNmY1YjM4OWFjODBkZmJjMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcApAQCAtNTgsNyArNTgsNyBAQCBjbGFzcyBTaW5nbGVTbG90
VHJhbnNpdGlvbldlYWtPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAg
ICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUqIHRhYmxlID0gcmVpbnRlcnByZXRfY2FzdDxT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUqPihjb250ZXh0KTsKICAgICAgICAgQVNTRVJUKHRhYmxl
LT5pc1VzaW5nU2luZ2xlU2xvdCgpKTsKICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZSh0YWJs
ZS0+d2Vha0ltcGwoKSk7Ci0gICAgICAgIHRhYmxlLT5tX2RhdGEgPSBTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGU6OlVzaW5nU2luZ2xlU2xvdEZsYWc7CisgICAgICAgIHRhYmxlLT5tX2RhdGEgPSBi
aXR3aXNlX2Nhc3Q8dWludDhfdCo+KFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6VXNpbmdTaW5n
bGVTbG90RmxhZyk7CiAgICAgfQogfTsKIApAQCAtODQsNyArODQsNyBAQCBpbmxpbmUgdm9pZCBT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OnNldFNpbmdsZVRyYW5zaXRpb24oU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiAgICAgaWYgKFdlYWtJbXBsKiBpbXBsID0gdGhpcy0+d2Vha0ltcGwoKSkKICAg
ICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShpbXBsKTsKICAgICBXZWFrSW1wbCogaW1wbCA9IFdl
YWtTZXQ6OmFsbG9jYXRlKHN0cnVjdHVyZSwgJnNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093bmVy
KCksIHRoaXMpOwotICAgIG1fZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oaW1wbCkgfCBV
c2luZ1NpbmdsZVNsb3RGbGFnOworICAgIG1fZGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4o
Yml0d2lzZV9jYXN0PGludHB0cl90PihpbXBsKSB8IFVzaW5nU2luZ2xlU2xvdEZsYWcpOwogfQog
CiBib29sIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFpbnMoVW5pcXVlZFN0cmluZ0lt
cGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uKSBjb25zdApAQCAt
MTUxLDcgKzE1MSw3IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSog
dGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVPck51bGwoKSkgeworICAgICAgICBpZiAo
UHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVVbnNhZmVPck51
bGwoKSkgewogICAgICAgICAgICAgKytudW1iZXJXaXRoUHJvcGVydHlNYXBzOwogICAgICAgICAg
ICAgdG90YWxQcm9wZXJ0eU1hcHNTaXplICs9IHRhYmxlLT5zaXplSW5NZW1vcnkoKTsKICAgICAg
ICAgfQpAQCAtMTc0LDE1ICsxNzQsMTIgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNz
KCkKIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVk
IGlubGluZUNhcGFjaXR5KQogICAgIDogSlNDZWxsKHZtLCB2bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUu
Z2V0KCkpCiAgICAgLCBtX2Jsb2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJ
RCh0aGlzKSwgaW5kZXhpbmdUeXBlLCB0eXBlSW5mbykKLSAgICAsIG1fb3V0T2ZMaW5lVHlwZUZs
YWdzKHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpKQotICAgICwgbV9pbmxpbmVDYXBhY2l0
eShpbmxpbmVDYXBhY2l0eSkKLSAgICAsIG1fYml0RmllbGQoMCkKICAgICAsIG1fZ2xvYmFsT2Jq
ZWN0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46
Ok1heUJlTnVsbCkKICAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBwcm90b3R5cGUpCi0gICAg
LCBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0
KElzV2F0Y2hlZCkKLSAgICAsIG1fcHJvcGVydHlIYXNoKDApCisgICAgLCBtX3Byb3BlcnR5SGFz
aEFuZElubGluZUNhcGFjaXR5KGlubGluZUNhcGFjaXR5KQogeworICAgIHNldENsYXNzSW5mbyhj
bGFzc0luZm8pOwogICAgIHNldERpY3Rpb25hcnlLaW5kKE5vbmVEaWN0aW9uYXJ5S2luZCk7CiAg
ICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKGZhbHNlKTsKICAgICBzZXRIYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzKGNsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRp
ZXMoKSk7CkBAIC0yMDAsMzEgKzE5NywzMCBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjbwogICAg
IHNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRyYW5zaXRp
b25PZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxp
ZE9mZnNldCk7Ci0gCisgICAgc2V0T3V0T2ZMaW5lVHlwZUZsYWdzKHR5cGVJbmZvLm91dE9mTGlu
ZVR5cGVGbGFncygpKTsKKwogICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2Jq
ZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8UHJvcGVy
dHlPZmZzZXQ+KGlubGluZUNhcGFjaXR5KSA8IGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KTsKICAgICBB
U1NFUlQoIWhhc1JhcmVEYXRhKCkpOwotICAgIEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNT
ZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllcygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVBy
b3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENh
bGxEYXRhKCkgfHwgbV9jbGFzc0luZm8tPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0Nl
bGw6OmdldENhbGxEYXRhKTsKKyAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclBy
b3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8ICF0aGlzLT5jbGFzc0luZm8oKS0+aGFzU3RhdGlj
U2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKGhhc0dldHRlclNldHRl
clByb3BlcnRpZXMoKSB8fCAhdGhpcy0+Y2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVh
ZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlk
ZXNHZXRDYWxsRGF0YSgpIHx8IHRoaXMtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRDYWxs
RGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CiB9CiAKIGNvbnN0IENsYXNzSW5mbyBTdHJ1
Y3R1cmU6OnNfaW5mbyA9IHsgIlN0cnVjdHVyZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoU3RydWN0dXJlKSB9OwogCiBTdHJ1Y3R1cmU6OlN0cnVjdHVy
ZShWTSYgdm0pCiAgICAgOiBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGwpCi0gICAgLCBtX2lubGlu
ZUNhcGFjaXR5KDApCi0gICAgLCBtX2JpdEZpZWxkKDApCiAgICAgLCBtX3Byb3RvdHlwZSh2bSwg
dGhpcywganNOdWxsKCkpCi0gICAgLCBtX2NsYXNzSW5mbyhpbmZvKCkpCiAgICAgLCBtX3RyYW5z
aXRpb25XYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKLSAgICAsIG1fcHJvcGVydHlIYXNoKDApCisg
ICAgLCBtX3Byb3BlcnR5SGFzaEFuZElubGluZUNhcGFjaXR5KDApCiB7CisgICAgc2V0Q2xhc3NJ
bmZvKGluZm8oKSk7CiAgICAgc2V0RGljdGlvbmFyeUtpbmQoTm9uZURpY3Rpb25hcnlLaW5kKTsK
ICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUoZmFsc2UpOwotICAgIHNldEhhc0dldHRlclNl
dHRlclByb3BlcnRpZXMobV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9w
ZXJ0aWVzKCkpOworICAgIHNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXMoY2xhc3NJbmZvKCkt
Pmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwogICAgIHNldEhhc0N1c3Rv
bUdldHRlclNldHRlclByb3BlcnRpZXMoZmFsc2UpOwotICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8obV9jbGFzc0luZm8tPmhhc1N0YXRpY1Nl
dHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oY2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRl
ck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwogICAgIHNldEhhc1VuZGVyc2NvcmVQcm90b1Byb3Bl
cnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90byhmYWxzZSk7CiAgICAgc2V0SXNRdWlja1Byb3BlcnR5
QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKHRydWUpOwogICAgIHNldFRyYW5zaXRpb25Qcm9w
ZXJ0eUF0dHJpYnV0ZXMoMCk7CkBAIC0yNDAsMjMgKzIzNiwyMSBAQCBTdHJ1Y3R1cmU6OlN0cnVj
dHVyZShWTSYgdm0pCiAgCiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBUeXBlSW5mbyhDZWxsVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpOwogICAgIG1fYmxvYiA9IFN0cnVjdHVyZUlEQmxvYih2bS5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCAwLCB0eXBlSW5mbyk7Ci0gICAg
bV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxhZ3MoKTsKKyAg
ICBzZXRPdXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpOwog
Ci0gICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5n
UHJvdG8oKSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0
aWVzKCkpOwotICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwgIW1fY2xh
c3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NF
UlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBtX2NsYXNzSW5m
by0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEpOworICAg
IEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3Rv
KCkgfHwgIWNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygp
KTsKKyAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFjbGFzc0luZm8o
KS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKCF0
aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgY2xhc3NJbmZvKCktPm1l
dGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKIH0KIAogU3Ry
dWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCiAgICAgOiBKU0NlbGwo
dm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1faW5saW5lQ2FwYWNpdHko
cHJldmlvdXMtPm1faW5saW5lQ2FwYWNpdHkpCi0gICAgLCBtX2JpdEZpZWxkKDApCiAgICAgLCBt
X3Byb3RvdHlwZSh2bSwgdGhpcywgcHJldmlvdXMtPm1fcHJvdG90eXBlLmdldCgpKQotICAgICwg
bV9jbGFzc0luZm8ocHJldmlvdXMtPm1fY2xhc3NJbmZvKQogICAgICwgbV90cmFuc2l0aW9uV2F0
Y2hwb2ludFNldChJc1dhdGNoZWQpCi0gICAgLCBtX3Byb3BlcnR5SGFzaChwcmV2aW91cy0+bV9w
cm9wZXJ0eUhhc2gpCisgICAgLCBtX3Byb3BlcnR5SGFzaEFuZElubGluZUNhcGFjaXR5KHByZXZp
b3VzLT5tX3Byb3BlcnR5SGFzaEFuZElubGluZUNhcGFjaXR5KQogICAgICwgbV9zZWVuUHJvcGVy
dGllcyhwcmV2aW91cy0+bV9zZWVuUHJvcGVydGllcykKIHsKKyAgICBzZXRDbGFzc0luZm8ocHJl
dmlvdXMtPmNsYXNzSW5mbygpKTsKICAgICBzZXREaWN0aW9uYXJ5S2luZChwcmV2aW91cy0+ZGlj
dGlvbmFyeUtpbmQoKSk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKGZhbHNlKTsKICAg
ICBzZXRIYXNCZWVuRmxhdHRlbmVkQmVmb3JlKHByZXZpb3VzLT5oYXNCZWVuRmxhdHRlbmVkQmVm
b3JlKCkpOwpAQCAtMjc3LDcgKzI3MSw3IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwg
U3RydWN0dXJlKiBwcmV2aW91cywgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0CiAgCiAg
ICAgVHlwZUluZm8gdHlwZUluZm8gPSBwcmV2aW91cy0+dHlwZUluZm8oKTsKICAgICBtX2Jsb2Ig
PSBTdHJ1Y3R1cmVJREJsb2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJRCh0
aGlzKSwgcHJldmlvdXMtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHlwZUluZm8p
OwotICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzID0gdHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdz
KCk7CisgICAgc2V0T3V0T2ZMaW5lVHlwZUZsYWdzKHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFn
cygpKTsKIAogICAgIEFTU0VSVCghcHJldmlvdXMtPnR5cGVJbmZvKCkuc3RydWN0dXJlSXNJbW1v
cnRhbCgpKTsKICAgICBzZXRQcmV2aW91c0lEKHZtLCBwcmV2aW91cyk7CkBAIC0yODksOSArMjgz
LDkgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBE
ZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQKIAogICAgIGlmIChwcmV2aW91cy0+bV9nbG9i
YWxPYmplY3QpCiAgICAgICAgIG1fZ2xvYmFsT2JqZWN0LnNldCh2bSwgdGhpcywgcHJldmlvdXMt
Pm1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKLSAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNl
dHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGlj
U2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKGhhc0dldHRlclNldHRl
clByb3BlcnRpZXMoKSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQ
cm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRD
YWxsRGF0YSgpIHx8IG1fY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlND
ZWxsOjpnZXRDYWxsRGF0YSk7CisgICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAhY2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRl
ck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzKCkgfHwgIWNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVy
dGllcygpKTsKKyAgICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERh
dGEoKSB8fCBjbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6
Z2V0Q2FsbERhdGEpOwogfQogCiBTdHJ1Y3R1cmU6On5TdHJ1Y3R1cmUoKQpAQCAtMzEzLDcgKzMw
Nyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoUG9seVByb3RvVGFnLCBWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgdW5zaWduZWQgb2xkT3V0T2ZMaW5l
Q2FwYWNpdHkgPSByZXN1bHQtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgcmVzdWx0LT5hZGRQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAogICAgICAgICB2bSwgdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkucG9seVByb3RvTmFtZSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwKLSAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5l
d01heE9mZnNldCkgeworICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxM
b2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNl
dCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU3RydWN0dXJlOjpvdXRPZkxpbmVDYXBh
Y2l0eShuZXdNYXhPZmZzZXQpID09IG9sZE91dE9mTGluZUNhcGFjaXR5KTsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG9mZnNldCA9PSBrbm93blBvbHlQcm90b09mZnNldCk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpc0lubGluZU9mZnNldChrbm93blBvbHlQcm90b09mZnNldCkp
OwpAQCAtMzM1LDkgKzMyOSw5IEBAIHZvaWQgU3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1h
cEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3RydWN0dXJlKiwgOD4mIHN0CiAgICAgdGFibGUg
PSAwOwogCiAgICAgZm9yIChzdHJ1Y3R1cmUgPSB0aGlzOyBzdHJ1Y3R1cmU7IHN0cnVjdHVyZSA9
IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLmxv
Y2soKTsKKyAgICAgICAgc3RydWN0dXJlLT5jZWxsTG9jaygpLmxvY2soKTsKICAgICAgICAgCi0g
ICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAg
IHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCk7CiAgICAgICAg
IGlmICh0YWJsZSkgewogICAgICAgICAgICAgLy8gTGVhdmUgdGhlIHN0cnVjdHVyZSBsb2NrZWQs
IHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gZG8gdGhpbmdzIHRvIGl0IGF0b21pY2FsbHkKICAgICAg
ICAgICAgIC8vIGJlZm9yZSBpdCBsb3NlcyBpdHMgcHJvcGVydHkgdGFibGUuCkBAIC0zNDUsNyAr
MzM5LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxp
emF0aW9uKFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiYgc3QKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgc3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKLSAgICAgICAgc3RydWN0dXJlLT5t
X2xvY2sudW5sb2NrKCk7CisgICAgICAgIHN0cnVjdHVyZS0+Y2VsbExvY2soKS51bmxvY2soKTsK
ICAgICB9CiAgICAgCiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUpOwpAQCAtMzY1LDE3ICszNTksMTcg
QEAgUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0m
IHZtLCBib29sIHNldFByb3BlcnR5VGFibGUKICAgICAKICAgICBmaW5kU3RydWN0dXJlc0FuZE1h
cEZvck1hdGVyaWFsaXphdGlvbihzdHJ1Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAK
LSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zm
c2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOworICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gbnVtYmVy
T2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAg
aWYgKHRhYmxlKSB7CiAgICAgICAgIHRhYmxlID0gdGFibGUtPmNvcHkodm0sIGNhcGFjaXR5KTsK
LSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgIHN0cnVjdHVyZS0+
Y2VsbExvY2soKS51bmxvY2soKTsKICAgICB9IGVsc2UKICAgICAgICAgdGFibGUgPSBQcm9wZXJ0
eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KTsKICAgICAKICAgICAvLyBNdXN0IGhvbGQgdGhl
IGxvY2sgb24gdGhpcyBzdHJ1Y3R1cmUsIHNpbmNlIHdlIHdpbGwgYmUgbW9kaWZ5aW5nIHRoaXMg
c3RydWN0dXJlJ3MKICAgICAvLyBwcm9wZXJ0eSBtYXAuIFdlIGRvbid0IHdhbnQgZ2V0Q29uY3Vy
cmVudGx5KCkgdG8gc2VlIHRoZSBwcm9wZXJ0eSBtYXAgaW4gYSBoYWxmLWJha2VkCiAgICAgLy8g
c3RhdGUuCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhl
YXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCks
IHZtLmhlYXApOwogICAgIGlmIChzZXRQcm9wZXJ0eVRhYmxlKQogICAgICAgICB0aGlzLT5zZXRQ
cm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAKQEAgLTQzNiw3ICs0MzAsNyBAQCBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1
Y3R1cmUqIHN0cnVjdAogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZz
ZXQmIG9mZnNldCkKIHsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+
bV9sb2NrKTsKKyAgICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNl
bGxMb2NrKCkpOwogICAgIHJldHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHVpZCwgYXR0cmlidXRlcywgb2Zmc2V0KTsKIH0KIApAQCAt
NDk3LDggKzQ5MSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5z
aXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvCiAgICAgfQogICAgIAogICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7
Ci0KLSAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldE1heUJlTnVsbCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpKTsK
KyAgICB0cmFuc2l0aW9uLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5j
YWNoZWRQcm90b3R5cGVDaGFpbigpKTsKICAgICAKICAgICAvLyBXaGlsZSB3ZSBhcmUgYWRkaW5n
IHRoZSBwcm9wZXJ0eSwgcmVtYXRlcmlhbGl6aW5nIHRoZSBwcm9wZXJ0eSB0YWJsZSBpcyBzdXBl
ciB3ZWlyZDogd2UgYWxyZWFkeQogICAgIC8vIGhhdmUgYSBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUgYW5kIHRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMgYnV0IHRoZSBtX3RyYW5zaXRpb25P
ZmZzZXQgaXMgc3RpbGwgd3JvbmcuIElmIHRoZQpAQCAtNTEwLDcgKzUwMyw3IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvCiAgICAgLy8gY2FzZSBhbGwgaXMgd2VsbC4gIElmIGl0IHdhc24ndCBm
b3IgdGhlIGxvY2ssIHRoZSBHQyB3b3VsZCBoYXZlIFRPQ1RPVTogaWYgY291bGQgcmVhZAogICAg
IC8vIHByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nIGJlZm9yZSB3ZSBzZXQg
aXQgdG8gdHJ1ZSwgYW5kIHRoZW4gYmxvdyB0aGUgdGFibGUgYXdheSBhZnRlci4KICAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAg
ICAgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2so
KSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFu
c2l0aW9uaW5nKHRydWUpOwogICAgIH0KIApAQCAtNTMwLDcgKzUyMyw3IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUHJvCiAKICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zm
c2V0KCksIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIHsKLSAgICAgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7
CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+
Y2VsbExvY2soKSwgdm0uaGVhcCk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFi
bGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB9CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSgpOwpAQCAtNTg3LDExICs1ODAsMTEgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLAogICAgIH0KIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3Ry
dWN0dXJlLCBkZWZlcnJlZCk7Ci0gICAgdHJhbnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFp
bi5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5
cGVDaGFpbi5nZXQoKSk7CisgICAgdHJhbnNpdGlvbi0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4o
dm0sIHN0cnVjdHVyZS0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKSk7CiAKICAgICAvLyBXaGlsZSB3
ZSBhcmUgZGVsZXRpbmcgdGhlIHByb3BlcnR5LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdGFi
bGUgaXMgbm90IGNsZWFyZWQuCiAgICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKHRyYW5zaXRpb24tPm1fbG9jayk7CisgICAgICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIg
bG9ja2VyKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpOwogICAgICAgICB0cmFuc2l0aW9uLT5zZXRQ
cm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyh0cnVlKTsKICAgICB9CiAKQEAg
LTYxMiw3ICs2MDUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlU
cmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAKICAgICBjaGVja09mZnNl
dCh0cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIHRyYW5zaXRpb24tPmlubGluZUNhcGFj
aXR5KCkpOwogICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihz
dHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0Nl
bGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+Y2VsbExvY2soKSwgdm0uaGVhcCk7CiAgICAgICAg
IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB9
CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwpAQCAtNjMwLDcgKzYy
Myw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTCiAgICAgdHJhbnNpdGlvbi0+bV9wcm90b3R5
cGUuc2V0KHZtLCB0cmFuc2l0aW9uLCBwcm90b3R5cGUpOwogCiAgICAgUHJvcGVydHlUYWJsZSog
dGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSk7Ci0gICAg
dHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayksIHZtLCB0YWJsZSk7
CisgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2
bSwgdGFibGUpOwogICAgIHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5t
YXhPZmZzZXQoKSk7CiAgICAgCiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5j
eSgpOwpAQCAtNjQzLDcgKzYzNiw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVD
aGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByCiAgICAgICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIAogICAgICAg
ICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKHZtKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24t
Pm1fbG9jayksIHZtLCB0YWJsZSk7CisgICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0
cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0sIHRhYmxlKTsKICAgICAgICAgdHJhbnNpdGlvbi0+
c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKICAgICAgICAgCiAgICAg
ICAgIHN0cnVjdHVyZSA9IHRyYW5zaXRpb247CkBAIC02NjUsNyArNjU4LDcgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRGljdGkKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0
cnVjdHVyZSwgZGVmZXJyZWQpOwogCiAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1
cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSk7Ci0gICAgdHJhbnNpdGlvbi0+cGlu
KGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayksIHZtLCB0YWJsZSk7CisgICAgdHJhbnNpdGlv
bi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUpOwogICAg
IHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAg
ICAgdHJhbnNpdGlvbi0+c2V0RGljdGlvbmFyeUtpbmQoa2luZCk7CiAgICAgdHJhbnNpdGlvbi0+
c2V0SGFzQmVlbkRpY3Rpb25hcnkodHJ1ZSk7CkBAIC03MDIsMTEgKzY5NSwxMSBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIG11c3QgYWx3YXlzIHJl
dHVybiBhIHByb3BlcnR5IHRhYmxlLiBJdCBjYW4ndCByZXR1cm4gbnVsbC4KLSAgICBQcm9wZXJ0
eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgUHJvcGVydHlUYWJs
ZSogcmVzdWx0ID0gcHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgIGlmIChyZXN1bHQp
IHsKICAgICAgICAgaWYgKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKQogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdC0+Y29weSh2bSwgcmVzdWx0LT5zaXplKCkgKyAxKTsKLSAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNDZWxsTG9j
a2VyIGxvY2tlcihjZWxsTG9jaygpKTsKICAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgbnVs
bHB0cik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNzQzLDEwICs3MzYsMTAg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm8KICAgICAgICAgLy8gdGFibGUgZG9lc24ndCBrbm93
IGhvdyB0byB0YWtlIGludG8gYWNjb3VudCBzdWNoIHdob2xlc2FsZSBlZGl0cy4KIAogICAgICAg
ICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKHZtKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZyhob2xkTG9jayh0
cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW5G
b3JDYWNoaW5nKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUpOwog
ICAgICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0
KCkpOwogICAgICAgICAKLSAgICAgICAgdGFibGUgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxl
T3JOdWxsKCk7CisgICAgICAgIHRhYmxlID0gdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZVVuc2Fm
ZU9yTnVsbCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YWJsZSk7CiAgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiAqdGFibGUpIHsKICAgICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0ZU9u
QWxsUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkpCkBAIC03NjEsMTQgKzc1NCwxNCBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uU2xvdyhWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBObwogICAgIH0KICAgICAKICAgICBpZiAoc2V0c1JlYWRPbmx5T25O
b25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpCi0gICAgICAgICYmICF0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCktPmlzRW1wdHkoKSkKKyAgICAgICAgJiYgIXRyYW5z
aXRpb24tPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKS0+aXNFbXB0eSgpKQogICAgICAgICB0
cmFuc2l0aW9uLT5zZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGlu
Z1Byb3RvKHRydWUpOwogICAgIAogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7
CiAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gdHJhbnNpdGlvbi0+ZW5zdXJlUHJvcGVy
dHlUYWJsZSh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9u
LT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2so
dHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzdHJ1Y3R1cmUtPm1fbG9jayk7CisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2soc3RydWN0dXJlLT5jZWxsTG9jaygpKTsKICAgICAgICAgc3Ry
dWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KIApA
QCAtODIwLDE0ICs4MTMsMTQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9u
YXJ5U3RydWN0dXJlKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICBBU1NFUlQoaXNEaWN0
aW9uYXJ5KCkpOwogICAgIEFTU0VSVChvYmplY3QtPnN0cnVjdHVyZSh2bSkgPT0gdGhpcyk7CiAg
ICAgCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXAp
OworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZt
LmhlYXApOwogICAgIAogICAgIG9iamVjdC0+c2V0U3RydWN0dXJlSUREaXJlY3RseShudWtlKGlk
KCkpKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogCiAgICAgc2l6ZV90IGJlZm9yZU91
dE9mTGluZUNhcGFjaXR5ID0gdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoaXNV
bmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IHByb3BlcnR5VGFibGVPck51bGwoKTsKKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBw
cm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCk7CiAgICAgICAgIEFTU0VSVCh0YWJsZSk7CiAKICAg
ICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSB0YWJsZS0+c2l6ZSgpOwpAQCAtODQxLDE0ICs4
MzQsMTQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJl
KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICAgICAgYXV0byBvZmZzZXQgPSBpbnZhbGlk
T2Zmc2V0OwogICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJs
ZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CiAgICAgICAgICAgICB2YWx1
ZXNbaV0gPSBvYmplY3QtPmdldERpcmVjdChpdGVyLT5vZmZzZXQpOwotICAgICAgICAgICAgb2Zm
c2V0ID0gaXRlci0+b2Zmc2V0ID0gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVD
YXBhY2l0eSk7CisgICAgICAgICAgICBvZmZzZXQgPSBpdGVyLT5vZmZzZXQgPSBvZmZzZXRGb3JQ
cm9wZXJ0eU51bWJlcihpLCBpbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgfQogICAgICAgICBz
ZXRNYXhPZmZzZXQodm0sIG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9uT2Zmc2V0
KCkgPT0gaW52YWxpZE9mZnNldCk7CiAgICAgICAgIAogICAgICAgICAvLyBDb3BpZXMgaW4gb3Vy
IHZhbHVlcyB0byB0aGVpciBjb21wYWN0ZWQgbG9jYXRpb25zLgogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgaSsrKQotICAgICAgICAgICAgb2JqZWN0LT5w
dXREaXJlY3Qodm0sIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkp
LCB2YWx1ZXNbaV0pOworICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZv
clByb3BlcnR5TnVtYmVyKGksIGlubGluZUNhcGFjaXR5KCkpLCB2YWx1ZXNbaV0pOwogCiAgICAg
ICAgIHRhYmxlLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7CiAKQEAgLTkyOCw3ICs5MjEsNyBAQCBX
YXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBv
aW50U2V0KFZNJiB2bSwgUHJvcGVydAogICAgIAogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAg
ICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCkp
OwogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMtPnJhcmVEYXRhKCk7CiAg
ICAgaWYgKCFyYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzKSB7CiAgICAgICAg
IHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMgPQpAQCAtOTk4LDcgKzk5MSw3
IEBAIFByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXI6On5Qcm9wZXJ0eU1hcFN0YXRpc3Rp
Y3NFeGl0TG9nZ2VyKCkKIAogUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcoVk0mIHZtKQogewotICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IHByb3BlcnR5VGFibGVPck51bGwoKSkKKyAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFibGUgPSBw
cm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxl
OjpjbG9uZSh2bSwgKnRhYmxlKTsKICAgICBib29sIHNldFByb3BlcnR5VGFibGUgPSBmYWxzZTsK
ICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtLCBzZXRQcm9wZXJ0eVRhYmxl
KTsKQEAgLTEwMzgsMTQgKzEwMzEsMTQgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQo
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWIKIHsKICAg
ICByZXR1cm4gYWRkPFNob3VsZFBpbjo6Tm8+KAogICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLAotICAgICAgICBbdGhpcywgJnZtXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpT
TG9ja2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewor
ICAgICAgICBbdGhpcywgJnZtXShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwg
UHJvcGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewogICAgICAgICAg
ICAgc2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQpOwogICAgICAgICB9KTsKIH0KIAogUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpObz4odm0sIHByb3BlcnR5
TmFtZSwgW3RoaXMsICZ2bV0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3Bl
cnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKKyAgICByZXR1cm4gcmVt
b3ZlPFNob3VsZFBpbjo6Tm8+KHZtLCBwcm9wZXJ0eU5hbWUsIFt0aGlzLCAmdm1dKGNvbnN0IEdD
U2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZz
ZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgIHNldE1heE9mZnNldCh2bSwgbmV3TWF4T2Zmc2V0
KTsKICAgICB9KTsKIH0KQEAgLTExMTYsMjUgKzExMDksMjUgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgCi0gICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5tX2xvY2spOworICAgIENvbmN1cnJlbnRK
U0NlbGxMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIAogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIXRoaXNP
YmplY3QtPmlzT2JqZWN0KCkpCi0gICAgICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBl
Q2hhaW4uY2xlYXIoKTsKKyAgICAgICAgdGhpc09iamVjdC0+Y2xlYXJDYWNoZWRQcm90b3R5cGVD
aGFpbigpOwogICAgIGVsc2UgewogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X3Byb3RvdHlwZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FjaGVk
UHJvdG90eXBlQ2hhaW4pOworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXNP
YmplY3QtPmNhY2hlZFByb3RvdHlwZUNoYWluKCkpOwogICAgIH0KICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0YSk7CiAKICAgICBpZiAodGhpc09iamVj
dC0+aXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkgfHwgdGhpc09iamVjdC0+cHJvdGVjdFByb3BlcnR5
VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoKSkgewogICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBp
bnRlcmxlYXZlIGluIHBpbigpLCBpbiB3aGljaCBjYXNlIGl0IG1heSBzZWUgYSBudWxsIHByb3Bl
cnR5IHRhYmxlLgogICAgICAgICAvLyBUaGF0J3MgZmluZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJy
aWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2lsbCBzY2FuIHRoaXMgYWdhaW4uCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+cHJvcGVydHlUYWJsZVVuc2FmZU9y
TnVsbCgpKTsKICAgICB9IGVsc2UgaWYgKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpCi0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7Ci0g
ICAgZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQotICAgICAgICB0
aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKyAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzT2JqZWN0LT5wcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxs
KCkpOworICAgIGVsc2UgaWYgKHRoaXNPYmplY3QtPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwo
KSkKKyAgICAgICAgdGhpc09iamVjdC0+Y2xlYXJQcm9wZXJ0eVRhYmxlKCk7CiB9CiAKIGJvb2wg
U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVk0mIHZtKQpAQCAtMTI5MCw3ICsxMjgzLDcgQEAg
Ym9vbCBTdHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0pIGNv
bnN0CiAgICAgaWYgKCF0aGlzLT5jYW5DYWNoZU93bktleXMoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluID0gbV9jYWNoZWRQcm90
b3R5cGVDaGFpbi5nZXQoKTsKKyAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4gPSBj
YWNoZWRQcm90b3R5cGVDaGFpbigpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmVDaGFpbik7CiAgICAg
U3RydWN0dXJlSUQqIGN1cnJlbnRTdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUNoYWluLT5oZWFkKCk7
CiAgICAgd2hpbGUgKHRydWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgKaW5kZXggNTJjZDNjNzFkOTIwZjJmOGE5N2I0NjBiOTBlMGVjNzBkNWQ3MTFhZi4uMDM5
MzA1YmMzMGFhZjdmNDRmZjVlM2JjNTI5YzI3NmZmZjJkY2I2MyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTI1OCw5ICsyNTgsMTggQEAgY2xhc3MgU3Ry
dWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICByZXR1cm4gdHlw
ZUluZm8oKS5nZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgpOwogICAgIH0KKworICAgIFR5cGVJ
bmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3Mgb3V0T2ZMaW5lVHlwZUZsYWdzKCkgY29uc3QKKyAgICB7
CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGVJbmZv
OjpPdXRPZkxpbmVUeXBlRmxhZ3M+KG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJs
ZVVuc2FmZSA+PiBvdXRPZkxpbmVUeXBlRmxhZ3NTaGlmdCk7CisjZWxzZQorICAgICAgICByZXR1
cm4gbV9vdXRPZkxpbmVUeXBlRmxhZ3M7CisjZW5kaWYKKyAgICB9CiAgICAgCiAgICAgLy8gVHlw
ZSBhY2Nlc3NvcnMuCi0gICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IHJldHVybiBtX2Js
b2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CisgICAgVHlwZUluZm8gdHlwZUlu
Zm8oKSBjb25zdCB7IHJldHVybiBtX2Jsb2IudHlwZUluZm8ob3V0T2ZMaW5lVHlwZUZsYWdzKCkp
OyB9CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmpl
Y3QoKTsgfQogCiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvYi5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgJiBBbGxXcml0YWJsZUFycmF5
VHlwZXM7IH0KQEAgLTM1OSw3ICszNjgsMTEgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQoKSBjb25zdAogICAg
IHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICB1aW50MTZfdCBtYXhPZmZzZXQgPSBtX21h
eE9mZnNldEFuZENhY2hlZFByb3RvdHlwZUNoYWluID4+IG1heE9mZnNldFNoaWZ0OworI2Vsc2UK
ICAgICAgICAgdWludDE2X3QgbWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXQ7CisjZW5kaWYKICAgICAg
ICAgaWYgKG1heE9mZnNldCA9PSBzaG9ydEludmFsaWRPZmZzZXQpCiAgICAgICAgICAgICByZXR1
cm4gaW52YWxpZE9mZnNldDsKICAgICAgICAgaWYgKG1heE9mZnNldCA9PSB1c2VSYXJlRGF0YUZs
YWcpCkBAIC0zNjksMjIgKzM4Miw0NSBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMg
SlNDZWxsIHsKIAogICAgIHZvaWQgc2V0TWF4T2Zmc2V0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogICAgIHsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQotICAg
ICAgICAgICAgbV9tYXhPZmZzZXQgPSBzaG9ydEludmFsaWRPZmZzZXQ7Ci0gICAgICAgIGVsc2Ug
aWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZz
ZXQpCi0gICAgICAgICAgICBtX21heE9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgZWxzZSBpZiAo
bV9tYXhPZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKQorICAgICAgICBhdXRvIGNvbW1pdCA9IFsm
XSh1aW50MTZfdCB2YWx1ZSkgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgICAgICB1aW50
cHRyX3QgcmVzdWx0ID0gKG1fbWF4T2Zmc2V0QW5kQ2FjaGVkUHJvdG90eXBlQ2hhaW4gJiBjYWNo
ZWRQcm90b3R5cGVDaGFpbk1hc2spIHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpIDw8
IG1heE9mZnNldFNoaWZ0KTsKKyAgICAgICAgICAgIG1fbWF4T2Zmc2V0QW5kQ2FjaGVkUHJvdG90
eXBlQ2hhaW4gPSByZXN1bHQ7CisjZWxzZQorICAgICAgICAgICAgbV9tYXhPZmZzZXQgPSB2YWx1
ZTsKKyNlbmRpZgorICAgICAgICB9OworCisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9m
ZnNldCkgeworICAgICAgICAgICAgY29tbWl0KHNob3J0SW52YWxpZE9mZnNldCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRh
RmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1p
dChvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFERFJF
U1M2NCkKKyAgICAgICAgdWludDE2X3QgbWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXRBbmRDYWNoZWRQ
cm90b3R5cGVDaGFpbiA+PiBtYXhPZmZzZXRTaGlmdDsKKyNlbHNlCisgICAgICAgIHVpbnQxNl90
IG1heE9mZnNldCA9IG1fbWF4T2Zmc2V0OworI2VuZGlmCisgICAgICAgIGlmIChtYXhPZmZzZXQg
PT0gdXNlUmFyZURhdGFGbGFnKSB7CiAgICAgICAgICAgICByYXJlRGF0YSgpLT5tX21heE9mZnNl
dCA9IG9mZnNldDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBlbnN1cmVSYXJlRGF0YSh2
bSktPm1fbWF4T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKLSAgICAgICAgICAgIG1fbWF4T2Zmc2V0ID0gdXNlUmFyZURhdGFGbGFnOworICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlUmFyZURhdGEodm0pLT5t
X21heE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAg
ICAgICAgY29tbWl0KHVzZVJhcmVEYXRhRmxhZyk7CiAgICAgfQogCiAgICAgUHJvcGVydHlPZmZz
ZXQgdHJhbnNpdGlvbk9mZnNldCgpIGNvbnN0CiAgICAgeworI2lmIENQVShBRERSRVNTNjQpCisg
ICAgICAgIHVpbnQxNl90IHRyYW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRpb25PZmZzZXRBbmRD
bGFzc0luZm8gPj4gdHJhbnNpdGlvbk9mZnNldFNoaWZ0OworI2Vsc2UKICAgICAgICAgdWludDE2
X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9mZnNldDsKKyNlbmRpZgogICAgICAg
ICBpZiAodHJhbnNpdGlvbk9mZnNldCA9PSBzaG9ydEludmFsaWRPZmZzZXQpCiAgICAgICAgICAg
ICByZXR1cm4gaW52YWxpZE9mZnNldDsKICAgICAgICAgaWYgKHRyYW5zaXRpb25PZmZzZXQgPT0g
dXNlUmFyZURhdGFGbGFnKQpAQCAtMzk0LDE3ICs0MzAsMzYgQEAgY2xhc3MgU3RydWN0dXJlIGZp
bmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIHNldFRyYW5zaXRpb25PZmZzZXQoVk0m
IHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICBpZiAob2Zmc2V0ID09
IGludmFsaWRPZmZzZXQpCi0gICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSBzaG9ydElu
dmFsaWRPZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAm
JiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQpCi0gICAgICAgICAgICBtX3RyYW5zaXRpb25P
ZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKG1fdHJhbnNpdGlvbk9mZnNldCA9PSB1
c2VSYXJlRGF0YUZsYWcpCisgICAgICAgIGF1dG8gY29tbWl0ID0gWyZdKHVpbnQxNl90IHZhbHVl
KSB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSAo
bV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvICYgY2xhc3NJbmZvTWFzaykgfCAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkgPDwgdHJhbnNpdGlvbk9mZnNldFNoaWZ0KTsKKyAgICAg
ICAgICAgIG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyA9IHJlc3VsdDsKKyNlbHNlCisg
ICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSB2YWx1ZTsKKyNlbmRpZgorICAgICAgICB9
OworCisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAg
Y29tbWl0KHNob3J0SW52YWxpZE9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9y
dEludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1pdChvZmZzZXQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgdWludDE2
X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyA+PiB0
cmFuc2l0aW9uT2Zmc2V0U2hpZnQ7CisjZWxzZQorICAgICAgICB1aW50MTZfdCB0cmFuc2l0aW9u
T2Zmc2V0ID0gbV90cmFuc2l0aW9uT2Zmc2V0OworI2VuZGlmCisgICAgICAgIGlmICh0cmFuc2l0
aW9uT2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykgewogICAgICAgICAgICAgcmFyZURhdGEoKS0+
bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAg
ICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIG1fdHJhbnNpdGlvbk9m
ZnNldCA9IHVzZVJhcmVEYXRhRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQor
CisgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBjb21taXQodXNlUmFy
ZURhdGFGbGFnKTsKICAgICB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQgb3V0T2ZMaW5lQ2FwYWNp
dHkoUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQpAQCAtNDQyLDE1ICs0OTcsMTIgQEAgY2xhc3Mg
U3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgfQogICAgIGJvb2wgaGFzSW5s
aW5lU3RvcmFnZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gISFtX2lubGluZUNhcGFj
aXR5OwotICAgIH0KLSAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9pbmxpbmVDYXBhY2l0eTsKKyAgICAgICAgcmV0dXJuICEhaW5saW5l
Q2FwYWNpdHkoKTsKICAgICB9CisgICAgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkoKSBjb25zdCB7
IHJldHVybiBtX3Byb3BlcnR5SGFzaEFuZElubGluZUNhcGFjaXR5ICYgaW5saW5lQ2FwYWNpdHlN
YXNrOyB9CiAgICAgdW5zaWduZWQgaW5saW5lU2l6ZSgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+KG1heE9mZnNldCgpICsgMSwgbV9pbmxpbmVDYXBhY2l0
eSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4obWF4T2Zmc2V0KCkgKyAxLCBp
bmxpbmVDYXBhY2l0eSgpKTsKICAgICB9CiAgICAgdW5zaWduZWQgdG90YWxTdG9yYWdlQ2FwYWNp
dHkoKSBjb25zdAogICAgIHsKQEAgLTQ2MiwxMiArNTE0LDEyIEBAIGNsYXNzIFN0cnVjdHVyZSBm
aW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHsKICAgICAgICAgcmV0dXJuIEpTQzo6aXNWYWxp
ZE9mZnNldChvZmZzZXQpCiAgICAgICAgICAgICAmJiBvZmZzZXQgPD0gbWF4T2Zmc2V0KCkKLSAg
ICAgICAgICAgICYmIChvZmZzZXQgPCBtX2lubGluZUNhcGFjaXR5IHx8IG9mZnNldCA+PSBmaXJz
dE91dE9mTGluZU9mZnNldCk7CisgICAgICAgICAgICAmJiAob2Zmc2V0IDwgc3RhdGljX2Nhc3Q8
aW50PihpbmxpbmVDYXBhY2l0eSgpKSB8fCBvZmZzZXQgPj0gZmlyc3RPdXRPZkxpbmVPZmZzZXQp
OwogICAgIH0KIAogICAgIGJvb2wgaGlqYWNrc0luZGV4aW5nSGVhZGVyKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBpc1R5cGVkVmlldyhtX2NsYXNzSW5mby0+dHlwZWRBcnJheVN0b3Jh
Z2VUeXBlKTsKKyAgICAgICAgcmV0dXJuIGlzVHlwZWRWaWV3KGNsYXNzSW5mbygpLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUpOwogICAgIH0KICAgICAKICAgICBib29sIGNvdWxkSGF2ZUluZGV4aW5n
SGVhZGVyKCkgY29uc3QKQEAgLTUzNSw3ICs1ODcsMTQgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFs
IDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNH
bG9iYWxPYmplY3QqLCBWTSYsIEpTU3RyaW5nKiB2YWx1ZSwgUHJvcGVydHlTbG90IHRvU3RyaW5n
VGFnU3ltYm9sU2xvdCk7CiAKLSAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuIG1fY2xhc3NJbmZvOyB9CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdAorICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PGNvbnN0IENsYXNzSW5mbyo+KG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyAm
IGNsYXNzSW5mb01hc2spOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fY2xhc3NJbmZvOworI2Vu
ZGlmCisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAg
ICAgewpAQCAtNTUyLDI1ICs2MTEsMjkgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2ds
b2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBjbGFzc0luZm9PZmZz
ZXQoKQorI2lmIENQVShBRERSRVNTNjQpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRy
YW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyk7Cisg
ICAgfQorI2Vsc2UKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2xhc3NJbmZvKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5m
byk7CiAgICAgfQotICAgICAgICAKKyNlbmRpZgorCiAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRp
YyBwdHJkaWZmX3QgcHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsK
LSAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGlubGluZUNhcGFjaXR5T2Zmc2V0KCkKKyNp
ZiBDUFUoTElUVExFX0VORElBTikKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5l
Q2FwYWNpdHkoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1
cmUsIG1faW5saW5lQ2FwYWNpdHkpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cnVjdHVyZSwgbV9wcm9wZXJ0eUhhc2hBbmRJbmxpbmVDYXBhY2l0eSk7CiAgICAgfQorI2VuZGlm
CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IHByZXZpb3VzT3JSYXJlRGF0YU9mZnNldCgpCiAgICAg
ewpAQCAtNjUzLDkgKzcxNiwxNCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlND
ZWxsIHsKICAgICAKICAgICBzdGF0aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRlcihQcmludFN0cmVh
bSYpOwogICAgIAotICAgIENvbmN1cnJlbnRKU0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7
IH0KLQotICAgIHVuc2lnbmVkIHByb3BlcnR5SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVy
dHlIYXNoOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9wZXJ0eUhhc2hTaGlm
dCA9IDg7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBpbmxpbmVDYXBhY2l0eU1hc2sg
PSAoMVUgPDwgcHJvcGVydHlIYXNoU2hpZnQpIC0gMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGlubGlu
ZUNhcGFjaXR5TWFzayA9PSAweGZmLCAiTG93ZXN0IDggYml0cyBhcmUgZm9yIGlubGluZUNhcGFj
aXR5LCB0aGlzIGlzIHJlcXVpcmVkIHRvIGFjY2VzcyB0aGVtIHRocm91Z2ggbG9hZDggaW4gSklU
Iik7CisgICAgdW5zaWduZWQgcHJvcGVydHlIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0
eUhhc2hBbmRJbmxpbmVDYXBhY2l0eSA+PiBwcm9wZXJ0eUhhc2hTaGlmdDsgfQorICAgIHZvaWQg
c2V0UHJvcGVydHlIYXNoKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICBtX3Byb3BlcnR5
SGFzaEFuZElubGluZUNhcGFjaXR5ID0gKG1fcHJvcGVydHlIYXNoQW5kSW5saW5lQ2FwYWNpdHkg
JiBpbmxpbmVDYXBhY2l0eU1hc2spIHwgKGhhc2ggPDwgcHJvcGVydHlIYXNoU2hpZnQpOworICAg
IH0KIAogICAgIHN0YXRpYyBib29sIHNob3VsZENvbnZlcnRUb1BvbHlQcm90byhjb25zdCBTdHJ1
Y3R1cmUqIGEsIGNvbnN0IFN0cnVjdHVyZSogYik7CiAKQEAgLTY4NCw2ICs3NTIsNyBAQCBjbGFz
cyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB7XAogICAgICAgICBtX2Jp
dEZpZWxkICY9IH4oc18jI2xvd2VyTmFtZSMjTWFzayA8PCBvZmZzZXQpO1wKICAgICAgICAgbV9i
aXRGaWVsZCB8PSAobmV3VmFsdWUgJiBzXyMjbG93ZXJOYW1lIyNNYXNrKSA8PCBvZmZzZXQ7XAor
ICAgICAgICBBU1NFUlQobmV3VmFsdWUgPT0gbG93ZXJOYW1lKCkpO1wKICAgICB9CiAKICAgICBE
RUZJTkVfQklURklFTEQoRGljdGlvbmFyeUtpbmQsIGRpY3Rpb25hcnlLaW5kLCBEaWN0aW9uYXJ5
S2luZCwgMiwgMCk7CkBAIC02OTEsMTggKzc2MCwxOCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzR2V0dGVyU2V0
dGVyUHJvcGVydGllcywgSGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcywgMSwgMyk7CiAgICAgREVG
SU5FX0JJVEZJRUxEKGJvb2wsIGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhj
bHVkaW5nUHJvdG8sIEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5n
UHJvdG8sIDEsIDQpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBpc1F1aWNrUHJvcGVydHlB
Y2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24sIElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRG
b3JFbnVtZXJhdGlvbiwgMSwgNSk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKHVuc2lnbmVkLCB0cmFu
c2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLCBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLCAx
NCwgNik7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFByZXZlbnRFeHRlbnNpb25zLCBE
aWRQcmV2ZW50RXh0ZW5zaW9ucywgMSwgMjApOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBk
aWRUcmFuc2l0aW9uLCBEaWRUcmFuc2l0aW9uLCAxLCAyMSk7Ci0gICAgREVGSU5FX0JJVEZJRUxE
KGJvb2wsIHN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkLCBTdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCwg
MSwgMjIpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNCZWVuRmxhdHRlbmVkQmVmb3Jl
LCBIYXNCZWVuRmxhdHRlbmVkQmVmb3JlLCAxLCAyMyk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJv
b2wsIGhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMsIEhhc0N1c3RvbUdldHRlclNldHRl
clByb3BlcnRpZXMsIDEsIDI0KTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkV2F0Y2hJ
bnRlcm5hbFByb3BlcnRpZXMsIERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCAxLCAyNSk7Ci0g
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0Jl
RmlyZWQsIFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0JlRmlyZWQsIDEsIDI2KTsKLSAg
ICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzQmVlbkRpY3Rpb25hcnksIEhhc0JlZW5EaWN0aW9u
YXJ5LCAxLCAyNyk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHByb3RlY3RQcm9wZXJ0eVRh
YmxlV2hpbGVUcmFuc2l0aW9uaW5nLCBQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlv
bmluZywgMSwgMjgpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNVbmRlcnNjb3JlUHJv
dG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8sIEhhc1VuZGVyc2NvcmVQcm90b1Byb3Bl
cnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgMSwgMjkpOwotICAgIERFRklORV9CSVRGSUVMRChi
b29sLCBpc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uLCBJc1Byb3BlcnR5RGVsZXRpb25UcmFu
c2l0aW9uLCAxLCAzMCk7CisgICAgREVGSU5FX0JJVEZJRUxEKHVuc2lnbmVkLCB0cmFuc2l0aW9u
UHJvcGVydHlBdHRyaWJ1dGVzLCBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLCA4LCA2KTsK
KyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkUHJldmVudEV4dGVuc2lvbnMsIERpZFByZXZl
bnRFeHRlbnNpb25zLCAxLCAxNCk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFRyYW5z
aXRpb24sIERpZFRyYW5zaXRpb24sIDEsIDE1KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
c3RhdGljUHJvcGVydGllc1JlaWZpZWQsIFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkLCAxLCAxNik7
CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc0JlZW5GbGF0dGVuZWRCZWZvcmUsIEhhc0Jl
ZW5GbGF0dGVuZWRCZWZvcmUsIDEsIDE3KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFz
Q3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcywgSGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVy
dGllcywgMSwgMTgpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFs
UHJvcGVydGllcywgRGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIDEsIDE5KTsKKyAgICBERUZJ
TkVfQklURklFTEQoYm9vbCwgdHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwg
VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgMSwgMjApOworICAgIERFRklO
RV9CSVRGSUVMRChib29sLCBoYXNCZWVuRGljdGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnksIDEs
IDIxKTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgcHJvdGVjdFByb3BlcnR5VGFibGVXaGls
ZVRyYW5zaXRpb25pbmcsIFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCAx
LCAyMik7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc1VuZGVyc2NvcmVQcm90b1Byb3Bl
cnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgSGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNs
dWRpbmdPcmlnaW5hbFByb3RvLCAxLCAyMyk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlz
UHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24sIElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24s
IDEsIDI0KTsKIAogICAgIHN0YXRpY19hc3NlcnQoc19iaXRXaWR0aE9mVHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcyA8PSBzaXplb2YoVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcykgKiA4
KTsKIApAQCAtNzM4LDcgKzgwNyw3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBK
U0NlbGwgewogICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNh
bGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgogICAgIFByb3BlcnR5VGFibGUq
IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KFZNJiB2bSkKICAgICB7Ci0gICAgICAgIGlm
IChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCkpCisg
ICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JO
dWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICBpZiAoIXByZXZpb3Vz
SUQoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzQ4LDIwICs4MTcsMjUgQEAg
Y2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBtYXkg
Z3JhYiB0aGUgbG9jaywgb3Igbm90LiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVj
dHVyZSdzIGxvY2suCiAgICAgUHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVydHlUYWJsZShWTSYg
dm0pCiAgICAgewotICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gbV9wcm9wZXJ0
eVRhYmxlVW5zYWZlLmdldCgpKQorICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0g
cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgcmV0dXJuIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSh2bSk7CiAgICAgfQogICAg
IAotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGVPck51bGwoKSBjb25zdAorICAgIFBy
b3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSBjb25zdAogICAgIHsKKyNp
ZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFByb3BlcnR5VGFi
bGUqPihtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUgJiBwcm9wZXJ0
eVRhYmxlVW5zYWZlTWFzayk7CisjZWxzZQogICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxl
VW5zYWZlLmdldCgpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgd2lsbCBncmFi
IHRoZSBsb2NrLiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2su
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlUYWJsZSogbWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKFZNJiwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gdHJ1ZSk7CiAgICAgCiAgICAgdm9p
ZCBzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpOworICAgIHZv
aWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7CiAgICAgCiAgICAgUHJvcGVydHlUYWJsZSogdGFrZVBy
b3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mKTsKICAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5
UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKQEAgLTc4MCw3ICs4NTQsNyBAQCBjbGFzcyBT
dHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB7CiAgICAgICAgIC8vIFNpbmNl
IHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgaXMgb2Z0ZW4gdGhlIHNhbWUgYXMgdGhlIGxhc3Qg
b2Zmc2V0IChleGNlcHQgaWYgdGhlcmUgYXJlIGRlbGV0ZXMpCiAgICAgICAgIC8vIHdlIGtlZXAg
dGhlIHNpemUgb2YgU3RydWN0dXJlIGRvd24gYnkgbm90IHN0b3JpbmcgYm90aC4KLSAgICAgICAg
cmV0dXJuIG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2Fw
YWNpdHkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZz
ZXQoKSwgaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkKEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluLCBKU09iamVj
dCogYmFzZSkgY29uc3Q7CkBAIC04MDIsNDggKzg3Niw3NCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdJbnRlcm5h
bFByb3BlcnRpZXMoVk0mKTsKIAorICAgIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVD
aGFpbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4oVk0mLCBTdHJ1
Y3R1cmVDaGFpbiopOworICAgIHZvaWQgY2xlYXJDYWNoZWRQcm90b3R5cGVDaGFpbigpOworCisg
ICAgdm9pZCBzZXRPdXRPZkxpbmVUeXBlRmxhZ3MoVHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFn
cyk7CisgICAgdm9pZCBzZXRDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKik7CisKICAgICBzdGF0
aWMgY29uc3RleHByIGludCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMg
Y29uc3RleHByIGludCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUx
MjsKIAogICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgcHJvcGVybHkgYWxpZ25lZCBhdCB0aGUgYmVn
aW5uaW5nIG9mIHRoZSAnU3RydWN0dXJlJwogICAgIC8vIHBhcnQgb2YgdGhlIG9iamVjdC4KICAg
ICBTdHJ1Y3R1cmVJREJsb2IgbV9ibG9iOwotICAgIFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxh
Z3MgbV9vdXRPZkxpbmVUeXBlRmxhZ3M7Ci0KLSAgICB1aW50OF90IG1faW5saW5lQ2FwYWNpdHk7
CiAKLSAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyAgICAvLyBTaG91bGQgYmUgYWNjZXNz
ZWQgdGhyb3VnaCBlbnN1cmVQcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNl
dCB0byAwIGJ5IGFub3RoZXIgdGhyZWFkLgorICAgIC8vIER1cmluZyBhIEhlYXAgU25hcHNob3Qg
R0Mgd2UgYXZvaWQgY2xlYXJpbmcgdGhlIHRhYmxlIHNvIGl0IGlzIHNhZmUgdG8gdXNlLgorI2lm
IENQVShBRERSRVNTNjQpCisgICAgLy8gSGlnaGVzdCAxNiBiaXRzIGFyZSBmb3IgbV9vdXRPZkxp
bmVUeXBlRmxhZ3MuIFJlbWFpbmluZyBiaXRzIGFyZSBmb3IgbV9wcm9wZXJ0eVRhYmxlVW5zYWZl
LgorcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgb3V0T2ZMaW5lVHlwZUZs
YWdzU2hpZnQgPSA0ODsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwcm9wZXJ0eVRh
YmxlVW5zYWZlTWFzayA9ICgxVUxMIDw8IDQ4KSAtIDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50cHRyX3Qgb3V0T2ZMaW5lVHlwZUZsYWdzU2hpZnRlZE1hc2sgPSB+cHJvcGVydHlUYWJsZVVu
c2FmZU1hc2s7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVHlwZUluZm86Ok91dE9mTGluZVR5
cGVGbGFncykgPT0gMik7CisKKyAgICAvLyBIaWdoZXN0IDE2IGJpdHMgYXJlIGZvciBtX3RyYW5z
aXRpb25PZmZzZXQuIFJlbWFpbmluZyBiaXRzIGFyZSBmb3IgbV9jbGFzc0luZm8uCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0cmFuc2l0aW9uT2Zmc2V0U2hpZnQgPSA0ODsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBjbGFzc0luZm9NYXNrID0gKDFVTEwgPDwgNDgpIC0g
MTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCB0cmFuc2l0aW9uT2Zmc2V0U2hpZnRl
ZE1hc2sgPSB+Y2xhc3NJbmZvTWFzazsKKworICAgIC8vIEhpZ2hlc3QgMTYgYml0cyBhcmUgZm9y
IG1fbWF4T2Zmc2V0LiBSZW1haW5pbmcgYml0cyBhcmUgZm9yIG1fY2FjaGVkUHJvdG90eXBlQ2hh
aW4uCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhPZmZzZXRTaGlmdCA9IDQ4Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IGNhY2hlZFByb3RvdHlwZUNoYWluTWFzayA9
ICgxVUxMIDw8IDQ4KSAtIDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgbWF4T2Zm
c2V0U2hpZnRlZE1hc2sgPSB+Y2FjaGVkUHJvdG90eXBlQ2hhaW5NYXNrOworcHJpdmF0ZToKKyAg
ICBVbnNhZmVDZWxsUG9pbnRlciBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVV
bnNhZmUgeyAwIH07CisgICAgVW5zYWZlQ2VsbFBvaW50ZXIgbV9tYXhPZmZzZXRBbmRDYWNoZWRQ
cm90b3R5cGVDaGFpbiB7IDAgfTsKKyAgICB1aW50cHRyX3QgbV90cmFuc2l0aW9uT2Zmc2V0QW5k
Q2xhc3NJbmZvIHsgMCB9OworICAgIFBhY2tlZFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4gbV90
cmFuc2l0aW9uUHJvcGVydHlOYW1lOworI2Vsc2UKKyAgICBUeXBlSW5mbzo6T3V0T2ZMaW5lVHlw
ZUZsYWdzIG1fb3V0T2ZMaW5lVHlwZUZsYWdzIHsgMCB9OworICAgIHVpbnQxNl90IG1fdHJhbnNp
dGlvbk9mZnNldCB7IDAgfTsKKyAgICB1aW50MTZfdCBtX21heE9mZnNldCB7IDAgfTsKKyAgICBX
cml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOworICAgIGNv
bnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CisgICAgbXV0YWJsZSBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW47CisgICAgUmVm
UHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWU7CisjZW5kaWYK
KyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgbV90cmFuc2l0aW9uVGFibGU7CiAKLSAgICB1
aW50MzJfdCBtX2JpdEZpZWxkOworICAgIHVpbnQzMl90IG1fYml0RmllbGQgeyAwIH07CiAKICAg
ICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiBtX3Byb3RvdHlwZTsKLSAgICBtdXRhYmxlIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmVDaGFpbj4gbV9jYWNoZWRQcm90b3R5cGVDaGFpbjsKIAogICAgIFdyaXRlQmFycmll
cjxKU0NlbGw+IG1fcHJldmlvdXNPclJhcmVEYXRhOwogCi0gICAgUmVmUHRyPFVuaXF1ZWRTdHJp
bmdJbXBsPiBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWU7Ci0KLSAgICBjb25zdCBDbGFzc0luZm8q
IG1fY2xhc3NJbmZvOwotCi0gICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIG1fdHJhbnNpdGlv
blRhYmxlOwotCi0gICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVy
dHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVh
ZC4KLSAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRo
ZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KLSAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlU
YWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwotCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBv
aW50U2V0IG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VSVChm
aXJzdE91dE9mTGluZU9mZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7CiAK
LSAgICB1aW50MTZfdCBtX3RyYW5zaXRpb25PZmZzZXQ7Ci0gICAgdWludDE2X3QgbV9tYXhPZmZz
ZXQ7Ci0KLSAgICB1aW50MzJfdCBtX3Byb3BlcnR5SGFzaDsKLSAgICBUaW55Qmxvb21GaWx0ZXIg
bV9zZWVuUHJvcGVydGllczsKKyAgICB1aW50MzJfdCBtX3Byb3BlcnR5SGFzaEFuZElubGluZUNh
cGFjaXR5OworICAgIHVpbnQzMl90IG1fc2VlblByb3BlcnRpZXMgeyAwIH07CiAKICAgICBmcmll
bmQgY2xhc3MgVk1JbnNwZWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIEpTRG9sbGFyVk1IZWxwZXI7
CiB9OworI2lmIENQVShBRERSRVNTNjQpCitzdGF0aWNfYXNzZXJ0KHNpemVvZihTdHJ1Y3R1cmUp
IDw9IDk2LCAiRG8gbm90IGluY3JlYXNlIHNpemVvZihTdHJ1Y3R1cmUpLCBpdCBpbW1lZGlhdGVs
eSBjYXVzZXMgbWVtb3J5IHJlZ3Jlc3Npb24iKTsKKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMu
aAppbmRleCAwY2Q5OGQ1MmFjYzdmNzE0YzA1YjE1M2UwODEzOWU0OTFjZDhjZjhjLi5kOTYxZjkz
Y2QxZGRhMDgyM2ZlNmU0N2EwOTZjNmNjYWI3MTVhNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCkBAIC0xNDQsNyArMTQ0LDkgQEAg
QUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHUKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAK
LSAgICBpZiAobV9zZWVuUHJvcGVydGllcy5ydWxlT3V0KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHByb3BlcnR5TmFtZS51aWQoKSkpKQorICAgIHVuc2lnbmVkIGhhc2hDb2RlID0gcHJvcGVydHlO
YW1lLnVpZCgpLT5zeW1ib2xBd2FyZUhhc2goKTsKKyAgICBBU1NFUlQoaGFzaENvZGUpOyAvLyBT
dHJpbmdJbXBsIGhhc2ggbmV2ZXIgZ2V0cyB6ZXJvLgorICAgIGlmICgobV9zZWVuUHJvcGVydGll
cyAmIGhhc2hDb2RlKSAhPSBoYXNoQ29kZSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7
CiAKICAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJs
ZUlmTm90RW1wdHkodm0pOwpAQCAtMTgxLDcgKzE4Myw3IEBAIHZvaWQgU3RydWN0dXJlOjpmb3JF
YWNoUHJvcGVydHlDb25jdXJyZW50bHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIAogICAgICAg
ICBpZiAoIWZ1bmN0b3IoUHJvcGVydHlNYXBFbnRyeShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCksIHN0cnVjdHVy
ZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpKSkpIHsKICAgICAgICAgICAgIGlmICh0
YWJsZSkKLSAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwor
ICAgICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTkyLDExICsxOTQsMTEgQEAg
dm9pZCBTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJlbnRseShjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBpZiAo
IWZ1bmN0b3IoZW50cnkpKSB7Ci0gICAgICAgICAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9j
ay51bmxvY2soKTsKKyAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+Y2VsbExvY2soKS51
bmxvY2soKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKKyAgICAgICAgdGFi
bGVTdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgfQogfQogCkBAIC0zMDIsMTUg
KzMwNCw0NSBAQCBpbmxpbmUgSlNWYWx1ZSBTdHJ1Y3R1cmU6OnByb3RvdHlwZUZvckxvb2t1cChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbAogICAgIHJldHVybiBwcm90b3R5cGVG
b3JMb29rdXBQcmltaXRpdmVJbXBsKGdsb2JhbE9iamVjdCwgdGhpcyk7CiB9CiAKK2lubGluZSBT
dHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpjYWNoZWRQcm90b3R5cGVDaGFpbigpIGNvbnN0Cit7
CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0cnVjdHVyZUNo
YWluKj4obV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90b3R5cGVDaGFpbiAmIGNhY2hlZFByb3RvdHlw
ZUNoYWluTWFzayk7CisjZWxzZQorICAgIHJldHVybiBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdl
dCgpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0Q2FjaGVkUHJvdG90
eXBlQ2hhaW4oVk0mIHZtLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pCit7CisjaWYgQ1BVKEFERFJF
U1M2NCkKKyAgICB1aW50cHRyX3QgdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjaGFp
bikgfCAobV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90b3R5cGVDaGFpbiAmIG1heE9mZnNldFNoaWZ0
ZWRNYXNrKTsKKyAgICBtX21heE9mZnNldEFuZENhY2hlZFByb3RvdHlwZUNoYWluID0gdmFsdWU7
CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgY2hhaW4pOworI2Vsc2UKKyAgICBtX2Nh
Y2hlZFByb3RvdHlwZUNoYWluLnNldCh2bSwgdGhpcywgY2hhaW4pOworI2VuZGlmCit9CisKK2lu
bGluZSB2b2lkIFN0cnVjdHVyZTo6Y2xlYXJDYWNoZWRQcm90b3R5cGVDaGFpbigpCit7CisjaWYg
Q1BVKEFERFJFU1M2NCkKKyAgICB1aW50cHRyX3QgdmFsdWUgPSBtX21heE9mZnNldEFuZENhY2hl
ZFByb3RvdHlwZUNoYWluICYgbWF4T2Zmc2V0U2hpZnRlZE1hc2s7CisgICAgbV9tYXhPZmZzZXRB
bmRDYWNoZWRQcm90b3R5cGVDaGFpbiA9IHZhbHVlOworI2Vsc2UKKyAgICBtX2NhY2hlZFByb3Rv
dHlwZUNoYWluLmNsZWFyKCk7CisjZW5kaWYKK30KKwogaW5saW5lIFN0cnVjdHVyZUNoYWluKiBT
dHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIGJhc2UpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGJhc2UtPnN0cnVjdHVy
ZSh2bSkgPT0gdGhpcyk7CiAgICAgLy8gV2UgY2FjaGUgb3VyIHByb3RvdHlwZSBjaGFpbiBzbyBv
dXIgY2xpZW50cyBjYW4gc2hhcmUgaXQuCi0gICAgaWYgKCFpc1ZhbGlkKGdsb2JhbE9iamVjdCwg
bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSwgYmFzZSkpIHsKKyAgICBpZiAoIWlzVmFsaWQo
Z2xvYmFsT2JqZWN0LCBjYWNoZWRQcm90b3R5cGVDaGFpbigpLCBiYXNlKSkgewogICAgICAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IHByb3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QsIGJhc2Up
OwotICAgICAgICBtX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldCh2bSwgdGhpcywgU3RydWN0dXJl
Q2hhaW46OmNyZWF0ZSh2bSwgcHJvdG90eXBlLmlzTnVsbCgpID8gbnVsbHB0ciA6IGFzT2JqZWN0
KHByb3RvdHlwZSkpKTsKKyAgICAgICAgY29uc3RfY2FzdDxTdHJ1Y3R1cmUqPih0aGlzKS0+c2V0
Q2FjaGVkUHJvdG90eXBlQ2hhaW4odm0sIFN0cnVjdHVyZUNoYWluOjpjcmVhdGUodm0sIHByb3Rv
dHlwZS5pc051bGwoKSA/IG51bGxwdHIgOiBhc09iamVjdChwcm90b3R5cGUpKSk7CiAgICAgfQot
ICAgIHJldHVybiBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpOworICAgIHJldHVybiBjYWNo
ZWRQcm90b3R5cGVDaGFpbigpOwogfQogCiBpbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVy
ZTo6cHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3Qq
IGJhc2UpIGNvbnN0CkBAIC0zNTAsNyArMzgyLDcgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlOjpk
aWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogCiBpbmxpbmUgV2F0Y2hw
b2ludFNldCogU3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCkpOwogICAg
IGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgV1RGOjps
b2FkTG9hZEZlbmNlKCk7CkBAIC0zNzEsMTYgKzQwMywxNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
U3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5
VGFibAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICB1bnNpZ25lZCB0b3RhbFNpemUg
PSBwcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCk7Ci0gICAgdW5zaWduZWQgaW5s
aW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSA9IHRvdGFsU2l6ZSA8IG1faW5saW5lQ2Fw
YWNpdHkgPyAwIDogdG90YWxTaXplIC0gbV9pbmxpbmVDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBp
bmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90YWxTaXplID0gdG90YWxTaXplIDwgaW5saW5lQ2Fw
YWNpdHkoKSA/IDAgOiB0b3RhbFNpemUgLSBpbmxpbmVDYXBhY2l0eSgpOwogCiAgICAgYXV0byBm
YWlsID0gWyZdIChjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikgewogICAgICAgICBkYXRhTG9nKCJE
ZXRlY3RlZCBvZmZzZXQgaW5jb25zaXN0ZW5jeTogIiwgZGVzY3JpcHRpb24sICIhXG4iKTsKICAg
ICAgICAgZGF0YUxvZygidGhpcyA9ICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpOwogICAgICAg
ICBkYXRhTG9nKCJ0cmFuc2l0aW9uT2Zmc2V0ID0gIiwgdHJhbnNpdGlvbk9mZnNldCgpLCAiXG4i
KTsKICAgICAgICAgZGF0YUxvZygibWF4T2Zmc2V0ID0gIiwgbWF4T2Zmc2V0KCksICJcbiIpOwot
ICAgICAgICBkYXRhTG9nKCJtX2lubGluZUNhcGFjaXR5ID0gIiwgbV9pbmxpbmVDYXBhY2l0eSwg
IlxuIik7CisgICAgICAgIGRhdGFMb2coIm1faW5saW5lQ2FwYWNpdHkgPSAiLCBpbmxpbmVDYXBh
Y2l0eSgpLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygicHJvcGVydHlUYWJsZSA9ICIsIFJhd1Bv
aW50ZXIocHJvcGVydHlUYWJsZSksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNs
b3RzRm9yTWF4T2Zmc2V0ID0gIiwgbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQo
KSwgbV9pbmxpbmVDYXBhY2l0eSksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNs
b3RzRm9yTWF4T2Zmc2V0ID0gIiwgbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQo
KSwgaW5saW5lQ2FwYWNpdHkoKSksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCJ0b3RhbFNpemUg
PSAiLCB0b3RhbFNpemUsICJcbiIpOwogICAgICAgICBkYXRhTG9nKCJpbmxpbmVPdmVyZmxvd0Fj
Y29yZGluZ1RvVG90YWxTaXplID0gIiwgaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6
ZSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIm51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhP
ZmZzZXQgPSAiLCBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgp
KSwgIlxuIik7CkBAIC0zODgsNyArNDIwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVy
ZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeShQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmwKICAg
ICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfTsKICAgICAKLSAgICBpZiAo
bnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSkg
IT0gdG90YWxTaXplKQorICAgIGlmIChudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNl
dCgpLCBpbmxpbmVDYXBhY2l0eSgpKSAhPSB0b3RhbFNpemUpCiAgICAgICAgIGZhaWwoIm51bWJl
ck9mU2xvdHNGb3JNYXhPZmZzZXQgZG9lc24ndCBtYXRjaCB0b3RhbFNpemUiKTsKICAgICBpZiAo
aW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSAhPSBudW1iZXJPZk91dE9mTGluZVNs
b3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpKSkKICAgICAgICAgZmFpbCgiaW5saW5lT3ZlcmZs
b3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSBkb2Vzbid0IG1hdGNoIG51bWJlck9mT3V0T2ZMaW5lU2xv
dHNGb3JNYXhPZmZzZXQiKTsKQEAgLTM5OCw3ICs0MzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
U3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5
VGFibAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3Rl
bmN5KCkgY29uc3QKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gcHJvcGVy
dHlUYWJsZU9yTnVsbCgpOworICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBwcm9w
ZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCk7CiAKICAgICBpZiAoIXByb3BlcnR5VGFibGUpIHsKICAg
ICAgICAgQVNTRVJUKCFpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSk7CkBAIC00MzksNyArNDcxLDcg
QEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQKIHsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOwogCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2Nr
ZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhlYXApOwogCiAgICAgc3dpdGNoIChzaG91bGRQaW4p
IHsKICAgICBjYXNlIFNob3VsZFBpbjo6WWVzOgpAQCAtNDYwLDEwICs0OTIsMTEgQEAgaW5saW5l
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQKIAogICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwog
Ci0gICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQobV9pbmxp
bmVDYXBhY2l0eSk7CisgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gdGFibGUtPm5leHRP
ZmZzZXQoaW5saW5lQ2FwYWNpdHkoKSk7CiAKLSAgICBtX3Byb3BlcnR5SGFzaCA9IG1fcHJvcGVy
dHlIYXNoIF4gcmVwLT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOwotICAgIG1fc2VlblByb3Bl
cnRpZXMuYWRkKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHJlcCkpOworICAgIHVuc2lnbmVkIGhh
c2hDb2RlID0gcmVwLT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOworICAgIHNldFByb3BlcnR5
SGFzaChwcm9wZXJ0eUhhc2goKSBeIGhhc2hDb2RlKTsKKyAgICBtX3NlZW5Qcm9wZXJ0aWVzID0g
bV9zZWVuUHJvcGVydGllcyB8IGhhc2hDb2RlOwogCiAgICAgYXV0byByZXN1bHQgPSB0YWJsZS0+
YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMpKTsKICAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LnNlY29uZCk7CkBAIC00ODIsNyArNTE1LDcgQEAg
dGVtcGxhdGU8U3RydWN0dXJlOjpTaG91bGRQaW4gc2hvdWxkUGluLCB0eXBlbmFtZSBGdW5jPgog
aW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBQcm9wZXJ0eVRhYmxl
KiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOwotICAgIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlND
ZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygpLCB2bS5oZWFwKTsKIAogICAgIHN3aXRjaCAoc2hv
dWxkUGluKSB7CiAgICAgY2FzZSBTaG91bGRQaW46OlllczoKQEAgLTUzMiw3ICs1NjUsNyBAQCBp
bmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKFZNJiB2bSwgUHJvcGVydAogewogICAgIEFTU0VSVChpc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKTsKICAgICBBU1NFUlQoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpOwotICAgIEFTU0VS
VChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOworICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlVW5zYWZl
T3JOdWxsKCkpOwogICAgIAogICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpZZXM+KHZtLCBw
cm9wZXJ0eU5hbWUsIGZ1bmMpOwogfQpAQCAtNTUwLDcgKzU4Myw0MyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgU3RydWN0dXJlOjpzZXRHbG9iYWxPYmplY3QoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpzZXRQcm9wZXJ0eVRh
YmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7CisjaWYgQ1BVKEFERFJFU1M2NCkK
KyAgICB1aW50cHRyX3QgdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0YWJsZSkgfCAo
bV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxlVW5zYWZlICYgb3V0T2ZMaW5lVHlw
ZUZsYWdzU2hpZnRlZE1hc2spOworICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlU
YWJsZVVuc2FmZSA9IHZhbHVlOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHRhYmxl
KTsKKyNlbHNlCiAgICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLnNldE1heUJlTnVsbCh2bSwgdGhp
cywgdGFibGUpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OmNs
ZWFyUHJvcGVydHlUYWJsZSgpCit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICB1aW50cHRyX3Qg
dmFsdWUgPSBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUgJiBvdXRP
ZkxpbmVUeXBlRmxhZ3NTaGlmdGVkTWFzazsKKyAgICBtX291dE9mTGluZVR5cGVGbGFnc0FuZFBy
b3BlcnR5VGFibGVVbnNhZmUgPSB2YWx1ZTsKKyNlbHNlCisgICAgbV9wcm9wZXJ0eVRhYmxlVW5z
YWZlLmNsZWFyKCk7CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6
c2V0T3V0T2ZMaW5lVHlwZUZsYWdzKFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3Mgb3V0T2ZM
aW5lVHlwZUZsYWdzKQoreworI2lmIENQVShBRERSRVNTNjQpCisgICAgdWludHB0cl90IHZhbHVl
ID0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4ob3V0T2ZMaW5lVHlwZUZsYWdzKSA8PCBvdXRPZkxp
bmVUeXBlRmxhZ3NTaGlmdCkgfCAobV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxl
VW5zYWZlICYgcHJvcGVydHlUYWJsZVVuc2FmZU1hc2spOworICAgIG1fb3V0T2ZMaW5lVHlwZUZs
YWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZSA9IHZhbHVlOworI2Vsc2UKKyAgICBtX291dE9mTGlu
ZVR5cGVGbGFncyA9IG91dE9mTGluZVR5cGVGbGFnczsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQgU3RydWN0dXJlOjpzZXRDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8pCit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICB1aW50cHRyX3QgdmFsdWUgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihjbGFzc0luZm8pIHwgKG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNz
SW5mbyAmIHRyYW5zaXRpb25PZmZzZXRTaGlmdGVkTWFzayk7CisgICAgbV90cmFuc2l0aW9uT2Zm
c2V0QW5kQ2xhc3NJbmZvID0gdmFsdWU7CisjZWxzZQorICAgIG1fY2xhc3NJbmZvID0gY2xhc3NJ
bmZvOworI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldFByZXZp
b3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKaW5kZXgg
ZjQ4OTI4Y2YzYjI5NTY2ZTIyNzBkODZmNjAyMzQzODVlYWJiODU4OS4uNmNjYjdhYjZmZjQ2Nzk2
ZTgzMmFmNDZiYWRiZTQwYzMxMmI1ZGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKQEAgLTM5LDggKzM5
LDggQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmlidXRlID0g
MSA8PCA2OyAvLyBVc2UgZm9yIHRyYW5zaXRpb24KIAogLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRl
cyB1c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMu
CiAvLyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUg
a2V5IHNob3VsZCBiZSAwLgotZW51bSBjbGFzcyBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gOiB1bnNp
Z25lZCB7Ci0gICAgQWxsb2NhdGVVbmRlY2lkZWQsCitlbnVtIGNsYXNzIE5vblByb3BlcnR5VHJh
bnNpdGlvbiA6IHVpbnQ4X3QgeworICAgIEFsbG9jYXRlVW5kZWNpZGVkID0gMCwKICAgICBBbGxv
Y2F0ZUludDMyLAogICAgIEFsbG9jYXRlRG91YmxlLAogICAgIEFsbG9jYXRlQ29udGlndW91cywK
QEAgLTUwLDE0ICs1MCwxNiBAQCBlbnVtIGNsYXNzIE5vblByb3BlcnR5VHJhbnNpdGlvbiA6IHVu
c2lnbmVkIHsKICAgICBBZGRJbmRleGVkQWNjZXNzb3JzLAogICAgIFByZXZlbnRFeHRlbnNpb25z
LAogICAgIFNlYWwsCi0gICAgRnJlZXplCisgICAgRnJlZXplLAorICAgIExhc3RPZk5vblByb3Bl
cnR5VHJhbnNpdGlvbiA9IEZyZWV6ZSwKIH07Ci11c2luZyBUcmFuc2l0aW9uUHJvcGVydHlBdHRy
aWJ1dGVzID0gdWludDE2X3Q7Cit1c2luZyBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzID0g
dWludDhfdDsKIAotaW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eVRyYW5z
aXRpb24gdHJhbnNpdGlvbikKK2lubGluZSBjb25zdGV4cHIgdWludDhfdCB0b0F0dHJpYnV0ZXMo
Tm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCiB7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPih0cmFuc2l0aW9uKSArIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGU7CiB9Citz
dGF0aWNfYXNzZXJ0KHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eVRyYW5zaXRpb246Okxhc3RPZk5v
blByb3BlcnR5VHJhbnNpdGlvbikgPD0gVUlOVDhfTUFYKTsKIAogaW5saW5lIGJvb2wgY2hhbmdl
c0luZGV4aW5nVHlwZShOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKIHsKQEAgLTIz
MSw3ICsyMzMsNyBAQCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogCiBwdWJsaWM6
CiAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKCkKLSAgICAgICAgOiBtX2RhdGEoVXNpbmdT
aW5nbGVTbG90RmxhZykKKyAgICAgICAgOiBtX2RhdGEoYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihV
c2luZ1NpbmdsZVNsb3RGbGFnKSkKICAgICB7CiAgICAgfQogCkBAIC0yNTcsMTkgKzI1OSwxOSBA
QCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogCiAgICAgYm9vbCBpc1VzaW5nU2lu
Z2xlU2xvdCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9kYXRhICYgVXNpbmdTaW5n
bGVTbG90RmxhZzsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fZGF0
YS5nZXQoKSkgJiBVc2luZ1NpbmdsZVNsb3RGbGFnOwogICAgIH0KIAogICAgIFRyYW5zaXRpb25N
YXAqIG1hcCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzVXNpbmdTaW5nbGVTbG90
KCkpOwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFRyYW5zaXRpb25NYXAqPihtX2RhdGEp
OworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFRyYW5zaXRpb25NYXAqPihtX2RhdGEuZ2V0
KCkpOwogICAgIH0KIAogICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8V2Vha0ltcGwqPihtX2RhdGEgJiB+VXNpbmdTaW5nbGVTbG90RmxhZyk7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8V2Vha0ltcGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Piht
X2RhdGEuZ2V0KCkpICYgflVzaW5nU2luZ2xlU2xvdEZsYWcpOwogICAgIH0KIAogICAgIHZvaWQg
c2V0TWFwKFRyYW5zaXRpb25NYXAqIG1hcCkKQEAgLTI4MCw3ICsyODIsNyBAQCBjbGFzcyBTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShp
bXBsKTsKIAogICAgICAgICAvLyBUaGlzIGltcGxpY2l0bHkgY2xlYXJzIHRoZSBmbGFnIHRoYXQg
aW5kaWNhdGVzIHdlJ3JlIHVzaW5nIGEgc2luZ2xlIHRyYW5zaXRpb24KLSAgICAgICAgbV9kYXRh
ID0gYml0d2lzZV9jYXN0PGludHB0cl90PihtYXApOworICAgICAgICBtX2RhdGEgPSBiaXR3aXNl
X2Nhc3Q8dWludDhfdCo+KG1hcCk7CiAKICAgICAgICAgQVNTRVJUKCFpc1VzaW5nU2luZ2xlU2xv
dCgpKTsKICAgICB9CkBAIC0yODgsNyArMjkwLDExIEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZSB7CiAgICAgU3RydWN0dXJlKiBzaW5nbGVUcmFuc2l0aW9uKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRTaW5nbGVUcmFuc2l0aW9uKFN0cnVjdHVyZSopOwogCi0gICAgaW50cHRyX3QgbV9k
YXRhOworI2lmIENQVShBRERSRVNTNjQpCisgICAgUGFja2VkUHRyPHVpbnQ4X3Q+IG1fZGF0YTsK
KyNlbHNlCisgICAgTmFrZWRQdHI8dWludDhfdD4gbV9kYXRhOworI2VuZGlmCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dyaXRlQmFycmllci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJy
aWVyLmgKaW5kZXggNzA3ZTIwYjZlNWFjM2Y2YmJiYzk3Yzk1NWRkMWUwMTdmNjBkMjIwMi4uZjdk
NDQ3MTk5NDA5OGM0MjE4ZWQwYTY4NzZiZGY1MjJiMzQ0MjZjZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKQEAgLTI0OCw0ICsyNDgsNiBAQCBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VSwgVHJhaXRzVT4mIGxo
cywgY29uc3QgV3JpdGVCYXJyaQogICAgIHJldHVybiBsaHMuZ2V0KCkgPT0gcmhzLmdldCgpOwog
fQogCit1c2luZyBVbnNhZmVDZWxsUG9pbnRlciA9IHVpbnRwdHJfdDsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwCmluZGV4IDQ0Zjk5YmVjOTk3MmI1NzkyZWMxYjg3MTQzOTMzNzAwMjBh
YjNlNjUuLmM1OWEyMzE2MGY0NGQzMTdiNmNjY2EzZmYwMWQ5ZjY1NDc1ODRkOTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCkBAIC0yNzQsNyArMjc0LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKIAogICAgICAg
ICAgICAgc3RhY2tMaW1pdEdQUklzQ2xvYmJlcmVkID0gdHJ1ZTsKICAgICAgICAgICAgIGppdC5l
bWl0TG9hZFN0cnVjdHVyZSh2bSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwgc3RhY2tMaW1pdEdQ
Uik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6b2Zmc2V0T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJp
dHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSksIHNjcmF0Y2hHUFIp
OwogCiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8V2ViQXNzZW1ibHlG
dW5jdGlvbj46OnZhbHVlLCAiV2UgZG8gbm90IGNoZWNrIGZvciBzdWJ0eXBlcyBiZWxvdyIpOwog
ICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsPFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uPjo6dmFsdWUsICJXZSBkbyBub3QgY2hlY2sgZm9yIHN1YnR5cGVzIGJlbG93Iik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IDZiYmJlZmU3MGZjMWMxMzAyZjQ5NWVjM2Y2
ZTJhNDQxMDI1ZTZkNmEuLjAwNDM1NjM0MWY3NDcxOTY0NmYxNTgxNDUzNmY3NTA3ZDQxMmYzNDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0xODksOCArMTg5LDggQEAgY2xhc3MgU3Ry
aW5nSW1wbCA6IHByaXZhdGUgU3RyaW5nSW1wbFNoYXBlIHsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgTWF4TGVuZ3RoID0gU3RyaW5nSW1wbFNoYXBlOjpNYXhMZW5ndGg7CiAKLSAg
ICAvLyBUaGUgYm90dG9tIDYgYml0cyBpbiB0aGUgaGFzaCBhcmUgZmxhZ3MuCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDY7CisgICAgLy8gVGhlIGJv
dHRvbSA2IGJpdHMgaW4gdGhlIGhhc2ggYXJlIGZsYWdzLCBidXQgcmVzZXJ2ZSA4IGJpdHMgc2lu
Y2UgU3RyaW5nSGFzaCBvbmx5IGhhcyAyNCBiaXRzIGFueXdheS4KKyAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ0NvdW50ID0gODsKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ01hc2sgPSAoMXUgPDwgc19mbGFnQ291
bnQpIC0gMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5oIGIv
U291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmgKaW5kZXggZWQwZjEzZTU0NGYxMGMzMWI0
MTliZWFhYTgyNTIzNzRhODcwYWM3My4uYjhjYzM4Y2Q2ZTM1MDFkZGVhNjU5NmI2YzBlYjYyNmRi
YTRhYjExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmgKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xh
c3MgU3ltYm9sSW1wbCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5nSW1wbCB7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBGbGFncyBzX2ZsYWdJc1JlZ2lzdGVyZWQgPSAwYjAxMHU7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBGbGFncyBzX2ZsYWdJc1ByaXZhdGUgPSAwYjEwMHU7CiAKLSAgICB1bnNpZ25lZCBo
YXNoRm9yU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoRm9yU3ltYm9sOyB9CisgICAgdW5z
aWduZWQgaGFzaEZvclN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEZvclN5bWJvbCA+PiBz
X2ZsYWdDb3VudDsgfQogICAgIGJvb2wgaXNOdWxsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV9m
bGFncyAmIHNfZmxhZ0lzTnVsbFN5bWJvbDsgfQogICAgIGJvb2wgaXNSZWdpc3RlcmVkKCkgY29u
c3QgeyByZXR1cm4gbV9mbGFncyAmIHNfZmxhZ0lzUmVnaXN0ZXJlZDsgfQogICAgIGJvb2wgaXNQ
cml2YXRlKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIHNfZmxhZ0lzUHJpdmF0ZTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391023</attachid>
            <date>2020-02-17 20:26:01 -0800</date>
            <delta_ts>2020-02-21 18:55:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207827-20200217202600.patch</filename>
            <type>text/plain</type>
            <size>84379</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NzYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MTBiMDVmMjk5NDNkNWJlNmUyNzA4ZDIyZGViNTI2MTUyMzAyMDczLi5jZTI5NDBlNjljNGUwNTE4
YTg5YzNkODg5MTY3NjAxYjNkY2VmMGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDggQEAKKzIwMjAtMDItMTcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNocmlua3Mgc2l6ZW9mKFN0
cnVjdHVyZSkgZnJvbSAxMTIgdG8gOTYgKDE2IGJ5dGVzKSBpbiA2NCBiaXQgYXJjaGl0ZWN0dXJl
cy4KKyAgICAgICAgU3RydWN0dXJlIGlzIG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IGFsbG9j
YXRlZCBKU0NlbGwgaW4gSlNDLiBTbyBpdCBpcyB3b3J0aCBkb2luZworICAgICAgICBhbGwgdGhl
IHNvcnQgb2YgYml0IGhhY2tzIHRvIG1ha2UgaXQgY29tcGFjdCBhcyBtdWNoIGFzIHBvc3NpYmxl
LgorCisgICAgICAgICAgICAxLiBTdHJpbmdIYXNoZXIgaXMgYWx3YXlzIGdlbmVyYXRpbmcgMjQg
Yml0cyBoYXNoZXMgc28gZmFyLiBCeSBsZXZlcmFnaW5nIHRoaXMgZmFjdCwKKyAgICAgICAgICAg
ICAgIHdlIHN0b3JlIGhhc2ggY29kZSBpbiBTdHJ1Y3R1cmUgaW4gMyBieXRlcyAoMjQgYml0cykg
Zm9yIHByb3BlcnR5LWhhc2ggYW5kIHNlZW4tcHJvcGVydHktaGFzaC4KKyAgICAgICAgICAgIDIu
IEluc3RlYWQgb2YgdXNpbmcgYmxvb20tZmlsdGVyIG9mIHBvaW50ZXJzIGZvciBzZWVuLXByb3Bl
cnRpZXMsIHdlIHNob3VsZCB1c2UgYmxvb20tZmlsdGVyIG9mIGhhc2gtY29kZXMuCisgICAgICAg
ICAgICAzLiBVc2VkIFBhY2tlZFB0ciBmb3IgQysrIG5vbi1jb25jdXJyZW50bHkgYWNjZXNzZWQg
ZGF0YSBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgNC4gUHV0IG91dE9mTGluZVR5cGVGbGFncywg
bWF4T2Zmc2V0IGFuZCB0cmFuc2l0aW9uT2Zmc2V0IGludG8gaGlnaGVzdCBiaXRzIG9mIG1fcHJv
cGVydHlUYWJsZVVuc2FmZSwKKyAgICAgICAgICAgICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4s
IGFuZCBtX2NsYXNzSW5mby4gRG8gbm90IHVzZSBQYWNrZWRQdHIgaGVyZSBzaW5jZSBzb21lIG9m
IHRoZW0gYXJlIGNvbmN1cnJlbnRseSBhY2Nlc3NlZAorICAgICAgICAgICAgICAgYnkgR0MuCisg
ICAgICAgICAgICA1LiBQdXQgbV9pbmxpbmVDYXBhY2l0eSBpbnRvIGxvd2VyIDggYml0cyBvZiBt
X3Byb3BlcnR5SGFzaC4KKyAgICAgICAgICAgIDYuIFJlbW92ZSBtX2xvY2ssIGFuZCB1c2UgU3Ry
dWN0dXJlOjpjZWxsTG9jaygpIGluc3RlYWQuCisKKyAgICAgICAgQ29tYmluaW5nIGFsbCBvZiB0
aGUgYWJvdmUgdGVjaG5pcXVlcyBhbmQgZ2V0dGluZyAxNiBieXRlcy4KKworICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUNyZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlUHJvbWlzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDcmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KToKKyAgICAgICAgKiBmdGwv
RlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1Rv
QjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3Jl
YXRlUHJvbWlzZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVDcmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUNoZWNrU3ViQ2xhc3MpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKToKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6Cisg
ICAgICAgIChKU0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0NvbmN1cnJlbnRKU0xvY2suaDoKKyAgICAgICAgKEpTQzo6Q29uY3VycmVudEpT
TG9ja2VyQmFzZTo6Q29uY3VycmVudEpTTG9ja2VyQmFzZSk6CisgICAgICAgIChKU0M6OkdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlckltcGw6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwpOgor
ICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsOjp+R0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VySW1wbCk6CisgICAgICAgIChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlckltcGw6
OkNvbmN1cnJlbnRKU0xvY2tlckltcGwpOgorICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXI6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcjo6fkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlcjo6Q29uY3VycmVudEpT
TG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0
ZW5pbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldERpcmVjdENvbmN1cnJlbnRseSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9K
U09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXBhcmVUb1B1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2V0U2luZ2xlVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZv
ck1hdGVyaWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQ
cm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dG9E
aWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dGFrZVByb3Bl
cnR5VGFibGVPckNsb25lSWZQaW5uZWQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvblNsb3cpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZsYXR0ZW5E
aWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjplbnN1cmVQcm9w
ZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjph
ZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FuQ2Fj
aGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmdldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Zm9yRWFjaFBy
b3BlcnR5Q29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjYWNoZWRQcm90
b3R5cGVDaGFpbiBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0Q2FjaGVkUHJv
dG90eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsZWFyQ2FjaGVkUHJvdG90
eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2lu
dFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSBj
b25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldFByb3BlcnR5
VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsZWFyUHJvcGVydHlUYWJsZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0T3V0T2ZMaW5lVHlwZUZsYWdzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpzZXRDbGFzc0luZm8pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAgIChKU0M6OnRvQXR0cmlidXRlcyk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6U3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjppc1VzaW5nU2lu
Z2xlU2xvdCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6
bWFwIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjp3ZWFr
SW1wbCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2V0
TWFwKToKKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllci5oOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVu
Y3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKwogMjAyMC0wMi0xNyAgUGVyIEFybmUgVm9s
bGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFjaCBsb29rdXAgdG8gY29tLmFw
cGxlLndlYmluc3BlY3RvciBzaG91bGQgbm90IGJlIGFsbG93ZWQgaW4gV2ViS2l0J3MgV2ViQ29u
dGVudCBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IGQ4NjNjNjU2ZWQyYmM5MDZkZWQyN2I1YTg2YWI3YzdlZjBhNGUy
MjMuLjU2ZTdkZjA1MDRjMWE3MjFlMmZjNTczYmE2ZjBlODRlMTQyMTg4ZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMjAtMDItMTcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
KworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAg
ICAgKiB3dGYvdGV4dC9TeW1ib2xJbXBsLmg6CisgICAgICAgIChXVEY6OlN5bWJvbEltcGw6Omhh
c2hGb3JTeW1ib2wgY29uc3QpOgorCiAyMDIwLTAyLTE3ICBWw61jdG9yIE1hbnVlbCBKw6FxdWV6
IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgYSBsb3QgZ2NjIHdhcm5pbmdz
IGJlY2F1c2Ugb2YgJXtwdWJsaWN9cyBmb3JtYXQgc3BlY2lmaWVyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDY0MmIxNjM1NmY5MGU5
YzM4NjAyZWJjNTdmZDllMDRhMGY0NWI1MjguLjMyZGNmZDAyMDI3YzZlNTE4OGY3MjY4MTJiYzRm
YzI4NWJlOGVjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCkBAIC05NjA1LDcgKzk2MDUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNoZWNrU3ViQ2xhc3MoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHNwZWNpZmll
ZEdQUiA9IHNwZWNpZmllZC5ncHIoKTsKIAogICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBiYXNlR1BSLCBvdGhlckdQUiwgc3BlY2lmaWVkR1BSKTsKLSAgICAgICAgbV9qaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3RoZXJHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCBvdGhlckdQUik7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgbV9q
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3RoZXJHUFIsIFN0cnVjdHVyZTo6b2Zm
c2V0T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKCkpLCBvdGhlckdQUik7CisgICAgICAg
IG1faml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZv
aWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKSwgb3RoZXJHUFIpOworI2Vsc2UKKyAgICAg
ICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3RoZXJHUFIsIFN0cnVjdHVy
ZTo6b2Zmc2V0T2ZDbGFzc0luZm8oKSksIG90aGVyR1BSKTsKKyNlbmRpZgogICAgICAgICBtX2pp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihub2RlLT5jbGFzc0luZm8oKSksIHNw
ZWNpZmllZEdQUik7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBsb29wID0gbV9qaXQu
bGFiZWwoKTsKQEAgLTEyODM5LDcgKzEyODQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZVRoaXMoTm9kZSogbm9kZSkKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJ
bW1QdHIobnVsbHB0cik7CiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRB
bGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJm
bHksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAotICAgIG1faml0LmxvYWQ4KEpJVENvbXBpbGVy
OjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgaW5saW5lQ2FwYWNpdHlHUFIpOworICAgIG1faml0LmxvYWQ4KEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpLCBp
bmxpbmVDYXBhY2l0eUdQUik7CiAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdl
KHJlc3VsdEdQUiwgaW5saW5lQ2FwYWNpdHlHUFIpOwogICAgIG1faml0Lm11dGF0b3JGZW5jZSh2
bSgpKTsKIApAQCAtMTI4NzcsOCArMTI4ODIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZVByb21pc2UoTm9kZSogbm9kZSkKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgpICsgSW50ZXJu
YWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5j
dGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVHUFIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIHN0cnVjdHVyZUdQUikpOwot
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8g
SlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSA6IEpTUHJvbWlzZTo6aW5mbygpKSwgc2NyYXRjaDFH
UFIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BS
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSkpOworI2lmIENQVShBRERSRVNTNjQpCisg
ICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1
Y3R1cmU6Om9mZnNldE9mVHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbygpKSwgc2NyYXRjaDFH
UFIpOworICAgIG1faml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lz
ZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKSwgc2NyYXRjaDFHUFIpOwor
I2Vsc2UKKyAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVH
UFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZDbGFzc0luZm8oKSksIHNjcmF0Y2gxR1BSKTsKKyNlbmRp
ZgorICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmlzSW50ZXJuYWxQcm9taXNl
KCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpKSk7CiAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBn
bG9iYWxPYmplY3QpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
KSk7CiAKQEAgLTEyOTI1LDggKzEyOTM1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDcmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KE5vZGUqIG5vZGUsIE9wZXJhdGlvbiBvcGVyCiAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByYXJlRGF0YUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpKSk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhy
YXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZJbnRlcm5hbEZ1bmN0aW9uQWxs
b2NhdGlvblByb2ZpbGUoKSArIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6b2Zm
c2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlR1BS
KTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJz
OjpaZXJvLCBzdHJ1Y3R1cmVHUFIpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoSlND
bGFzczo6aW5mbygpKSwgc2NyYXRjaDFHUFIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSkp
OworI2lmIENQVShBRERSRVNTNjQpCisgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6Om9mZnNldE9mVHJhbnNpdGlvbk9mZnNldEFu
ZENsYXNzSW5mbygpKSwgc2NyYXRjaDFHUFIpOworICAgIG1faml0LmFuZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5m
b01hc2spKSwgc2NyYXRjaDFHUFIpOworI2Vsc2UKKyAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZDbGFzc0luZm8o
KSksIHNjcmF0Y2gxR1BSKTsKKyNlbmRpZgorICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRy
KEpTQ2xhc3M6OmluZm8oKSkpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1faml0LmdyYXBoKCksIGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBz
Y3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAppbmRleCBiMTA4YWJmY2NiODk1
OGE4MzA3YzBhYTc4Y2Q2N2YyMDJkM2I4YzVjLi5lMGRjMjg5MDZhYjAyY2NlZGQ3OWQ4YjgyMTBk
MTI5OWZhNjA5NzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaApAQCAtMTM5LDEwICsxMzksMTAgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5n
SW1wbDo6ZGF0YU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3Ms
IFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2xlbmd0
aCwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpIFwKLSAgICBtYWNybyhTdHJ1Y3R1
cmVfY2xhc3NJbmZvLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCisgICAgbWFjcm8o
U3RydWN0dXJlX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8sIFN0cnVjdHVyZTo6b2Zmc2V0
T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVf
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSBcCiAgICAgbWFj
cm8oU3RydWN0dXJlX2luZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnksIFN0cnVjdHVyZTo6aW5k
ZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpKSBcCi0gICAgbWFjcm8oU3RydWN0dXJl
X2lubGluZUNhcGFjaXR5LCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpIFwKKyAg
ICBtYWNybyhTdHJ1Y3R1cmVfaW5saW5lQ2FwYWNpdHksIFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxp
bmVDYXBhY2l0eSgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3ByZXZpb3VzT3JSYXJlRGF0YSwg
U3RydWN0dXJlOjpwcmV2aW91c09yUmFyZURhdGFPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVj
dHVyZV9wcm90b3R5cGUsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpIFwKICAgICBtYWNy
byhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSkg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4
IDRkMzQyN2JjODJlOGM5YjI0N2FjODcxYTAyMDAwMWJiMjM4MjlmMjYuLjc2M2Y4NDczMGU4MGY1
MjFiMjk1YTE2ZmJjZWM4NmU0ZDU2YjliOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTY2NzUsNyArNjY3NSw4IEBAIGNsYXNzIExvd2Vy
REZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChzdHJ1Y3R1cmUp
LCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOwogCiAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGhhc1N0cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmplY3RDYXNlKTsKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hl
YXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5jb25zdEludFB0cihtX25vZGUtPmlzSW50
ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjpp
bmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nhc2Up
KTsKKyAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmJpdEFuZChtX291dC5sb2FkUHRy
KHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5m
byksIG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFzaykpOworICAgICAg
ICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0ciht
X25vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpIDog
SlNQcm9taXNlOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJl
bHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0dsb2JhbE9iamVj
dENhc2UsIGZhc3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGRlcml2
ZWRTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3Ioc3RydWN0dXJlKTsKQEAgLTY3MzAsNyArNjczMSw4
IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1pl
cm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkp
OwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmpl
Y3RDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIo
c3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5jb25zdEludFB0
cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJl
bHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmJpdEFuZCht
X291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfdHJhbnNpdGlvbk9mZnNl
dEFuZENsYXNzSW5mbyksIG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFz
aykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5j
b25zdEludFB0cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENh
c2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0ds
b2JhbE9iamVjdENhc2UsIGZhc3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAgICAgIG1fb3V0LmJyYW5j
aChtX291dC5lcXVhbChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVf
Z2xvYmFsT2JqZWN0KSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSksIHVzdWFsbHkoZmFzdEFs
bG9jYXRpb25DYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CkBAIC0xMzIwOCw3ICsxMzIxMCw3IEBA
IGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOwogCiAgICAgICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0g
bG9hZFN0cnVjdHVyZShjZWxsKTsKLSAgICAgICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291
dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKTsKKyAgICAg
ICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5iaXRBbmQobV9vdXQubG9hZFB0cihzdHJ1
Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8pLCBt
X291dC5jb25zdEludFB0cihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKTsKICAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIG90aGVyQXRTdGFydCA9IG1fb3V0LmFuY2hvcihjbGFzc0luZm8pOwog
ICAgICAgICAgICAgbV9vdXQuanVtcChsb29wKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKaW5kZXggN2YzNThjMTIwM2JkZWFlOTBkNDRhMmM3ZmI4ODk5NzgwODlj
YTg1Zi4uZmRlMDBiY2M4YzkwNDU5Yzc1MzQ1MDYyYTYxMWRjMWRlNDI5Y2ZlZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC05NzksNyArOTc5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgYXV0byBidXR0ZXJmbHkgPSBU
cnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJl
ZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywg
YnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGxvYWQ4KEFkZHJlc3Moc3Ry
dWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVn
KTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjpvZmZzZXRPZklu
bGluZUNhcGFjaXR5KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0
b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGNkNjY3YjJlNTg3
ODIwZTM3MzVjZDM4MTM5MzZmOTZhOThjNzk2NmEuLmIxMWY2NTVmY2I2ZjY2MDU1Mjc5OWMxMmEx
MGNjYmY5MTkwZTg2MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKQEAgLTEwOTMsNyArMTA5Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRy
KTsKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFy
aWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJl
Zywgc2xvd0Nhc2VzKTsKLSAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJl
OjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgbG9hZDgoQWRkcmVz
cyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2Ny
YXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2Ny
YXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICBlbWl0U3RvcmVDZWxs
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKaW5kZXggOTZhMzYzNWU2ODI3MzkzZWU4MzZk
ODA0Nzc3MjRhMjVkNTQ2YzI2MS4uMjQ5YmE1YWFjNTFlNTA5MGNmMjNmN2Y5ZThlOWU0N2JjMjFl
ZjQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJn
dW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1
bWVudHMuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgU3RydWN0dXJlKiBDbG9uZWRBcmd1bWVudHM6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2xvbmVkQXJndW1lbnRzVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCksIGluZGV4aW5nVHlwZSk7CiAgICAgc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKAogICAgICAgICB2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwKLSAgICAg
ICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAgICAgICBbJl0gKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFBy
b3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
b2Zmc2V0ID09IGNsb25lZEFyZ3VtZW50c0xlbmd0aFByb3BlcnR5T2Zmc2V0KTsKICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+c2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQpOwogICAgICAgICB9
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRK
U0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2su
aAppbmRleCBhYTI3M2JhZGJlZmE3MzdhMGVhYTUzNGZiZWJhOWY1MDFmZGI4NjI3Li45NWViYTBi
ZjNmOWEyMDA1YjY0NTJlYWRmN2NlMGE0MjVjYTU2YTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SlNMb2NrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpTTG9jay5oCkBAIC0zMywxOCArMzMsMTggQEAK
IG5hbWVzcGFjZSBKU0MgewogCiB1c2luZyBDb25jdXJyZW50SlNMb2NrID0gTG9jazsKLXVzaW5n
IENvbmN1cnJlbnRKU0xvY2tlckltcGwgPSBMb2NrSG9sZGVyOwogCiBzdGF0aWNfYXNzZXJ0KHNp
emVvZihDb25jdXJyZW50SlNMb2NrKSA9PSAxLCAiUmVnYXJkbGVzcyBvZiBzdGF0dXMgb2YgY29u
Y3VycmVudCBKUyBmbGFnLCBzaXplIG9mIENvbnVycmVudEpTTG9jayBpcyBhbHdheXMgb25lIGJ5
dGUuIik7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2s+CiBjbGFzcyBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlIDogcHVibGljIEFic3RyYWN0TG9ja2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDb25jdXJyZW50SlNMb2NrZXJCYXNlKTsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDb25jdXJy
ZW50SlNMb2NrZXJCYXNlKENvbmN1cnJlbnRKU0xvY2smIGxvY2thYmxlKQorICAgIGV4cGxpY2l0
IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoTG9jayYgbG9ja2FibGUpCiAgICAgICAgIDogbV9sb2Nr
ZXIoJmxvY2thYmxlKQogICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9j
a2VyQmFzZShDb25jdXJyZW50SlNMb2NrKiBsb2NrYWJsZSkKKyAgICBleHBsaWNpdCBDb25jdXJy
ZW50SlNMb2NrZXJCYXNlKExvY2sqIGxvY2thYmxlKQogICAgICAgICA6IG1fbG9ja2VyKGxvY2th
YmxlKQogICAgIHsKICAgICB9CkBAIC02NCw2MyArNjQsNjUgQEAgY2xhc3MgQ29uY3VycmVudEpT
TG9ja2VyQmFzZSA6IHB1YmxpYyBBYnN0cmFjdExvY2tlciB7CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIENvbmN1cnJlbnRKU0xvY2tlckltcGwgbV9sb2NrZXI7CisgICAgTG9ja2VyPExvY2s+IG1f
bG9ja2VyOwogfTsKIAotY2xhc3MgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIDogcHVibGljIENv
bmN1cnJlbnRKU0xvY2tlckJhc2UgewordGVtcGxhdGU8dHlwZW5hbWUgTG9jaz4KK2NsYXNzIEdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwgOiBwdWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFz
ZTxMb2NrPiB7CiBwdWJsaWM6Ci0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKENvbmN1cnJl
bnRKU0xvY2smIGxvY2thYmxlLCBIZWFwJiBoZWFwKQotICAgICAgICA6IENvbmN1cnJlbnRKU0xv
Y2tlckJhc2UobG9ja2FibGUpCisgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbChMb2Nr
JiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNl
PExvY2s+KGxvY2thYmxlKQogICAgICAgICAsIG1fZGVmZXJHQyhoZWFwKQogICAgIHsKICAgICB9
CiAKLSAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIoQ29uY3VycmVudEpTTG9jayogbG9ja2Fi
bGUsIEhlYXAmIGhlYXApCi0gICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJs
ZSkKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsKExvY2sqIGxvY2thYmxlLCBIZWFw
JiBoZWFwKQorICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4obG9ja2FibGUp
CiAgICAgICAgICwgbV9kZWZlckdDKGhlYXApCiAgICAgewogICAgIH0KIAotICAgIH5HQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXIoKQorICAgIH5HQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsKCkK
ICAgICB7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gdW5sb2NrIGVhcmx5IGR1ZSB0byB0aGUgZGVz
dHJ1Y3Rpb24gb3JkZXIgb2YgYmFzZQogICAgICAgICAvLyB2cy4gZGVyaXZlZCBjbGFzc2VzLiBJ
ZiB3ZSBkaWRuJ3QsIHRoZW4gd2Ugd291bGQgZGVzdHJveSB0aGUgCiAgICAgICAgIC8vIERlZmVy
R0Mgb2JqZWN0IGJlZm9yZSB1bmxvY2tpbmcgdGhlIGxvY2sgd2hpY2ggY291bGQgY2F1c2UgYSBH
QwogICAgICAgICAvLyBhbmQgcmVzdWx0aW5nIGRlYWRsb2NrLgotICAgICAgICB1bmxvY2tFYXJs
eSgpOworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+Ojp1bmxvY2tFYXJseSgp
OwogICAgIH0KIAogcHJpdmF0ZToKICAgICBEZWZlckdDIG1fZGVmZXJHQzsKIH07CiAKLWNsYXNz
IENvbmN1cnJlbnRKU0xvY2tlciA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIHsKK3Rl
bXBsYXRlPHR5cGVuYW1lIExvY2s+CitjbGFzcyBDb25jdXJyZW50SlNMb2NrZXJJbXBsIDogcHVi
bGljIENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4gewogcHVibGljOgotICAgIENvbmN1cnJl
bnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrJiBsb2NrYWJsZSkKLSAgICAgICAgOiBDb25jdXJy
ZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAgIENvbmN1cnJlbnRKU0xvY2tlckltcGwoTG9j
ayYgbG9ja2FibGUpCisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPihsb2Nr
YWJsZSkKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgICAgICwgbV9kaXNhbGxvd0dDKHN0ZDo6
aW5fcGxhY2UpCiAjZW5kaWYKICAgICB7CiAgICAgfQogCi0gICAgQ29uY3VycmVudEpTTG9ja2Vy
KENvbmN1cnJlbnRKU0xvY2sqIGxvY2thYmxlKQotICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tl
ckJhc2UobG9ja2FibGUpCisgICAgQ29uY3VycmVudEpTTG9ja2VySW1wbChMb2NrKiBsb2NrYWJs
ZSkKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+KGxvY2thYmxlKQogI2lm
ICFkZWZpbmVkKE5ERUJVRykKICAgICAgICAgLCBtX2Rpc2FsbG93R0Moc3RkOjppbl9wbGFjZSkK
ICNlbmRpZgogICAgIHsKICAgICB9CiAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIoTm9Mb2NraW5n
TmVjZXNzYXJ5VGFnKQotICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoTm9Mb2NraW5n
TmVjZXNzYXJ5KQorICAgIENvbmN1cnJlbnRKU0xvY2tlckltcGwoTm9Mb2NraW5nTmVjZXNzYXJ5
VGFnKQorICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4oTm9Mb2NraW5nTmVj
ZXNzYXJ5KQogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICAgICAgLCBtX2Rpc2FsbG93R0MoV1RG
OjpudWxsb3B0KQogI2VuZGlmCiAgICAgewogICAgIH0KICAgICAKLSAgICBDb25jdXJyZW50SlNM
b2NrZXIoaW50KSA9IGRlbGV0ZTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXJJbXBsKGludCkgPSBk
ZWxldGU7CiAKICNpZiAhZGVmaW5lZChOREVCVUcpCiBwcml2YXRlOgpAQCAtMTI4LDQgKzEzMCw3
IEBAIGNsYXNzIENvbmN1cnJlbnRKU0xvY2tlciA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJC
YXNlIHsKICNlbmRpZgogfTsKIAordXNpbmcgQ29uY3VycmVudEpTTG9ja2VyID0gQ29uY3VycmVu
dEpTTG9ja2VySW1wbDxDb25jdXJyZW50SlNMb2NrPjsKK3VzaW5nIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciA9IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGw8Q29uY3VycmVudEpTTG9jaz47
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAppbmRleCA2NjVkMDg4OWNmNDQ2MWMzYWIwYTJhZjRiMDdjNmE1OGM5MDQyMWM0Li5kNTY1NmY4
YmZkZmY2MzI5OTJhYzFkYTQ1MWUzNWMxYTU0OGQ0NjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQ2FsbERhdGEu
aCIKICNpbmNsdWRlICJDZWxsU3RhdGUuaCIKKyNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgi
CiAjaW5jbHVkZSAiQ29uc3RydWN0RGF0YS5oIgogI2luY2x1ZGUgIkVudW1lcmF0aW9uTW9kZS5o
IgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTI4OCw2ICsyODksOSBAQCBjbGFzcyBKU0NlbGxMb2Nr
IDogcHVibGljIEpTQ2VsbCB7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93
KCk7CiB9OwogCit1c2luZyBDb25jdXJyZW50SlNDZWxsTG9ja2VyID0gQ29uY3VycmVudEpTTG9j
a2VySW1wbDxKU0NlbGxMb2NrPjsKK3VzaW5nIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIg
PSBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsPEpTQ2VsbExvY2s+OworCiAvLyBGSVhNRTog
UmVmZXIgdG8gU3Vic3BhY2UgYnkgcmVmZXJlbmNlLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Njk4OAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAppbmRleCBhY2QyOWRlZDgxMzUx
ZmIyODRiMjE1OWFkNDdhNjMxYzM0OTRmMWRmLi4zYTUxMjFkNjlkZmI0ZmIyZmI5Zjg4NWNhN2Zm
M2ZlNTVjMDRkZDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCkBAIC0yMDA1LDcgKzIwMDUsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShK
U0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcgogCiAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQ7CiAgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5
TmFtZSwgW10gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0
LCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKKyAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+
cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBbXShjb25z
dCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5
T2Zmc2V0KSB7IH0pOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHN0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgb2Zmc2V0LCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7CiAgICAgICAgICAgICBpZiAo
dGhpc09iamVjdC0+bV9idXR0ZXJmbHkgJiYgIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAmJiAhc3RydWN0dXJlLT5oYXNJbmRleGluZ0hlYWRlcih0aGlzT2JqZWN0KSkgewpAQCAtMzc2
Niw3ICszNzY2LDcgQEAgdm9pZCBKU09iamVjdDo6Y29udmVydFRvRGljdGlvbmFyeShWTSYgdm0p
CiAgICAgICAgIHZtLCBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKSk7CiB9CiAKLXZvaWQg
SlNPYmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciYsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRP
ZkxpbmVDYXBhY2l0eUFmdGVyKQordm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZs
YXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKQogewogICAg
IC8vIFRoaXMgY291bGQgaW50ZXJsZWF2ZSB2aXNpdENoaWxkcmVuIGJlY2F1c2Ugc29tZSBvbGQg
c3RydWN0dXJlIGNvdWxkIGhhdmUgYmVlbiBhIG5vbgogICAgIC8vIGRpY3Rpb25hcnkgc3RydWN0
dXJlLiBXZSBoYXZlIHRvIGJlIGNyYXp5IGNhcmVmdWwuIEJ1dCwgd2UgYXJlIGd1YXJhbnRlZWQg
dG8gYmUgaG9sZGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKaW5k
ZXggZWM2MzAwZWE5Yjk3MmNlOWJhMGZhZDgxODI1N2FmYjIwZDgyYTJlZC4uNjUxMTYwYmUwYjAx
Nzg3MGNlOTA5NmJmOTJhNTVkY2YwZTZjZGJiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCkBAIC04MTUsNyArODE1LDcgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJs
aWMgSlNDZWxsIHsKICAgICB7CiAgICAgICAgIHN0cnVjdHVyZSh2bSktPmZsYXR0ZW5EaWN0aW9u
YXJ5U3RydWN0dXJlKHZtLCB0aGlzKTsKICAgICB9Ci0gICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFm
dGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9p
ZCBzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlND
ZWxsTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1cmUqLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRl
cik7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QKICAgICB7CkBA
IC0xMzI5LDcgKzEzMjksNyBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0UHJvdG90eXBl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIC8vIGZsYXR0ZW4gYW4gb2Jq
ZWN0LgogaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldERpcmVjdENvbmN1cnJlbnRseShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogewotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5sb2NrKCkpOworICAgIENvbmN1cnJl
bnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+Y2VsbExvY2soKSk7CiAgICAgaWYgKCFz
dHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICByZXR1cm4gZ2V0RGlyZWN0KG9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCmluZGV4IGE2NzAwMzQ3ZjY5NzZlNjFiMDVkYjE4ZjJi
MDk2YWFhNzllMmViYjMuLjk1YTY3MTBjMmUzNTY4NDM2ZDVjY2EyOGM4NmIyZGM5NGQ4YTg4MDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
CkBAIC0yMTYsNyArMjE2LDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBKU09iamVj
dDo6cHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mIHYKICAgICBQcm9wZXJ0
eU9mZnNldCByZXN1bHQ7CiAgICAgc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0
aW9uKAogICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLAotICAgICAgICBbJl0g
KGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
UHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIFsmXSAoY29uc3QgR0NTYWZl
Q29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlP
ZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBuZXdPdXRPZkxpbmVD
YXBhY2l0eSA9IFN0cnVjdHVyZTo6b3V0T2ZMaW5lQ2FwYWNpdHkobmV3TWF4T2Zmc2V0KTsKICAg
ICAgICAgICAgIGlmIChuZXdPdXRPZkxpbmVDYXBhY2l0eSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0
eSkgewogICAgICAgICAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gYWxsb2NhdGVNb3Jl
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNpdHksIG5ld091dE9mTGluZUNh
cGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCmlu
ZGV4IGVkYTQ0NmJmYmUyNjdhYjAxYjg1MmUxNWZkZTljOWMzMGU2ZjU4ZTYuLjNiNmVmZDNhYzBl
YTE5YjFlYjAwMjhmNmY1YjM4OWFjODBkZmJjMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcApAQCAtNTgsNyArNTgsNyBAQCBjbGFzcyBTaW5nbGVTbG90
VHJhbnNpdGlvbldlYWtPd25lciBmaW5hbCA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIgewogICAg
ICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUqIHRhYmxlID0gcmVpbnRlcnByZXRfY2FzdDxT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUqPihjb250ZXh0KTsKICAgICAgICAgQVNTRVJUKHRhYmxl
LT5pc1VzaW5nU2luZ2xlU2xvdCgpKTsKICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZSh0YWJs
ZS0+d2Vha0ltcGwoKSk7Ci0gICAgICAgIHRhYmxlLT5tX2RhdGEgPSBTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGU6OlVzaW5nU2luZ2xlU2xvdEZsYWc7CisgICAgICAgIHRhYmxlLT5tX2RhdGEgPSBi
aXR3aXNlX2Nhc3Q8dWludDhfdCo+KFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6VXNpbmdTaW5n
bGVTbG90RmxhZyk7CiAgICAgfQogfTsKIApAQCAtODQsNyArODQsNyBAQCBpbmxpbmUgdm9pZCBT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OnNldFNpbmdsZVRyYW5zaXRpb24oU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiAgICAgaWYgKFdlYWtJbXBsKiBpbXBsID0gdGhpcy0+d2Vha0ltcGwoKSkKICAg
ICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShpbXBsKTsKICAgICBXZWFrSW1wbCogaW1wbCA9IFdl
YWtTZXQ6OmFsbG9jYXRlKHN0cnVjdHVyZSwgJnNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093bmVy
KCksIHRoaXMpOwotICAgIG1fZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oaW1wbCkgfCBV
c2luZ1NpbmdsZVNsb3RGbGFnOworICAgIG1fZGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4o
Yml0d2lzZV9jYXN0PGludHB0cl90PihpbXBsKSB8IFVzaW5nU2luZ2xlU2xvdEZsYWcpOwogfQog
CiBib29sIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFpbnMoVW5pcXVlZFN0cmluZ0lt
cGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uKSBjb25zdApAQCAt
MTUxLDcgKzE1MSw3IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSog
dGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVPck51bGwoKSkgeworICAgICAgICBpZiAo
UHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVVbnNhZmVPck51
bGwoKSkgewogICAgICAgICAgICAgKytudW1iZXJXaXRoUHJvcGVydHlNYXBzOwogICAgICAgICAg
ICAgdG90YWxQcm9wZXJ0eU1hcHNTaXplICs9IHRhYmxlLT5zaXplSW5NZW1vcnkoKTsKICAgICAg
ICAgfQpAQCAtMTc0LDE1ICsxNzQsMTIgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNz
KCkKIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVk
IGlubGluZUNhcGFjaXR5KQogICAgIDogSlNDZWxsKHZtLCB2bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUu
Z2V0KCkpCiAgICAgLCBtX2Jsb2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJ
RCh0aGlzKSwgaW5kZXhpbmdUeXBlLCB0eXBlSW5mbykKLSAgICAsIG1fb3V0T2ZMaW5lVHlwZUZs
YWdzKHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpKQotICAgICwgbV9pbmxpbmVDYXBhY2l0
eShpbmxpbmVDYXBhY2l0eSkKLSAgICAsIG1fYml0RmllbGQoMCkKICAgICAsIG1fZ2xvYmFsT2Jq
ZWN0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46
Ok1heUJlTnVsbCkKICAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBwcm90b3R5cGUpCi0gICAg
LCBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0
KElzV2F0Y2hlZCkKLSAgICAsIG1fcHJvcGVydHlIYXNoKDApCisgICAgLCBtX3Byb3BlcnR5SGFz
aEFuZElubGluZUNhcGFjaXR5KGlubGluZUNhcGFjaXR5KQogeworICAgIHNldENsYXNzSW5mbyhj
bGFzc0luZm8pOwogICAgIHNldERpY3Rpb25hcnlLaW5kKE5vbmVEaWN0aW9uYXJ5S2luZCk7CiAg
ICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKGZhbHNlKTsKICAgICBzZXRIYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzKGNsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRp
ZXMoKSk7CkBAIC0yMDAsMzEgKzE5NywzMCBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjbwogICAg
IHNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRyYW5zaXRp
b25PZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxp
ZE9mZnNldCk7Ci0gCisgICAgc2V0T3V0T2ZMaW5lVHlwZUZsYWdzKHR5cGVJbmZvLm91dE9mTGlu
ZVR5cGVGbGFncygpKTsKKwogICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2Jq
ZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8UHJvcGVy
dHlPZmZzZXQ+KGlubGluZUNhcGFjaXR5KSA8IGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KTsKICAgICBB
U1NFUlQoIWhhc1JhcmVEYXRhKCkpOwotICAgIEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNT
ZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllcygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVBy
b3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENh
bGxEYXRhKCkgfHwgbV9jbGFzc0luZm8tPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0Nl
bGw6OmdldENhbGxEYXRhKTsKKyAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclBy
b3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8ICF0aGlzLT5jbGFzc0luZm8oKS0+aGFzU3RhdGlj
U2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKGhhc0dldHRlclNldHRl
clByb3BlcnRpZXMoKSB8fCAhdGhpcy0+Y2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVh
ZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlk
ZXNHZXRDYWxsRGF0YSgpIHx8IHRoaXMtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRDYWxs
RGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CiB9CiAKIGNvbnN0IENsYXNzSW5mbyBTdHJ1
Y3R1cmU6OnNfaW5mbyA9IHsgIlN0cnVjdHVyZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoU3RydWN0dXJlKSB9OwogCiBTdHJ1Y3R1cmU6OlN0cnVjdHVy
ZShWTSYgdm0pCiAgICAgOiBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGwpCi0gICAgLCBtX2lubGlu
ZUNhcGFjaXR5KDApCi0gICAgLCBtX2JpdEZpZWxkKDApCiAgICAgLCBtX3Byb3RvdHlwZSh2bSwg
dGhpcywganNOdWxsKCkpCi0gICAgLCBtX2NsYXNzSW5mbyhpbmZvKCkpCiAgICAgLCBtX3RyYW5z
aXRpb25XYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKLSAgICAsIG1fcHJvcGVydHlIYXNoKDApCisg
ICAgLCBtX3Byb3BlcnR5SGFzaEFuZElubGluZUNhcGFjaXR5KDApCiB7CisgICAgc2V0Q2xhc3NJ
bmZvKGluZm8oKSk7CiAgICAgc2V0RGljdGlvbmFyeUtpbmQoTm9uZURpY3Rpb25hcnlLaW5kKTsK
ICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUoZmFsc2UpOwotICAgIHNldEhhc0dldHRlclNl
dHRlclByb3BlcnRpZXMobV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9w
ZXJ0aWVzKCkpOworICAgIHNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXMoY2xhc3NJbmZvKCkt
Pmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwogICAgIHNldEhhc0N1c3Rv
bUdldHRlclNldHRlclByb3BlcnRpZXMoZmFsc2UpOwotICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8obV9jbGFzc0luZm8tPmhhc1N0YXRpY1Nl
dHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oY2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRl
ck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwogICAgIHNldEhhc1VuZGVyc2NvcmVQcm90b1Byb3Bl
cnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90byhmYWxzZSk7CiAgICAgc2V0SXNRdWlja1Byb3BlcnR5
QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKHRydWUpOwogICAgIHNldFRyYW5zaXRpb25Qcm9w
ZXJ0eUF0dHJpYnV0ZXMoMCk7CkBAIC0yNDAsMjMgKzIzNiwyMSBAQCBTdHJ1Y3R1cmU6OlN0cnVj
dHVyZShWTSYgdm0pCiAgCiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBUeXBlSW5mbyhDZWxsVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpOwogICAgIG1fYmxvYiA9IFN0cnVjdHVyZUlEQmxvYih2bS5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCAwLCB0eXBlSW5mbyk7Ci0gICAg
bV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxhZ3MoKTsKKyAg
ICBzZXRPdXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpOwog
Ci0gICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5n
UHJvdG8oKSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0
aWVzKCkpOwotICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwgIW1fY2xh
c3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NF
UlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBtX2NsYXNzSW5m
by0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEpOworICAg
IEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3Rv
KCkgfHwgIWNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygp
KTsKKyAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFjbGFzc0luZm8o
KS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKCF0
aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgY2xhc3NJbmZvKCktPm1l
dGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKIH0KIAogU3Ry
dWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCiAgICAgOiBKU0NlbGwo
dm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1faW5saW5lQ2FwYWNpdHko
cHJldmlvdXMtPm1faW5saW5lQ2FwYWNpdHkpCi0gICAgLCBtX2JpdEZpZWxkKDApCiAgICAgLCBt
X3Byb3RvdHlwZSh2bSwgdGhpcywgcHJldmlvdXMtPm1fcHJvdG90eXBlLmdldCgpKQotICAgICwg
bV9jbGFzc0luZm8ocHJldmlvdXMtPm1fY2xhc3NJbmZvKQogICAgICwgbV90cmFuc2l0aW9uV2F0
Y2hwb2ludFNldChJc1dhdGNoZWQpCi0gICAgLCBtX3Byb3BlcnR5SGFzaChwcmV2aW91cy0+bV9w
cm9wZXJ0eUhhc2gpCisgICAgLCBtX3Byb3BlcnR5SGFzaEFuZElubGluZUNhcGFjaXR5KHByZXZp
b3VzLT5tX3Byb3BlcnR5SGFzaEFuZElubGluZUNhcGFjaXR5KQogICAgICwgbV9zZWVuUHJvcGVy
dGllcyhwcmV2aW91cy0+bV9zZWVuUHJvcGVydGllcykKIHsKKyAgICBzZXRDbGFzc0luZm8ocHJl
dmlvdXMtPmNsYXNzSW5mbygpKTsKICAgICBzZXREaWN0aW9uYXJ5S2luZChwcmV2aW91cy0+ZGlj
dGlvbmFyeUtpbmQoKSk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKGZhbHNlKTsKICAg
ICBzZXRIYXNCZWVuRmxhdHRlbmVkQmVmb3JlKHByZXZpb3VzLT5oYXNCZWVuRmxhdHRlbmVkQmVm
b3JlKCkpOwpAQCAtMjc3LDcgKzI3MSw3IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwg
U3RydWN0dXJlKiBwcmV2aW91cywgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0CiAgCiAg
ICAgVHlwZUluZm8gdHlwZUluZm8gPSBwcmV2aW91cy0+dHlwZUluZm8oKTsKICAgICBtX2Jsb2Ig
PSBTdHJ1Y3R1cmVJREJsb2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJRCh0
aGlzKSwgcHJldmlvdXMtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHlwZUluZm8p
OwotICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzID0gdHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdz
KCk7CisgICAgc2V0T3V0T2ZMaW5lVHlwZUZsYWdzKHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFn
cygpKTsKIAogICAgIEFTU0VSVCghcHJldmlvdXMtPnR5cGVJbmZvKCkuc3RydWN0dXJlSXNJbW1v
cnRhbCgpKTsKICAgICBzZXRQcmV2aW91c0lEKHZtLCBwcmV2aW91cyk7CkBAIC0yODksOSArMjgz
LDkgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBE
ZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQKIAogICAgIGlmIChwcmV2aW91cy0+bV9nbG9i
YWxPYmplY3QpCiAgICAgICAgIG1fZ2xvYmFsT2JqZWN0LnNldCh2bSwgdGhpcywgcHJldmlvdXMt
Pm1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKLSAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNl
dHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGlj
U2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKGhhc0dldHRlclNldHRl
clByb3BlcnRpZXMoKSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQ
cm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRD
YWxsRGF0YSgpIHx8IG1fY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlND
ZWxsOjpnZXRDYWxsRGF0YSk7CisgICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAhY2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRl
ck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzKCkgfHwgIWNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVy
dGllcygpKTsKKyAgICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERh
dGEoKSB8fCBjbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6
Z2V0Q2FsbERhdGEpOwogfQogCiBTdHJ1Y3R1cmU6On5TdHJ1Y3R1cmUoKQpAQCAtMzEzLDcgKzMw
Nyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoUG9seVByb3RvVGFnLCBWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgdW5zaWduZWQgb2xkT3V0T2ZMaW5l
Q2FwYWNpdHkgPSByZXN1bHQtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgcmVzdWx0LT5hZGRQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAogICAgICAgICB2bSwgdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkucG9seVByb3RvTmFtZSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwKLSAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5l
d01heE9mZnNldCkgeworICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxM
b2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNl
dCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU3RydWN0dXJlOjpvdXRPZkxpbmVDYXBh
Y2l0eShuZXdNYXhPZmZzZXQpID09IG9sZE91dE9mTGluZUNhcGFjaXR5KTsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG9mZnNldCA9PSBrbm93blBvbHlQcm90b09mZnNldCk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpc0lubGluZU9mZnNldChrbm93blBvbHlQcm90b09mZnNldCkp
OwpAQCAtMzM1LDkgKzMyOSw5IEBAIHZvaWQgU3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1h
cEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3RydWN0dXJlKiwgOD4mIHN0CiAgICAgdGFibGUg
PSAwOwogCiAgICAgZm9yIChzdHJ1Y3R1cmUgPSB0aGlzOyBzdHJ1Y3R1cmU7IHN0cnVjdHVyZSA9
IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLmxv
Y2soKTsKKyAgICAgICAgc3RydWN0dXJlLT5jZWxsTG9jaygpLmxvY2soKTsKICAgICAgICAgCi0g
ICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAg
IHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCk7CiAgICAgICAg
IGlmICh0YWJsZSkgewogICAgICAgICAgICAgLy8gTGVhdmUgdGhlIHN0cnVjdHVyZSBsb2NrZWQs
IHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gZG8gdGhpbmdzIHRvIGl0IGF0b21pY2FsbHkKICAgICAg
ICAgICAgIC8vIGJlZm9yZSBpdCBsb3NlcyBpdHMgcHJvcGVydHkgdGFibGUuCkBAIC0zNDUsNyAr
MzM5LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxp
emF0aW9uKFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiYgc3QKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgc3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKLSAgICAgICAgc3RydWN0dXJlLT5t
X2xvY2sudW5sb2NrKCk7CisgICAgICAgIHN0cnVjdHVyZS0+Y2VsbExvY2soKS51bmxvY2soKTsK
ICAgICB9CiAgICAgCiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUpOwpAQCAtMzY1LDE3ICszNTksMTcg
QEAgUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0m
IHZtLCBib29sIHNldFByb3BlcnR5VGFibGUKICAgICAKICAgICBmaW5kU3RydWN0dXJlc0FuZE1h
cEZvck1hdGVyaWFsaXphdGlvbihzdHJ1Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAK
LSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zm
c2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOworICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gbnVtYmVy
T2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAg
aWYgKHRhYmxlKSB7CiAgICAgICAgIHRhYmxlID0gdGFibGUtPmNvcHkodm0sIGNhcGFjaXR5KTsK
LSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgIHN0cnVjdHVyZS0+
Y2VsbExvY2soKS51bmxvY2soKTsKICAgICB9IGVsc2UKICAgICAgICAgdGFibGUgPSBQcm9wZXJ0
eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KTsKICAgICAKICAgICAvLyBNdXN0IGhvbGQgdGhl
IGxvY2sgb24gdGhpcyBzdHJ1Y3R1cmUsIHNpbmNlIHdlIHdpbGwgYmUgbW9kaWZ5aW5nIHRoaXMg
c3RydWN0dXJlJ3MKICAgICAvLyBwcm9wZXJ0eSBtYXAuIFdlIGRvbid0IHdhbnQgZ2V0Q29uY3Vy
cmVudGx5KCkgdG8gc2VlIHRoZSBwcm9wZXJ0eSBtYXAgaW4gYSBoYWxmLWJha2VkCiAgICAgLy8g
c3RhdGUuCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhl
YXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCks
IHZtLmhlYXApOwogICAgIGlmIChzZXRQcm9wZXJ0eVRhYmxlKQogICAgICAgICB0aGlzLT5zZXRQ
cm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAKQEAgLTQzNiw3ICs0MzAsNyBAQCBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1
Y3R1cmUqIHN0cnVjdAogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZz
ZXQmIG9mZnNldCkKIHsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+
bV9sb2NrKTsKKyAgICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNl
bGxMb2NrKCkpOwogICAgIHJldHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHVpZCwgYXR0cmlidXRlcywgb2Zmc2V0KTsKIH0KIApAQCAt
NDk3LDggKzQ5MSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5z
aXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvCiAgICAgfQogICAgIAogICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7
Ci0KLSAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldE1heUJlTnVsbCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpKTsK
KyAgICB0cmFuc2l0aW9uLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5j
YWNoZWRQcm90b3R5cGVDaGFpbigpKTsKICAgICAKICAgICAvLyBXaGlsZSB3ZSBhcmUgYWRkaW5n
IHRoZSBwcm9wZXJ0eSwgcmVtYXRlcmlhbGl6aW5nIHRoZSBwcm9wZXJ0eSB0YWJsZSBpcyBzdXBl
ciB3ZWlyZDogd2UgYWxyZWFkeQogICAgIC8vIGhhdmUgYSBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUgYW5kIHRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMgYnV0IHRoZSBtX3RyYW5zaXRpb25P
ZmZzZXQgaXMgc3RpbGwgd3JvbmcuIElmIHRoZQpAQCAtNTEwLDcgKzUwMyw3IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvCiAgICAgLy8gY2FzZSBhbGwgaXMgd2VsbC4gIElmIGl0IHdhc24ndCBm
b3IgdGhlIGxvY2ssIHRoZSBHQyB3b3VsZCBoYXZlIFRPQ1RPVTogaWYgY291bGQgcmVhZAogICAg
IC8vIHByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nIGJlZm9yZSB3ZSBzZXQg
aXQgdG8gdHJ1ZSwgYW5kIHRoZW4gYmxvdyB0aGUgdGFibGUgYXdheSBhZnRlci4KICAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAg
ICAgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2so
KSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFu
c2l0aW9uaW5nKHRydWUpOwogICAgIH0KIApAQCAtNTMwLDcgKzUyMyw3IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUHJvCiAKICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zm
c2V0KCksIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIHsKLSAgICAgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7
CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+
Y2VsbExvY2soKSwgdm0uaGVhcCk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFi
bGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB9CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSgpOwpAQCAtNTg3LDExICs1ODAsMTEgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLAogICAgIH0KIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3Ry
dWN0dXJlLCBkZWZlcnJlZCk7Ci0gICAgdHJhbnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFp
bi5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5
cGVDaGFpbi5nZXQoKSk7CisgICAgdHJhbnNpdGlvbi0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4o
dm0sIHN0cnVjdHVyZS0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKSk7CiAKICAgICAvLyBXaGlsZSB3
ZSBhcmUgZGVsZXRpbmcgdGhlIHByb3BlcnR5LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdGFi
bGUgaXMgbm90IGNsZWFyZWQuCiAgICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKHRyYW5zaXRpb24tPm1fbG9jayk7CisgICAgICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIg
bG9ja2VyKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpOwogICAgICAgICB0cmFuc2l0aW9uLT5zZXRQ
cm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyh0cnVlKTsKICAgICB9CiAKQEAg
LTYxMiw3ICs2MDUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlU
cmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAKICAgICBjaGVja09mZnNl
dCh0cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIHRyYW5zaXRpb24tPmlubGluZUNhcGFj
aXR5KCkpOwogICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihz
dHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0Nl
bGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+Y2VsbExvY2soKSwgdm0uaGVhcCk7CiAgICAgICAg
IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB9
CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwpAQCAtNjMwLDcgKzYy
Myw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTCiAgICAgdHJhbnNpdGlvbi0+bV9wcm90b3R5
cGUuc2V0KHZtLCB0cmFuc2l0aW9uLCBwcm90b3R5cGUpOwogCiAgICAgUHJvcGVydHlUYWJsZSog
dGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSk7Ci0gICAg
dHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayksIHZtLCB0YWJsZSk7
CisgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2
bSwgdGFibGUpOwogICAgIHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5t
YXhPZmZzZXQoKSk7CiAgICAgCiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5j
eSgpOwpAQCAtNjQzLDcgKzYzNiw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVD
aGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByCiAgICAgICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIAogICAgICAg
ICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKHZtKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24t
Pm1fbG9jayksIHZtLCB0YWJsZSk7CisgICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0
cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0sIHRhYmxlKTsKICAgICAgICAgdHJhbnNpdGlvbi0+
c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKICAgICAgICAgCiAgICAg
ICAgIHN0cnVjdHVyZSA9IHRyYW5zaXRpb247CkBAIC02NjUsNyArNjU4LDcgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRGljdGkKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0
cnVjdHVyZSwgZGVmZXJyZWQpOwogCiAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1
cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSk7Ci0gICAgdHJhbnNpdGlvbi0+cGlu
KGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayksIHZtLCB0YWJsZSk7CisgICAgdHJhbnNpdGlv
bi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUpOwogICAg
IHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAg
ICAgdHJhbnNpdGlvbi0+c2V0RGljdGlvbmFyeUtpbmQoa2luZCk7CiAgICAgdHJhbnNpdGlvbi0+
c2V0SGFzQmVlbkRpY3Rpb25hcnkodHJ1ZSk7CkBAIC03MDIsMTEgKzY5NSwxMSBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIG11c3QgYWx3YXlzIHJl
dHVybiBhIHByb3BlcnR5IHRhYmxlLiBJdCBjYW4ndCByZXR1cm4gbnVsbC4KLSAgICBQcm9wZXJ0
eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgUHJvcGVydHlUYWJs
ZSogcmVzdWx0ID0gcHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgIGlmIChyZXN1bHQp
IHsKICAgICAgICAgaWYgKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKQogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdC0+Y29weSh2bSwgcmVzdWx0LT5zaXplKCkgKyAxKTsKLSAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNDZWxsTG9j
a2VyIGxvY2tlcihjZWxsTG9jaygpKTsKICAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgbnVs
bHB0cik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNzQzLDEwICs3MzYsMTAg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm8KICAgICAgICAgLy8gdGFibGUgZG9lc24ndCBrbm93
IGhvdyB0byB0YWtlIGludG8gYWNjb3VudCBzdWNoIHdob2xlc2FsZSBlZGl0cy4KIAogICAgICAg
ICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKHZtKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZyhob2xkTG9jayh0
cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW5G
b3JDYWNoaW5nKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUpOwog
ICAgICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0
KCkpOwogICAgICAgICAKLSAgICAgICAgdGFibGUgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxl
T3JOdWxsKCk7CisgICAgICAgIHRhYmxlID0gdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZVVuc2Fm
ZU9yTnVsbCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YWJsZSk7CiAgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiAqdGFibGUpIHsKICAgICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0ZU9u
QWxsUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkpCkBAIC03NjEsMTQgKzc1NCwxNCBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uU2xvdyhWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBObwogICAgIH0KICAgICAKICAgICBpZiAoc2V0c1JlYWRPbmx5T25O
b25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpCi0gICAgICAgICYmICF0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCktPmlzRW1wdHkoKSkKKyAgICAgICAgJiYgIXRyYW5z
aXRpb24tPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKS0+aXNFbXB0eSgpKQogICAgICAgICB0
cmFuc2l0aW9uLT5zZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGlu
Z1Byb3RvKHRydWUpOwogICAgIAogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7
CiAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gdHJhbnNpdGlvbi0+ZW5zdXJlUHJvcGVy
dHlUYWJsZSh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9u
LT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2so
dHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzdHJ1Y3R1cmUtPm1fbG9jayk7CisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2soc3RydWN0dXJlLT5jZWxsTG9jaygpKTsKICAgICAgICAgc3Ry
dWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KIApA
QCAtODIwLDE0ICs4MTMsMTQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9u
YXJ5U3RydWN0dXJlKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICBBU1NFUlQoaXNEaWN0
aW9uYXJ5KCkpOwogICAgIEFTU0VSVChvYmplY3QtPnN0cnVjdHVyZSh2bSkgPT0gdGhpcyk7CiAg
ICAgCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXAp
OworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZt
LmhlYXApOwogICAgIAogICAgIG9iamVjdC0+c2V0U3RydWN0dXJlSUREaXJlY3RseShudWtlKGlk
KCkpKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogCiAgICAgc2l6ZV90IGJlZm9yZU91
dE9mTGluZUNhcGFjaXR5ID0gdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoaXNV
bmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IHByb3BlcnR5VGFibGVPck51bGwoKTsKKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBw
cm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCk7CiAgICAgICAgIEFTU0VSVCh0YWJsZSk7CiAKICAg
ICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSB0YWJsZS0+c2l6ZSgpOwpAQCAtODQxLDE0ICs4
MzQsMTQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJl
KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICAgICAgYXV0byBvZmZzZXQgPSBpbnZhbGlk
T2Zmc2V0OwogICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJs
ZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CiAgICAgICAgICAgICB2YWx1
ZXNbaV0gPSBvYmplY3QtPmdldERpcmVjdChpdGVyLT5vZmZzZXQpOwotICAgICAgICAgICAgb2Zm
c2V0ID0gaXRlci0+b2Zmc2V0ID0gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVD
YXBhY2l0eSk7CisgICAgICAgICAgICBvZmZzZXQgPSBpdGVyLT5vZmZzZXQgPSBvZmZzZXRGb3JQ
cm9wZXJ0eU51bWJlcihpLCBpbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgfQogICAgICAgICBz
ZXRNYXhPZmZzZXQodm0sIG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9uT2Zmc2V0
KCkgPT0gaW52YWxpZE9mZnNldCk7CiAgICAgICAgIAogICAgICAgICAvLyBDb3BpZXMgaW4gb3Vy
IHZhbHVlcyB0byB0aGVpciBjb21wYWN0ZWQgbG9jYXRpb25zLgogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgaSsrKQotICAgICAgICAgICAgb2JqZWN0LT5w
dXREaXJlY3Qodm0sIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkp
LCB2YWx1ZXNbaV0pOworICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZv
clByb3BlcnR5TnVtYmVyKGksIGlubGluZUNhcGFjaXR5KCkpLCB2YWx1ZXNbaV0pOwogCiAgICAg
ICAgIHRhYmxlLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7CiAKQEAgLTkyOCw3ICs5MjEsNyBAQCBX
YXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBv
aW50U2V0KFZNJiB2bSwgUHJvcGVydAogICAgIAogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAg
ICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCkp
OwogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMtPnJhcmVEYXRhKCk7CiAg
ICAgaWYgKCFyYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzKSB7CiAgICAgICAg
IHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMgPQpAQCAtOTk4LDcgKzk5MSw3
IEBAIFByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXI6On5Qcm9wZXJ0eU1hcFN0YXRpc3Rp
Y3NFeGl0TG9nZ2VyKCkKIAogUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcoVk0mIHZtKQogewotICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IHByb3BlcnR5VGFibGVPck51bGwoKSkKKyAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFibGUgPSBw
cm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxl
OjpjbG9uZSh2bSwgKnRhYmxlKTsKICAgICBib29sIHNldFByb3BlcnR5VGFibGUgPSBmYWxzZTsK
ICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtLCBzZXRQcm9wZXJ0eVRhYmxl
KTsKQEAgLTEwMzgsMTQgKzEwMzEsMTQgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQo
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWIKIHsKICAg
ICByZXR1cm4gYWRkPFNob3VsZFBpbjo6Tm8+KAogICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLAotICAgICAgICBbdGhpcywgJnZtXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpT
TG9ja2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewor
ICAgICAgICBbdGhpcywgJnZtXShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwg
UHJvcGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewogICAgICAgICAg
ICAgc2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQpOwogICAgICAgICB9KTsKIH0KIAogUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpObz4odm0sIHByb3BlcnR5
TmFtZSwgW3RoaXMsICZ2bV0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3Bl
cnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKKyAgICByZXR1cm4gcmVt
b3ZlPFNob3VsZFBpbjo6Tm8+KHZtLCBwcm9wZXJ0eU5hbWUsIFt0aGlzLCAmdm1dKGNvbnN0IEdD
U2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZz
ZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgIHNldE1heE9mZnNldCh2bSwgbmV3TWF4T2Zmc2V0
KTsKICAgICB9KTsKIH0KQEAgLTExMTYsMjUgKzExMDksMjUgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgCi0gICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5tX2xvY2spOworICAgIENvbmN1cnJlbnRK
U0NlbGxMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwogICAgIAogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIXRoaXNP
YmplY3QtPmlzT2JqZWN0KCkpCi0gICAgICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBl
Q2hhaW4uY2xlYXIoKTsKKyAgICAgICAgdGhpc09iamVjdC0+Y2xlYXJDYWNoZWRQcm90b3R5cGVD
aGFpbigpOwogICAgIGVsc2UgewogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X3Byb3RvdHlwZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FjaGVk
UHJvdG90eXBlQ2hhaW4pOworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXNP
YmplY3QtPmNhY2hlZFByb3RvdHlwZUNoYWluKCkpOwogICAgIH0KICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0YSk7CiAKICAgICBpZiAodGhpc09iamVj
dC0+aXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkgfHwgdGhpc09iamVjdC0+cHJvdGVjdFByb3BlcnR5
VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoKSkgewogICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBp
bnRlcmxlYXZlIGluIHBpbigpLCBpbiB3aGljaCBjYXNlIGl0IG1heSBzZWUgYSBudWxsIHByb3Bl
cnR5IHRhYmxlLgogICAgICAgICAvLyBUaGF0J3MgZmluZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJy
aWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2lsbCBzY2FuIHRoaXMgYWdhaW4uCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+cHJvcGVydHlUYWJsZVVuc2FmZU9y
TnVsbCgpKTsKICAgICB9IGVsc2UgaWYgKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpCi0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7Ci0g
ICAgZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQotICAgICAgICB0
aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKyAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzT2JqZWN0LT5wcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxs
KCkpOworICAgIGVsc2UgaWYgKHRoaXNPYmplY3QtPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwo
KSkKKyAgICAgICAgdGhpc09iamVjdC0+Y2xlYXJQcm9wZXJ0eVRhYmxlKCk7CiB9CiAKIGJvb2wg
U3RydWN0dXJlOjppc0NoZWFwRHVyaW5nR0MoVk0mIHZtKQpAQCAtMTI5MCw3ICsxMjgzLDcgQEAg
Ym9vbCBTdHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0pIGNv
bnN0CiAgICAgaWYgKCF0aGlzLT5jYW5DYWNoZU93bktleXMoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluID0gbV9jYWNoZWRQcm90
b3R5cGVDaGFpbi5nZXQoKTsKKyAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4gPSBj
YWNoZWRQcm90b3R5cGVDaGFpbigpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmVDaGFpbik7CiAgICAg
U3RydWN0dXJlSUQqIGN1cnJlbnRTdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUNoYWluLT5oZWFkKCk7
CiAgICAgd2hpbGUgKHRydWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgKaW5kZXggNTJjZDNjNzFkOTIwZjJmOGE5N2I0NjBiOTBlMGVjNzBkNWQ3MTFhZi4uMDM5
MzA1YmMzMGFhZjdmNDRmZjVlM2JjNTI5YzI3NmZmZjJkY2I2MyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTI1OCw5ICsyNTgsMTggQEAgY2xhc3MgU3Ry
dWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICByZXR1cm4gdHlw
ZUluZm8oKS5nZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgpOwogICAgIH0KKworICAgIFR5cGVJ
bmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3Mgb3V0T2ZMaW5lVHlwZUZsYWdzKCkgY29uc3QKKyAgICB7
CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGVJbmZv
OjpPdXRPZkxpbmVUeXBlRmxhZ3M+KG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJs
ZVVuc2FmZSA+PiBvdXRPZkxpbmVUeXBlRmxhZ3NTaGlmdCk7CisjZWxzZQorICAgICAgICByZXR1
cm4gbV9vdXRPZkxpbmVUeXBlRmxhZ3M7CisjZW5kaWYKKyAgICB9CiAgICAgCiAgICAgLy8gVHlw
ZSBhY2Nlc3NvcnMuCi0gICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IHJldHVybiBtX2Js
b2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CisgICAgVHlwZUluZm8gdHlwZUlu
Zm8oKSBjb25zdCB7IHJldHVybiBtX2Jsb2IudHlwZUluZm8ob3V0T2ZMaW5lVHlwZUZsYWdzKCkp
OyB9CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmpl
Y3QoKTsgfQogCiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvYi5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgJiBBbGxXcml0YWJsZUFycmF5
VHlwZXM7IH0KQEAgLTM1OSw3ICszNjgsMTEgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQoKSBjb25zdAogICAg
IHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICB1aW50MTZfdCBtYXhPZmZzZXQgPSBtX21h
eE9mZnNldEFuZENhY2hlZFByb3RvdHlwZUNoYWluID4+IG1heE9mZnNldFNoaWZ0OworI2Vsc2UK
ICAgICAgICAgdWludDE2X3QgbWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXQ7CisjZW5kaWYKICAgICAg
ICAgaWYgKG1heE9mZnNldCA9PSBzaG9ydEludmFsaWRPZmZzZXQpCiAgICAgICAgICAgICByZXR1
cm4gaW52YWxpZE9mZnNldDsKICAgICAgICAgaWYgKG1heE9mZnNldCA9PSB1c2VSYXJlRGF0YUZs
YWcpCkBAIC0zNjksMjIgKzM4Miw0NSBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMg
SlNDZWxsIHsKIAogICAgIHZvaWQgc2V0TWF4T2Zmc2V0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogICAgIHsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQotICAg
ICAgICAgICAgbV9tYXhPZmZzZXQgPSBzaG9ydEludmFsaWRPZmZzZXQ7Ci0gICAgICAgIGVsc2Ug
aWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZz
ZXQpCi0gICAgICAgICAgICBtX21heE9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgZWxzZSBpZiAo
bV9tYXhPZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKQorICAgICAgICBhdXRvIGNvbW1pdCA9IFsm
XSh1aW50MTZfdCB2YWx1ZSkgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgICAgICB1aW50
cHRyX3QgcmVzdWx0ID0gKG1fbWF4T2Zmc2V0QW5kQ2FjaGVkUHJvdG90eXBlQ2hhaW4gJiBjYWNo
ZWRQcm90b3R5cGVDaGFpbk1hc2spIHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpIDw8
IG1heE9mZnNldFNoaWZ0KTsKKyAgICAgICAgICAgIG1fbWF4T2Zmc2V0QW5kQ2FjaGVkUHJvdG90
eXBlQ2hhaW4gPSByZXN1bHQ7CisjZWxzZQorICAgICAgICAgICAgbV9tYXhPZmZzZXQgPSB2YWx1
ZTsKKyNlbmRpZgorICAgICAgICB9OworCisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9m
ZnNldCkgeworICAgICAgICAgICAgY29tbWl0KHNob3J0SW52YWxpZE9mZnNldCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRh
RmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1p
dChvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFERFJF
U1M2NCkKKyAgICAgICAgdWludDE2X3QgbWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXRBbmRDYWNoZWRQ
cm90b3R5cGVDaGFpbiA+PiBtYXhPZmZzZXRTaGlmdDsKKyNlbHNlCisgICAgICAgIHVpbnQxNl90
IG1heE9mZnNldCA9IG1fbWF4T2Zmc2V0OworI2VuZGlmCisgICAgICAgIGlmIChtYXhPZmZzZXQg
PT0gdXNlUmFyZURhdGFGbGFnKSB7CiAgICAgICAgICAgICByYXJlRGF0YSgpLT5tX21heE9mZnNl
dCA9IG9mZnNldDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBlbnN1cmVSYXJlRGF0YSh2
bSktPm1fbWF4T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKLSAgICAgICAgICAgIG1fbWF4T2Zmc2V0ID0gdXNlUmFyZURhdGFGbGFnOworICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlUmFyZURhdGEodm0pLT5t
X21heE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAg
ICAgICAgY29tbWl0KHVzZVJhcmVEYXRhRmxhZyk7CiAgICAgfQogCiAgICAgUHJvcGVydHlPZmZz
ZXQgdHJhbnNpdGlvbk9mZnNldCgpIGNvbnN0CiAgICAgeworI2lmIENQVShBRERSRVNTNjQpCisg
ICAgICAgIHVpbnQxNl90IHRyYW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRpb25PZmZzZXRBbmRD
bGFzc0luZm8gPj4gdHJhbnNpdGlvbk9mZnNldFNoaWZ0OworI2Vsc2UKICAgICAgICAgdWludDE2
X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9mZnNldDsKKyNlbmRpZgogICAgICAg
ICBpZiAodHJhbnNpdGlvbk9mZnNldCA9PSBzaG9ydEludmFsaWRPZmZzZXQpCiAgICAgICAgICAg
ICByZXR1cm4gaW52YWxpZE9mZnNldDsKICAgICAgICAgaWYgKHRyYW5zaXRpb25PZmZzZXQgPT0g
dXNlUmFyZURhdGFGbGFnKQpAQCAtMzk0LDE3ICs0MzAsMzYgQEAgY2xhc3MgU3RydWN0dXJlIGZp
bmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIHNldFRyYW5zaXRpb25PZmZzZXQoVk0m
IHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICBpZiAob2Zmc2V0ID09
IGludmFsaWRPZmZzZXQpCi0gICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSBzaG9ydElu
dmFsaWRPZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAm
JiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQpCi0gICAgICAgICAgICBtX3RyYW5zaXRpb25P
ZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKG1fdHJhbnNpdGlvbk9mZnNldCA9PSB1
c2VSYXJlRGF0YUZsYWcpCisgICAgICAgIGF1dG8gY29tbWl0ID0gWyZdKHVpbnQxNl90IHZhbHVl
KSB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSAo
bV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvICYgY2xhc3NJbmZvTWFzaykgfCAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkgPDwgdHJhbnNpdGlvbk9mZnNldFNoaWZ0KTsKKyAgICAg
ICAgICAgIG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyA9IHJlc3VsdDsKKyNlbHNlCisg
ICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSB2YWx1ZTsKKyNlbmRpZgorICAgICAgICB9
OworCisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAg
Y29tbWl0KHNob3J0SW52YWxpZE9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9y
dEludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1pdChvZmZzZXQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgdWludDE2
X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyA+PiB0
cmFuc2l0aW9uT2Zmc2V0U2hpZnQ7CisjZWxzZQorICAgICAgICB1aW50MTZfdCB0cmFuc2l0aW9u
T2Zmc2V0ID0gbV90cmFuc2l0aW9uT2Zmc2V0OworI2VuZGlmCisgICAgICAgIGlmICh0cmFuc2l0
aW9uT2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykgewogICAgICAgICAgICAgcmFyZURhdGEoKS0+
bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAg
ICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIG1fdHJhbnNpdGlvbk9m
ZnNldCA9IHVzZVJhcmVEYXRhRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQor
CisgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBjb21taXQodXNlUmFy
ZURhdGFGbGFnKTsKICAgICB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQgb3V0T2ZMaW5lQ2FwYWNp
dHkoUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQpAQCAtNDQyLDE1ICs0OTcsMTIgQEAgY2xhc3Mg
U3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgfQogICAgIGJvb2wgaGFzSW5s
aW5lU3RvcmFnZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gISFtX2lubGluZUNhcGFj
aXR5OwotICAgIH0KLSAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9pbmxpbmVDYXBhY2l0eTsKKyAgICAgICAgcmV0dXJuICEhaW5saW5l
Q2FwYWNpdHkoKTsKICAgICB9CisgICAgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkoKSBjb25zdCB7
IHJldHVybiBtX3Byb3BlcnR5SGFzaEFuZElubGluZUNhcGFjaXR5ICYgaW5saW5lQ2FwYWNpdHlN
YXNrOyB9CiAgICAgdW5zaWduZWQgaW5saW5lU2l6ZSgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+KG1heE9mZnNldCgpICsgMSwgbV9pbmxpbmVDYXBhY2l0
eSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4obWF4T2Zmc2V0KCkgKyAxLCBp
bmxpbmVDYXBhY2l0eSgpKTsKICAgICB9CiAgICAgdW5zaWduZWQgdG90YWxTdG9yYWdlQ2FwYWNp
dHkoKSBjb25zdAogICAgIHsKQEAgLTQ2MiwxMiArNTE0LDEyIEBAIGNsYXNzIFN0cnVjdHVyZSBm
aW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHsKICAgICAgICAgcmV0dXJuIEpTQzo6aXNWYWxp
ZE9mZnNldChvZmZzZXQpCiAgICAgICAgICAgICAmJiBvZmZzZXQgPD0gbWF4T2Zmc2V0KCkKLSAg
ICAgICAgICAgICYmIChvZmZzZXQgPCBtX2lubGluZUNhcGFjaXR5IHx8IG9mZnNldCA+PSBmaXJz
dE91dE9mTGluZU9mZnNldCk7CisgICAgICAgICAgICAmJiAob2Zmc2V0IDwgc3RhdGljX2Nhc3Q8
aW50PihpbmxpbmVDYXBhY2l0eSgpKSB8fCBvZmZzZXQgPj0gZmlyc3RPdXRPZkxpbmVPZmZzZXQp
OwogICAgIH0KIAogICAgIGJvb2wgaGlqYWNrc0luZGV4aW5nSGVhZGVyKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBpc1R5cGVkVmlldyhtX2NsYXNzSW5mby0+dHlwZWRBcnJheVN0b3Jh
Z2VUeXBlKTsKKyAgICAgICAgcmV0dXJuIGlzVHlwZWRWaWV3KGNsYXNzSW5mbygpLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUpOwogICAgIH0KICAgICAKICAgICBib29sIGNvdWxkSGF2ZUluZGV4aW5n
SGVhZGVyKCkgY29uc3QKQEAgLTUzNSw3ICs1ODcsMTQgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFs
IDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNH
bG9iYWxPYmplY3QqLCBWTSYsIEpTU3RyaW5nKiB2YWx1ZSwgUHJvcGVydHlTbG90IHRvU3RyaW5n
VGFnU3ltYm9sU2xvdCk7CiAKLSAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuIG1fY2xhc3NJbmZvOyB9CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdAorICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PGNvbnN0IENsYXNzSW5mbyo+KG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyAm
IGNsYXNzSW5mb01hc2spOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fY2xhc3NJbmZvOworI2Vu
ZGlmCisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAg
ICAgewpAQCAtNTUyLDI1ICs2MTEsMjkgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2ds
b2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBjbGFzc0luZm9PZmZz
ZXQoKQorI2lmIENQVShBRERSRVNTNjQpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRy
YW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyk7Cisg
ICAgfQorI2Vsc2UKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2xhc3NJbmZvKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5m
byk7CiAgICAgfQotICAgICAgICAKKyNlbmRpZgorCiAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRp
YyBwdHJkaWZmX3QgcHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsK
LSAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGlubGluZUNhcGFjaXR5T2Zmc2V0KCkKKyNp
ZiBDUFUoTElUVExFX0VORElBTikKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5l
Q2FwYWNpdHkoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1
cmUsIG1faW5saW5lQ2FwYWNpdHkpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cnVjdHVyZSwgbV9wcm9wZXJ0eUhhc2hBbmRJbmxpbmVDYXBhY2l0eSk7CiAgICAgfQorI2VuZGlm
CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IHByZXZpb3VzT3JSYXJlRGF0YU9mZnNldCgpCiAgICAg
ewpAQCAtNjUzLDkgKzcxNiwxNCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlND
ZWxsIHsKICAgICAKICAgICBzdGF0aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRlcihQcmludFN0cmVh
bSYpOwogICAgIAotICAgIENvbmN1cnJlbnRKU0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7
IH0KLQotICAgIHVuc2lnbmVkIHByb3BlcnR5SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVy
dHlIYXNoOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9wZXJ0eUhhc2hTaGlm
dCA9IDg7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBpbmxpbmVDYXBhY2l0eU1hc2sg
PSAoMVUgPDwgcHJvcGVydHlIYXNoU2hpZnQpIC0gMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGlubGlu
ZUNhcGFjaXR5TWFzayA9PSAweGZmLCAiTG93ZXN0IDggYml0cyBhcmUgZm9yIGlubGluZUNhcGFj
aXR5LCB0aGlzIGlzIHJlcXVpcmVkIHRvIGFjY2VzcyB0aGVtIHRocm91Z2ggbG9hZDggaW4gSklU
Iik7CisgICAgdW5zaWduZWQgcHJvcGVydHlIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0
eUhhc2hBbmRJbmxpbmVDYXBhY2l0eSA+PiBwcm9wZXJ0eUhhc2hTaGlmdDsgfQorICAgIHZvaWQg
c2V0UHJvcGVydHlIYXNoKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICBtX3Byb3BlcnR5
SGFzaEFuZElubGluZUNhcGFjaXR5ID0gKG1fcHJvcGVydHlIYXNoQW5kSW5saW5lQ2FwYWNpdHkg
JiBpbmxpbmVDYXBhY2l0eU1hc2spIHwgKGhhc2ggPDwgcHJvcGVydHlIYXNoU2hpZnQpOworICAg
IH0KIAogICAgIHN0YXRpYyBib29sIHNob3VsZENvbnZlcnRUb1BvbHlQcm90byhjb25zdCBTdHJ1
Y3R1cmUqIGEsIGNvbnN0IFN0cnVjdHVyZSogYik7CiAKQEAgLTY4NCw2ICs3NTIsNyBAQCBjbGFz
cyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB7XAogICAgICAgICBtX2Jp
dEZpZWxkICY9IH4oc18jI2xvd2VyTmFtZSMjTWFzayA8PCBvZmZzZXQpO1wKICAgICAgICAgbV9i
aXRGaWVsZCB8PSAobmV3VmFsdWUgJiBzXyMjbG93ZXJOYW1lIyNNYXNrKSA8PCBvZmZzZXQ7XAor
ICAgICAgICBBU1NFUlQobmV3VmFsdWUgPT0gbG93ZXJOYW1lKCkpO1wKICAgICB9CiAKICAgICBE
RUZJTkVfQklURklFTEQoRGljdGlvbmFyeUtpbmQsIGRpY3Rpb25hcnlLaW5kLCBEaWN0aW9uYXJ5
S2luZCwgMiwgMCk7CkBAIC02OTEsMTggKzc2MCwxOCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzR2V0dGVyU2V0
dGVyUHJvcGVydGllcywgSGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcywgMSwgMyk7CiAgICAgREVG
SU5FX0JJVEZJRUxEKGJvb2wsIGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhj
bHVkaW5nUHJvdG8sIEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5n
UHJvdG8sIDEsIDQpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBpc1F1aWNrUHJvcGVydHlB
Y2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24sIElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRG
b3JFbnVtZXJhdGlvbiwgMSwgNSk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKHVuc2lnbmVkLCB0cmFu
c2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLCBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLCAx
NCwgNik7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFByZXZlbnRFeHRlbnNpb25zLCBE
aWRQcmV2ZW50RXh0ZW5zaW9ucywgMSwgMjApOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBk
aWRUcmFuc2l0aW9uLCBEaWRUcmFuc2l0aW9uLCAxLCAyMSk7Ci0gICAgREVGSU5FX0JJVEZJRUxE
KGJvb2wsIHN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkLCBTdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCwg
MSwgMjIpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNCZWVuRmxhdHRlbmVkQmVmb3Jl
LCBIYXNCZWVuRmxhdHRlbmVkQmVmb3JlLCAxLCAyMyk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJv
b2wsIGhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMsIEhhc0N1c3RvbUdldHRlclNldHRl
clByb3BlcnRpZXMsIDEsIDI0KTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkV2F0Y2hJ
bnRlcm5hbFByb3BlcnRpZXMsIERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCAxLCAyNSk7Ci0g
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0Jl
RmlyZWQsIFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0JlRmlyZWQsIDEsIDI2KTsKLSAg
ICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzQmVlbkRpY3Rpb25hcnksIEhhc0JlZW5EaWN0aW9u
YXJ5LCAxLCAyNyk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHByb3RlY3RQcm9wZXJ0eVRh
YmxlV2hpbGVUcmFuc2l0aW9uaW5nLCBQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlv
bmluZywgMSwgMjgpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNVbmRlcnNjb3JlUHJv
dG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8sIEhhc1VuZGVyc2NvcmVQcm90b1Byb3Bl
cnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgMSwgMjkpOwotICAgIERFRklORV9CSVRGSUVMRChi
b29sLCBpc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uLCBJc1Byb3BlcnR5RGVsZXRpb25UcmFu
c2l0aW9uLCAxLCAzMCk7CisgICAgREVGSU5FX0JJVEZJRUxEKHVuc2lnbmVkLCB0cmFuc2l0aW9u
UHJvcGVydHlBdHRyaWJ1dGVzLCBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLCA4LCA2KTsK
KyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkUHJldmVudEV4dGVuc2lvbnMsIERpZFByZXZl
bnRFeHRlbnNpb25zLCAxLCAxNCk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFRyYW5z
aXRpb24sIERpZFRyYW5zaXRpb24sIDEsIDE1KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
c3RhdGljUHJvcGVydGllc1JlaWZpZWQsIFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkLCAxLCAxNik7
CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc0JlZW5GbGF0dGVuZWRCZWZvcmUsIEhhc0Jl
ZW5GbGF0dGVuZWRCZWZvcmUsIDEsIDE3KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFz
Q3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcywgSGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVy
dGllcywgMSwgMTgpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFs
UHJvcGVydGllcywgRGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIDEsIDE5KTsKKyAgICBERUZJ
TkVfQklURklFTEQoYm9vbCwgdHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwg
VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgMSwgMjApOworICAgIERFRklO
RV9CSVRGSUVMRChib29sLCBoYXNCZWVuRGljdGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnksIDEs
IDIxKTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgcHJvdGVjdFByb3BlcnR5VGFibGVXaGls
ZVRyYW5zaXRpb25pbmcsIFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCAx
LCAyMik7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc1VuZGVyc2NvcmVQcm90b1Byb3Bl
cnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgSGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNs
dWRpbmdPcmlnaW5hbFByb3RvLCAxLCAyMyk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlz
UHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24sIElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24s
IDEsIDI0KTsKIAogICAgIHN0YXRpY19hc3NlcnQoc19iaXRXaWR0aE9mVHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcyA8PSBzaXplb2YoVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcykgKiA4
KTsKIApAQCAtNzM4LDcgKzgwNyw3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBK
U0NlbGwgewogICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNh
bGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgogICAgIFByb3BlcnR5VGFibGUq
IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KFZNJiB2bSkKICAgICB7Ci0gICAgICAgIGlm
IChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCkpCisg
ICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JO
dWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICBpZiAoIXByZXZpb3Vz
SUQoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzQ4LDIwICs4MTcsMjUgQEAg
Y2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBtYXkg
Z3JhYiB0aGUgbG9jaywgb3Igbm90LiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVj
dHVyZSdzIGxvY2suCiAgICAgUHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVydHlUYWJsZShWTSYg
dm0pCiAgICAgewotICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gbV9wcm9wZXJ0
eVRhYmxlVW5zYWZlLmdldCgpKQorICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0g
cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgcmV0dXJuIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSh2bSk7CiAgICAgfQogICAg
IAotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGVPck51bGwoKSBjb25zdAorICAgIFBy
b3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSBjb25zdAogICAgIHsKKyNp
ZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFByb3BlcnR5VGFi
bGUqPihtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUgJiBwcm9wZXJ0
eVRhYmxlVW5zYWZlTWFzayk7CisjZWxzZQogICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxl
VW5zYWZlLmdldCgpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgd2lsbCBncmFi
IHRoZSBsb2NrLiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2su
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlUYWJsZSogbWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKFZNJiwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gdHJ1ZSk7CiAgICAgCiAgICAgdm9p
ZCBzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpOworICAgIHZv
aWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7CiAgICAgCiAgICAgUHJvcGVydHlUYWJsZSogdGFrZVBy
b3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mKTsKICAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5
UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKQEAgLTc4MCw3ICs4NTQsNyBAQCBjbGFzcyBT
dHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB7CiAgICAgICAgIC8vIFNpbmNl
IHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgaXMgb2Z0ZW4gdGhlIHNhbWUgYXMgdGhlIGxhc3Qg
b2Zmc2V0IChleGNlcHQgaWYgdGhlcmUgYXJlIGRlbGV0ZXMpCiAgICAgICAgIC8vIHdlIGtlZXAg
dGhlIHNpemUgb2YgU3RydWN0dXJlIGRvd24gYnkgbm90IHN0b3JpbmcgYm90aC4KLSAgICAgICAg
cmV0dXJuIG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2Fw
YWNpdHkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZz
ZXQoKSwgaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkKEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluLCBKU09iamVj
dCogYmFzZSkgY29uc3Q7CkBAIC04MDIsNDggKzg3Niw3NCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdJbnRlcm5h
bFByb3BlcnRpZXMoVk0mKTsKIAorICAgIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVD
aGFpbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4oVk0mLCBTdHJ1
Y3R1cmVDaGFpbiopOworICAgIHZvaWQgY2xlYXJDYWNoZWRQcm90b3R5cGVDaGFpbigpOworCisg
ICAgdm9pZCBzZXRPdXRPZkxpbmVUeXBlRmxhZ3MoVHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFn
cyk7CisgICAgdm9pZCBzZXRDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKik7CisKICAgICBzdGF0
aWMgY29uc3RleHByIGludCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMg
Y29uc3RleHByIGludCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUx
MjsKIAogICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgcHJvcGVybHkgYWxpZ25lZCBhdCB0aGUgYmVn
aW5uaW5nIG9mIHRoZSAnU3RydWN0dXJlJwogICAgIC8vIHBhcnQgb2YgdGhlIG9iamVjdC4KICAg
ICBTdHJ1Y3R1cmVJREJsb2IgbV9ibG9iOwotICAgIFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxh
Z3MgbV9vdXRPZkxpbmVUeXBlRmxhZ3M7Ci0KLSAgICB1aW50OF90IG1faW5saW5lQ2FwYWNpdHk7
CiAKLSAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyAgICAvLyBTaG91bGQgYmUgYWNjZXNz
ZWQgdGhyb3VnaCBlbnN1cmVQcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNl
dCB0byAwIGJ5IGFub3RoZXIgdGhyZWFkLgorICAgIC8vIER1cmluZyBhIEhlYXAgU25hcHNob3Qg
R0Mgd2UgYXZvaWQgY2xlYXJpbmcgdGhlIHRhYmxlIHNvIGl0IGlzIHNhZmUgdG8gdXNlLgorI2lm
IENQVShBRERSRVNTNjQpCisgICAgLy8gSGlnaGVzdCAxNiBiaXRzIGFyZSBmb3IgbV9vdXRPZkxp
bmVUeXBlRmxhZ3MuIFJlbWFpbmluZyBiaXRzIGFyZSBmb3IgbV9wcm9wZXJ0eVRhYmxlVW5zYWZl
LgorcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgb3V0T2ZMaW5lVHlwZUZs
YWdzU2hpZnQgPSA0ODsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwcm9wZXJ0eVRh
YmxlVW5zYWZlTWFzayA9ICgxVUxMIDw8IDQ4KSAtIDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50cHRyX3Qgb3V0T2ZMaW5lVHlwZUZsYWdzU2hpZnRlZE1hc2sgPSB+cHJvcGVydHlUYWJsZVVu
c2FmZU1hc2s7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVHlwZUluZm86Ok91dE9mTGluZVR5
cGVGbGFncykgPT0gMik7CisKKyAgICAvLyBIaWdoZXN0IDE2IGJpdHMgYXJlIGZvciBtX3RyYW5z
aXRpb25PZmZzZXQuIFJlbWFpbmluZyBiaXRzIGFyZSBmb3IgbV9jbGFzc0luZm8uCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0cmFuc2l0aW9uT2Zmc2V0U2hpZnQgPSA0ODsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBjbGFzc0luZm9NYXNrID0gKDFVTEwgPDwgNDgpIC0g
MTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCB0cmFuc2l0aW9uT2Zmc2V0U2hpZnRl
ZE1hc2sgPSB+Y2xhc3NJbmZvTWFzazsKKworICAgIC8vIEhpZ2hlc3QgMTYgYml0cyBhcmUgZm9y
IG1fbWF4T2Zmc2V0LiBSZW1haW5pbmcgYml0cyBhcmUgZm9yIG1fY2FjaGVkUHJvdG90eXBlQ2hh
aW4uCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhPZmZzZXRTaGlmdCA9IDQ4Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IGNhY2hlZFByb3RvdHlwZUNoYWluTWFzayA9
ICgxVUxMIDw8IDQ4KSAtIDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgbWF4T2Zm
c2V0U2hpZnRlZE1hc2sgPSB+Y2FjaGVkUHJvdG90eXBlQ2hhaW5NYXNrOworcHJpdmF0ZToKKyAg
ICBVbnNhZmVDZWxsUG9pbnRlciBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVV
bnNhZmUgeyAwIH07CisgICAgVW5zYWZlQ2VsbFBvaW50ZXIgbV9tYXhPZmZzZXRBbmRDYWNoZWRQ
cm90b3R5cGVDaGFpbiB7IDAgfTsKKyAgICB1aW50cHRyX3QgbV90cmFuc2l0aW9uT2Zmc2V0QW5k
Q2xhc3NJbmZvIHsgMCB9OworICAgIFBhY2tlZFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4gbV90
cmFuc2l0aW9uUHJvcGVydHlOYW1lOworI2Vsc2UKKyAgICBUeXBlSW5mbzo6T3V0T2ZMaW5lVHlw
ZUZsYWdzIG1fb3V0T2ZMaW5lVHlwZUZsYWdzIHsgMCB9OworICAgIHVpbnQxNl90IG1fdHJhbnNp
dGlvbk9mZnNldCB7IDAgfTsKKyAgICB1aW50MTZfdCBtX21heE9mZnNldCB7IDAgfTsKKyAgICBX
cml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOworICAgIGNv
bnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CisgICAgbXV0YWJsZSBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW47CisgICAgUmVm
UHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWU7CisjZW5kaWYK
KyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgbV90cmFuc2l0aW9uVGFibGU7CiAKLSAgICB1
aW50MzJfdCBtX2JpdEZpZWxkOworICAgIHVpbnQzMl90IG1fYml0RmllbGQgeyAwIH07CiAKICAg
ICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiBtX3Byb3RvdHlwZTsKLSAgICBtdXRhYmxlIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmVDaGFpbj4gbV9jYWNoZWRQcm90b3R5cGVDaGFpbjsKIAogICAgIFdyaXRlQmFycmll
cjxKU0NlbGw+IG1fcHJldmlvdXNPclJhcmVEYXRhOwogCi0gICAgUmVmUHRyPFVuaXF1ZWRTdHJp
bmdJbXBsPiBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWU7Ci0KLSAgICBjb25zdCBDbGFzc0luZm8q
IG1fY2xhc3NJbmZvOwotCi0gICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIG1fdHJhbnNpdGlv
blRhYmxlOwotCi0gICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVy
dHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVh
ZC4KLSAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRo
ZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KLSAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlU
YWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwotCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBv
aW50U2V0IG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VSVChm
aXJzdE91dE9mTGluZU9mZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7CiAK
LSAgICB1aW50MTZfdCBtX3RyYW5zaXRpb25PZmZzZXQ7Ci0gICAgdWludDE2X3QgbV9tYXhPZmZz
ZXQ7Ci0KLSAgICB1aW50MzJfdCBtX3Byb3BlcnR5SGFzaDsKLSAgICBUaW55Qmxvb21GaWx0ZXIg
bV9zZWVuUHJvcGVydGllczsKKyAgICB1aW50MzJfdCBtX3Byb3BlcnR5SGFzaEFuZElubGluZUNh
cGFjaXR5OworICAgIHVpbnQzMl90IG1fc2VlblByb3BlcnRpZXMgeyAwIH07CiAKICAgICBmcmll
bmQgY2xhc3MgVk1JbnNwZWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIEpTRG9sbGFyVk1IZWxwZXI7
CiB9OworI2lmIENQVShBRERSRVNTNjQpCitzdGF0aWNfYXNzZXJ0KHNpemVvZihTdHJ1Y3R1cmUp
IDw9IDk2LCAiRG8gbm90IGluY3JlYXNlIHNpemVvZihTdHJ1Y3R1cmUpLCBpdCBpbW1lZGlhdGVs
eSBjYXVzZXMgbWVtb3J5IHJlZ3Jlc3Npb24iKTsKKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMu
aAppbmRleCAwY2Q5OGQ1MmFjYzdmNzE0YzA1YjE1M2UwODEzOWU0OTFjZDhjZjhjLi5kOTYxZjkz
Y2QxZGRhMDgyM2ZlNmU0N2EwOTZjNmNjYWI3MTVhNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCkBAIC0xNDQsNyArMTQ0LDkgQEAg
QUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHUKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAK
LSAgICBpZiAobV9zZWVuUHJvcGVydGllcy5ydWxlT3V0KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHByb3BlcnR5TmFtZS51aWQoKSkpKQorICAgIHVuc2lnbmVkIGhhc2hDb2RlID0gcHJvcGVydHlO
YW1lLnVpZCgpLT5zeW1ib2xBd2FyZUhhc2goKTsKKyAgICBBU1NFUlQoaGFzaENvZGUpOyAvLyBT
dHJpbmdJbXBsIGhhc2ggbmV2ZXIgZ2V0cyB6ZXJvLgorICAgIGlmICgobV9zZWVuUHJvcGVydGll
cyAmIGhhc2hDb2RlKSAhPSBoYXNoQ29kZSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7
CiAKICAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJs
ZUlmTm90RW1wdHkodm0pOwpAQCAtMTgxLDcgKzE4Myw3IEBAIHZvaWQgU3RydWN0dXJlOjpmb3JF
YWNoUHJvcGVydHlDb25jdXJyZW50bHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIAogICAgICAg
ICBpZiAoIWZ1bmN0b3IoUHJvcGVydHlNYXBFbnRyeShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCksIHN0cnVjdHVy
ZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpKSkpIHsKICAgICAgICAgICAgIGlmICh0
YWJsZSkKLSAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwor
ICAgICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTkyLDExICsxOTQsMTEgQEAg
dm9pZCBTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJlbnRseShjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBpZiAo
IWZ1bmN0b3IoZW50cnkpKSB7Ci0gICAgICAgICAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9j
ay51bmxvY2soKTsKKyAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+Y2VsbExvY2soKS51
bmxvY2soKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKKyAgICAgICAgdGFi
bGVTdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgfQogfQogCkBAIC0zMDIsMTUg
KzMwNCw0NSBAQCBpbmxpbmUgSlNWYWx1ZSBTdHJ1Y3R1cmU6OnByb3RvdHlwZUZvckxvb2t1cChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbAogICAgIHJldHVybiBwcm90b3R5cGVG
b3JMb29rdXBQcmltaXRpdmVJbXBsKGdsb2JhbE9iamVjdCwgdGhpcyk7CiB9CiAKK2lubGluZSBT
dHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpjYWNoZWRQcm90b3R5cGVDaGFpbigpIGNvbnN0Cit7
CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0cnVjdHVyZUNo
YWluKj4obV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90b3R5cGVDaGFpbiAmIGNhY2hlZFByb3RvdHlw
ZUNoYWluTWFzayk7CisjZWxzZQorICAgIHJldHVybiBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdl
dCgpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0Q2FjaGVkUHJvdG90
eXBlQ2hhaW4oVk0mIHZtLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pCit7CisjaWYgQ1BVKEFERFJF
U1M2NCkKKyAgICB1aW50cHRyX3QgdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjaGFp
bikgfCAobV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90b3R5cGVDaGFpbiAmIG1heE9mZnNldFNoaWZ0
ZWRNYXNrKTsKKyAgICBtX21heE9mZnNldEFuZENhY2hlZFByb3RvdHlwZUNoYWluID0gdmFsdWU7
CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgY2hhaW4pOworI2Vsc2UKKyAgICBtX2Nh
Y2hlZFByb3RvdHlwZUNoYWluLnNldCh2bSwgdGhpcywgY2hhaW4pOworI2VuZGlmCit9CisKK2lu
bGluZSB2b2lkIFN0cnVjdHVyZTo6Y2xlYXJDYWNoZWRQcm90b3R5cGVDaGFpbigpCit7CisjaWYg
Q1BVKEFERFJFU1M2NCkKKyAgICB1aW50cHRyX3QgdmFsdWUgPSBtX21heE9mZnNldEFuZENhY2hl
ZFByb3RvdHlwZUNoYWluICYgbWF4T2Zmc2V0U2hpZnRlZE1hc2s7CisgICAgbV9tYXhPZmZzZXRB
bmRDYWNoZWRQcm90b3R5cGVDaGFpbiA9IHZhbHVlOworI2Vsc2UKKyAgICBtX2NhY2hlZFByb3Rv
dHlwZUNoYWluLmNsZWFyKCk7CisjZW5kaWYKK30KKwogaW5saW5lIFN0cnVjdHVyZUNoYWluKiBT
dHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIGJhc2UpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGJhc2UtPnN0cnVjdHVy
ZSh2bSkgPT0gdGhpcyk7CiAgICAgLy8gV2UgY2FjaGUgb3VyIHByb3RvdHlwZSBjaGFpbiBzbyBv
dXIgY2xpZW50cyBjYW4gc2hhcmUgaXQuCi0gICAgaWYgKCFpc1ZhbGlkKGdsb2JhbE9iamVjdCwg
bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSwgYmFzZSkpIHsKKyAgICBpZiAoIWlzVmFsaWQo
Z2xvYmFsT2JqZWN0LCBjYWNoZWRQcm90b3R5cGVDaGFpbigpLCBiYXNlKSkgewogICAgICAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IHByb3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QsIGJhc2Up
OwotICAgICAgICBtX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldCh2bSwgdGhpcywgU3RydWN0dXJl
Q2hhaW46OmNyZWF0ZSh2bSwgcHJvdG90eXBlLmlzTnVsbCgpID8gbnVsbHB0ciA6IGFzT2JqZWN0
KHByb3RvdHlwZSkpKTsKKyAgICAgICAgY29uc3RfY2FzdDxTdHJ1Y3R1cmUqPih0aGlzKS0+c2V0
Q2FjaGVkUHJvdG90eXBlQ2hhaW4odm0sIFN0cnVjdHVyZUNoYWluOjpjcmVhdGUodm0sIHByb3Rv
dHlwZS5pc051bGwoKSA/IG51bGxwdHIgOiBhc09iamVjdChwcm90b3R5cGUpKSk7CiAgICAgfQot
ICAgIHJldHVybiBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpOworICAgIHJldHVybiBjYWNo
ZWRQcm90b3R5cGVDaGFpbigpOwogfQogCiBpbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVy
ZTo6cHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3Qq
IGJhc2UpIGNvbnN0CkBAIC0zNTAsNyArMzgyLDcgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlOjpk
aWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogCiBpbmxpbmUgV2F0Y2hw
b2ludFNldCogU3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCkpOwogICAg
IGlmICghaGFzUmFyZURhdGEoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgV1RGOjps
b2FkTG9hZEZlbmNlKCk7CkBAIC0zNzEsMTYgKzQwMywxNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
U3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5
VGFibAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICB1bnNpZ25lZCB0b3RhbFNpemUg
PSBwcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCk7Ci0gICAgdW5zaWduZWQgaW5s
aW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSA9IHRvdGFsU2l6ZSA8IG1faW5saW5lQ2Fw
YWNpdHkgPyAwIDogdG90YWxTaXplIC0gbV9pbmxpbmVDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBp
bmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90YWxTaXplID0gdG90YWxTaXplIDwgaW5saW5lQ2Fw
YWNpdHkoKSA/IDAgOiB0b3RhbFNpemUgLSBpbmxpbmVDYXBhY2l0eSgpOwogCiAgICAgYXV0byBm
YWlsID0gWyZdIChjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikgewogICAgICAgICBkYXRhTG9nKCJE
ZXRlY3RlZCBvZmZzZXQgaW5jb25zaXN0ZW5jeTogIiwgZGVzY3JpcHRpb24sICIhXG4iKTsKICAg
ICAgICAgZGF0YUxvZygidGhpcyA9ICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpOwogICAgICAg
ICBkYXRhTG9nKCJ0cmFuc2l0aW9uT2Zmc2V0ID0gIiwgdHJhbnNpdGlvbk9mZnNldCgpLCAiXG4i
KTsKICAgICAgICAgZGF0YUxvZygibWF4T2Zmc2V0ID0gIiwgbWF4T2Zmc2V0KCksICJcbiIpOwot
ICAgICAgICBkYXRhTG9nKCJtX2lubGluZUNhcGFjaXR5ID0gIiwgbV9pbmxpbmVDYXBhY2l0eSwg
IlxuIik7CisgICAgICAgIGRhdGFMb2coIm1faW5saW5lQ2FwYWNpdHkgPSAiLCBpbmxpbmVDYXBh
Y2l0eSgpLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygicHJvcGVydHlUYWJsZSA9ICIsIFJhd1Bv
aW50ZXIocHJvcGVydHlUYWJsZSksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNs
b3RzRm9yTWF4T2Zmc2V0ID0gIiwgbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQo
KSwgbV9pbmxpbmVDYXBhY2l0eSksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNs
b3RzRm9yTWF4T2Zmc2V0ID0gIiwgbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQo
KSwgaW5saW5lQ2FwYWNpdHkoKSksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCJ0b3RhbFNpemUg
PSAiLCB0b3RhbFNpemUsICJcbiIpOwogICAgICAgICBkYXRhTG9nKCJpbmxpbmVPdmVyZmxvd0Fj
Y29yZGluZ1RvVG90YWxTaXplID0gIiwgaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6
ZSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIm51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhP
ZmZzZXQgPSAiLCBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgp
KSwgIlxuIik7CkBAIC0zODgsNyArNDIwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVy
ZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeShQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmwKICAg
ICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgfTsKICAgICAKLSAgICBpZiAo
bnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSkg
IT0gdG90YWxTaXplKQorICAgIGlmIChudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNl
dCgpLCBpbmxpbmVDYXBhY2l0eSgpKSAhPSB0b3RhbFNpemUpCiAgICAgICAgIGZhaWwoIm51bWJl
ck9mU2xvdHNGb3JNYXhPZmZzZXQgZG9lc24ndCBtYXRjaCB0b3RhbFNpemUiKTsKICAgICBpZiAo
aW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSAhPSBudW1iZXJPZk91dE9mTGluZVNs
b3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpKSkKICAgICAgICAgZmFpbCgiaW5saW5lT3ZlcmZs
b3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSBkb2Vzbid0IG1hdGNoIG51bWJlck9mT3V0T2ZMaW5lU2xv
dHNGb3JNYXhPZmZzZXQiKTsKQEAgLTM5OCw3ICs0MzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
U3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5
VGFibAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3Rl
bmN5KCkgY29uc3QKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gcHJvcGVy
dHlUYWJsZU9yTnVsbCgpOworICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBwcm9w
ZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCk7CiAKICAgICBpZiAoIXByb3BlcnR5VGFibGUpIHsKICAg
ICAgICAgQVNTRVJUKCFpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSk7CkBAIC00MzksNyArNDcxLDcg
QEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQKIHsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOwogCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2Nr
ZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhlYXApOwogCiAgICAgc3dpdGNoIChzaG91bGRQaW4p
IHsKICAgICBjYXNlIFNob3VsZFBpbjo6WWVzOgpAQCAtNDYwLDEwICs0OTIsMTEgQEAgaW5saW5l
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQKIAogICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwog
Ci0gICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQobV9pbmxp
bmVDYXBhY2l0eSk7CisgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gdGFibGUtPm5leHRP
ZmZzZXQoaW5saW5lQ2FwYWNpdHkoKSk7CiAKLSAgICBtX3Byb3BlcnR5SGFzaCA9IG1fcHJvcGVy
dHlIYXNoIF4gcmVwLT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOwotICAgIG1fc2VlblByb3Bl
cnRpZXMuYWRkKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHJlcCkpOworICAgIHVuc2lnbmVkIGhh
c2hDb2RlID0gcmVwLT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOworICAgIHNldFByb3BlcnR5
SGFzaChwcm9wZXJ0eUhhc2goKSBeIGhhc2hDb2RlKTsKKyAgICBtX3NlZW5Qcm9wZXJ0aWVzID0g
bV9zZWVuUHJvcGVydGllcyB8IGhhc2hDb2RlOwogCiAgICAgYXV0byByZXN1bHQgPSB0YWJsZS0+
YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMpKTsKICAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LnNlY29uZCk7CkBAIC00ODIsNyArNTE1LDcgQEAg
dGVtcGxhdGU8U3RydWN0dXJlOjpTaG91bGRQaW4gc2hvdWxkUGluLCB0eXBlbmFtZSBGdW5jPgog
aW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBQcm9wZXJ0eVRhYmxl
KiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOwotICAgIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlND
ZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygpLCB2bS5oZWFwKTsKIAogICAgIHN3aXRjaCAoc2hv
dWxkUGluKSB7CiAgICAgY2FzZSBTaG91bGRQaW46OlllczoKQEAgLTUzMiw3ICs1NjUsNyBAQCBp
bmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKFZNJiB2bSwgUHJvcGVydAogewogICAgIEFTU0VSVChpc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKTsKICAgICBBU1NFUlQoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpOwotICAgIEFTU0VS
VChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOworICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlVW5zYWZl
T3JOdWxsKCkpOwogICAgIAogICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpZZXM+KHZtLCBw
cm9wZXJ0eU5hbWUsIGZ1bmMpOwogfQpAQCAtNTUwLDcgKzU4Myw0MyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgU3RydWN0dXJlOjpzZXRHbG9iYWxPYmplY3QoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpzZXRQcm9wZXJ0eVRh
YmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7CisjaWYgQ1BVKEFERFJFU1M2NCkK
KyAgICB1aW50cHRyX3QgdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0YWJsZSkgfCAo
bV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxlVW5zYWZlICYgb3V0T2ZMaW5lVHlw
ZUZsYWdzU2hpZnRlZE1hc2spOworICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlU
YWJsZVVuc2FmZSA9IHZhbHVlOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHRhYmxl
KTsKKyNlbHNlCiAgICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLnNldE1heUJlTnVsbCh2bSwgdGhp
cywgdGFibGUpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OmNs
ZWFyUHJvcGVydHlUYWJsZSgpCit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICB1aW50cHRyX3Qg
dmFsdWUgPSBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUgJiBvdXRP
ZkxpbmVUeXBlRmxhZ3NTaGlmdGVkTWFzazsKKyAgICBtX291dE9mTGluZVR5cGVGbGFnc0FuZFBy
b3BlcnR5VGFibGVVbnNhZmUgPSB2YWx1ZTsKKyNlbHNlCisgICAgbV9wcm9wZXJ0eVRhYmxlVW5z
YWZlLmNsZWFyKCk7CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6
c2V0T3V0T2ZMaW5lVHlwZUZsYWdzKFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3Mgb3V0T2ZM
aW5lVHlwZUZsYWdzKQoreworI2lmIENQVShBRERSRVNTNjQpCisgICAgdWludHB0cl90IHZhbHVl
ID0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4ob3V0T2ZMaW5lVHlwZUZsYWdzKSA8PCBvdXRPZkxp
bmVUeXBlRmxhZ3NTaGlmdCkgfCAobV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxl
VW5zYWZlICYgcHJvcGVydHlUYWJsZVVuc2FmZU1hc2spOworICAgIG1fb3V0T2ZMaW5lVHlwZUZs
YWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZSA9IHZhbHVlOworI2Vsc2UKKyAgICBtX291dE9mTGlu
ZVR5cGVGbGFncyA9IG91dE9mTGluZVR5cGVGbGFnczsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQgU3RydWN0dXJlOjpzZXRDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8pCit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICB1aW50cHRyX3QgdmFsdWUgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihjbGFzc0luZm8pIHwgKG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNz
SW5mbyAmIHRyYW5zaXRpb25PZmZzZXRTaGlmdGVkTWFzayk7CisgICAgbV90cmFuc2l0aW9uT2Zm
c2V0QW5kQ2xhc3NJbmZvID0gdmFsdWU7CisjZWxzZQorICAgIG1fY2xhc3NJbmZvID0gY2xhc3NJ
bmZvOworI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldFByZXZp
b3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKaW5kZXgg
ZjQ4OTI4Y2YzYjI5NTY2ZTIyNzBkODZmNjAyMzQzODVlYWJiODU4OS4uNmNjYjdhYjZmZjQ2Nzk2
ZTgzMmFmNDZiYWRiZTQwYzMxMmI1ZGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKQEAgLTM5LDggKzM5
LDggQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmlidXRlID0g
MSA8PCA2OyAvLyBVc2UgZm9yIHRyYW5zaXRpb24KIAogLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRl
cyB1c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMu
CiAvLyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUg
a2V5IHNob3VsZCBiZSAwLgotZW51bSBjbGFzcyBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gOiB1bnNp
Z25lZCB7Ci0gICAgQWxsb2NhdGVVbmRlY2lkZWQsCitlbnVtIGNsYXNzIE5vblByb3BlcnR5VHJh
bnNpdGlvbiA6IHVpbnQ4X3QgeworICAgIEFsbG9jYXRlVW5kZWNpZGVkID0gMCwKICAgICBBbGxv
Y2F0ZUludDMyLAogICAgIEFsbG9jYXRlRG91YmxlLAogICAgIEFsbG9jYXRlQ29udGlndW91cywK
QEAgLTUwLDE0ICs1MCwxNiBAQCBlbnVtIGNsYXNzIE5vblByb3BlcnR5VHJhbnNpdGlvbiA6IHVu
c2lnbmVkIHsKICAgICBBZGRJbmRleGVkQWNjZXNzb3JzLAogICAgIFByZXZlbnRFeHRlbnNpb25z
LAogICAgIFNlYWwsCi0gICAgRnJlZXplCisgICAgRnJlZXplLAorICAgIExhc3RPZk5vblByb3Bl
cnR5VHJhbnNpdGlvbiA9IEZyZWV6ZSwKIH07Ci11c2luZyBUcmFuc2l0aW9uUHJvcGVydHlBdHRy
aWJ1dGVzID0gdWludDE2X3Q7Cit1c2luZyBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzID0g
dWludDhfdDsKIAotaW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eVRyYW5z
aXRpb24gdHJhbnNpdGlvbikKK2lubGluZSBjb25zdGV4cHIgdWludDhfdCB0b0F0dHJpYnV0ZXMo
Tm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCiB7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPih0cmFuc2l0aW9uKSArIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGU7CiB9Citz
dGF0aWNfYXNzZXJ0KHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eVRyYW5zaXRpb246Okxhc3RPZk5v
blByb3BlcnR5VHJhbnNpdGlvbikgPD0gVUlOVDhfTUFYKTsKIAogaW5saW5lIGJvb2wgY2hhbmdl
c0luZGV4aW5nVHlwZShOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKIHsKQEAgLTIz
MSw3ICsyMzMsNyBAQCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogCiBwdWJsaWM6
CiAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKCkKLSAgICAgICAgOiBtX2RhdGEoVXNpbmdT
aW5nbGVTbG90RmxhZykKKyAgICAgICAgOiBtX2RhdGEoYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihV
c2luZ1NpbmdsZVNsb3RGbGFnKSkKICAgICB7CiAgICAgfQogCkBAIC0yNTcsMTkgKzI1OSwxOSBA
QCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogCiAgICAgYm9vbCBpc1VzaW5nU2lu
Z2xlU2xvdCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9kYXRhICYgVXNpbmdTaW5n
bGVTbG90RmxhZzsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fZGF0
YS5nZXQoKSkgJiBVc2luZ1NpbmdsZVNsb3RGbGFnOwogICAgIH0KIAogICAgIFRyYW5zaXRpb25N
YXAqIG1hcCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzVXNpbmdTaW5nbGVTbG90
KCkpOwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFRyYW5zaXRpb25NYXAqPihtX2RhdGEp
OworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFRyYW5zaXRpb25NYXAqPihtX2RhdGEuZ2V0
KCkpOwogICAgIH0KIAogICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8V2Vha0ltcGwqPihtX2RhdGEgJiB+VXNpbmdTaW5nbGVTbG90RmxhZyk7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8V2Vha0ltcGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Piht
X2RhdGEuZ2V0KCkpICYgflVzaW5nU2luZ2xlU2xvdEZsYWcpOwogICAgIH0KIAogICAgIHZvaWQg
c2V0TWFwKFRyYW5zaXRpb25NYXAqIG1hcCkKQEAgLTI4MCw3ICsyODIsNyBAQCBjbGFzcyBTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShp
bXBsKTsKIAogICAgICAgICAvLyBUaGlzIGltcGxpY2l0bHkgY2xlYXJzIHRoZSBmbGFnIHRoYXQg
aW5kaWNhdGVzIHdlJ3JlIHVzaW5nIGEgc2luZ2xlIHRyYW5zaXRpb24KLSAgICAgICAgbV9kYXRh
ID0gYml0d2lzZV9jYXN0PGludHB0cl90PihtYXApOworICAgICAgICBtX2RhdGEgPSBiaXR3aXNl
X2Nhc3Q8dWludDhfdCo+KG1hcCk7CiAKICAgICAgICAgQVNTRVJUKCFpc1VzaW5nU2luZ2xlU2xv
dCgpKTsKICAgICB9CkBAIC0yODgsNyArMjkwLDExIEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZSB7CiAgICAgU3RydWN0dXJlKiBzaW5nbGVUcmFuc2l0aW9uKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRTaW5nbGVUcmFuc2l0aW9uKFN0cnVjdHVyZSopOwogCi0gICAgaW50cHRyX3QgbV9k
YXRhOworI2lmIENQVShBRERSRVNTNjQpCisgICAgUGFja2VkUHRyPHVpbnQ4X3Q+IG1fZGF0YTsK
KyNlbHNlCisgICAgTmFrZWRQdHI8dWludDhfdD4gbV9kYXRhOworI2VuZGlmCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dyaXRlQmFycmllci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJy
aWVyLmgKaW5kZXggNzA3ZTIwYjZlNWFjM2Y2YmJiYzk3Yzk1NWRkMWUwMTdmNjBkMjIwMi4uZjdk
NDQ3MTk5NDA5OGM0MjE4ZWQwYTY4NzZiZGY1MjJiMzQ0MjZjZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKQEAgLTI0OCw0ICsyNDgsNiBAQCBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdyaXRlQmFycmllckJhc2U8VSwgVHJhaXRzVT4mIGxo
cywgY29uc3QgV3JpdGVCYXJyaQogICAgIHJldHVybiBsaHMuZ2V0KCkgPT0gcmhzLmdldCgpOwog
fQogCit1c2luZyBVbnNhZmVDZWxsUG9pbnRlciA9IHVpbnRwdHJfdDsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwCmluZGV4IDQ0Zjk5YmVjOTk3MmI1NzkyZWMxYjg3MTQzOTMzNzAwMjBh
YjNlNjUuLmM1OWEyMzE2MGY0NGQzMTdiNmNjY2EzZmYwMWQ5ZjY1NDc1ODRkOTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCkBAIC0yNzQsNyArMjc0LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKIAogICAgICAg
ICAgICAgc3RhY2tMaW1pdEdQUklzQ2xvYmJlcmVkID0gdHJ1ZTsKICAgICAgICAgICAgIGppdC5l
bWl0TG9hZFN0cnVjdHVyZSh2bSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwgc3RhY2tMaW1pdEdQ
Uik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6b2Zmc2V0T2ZUcmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJp
dHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSksIHNjcmF0Y2hHUFIp
OwogCiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8V2ViQXNzZW1ibHlG
dW5jdGlvbj46OnZhbHVlLCAiV2UgZG8gbm90IGNoZWNrIGZvciBzdWJ0eXBlcyBiZWxvdyIpOwog
ICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsPFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uPjo6dmFsdWUsICJXZSBkbyBub3QgY2hlY2sgZm9yIHN1YnR5cGVzIGJlbG93Iik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IDZiYmJlZmU3MGZjMWMxMzAyZjQ5NWVjM2Y2
ZTJhNDQxMDI1ZTZkNmEuLjAwNDM1NjM0MWY3NDcxOTY0NmYxNTgxNDUzNmY3NTA3ZDQxMmYzNDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0xODksOCArMTg5LDggQEAgY2xhc3MgU3Ry
aW5nSW1wbCA6IHByaXZhdGUgU3RyaW5nSW1wbFNoYXBlIHsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgTWF4TGVuZ3RoID0gU3RyaW5nSW1wbFNoYXBlOjpNYXhMZW5ndGg7CiAKLSAg
ICAvLyBUaGUgYm90dG9tIDYgYml0cyBpbiB0aGUgaGFzaCBhcmUgZmxhZ3MuCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDY7CisgICAgLy8gVGhlIGJv
dHRvbSA2IGJpdHMgaW4gdGhlIGhhc2ggYXJlIGZsYWdzLCBidXQgcmVzZXJ2ZSA4IGJpdHMgc2lu
Y2UgU3RyaW5nSGFzaCBvbmx5IGhhcyAyNCBiaXRzIGFueXdheS4KKyAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ0NvdW50ID0gODsKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ01hc2sgPSAoMXUgPDwgc19mbGFnQ291
bnQpIC0gMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5oIGIv
U291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmgKaW5kZXggZWQwZjEzZTU0NGYxMGMzMWI0
MTliZWFhYTgyNTIzNzRhODcwYWM3My4uYjhjYzM4Y2Q2ZTM1MDFkZGVhNjU5NmI2YzBlYjYyNmRi
YTRhYjExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmgKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xh
c3MgU3ltYm9sSW1wbCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5nSW1wbCB7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBGbGFncyBzX2ZsYWdJc1JlZ2lzdGVyZWQgPSAwYjAxMHU7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBGbGFncyBzX2ZsYWdJc1ByaXZhdGUgPSAwYjEwMHU7CiAKLSAgICB1bnNpZ25lZCBo
YXNoRm9yU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoRm9yU3ltYm9sOyB9CisgICAgdW5z
aWduZWQgaGFzaEZvclN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEZvclN5bWJvbCA+PiBz
X2ZsYWdDb3VudDsgfQogICAgIGJvb2wgaXNOdWxsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV9m
bGFncyAmIHNfZmxhZ0lzTnVsbFN5bWJvbDsgfQogICAgIGJvb2wgaXNSZWdpc3RlcmVkKCkgY29u
c3QgeyByZXR1cm4gbV9mbGFncyAmIHNfZmxhZ0lzUmVnaXN0ZXJlZDsgfQogICAgIGJvb2wgaXNQ
cml2YXRlKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIHNfZmxhZ0lzUHJpdmF0ZTsgfQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDdlN2FiMWY3NGZkMzQwYmUwMGNmODcwZTVlM2E4OTIzN2EwOWUzZDIuLjcwMjE4MmE1MDc5
NWVjYjNjYzlkZDhkOWMwODYxZGRjZjk5MjdjZjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAy
MC0wMi0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtK
U0NdIFNocmluayBTdHJ1Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzgyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgdGVzdCBpcyBoYWxmLWJyb2tlbiBzaW5jZSBpdCByZWxpZXMgb24g
SGFzaE1hcCdzIG9yZGVyIGltcGxpY2l0bHkuCisgICAgICAgIFdlIGNoYW5nZWQgU3ltYm9sSW1w
bCdzIGhhc2ggY29kZSwgc28gaXQgbWFrZXMgdGhlIHJlc3VsdCBkaWZmZXJlbnQuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvdGFpbC1kZWxldGVkLWZyYW1lcy90YWlsLWRlbGV0ZWQt
ZnJhbWVzLXRoaXMtdmFsdWUtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTAyLTE3ICBaYWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bT3V0LW9mLWZsb3ddIEZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5IG5lZWRzIHZl
cnRpY2FsQ29uc3RyYWludHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1
Z2dlci90YWlsLWRlbGV0ZWQtZnJhbWVzL3RhaWwtZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1ZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvdGFpbC1kZWxldGVk
LWZyYW1lcy90YWlsLWRlbGV0ZWQtZnJhbWVzLXRoaXMtdmFsdWUtZXhwZWN0ZWQudHh0CmluZGV4
IDIxMjVmYjUyOTcxY2VjZWFiN2MwODAzNGYyZDUzNmM3YTJhNGI0ZTguLmUzNzQ0NjQ1MzdhYWI3
ZDRhMGFiNWUyNGY0ZmM4YTcwZmY3ZjViN2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci90YWlsLWRlbGV0ZWQtZnJhbWVzL3RhaWwtZGVsZXRlZC1mcmFtZXMtdGhp
cy12YWx1ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
L3RhaWwtZGVsZXRlZC1mcmFtZXMvdGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLWV4cGVj
dGVkLnR4dApAQCAtMTQsNiArMTQsNiBAQCBDQUxMIFNUQUNLOgogMzogW0ZdIHN0YXJ0QUJDCiAg
IHRoaXM6IHVuZGVmaW5lZAogNDogW1BdIEdsb2JhbCBDb2RlCi0gIHRoaXM6IGMgLSAKKyAgdGhp
czogYSAtIAogUkVTVU1FRAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391443</attachid>
            <date>2020-02-21 18:56:00 -0800</date>
            <delta_ts>2020-02-21 21:58:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207827-20200221185559.patch</filename>
            <type>text/plain</type>
            <size>100189</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NDI3NDBmNDllZGMwZWQ3MmU3YzUzZjg3NzNiYzQ2NzUwNzM1NGYyLi5hNzQxZDE3Y2VkN2VkODM2
YWY4YWE1YjQxOWRkN2Y1MmM3OTk3NWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjEgQEAKKzIwMjAtMDItMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNocmlua3Mgc2l6ZW9mKFN0
cnVjdHVyZSkgZnJvbSAxMTIgdG8gOTYgKDE2IGJ5dGVzKSBpbiA2NCBiaXQgYXJjaGl0ZWN0dXJl
cy4KKyAgICAgICAgU3RydWN0dXJlIGlzIG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IGFsbG9j
YXRlZCBKU0NlbGwgaW4gSlNDLiBTbyBpdCBpcyB3b3J0aCBkb2luZworICAgICAgICBhbGwgdGhl
IHNvcnQgb2YgYml0IGhhY2tzIHRvIG1ha2UgaXQgY29tcGFjdCBhcyBtdWNoIGFzIHBvc3NpYmxl
LgorCisgICAgICAgICAgICAxLiBTdHJpbmdIYXNoZXIgaXMgYWx3YXlzIGdlbmVyYXRpbmcgMjQg
Yml0cyBoYXNoZXMgc28gZmFyLiBCeSBsZXZlcmFnaW5nIHRoaXMgZmFjdCwKKyAgICAgICAgICAg
ICAgIHdlIHN0b3JlIGhhc2ggY29kZSBpbiBTdHJ1Y3R1cmUgaW4gMyBieXRlcyAoMjQgYml0cykg
Zm9yIHByb3BlcnR5LWhhc2ggYW5kIHNlZW4tcHJvcGVydHktaGFzaC4KKyAgICAgICAgICAgIDIu
IEluc3RlYWQgb2YgdXNpbmcgYmxvb20tZmlsdGVyIG9mIHBvaW50ZXJzIGZvciBzZWVuLXByb3Bl
cnRpZXMsIHdlIHNob3VsZCB1c2UgYmxvb20tZmlsdGVyIG9mIGhhc2gtY29kZXMuCisgICAgICAg
ICAgICAzLiBVc2VkIFBhY2tlZFB0ciBmb3IgQysrIG5vbi1jb25jdXJyZW50bHkgYWNjZXNzZWQg
ZGF0YSBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgNC4gUHV0IG91dE9mTGluZVR5cGVGbGFncywg
bWF4T2Zmc2V0IGFuZCB0cmFuc2l0aW9uT2Zmc2V0IGludG8gaGlnaGVzdCBiaXRzIG9mIG1fcHJv
cGVydHlUYWJsZVVuc2FmZSwKKyAgICAgICAgICAgICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4s
IGFuZCBtX2NsYXNzSW5mby4gRG8gbm90IHVzZSBQYWNrZWRQdHIgaGVyZSBzaW5jZSBzb21lIG9m
IHRoZW0gYXJlIGNvbmN1cnJlbnRseSBhY2Nlc3NlZAorICAgICAgICAgICAgICAgYnkgR0MuCisg
ICAgICAgICAgICA1LiBQdXQgbV9pbmxpbmVDYXBhY2l0eSBpbnRvIGxvd2VyIDggYml0cyBvZiBt
X3Byb3BlcnR5SGFzaC4KKyAgICAgICAgICAgIDYuIFJlbW92ZSBtX2xvY2ssIGFuZCB1c2UgU3Ry
dWN0dXJlOjpjZWxsTG9jaygpIGluc3RlYWQuCisgICAgICAgICAgICA3LiBSZW1vdmUgbV9jYWNo
ZWRQcm90b3R5cGVDaGFpbiBjbGVhcmluZyBmcm9tIHRoZSBjb25jdXJyZW50IGNvbGxlY3RvciBz
aW5jZSBpdCBpcyBkZWFkIGNvZGUsIGl0IHdhcyBvbGQgY29kZS4KKyAgICAgICAgICAgICAgIFdl
IGFyZSBzZXR0aW5nIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4gb25seSBpZiBTdHJ1Y3R1cmUgaXMg
Zm9yIEpTT2JqZWN0LiBDbGVhcmluZyBoYXBwZW5zIG9ubHkgaWYgaXQgaXMgbm90CisgICAgICAg
ICAgICAgICBhIFN0cnVjdHVyZSBmb3IgSlNPYmplY3QuCisgICAgICAgICAgICA4LiBMb2NraW5n
IHN0cnVjdHVyZSB3aGVuIG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSBpcyBjaGFuZ2VkLiBUaGlz
IGZpZWxkIGlzIG9ubHkgbW9kaWZpZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgICAg
ICAgICBBbmQgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhpcyBmaWVsZCByZXF1aXJlcyBsb2NraW5n
LiBUaGVuIHdlIGNhbiB1c2UgNiBieXRlcyBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuCisgICAg
ICAgICAgICA5LiBXZSBlbnN1cmUgdGhhdCBvbmx5IHRoZSBtYWluIHRocmVhZCBpcyBhY2Nlc3Np
bmcgbV90cmFuc2l0aW9uVGFibGUuIFRoZW4gd2UgY2FuIHVzZSA2IGJ5dGVzIG1fdHJhbnNpdGlv
blRhYmxlLgorCisgICAgICAgIENvbWJpbmluZyBhbGwgb2YgdGhlIGFib3ZlIHRlY2huaXF1ZXMg
YW5kIGdldHRpbmcgMTYgYnl0ZXMuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdWJD
bGFzcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVU
aGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVBy
b21pc2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRl
SW50ZXJuYWxGaWVsZE9iamVjdCk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZVByb21pc2UpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlSW50ZXJuYWxGaWVs
ZE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVD
aGVja1N1YkNsYXNzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAg
ICAgICogcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpDbG9uZWRB
cmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9Db25jdXJyZW50
SlNMb2NrLmg6CisgICAgICAgIChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlckJhc2U6OkNvbmN1cnJl
bnRKU0xvY2tlckJhc2UpOgorICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJ
bXBsOjpHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsKToKKyAgICAgICAgKEpTQzo6R0NTYWZl
Q29uY3VycmVudEpTTG9ja2VySW1wbDo6fkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwpOgor
ICAgICAgICAoSlNDOjpDb25jdXJyZW50SlNMb2NrZXJJbXBsOjpDb25jdXJyZW50SlNMb2NrZXJJ
bXBsKToKKyAgICAgICAgKEpTQzo6R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyOjpHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXI6On5HQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb25jdXJyZW50SlNMb2NrZXI6OkNvbmN1cnJlbnRKU0xvY2tlcik6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKToKKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3RDb25j
dXJyZW50bHkgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGU6OnNpbmdsZVRyYW5zaXRpb24gY29uc3QpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OnNldFNpbmdsZVRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmNvbnRhaW5zIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJl
Q29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRy
YW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJh
bnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlv
bik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3cpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpwaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBp
bkZvckNhY2hpbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVw
bGFjZW1lbnRXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJv
cGVydHlUYWJsZUZvclBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjYW5DYWNoZVByb3Bl
cnR5TmFtZUVudW1lcmF0b3IgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6
CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmb3JFYWNoUHJvcGVydHlD
b25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhY2hlZFByb3RvdHlwZUNo
YWluIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRDYWNoZWRQcm90b3R5cGVD
aGFpbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4gY29uc3QpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvcGVydHlUYWJs
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2xlYXJQcm9wZXJ0eVRhYmxlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpzZXRPdXRPZkxpbmVUeXBlRmxhZ3MpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnNldENsYXNzSW5mbyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGUuaDoKKyAgICAgICAgKEpTQzo6dG9BdHRyaWJ1dGVzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmlzVXNpbmdTaW5nbGVT
bG90IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjptYXAg
Y29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OndlYWtJbXBs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzZXRNYXAp
OgorICAgICAgICAqIHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg6CisgICAgICAgICogdG9vbHMvSlNE
b2xsYXJWTS5jcHA6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0
U3RydWN0dXJlVHJhbnNpdGlvbkxpc3QpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVu
dHJ5cG9pbnRTbG93KToKKwogMjAyMC0wMi0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgTWFrZSBzdXBwb3J0IGZvciBieXRlY29kZSBjYWNoaW5nIG1vcmUgcm9i
dXN0IGFnYWluc3QgZmlsZSBjb3JydXB0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBjZjEyZjI3NjUwZDQ4ZDUwMTViOGRj
YzExZTU3ODI1YjM1YWRiODAyLi4zMTRiZWQyNDZmMjcwNTc4M2Y2ZDEzNmNkNGE5OTk4YjczYzBk
NGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTAyLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gU2hyaW5rIFN0cnVjdHVyZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3ODI3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBDb21wYWN0UG9p
bnRlclR1cGxlIHVzYWJsZSBmb3Igc3RvcmluZyAxNiBiaXRzIGRhdGEuCisKKyAgICAgICAgKiB3
dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aDoKKyAgICAgICAgKiB3dGYvdGV4dC9TeW1ib2xJbXBsLmg6CisgICAgICAgIChXVEY6OlN5bWJv
bEltcGw6Omhhc2hGb3JTeW1ib2wgY29uc3QpOgorCiAyMDIwLTAyLTIxICBBbnR0aSBLb2l2aXN0
byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNTcwNzIpOiBNb3Rp
b25NYXJrIHwgTWFjIHwgLTEwJQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAppbmRleCA2NDJiMTYzNTZmOTBlOWMzODYwMmViYzU3ZmQ5ZTA0YTBm
NDViNTI4Li4zMmRjZmQwMjAyN2M2ZTUxODhmNzI2ODEyYmM0ZmMyODViZThlYzZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtOTYw
NSw3ICs5NjA1LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N1YkNsYXNz
KE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzcGVjaWZpZWRHUFIgPSBzcGVjaWZpZWQuZ3By
KCk7CiAKICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgYmFzZUdQUiwgb3Ro
ZXJHUFIsIHNwZWNpZmllZEdQUik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG90aGVyR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgb3RoZXJH
UFIpOworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKG90aGVyR1BSLCBTdHJ1Y3R1cmU6Om9mZnNldE9mVHJhbnNpdGlvbk9mZnNl
dEFuZENsYXNzSW5mbygpKSwgb3RoZXJHUFIpOworICAgICAgICBtX2ppdC5hbmRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0dXJlOjpjbGFz
c0luZm9NYXNrKSksIG90aGVyR1BSKTsKKyNlbHNlCisgICAgICAgIG1faml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKG90aGVyR1BSLCBTdHJ1Y3R1cmU6Om9mZnNldE9mQ2xhc3NJbmZv
KCkpLCBvdGhlckdQUik7CisjZW5kaWYKICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobm9kZS0+Y2xhc3NJbmZvKCkpLCBzcGVjaWZpZWRHUFIpOwogCiAgICAg
ICAgIENDYWxsSGVscGVyczo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CkBAIC0xMjgzOSw3
ICsxMjg0NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVUaGlzKE5vZGUq
IG5vZGUpCiAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgp
LCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgYnV0dGVyZmx5LCBzY3JhdGNoR1BSLCBzbG93
UGF0aCk7CiAKLSAgICBtX2ppdC5sb2FkOChKSVRDb21waWxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVH
UFIsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIGlubGluZUNhcGFjaXR5R1BS
KTsKKyAgICBtX2ppdC5sb2FkOChKSVRDb21waWxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0
cnVjdHVyZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgaW5saW5lQ2FwYWNpdHlHUFIpOwog
ICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIGlubGluZUNh
cGFjaXR5R1BSKTsKICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAKQEAgLTEyODc3LDgg
KzEyODgyLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVQcm9taXNlKE5v
ZGUqIG5vZGUpCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0YUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZJbnRlcm5h
bEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUoKSArIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9u
UHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwg
c3RydWN0dXJlR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIo
Q0NhbGxIZWxwZXJzOjpaZXJvLCBzdHJ1Y3R1cmVHUFIpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIobm9kZS0+aXNJbnRlcm5hbFByb21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjpp
bmZvKCkgOiBKU1Byb21pc2U6OmluZm8oKSksIHNjcmF0Y2gxR1BSKTsKLSAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQ
UiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpjbGFzc0lu
Zm9PZmZzZXQoKSkpKTsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgIG1faml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpvZmZzZXRPZlRyYW5z
aXRpb25PZmZzZXRBbmRDbGFzc0luZm8oKSksIHNjcmF0Y2gxR1BSKTsKKyAgICBtX2ppdC5hbmRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0
dXJlOjpjbGFzc0luZm9NYXNrKSksIHNjcmF0Y2gxR1BSKTsKKyNlbHNlCisgICAgbV9qaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6Om9mZnNl
dE9mQ2xhc3NJbmZvKCkpLCBzY3JhdGNoMUdQUik7CisjZW5kaWYKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwg
VHJ1c3RlZEltbVB0cihub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gSlNJbnRlcm5hbFByb21p
c2U6OmluZm8oKSA6IEpTUHJvbWlzZTo6aW5mbygpKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2JqZWN0KSwgc2NyYXRj
aDFHUFIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVy
czo6Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJl
R1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSkpOwogCkBAIC0xMjkyNSw4ICsx
MjkzNSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlSW50ZXJuYWxGaWVs
ZE9iamVjdChOb2RlKiBub2RlLCBPcGVyYXRpb24gb3BlcgogICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmFyZURhdGFHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwogICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlKCkgKyBJ
bnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBK
U0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZUdQUik7CiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgc3RydWN0dXJlR1BS
KSk7Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKEpTQ2xhc3M6OmluZm8oKSksIHNjcmF0
Y2gxR1BSKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVy
ZUdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkpKTsKKyNpZiBDUFUoQUREUkVTUzY0
KQorICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwg
U3RydWN0dXJlOjpvZmZzZXRPZlRyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8oKSksIHNjcmF0
Y2gxR1BSKTsKKyAgICBtX2ppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJp
dHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSksIHNjcmF0Y2gxR1BS
KTsKKyNlbHNlCisgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0
dXJlR1BSLCBTdHJ1Y3R1cmU6Om9mZnNldE9mQ2xhc3NJbmZvKCkpLCBzY3JhdGNoMUdQUik7Cisj
ZW5kaWYKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgVHJ1c3RlZEltbVB0cihKU0NsYXNzOjppbmZvKCkpKSk7
CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgp
LCBnbG9iYWxPYmplY3QpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgKaW5kZXggYjEwOGFiZmNjYjg5NThhODMwN2MwYWE3OGNkNjdmMjAy
ZDNiOGM1Yy4uZTBkYzI4OTA2YWIwMmNjZWRkNzlkOGI4MjEwZDEyOTlmYTYwOTczNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgKQEAgLTEzOSwxMCArMTM5LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKICAgICBtYWNybyhTdHJpbmdJbXBsX2RhdGEsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSkg
XAogICAgIG1hY3JvKFN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzLCBTdHJpbmdJbXBsOjpmbGFnc09m
ZnNldCgpKSBcCiAgICAgbWFjcm8oU3RyaW5nSW1wbF9sZW5ndGgsIFN0cmluZ0ltcGw6Omxlbmd0
aE1lbW9yeU9mZnNldCgpKSBcCi0gICAgbWFjcm8oU3RydWN0dXJlX2NsYXNzSW5mbywgU3RydWN0
dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkgXAorICAgIG1hY3JvKFN0cnVjdHVyZV90cmFuc2l0aW9u
T2Zmc2V0QW5kQ2xhc3NJbmZvLCBTdHJ1Y3R1cmU6Om9mZnNldE9mVHJhbnNpdGlvbk9mZnNldEFu
ZENsYXNzSW5mbygpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2dsb2JhbE9iamVjdCwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9pbmRleGlu
Z01vZGVJbmNsdWRpbmdIaXN0b3J5LCBTdHJ1Y3R1cmU6OmluZGV4aW5nTW9kZUluY2x1ZGluZ0hp
c3RvcnlPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVyZV9pbmxpbmVDYXBhY2l0eSwgU3Ry
dWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSBcCisgICAgbWFjcm8oU3RydWN0dXJlX2lu
bGluZUNhcGFjaXR5LCBTdHJ1Y3R1cmU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSkgXAogICAg
IG1hY3JvKFN0cnVjdHVyZV9wcmV2aW91c09yUmFyZURhdGEsIFN0cnVjdHVyZTo6cHJldmlvdXNP
clJhcmVEYXRhT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfcHJvdG90eXBlLCBTdHJ1
Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3N0cnVjdHVy
ZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA0ZDM0MjdiYzgyZThjOWIyNDdh
Yzg3MWEwMjAwMDFiYjIzODI5ZjI2Li43NjNmODQ3MzBlODBmNTIxYjI5NWExNmZiY2VjODZlNGQ1
NmI5Yjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCkBAIC02Njc1LDcgKzY2NzUsOCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBt
X291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQoc3RydWN0dXJlKSwgcmFyZWx5KHNsb3dDYXNlKSwg
dXN1YWxseShoYXNTdHJ1Y3R1cmUpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhoYXNTdHJ1
Y3R1cmUsIGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291
dC5lcXVhbChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJ
bmZvKSwgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gSlNJ
bnRlcm5hbFByb21pc2U6OmluZm8oKSA6IEpTUHJvbWlzZTo6aW5mbygpKSksIHVzdWFsbHkoY2hl
Y2tHbG9iYWxPYmplY3RDYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAgICAgIExWYWx1ZSBj
bGFzc0luZm8gPSBtX291dC5iaXRBbmQobV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMu
U3RydWN0dXJlX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8pLCBtX291dC5jb25zdEludFB0
cihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmVxdWFsKGNsYXNzSW5mbywgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5pc0ludGVybmFsUHJv
bWlzZSgpID8gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSA6IEpTUHJvbWlzZTo6aW5mbygpKSks
IHVzdWFsbHkoY2hlY2tHbG9iYWxPYmplY3RDYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CiAKICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tHbG9iYWxPYmplY3RDYXNlLCBmYXN0QWxsb2NhdGlv
bkNhc2UpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBkZXJpdmVkU3RydWN0dXJlID0gbV9vdXQu
YW5jaG9yKHN0cnVjdHVyZSk7CkBAIC02NzMwLDcgKzY3MzEsOCBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQoc3RydWN0dXJlKSwgcmFy
ZWx5KHNsb3dDYXNlKSwgdXN1YWxseShoYXNTdHJ1Y3R1cmUpKTsKIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhoYXNTdHJ1Y3R1cmUsIGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSk7Ci0gICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5lcXVhbChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5T
dHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIoSlNDbGFzczo6aW5mbygpKSks
IHVzdWFsbHkoY2hlY2tHbG9iYWxPYmplY3RDYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAg
ICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5iaXRBbmQobV9vdXQubG9hZFB0cihzdHJ1Y3R1
cmUsIG1faGVhcHMuU3RydWN0dXJlX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8pLCBtX291
dC5jb25zdEludFB0cihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0LmVxdWFsKGNsYXNzSW5mbywgbV9vdXQuY29uc3RJbnRQdHIoSlNDbGFzczo6
aW5mbygpKSksIHVzdWFsbHkoY2hlY2tHbG9iYWxPYmplY3RDYXNlKSwgcmFyZWx5KHNsb3dDYXNl
KSk7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tHbG9iYWxPYmplY3RDYXNlLCBmYXN0
QWxsb2NhdGlvbkNhc2UpOwogICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwobV9vdXQu
bG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX2dsb2JhbE9iamVjdCksIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCkpLCB1c3VhbGx5KGZhc3RBbGxvY2F0aW9uQ2FzZSksIHJhcmVs
eShzbG93Q2FzZSkpOwpAQCAtMTMyMDgsNyArMTMyMTAsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMg
ewogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2so
KTsKIAogICAgICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUoY2VsbCk7
Ci0gICAgICAgICAgICBMVmFsdWUgY2xhc3NJbmZvID0gbV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUs
IG1faGVhcHMuU3RydWN0dXJlX2NsYXNzSW5mbyk7CisgICAgICAgICAgICBMVmFsdWUgY2xhc3NJ
bmZvID0gbV9vdXQuYml0QW5kKG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVj
dHVyZV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIoU3Ry
dWN0dXJlOjpjbGFzc0luZm9NYXNrKSk7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvdGhl
ckF0U3RhcnQgPSBtX291dC5hbmNob3IoY2xhc3NJbmZvKTsKICAgICAgICAgICAgIG1fb3V0Lmp1
bXAobG9vcCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4
IDdmMzU4YzEyMDNiZGVhZTkwZDQ0YTJjN2ZiODg5OTc4MDg5Y2E4NWYuLmZkZTAwYmNjOGM5MDQ1
OWM3NTM0NTA2MmE2MTFkYzFkZTQyOWNmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcApAQCAtOTc5LDcgKzk3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRy
KTsKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFy
aWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJl
Zywgc2xvd0Nhc2VzKTsKLSAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJl
OjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgbG9hZDgoQWRkcmVz
cyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2Ny
YXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2Ny
YXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBjZDY2N2IyZTU4NzgyMGUzNzM1Y2QzODEzOTM2Zjk2
YTk4Yzc5NjZhLi5iMTFmNjU1ZmNiNmY2NjA1NTI3OTljMTJhMTBjY2JmOTE5MGU4NjIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xMDkz
LDcgKzEwOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBh
dXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgZW1pdEFsbG9jYXRl
SlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJl
Zywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAg
bG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1
Y3R1cmU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJ
bml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVz
dWx0UmVnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25l
ZEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1
bWVudHMuY3BwCmluZGV4IDk2YTM2MzVlNjgyNzM5M2VlODM2ZDgwNDc3NzI0YTI1ZDU0NmMyNjEu
LjI0OWJhNWFhYzUxZTUwOTBjZjIzZjdmOWU4ZTllNDdiYzIxZWY0N2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcApAQCAtMTUzLDcg
KzE1Myw3IEBAIFN0cnVjdHVyZSogQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENsb25lZEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBpbmRleGlu
Z1R5cGUpOwogICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKICAg
ICAgICAgdm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksCi0gICAgICAgIFsmXSAoY29uc3QgR0NTYWZl
Q29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNl
dCBuZXdNYXhPZmZzZXQpIHsKKyAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlND
ZWxsTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhP
ZmZzZXQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCA9PSBjbG9uZWRBcmd1
bWVudHNMZW5ndGhQcm9wZXJ0eU9mZnNldCk7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnNldE1h
eE9mZnNldCh2bSwgbmV3TWF4T2Zmc2V0KTsKICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SlNMb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SlNMb2NrLmgKaW5kZXggYWEyNzNiYWRiZWZh
NzM3YTBlYWE1MzRmYmViYTlmNTAxZmRiODYyNy4uOTVlYmEwYmYzZjlhMjAwNWI2NDUyZWFkZjdj
ZTBhNDI1Y2E1NmE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uY3VycmVudEpTTG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bmN1cnJlbnRKU0xvY2suaApAQCAtMzMsMTggKzMzLDE4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
dXNpbmcgQ29uY3VycmVudEpTTG9jayA9IExvY2s7Ci11c2luZyBDb25jdXJyZW50SlNMb2NrZXJJ
bXBsID0gTG9ja0hvbGRlcjsKIAogc3RhdGljX2Fzc2VydChzaXplb2YoQ29uY3VycmVudEpTTG9j
aykgPT0gMSwgIlJlZ2FyZGxlc3Mgb2Ygc3RhdHVzIG9mIGNvbmN1cnJlbnQgSlMgZmxhZywgc2l6
ZSBvZiBDb251cnJlbnRKU0xvY2sgaXMgYWx3YXlzIG9uZSBieXRlLiIpOwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBMb2NrPgogY2xhc3MgQ29uY3VycmVudEpTTG9ja2VyQmFzZSA6IHB1YmxpYyBBYnN0
cmFjdExvY2tlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uY3VycmVudEpTTG9ja2Vy
QmFzZSk7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9ja2VyQmFzZShDb25j
dXJyZW50SlNMb2NrJiBsb2NrYWJsZSkKKyAgICBleHBsaWNpdCBDb25jdXJyZW50SlNMb2NrZXJC
YXNlKExvY2smIGxvY2thYmxlKQogICAgICAgICA6IG1fbG9ja2VyKCZsb2NrYWJsZSkKICAgICB7
CiAgICAgfQotICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoQ29uY3VycmVudEpT
TG9jayogbG9ja2FibGUpCisgICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9ja2VyQmFzZShMb2Nr
KiBsb2NrYWJsZSkKICAgICAgICAgOiBtX2xvY2tlcihsb2NrYWJsZSkKICAgICB7CiAgICAgfQpA
QCAtNjQsNjMgKzY0LDY1IEBAIGNsYXNzIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgOiBwdWJsaWMg
QWJzdHJhY3RMb2NrZXIgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXJJbXBsIG1fbG9ja2VyOworICAgIExvY2tlcjxMb2NrPiBtX2xvY2tlcjsKIH07CiAKLWNsYXNz
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJCYXNl
IHsKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2s+CitjbGFzcyBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXJJbXBsIDogcHVibGljIENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4gewogcHVibGljOgot
ICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrJiBsb2NrYWJsZSwg
SGVhcCYgaGVhcCkKLSAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQor
ICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwoTG9jayYgbG9ja2FibGUsIEhlYXAmIGhl
YXApCisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPihsb2NrYWJsZSkKICAg
ICAgICAgLCBtX2RlZmVyR0MoaGVhcCkKICAgICB7CiAgICAgfQogCi0gICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyKENvbmN1cnJlbnRKU0xvY2sqIGxvY2thYmxlLCBIZWFwJiBoZWFwKQotICAg
ICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UobG9ja2FibGUpCisgICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VySW1wbChMb2NrKiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKKyAgICAgICAgOiBD
b25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+KGxvY2thYmxlKQogICAgICAgICAsIG1fZGVmZXJH
QyhoZWFwKQogICAgIHsKICAgICB9CiAKLSAgICB+R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKCkK
KyAgICB+R0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbCgpCiAgICAgewogICAgICAgICAvLyBX
ZSBoYXZlIHRvIHVubG9jayBlYXJseSBkdWUgdG8gdGhlIGRlc3RydWN0aW9uIG9yZGVyIG9mIGJh
c2UKICAgICAgICAgLy8gdnMuIGRlcml2ZWQgY2xhc3Nlcy4gSWYgd2UgZGlkbid0LCB0aGVuIHdl
IHdvdWxkIGRlc3Ryb3kgdGhlIAogICAgICAgICAvLyBEZWZlckdDIG9iamVjdCBiZWZvcmUgdW5s
b2NraW5nIHRoZSBsb2NrIHdoaWNoIGNvdWxkIGNhdXNlIGEgR0MKICAgICAgICAgLy8gYW5kIHJl
c3VsdGluZyBkZWFkbG9jay4KLSAgICAgICAgdW5sb2NrRWFybHkoKTsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZTxMb2NrPjo6dW5sb2NrRWFybHkoKTsKICAgICB9CiAKIHByaXZhdGU6
CiAgICAgRGVmZXJHQyBtX2RlZmVyR0M7CiB9OwogCi1jbGFzcyBDb25jdXJyZW50SlNMb2NrZXIg
OiBwdWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZSB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2Nr
PgorY2xhc3MgQ29uY3VycmVudEpTTG9ja2VySW1wbCA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlPExvY2s+IHsKIHB1YmxpYzoKLSAgICBDb25jdXJyZW50SlNMb2NrZXIoQ29uY3VycmVu
dEpTTG9jayYgbG9ja2FibGUpCi0gICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShsb2Nr
YWJsZSkKKyAgICBDb25jdXJyZW50SlNMb2NrZXJJbXBsKExvY2smIGxvY2thYmxlKQorICAgICAg
ICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4obG9ja2FibGUpCiAjaWYgIWRlZmluZWQo
TkRFQlVHKQogICAgICAgICAsIG1fZGlzYWxsb3dHQyhzdGQ6OmluX3BsYWNlKQogI2VuZGlmCiAg
ICAgewogICAgIH0KIAotICAgIENvbmN1cnJlbnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrKiBs
b2NrYWJsZSkKLSAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAg
IENvbmN1cnJlbnRKU0xvY2tlckltcGwoTG9jayogbG9ja2FibGUpCisgICAgICAgIDogQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZTxMb2NrPihsb2NrYWJsZSkKICNpZiAhZGVmaW5lZChOREVCVUcpCiAg
ICAgICAgICwgbV9kaXNhbGxvd0dDKHN0ZDo6aW5fcGxhY2UpCiAjZW5kaWYKICAgICB7CiAgICAg
fQogCi0gICAgQ29uY3VycmVudEpTTG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKLSAgICAg
ICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKE5vTG9ja2luZ05lY2Vzc2FyeSkKKyAgICBDb25j
dXJyZW50SlNMb2NrZXJJbXBsKE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKKyAgICAgICAgOiBDb25j
dXJyZW50SlNMb2NrZXJCYXNlPExvY2s+KE5vTG9ja2luZ05lY2Vzc2FyeSkKICNpZiAhZGVmaW5l
ZChOREVCVUcpCiAgICAgICAgICwgbV9kaXNhbGxvd0dDKFdURjo6bnVsbG9wdCkKICNlbmRpZgog
ICAgIHsKICAgICB9CiAgICAgCi0gICAgQ29uY3VycmVudEpTTG9ja2VyKGludCkgPSBkZWxldGU7
CisgICAgQ29uY3VycmVudEpTTG9ja2VySW1wbChpbnQpID0gZGVsZXRlOwogCiAjaWYgIWRlZmlu
ZWQoTkRFQlVHKQogcHJpdmF0ZToKQEAgLTEyOCw0ICsxMzAsNyBAQCBjbGFzcyBDb25jdXJyZW50
SlNMb2NrZXIgOiBwdWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZSB7CiAjZW5kaWYKIH07CiAK
K3VzaW5nIENvbmN1cnJlbnRKU0xvY2tlciA9IENvbmN1cnJlbnRKU0xvY2tlckltcGw8Q29uY3Vy
cmVudEpTTG9jaz47Cit1c2luZyBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgPSBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXJJbXBsPENvbmN1cnJlbnRKU0xvY2s+OworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKaW5kZXggNjY1ZDA4ODljZjQ0
NjFjM2FiMGEyYWY0YjA3YzZhNThjOTA0MjFjNC4uZDU2NTZmOGJmZGZmNjMyOTkyYWMxZGE0NTFl
MzVjMWE1NDhkNDY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKQEAg
LTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAjaW5jbHVkZSAiQ2VsbFN0
YXRlLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkNvbnN0cnVj
dERhdGEuaCIKICNpbmNsdWRlICJFbnVtZXJhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJIZWFwLmgi
CkBAIC0yODgsNiArMjg5LDkgQEAgY2xhc3MgSlNDZWxsTG9jayA6IHB1YmxpYyBKU0NlbGwgewog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrU2xvdygpOwogfTsKIAordXNpbmcgQ29u
Y3VycmVudEpTQ2VsbExvY2tlciA9IENvbmN1cnJlbnRKU0xvY2tlckltcGw8SlNDZWxsTG9jaz47
Cit1c2luZyBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyID0gR0NTYWZlQ29uY3VycmVudEpT
TG9ja2VySW1wbDxKU0NlbGxMb2NrPjsKKwogLy8gRklYTUU6IFJlZmVyIHRvIFN1YnNwYWNlIGJ5
IHJlZmVyZW5jZS4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjY5ODgKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKaW5kZXggYWNkMjlkZWQ4MTM1MWZiMjg0YjIxNTlhZDQ3YTYzMWMz
NDk0ZjFkZi4uM2E1MTIxZDY5ZGZiNGZiMmZiOWY4ODVjYTdmZjNmZTU1YzA0ZGQ4MCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcApAQCAtMjAwNSw3ICsyMDA1
LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXIKIAogICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVh
YmxlRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBHQ1Nh
ZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQpIHsg
fSk7CisgICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91
dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgW10oY29uc3QgR0NTYWZlQ29uY3VycmVudEpT
Q2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnJlbW92ZVByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgJmRlZmVy
cmVkV2F0Y2hwb2ludEZpcmUpOwogICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5ICYmICFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIXN0cnVjdHVyZS0+aGFz
SW5kZXhpbmdIZWFkZXIodGhpc09iamVjdCkpIHsKQEAgLTM3NjYsNyArMzc2Niw3IEBAIHZvaWQg
SlNPYmplY3Q6OmNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mIHZtKQogICAgICAgICB2bSwgU3RydWN0
dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCAm
ZGVmZXJyZWRXYXRjaHBvaW50RmlyZSkpOwogfQogCi12b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRl
cmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikK
K3ZvaWQgSlNPYmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2Fm
ZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBz
aXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKIHsKICAgICAvLyBUaGlzIGNvdWxkIGludGVy
bGVhdmUgdmlzaXRDaGlsZHJlbiBiZWNhdXNlIHNvbWUgb2xkIHN0cnVjdHVyZSBjb3VsZCBoYXZl
IGJlZW4gYSBub24KICAgICAvLyBkaWN0aW9uYXJ5IHN0cnVjdHVyZS4gV2UgaGF2ZSB0byBiZSBj
cmF6eSBjYXJlZnVsLiBCdXQsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGJlIGhvbGRpbmcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCmluZGV4IGVjNjMwMGVhOWI5NzJjZTli
YTBmYWQ4MTgyNTdhZmIyMGQ4MmEyZWQuLjY1MTE2MGJlMGIwMTc4NzBjZTkwOTZiZjkyYTU1ZGNm
MGU2Y2RiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaApAQCAt
ODE1LDcgKzgxNSw3IEBAIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAgICAgewog
ICAgICAgICBzdHJ1Y3R1cmUodm0pLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhp
cyk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3Qg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6
ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOworICAgIHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRl
ckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFZNJiwgU3Ry
dWN0dXJlKiwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOwogCiAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0CiAgICAgewpAQCAtMTMyOSw3ICsxMzI5LDcgQEAg
aW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiAvLyBmbGF0dGVuIGFuIG9iamVjdC4KIGlubGluZSBKU1ZhbHVl
IEpTT2JqZWN0OjpnZXREaXJlY3RDb25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkgY29uc3QKIHsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKHN0cnVjdHVyZS0+bG9jaygpKTsKKyAgICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tl
cihzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkpOwogICAgIGlmICghc3RydWN0dXJlLT5pc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJuIGdldERpcmVjdChv
ZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3RJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGlu
ZXMuaAppbmRleCBhNjcwMDM0N2Y2OTc2ZTYxYjA1ZGIxOGYyYjA5NmFhYTc5ZTJlYmIzLi45NWE2
NzEwYzJlMzU2ODQzNmQ1Y2NhMjhjODZiMmRjOTRkOGE4ODAzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaApAQCAtMjE2LDcgKzIxNiw3IEBA
IEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgSlNPYmplY3Q6OnByZXBhcmVUb1B1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2CiAgICAgUHJvcGVydHlPZmZzZXQgcmVzdWx0OwogICAg
IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKICAgICAgICAgdm0sIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywKLSAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01h
eE9mZnNldCkgeworICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2Nr
ZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkg
ewogICAgICAgICAgICAgdW5zaWduZWQgbmV3T3V0T2ZMaW5lQ2FwYWNpdHkgPSBTdHJ1Y3R1cmU6
Om91dE9mTGluZUNhcGFjaXR5KG5ld01heE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobmV3T3V0
T2ZMaW5lQ2FwYWNpdHkgIT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKICAgICAgICAgICAgICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0s
IG9sZE91dE9mTGluZUNhcGFjaXR5LCBuZXdPdXRPZkxpbmVDYXBhY2l0eSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAppbmRleCBlZGE0NDZiZmJlMjY3YWIw
MWI4NTJlMTVmZGU5YzljMzBlNmY1OGU2Li5iYmIyN2IwN2QzMWJkOTM1NTRjZGYzNjY3ZGE0Zjkz
NTY3YWU0ZjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAKQEAgLTU1LDEwICs1NSwxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJ1Y3R1cmUqPiYgbGl2ZVN0
cnVjdHVyZVNldCA9ICoobmV3IEhhc2hTZXQ8U3RydWN0dXJlKj4pOwogY2xhc3MgU2luZ2xlU2xv
dFRyYW5zaXRpb25XZWFrT3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAg
ICB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGUK
ICAgICB7CisgICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6
Om1heUJlR0NUaHJlYWQoKSk7CiAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSogdGFi
bGUgPSByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSo+KGNvbnRleHQp
OwogICAgICAgICBBU1NFUlQodGFibGUtPmlzVXNpbmdTaW5nbGVTbG90KCkpOwogICAgICAgICBX
ZWFrU2V0OjpkZWFsbG9jYXRlKHRhYmxlLT53ZWFrSW1wbCgpKTsKLSAgICAgICAgdGFibGUtPm1f
ZGF0YSA9IFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6VXNpbmdTaW5nbGVTbG90RmxhZzsKKyAg
ICAgICAgdGFibGUtPm1fZGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlOjpVc2luZ1NpbmdsZVNsb3RGbGFnKTsKICAgICB9CiB9OwogCkBAIC03MCw2
ICs3MSw3IEBAIHN0YXRpYyBTaW5nbGVTbG90VHJhbnNpdGlvbldlYWtPd25lciYgc2luZ2xlU2xv
dFRyYW5zaXRpb25XZWFrT3duZXIoKQogCiBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGU6OnNpbmdsZVRyYW5zaXRpb24oKSBjb25zdAogeworICAgIEFTU0VSVCghaXND
b21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CiAgICAgQVNT
RVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwogICAgIGlmIChXZWFrSW1wbCogaW1wbCA9IHRoaXMt
PndlYWtJbXBsKCkpIHsKICAgICAgICAgaWYgKGltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6Okxp
dmUpCkBAIC04MCwzMyArODIsMzcgQEAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlOjpzaW5nbGVUcmFuc2l0aW9uKCkgY29uc3QKIAogaW5saW5lIHZvaWQgU3RydWN0
dXJlVHJhbnNpdGlvblRhYmxlOjpzZXRTaW5nbGVUcmFuc2l0aW9uKFN0cnVjdHVyZSogc3RydWN0
dXJlKQogeworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1h
eUJlR0NUaHJlYWQoKSk7CiAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwogICAgIGlm
IChXZWFrSW1wbCogaW1wbCA9IHRoaXMtPndlYWtJbXBsKCkpCiAgICAgICAgIFdlYWtTZXQ6OmRl
YWxsb2NhdGUoaW1wbCk7CiAgICAgV2Vha0ltcGwqIGltcGwgPSBXZWFrU2V0OjphbGxvY2F0ZShz
dHJ1Y3R1cmUsICZzaW5nbGVTbG90VHJhbnNpdGlvbldlYWtPd25lcigpLCB0aGlzKTsKLSAgICBt
X2RhdGEgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGltcGwpIHwgVXNpbmdTaW5nbGVTbG90Rmxh
ZzsKKyAgICBtX2RhdGEgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oaW1wbCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGU6OmNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRpdGlvbikgY29uc3QKIHsKKyAgICBBU1NFUlQoIWlzQ29t
cGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwogICAgIGlmIChp
c1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNp
bmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24gJiYgdHJhbnNpdGlv
bi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID09IHJlcCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0
aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0aW9uLT5pc1By
b3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb247CisgICAgICAgIHJldHVy
biB0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUoKSA9PSBy
ZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJp
YnV0ZXMgJiYgdHJhbnNpdGlvbi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbigpID09ICFp
c0FkZGl0aW9uOwogICAgIH0KICAgICByZXR1cm4gbWFwKCktPmdldChTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGU6Okhhc2g6OktleShyZXAsIGF0dHJpYnV0ZXMsIGlzQWRkaXRpb24pKTsKIH0KIAog
aW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQoVW5pcXVlZFN0
cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uKSBjb25z
dAogeworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJl
R0NUaHJlYWQoKSk7CiAgICAgaWYgKGlzVXNpbmdTaW5nbGVTbG90KCkpIHsKICAgICAgICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwotICAgICAgICByZXR1cm4g
KHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID09IHJl
cCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmli
dXRlcyAmJiB0cmFuc2l0aW9uLT5pc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkgPT0gIWlz
QWRkaXRpb24pID8gdHJhbnNpdGlvbiA6IDA7CisgICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAm
JiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkgPT0gcmVwICYmIHRyYW5zaXRp
b24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5z
aXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0
cmFuc2l0aW9uIDogMDsKICAgICB9CiAgICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlOjpIYXNoOjpLZXkocmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CiB9
CiAKIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKIHsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhy
ZWFkOjptYXlCZUdDVGhyZWFkKCkpOwogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAg
ICAgICAgIFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigp
OwogCkBAIC0xMjMsNyArMTI5LDcgQEAgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFk
ZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIH0KIAogICAgIC8vIEFkZCB0aGUg
c3RydWN0dXJlIHRvIHRoZSBtYXAuCi0gICAgbWFwKCktPnNldChTdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGU6Okhhc2g6OktleShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQo
KSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCksICFzdHJ1Y3R1cmUt
PmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVyZSk7CisgICAgbWFwKCkt
PnNldChTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6OktleShzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25Qcm9wZXJ0eU5hbWUoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1
dGVzKCksICFzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVj
dHVyZSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCkBAIC0xNTEsNyAr
MTU3LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZU9yTnVsbCgpKSB7CisgICAgICAgIGlmIChQcm9wZXJ0
eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKSB7
CiAgICAgICAgICAgICArK251bWJlcldpdGhQcm9wZXJ0eU1hcHM7CiAgICAgICAgICAgICB0b3Rh
bFByb3BlcnR5TWFwc1NpemUgKz0gdGFibGUtPnNpemVJbk1lbW9yeSgpOwogICAgICAgICB9CkBA
IC0xNzQsMTUgKzE4MCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogU3Ry
dWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5l
Q2FwYWNpdHkpCiAgICAgOiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkK
ICAgICAsIG1fYmxvYih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMp
LCBpbmRleGluZ1R5cGUsIHR5cGVJbmZvKQotICAgICwgbV9vdXRPZkxpbmVUeXBlRmxhZ3ModHlw
ZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpCi0gICAgLCBtX2lubGluZUNhcGFjaXR5KGlubGlu
ZUNhcGFjaXR5KQotICAgICwgbV9iaXRGaWVsZCgwKQogICAgICwgbV9nbG9iYWxPYmplY3Qodm0s
IHRoaXMsIGdsb2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVO
dWxsKQogICAgICwgbV9wcm90b3R5cGUodm0sIHRoaXMsIHByb3RvdHlwZSkKLSAgICAsIG1fY2xh
c3NJbmZvKGNsYXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSXNXYXRj
aGVkKQotICAgICwgbV9wcm9wZXJ0eUhhc2goMCkKKyAgICAsIG1fcHJvcGVydHlIYXNoQW5kSW5s
aW5lQ2FwYWNpdHkoaW5saW5lQ2FwYWNpdHkpCiB7CisgICAgc2V0Q2xhc3NJbmZvKGNsYXNzSW5m
byk7CiAgICAgc2V0RGljdGlvbmFyeUtpbmQoTm9uZURpY3Rpb25hcnlLaW5kKTsKICAgICBzZXRJ
c1Bpbm5lZFByb3BlcnR5VGFibGUoZmFsc2UpOwogICAgIHNldEhhc0dldHRlclNldHRlclByb3Bl
cnRpZXMoY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsK
QEAgLTIwMCwzMSArMjAzLDMwIEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvCiAgICAgc2V0SXNQ
cm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9mZnNl
dCh2bSwgaW52YWxpZE9mZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0
KTsKLSAKKyAgICBzZXRPdXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZs
YWdzKCkpOworCiAgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6Om1h
eElubGluZUNhcGFjaXR5KCkpOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNl
dD4oaW5saW5lQ2FwYWNpdHkpIDwgZmlyc3RPdXRPZkxpbmVPZmZzZXQpOwogICAgIEFTU0VSVCgh
aGFzUmFyZURhdGEoKSk7Ci0gICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9y
UmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzKCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGll
cygpKTsKLSAgICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEo
KSB8fCBtX2NsYXNzSW5mby0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0
Q2FsbERhdGEpOworICAgIEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGll
c0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIXRoaXMtPmNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJP
clJlYWRvbmx5UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllcygpIHx8ICF0aGlzLT5jbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVBy
b3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENh
bGxEYXRhKCkgfHwgdGhpcy0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9
ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIFN0cnVjdHVyZTo6
c19pbmZvID0geyAiU3RydWN0dXJlIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShTdHJ1Y3R1cmUpIH07CiAKIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2
bSkKICAgICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkKLSAgICAsIG1faW5saW5lQ2FwYWNp
dHkoMCkKLSAgICAsIG1fYml0RmllbGQoMCkKICAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBq
c051bGwoKSkKLSAgICAsIG1fY2xhc3NJbmZvKGluZm8oKSkKICAgICAsIG1fdHJhbnNpdGlvbldh
dGNocG9pbnRTZXQoSXNXYXRjaGVkKQotICAgICwgbV9wcm9wZXJ0eUhhc2goMCkKKyAgICAsIG1f
cHJvcGVydHlIYXNoQW5kSW5saW5lQ2FwYWNpdHkoMCkKIHsKKyAgICBzZXRDbGFzc0luZm8oaW5m
bygpKTsKICAgICBzZXREaWN0aW9uYXJ5S2luZChOb25lRGljdGlvbmFyeUtpbmQpOwogICAgIHNl
dElzUGlubmVkUHJvcGVydHlUYWJsZShmYWxzZSk7Ci0gICAgc2V0SGFzR2V0dGVyU2V0dGVyUHJv
cGVydGllcyhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMo
KSk7CisgICAgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhjbGFzc0luZm8oKS0+aGFzU3Rh
dGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CiAgICAgc2V0SGFzQ3VzdG9tR2V0dGVy
U2V0dGVyUHJvcGVydGllcyhmYWxzZSk7Ci0gICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRl
clByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JS
ZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclBy
b3BlcnRpZXNFeGNsdWRpbmdQcm90byhjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFk
b25seVByb3BlcnRpZXMoKSk7CiAgICAgc2V0SGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNs
dWRpbmdPcmlnaW5hbFByb3RvKGZhbHNlKTsKICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NB
bGxvd2VkRm9yRW51bWVyYXRpb24odHJ1ZSk7CiAgICAgc2V0VHJhbnNpdGlvblByb3BlcnR5QXR0
cmlidXRlcygwKTsKQEAgLTI0MCwyMyArMjQyLDIxIEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZN
JiB2bSkKICAKICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1
Y3R1cmVGbGFncyk7CiAgICAgbV9ibG9iID0gU3RydWN0dXJlSURCbG9iKHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQodGhpcyksIDAsIHR5cGVJbmZvKTsKLSAgICBtX291dE9m
TGluZVR5cGVGbGFncyA9IHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpOworICAgIHNldE91
dE9mTGluZVR5cGVGbGFncyh0eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxhZ3MoKSk7CiAKLSAgICBB
U1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygp
IHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7
Ci0gICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB8fCAhbV9jbGFzc0luZm8t
Pmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVCghdGhp
cy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8IG1fY2xhc3NJbmZvLT5tZXRo
b2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CisgICAgQVNTRVJU
KGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAh
Y2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAg
IEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwgIWNsYXNzSW5mbygpLT5oYXNT
dGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQoIXRoaXMtPnR5
cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBjbGFzc0luZm8oKS0+bWV0aG9kVGFi
bGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEpOwogfQogCiBTdHJ1Y3R1cmU6
OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMsIERlZmVycmVkU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKICAgICA6IEpTQ2VsbCh2bSwgdm0u
c3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9pbmxpbmVDYXBhY2l0eShwcmV2aW91
cy0+bV9pbmxpbmVDYXBhY2l0eSkKLSAgICAsIG1fYml0RmllbGQoMCkKICAgICAsIG1fcHJvdG90
eXBlKHZtLCB0aGlzLCBwcmV2aW91cy0+bV9wcm90b3R5cGUuZ2V0KCkpCi0gICAgLCBtX2NsYXNz
SW5mbyhwcmV2aW91cy0+bV9jbGFzc0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50
U2V0KElzV2F0Y2hlZCkKLSAgICAsIG1fcHJvcGVydHlIYXNoKHByZXZpb3VzLT5tX3Byb3BlcnR5
SGFzaCkKKyAgICAsIG1fcHJvcGVydHlIYXNoQW5kSW5saW5lQ2FwYWNpdHkocHJldmlvdXMtPm1f
cHJvcGVydHlIYXNoQW5kSW5saW5lQ2FwYWNpdHkpCiAgICAgLCBtX3NlZW5Qcm9wZXJ0aWVzKHBy
ZXZpb3VzLT5tX3NlZW5Qcm9wZXJ0aWVzKQogeworICAgIHNldENsYXNzSW5mbyhwcmV2aW91cy0+
Y2xhc3NJbmZvKCkpOwogICAgIHNldERpY3Rpb25hcnlLaW5kKHByZXZpb3VzLT5kaWN0aW9uYXJ5
S2luZCgpKTsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUoZmFsc2UpOwogICAgIHNldEhh
c0JlZW5GbGF0dGVuZWRCZWZvcmUocHJldmlvdXMtPmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUoKSk7
CkBAIC0yNzcsNyArMjc3LDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQKICAKICAgICBUeXBl
SW5mbyB0eXBlSW5mbyA9IHByZXZpb3VzLT50eXBlSW5mbygpOwogICAgIG1fYmxvYiA9IFN0cnVj
dHVyZUlEQmxvYih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCBw
cmV2aW91cy0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpLCB0eXBlSW5mbyk7Ci0gICAg
bV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxhZ3MoKTsKKyAg
ICBzZXRPdXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpOwog
CiAgICAgQVNTRVJUKCFwcmV2aW91cy0+dHlwZUluZm8oKS5zdHJ1Y3R1cmVJc0ltbW9ydGFsKCkp
OwogICAgIHNldFByZXZpb3VzSUQodm0sIHByZXZpb3VzKTsKQEAgLTI4OSw5ICsyODksOSBAQCBT
dHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMsIERlZmVycmVk
U3RydWN0dXJlVHJhbnNpdGlvbldhdAogCiAgICAgaWYgKHByZXZpb3VzLT5tX2dsb2JhbE9iamVj
dCkKICAgICAgICAgbV9nbG9iYWxPYmplY3Quc2V0KHZtLCB0aGlzLCBwcmV2aW91cy0+bV9nbG9i
YWxPYmplY3QuZ2V0KCkpOwotICAgIEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJv
cGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJP
clJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllcygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRp
ZXMoKSk7Ci0gICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRh
KCkgfHwgbV9jbGFzc0luZm8tPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6Omdl
dENhbGxEYXRhKTsKKyAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRp
ZXNFeGNsdWRpbmdQcm90bygpIHx8ICFjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFk
b25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMo
KSB8fCAhY2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkp
OworICAgIEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8
IGNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxs
RGF0YSk7CiB9CiAKIFN0cnVjdHVyZTo6flN0cnVjdHVyZSgpCkBAIC0zMTMsNyArMzEzLDcgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShQb2x5UHJvdG9UYWcsIFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICB1bnNpZ25lZCBvbGRPdXRPZkxpbmVDYXBhY2l0
eSA9IHJlc3VsdC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICByZXN1bHQtPmFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24oCiAgICAgICAgIHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5wb2x5UHJvdG9OYW1lKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLAotICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zm
c2V0KSB7CisgICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTdHJ1Y3R1cmU6Om91dE9mTGluZUNhcGFjaXR5KG5l
d01heE9mZnNldCkgPT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQob2Zmc2V0ID09IGtub3duUG9seVByb3RvT2Zmc2V0KTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGlzSW5saW5lT2Zmc2V0KGtub3duUG9seVByb3RvT2Zmc2V0KSk7CkBAIC0z
MjksMjMgKzMyOSwyMyBAQCBib29sIFN0cnVjdHVyZTo6aXNWYWxpZFByb3RvdHlwZShKU1ZhbHVl
IHByb3RvdHlwZSkKICAgICByZXR1cm4gcHJvdG90eXBlLmlzTnVsbCgpIHx8IChwcm90b3R5cGUu
aXNPYmplY3QoKSAmJiBwcm90b3R5cGUuZ2V0T2JqZWN0KCktPm1heUJlUHJvdG90eXBlKCkpOwog
fQogCi12b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRp
b24oVmVjdG9yPFN0cnVjdHVyZSosIDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1
cmUsIFByb3BlcnR5VGFibGUqJiB0YWJsZSkKK3ZvaWQgU3RydWN0dXJlOjpmaW5kU3RydWN0dXJl
c0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8c3RkOjpwYWlyPFN0cnVjdHVyZSosIFVu
aXF1ZWRTdHJpbmdJbXBsKj4sIDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUs
IFByb3BlcnR5VGFibGUqJiB0YWJsZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlcy5pc0VtcHR5
KCkpOwogICAgIHRhYmxlID0gMDsKIAogICAgIGZvciAoc3RydWN0dXJlID0gdGhpczsgc3RydWN0
dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkgewotICAgICAgICBzdHJ1
Y3R1cmUtPm1fbG9jay5sb2NrKCk7CisgICAgICAgIHN0cnVjdHVyZS0+Y2VsbExvY2soKS5sb2Nr
KCk7CiAgICAgICAgIAotICAgICAgICB0YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZU9y
TnVsbCgpOworICAgICAgICB0YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZVVuc2FmZU9y
TnVsbCgpOwogICAgICAgICBpZiAodGFibGUpIHsKICAgICAgICAgICAgIC8vIExlYXZlIHRoZSBz
dHJ1Y3R1cmUgbG9ja2VkLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGRvIHRoaW5ncyB0byBpdCBh
dG9taWNhbGx5CiAgICAgICAgICAgICAvLyBiZWZvcmUgaXQgbG9zZXMgaXRzIHByb3BlcnR5IHRh
YmxlLgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBz
dHJ1Y3R1cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOwotICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51
bmxvY2soKTsKKyAgICAgICAgc3RydWN0dXJlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc3RydWN0
dXJlLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eU5hbWVDb25jdXJyZW50bHkoKSkpOwor
ICAgICAgICBzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgfQogICAgIAogICAg
IEFTU0VSVCghc3RydWN0dXJlKTsKQEAgLTM1OSwzOCArMzU5LDM5IEBAIFByb3BlcnR5VGFibGUq
IFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgYm9vbCBzZXRQcm9w
ZXJ0eVRhYmxlCiAgICAgCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIAotICAg
IFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8
U3RydWN0dXJlKiwgVW5pcXVlZFN0cmluZ0ltcGwqPiwgOD4gc3RydWN0dXJlczsKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZTsKICAgICAKICAgICBm
aW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihzdHJ1Y3R1cmVzLCBzdHJ1Y3R1
cmUsIHRhYmxlKTsKICAgICAKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG51bWJlck9mU2xvdHNG
b3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOworICAgIHVuc2lnbmVk
IGNhcGFjaXR5ID0gbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgaW5saW5l
Q2FwYWNpdHkoKSk7CiAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgIHRhYmxlID0gdGFibGUtPmNv
cHkodm0sIGNhcGFjaXR5KTsKLSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7Cisg
ICAgICAgIHN0cnVjdHVyZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICB9IGVsc2UKICAgICAg
ICAgdGFibGUgPSBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KTsKICAgICAKICAg
ICAvLyBNdXN0IGhvbGQgdGhlIGxvY2sgb24gdGhpcyBzdHJ1Y3R1cmUsIHNpbmNlIHdlIHdpbGwg
YmUgbW9kaWZ5aW5nIHRoaXMgc3RydWN0dXJlJ3MKICAgICAvLyBwcm9wZXJ0eSBtYXAuIFdlIGRv
bid0IHdhbnQgZ2V0Q29uY3VycmVudGx5KCkgdG8gc2VlIHRoZSBwcm9wZXJ0eSBtYXAgaW4gYSBo
YWxmLWJha2VkCiAgICAgLy8gc3RhdGUuCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIg
bG9ja2VyKGNlbGxMb2NrKCksIHZtLmhlYXApOwogICAgIGlmIChzZXRQcm9wZXJ0eVRhYmxlKQog
ICAgICAgICB0aGlzLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAKICAgICBmb3IgKHNp
emVfdCBpID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgc3RydWN0dXJlID0g
c3RydWN0dXJlc1tpXTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3Bl
cnR5TmFtZSkKKyAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXS5maXJzdDsKKyAgICAg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSBzdHJ1Y3R1cmUt
PnRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUoKTsKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9uUHJvcGVy
dHlOYW1lKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlz
UHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkgewotICAgICAgICAgICAgYXV0byBpdGVtID0g
dGFibGUtPmZpbmQoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCkpOwor
ICAgICAgICAgICAgYXV0byBpdGVtID0gdGFibGUtPmZpbmQodHJhbnNpdGlvblByb3BlcnR5TmFt
ZSk7CiAgICAgICAgICAgICBBU1NFUlQoaXRlbS5maXJzdCk7CiAgICAgICAgICAgICB0YWJsZS0+
cmVtb3ZlKGl0ZW0pOwogICAgICAgICAgICAgdGFibGUtPmFkZERlbGV0ZWRPZmZzZXQoc3RydWN0
dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KLSAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blByb3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCksIHN0cnVj
dHVyZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpKTsKKyAgICAgICAgUHJvcGVydHlN
YXBFbnRyeSBlbnRyeSh0cmFuc2l0aW9uUHJvcGVydHlOYW1lLCBzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpOwog
ICAgICAgICBhdXRvIG5leHRPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHRPZmZzZXQsIG5leHRP
ZmZzZXQgPT0gc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCkpOwogICAgICAgICBhdXRvIHJl
c3VsdCA9IHRhYmxlLT5hZGQoZW50cnkpOwpAQCAtNDA1LDggKzQwNiw4IEBAIFByb3BlcnR5VGFi
bGUqIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgYm9vbCBzZXRQ
cm9wZXJ0eVRhYmxlCiAgICAgICAgICAgICBkYXRhTG9nKCJGb3VuZCBzdHJ1Y3R1cmUgPSAiLCBS
YXdQb2ludGVyKHN0cnVjdHVyZSksICJcbiIpOwogICAgICAgICAgICAgZGF0YUxvZygic3RydWN0
dXJlcyA9ICIpOwogICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAg
Zm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHN0cnVjdHVyZXMpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZyhjb21tYSwgUmF3UG9pbnRlcihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIGZvciAo
YXV0byYgcGFpciA6IHN0cnVjdHVyZXMpCisgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwg
UmF3UG9pbnRlcihwYWlyLmZpcnN0KSk7CiAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAg
ICAgICB9KTsKICAgICAKQEAgLTQzNiw3ICs0MzcsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVj
dAogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGlu
Z1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkK
IHsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrKTsKKyAg
ICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkpOwog
ICAgIHJldHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChz
dHJ1Y3R1cmUsIHVpZCwgYXR0cmlidXRlcywgb2Zmc2V0KTsKIH0KIApAQCAtNDk3LDggKzQ5OCw3
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSog
dHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7Ci0KLSAgICB0cmFu
c2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlv
biwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpKTsKKyAgICB0cmFuc2l0
aW9uLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5jYWNoZWRQcm90b3R5
cGVDaGFpbigpKTsKICAgICAKICAgICAvLyBXaGlsZSB3ZSBhcmUgYWRkaW5nIHRoZSBwcm9wZXJ0
eSwgcmVtYXRlcmlhbGl6aW5nIHRoZSBwcm9wZXJ0eSB0YWJsZSBpcyBzdXBlciB3ZWlyZDogd2Ug
YWxyZWFkeQogICAgIC8vIGhhdmUgYSBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgYW5kIHRyYW5z
aXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMgYnV0IHRoZSBtX3RyYW5zaXRpb25PZmZzZXQgaXMgc3Rp
bGwgd3JvbmcuIElmIHRoZQpAQCAtNTEwLDEyICs1MTAsMTIgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm8KICAgICAvLyBjYXNlIGFsbCBpcyB3ZWxsLiAgSWYgaXQgd2Fzbid0IGZvciB0aGUgbG9j
aywgdGhlIEdDIHdvdWxkIGhhdmUgVE9DVE9VOiBpZiBjb3VsZCByZWFkCiAgICAgLy8gcHJvdGVj
dFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcgYmVmb3JlIHdlIHNldCBpdCB0byB0cnVl
LCBhbmQgdGhlbiBibG93IHRoZSB0YWJsZSBhd2F5IGFmdGVyLgogICAgIHsKLSAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcih0cmFuc2l0aW9uLT5tX2xvY2spOworICAgICAgICBDb25j
dXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcih0cmFuc2l0aW9uLT5jZWxsTG9jaygpKTsKICAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0UHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmco
dHJ1ZSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUobG9j
a2VyLCBwcm9wZXJ0eU5hbWUudWlkKCkpOwogICAgIH0KIAogICAgIHRyYW5zaXRpb24tPm1fYmxv
Yi5zZXRJbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KHN0cnVjdHVyZS0+aW5kZXhpbmdNb2Rl
SW5jbHVkaW5nSGlzdG9yeSgpICYgfkNvcHlPbldyaXRlKTsKLSAgICB0cmFuc2l0aW9uLT5tX3Ry
YW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAgICAgdHJhbnNpdGlv
bi0+c2V0VHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICB0cmFu
c2l0aW9uLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxl
T3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBz
dHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKQEAgLTUzMCw3ICs1MzAsNyBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFBybwogCiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNl
dCgpLCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB7Ci0gICAgICAgIEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2ssIHZtLmhlYXApOwor
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNl
bGxMb2NrKCksIHZtLmhlYXApOwogICAgICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxl
LmFkZCh2bSwgdHJhbnNpdGlvbik7CiAgICAgfQogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0
Q29uc2lzdGVuY3koKTsKQEAgLTU4NywxNiArNTg3LDE2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVj
dHVyZSwgZGVmZXJyZWQpOwotICAgIHRyYW5zaXRpb24tPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4u
c2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fY2FjaGVkUHJvdG90eXBl
Q2hhaW4uZ2V0KCkpOworICAgIHRyYW5zaXRpb24tPnNldENhY2hlZFByb3RvdHlwZUNoYWluKHZt
LCBzdHJ1Y3R1cmUtPmNhY2hlZFByb3RvdHlwZUNoYWluKCkpOwogCiAgICAgLy8gV2hpbGUgd2Ug
YXJlIGRlbGV0aW5nIHRoZSBwcm9wZXJ0eSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHRhYmxl
IGlzIG5vdCBjbGVhcmVkLgogICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cih0cmFuc2l0aW9uLT5tX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxv
Y2tlcih0cmFuc2l0aW9uLT5jZWxsTG9jaygpKTsKICAgICAgICAgdHJhbnNpdGlvbi0+c2V0UHJv
dGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcodHJ1ZSk7CisgICAgICAgIHRyYW5z
aXRpb24tPnNldFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUobG9ja2VyLCBwcm9wZXJ0eU5hbWUudWlk
KCkpOwogICAgIH0KIAogICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ01vZGVJbmNs
dWRpbmdIaXN0b3J5KHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpICYg
fkNvcHlPbldyaXRlKTsKLSAgICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUg
PSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHlUYWJsZSh2
bSwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAg
IHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAg
ICAgdHJhbnNpdGlvbi0+c2V0SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbih0cnVlKTsKQEAg
LTYxMiw3ICs2MTIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlU
cmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAKICAgICBjaGVja09mZnNl
dCh0cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIHRyYW5zaXRpb24tPmlubGluZUNhcGFj
aXR5KCkpOwogICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihz
dHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0Nl
bGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+Y2VsbExvY2soKSwgdm0uaGVhcCk7CiAgICAgICAg
IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB9
CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwpAQCAtNjMwLDcgKzYz
MCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTCiAgICAgdHJhbnNpdGlvbi0+bV9wcm90b3R5
cGUuc2V0KHZtLCB0cmFuc2l0aW9uLCBwcm90b3R5cGUpOwogCiAgICAgUHJvcGVydHlUYWJsZSog
dGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSk7Ci0gICAg
dHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayksIHZtLCB0YWJsZSk7
CisgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2
bSwgdGFibGUpOwogICAgIHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5t
YXhPZmZzZXQoKSk7CiAgICAgCiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5j
eSgpOwpAQCAtNjQzLDcgKzY0Myw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVD
aGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByCiAgICAgICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIAogICAgICAg
ICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKHZtKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24t
Pm1fbG9jayksIHZtLCB0YWJsZSk7CisgICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0
cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0sIHRhYmxlKTsKICAgICAgICAgdHJhbnNpdGlvbi0+
c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKICAgICAgICAgCiAgICAg
ICAgIHN0cnVjdHVyZSA9IHRyYW5zaXRpb247CkBAIC02NjUsNyArNjY1LDcgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRGljdGkKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0
cnVjdHVyZSwgZGVmZXJyZWQpOwogCiAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1
cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSk7Ci0gICAgdHJhbnNpdGlvbi0+cGlu
KGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayksIHZtLCB0YWJsZSk7CisgICAgdHJhbnNpdGlv
bi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUpOwogICAg
IHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAg
ICAgdHJhbnNpdGlvbi0+c2V0RGljdGlvbmFyeUtpbmQoa2luZCk7CiAgICAgdHJhbnNpdGlvbi0+
c2V0SGFzQmVlbkRpY3Rpb25hcnkodHJ1ZSk7CkBAIC03MDIsMTEgKzcwMiwxMSBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKICAgICAvLyBUaGlzIG11c3QgYWx3YXlzIHJl
dHVybiBhIHByb3BlcnR5IHRhYmxlLiBJdCBjYW4ndCByZXR1cm4gbnVsbC4KLSAgICBQcm9wZXJ0
eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgUHJvcGVydHlUYWJs
ZSogcmVzdWx0ID0gcHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgIGlmIChyZXN1bHQp
IHsKICAgICAgICAgaWYgKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKQogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdC0+Y29weSh2bSwgcmVzdWx0LT5zaXplKCkgKyAxKTsKLSAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNDZWxsTG9j
a2VyIGxvY2tlcihjZWxsTG9jaygpKTsKICAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgbnVs
bHB0cik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNzQzLDEwICs3NDMsMTAg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm8KICAgICAgICAgLy8gdGFibGUgZG9lc24ndCBrbm93
IGhvdyB0byB0YWtlIGludG8gYWNjb3VudCBzdWNoIHdob2xlc2FsZSBlZGl0cy4KIAogICAgICAg
ICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKHZtKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZyhob2xkTG9jayh0
cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW5G
b3JDYWNoaW5nKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUpOwog
ICAgICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0
KCkpOwogICAgICAgICAKLSAgICAgICAgdGFibGUgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxl
T3JOdWxsKCk7CisgICAgICAgIHRhYmxlID0gdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZVVuc2Fm
ZU9yTnVsbCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YWJsZSk7CiAgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiAqdGFibGUpIHsKICAgICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0ZU9u
QWxsUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkpCkBAIC03NjEsMTQgKzc2MSwxNCBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uU2xvdyhWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBObwogICAgIH0KICAgICAKICAgICBpZiAoc2V0c1JlYWRPbmx5T25O
b25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpCi0gICAgICAgICYmICF0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCktPmlzRW1wdHkoKSkKKyAgICAgICAgJiYgIXRyYW5z
aXRpb24tPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKS0+aXNFbXB0eSgpKQogICAgICAgICB0
cmFuc2l0aW9uLT5zZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGlu
Z1Byb3RvKHRydWUpOwogICAgIAogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7
CiAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gdHJhbnNpdGlvbi0+ZW5zdXJlUHJvcGVy
dHlUYWJsZSh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9u
LT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2so
dHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzdHJ1Y3R1cmUtPm1fbG9jayk7CisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2soc3RydWN0dXJlLT5jZWxsTG9jaygpKTsKICAgICAgICAgc3Ry
dWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KIApA
QCAtODIwLDE0ICs4MjAsMTQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9u
YXJ5U3RydWN0dXJlKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICBBU1NFUlQoaXNEaWN0
aW9uYXJ5KCkpOwogICAgIEFTU0VSVChvYmplY3QtPnN0cnVjdHVyZSh2bSkgPT0gdGhpcyk7CiAg
ICAgCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXAp
OworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZt
LmhlYXApOwogICAgIAogICAgIG9iamVjdC0+c2V0U3RydWN0dXJlSUREaXJlY3RseShudWtlKGlk
KCkpKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogCiAgICAgc2l6ZV90IGJlZm9yZU91
dE9mTGluZUNhcGFjaXR5ID0gdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoaXNV
bmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IHByb3BlcnR5VGFibGVPck51bGwoKTsKKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBw
cm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCk7CiAgICAgICAgIEFTU0VSVCh0YWJsZSk7CiAKICAg
ICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSB0YWJsZS0+c2l6ZSgpOwpAQCAtODQxLDE0ICs4
NDEsMTQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJl
KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICAgICAgYXV0byBvZmZzZXQgPSBpbnZhbGlk
T2Zmc2V0OwogICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJs
ZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CiAgICAgICAgICAgICB2YWx1
ZXNbaV0gPSBvYmplY3QtPmdldERpcmVjdChpdGVyLT5vZmZzZXQpOwotICAgICAgICAgICAgb2Zm
c2V0ID0gaXRlci0+b2Zmc2V0ID0gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVD
YXBhY2l0eSk7CisgICAgICAgICAgICBvZmZzZXQgPSBpdGVyLT5vZmZzZXQgPSBvZmZzZXRGb3JQ
cm9wZXJ0eU51bWJlcihpLCBpbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgfQogICAgICAgICBz
ZXRNYXhPZmZzZXQodm0sIG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9uT2Zmc2V0
KCkgPT0gaW52YWxpZE9mZnNldCk7CiAgICAgICAgIAogICAgICAgICAvLyBDb3BpZXMgaW4gb3Vy
IHZhbHVlcyB0byB0aGVpciBjb21wYWN0ZWQgbG9jYXRpb25zLgogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgaSsrKQotICAgICAgICAgICAgb2JqZWN0LT5w
dXREaXJlY3Qodm0sIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkp
LCB2YWx1ZXNbaV0pOworICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZv
clByb3BlcnR5TnVtYmVyKGksIGlubGluZUNhcGFjaXR5KCkpLCB2YWx1ZXNbaV0pOwogCiAgICAg
ICAgIHRhYmxlLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7CiAKQEAgLTg5NCwxOSArODk0LDE5IEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYgdm0s
IEpTT2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgU3RydWN0dXJl
OjpwaW4oY29uc3QgQWJzdHJhY3RMb2NrZXImLCBWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxl
KQordm9pZCBTdHJ1Y3R1cmU6OnBpbihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBWTSYg
dm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQogewogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJs
ZSh0cnVlKTsKICAgICBzZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAgICAgY2xlYXJQcmV2
aW91c0lEKCk7Ci0gICAgbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gbnVsbHB0cjsKKyAgICBz
ZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGxvY2tlciwgbnVsbHB0cik7CiB9CiAKLXZvaWQgU3Ry
dWN0dXJlOjpwaW5Gb3JDYWNoaW5nKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVk0mIHZtLCBQcm9w
ZXJ0eVRhYmxlKiB0YWJsZSkKK3ZvaWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5nKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7CiAg
ICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKHRydWUpOwogICAgIHNldFByb3BlcnR5VGFibGUo
dm0sIHRhYmxlKTsKLSAgICBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSBudWxscHRyOworICAg
IHNldFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUobG9ja2VyLCBudWxscHRyKTsKIH0KIAogdm9pZCBT
dHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoVk0mIHZtKQpAQCAtOTI4LDcgKzkyOCw3IEBAIFdh
dGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9p
bnRTZXQoVk0mIHZtLCBQcm9wZXJ0CiAgICAgCiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQogICAg
ICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoY2VsbExvY2soKSk7
CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKTsKICAg
ICBpZiAoIXJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMpIHsKICAgICAgICAg
cmFyZURhdGEtPm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cyA9CkBAIC05OTgsNyArOTk4LDcg
QEAgUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlcjo6flByb3BlcnR5TWFwU3RhdGlzdGlj
c0V4aXRMb2dnZXIoKQogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRh
YmxlRm9yUGlubmluZyhWTSYgdm0pCiB7Ci0gICAgaWYgKFByb3BlcnR5VGFibGUqIHRhYmxlID0g
cHJvcGVydHlUYWJsZU9yTnVsbCgpKQorICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHBy
b3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkKICAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6
OmNsb25lKHZtLCAqdGFibGUpOwogICAgIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IGZhbHNlOwog
ICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0sIHNldFByb3BlcnR5VGFibGUp
OwpAQCAtMTAzOCwxNCArMTAzOCwxNCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYgogewogICAg
IHJldHVybiBhZGQ8U2hvdWxkUGluOjpObz4oCiAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsCi0gICAgICAgIFt0aGlzLCAmdm1dIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7Cisg
ICAgICAgIFt0aGlzLCAmdm1dKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQ
cm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAg
ICBzZXRNYXhPZmZzZXQodm0sIG5ld01heE9mZnNldCk7CiAgICAgICAgIH0pOwogfQogCiBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46Ok5vPih2bSwgcHJvcGVydHlO
YW1lLCBbdGhpcywgJnZtXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVy
dHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAgIHJldHVybiByZW1v
dmU8U2hvdWxkUGluOjpObz4odm0sIHByb3BlcnR5TmFtZSwgW3RoaXMsICZ2bV0oY29uc3QgR0NT
YWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNl
dCBuZXdNYXhPZmZzZXQpIHsKICAgICAgICAgc2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQp
OwogICAgIH0pOwogfQpAQCAtMTExNiwyNSArMTExNiwyMSBAQCB2b2lkIFN0cnVjdHVyZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAKLSAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPm1fbG9jayk7CisgICAgQ29uY3VycmVudEpT
Q2VsbExvY2tlciBsb2NrZXIodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9nbG9iYWxPYmplY3QpOwotICAgIGlmICghdGhpc09i
amVjdC0+aXNPYmplY3QoKSkKLSAgICAgICAgdGhpc09iamVjdC0+bV9jYWNoZWRQcm90b3R5cGVD
aGFpbi5jbGVhcigpOwotICAgIGVsc2UgewotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3Byb3RvdHlwZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
Y2FjaGVkUHJvdG90eXBlQ2hhaW4pOwotICAgIH0KKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3Byb3RvdHlwZSk7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzT2Jq
ZWN0LT5jYWNoZWRQcm90b3R5cGVDaGFpbigpKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0YSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNQaW5u
ZWRQcm9wZXJ0eVRhYmxlKCkgfHwgdGhpc09iamVjdC0+cHJvdGVjdFByb3BlcnR5VGFibGVXaGls
ZVRyYW5zaXRpb25pbmcoKSkgewogICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZl
IGluIHBpbigpLCBpbiB3aGljaCBjYXNlIGl0IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxl
LgogICAgICAgICAvLyBUaGF0J3MgZmluZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwg
ZmlyZSBhbmQgd2Ugd2lsbCBzY2FuIHRoaXMgYWdhaW4uCi0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CisgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKTsK
ICAgICB9IGVsc2UgaWYgKHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7Ci0gICAgZWxzZSBp
ZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQotICAgICAgICB0aGlzT2JqZWN0
LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZCh0aGlzT2JqZWN0LT5wcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkpOworICAg
IGVsc2UgaWYgKHRoaXNPYmplY3QtPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkKKyAgICAg
ICAgdGhpc09iamVjdC0+Y2xlYXJQcm9wZXJ0eVRhYmxlKCk7CiB9CiAKIGJvb2wgU3RydWN0dXJl
Ojppc0NoZWFwRHVyaW5nR0MoVk0mIHZtKQpAQCAtMTI5MCw3ICsxMjg2LDcgQEAgYm9vbCBTdHJ1
Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0pIGNvbnN0CiAgICAg
aWYgKCF0aGlzLT5jYW5DYWNoZU93bktleXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluID0gbV9jYWNoZWRQcm90b3R5cGVDaGFp
bi5nZXQoKTsKKyAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4gPSBjYWNoZWRQcm90
b3R5cGVDaGFpbigpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmVDaGFpbik7CiAgICAgU3RydWN0dXJl
SUQqIGN1cnJlbnRTdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUNoYWluLT5oZWFkKCk7CiAgICAgd2hp
bGUgKHRydWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKaW5k
ZXggNTJjZDNjNzFkOTIwZjJmOGE5N2I0NjBiOTBlMGVjNzBkNWQ3MTFhZi4uNzIzYTRlNzUyZjk0
YTg2MmEzNTVmMTA0ZGZkYjE5ODdkNTRmM2ViMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJUaW55Qmxvb21G
aWx0ZXIuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVy
SW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMjU4LDkgKzI1OSwx
OCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB7CiAgICAg
ICAgIHJldHVybiB0eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlKCk7CiAgICAg
fQorCisgICAgVHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFncyBvdXRPZkxpbmVUeXBlRmxhZ3Mo
KSBjb25zdAorICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gbV9vdXRP
ZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxlVW5zYWZlLnR5cGUoKTsKKyNlbHNlCisgICAg
ICAgIHJldHVybiBtX291dE9mTGluZVR5cGVGbGFnczsKKyNlbmRpZgorICAgIH0KICAgICAKICAg
ICAvLyBUeXBlIGFjY2Vzc29ycy4KLSAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KKyAgICBUeXBlSW5m
byB0eXBlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhvdXRPZkxpbmVUeXBl
RmxhZ3MoKSk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8o
KS5pc09iamVjdCgpOyB9CiAKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9ibG9iLmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIEFsbFdyaXRh
YmxlQXJyYXlUeXBlczsgfQpAQCAtMzU5LDcgKzM2OSwxMSBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIFByb3BlcnR5T2Zmc2V0IG1heE9mZnNldCgpIGNv
bnN0CiAgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHVpbnQxNl90IG1heE9mZnNl
dCA9IG1fbWF4T2Zmc2V0QW5kQ2FjaGVkUHJvdG90eXBlQ2hhaW4udHlwZSgpOworI2Vsc2UKICAg
ICAgICAgdWludDE2X3QgbWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXQ7CisjZW5kaWYKICAgICAgICAg
aWYgKG1heE9mZnNldCA9PSBzaG9ydEludmFsaWRPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4g
aW52YWxpZE9mZnNldDsKICAgICAgICAgaWYgKG1heE9mZnNldCA9PSB1c2VSYXJlRGF0YUZsYWcp
CkBAIC0zNjksMjIgKzM4Myw0NSBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlND
ZWxsIHsKIAogICAgIHZvaWQgc2V0TWF4T2Zmc2V0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQogICAgIHsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQotICAgICAg
ICAgICAgbV9tYXhPZmZzZXQgPSBzaG9ydEludmFsaWRPZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYg
KG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQp
Ci0gICAgICAgICAgICBtX21heE9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgZWxzZSBpZiAobV9t
YXhPZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKQorICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRp
b25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgICAgICBhdXRvIGNv
bW1pdCA9IFsmXSh1aW50MTZfdCB2YWx1ZSkgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAg
ICAgICBtX21heE9mZnNldEFuZENhY2hlZFByb3RvdHlwZUNoYWluLnNldFR5cGUodmFsdWUpOwor
I2Vsc2UKKyAgICAgICAgICAgIG1fbWF4T2Zmc2V0ID0gdmFsdWU7CisjZW5kaWYKKyAgICAgICAg
fTsKKworICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAg
IGNvbW1pdChzaG9ydEludmFsaWRPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGlmIChvZmZzZXQgPCB1c2VSYXJlRGF0YUZsYWcgJiYgb2Zmc2V0IDwgc2hv
cnRJbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBjb21taXQob2Zmc2V0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHVpbnQx
Nl90IG1heE9mZnNldCA9IG1fbWF4T2Zmc2V0QW5kQ2FjaGVkUHJvdG90eXBlQ2hhaW4udHlwZSgp
OworI2Vsc2UKKyAgICAgICAgdWludDE2X3QgbWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXQ7CisjZW5k
aWYKKyAgICAgICAgaWYgKG1heE9mZnNldCA9PSB1c2VSYXJlRGF0YUZsYWcpIHsKICAgICAgICAg
ICAgIHJhcmVEYXRhKCktPm1fbWF4T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV9tYXhPZmZzZXQgPSBvZmZzZXQ7Ci0gICAg
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgbV9tYXhPZmZzZXQg
PSB1c2VSYXJlRGF0YUZsYWc7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAg
ICAgICBlbnN1cmVSYXJlRGF0YSh2bSktPm1fbWF4T2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBjb21taXQodXNlUmFyZURhdGFGbGFnKTsK
ICAgICB9CiAKICAgICBQcm9wZXJ0eU9mZnNldCB0cmFuc2l0aW9uT2Zmc2V0KCkgY29uc3QKICAg
ICB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgdWludDE2X3QgdHJhbnNpdGlvbk9mZnNl
dCA9IG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mby50eXBlKCk7CisjZWxzZQogICAgICAg
ICB1aW50MTZfdCB0cmFuc2l0aW9uT2Zmc2V0ID0gbV90cmFuc2l0aW9uT2Zmc2V0OworI2VuZGlm
CiAgICAgICAgIGlmICh0cmFuc2l0aW9uT2Zmc2V0ID09IHNob3J0SW52YWxpZE9mZnNldCkKICAg
ICAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogICAgICAgICBpZiAodHJhbnNpdGlvbk9m
ZnNldCA9PSB1c2VSYXJlRGF0YUZsYWcpCkBAIC0zOTQsMTcgKzQzMSwzNiBAQCBjbGFzcyBTdHJ1
Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIHZvaWQgc2V0VHJhbnNpdGlvbk9m
ZnNldChWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChv
ZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKLSAgICAgICAgICAgIG1fdHJhbnNpdGlvbk9mZnNldCA9
IHNob3J0SW52YWxpZE9mZnNldDsKLSAgICAgICAgZWxzZSBpZiAob2Zmc2V0IDwgdXNlUmFyZURh
dGFGbGFnICYmIG9mZnNldCA8IHNob3J0SW52YWxpZE9mZnNldCkKLSAgICAgICAgICAgIG1fdHJh
bnNpdGlvbk9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgZWxzZSBpZiAobV90cmFuc2l0aW9uT2Zm
c2V0ID09IHVzZVJhcmVEYXRhRmxhZykKKyAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhy
ZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVHQ1RocmVhZCgpKTsKKyAgICAgICAgYXV0byBjb21taXQg
PSBbJl0odWludDE2X3QgdmFsdWUpIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICAgICAg
bV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvLnNldFR5cGUodmFsdWUpOworI2Vsc2UKKyAg
ICAgICAgICAgIG1fdHJhbnNpdGlvbk9mZnNldCA9IHZhbHVlOworI2VuZGlmCisgICAgICAgIH07
CisKKyAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBj
b21taXQoc2hvcnRJbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBpZiAob2Zmc2V0IDwgdXNlUmFyZURhdGFGbGFnICYmIG9mZnNldCA8IHNob3J0
SW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAgY29tbWl0KG9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICB1aW50MTZf
dCB0cmFuc2l0aW9uT2Zmc2V0ID0gbV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvLnR5cGUo
KTsKKyNlbHNlCisgICAgICAgIHVpbnQxNl90IHRyYW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRp
b25PZmZzZXQ7CisjZW5kaWYKKyAgICAgICAgaWYgKHRyYW5zaXRpb25PZmZzZXQgPT0gdXNlUmFy
ZURhdGFGbGFnKSB7CiAgICAgICAgICAgICByYXJlRGF0YSgpLT5tX3RyYW5zaXRpb25PZmZzZXQg
PSBvZmZzZXQ7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZW5zdXJlUmFyZURhdGEodm0p
LT5tX3RyYW5zaXRpb25PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwotICAgICAgICAgICAgbV90cmFuc2l0aW9uT2Zmc2V0ID0gdXNlUmFyZURhdGFG
bGFnOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlUmFy
ZURhdGEodm0pLT5tX3RyYW5zaXRpb25PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgICAgIGNvbW1pdCh1c2VSYXJlRGF0YUZsYWcpOwogICAgIH0K
IAogICAgIHN0YXRpYyB1bnNpZ25lZCBvdXRPZkxpbmVDYXBhY2l0eShQcm9wZXJ0eU9mZnNldCBt
YXhPZmZzZXQpCkBAIC00NDIsMTUgKzQ5OCwxMiBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICB9CiAgICAgYm9vbCBoYXNJbmxpbmVTdG9yYWdlKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1faW5saW5lQ2FwYWNpdHk7Ci0gICAgfQotICAgIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2lu
bGluZUNhcGFjaXR5OworICAgICAgICByZXR1cm4gISFpbmxpbmVDYXBhY2l0eSgpOwogICAgIH0K
KyAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlI
YXNoQW5kSW5saW5lQ2FwYWNpdHkgJiBpbmxpbmVDYXBhY2l0eU1hc2s7IH0KICAgICB1bnNpZ25l
ZCBpbmxpbmVTaXplKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNp
Z25lZD4obWF4T2Zmc2V0KCkgKyAxLCBtX2lubGluZUNhcGFjaXR5KTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bWluPHVuc2lnbmVkPihtYXhPZmZzZXQoKSArIDEsIGlubGluZUNhcGFjaXR5KCkpOwog
ICAgIH0KICAgICB1bnNpZ25lZCB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpIGNvbnN0CiAgICAgewpA
QCAtNDYyLDEyICs1MTUsMTIgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2Vs
bCB7CiAgICAgewogICAgICAgICByZXR1cm4gSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkKICAg
ICAgICAgICAgICYmIG9mZnNldCA8PSBtYXhPZmZzZXQoKQotICAgICAgICAgICAgJiYgKG9mZnNl
dCA8IG1faW5saW5lQ2FwYWNpdHkgfHwgb2Zmc2V0ID49IGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KTsK
KyAgICAgICAgICAgICYmIChvZmZzZXQgPCBzdGF0aWNfY2FzdDxpbnQ+KGlubGluZUNhcGFjaXR5
KCkpIHx8IG9mZnNldCA+PSBmaXJzdE91dE9mTGluZU9mZnNldCk7CiAgICAgfQogCiAgICAgYm9v
bCBoaWphY2tzSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlz
VHlwZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgICAgICBy
ZXR1cm4gaXNUeXBlZFZpZXcoY2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAg
ICAgfQogICAgIAogICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSBjb25zdApAQCAt
NTM1LDcgKzU4OCwxNCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsK
IAogICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCosIFZNJiwg
SlNTdHJpbmcqIHZhbHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIAot
ICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0lu
Zm87IH0KKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0CisgICAgeworI2lm
IENQVShBRERSRVNTNjQpCisgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFz
c0luZm8ucG9pbnRlcigpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fY2xhc3NJbmZvOworI2Vu
ZGlmCisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAg
ICAgewpAQCAtNTUyLDI1ICs2MTIsMjkgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2ds
b2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBjbGFzc0luZm9PZmZz
ZXQoKQorI2lmIENQVShBRERSRVNTNjQpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRy
YW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mbyk7Cisg
ICAgfQorI2Vsc2UKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2xhc3NJbmZvKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5m
byk7CiAgICAgfQotICAgICAgICAKKyNlbmRpZgorCiAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRp
YyBwdHJkaWZmX3QgcHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsK
LSAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGlubGluZUNhcGFjaXR5T2Zmc2V0KCkKKyNp
ZiBDUFUoTElUVExFX0VORElBTikKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5l
Q2FwYWNpdHkoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1
cmUsIG1faW5saW5lQ2FwYWNpdHkpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cnVjdHVyZSwgbV9wcm9wZXJ0eUhhc2hBbmRJbmxpbmVDYXBhY2l0eSk7CiAgICAgfQorI2VuZGlm
CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IHByZXZpb3VzT3JSYXJlRGF0YU9mZnNldCgpCiAgICAg
ewpAQCAtNjUzLDEyICs3MTcsMjMgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7CiAgICAgCiAgICAgc3RhdGljIHZvaWQgZHVtcENvbnRleHRIZWFkZXIoUHJpbnRTdHJl
YW0mKTsKICAgICAKLSAgICBDb25jdXJyZW50SlNMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2Nr
OyB9Ci0KLSAgICB1bnNpZ25lZCBwcm9wZXJ0eUhhc2goKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnR5SGFzaDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgcHJvcGVydHlIYXNoU2hp
ZnQgPSA4OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgaW5saW5lQ2FwYWNpdHlNYXNr
ID0gKDFVIDw8IHByb3BlcnR5SGFzaFNoaWZ0KSAtIDE7CisgICAgc3RhdGljX2Fzc2VydChpbmxp
bmVDYXBhY2l0eU1hc2sgPT0gMHhmZiwgIkxvd2VzdCA4IGJpdHMgYXJlIGZvciBpbmxpbmVDYXBh
Y2l0eSwgdGhpcyBpcyByZXF1aXJlZCB0byBhY2Nlc3MgdGhlbSB0aHJvdWdoIGxvYWQ4IGluIEpJ
VCIpOworICAgIHVuc2lnbmVkIHByb3BlcnR5SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVy
dHlIYXNoQW5kSW5saW5lQ2FwYWNpdHkgPj4gcHJvcGVydHlIYXNoU2hpZnQ7IH0KKyAgICB2b2lk
IHNldFByb3BlcnR5SGFzaCh1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgbV9wcm9wZXJ0
eUhhc2hBbmRJbmxpbmVDYXBhY2l0eSA9IChtX3Byb3BlcnR5SGFzaEFuZElubGluZUNhcGFjaXR5
ICYgaW5saW5lQ2FwYWNpdHlNYXNrKSB8IChoYXNoIDw8IHByb3BlcnR5SGFzaFNoaWZ0KTsKKyAg
ICB9CiAKICAgICBzdGF0aWMgYm9vbCBzaG91bGRDb252ZXJ0VG9Qb2x5UHJvdG8oY29uc3QgU3Ry
dWN0dXJlKiBhLCBjb25zdCBTdHJ1Y3R1cmUqIGIpOwogCisgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFp
c0NvbXBpbGF0aW9uVGhyZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVHQ1RocmVhZCgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKTsKKyAgICB9CisKICAgICBz
dHJ1Y3QgUHJvcGVydHlIYXNoRW50cnkgewogICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxl
OwogICAgICAgICBjb25zdCBIYXNoVGFibGVWYWx1ZSogdmFsdWU7CkBAIC02NjgsNiArNzQzLDE2
IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKIHByaXZhdGU6CisgICAgdm9pZCBzZXRUcmFuc2l0aW9uUHJvcGVydHlO
YW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVW5pcXVlZFN0cmluZ0ltcGwqIHRyYW5zaXRpb25Q
cm9wZXJ0eU5hbWUpCisgICAgeworICAgICAgICBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSB0
cmFuc2l0aW9uUHJvcGVydHlOYW1lOworICAgIH0KKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdHJh
bnNpdGlvblByb3BlcnR5TmFtZUNvbmN1cnJlbnRseSgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoY2VsbExvY2soKS5pc0xvY2tlZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fdHJhbnNpdGlv
blByb3BlcnR5TmFtZS5nZXQoKTsKKyAgICB9CisKICAgICB0eXBlZGVmIGVudW0geyAKICAgICAg
ICAgTm9uZURpY3Rpb25hcnlLaW5kID0gMCwKICAgICAgICAgQ2FjaGVkRGljdGlvbmFyeUtpbmQg
PSAxLApAQCAtNjg0LDYgKzc2OSw3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBK
U0NlbGwgewogICAgIHtcCiAgICAgICAgIG1fYml0RmllbGQgJj0gfihzXyMjbG93ZXJOYW1lIyNN
YXNrIDw8IG9mZnNldCk7XAogICAgICAgICBtX2JpdEZpZWxkIHw9IChuZXdWYWx1ZSAmIHNfIyNs
b3dlck5hbWUjI01hc2spIDw8IG9mZnNldDtcCisgICAgICAgIEFTU0VSVChuZXdWYWx1ZSA9PSBs
b3dlck5hbWUoKSk7XAogICAgIH0KIAogICAgIERFRklORV9CSVRGSUVMRChEaWN0aW9uYXJ5S2lu
ZCwgZGljdGlvbmFyeUtpbmQsIERpY3Rpb25hcnlLaW5kLCAyLCAwKTsKQEAgLTY5MSwxOCArNzc3
LDE4IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIERFRklO
RV9CSVRGSUVMRChib29sLCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCBIYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzLCAxLCAzKTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzUmVhZE9u
bHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywgSGFzUmVhZE9ubHlPckdl
dHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywgMSwgNCk7CiAgICAgREVGSU5FX0JJ
VEZJRUxEKGJvb2wsIGlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbiwg
SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uLCAxLCA1KTsKLSAgICBE
RUZJTkVfQklURklFTEQodW5zaWduZWQsIHRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIFRy
YW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIDE0LCA2KTsKLSAgICBERUZJTkVfQklURklFTEQo
Ym9vbCwgZGlkUHJldmVudEV4dGVuc2lvbnMsIERpZFByZXZlbnRFeHRlbnNpb25zLCAxLCAyMCk7
Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFRyYW5zaXRpb24sIERpZFRyYW5zaXRpb24s
IDEsIDIxKTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgc3RhdGljUHJvcGVydGllc1JlaWZp
ZWQsIFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkLCAxLCAyMik7Ci0gICAgREVGSU5FX0JJVEZJRUxE
KGJvb2wsIGhhc0JlZW5GbGF0dGVuZWRCZWZvcmUsIEhhc0JlZW5GbGF0dGVuZWRCZWZvcmUsIDEs
IDIzKTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJv
cGVydGllcywgSGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcywgMSwgMjQpOwotICAgIERF
RklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGllcywgRGlkV2F0Y2hJ
bnRlcm5hbFByb3BlcnRpZXMsIDEsIDI1KTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgdHJh
bnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgVHJhbnNpdGlvbldhdGNocG9pbnRJ
c0xpa2VseVRvQmVGaXJlZCwgMSwgMjYpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNC
ZWVuRGljdGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnksIDEsIDI3KTsKLSAgICBERUZJTkVfQklU
RklFTEQoYm9vbCwgcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcsIFByb3Rl
Y3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCAxLCAyOCk7Ci0gICAgREVGSU5FX0JJ
VEZJRUxEKGJvb2wsIGhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQ
cm90bywgSGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvLCAx
LCAyOSk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzUHJvcGVydHlEZWxldGlvblRyYW5z
aXRpb24sIElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24sIDEsIDMwKTsKKyAgICBERUZJTkVf
QklURklFTEQodW5zaWduZWQsIHRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIFRyYW5zaXRp
b25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIDgsIDYpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBk
aWRQcmV2ZW50RXh0ZW5zaW9ucywgRGlkUHJldmVudEV4dGVuc2lvbnMsIDEsIDE0KTsKKyAgICBE
RUZJTkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlkVHJhbnNpdGlvbiwgMSwgMTUp
OworICAgIERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCwgU3Rh
dGljUHJvcGVydGllc1JlaWZpZWQsIDEsIDE2KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSwgSGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSwgMSwgMTcpOwor
ICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
LCBIYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCAxLCAxOCk7CisgICAgREVGSU5FX0JJ
VEZJRUxEKGJvb2wsIGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCBEaWRXYXRjaEludGVybmFs
UHJvcGVydGllcywgMSwgMTkpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCB0cmFuc2l0aW9u
V2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkLCBUcmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5
VG9CZUZpcmVkLCAxLCAyMCk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc0JlZW5EaWN0
aW9uYXJ5LCBIYXNCZWVuRGljdGlvbmFyeSwgMSwgMjEpOworICAgIERFRklORV9CSVRGSUVMRChi
b29sLCBwcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZywgUHJvdGVjdFByb3Bl
cnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcsIDEsIDIyKTsKKyAgICBERUZJTkVfQklURklFTEQo
Ym9vbCwgaGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvLCBI
YXNVbmRlcnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8sIDEsIDIzKTsK
KyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwg
SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwgMSwgMjQpOwogCiAgICAgc3RhdGljX2Fzc2Vy
dChzX2JpdFdpZHRoT2ZUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIDw9IHNpemVvZihUcmFu
c2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKSAqIDgpOwogCkBAIC03MjEsNyArODA3LDcgQEAgY2xh
c3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gYW5kIHRoZSBsaXN0
IG9mIHN0cnVjdHVyZXMgdGhhdCB3ZSB2aXNpdGVkIGJlZm9yZSB3ZSBnb3QgdG8gaXQuIElmIGl0
IHJldHVybnMgYQogICAgIC8vIG5vbi1udWxsIHN0cnVjdHVyZSwgaXQgd2lsbCBhbHNvIGxvY2sg
dGhlIHN0cnVjdHVyZSB0aGF0IGl0IHJldHVybnM7IGl0IGlzIHlvdXIgam9iCiAgICAgLy8gdG8g
dW5sb2NrIGl0LgotICAgIHZvaWQgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRp
b24oVmVjdG9yPFN0cnVjdHVyZSosIDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiwgUHJvcGVy
dHlUYWJsZSomKTsKKyAgICB2b2lkIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0
aW9uKFZlY3RvcjxzdGQ6OnBhaXI8U3RydWN0dXJlKiwgVW5pcXVlZFN0cmluZ0ltcGwqPiwgOD4m
IHN0cnVjdHVyZXMsIFN0cnVjdHVyZSomLCBQcm9wZXJ0eVRhYmxlKiYpOwogICAgIAogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBE
aWN0aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUq
ID0gbnVsbHB0cik7CiAKQEAgLTczOCw3ICs4MjQsNyBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBUaGlzIG1heSBncmFiIHRoZSBsb2NrLCBvciBub3Qu
IERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJlJ3MgbG9jay4KICAgICBQcm9w
ZXJ0eVRhYmxlKiBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eShWTSYgdm0pCiAgICAgewot
ICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gbV9wcm9wZXJ0eVRhYmxlVW5zYWZl
LmdldCgpKQorICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gcHJvcGVydHlUYWJs
ZVVuc2FmZU9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgaWYg
KCFwcmV2aW91c0lEKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTc0OCwyMCAr
ODM0LDI1IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIC8v
IFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwgd2hlbiBob2xkaW5n
IHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgogICAgIFByb3BlcnR5VGFibGUqIGVuc3VyZVByb3BlcnR5
VGFibGUoVk0mIHZtKQogICAgIHsKLSAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9
IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUq
IHJlc3VsdCA9IHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkKICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwog
ICAgIH0KICAgICAKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlT3JOdWxsKCkgY29u
c3QKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkgY29uc3QK
ICAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lVHlw
ZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5wb2ludGVyKCk7CisjZWxzZQogICAgICAgICBy
ZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOworI2VuZGlmCiAgICAgfQogICAgIAog
ICAgIC8vIFRoaXMgd2lsbCBncmFiIHRoZSBsb2NrLiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcg
dGhlIFN0cnVjdHVyZSdzIGxvY2suCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlUYWJs
ZSogbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0g
dHJ1ZSk7CiAgICAgCiAgICAgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlU
YWJsZSogdGFibGUpOworICAgIHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7CiAgICAgCiAgICAg
UHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mKTsKICAg
ICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKQEAgLTc4
MCw3ICs4NzEsNyBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAg
ICB7CiAgICAgICAgIC8vIFNpbmNlIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgaXMgb2Z0ZW4g
dGhlIHNhbWUgYXMgdGhlIGxhc3Qgb2Zmc2V0IChleGNlcHQgaWYgdGhlcmUgYXJlIGRlbGV0ZXMp
CiAgICAgICAgIC8vIHdlIGtlZXAgdGhlIHNpemUgb2YgU3RydWN0dXJlIGRvd24gYnkgbm90IHN0
b3JpbmcgYm90aC4KLSAgICAgICAgcmV0dXJuIG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4
T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZTbG90
c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgfQogCiAg
ICAgYm9vbCBpc1ZhbGlkKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFBy
b3RvdHlwZUNoYWluLCBKU09iamVjdCogYmFzZSkgY29uc3Q7CkBAIC04MDIsNDggKzg5Myw4MyBA
QCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAgICB2b2lk
IHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIFN0cnVjdHVyZUNo
YWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q2FjaGVkUHJv
dG90eXBlQ2hhaW4oVk0mLCBTdHJ1Y3R1cmVDaGFpbiopOworCisgICAgdm9pZCBzZXRPdXRPZkxp
bmVUeXBlRmxhZ3MoVHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFncyk7CisgICAgdm9pZCBzZXRD
bGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKik7CisKICAgICBzdGF0aWMgY29uc3RleHByIGludCBz
X21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMgY29uc3RleHByIGludCBzX21h
eFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIAogICAgIC8vIFRoZXNl
IG5lZWQgdG8gYmUgcHJvcGVybHkgYWxpZ25lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAnU3Ry
dWN0dXJlJwogICAgIC8vIHBhcnQgb2YgdGhlIG9iamVjdC4KICAgICBTdHJ1Y3R1cmVJREJsb2Ig
bV9ibG9iOwotICAgIFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3MgbV9vdXRPZkxpbmVUeXBl
RmxhZ3M7CiAKLSAgICB1aW50OF90IG1faW5saW5lQ2FwYWNpdHk7Ci0KLSAgICBDb25jdXJyZW50
SlNMb2NrIG1fbG9jazsKKyAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCBlbnN1cmVQ
cm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3RoZXIg
dGhyZWFkLgorICAgIC8vIER1cmluZyBhIEhlYXAgU25hcHNob3QgR0Mgd2UgYXZvaWQgY2xlYXJp
bmcgdGhlIHRhYmxlIHNvIGl0IGlzIHNhZmUgdG8gdXNlLgorI2lmIENQVShBRERSRVNTNjQpCisg
ICAgLy8gSGlnaGVzdCAxNiBiaXRzIGFyZSBmb3IgbV9vdXRPZkxpbmVUeXBlRmxhZ3MuIFJlbWFp
bmluZyBiaXRzIGFyZSBmb3IgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLgorcHVibGljOgorICAgIC8v
IEhpZ2hlc3QgMTYgYml0cyBhcmUgZm9yIG1fdHJhbnNpdGlvbk9mZnNldC4gUmVtYWluaW5nIGJp
dHMgYXJlIGZvciBtX2NsYXNzSW5mby4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHRy
YW5zaXRpb25PZmZzZXRTaGlmdCA9IDQ4OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90
IGNsYXNzSW5mb01hc2sgPSAoMVVMTCA8PCA0OCkgLSAxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludHB0cl90IHRyYW5zaXRpb25PZmZzZXRTaGlmdGVkTWFzayA9IH5jbGFzc0luZm9NYXNrOwor
CisgICAgLy8gSGlnaGVzdCAxNiBiaXRzIGFyZSBmb3IgbV9tYXhPZmZzZXQuIFJlbWFpbmluZyBi
aXRzIGFyZSBmb3IgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi4KKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG1heE9mZnNldFNoaWZ0ID0gNDg7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
cHRyX3QgY2FjaGVkUHJvdG90eXBlQ2hhaW5NYXNrID0gKDFVTEwgPDwgNDgpIC0gMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBtYXhPZmZzZXRTaGlmdGVkTWFzayA9IH5jYWNoZWRQ
cm90b3R5cGVDaGFpbk1hc2s7Citwcml2YXRlOgorICAgIC8vIFN0cnVjdHVyZSBpcyBvbmUgb2Yg
dGhlIG1vc3QgZnJlcXVlbnRseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmUuIE1vcmVvdmVyLCBT
dHJ1Y3R1cmUgdGVuZHMgdG8gYmUgYWxpdmUgbG9uZyEKKyAgICAvLyBUaGlzIG1vdGl2YXRlcyBl
eHRyYSBjb21wbGljYXRlZCBoYWNrIHdoaWNoIG9wdGltaXplcyBzaXplb2YoU3RydWN0dXJlKS4K
KyAgICAvLworICAgIC8vIFdlIGNvbWJpbmUgMTZiaXQgZGF0YSBhbmQgNjRiaXQgcG9pbnRlciBp
bnRvIG9uZSBwb2ludGVyLXNpemUgZmllbGQgdG8gKDEpIHNhdmUgbWVtb3J5IHdoaWxlICgyKSBu
b3QgbG9zaW5nIGF0b21pYyBsb2FkL3N0b3JlLgorICAgIC8vIFRoZSBrZXkgaGVyZSBpcyBhbmFs
eXppbmcgZGF0YSBhY2Nlc3MgcGF0dGVybnMgY2FyZWZ1bGx5LiBUaGV5IGFyZSBjYXRlZ29yaWV6
ZWQgaW50byB0aHJlZSB0eXBlcy4KKyAgICAvLyAgICAgMS4gSW1tdXRhYmxlQWZ0ZXJDb25zdHJ1
Y3Rpb24KKyAgICAvLyAgICAgMi4gTXV0YWJsZUZyb21BbnlUaHJlYWQKKyAgICAvLyAgICAgMy4g
TXV0YWJsZUZyb21NYWluVGhyZWFkCisgICAgLy8gIFdlIGFzc3VtZSB0aGF0IGxvYWRpbmcgaGFw
cGVucyBmcm9tIGFueSB0aHJlYWRzLiBVbmRlciB0aGlzIGFzc3VtcHRpb24sIE11dGFibGVGcm9t
QW55VGhyZWFkICsgKE11dGFibGVGcm9tTWFpblRocmVhZCAvIE11dGFibGVGcm9tQW55VGhyZWFk
KSBpcyB0aGUgcGFpciB3aGljaCBpcyByYWN5LgorICAgIC8vICBPdGhlciBwYWlycyB3b3JrcyB3
ZWxsLiBXZSBjYXJlZnVsbHkgcHV0IGFzc2VydGlvbnMgdG8gc2V0dGVycywgYW5hbHl6ZSBhY2Nl
c3MgcGF0dGVybnMgYW5kIHBpY2sgYXBwcm9wcmlhdGUgcGFpcnMgaW4gU3RydWN0dXJlIGZpZWxk
cy4KKyAgICBDb21wYWN0UG9pbnRlclR1cGxlPFByb3BlcnR5VGFibGUqLCBUeXBlSW5mbzo6T3V0
T2ZMaW5lVHlwZUZsYWdzPiBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNh
ZmU7IC8vIEltbXV0YWJsZUFmdGVyQ29uc3RydWN0aW9uKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKSBh
bmQgTXV0YWJsZUZyb21BbnlUaHJlYWQobV9wcm9wZXJ0eVRhYmxlVW5zYWZlKS4KKyAgICBDb21w
YWN0UG9pbnRlclR1cGxlPFN0cnVjdHVyZUNoYWluKiwgdWludDE2X3Q+IG1fbWF4T2Zmc2V0QW5k
Q2FjaGVkUHJvdG90eXBlQ2hhaW47IC8vIE11dGFibGVGcm9tTWFpblRocmVhZChtX21heE9mZnNl
dCkgYW5kIE11dGFibGVGcm9tTWFpblRocmVhZChtX2NhY2hlZFByb3RvdHlwZUNoYWluKS4KKyAg
ICBDb21wYWN0UG9pbnRlclR1cGxlPGNvbnN0IENsYXNzSW5mbyosIHVpbnQxNl90PiBtX3RyYW5z
aXRpb25PZmZzZXRBbmRDbGFzc0luZm87IC8vIE11dGFibGVGcm9tTWFpblRocmVhZChtX3RyYW5z
aXRpb25PZmZzZXQpIGFuZCBJbW11dGFibGVBZnRlckNvbnN0cnVjdGlvbihtX2NsYXNzSW5mbyku
CisKKyAgICAvLyAxLiBTZXR0aW5nIFVuaXF1ZWRTdHJpbmdJbXBsIGhhcHBlbnMgb25seSBpbiB0
aGUgbWFpbiB0aHJlYWQuIEF0IHRoYXQgdGltZSwgd2UgbXVzdCB0YWtlIGEgbG9jay4KKyAgICAv
LyAyLiBBY2Nlc3NpbmcgVW5pcXVlZFN0cmluZ0ltcGwgZnJvbSB0aGUgbWFpbiB0aHJlYWQgaXMg
T0suCisgICAgLy8gMy4gQWNjZXNzaW5nIFVuaXF1ZWRTdHJpbmdJbXBsIGZyb20gbm9uIG1haW4g
dGhyZWFkIGlzIHJlcXVpcmluZyBsb2NrLgorICAgIFBhY2tlZFJlZlB0cjxVbmlxdWVkU3RyaW5n
SW1wbD4gbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lOworI2Vsc2UKKyAgICBUeXBlSW5mbzo6T3V0
T2ZMaW5lVHlwZUZsYWdzIG1fb3V0T2ZMaW5lVHlwZUZsYWdzIHsgMCB9OworICAgIHVpbnQxNl90
IG1fdHJhbnNpdGlvbk9mZnNldCB7IDAgfTsKKyAgICB1aW50MTZfdCBtX21heE9mZnNldCB7IDAg
fTsKKyAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZl
OworICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CisgICAgbXV0
YWJsZSBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW47
CisgICAgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWU7
CisjZW5kaWYKKyAgICAvLyBBY2Nlc3NpbmcgbV90cmFuc2l0aW9uVGFibGUgaXMgb25seSBhbGxv
d2VkIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBt
X3RyYW5zaXRpb25UYWJsZTsKIAotICAgIHVpbnQzMl90IG1fYml0RmllbGQ7CisgICAgdWludDMy
X3QgbV9iaXRGaWVsZCB7IDAgfTsKIAogICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4g
bV9nbG9iYWxPYmplY3Q7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJvdG90eXBlOwot
ICAgIG11dGFibGUgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NhY2hlZFByb3RvdHlw
ZUNoYWluOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9wcmV2aW91c09yUmFyZURhdGE7
CiAKLSAgICBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+IG1fdHJhbnNpdGlvblByb3BlcnR5TmFt
ZTsKLQotICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87Ci0KLSAgICBTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGUgbV90cmFuc2l0aW9uVGFibGU7Ci0KLSAgICAvLyBTaG91bGQgYmUgYWNj
ZXNzZWQgdGhyb3VnaCBlbnN1cmVQcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJl
IHNldCB0byAwIGJ5IGFub3RoZXIgdGhyZWFkLgotICAgIC8vIER1cmluZyBhIEhlYXAgU25hcHNo
b3QgR0Mgd2UgYXZvaWQgY2xlYXJpbmcgdGhlIHRhYmxlIHNvIGl0IGlzIHNhZmUgdG8gdXNlLgot
ICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7Ci0K
ICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IDwgMjU2LCBmaXJz
dE91dE9mTGluZU9mZnNldF9maXRzKTsKIAotICAgIHVpbnQxNl90IG1fdHJhbnNpdGlvbk9mZnNl
dDsKLSAgICB1aW50MTZfdCBtX21heE9mZnNldDsKLQotICAgIHVpbnQzMl90IG1fcHJvcGVydHlI
YXNoOwotICAgIFRpbnlCbG9vbUZpbHRlciBtX3NlZW5Qcm9wZXJ0aWVzOworICAgIHVpbnQzMl90
IG1fcHJvcGVydHlIYXNoQW5kSW5saW5lQ2FwYWNpdHk7IC8vIE11dGFibGVGcm9tTWFpblRocmVh
ZChtX3Byb3BlcnR5SGFzaCkgYW5kIEltbXV0YWJsZUFmdGVyQ29uc3RydWN0aW9uKG1faW5saW5l
Q2FwYWNpdHkpLgorICAgIHVpbnQzMl90IG1fc2VlblByb3BlcnRpZXMgeyAwIH07CiAKICAgICBm
cmllbmQgY2xhc3MgVk1JbnNwZWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIEpTRG9sbGFyVk1IZWxw
ZXI7CiB9OworI2lmIENQVShBRERSRVNTNjQpCitzdGF0aWNfYXNzZXJ0KHNpemVvZihTdHJ1Y3R1
cmUpIDw9IDk2LCAiRG8gbm90IGluY3JlYXNlIHNpemVvZihTdHJ1Y3R1cmUpLCBpdCBpbW1lZGlh
dGVseSBjYXVzZXMgbWVtb3J5IHJlZ3Jlc3Npb24iKTsKKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGlu
ZXMuaAppbmRleCAwY2Q5OGQ1MmFjYzdmNzE0YzA1YjE1M2UwODEzOWU0OTFjZDhjZjhjLi5mOWI2
OWJmNzYyODZiMGUyNGFlNTE0YmE3ZmFkYWZiNzUzMTVhMGYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCkBAIC0xNDQsNyArMTQ0LDkg
QEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHUKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJl
YWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpID09IGluZm8oKSk7
CiAKLSAgICBpZiAobV9zZWVuUHJvcGVydGllcy5ydWxlT3V0KGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHByb3BlcnR5TmFtZS51aWQoKSkpKQorICAgIHVuc2lnbmVkIGhhc2hDb2RlID0gcHJvcGVy
dHlOYW1lLnVpZCgpLT5zeW1ib2xBd2FyZUhhc2goKTsKKyAgICBBU1NFUlQoaGFzaENvZGUpOyAv
LyBTdHJpbmdJbXBsIGhhc2ggbmV2ZXIgZ2V0cyB6ZXJvLgorICAgIGlmICgobV9zZWVuUHJvcGVy
dGllcyAmIGhhc2hDb2RlKSAhPSBoYXNoQ29kZSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZz
ZXQ7CiAKICAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gZW5zdXJlUHJvcGVydHlU
YWJsZUlmTm90RW1wdHkodm0pOwpAQCAtMTYyLDcgKzE2NCw3IEBAIEFMV0FZU19JTkxJTkUgUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogdm9pZCBTdHJ1Y3R1cmU6OmZvckVh
Y2hQcm9wZXJ0eUNvbmN1cnJlbnRseShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIFZl
Y3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3Ry
dWN0dXJlKiwgVW5pcXVlZFN0cmluZ0ltcGwqPiwgOD4gc3RydWN0dXJlczsKICAgICBTdHJ1Y3R1
cmUqIHRhYmxlU3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIApAQCAt
MTcwLDE4ICsxNzIsMTggQEAgdm9pZCBTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJl
bnRseShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogCiAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5n
SW1wbCo+IHNlZW5Qcm9wZXJ0aWVzOwogCi0gICAgZm9yIChhdXRvKiBzdHJ1Y3R1cmUgOiBzdHJ1
Y3R1cmVzKSB7Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUgfHwgc2VlblByb3BlcnRpZXMuY29udGFpbnMoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUuZ2V0KCkpKQorICAgIGZvciAoYXV0byBbc3RydWN0dXJlLCB0cmFuc2l0aW9uUHJv
cGVydHlOYW1lXSA6IHN0cnVjdHVyZXMpIHsKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9uUHJvcGVy
dHlOYW1lIHx8IHNlZW5Qcm9wZXJ0aWVzLmNvbnRhaW5zKHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc2VlblByb3BlcnRpZXMuYWRkKHN0
cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgc2VlblBy
b3BlcnRpZXMuYWRkKHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVjdHVyZS0+
bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZz
ZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkgeworICAg
ICAgICBpZiAoIWZ1bmN0b3IoUHJvcGVydHlNYXBFbnRyeSh0cmFuc2l0aW9uUHJvcGVydHlOYW1l
LCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJv
cGVydHlBdHRyaWJ1dGVzKCkpKSkgewogICAgICAgICAgICAgaWYgKHRhYmxlKQotICAgICAgICAg
ICAgICAgIHRhYmxlU3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICAgICAg
dGFibGVTdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTIsMTEgKzE5NCwxMSBAQCB2b2lkIFN0cnVjdHVyZTo6
Zm9yRWFjaFByb3BlcnR5Q29uY3VycmVudGx5KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlmICghZnVuY3RvcihlbnRyeSkp
IHsKLSAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAg
ICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB0YWJs
ZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAgICAgICB0YWJsZVN0cnVjdHVyZS0+Y2Vs
bExvY2soKS51bmxvY2soKTsKICAgICB9CiB9CiAKQEAgLTMwMiwxNSArMzA0LDM3IEBAIGlubGlu
ZSBKU1ZhbHVlIFN0cnVjdHVyZTo6cHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQ2VsCiAgICAgcmV0dXJuIHByb3RvdHlwZUZvckxvb2t1cFByaW1pdGl2
ZUltcGwoZ2xvYmFsT2JqZWN0LCB0aGlzKTsKIH0KIAoraW5saW5lIFN0cnVjdHVyZUNoYWluKiBT
dHJ1Y3R1cmU6OmNhY2hlZFByb3RvdHlwZUNoYWluKCkgY29uc3QKK3sKKyNpZiBDUFUoQUREUkVT
UzY0KQorICAgIHJldHVybiBtX21heE9mZnNldEFuZENhY2hlZFByb3RvdHlwZUNoYWluLnBvaW50
ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCk7Cisj
ZW5kaWYKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRDYWNoZWRQcm90b3R5cGVDaGFp
bihWTSYgdm0sIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKK3sKKyAgICBBU1NFUlQoIWlzT2JqZWN0
KCkpOworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJl
R0NUaHJlYWQoKSk7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX21heE9mZnNldEFuZENhY2hl
ZFByb3RvdHlwZUNoYWluLnNldFBvaW50ZXIoY2hhaW4pOworICAgIHZtLmhlYXAud3JpdGVCYXJy
aWVyKHRoaXMsIGNoYWluKTsKKyNlbHNlCisgICAgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXQo
dm0sIHRoaXMsIGNoYWluKTsKKyNlbmRpZgorfQorCiBpbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0
cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogYmFzZSkgY29uc3QKIHsKKyAgICBBU1NFUlQodGhpcy0+aXNPYmplY3Qo
KSk7CiAgICAgQVNTRVJUKGJhc2UtPnN0cnVjdHVyZSh2bSkgPT0gdGhpcyk7CiAgICAgLy8gV2Ug
Y2FjaGUgb3VyIHByb3RvdHlwZSBjaGFpbiBzbyBvdXIgY2xpZW50cyBjYW4gc2hhcmUgaXQuCi0g
ICAgaWYgKCFpc1ZhbGlkKGdsb2JhbE9iamVjdCwgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQo
KSwgYmFzZSkpIHsKKyAgICBpZiAoIWlzVmFsaWQoZ2xvYmFsT2JqZWN0LCBjYWNoZWRQcm90b3R5
cGVDaGFpbigpLCBiYXNlKSkgewogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHByb3RvdHlw
ZUZvckxvb2t1cChnbG9iYWxPYmplY3QsIGJhc2UpOwotICAgICAgICBtX2NhY2hlZFByb3RvdHlw
ZUNoYWluLnNldCh2bSwgdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZSh2bSwgcHJvdG90eXBl
LmlzTnVsbCgpID8gbnVsbHB0ciA6IGFzT2JqZWN0KHByb3RvdHlwZSkpKTsKKyAgICAgICAgY29u
c3RfY2FzdDxTdHJ1Y3R1cmUqPih0aGlzKS0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4odm0sIFN0
cnVjdHVyZUNoYWluOjpjcmVhdGUodm0sIHByb3RvdHlwZS5pc051bGwoKSA/IG51bGxwdHIgOiBh
c09iamVjdChwcm90b3R5cGUpKSk7CiAgICAgfQotICAgIHJldHVybiBtX2NhY2hlZFByb3RvdHlw
ZUNoYWluLmdldCgpOworICAgIHJldHVybiBjYWNoZWRQcm90b3R5cGVDaGFpbigpOwogfQogCiBp
bmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UpIGNvbnN0CkBAIC0zNTAsNyArMzc0
LDcgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQogCiBpbmxpbmUgV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjpwcm9wZXJ0
eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxM
b2NrZXIgbG9ja2VyKGNlbGxMb2NrKCkpOwogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CkBAIC0zNzEsMTYg
KzM5NSwxNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNp
c3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAKICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBwcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0
b3JhZ2VTaXplKCk7Ci0gICAgdW5zaWduZWQgaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFs
U2l6ZSA9IHRvdGFsU2l6ZSA8IG1faW5saW5lQ2FwYWNpdHkgPyAwIDogdG90YWxTaXplIC0gbV9p
bmxpbmVDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90
YWxTaXplID0gdG90YWxTaXplIDwgaW5saW5lQ2FwYWNpdHkoKSA/IDAgOiB0b3RhbFNpemUgLSBp
bmxpbmVDYXBhY2l0eSgpOwogCiAgICAgYXV0byBmYWlsID0gWyZdIChjb25zdCBjaGFyKiBkZXNj
cmlwdGlvbikgewogICAgICAgICBkYXRhTG9nKCJEZXRlY3RlZCBvZmZzZXQgaW5jb25zaXN0ZW5j
eTogIiwgZGVzY3JpcHRpb24sICIhXG4iKTsKICAgICAgICAgZGF0YUxvZygidGhpcyA9ICIsIFJh
d1BvaW50ZXIodGhpcyksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCJ0cmFuc2l0aW9uT2Zmc2V0
ID0gIiwgdHJhbnNpdGlvbk9mZnNldCgpLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygibWF4T2Zm
c2V0ID0gIiwgbWF4T2Zmc2V0KCksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCJtX2lubGluZUNh
cGFjaXR5ID0gIiwgbV9pbmxpbmVDYXBhY2l0eSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIm1f
aW5saW5lQ2FwYWNpdHkgPSAiLCBpbmxpbmVDYXBhY2l0eSgpLCAiXG4iKTsKICAgICAgICAgZGF0
YUxvZygicHJvcGVydHlUYWJsZSA9ICIsIFJhd1BvaW50ZXIocHJvcGVydHlUYWJsZSksICJcbiIp
OwotICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0ID0gIiwgbnVtYmVy
T2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSksICJcbiIp
OworICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0ID0gIiwgbnVtYmVy
T2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgaW5saW5lQ2FwYWNpdHkoKSksICJcbiIp
OwogICAgICAgICBkYXRhTG9nKCJ0b3RhbFNpemUgPSAiLCB0b3RhbFNpemUsICJcbiIpOwogICAg
ICAgICBkYXRhTG9nKCJpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90YWxTaXplID0gIiwgaW5s
aW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2co
Im51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhPZmZzZXQgPSAiLCBudW1iZXJPZk91dE9mTGlu
ZVNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpKSwgIlxuIik7CkBAIC0zODgsNyArNDEyLDcg
QEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeShQ
cm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmwKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7CiAgICAgfTsKICAgICAKLSAgICBpZiAobnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldCht
YXhPZmZzZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSkgIT0gdG90YWxTaXplKQorICAgIGlmIChudW1i
ZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBpbmxpbmVDYXBhY2l0eSgpKSAhPSB0
b3RhbFNpemUpCiAgICAgICAgIGZhaWwoIm51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQgZG9lc24n
dCBtYXRjaCB0b3RhbFNpemUiKTsKICAgICBpZiAoaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1Rv
dGFsU2l6ZSAhPSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgp
KSkKICAgICAgICAgZmFpbCgiaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSBkb2Vz
bid0IG1hdGNoIG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhPZmZzZXQiKTsKQEAgLTM5OCw3
ICs0MjIsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNp
c3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibAogCiBBTFdBWVNfSU5MSU5FIGJvb2wg
U3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3QKIHsKLSAgICBQcm9wZXJ0
eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgIFByb3Bl
cnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCk7CiAK
ICAgICBpZiAoIXByb3BlcnR5VGFibGUpIHsKICAgICAgICAgQVNTRVJUKCFpc1Bpbm5lZFByb3Bl
cnR5VGFibGUoKSk7CkBAIC00MzksNyArNDYzLDcgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQK
IHsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOwog
Ci0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwor
ICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhl
YXApOwogCiAgICAgc3dpdGNoIChzaG91bGRQaW4pIHsKICAgICBjYXNlIFNob3VsZFBpbjo6WWVz
OgpAQCAtNDYwLDEwICs0ODQsMTEgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQKIAogICAgIGF1
dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwogCi0gICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zm
c2V0ID0gdGFibGUtPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CisgICAgUHJvcGVydHlP
ZmZzZXQgbmV3T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQoaW5saW5lQ2FwYWNpdHkoKSk7CiAK
LSAgICBtX3Byb3BlcnR5SGFzaCA9IG1fcHJvcGVydHlIYXNoIF4gcmVwLT5leGlzdGluZ1N5bWJv
bEF3YXJlSGFzaCgpOwotICAgIG1fc2VlblByb3BlcnRpZXMuYWRkKGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHJlcCkpOworICAgIHVuc2lnbmVkIGhhc2hDb2RlID0gcmVwLT5leGlzdGluZ1N5bWJv
bEF3YXJlSGFzaCgpOworICAgIHNldFByb3BlcnR5SGFzaChwcm9wZXJ0eUhhc2goKSBeIGhhc2hD
b2RlKTsKKyAgICBtX3NlZW5Qcm9wZXJ0aWVzID0gbV9zZWVuUHJvcGVydGllcyB8IGhhc2hDb2Rl
OwogCiAgICAgYXV0byByZXN1bHQgPSB0YWJsZS0+YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBu
ZXdPZmZzZXQsIGF0dHJpYnV0ZXMpKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
LnNlY29uZCk7CkBAIC00ODIsNyArNTA3LDcgQEAgdGVtcGxhdGU8U3RydWN0dXJlOjpTaG91bGRQ
aW4gc2hvdWxkUGluLCB0eXBlbmFtZSBGdW5jPgogaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6cmVtb3ZlKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVu
YyYgZnVuYykKIHsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFi
bGUodm0pOwotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5o
ZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygp
LCB2bS5oZWFwKTsKIAogICAgIHN3aXRjaCAoc2hvdWxkUGluKSB7CiAgICAgY2FzZSBTaG91bGRQ
aW46OlllczoKQEAgLTUzMiw3ICs1NTcsNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydAogewog
ICAgIEFTU0VSVChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQoaXNQaW5u
ZWRQcm9wZXJ0eVRhYmxlKCkpOwotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOwor
ICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkpOwogICAgIAogICAgIHJldHVy
biByZW1vdmU8U2hvdWxkUGluOjpZZXM+KHZtLCBwcm9wZXJ0eU5hbWUsIGZ1bmMpOwogfQpAQCAt
NTUwLDcgKzU3NSwzOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpzZXRHbG9iYWxP
YmplY3QoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgU3RydWN0dXJlOjpzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSog
dGFibGUpCiB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX291dE9mTGluZVR5cGVGbGFnc0Fu
ZFByb3BlcnR5VGFibGVVbnNhZmUuc2V0UG9pbnRlcih0YWJsZSk7CisgICAgdm0uaGVhcC53cml0
ZUJhcnJpZXIodGhpcywgdGFibGUpOworI2Vsc2UKICAgICBtX3Byb3BlcnR5VGFibGVVbnNhZmUu
c2V0TWF5QmVOdWxsKHZtLCB0aGlzLCB0YWJsZSk7CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIFN0cnVjdHVyZTo6Y2xlYXJQcm9wZXJ0eVRhYmxlKCkKK3sKKyNpZiBDUFUoQUREUkVT
UzY0KQorICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5zZXRQ
b2ludGVyKG51bGxwdHIpOworI2Vsc2UKKyAgICBtX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIo
KTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpzZXRPdXRPZkxp
bmVUeXBlRmxhZ3MoVHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFncyBvdXRPZkxpbmVUeXBlRmxh
Z3MpCit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX291dE9mTGluZVR5cGVGbGFnc0FuZFBy
b3BlcnR5VGFibGVVbnNhZmUuc2V0VHlwZShvdXRPZkxpbmVUeXBlRmxhZ3MpOworI2Vsc2UKKyAg
ICBtX291dE9mTGluZVR5cGVGbGFncyA9IG91dE9mTGluZVR5cGVGbGFnczsKKyNlbmRpZgorfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpzZXRDbGFzc0luZm8oY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8pCit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX3RyYW5zaXRpb25P
ZmZzZXRBbmRDbGFzc0luZm8uc2V0UG9pbnRlcihjbGFzc0luZm8pOworI2Vsc2UKKyAgICBtX2Ns
YXNzSW5mbyA9IGNsYXNzSW5mbzsKKyNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU3Ry
dWN0dXJlOjpzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZS5oCmluZGV4IGY0ODkyOGNmM2IyOTU2NmUyMjcwZDg2ZjYwMjM0Mzg1ZWFiYjg1ODku
LjZjY2I3YWI2ZmY0Njc5NmU4MzJhZjQ2YmFkYmU0MGMzMTJiNWRhOTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZS5oCkBAIC0zOSw4ICszOSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgRmlyc3RJbnRl
cm5hbEF0dHJpYnV0ZSA9IDEgPDwgNjsgLy8gVXNlIGZvciB0cmFuc2l0aW9uCiAKIC8vIFN1cHBv
cnQgZm9yIGF0dHJpYnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0aW9ucyBub3QgcmVsYXRl
ZCB0byBwcm9wZXJ0aWVzLgogLy8gSWYgYW55IG9mIHRoZXNlIGFyZSB1c2VkLCB0aGUgc3RyaW5n
IHBvcnRpb24gb2YgdGhlIGtleSBzaG91bGQgYmUgMC4KLWVudW0gY2xhc3MgTm9uUHJvcGVydHlU
cmFuc2l0aW9uIDogdW5zaWduZWQgewotICAgIEFsbG9jYXRlVW5kZWNpZGVkLAorZW51bSBjbGFz
cyBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gOiB1aW50OF90IHsKKyAgICBBbGxvY2F0ZVVuZGVjaWRl
ZCA9IDAsCiAgICAgQWxsb2NhdGVJbnQzMiwKICAgICBBbGxvY2F0ZURvdWJsZSwKICAgICBBbGxv
Y2F0ZUNvbnRpZ3VvdXMsCkBAIC01MCwxNCArNTAsMTYgQEAgZW51bSBjbGFzcyBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24gOiB1bnNpZ25lZCB7CiAgICAgQWRkSW5kZXhlZEFjY2Vzc29ycywKICAgICBQ
cmV2ZW50RXh0ZW5zaW9ucywKICAgICBTZWFsLAotICAgIEZyZWV6ZQorICAgIEZyZWV6ZSwKKyAg
ICBMYXN0T2ZOb25Qcm9wZXJ0eVRyYW5zaXRpb24gPSBGcmVlemUsCiB9OwotdXNpbmcgVHJhbnNp
dGlvblByb3BlcnR5QXR0cmlidXRlcyA9IHVpbnQxNl90OwordXNpbmcgVHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcyA9IHVpbnQ4X3Q7CiAKLWlubGluZSB1bnNpZ25lZCB0b0F0dHJpYnV0ZXMo
Tm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCitpbmxpbmUgY29uc3RleHByIHVpbnQ4
X3QgdG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQogewogICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJhbnNpdGlvbikgKyBGaXJzdEludGVybmFs
QXR0cmlidXRlOwogfQorc3RhdGljX2Fzc2VydCh0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHlUcmFu
c2l0aW9uOjpMYXN0T2ZOb25Qcm9wZXJ0eVRyYW5zaXRpb24pIDw9IFVJTlQ4X01BWCk7CiAKIGlu
bGluZSBib29sIGNoYW5nZXNJbmRleGluZ1R5cGUoTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5z
aXRpb24pCiB7CkBAIC0yMzEsNyArMjMzLDcgQEAgY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlIHsKIAogcHVibGljOgogICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSgpCi0gICAgICAg
IDogbV9kYXRhKFVzaW5nU2luZ2xlU2xvdEZsYWcpCisgICAgICAgIDogbV9kYXRhKGJpdHdpc2Vf
Y2FzdDx1aW50OF90Kj4oVXNpbmdTaW5nbGVTbG90RmxhZykpCiAgICAgewogICAgIH0KIApAQCAt
MjU3LDE5ICsyNTksMTkgQEAgY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKIAogICAg
IGJvb2wgaXNVc2luZ1NpbmdsZVNsb3QoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
ZGF0YSAmIFVzaW5nU2luZ2xlU2xvdEZsYWc7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihtX2RhdGEuZ2V0KCkpICYgVXNpbmdTaW5nbGVTbG90RmxhZzsKICAgICB9CiAK
ICAgICBUcmFuc2l0aW9uTWFwKiBtYXAoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFp
c1VzaW5nU2luZ2xlU2xvdCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUcmFuc2l0
aW9uTWFwKj4obV9kYXRhKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUcmFuc2l0aW9u
TWFwKj4obV9kYXRhLmdldCgpKTsKICAgICB9CiAKICAgICBXZWFrSW1wbCogd2Vha0ltcGwoKSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwotICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PFdlYWtJbXBsKj4obV9kYXRhICYgflVzaW5nU2luZ2xlU2xv
dEZsYWcpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdlYWtJbXBsKj4oYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4obV9kYXRhLmdldCgpKSAmIH5Vc2luZ1NpbmdsZVNsb3RGbGFnKTsKICAg
ICB9CiAKICAgICB2b2lkIHNldE1hcChUcmFuc2l0aW9uTWFwKiBtYXApCkBAIC0yODAsNyArMjgy
LDcgQEAgY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKICAgICAgICAgICAgIFdlYWtT
ZXQ6OmRlYWxsb2NhdGUoaW1wbCk7CiAKICAgICAgICAgLy8gVGhpcyBpbXBsaWNpdGx5IGNsZWFy
cyB0aGUgZmxhZyB0aGF0IGluZGljYXRlcyB3ZSdyZSB1c2luZyBhIHNpbmdsZSB0cmFuc2l0aW9u
Ci0gICAgICAgIG1fZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4obWFwKTsKKyAgICAgICAg
bV9kYXRhID0gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihtYXApOwogCiAgICAgICAgIEFTU0VSVCgh
aXNVc2luZ1NpbmdsZVNsb3QoKSk7CiAgICAgfQpAQCAtMjg4LDcgKzI5MCwxMSBAQCBjbGFzcyBT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgIFN0cnVjdHVyZSogc2luZ2xlVHJhbnNpdGlv
bigpIGNvbnN0OwogICAgIHZvaWQgc2V0U2luZ2xlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqKTsKIAot
ICAgIGludHB0cl90IG1fZGF0YTsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgIFBhY2tlZFB0cjx1
aW50OF90PiBtX2RhdGE7CisjZWxzZQorICAgIE5ha2VkUHRyPHVpbnQ4X3Q+IG1fZGF0YTsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dyaXRlQmFycmllci5oCmluZGV4IDcwN2UyMGI2ZTVhYzNmNmJiYmM5N2M5NTVkZDFl
MDE3ZjYwZDIyMDIuLmY3ZDQ0NzE5OTQwOThjNDIxOGVkMGE2ODc2YmRmNTIyYjM0NDI2Y2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCkBAIC0yNDgs
NCArMjQ4LDYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXcml0ZUJhcnJpZXJCYXNl
PFUsIFRyYWl0c1U+JiBsaHMsIGNvbnN0IFdyaXRlQmFycmkKICAgICByZXR1cm4gbGhzLmdldCgp
ID09IHJocy5nZXQoKTsKIH0KIAordXNpbmcgVW5zYWZlQ2VsbFBvaW50ZXIgPSB1aW50cHRyX3Q7
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9s
bGFyVk0uY3BwCmluZGV4IDlhN2Y0OWExNDA1M2EwODI3ZGJhZTM1MmQyOGY1MDM2MDdmZjZjZDcu
LmEyMGY2MDZmN2I4MWI5NDJiODg5ZDM1YTU1M2FjZWQ3ODJhOGI4M2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTI4MTgsOCArMjgxOCw4IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRT
dHJ1Y3R1cmVUcmFuc2l0aW9uTGlzCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUoc3RydWN0
dXJlLT5tYXhPZmZzZXQoKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpCi0g
ICAgICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc1N0cmluZyh2bSwgU3RyaW5n
KCpzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSkpKTsKKyAgICAgICAgaWYgKGF1
dG8qIHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0
eU5hbWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzU3RyaW5n
KHZtLCBTdHJpbmcoKnRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpKSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggMTZlY2RhYTYx
ZTg2ZWM4OGRlMDQ0OGUyOWY2NjU4NjA2NmVjODRhMS4uNGRiMTU4Mjc3MWNhZDk3MmVkZWY2NDEy
N2VkYmEyOGExYjk3MDlmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTI3NSw3ICsyNzUsOCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxs
RW50cnlwb2ludFNsb3coKQogCiAgICAgICAgICAgICBzdGFja0xpbWl0R1BSSXNDbG9iYmVyZWQg
PSB0cnVlOwogICAgICAgICAgICAgaml0LmVtaXRMb2FkU3RydWN0dXJlKHZtLCBzY3JhdGNoR1BS
LCBzY3JhdGNoR1BSLCBzdGFja0xpbWl0R1BSKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpvZmZzZXRPZlRyYW5zaXRpb25PZmZzZXRB
bmRDbGFzc0luZm8oKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmFuZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmU6OmNs
YXNzSW5mb01hc2spKSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19maW5hbDxXZWJBc3NlbWJseUZ1bmN0aW9uPjo6dmFsdWUsICJXZSBkbyBub3QgY2hl
Y2sgZm9yIHN1YnR5cGVzIGJlbG93Iik7CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfZmluYWw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+Ojp2YWx1ZSwgIldlIGRvIG5vdCBj
aGVjayBmb3Igc3VidHlwZXMgYmVsb3ciKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Nv
bXBhY3RQb2ludGVyVHVwbGUuaCBiL1NvdXJjZS9XVEYvd3RmL0NvbXBhY3RQb2ludGVyVHVwbGUu
aAppbmRleCBiOGYyMDFlYTA5NjU4OWI5MmZmNTA2YzY0ZjA5OWI4ZDk1Y2JiZTJmLi42ZGU0OGQz
OTYzZDRkZGQxODBjM2E4ZGJhNTA4ODRkZDY1ZTI3YzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmgKKysrIGIvU291cmNlL1dURi93dGYvQ29tcGFjdFBv
aW50ZXJUdXBsZS5oCkBAIC0zMywxMyArMzMsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAKIC8vIFRo
ZSBnb2FsIG9mIHRoaXMgY2xhc3MgaXMgZm9sZGluZyBhIHBvaW50ZXIgYW5kIDEgYnl0ZSB2YWx1
ZSBpbnRvIDggYnl0ZXMgaW4gYm90aCAzMmJpdCBhbmQgNjRiaXQgYXJjaGl0ZWN0dXJlcy4KIC8v
IDMyYml0IGFyY2hpdGVjdHVyZSBqdXN0IGhhcyBhIHBhaXIgb2YgYnl0ZSBhbmQgcG9pbnRlciwg
d2hpY2ggc2hvdWxkIGJlIDggYnl0ZXMuCi0vLyBJbiA2NGJpdCwgd2UgdXNlIHRoZSB1cHBlciA1
IGJpdHMgYW5kIGxvd2VyIDMgYml0cyAoemVybyBkdWUgdG8gYWxpZ25tZW50KSBzaW5jZSB0aGVz
ZSBiaXRzIGFyZSBzYWZlIHRvIHVzZSBldmVuCi0vLyB3aXRoIDUtbGV2ZWwgcGFnZSB0YWJsZXMg
d2hlcmUgdGhlIGVmZmVjdGl2ZSBwb2ludGVyIHdpZHRoIGlzIDU3Yml0cy4KKy8vIFdlIGFyZSBh
c3N1bWluZyA0OGJpdCBwb2ludGVycyBoZXJlLCB3aGljaCBpcyBhbHNvIGFzc3VtZWQgaW4gSlNW
YWx1ZSBhbnl3YXkuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQb2ludGVyVHlwZSwgdHlwZW5hbWUgVHlw
ZT4KIGNsYXNzIENvbXBhY3RQb2ludGVyVHVwbGUgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFR5cGUpID09IDEs
ICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUeXBlKSA8PSAyLCAiIik7CiAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3BvaW50ZXI8UG9pbnRlclR5cGU+Ojp2YWx1ZSwgIiIpOwogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbDxUeXBlPjo6dmFsdWUgfHwgc3RkOjppc19l
bnVtPFR5cGU+Ojp2YWx1ZSwgIiIpOwogCkBAIC00Nyw0MiArNDYsNDYgQEAgY2xhc3MgQ29tcGFj
dFBvaW50ZXJUdXBsZSBmaW5hbCB7CiAKICNpZiBDUFUoQUREUkVTUzY0KQogcHVibGljOgotICAg
IHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZW5jb2RlVHlwZSh1aW50OF90IHR5cGUpCisgICAg
Ly8gTm90ZSB0aGF0IHdlIG11c3QgdXNlIHRoaXMgZW5jb2RpbmcgZm9ybWF0LgorICAgIC8vIEpJ
VCBjb2RlIGlzIHJlbHlpbmcgb24gdGhlIGZhY3QgdGhhdCBmaXJzdCAxNmJpdHMgYXJlIHR5cGVz
IGluIGxpdHRsZSBlbmRpYW4gQ1BVIQorICAgIHN0YXRpY19hc3NlcnQoV1RGX09TX0NPTlNUQU5U
X0VGRkVDVElWRV9BRERSRVNTX1dJRFRIIDw9IDQ4KTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVp
bnQ2NF90IGVuY29kZVR5cGUoVHlwZSB0eXBlKQogICAgIHsKLSAgICAgICAgLy8gRW5jb2RlIDhi
aXQgdHlwZSBVVVVERERERCBpbnRvIDY0Yml0IGRhdGEgREREREQuLjU2Yml0Li5VVVUuCi0gICAg
ICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHR5cGUpIDw8IDU5KSB8IChzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odHlwZSkgPj4gNSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50NjRfdD4odHlwZSkgPDwgNDg7CiAgICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhf
dCBkZWNvZGVUeXBlKHVpbnQ2NF90IHZhbHVlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgVHlwZSBk
ZWNvZGVUeXBlKHVpbnQ2NF90IHZhbHVlKQogICAgIHsKLSAgICAgICAgLy8gRGVjb2RlIDY0Yml0
IGRhdGEgREREREQuLjU2Yml0Li5VVVUgaW50byA4Yml0IHR5cGUgVVVVREREREQuCi0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PigodmFsdWUgPj4gNTkpIHwgKHZhbHVlIDw8IDUp
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlID4+IDQ4KTsKICAgICB9
CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IHR5cGVNYXNrID0gZW5jb2RlVHlwZShV
SU5UOF9NQVgpOwotICAgIHN0YXRpY19hc3NlcnQoMHhGODAwMDAwMDAwMDAwMDA3VUxMID09IHR5
cGVNYXNrLCAiIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBwb2ludGVyTWFzayA9
IH50eXBlTWFzazsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IHBvaW50ZXJNYXNrID0g
KDFVTEwgPDwgNDgpIC0gMTsKIAogICAgIENvbXBhY3RQb2ludGVyVHVwbGUoUG9pbnRlclR5cGUg
cG9pbnRlciwgVHlwZSB0eXBlKQotICAgICAgICA6IG1fZGF0YShiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KHBvaW50ZXIpIHwgZW5jb2RlVHlwZShzdGF0aWNfY2FzdDx1aW50OF90Pih0eXBlKSkpCisg
ICAgICAgIDogbV9kYXRhKGVuY29kZShwb2ludGVyLCB0eXBlKSkKICAgICB7Ci0gICAgICAgIEFT
U0VSVCgoYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihwb2ludGVyKSAmIDBiMTExKSA9PSAweDApOwor
ICAgICAgICBBU1NFUlQodGhpcy0+dHlwZSgpID09IHR5cGUpOworICAgICAgICBBU1NFUlQodGhp
cy0+cG9pbnRlcigpID09IHBvaW50ZXIpOwogICAgIH0KIAogICAgIFBvaW50ZXJUeXBlIHBvaW50
ZXIoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UG9pbnRlclR5cGU+KG1fZGF0YSAmIHBv
aW50ZXJNYXNrKTsgfQogICAgIHZvaWQgc2V0UG9pbnRlcihQb2ludGVyVHlwZSBwb2ludGVyKQog
ICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChhbGlnbm9mKHR5cGVuYW1lIHN0ZDo6cmVtb3Zl
X3BvaW50ZXI8UG9pbnRlclR5cGU+Ojp0eXBlKSA+PSBhbGlnbm9mKHZvaWQqKSwgIiIpOwotICAg
ICAgICBBU1NFUlQoKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4ocG9pbnRlcikgJiAwYjExMSkgPT0g
MHgwKTsKLSAgICAgICAgbV9kYXRhID0gQ29tcGFjdFBvaW50ZXJUdXBsZShwb2ludGVyLCB0eXBl
KCkpLm1fZGF0YTsKKyAgICAgICAgbV9kYXRhID0gZW5jb2RlKHBvaW50ZXIsIHR5cGUoKSk7CiAg
ICAgfQogCi0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4o
ZGVjb2RlVHlwZShtX2RhdGEpKTsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGRl
Y29kZVR5cGUobV9kYXRhKTsgfQogICAgIHZvaWQgc2V0VHlwZShUeXBlIHR5cGUpCiAgICAgewot
ICAgICAgICBtX2RhdGEgPSBDb21wYWN0UG9pbnRlclR1cGxlKHBvaW50ZXIoKSwgdHlwZSkubV9k
YXRhOworICAgICAgICBtX2RhdGEgPSBlbmNvZGUocG9pbnRlcigpLCB0eXBlKTsKICAgICB9CiAK
IHByaXZhdGU6CisgICAgc3RhdGljIHVpbnQ2NF90IGVuY29kZShQb2ludGVyVHlwZSBwb2ludGVy
LCBUeXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90
Pihwb2ludGVyKSB8IGVuY29kZVR5cGUodHlwZSk7CisgICAgfQorCiAgICAgdWludDY0X3QgbV9k
YXRhIHsgMCB9OwogI2Vsc2UKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXgg
NmJiYmVmZTcwZmMxYzEzMDJmNDk1ZWMzZjZlMmE0NDEwMjVlNmQ2YS4uMDA0MzU2MzQxZjc0NzE5
NjQ2ZjE1ODE0NTM2Zjc1MDdkNDEyZjM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAg
LTE4OSw4ICsxODksOCBAQCBjbGFzcyBTdHJpbmdJbXBsIDogcHJpdmF0ZSBTdHJpbmdJbXBsU2hh
cGUgewogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBNYXhMZW5ndGggPSBTdHJpbmdJ
bXBsU2hhcGU6Ok1heExlbmd0aDsKIAotICAgIC8vIFRoZSBib3R0b20gNiBiaXRzIGluIHRoZSBo
YXNoIGFyZSBmbGFncy4KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHNfZmxh
Z0NvdW50ID0gNjsKKyAgICAvLyBUaGUgYm90dG9tIDYgYml0cyBpbiB0aGUgaGFzaCBhcmUgZmxh
Z3MsIGJ1dCByZXNlcnZlIDggYml0cyBzaW5jZSBTdHJpbmdIYXNoIG9ubHkgaGFzIDI0IGJpdHMg
YW55d2F5LgorICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19mbGFnQ291bnQg
PSA4OwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19m
bGFnTWFzayA9ICgxdSA8PCBzX2ZsYWdDb3VudCkgLSAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TeW1ib2xJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbEltcGwu
aAppbmRleCBlZDBmMTNlNTQ0ZjEwYzMxYjQxOWJlYWFhODI1MjM3NGE4NzBhYzczLi5iOGNjMzhj
ZDZlMzUwMWRkZWE2NTk2YjZjMGViNjI2ZGJhNGFiMTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N5bWJvbEltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbElt
cGwuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBTeW1ib2xJbXBsIDogcHVibGljIFVuaXF1ZWRT
dHJpbmdJbXBsIHsKICAgICBzdGF0aWMgY29uc3RleHByIEZsYWdzIHNfZmxhZ0lzUmVnaXN0ZXJl
ZCA9IDBiMDEwdTsKICAgICBzdGF0aWMgY29uc3RleHByIEZsYWdzIHNfZmxhZ0lzUHJpdmF0ZSA9
IDBiMTAwdTsKIAotICAgIHVuc2lnbmVkIGhhc2hGb3JTeW1ib2woKSBjb25zdCB7IHJldHVybiBt
X2hhc2hGb3JTeW1ib2w7IH0KKyAgICB1bnNpZ25lZCBoYXNoRm9yU3ltYm9sKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNoRm9yU3ltYm9sID4+IHNfZmxhZ0NvdW50OyB9CiAgICAgYm9vbCBpc051bGxT
eW1ib2woKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgc19mbGFnSXNOdWxsU3ltYm9sOyB9CiAg
ICAgYm9vbCBpc1JlZ2lzdGVyZWQoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgc19mbGFnSXNS
ZWdpc3RlcmVkOyB9CiAgICAgYm9vbCBpc1ByaXZhdGUoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdz
ICYgc19mbGFnSXNQcml2YXRlOyB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzdlNGRkOTg1MWQzNDFkN2YzZjkzNzdmYjE0
NmUzMTJkOTFhMzY4OC4uNDU0Yzk3MTY0ZjdhMzQ4OTJiODNjMWFjZjMyYmJkOGE1YzA4NzAwOSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTAyLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gU2hyaW5rIFN0cnVjdHVyZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3ODI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB0ZXN0IGlzIGhhbGYt
YnJva2VuIHNpbmNlIGl0IHJlbGllcyBvbiBIYXNoTWFwJ3Mgb3JkZXIgaW1wbGljaXRseS4KKyAg
ICAgICAgV2UgY2hhbmdlZCBTeW1ib2xJbXBsJ3MgaGFzaCBjb2RlLCBzbyBpdCBtYWtlcyB0aGUg
cmVzdWx0IGRpZmZlcmVudC4KKworICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci90YWlsLWRl
bGV0ZWQtZnJhbWVzL3RhaWwtZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1ZS1leHBlY3RlZC50eHQ6
CisKIDIwMjAtMDItMjEgIEphc29uIExhd3JlbmNlICA8bGF3cmVuY2UuakBhcHBsZS5jb20+CiAK
ICAgICAgICAgWyBpT1MgXSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWRE
Qi9rZXktZ2VuZXJhdG9ycy9yZWFkaW5nLWF1dG9pbmNyZW1lbnQtaW5kZXhlcy1jdXJzb3JzLmFu
eS5zZXJ2aWNld29ya2VyLmh0bWwgaXMgZmxha3kgZmFpbGluZy4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci90YWlsLWRlbGV0ZWQtZnJhbWVzL3RhaWwtZGVsZXRl
ZC1mcmFtZXMtdGhpcy12YWx1ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZGVidWdnZXIvdGFpbC1kZWxldGVkLWZyYW1lcy90YWlsLWRlbGV0ZWQtZnJhbWVzLXRoaXMtdmFs
dWUtZXhwZWN0ZWQudHh0CmluZGV4IDIxMjVmYjUyOTcxY2VjZWFiN2MwODAzNGYyZDUzNmM3YTJh
NGI0ZTguLmUzNzQ0NjQ1MzdhYWI3ZDRhMGFiNWUyNGY0ZmM4YTcwZmY3ZjViN2MgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci90YWlsLWRlbGV0ZWQtZnJhbWVzL3Rh
aWwtZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3RhaWwtZGVsZXRlZC1mcmFtZXMvdGFpbC1kZWxldGVkLWZy
YW1lcy10aGlzLXZhbHVlLWV4cGVjdGVkLnR4dApAQCAtMTQsNiArMTQsNiBAQCBDQUxMIFNUQUNL
OgogMzogW0ZdIHN0YXJ0QUJDCiAgIHRoaXM6IHVuZGVmaW5lZAogNDogW1BdIEdsb2JhbCBDb2Rl
Ci0gIHRoaXM6IGMgLSAKKyAgdGhpczogYSAtIAogUkVTVU1FRAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391452</attachid>
            <date>2020-02-21 21:58:40 -0800</date>
            <delta_ts>2020-02-21 22:44:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207827-20200221215839.patch</filename>
            <type>text/plain</type>
            <size>107424</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NDI3NDBmNDllZGMwZWQ3MmU3YzUzZjg3NzNiYzQ2NzUwNzM1NGYyLi5jZWUyZjdmNTMwZDgyNzZl
NThhMjNjM2E2MGM3NGZmYjc3Mzg0MzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzIgQEAKKzIwMjAtMDItMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNocmlua3Mgc2l6ZW9mKFN0
cnVjdHVyZSkgZnJvbSAxMTIgdG8gOTYgKDE2IGJ5dGVzKSBpbiA2NCBiaXQgYXJjaGl0ZWN0dXJl
cy4KKyAgICAgICAgU3RydWN0dXJlIGlzIG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IGFsbG9j
YXRlZCBKU0NlbGwgaW4gSlNDLiBTbyBpdCBpcyB3b3J0aCBkb2luZworICAgICAgICBhbGwgdGhl
IHNvcnQgb2YgYml0IGhhY2tzIHRvIG1ha2UgaXQgY29tcGFjdCBhcyBtdWNoIGFzIHBvc3NpYmxl
LgorCisgICAgICAgICAgICAxLiBTdHJpbmdIYXNoZXIgaXMgYWx3YXlzIGdlbmVyYXRpbmcgMjQg
Yml0cyBoYXNoZXMgc28gZmFyLiBCeSBsZXZlcmFnaW5nIHRoaXMgZmFjdCwKKyAgICAgICAgICAg
ICAgIHdlIHN0b3JlIGhhc2ggY29kZSBpbiBTdHJ1Y3R1cmUgaW4gMyBieXRlcyAoMjQgYml0cykg
Zm9yIHByb3BlcnR5LWhhc2ggYW5kIHNlZW4tcHJvcGVydHktaGFzaC4KKyAgICAgICAgICAgIDIu
IEluc3RlYWQgb2YgdXNpbmcgYmxvb20tZmlsdGVyIG9mIHBvaW50ZXJzIGZvciBzZWVuLXByb3Bl
cnRpZXMsIHdlIHNob3VsZCB1c2UgYmxvb20tZmlsdGVyIG9mIGhhc2gtY29kZXMuCisgICAgICAg
ICAgICAzLiBVc2VkIFBhY2tlZFB0ciBmb3IgQysrIG5vbi1jb25jdXJyZW50bHkgYWNjZXNzZWQg
ZGF0YSBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgNC4gUHV0IG91dE9mTGluZVR5cGVGbGFncywg
bWF4T2Zmc2V0IGFuZCB0cmFuc2l0aW9uT2Zmc2V0IGludG8gaGlnaGVzdCBiaXRzIG9mIG1fcHJv
cGVydHlUYWJsZVVuc2FmZSwKKyAgICAgICAgICAgICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4s
IGFuZCBtX2NsYXNzSW5mby4gRG8gbm90IHVzZSBQYWNrZWRQdHIgaGVyZSBzaW5jZSBzb21lIG9m
IHRoZW0gYXJlIGNvbmN1cnJlbnRseSBhY2Nlc3NlZAorICAgICAgICAgICAgICAgYnkgR0MuCisg
ICAgICAgICAgICA1LiBQdXQgbV9pbmxpbmVDYXBhY2l0eSBpbnRvIGxvd2VyIDggYml0cyBvZiBt
X3Byb3BlcnR5SGFzaC4KKyAgICAgICAgICAgIDYuIFJlbW92ZSBtX2xvY2ssIGFuZCB1c2UgU3Ry
dWN0dXJlOjpjZWxsTG9jaygpIGluc3RlYWQuCisgICAgICAgICAgICA3LiBSZW1vdmUgbV9jYWNo
ZWRQcm90b3R5cGVDaGFpbiBjbGVhcmluZyBmcm9tIHRoZSBjb25jdXJyZW50IGNvbGxlY3RvciBz
aW5jZSBpdCBpcyBkZWFkIGNvZGUsIGl0IHdhcyBvbGQgY29kZS4KKyAgICAgICAgICAgICAgIFdl
IGFyZSBzZXR0aW5nIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4gb25seSBpZiBTdHJ1Y3R1cmUgaXMg
Zm9yIEpTT2JqZWN0LiBDbGVhcmluZyBoYXBwZW5zIG9ubHkgaWYgaXQgaXMgbm90CisgICAgICAg
ICAgICAgICBhIFN0cnVjdHVyZSBmb3IgSlNPYmplY3QuCisgICAgICAgICAgICA4LiBMb2NraW5n
IHN0cnVjdHVyZSB3aGVuIG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSBpcyBjaGFuZ2VkLiBUaGlz
IGZpZWxkIGlzIG9ubHkgbW9kaWZpZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgICAg
ICAgICBBbmQgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhpcyBmaWVsZCByZXF1aXJlcyBsb2NraW5n
LiBUaGVuIHdlIGNhbiB1c2UgNiBieXRlcyBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuCisgICAg
ICAgICAgICA5LiBXZSBlbnN1cmUgdGhhdCBvbmx5IHRoZSBtYWluIHRocmVhZCBpcyBhY2Nlc3Np
bmcgbV90cmFuc2l0aW9uVGFibGUuIFRoZW4gd2UgY2FuIHVzZSA2IGJ5dGVzIG1fdHJhbnNpdGlv
blRhYmxlLgorCisgICAgICAgIE1hbnkgcGFpcnMgYXJlIHVzaW5nIENvbXBhY3RQb2ludGVyVHVw
bGUgdG8gbWFrZSBjb2RlIGNsZWFuLgorICAgICAgICBDb21iaW5pbmcgYWxsIG9mIHRoZSBhYm92
ZSB0ZWNobmlxdWVzIGFuZCBnZXR0aW5nIDE2IGJ5dGVzLgorCisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNoZWNrU3ViQ2xhc3MpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0S2V5cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDcmVhdGVUaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZVByb21pc2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdCk6CisgICAgICAgICogZnRsL0ZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU9iamVjdEtleXMp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlUHJv
bWlzZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVh
dGVJbnRlcm5hbEZpZWxkT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUNoZWNrU3ViQ2xhc3MpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKToKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAg
IChKU0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50
aW1lL0NvbmN1cnJlbnRKU0xvY2suaDoKKyAgICAgICAgKEpTQzo6Q29uY3VycmVudEpTTG9ja2Vy
QmFzZTo6Q29uY3VycmVudEpTTG9ja2VyQmFzZSk6CisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlckltcGw6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwpOgorICAgICAg
ICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsOjp+R0NTYWZlQ29uY3VycmVudEpT
TG9ja2VySW1wbCk6CisgICAgICAgIChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlckltcGw6OkNvbmN1
cnJlbnRKU0xvY2tlckltcGwpOgorICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXI6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlcjo6fkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlcjo6Q29uY3VycmVudEpTTG9ja2Vy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldERpcmVjdENvbmN1cnJlbnRseSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXBhcmVUb1B1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2luZ2xlVHJhbnNpdGlvbiBjb25z
dCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2V0U2luZ2xlVHJh
bnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFp
bnMgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmdldCBj
b25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxp
emF0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFi
bGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmVJbXBsKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dGFr
ZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3cpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwaW4p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbkZvckNhY2hpbmcpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3IgY29uc3QpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpydWxlT3V0VW5zZWVuUHJvcGVydHlIYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpzZWVuUHJvcGVydGllcyBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRk
UHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpm
b3JFYWNoUHJvcGVydHlDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNh
Y2hlZFByb3RvdHlwZUNoYWluIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRD
YWNoZWRQcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvdG90eXBl
Q2hhaW4gY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3BlcnR5UmVwbGFjZW1l
bnRXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNldENv
bnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVt
b3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
c2V0UHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2xlYXJQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRPdXRPZkxpbmVUeXBlRmxhZ3Mp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldElubGluZUNhcGFjaXR5KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpzZXRDbGFzc0luZm8pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnNldFByZXZpb3VzSUQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsZWFyUHJldmlvdXNJ
RCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAg
ICAgKEpTQzo6dG9BdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGU6OmlzVXNpbmdTaW5nbGVTbG90IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjptYXAgY29uc3QpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OndlYWtJbXBsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzZXRNYXApOgorICAgICAgICAqIHJ1bnRpbWUvV3Jp
dGVCYXJyaWVyLmg6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAgIChK
U0M6OkpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3RydWN0dXJlVHJhbnNpdGlvbkxpc3Qp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChK
U0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKwogMjAyMC0w
Mi0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXBw
b3J0IGZvciBieXRlY29kZSBjYWNoaW5nIG1vcmUgcm9idXN0IGFnYWluc3QgZmlsZSBjb3JydXB0
aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCBjZjEyZjI3NjUwZDQ4ZDUwMTViOGRjYzExZTU3ODI1YjM1YWRiODAyLi4zMTRi
ZWQyNDZmMjcwNTc4M2Y2ZDEzNmNkNGE5OTk4YjczYzBkNGFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDIwLTAyLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0pTQ10gU2hyaW5rIFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA3ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBDb21wYWN0UG9pbnRlclR1cGxlIHVzYWJsZSBmb3Igc3Rv
cmluZyAxNiBiaXRzIGRhdGEuCisKKyAgICAgICAgKiB3dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5o
OgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9T
eW1ib2xJbXBsLmg6CisgICAgICAgIChXVEY6OlN5bWJvbEltcGw6Omhhc2hGb3JTeW1ib2wgY29u
c3QpOgorCiAyMDIwLTAyLTIxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OKHIyNTcwNzIpOiBNb3Rpb25NYXJrIHwgTWFjIHwgLTEwJQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCA2
NDJiMTYzNTZmOTBlOWMzODYwMmViYzU3ZmQ5ZTA0YTBmNDViNTI4Li4wOTEyNzQwZGYxNTEzNzE4
OThlMDE2ZDhhYTZlMzU4ZGZlNTlhZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtOTYwNSw3ICs5NjA1LDEwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N1YkNsYXNzKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQ
UlJlZyBzcGVjaWZpZWRHUFIgPSBzcGVjaWZpZWQuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQuZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgYmFzZUdQUiwgb3RoZXJHUFIsIHNwZWNpZmllZEdQUik7Ci0g
ICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG90aGVyR1BSLCBTdHJ1
Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgb3RoZXJHUFIpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvdGhlckdQUiwgU3RydWN0dXJlOjpvZmZzZXRPZkNs
YXNzSW5mbygpKSwgb3RoZXJHUFIpOworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIG1faml0
LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihT
dHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKSwgb3RoZXJHUFIpOworI2VuZGlmCiAgICAgICAgIG1f
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG5vZGUtPmNsYXNzSW5mbygpKSwg
c3BlY2lmaWVkR1BSKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxvb3AgPSBtX2pp
dC5sYWJlbCgpOwpAQCAtMTI2OTgsNyArMTI3MDEsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdEtleXMoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBvYmplY3RHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVj
dHVyZTo6cHJldmlvdXNPclJhcmVEYXRhT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3Ry
dWN0dXJlOjpvZmZzZXRPZlByZXZpb3VzT3JSYXJlRGF0YSgpKSwgc2NyYXRjaEdQUik7CisjaWYg
Q1BVKEFERFJFU1M2NCkKKyAgICAgICAgICAgIG1faml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoU3RydWN0dXJlOjpwcmV2aW91c09yUmFyZURhdGFNYXNrKSwgc2NyYXRjaEdQ
Uik7CisjZW5kaWYKIAogICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2bSgpLnN0cnVjdHVyZVN0cnVjdHVy
ZS0+c3RydWN0dXJlSUQoKSkpKSk7CkBAIC0xMjgzOSw3ICsxMjg0NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVUaGlzKE5vZGUqIG5vZGUpCiAgICAgYXV0byBidXR0ZXJm
bHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJl
c3VsdEdQUiwgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVy
ZUdQUiwgYnV0dGVyZmx5LCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAKLSAgICBtX2ppdC5sb2Fk
OChKSVRDb21waWxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIGlubGluZUNhcGFjaXR5R1BSKTsKKyAgICBtX2ppdC5sb2FkOChKSVRD
b21waWxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxpbmVD
YXBhY2l0eSgpKSwgaW5saW5lQ2FwYWNpdHlHUFIpOwogICAgIG1faml0LmVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIGlubGluZUNhcGFjaXR5R1BSKTsKICAgICBtX2ppdC5t
dXRhdG9yRmVuY2Uodm0oKSk7CiAKQEAgLTEyODc3LDggKzEyODgzLDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVQcm9taXNlKE5vZGUqIG5vZGUpCiAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0
YUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcp
KSk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2Zp
bGUoKSArIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1
cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlR1BSKTsKICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzdHJ1
Y3R1cmVHUFIpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobm9kZS0+aXNJbnRlcm5h
bFByb21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkgOiBKU1Byb21pc2U6OmluZm8o
KSksIHNjcmF0Y2gxR1BSKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkpKTsKKyAgICBtX2pp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6
b2Zmc2V0T2ZDbGFzc0luZm8oKSksIHNjcmF0Y2gxR1BSKTsKKyNpZiBDUFUoQUREUkVTUzY0KQor
ICAgIG1faml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0
PHZvaWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKSwgc2NyYXRjaDFHUFIpOworI2VuZGlm
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaDFHUFIsIFRydXN0ZWRJbW1QdHIobm9kZS0+aXNJbnRlcm5hbFByb21pc2Uo
KSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkgOiBKU1Byb21pc2U6OmluZm8oKSkpKTsKICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGds
b2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkp
KTsKIApAQCAtMTI5MjUsOCArMTI5MzQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNyZWF0ZUludGVybmFsRmllbGRPYmplY3QoTm9kZSogbm9kZSwgT3BlcmF0aW9uIG9wZXIKICAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHJhcmVEYXRhR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZykpKTsKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJh
cmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxv
Y2F0aW9uUHJvZmlsZSgpICsgSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVHUFIp
OwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6
Olplcm8sIHN0cnVjdHVyZUdQUikpOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihKU0Ns
YXNzOjppbmZvKCkpLCBzY3JhdGNoMUdQUik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7
CisgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBT
dHJ1Y3R1cmU6Om9mZnNldE9mQ2xhc3NJbmZvKCkpLCBzY3JhdGNoMUdQUik7CisjaWYgQ1BVKEFE
RFJFU1M2NCkKKyAgICBtX2ppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJp
dHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSksIHNjcmF0Y2gxR1BS
KTsKKyNlbmRpZgorICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKEpTQ2xhc3M6OmluZm8o
KSkpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0Lmdy
YXBoKCksIGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaAppbmRleCBiMTA4YWJmY2NiODk1OGE4MzA3YzBhYTc4Y2Q2
N2YyMDJkM2I4YzVjLi44MzI5Yjc2YzU5N2FjNjNjM2YzYjIyMzhiN2YyM2IxMzVjZTJlYmU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaApAQCAtMTM5LDExICsxMzksMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgewogICAgIG1hY3JvKFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNl
dCgpKSBcCiAgICAgbWFjcm8oU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MsIFN0cmluZ0ltcGw6OmZs
YWdzT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2xlbmd0aCwgU3RyaW5nSW1wbDo6
bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpIFwKLSAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJbmZvLCBT
dHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCisgICAgbWFjcm8oU3RydWN0dXJlX2NsYXNz
SW5mbywgU3RydWN0dXJlOjpvZmZzZXRPZkNsYXNzSW5mbygpKSBcCiAgICAgbWFjcm8oU3RydWN0
dXJlX2dsb2JhbE9iamVjdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAg
IG1hY3JvKFN0cnVjdHVyZV9pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5LCBTdHJ1Y3R1cmU6
OmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVj
dHVyZV9pbmxpbmVDYXBhY2l0eSwgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSBc
Ci0gICAgbWFjcm8oU3RydWN0dXJlX3ByZXZpb3VzT3JSYXJlRGF0YSwgU3RydWN0dXJlOjpwcmV2
aW91c09yUmFyZURhdGFPZmZzZXQoKSkgXAorICAgIG1hY3JvKFN0cnVjdHVyZV9pbmxpbmVDYXBh
Y2l0eSwgU3RydWN0dXJlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpIFwKKyAgICBtYWNybyhT
dHJ1Y3R1cmVfcHJldmlvdXNPclJhcmVEYXRhLCBTdHJ1Y3R1cmU6Om9mZnNldE9mUHJldmlvdXNP
clJhcmVEYXRhKCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfcHJvdG90eXBlLCBTdHJ1Y3R1cmU6
OnByb3RvdHlwZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3N0cnVjdHVyZUlELCBT
dHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVSYXJl
RGF0YV9jYWNoZWRPd25LZXlzLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6b2Zmc2V0T2ZDYWNoZWRPd25L
ZXlzKCkpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAppbmRleCA0ZDM0MjdiYzgyZThjOWIyNDdhYzg3MWEwMjAwMDFiYjIzODI5ZjI2Li43YTkwOThi
ODllYzk3MTlkOGNhYmY1YTBiNjFiYjI3YWU4Y2Q4ZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC02MDkxLDcgKzYwOTEsNyBAQCBjbGFz
cyBMb3dlckRGR1RvQjMgewogCiAgICAgICAgICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd09i
amVjdChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBMVmFsdWUgc3RydWN0dXJl
ID0gbG9hZFN0cnVjdHVyZShvYmplY3QpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBwcmV2aW91
c09yUmFyZURhdGEgPSBtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVf
cHJldmlvdXNPclJhcmVEYXRhKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgcHJldmlvdXNPclJh
cmVEYXRhID0gbV9vdXQuYml0QW5kKG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6cHJldmlv
dXNPclJhcmVEYXRhTWFzayksIG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVj
dHVyZV9wcmV2aW91c09yUmFyZURhdGEpKTsKICAgICAgICAgICAgICAgICBtX291dC5icmFuY2go
bV9vdXQubm90TnVsbChwcmV2aW91c09yUmFyZURhdGEpLCB1bnN1cmUobm90TnVsbENhc2UpLCB1
bnN1cmUoc2xvd0Nhc2UpKTsKIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8obm90TnVsbENhc2UsIHJhcmVEYXRhQ2FzZSk7CkBAIC02Njc1LDcg
KzY2NzUsOCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBtX291dC5icmFuY2gobV9v
dXQuaXNaZXJvNjQoc3RydWN0dXJlKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShoYXNTdHJ1
Y3R1cmUpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhoYXNTdHJ1Y3R1cmUsIGNoZWNrR2xv
YmFsT2JqZWN0Q2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChtX291dC5s
b2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29u
c3RJbnRQdHIobV9ub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gSlNJbnRlcm5hbFByb21pc2U6
OmluZm8oKSA6IEpTUHJvbWlzZTo6aW5mbygpKSksIHVzdWFsbHkoY2hlY2tHbG9iYWxPYmplY3RD
YXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291
dC5iaXRBbmQobV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX2NsYXNz
SW5mbyksIG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFzaykpOworICAg
ICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0
cihtX25vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygp
IDogSlNQcm9taXNlOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCBy
YXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0dsb2JhbE9i
amVjdENhc2UsIGZhc3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGRl
cml2ZWRTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3Ioc3RydWN0dXJlKTsKQEAgLTY3MzAsNyArNjcz
MSw4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5p
c1plcm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVy
ZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0cnVjdHVyZSwgY2hlY2tHbG9iYWxP
YmplY3RDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQ
dHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5jb25zdElu
dFB0cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCBy
YXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmJpdEFu
ZChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKSwg
bV9vdXQuY29uc3RJbnRQdHIoU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSk7CisgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5lcXVhbChjbGFzc0luZm8sIG1fb3V0LmNvbnN0SW50UHRyKEpTQ2xh
c3M6OmluZm8oKSkpLCB1c3VhbGx5KGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSksIHJhcmVseShzbG93
Q2FzZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSwg
ZmFzdEFsbG9jYXRpb25DYXNlKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1f
b3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9nbG9iYWxPYmplY3QpLCB3
ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpKSwgdXN1YWxseShmYXN0QWxsb2NhdGlvbkNhc2UpLCBy
YXJlbHkoc2xvd0Nhc2UpKTsKQEAgLTEzMjA4LDcgKzEzMjEwLDcgQEAgY2xhc3MgTG93ZXJERkdU
b0IzIHsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Js
b2NrKCk7CiAKICAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKGNl
bGwpOwotICAgICAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmxvYWRQdHIoc3RydWN0
dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pOworICAgICAgICAgICAgTFZhbHVlIGNs
YXNzSW5mbyA9IG1fb3V0LmJpdEFuZChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5T
dHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIoU3RydWN0dXJlOjpjbGFzc0lu
Zm9NYXNrKSk7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvdGhlckF0U3RhcnQgPSBtX291
dC5hbmNob3IoY2xhc3NJbmZvKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDdmMzU4YzEyMDNiZGVh
ZTkwZDQ0YTJjN2ZiODg5OTc4MDg5Y2E4NWYuLmZkZTAwYmNjOGM5MDQ1OWM3NTM0NTA2MmE2MTFk
YzFkZTQyOWNmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApA
QCAtOTc5LDcgKzk3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwog
ICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBlbWl0QWxs
b2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2Nh
dG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsK
LSAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcs
IFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7CiAgICAg
ZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAppbmRleCBjZDY2N2IyZTU4NzgyMGUzNzM1Y2QzODEzOTM2Zjk2YTk4Yzc5NjZhLi5iMTFm
NjU1ZmNiNmY2NjA1NTI3OTljMTJhMTBjY2JmOTE5MGU4NjIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBhdXRvIGJ1dHRlcmZseSA9
IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVn
LCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgbG9hZDgoQWRkcmVzcyhz
dHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hS
ZWcpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6Om9mZnNldE9m
SW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CiAgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCmluZGV4
IDk2YTM2MzVlNjgyNzM5M2VlODM2ZDgwNDc3NzI0YTI1ZDU0NmMyNjEuLjI0OWJhNWFhYzUxZTUw
OTBjZjIzZjdmOWU4ZTllNDdiYzIxZWY0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIFN0cnVj
dHVyZSogQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENsb25lZEFyZ3Vt
ZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBpbmRleGluZ1R5cGUpOwogICAgIHN0
cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKICAgICAgICAgdm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSksCi0gICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQp
IHsKKyAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCA9PSBjbG9uZWRBcmd1bWVudHNMZW5ndGhQcm9w
ZXJ0eU9mZnNldCk7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnNldE1heE9mZnNldCh2bSwgbmV3
TWF4T2Zmc2V0KTsKICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25jdXJyZW50SlNMb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25jdXJyZW50SlNMb2NrLmgKaW5kZXggYWEyNzNiYWRiZWZhNzM3YTBlYWE1MzRmYmVi
YTlmNTAxZmRiODYyNy4uOTVlYmEwYmYzZjlhMjAwNWI2NDUyZWFkZjdjZTBhNDI1Y2E1NmE0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpTTG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2su
aApAQCAtMzMsMTggKzMzLDE4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdXNpbmcgQ29uY3VycmVu
dEpTTG9jayA9IExvY2s7Ci11c2luZyBDb25jdXJyZW50SlNMb2NrZXJJbXBsID0gTG9ja0hvbGRl
cjsKIAogc3RhdGljX2Fzc2VydChzaXplb2YoQ29uY3VycmVudEpTTG9jaykgPT0gMSwgIlJlZ2Fy
ZGxlc3Mgb2Ygc3RhdHVzIG9mIGNvbmN1cnJlbnQgSlMgZmxhZywgc2l6ZSBvZiBDb251cnJlbnRK
U0xvY2sgaXMgYWx3YXlzIG9uZSBieXRlLiIpOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrPgog
Y2xhc3MgQ29uY3VycmVudEpTTG9ja2VyQmFzZSA6IHB1YmxpYyBBYnN0cmFjdExvY2tlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uY3VycmVudEpTTG9ja2VyQmFzZSk7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9ja2VyQmFzZShDb25jdXJyZW50SlNMb2NrJiBs
b2NrYWJsZSkKKyAgICBleHBsaWNpdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlKExvY2smIGxvY2th
YmxlKQogICAgICAgICA6IG1fbG9ja2VyKCZsb2NrYWJsZSkKICAgICB7CiAgICAgfQotICAgIGV4
cGxpY2l0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoQ29uY3VycmVudEpTTG9jayogbG9ja2FibGUp
CisgICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9ja2VyQmFzZShMb2NrKiBsb2NrYWJsZSkKICAg
ICAgICAgOiBtX2xvY2tlcihsb2NrYWJsZSkKICAgICB7CiAgICAgfQpAQCAtNjQsNjMgKzY0LDY1
IEBAIGNsYXNzIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgOiBwdWJsaWMgQWJzdHJhY3RMb2NrZXIg
ewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb25jdXJyZW50SlNMb2NrZXJJbXBsIG1fbG9ja2Vy
OworICAgIExvY2tlcjxMb2NrPiBtX2xvY2tlcjsKIH07CiAKLWNsYXNzIEdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlciA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIHsKK3RlbXBsYXRlPHR5
cGVuYW1lIExvY2s+CitjbGFzcyBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsIDogcHVibGlj
IENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4gewogcHVibGljOgotICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrJiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKLSAg
ICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlckltcGwoTG9jayYgbG9ja2FibGUsIEhlYXAmIGhlYXApCisgICAgICAgIDog
Q29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPihsb2NrYWJsZSkKICAgICAgICAgLCBtX2RlZmVy
R0MoaGVhcCkKICAgICB7CiAgICAgfQogCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKENv
bmN1cnJlbnRKU0xvY2sqIGxvY2thYmxlLCBIZWFwJiBoZWFwKQotICAgICAgICA6IENvbmN1cnJl
bnRKU0xvY2tlckJhc2UobG9ja2FibGUpCisgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1w
bChMb2NrKiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlPExvY2s+KGxvY2thYmxlKQogICAgICAgICAsIG1fZGVmZXJHQyhoZWFwKQogICAgIHsK
ICAgICB9CiAKLSAgICB+R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKCkKKyAgICB+R0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VySW1wbCgpCiAgICAgewogICAgICAgICAvLyBXZSBoYXZlIHRvIHVubG9j
ayBlYXJseSBkdWUgdG8gdGhlIGRlc3RydWN0aW9uIG9yZGVyIG9mIGJhc2UKICAgICAgICAgLy8g
dnMuIGRlcml2ZWQgY2xhc3Nlcy4gSWYgd2UgZGlkbid0LCB0aGVuIHdlIHdvdWxkIGRlc3Ryb3kg
dGhlIAogICAgICAgICAvLyBEZWZlckdDIG9iamVjdCBiZWZvcmUgdW5sb2NraW5nIHRoZSBsb2Nr
IHdoaWNoIGNvdWxkIGNhdXNlIGEgR0MKICAgICAgICAgLy8gYW5kIHJlc3VsdGluZyBkZWFkbG9j
ay4KLSAgICAgICAgdW5sb2NrRWFybHkoKTsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyQmFz
ZTxMb2NrPjo6dW5sb2NrRWFybHkoKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgRGVmZXJHQyBt
X2RlZmVyR0M7CiB9OwogCi1jbGFzcyBDb25jdXJyZW50SlNMb2NrZXIgOiBwdWJsaWMgQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZSB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrPgorY2xhc3MgQ29uY3Vy
cmVudEpTTG9ja2VySW1wbCA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+IHsK
IHB1YmxpYzoKLSAgICBDb25jdXJyZW50SlNMb2NrZXIoQ29uY3VycmVudEpTTG9jayYgbG9ja2Fi
bGUpCi0gICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJsZSkKKyAgICBDb25j
dXJyZW50SlNMb2NrZXJJbXBsKExvY2smIGxvY2thYmxlKQorICAgICAgICA6IENvbmN1cnJlbnRK
U0xvY2tlckJhc2U8TG9jaz4obG9ja2FibGUpCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgICAg
ICAsIG1fZGlzYWxsb3dHQyhzdGQ6OmluX3BsYWNlKQogI2VuZGlmCiAgICAgewogICAgIH0KIAot
ICAgIENvbmN1cnJlbnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrKiBsb2NrYWJsZSkKLSAgICAg
ICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAgIENvbmN1cnJlbnRKU0xv
Y2tlckltcGwoTG9jayogbG9ja2FibGUpCisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFz
ZTxMb2NrPihsb2NrYWJsZSkKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgICAgICwgbV9kaXNh
bGxvd0dDKHN0ZDo6aW5fcGxhY2UpCiAjZW5kaWYKICAgICB7CiAgICAgfQogCi0gICAgQ29uY3Vy
cmVudEpTTG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKLSAgICAgICAgOiBDb25jdXJyZW50
SlNMb2NrZXJCYXNlKE5vTG9ja2luZ05lY2Vzc2FyeSkKKyAgICBDb25jdXJyZW50SlNMb2NrZXJJ
bXBsKE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJC
YXNlPExvY2s+KE5vTG9ja2luZ05lY2Vzc2FyeSkKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAg
ICAgICwgbV9kaXNhbGxvd0dDKFdURjo6bnVsbG9wdCkKICNlbmRpZgogICAgIHsKICAgICB9CiAg
ICAgCi0gICAgQ29uY3VycmVudEpTTG9ja2VyKGludCkgPSBkZWxldGU7CisgICAgQ29uY3VycmVu
dEpTTG9ja2VySW1wbChpbnQpID0gZGVsZXRlOwogCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogcHJp
dmF0ZToKQEAgLTEyOCw0ICsxMzAsNyBAQCBjbGFzcyBDb25jdXJyZW50SlNMb2NrZXIgOiBwdWJs
aWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZSB7CiAjZW5kaWYKIH07CiAKK3VzaW5nIENvbmN1cnJl
bnRKU0xvY2tlciA9IENvbmN1cnJlbnRKU0xvY2tlckltcGw8Q29uY3VycmVudEpTTG9jaz47Cit1
c2luZyBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgPSBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJ
bXBsPENvbmN1cnJlbnRKU0xvY2s+OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKaW5kZXggNjY1ZDA4ODljZjQ0NjFjM2FiMGEyYWY0YjA3
YzZhNThjOTA0MjFjNC4uZDU2NTZmOGJmZGZmNjMyOTkyYWMxZGE0NTFlMzVjMWE1NDhkNDY3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKQEAgLTI0LDYgKzI0LDcgQEAK
IAogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCisjaW5jbHVk
ZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkNvbnN0cnVjdERhdGEuaCIKICNpbmNs
dWRlICJFbnVtZXJhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0yODgsNiArMjg5
LDkgQEAgY2xhc3MgSlNDZWxsTG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgdW5sb2NrU2xvdygpOwogfTsKIAordXNpbmcgQ29uY3VycmVudEpTQ2VsbExv
Y2tlciA9IENvbmN1cnJlbnRKU0xvY2tlckltcGw8SlNDZWxsTG9jaz47Cit1c2luZyBHQ1NhZmVD
b25jdXJyZW50SlNDZWxsTG9ja2VyID0gR0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbDxKU0Nl
bGxMb2NrPjsKKwogLy8gRklYTUU6IFJlZmVyIHRvIFN1YnNwYWNlIGJ5IHJlZmVyZW5jZS4KIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5ODgKIHRlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAKaW5kZXggYWNkMjlkZWQ4MTM1MWZiMjg0YjIxNTlhZDQ3YTYzMWMzNDk0ZjFkZi4uM2E1MTIx
ZDY5ZGZiNGZiMmZiOWY4ODVjYTdmZjNmZTU1YzA0ZGQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcApAQCAtMjAwNSw3ICsyMDA1LDcgQEAgYm9vbCBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXIKIAogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlk
T2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CisgICAgICAgICAg
ICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0s
IHByb3BlcnR5TmFtZSwgW10oY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFBy
b3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgJmRlZmVycmVkV2F0Y2hwb2ludEZp
cmUpOwogICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5ICYmICFzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIXN0cnVjdHVyZS0+aGFzSW5kZXhpbmdIZWFkZXIo
dGhpc09iamVjdCkpIHsKQEAgLTM3NjYsNyArMzc2Niw3IEBAIHZvaWQgSlNPYmplY3Q6OmNvbnZl
cnRUb0RpY3Rpb25hcnkoVk0mIHZtKQogICAgICAgICB2bSwgU3RydWN0dXJlOjp0b0NhY2hlYWJs
ZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCAmZGVmZXJyZWRXYXRjaHBv
aW50RmlyZSkpOwogfQogCi12b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRl
bmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKK3ZvaWQgSlNPYmplY3Q6
OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0Nl
bGxMb2NrZXImLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5l
Q2FwYWNpdHlBZnRlcikKIHsKICAgICAvLyBUaGlzIGNvdWxkIGludGVybGVhdmUgdmlzaXRDaGls
ZHJlbiBiZWNhdXNlIHNvbWUgb2xkIHN0cnVjdHVyZSBjb3VsZCBoYXZlIGJlZW4gYSBub24KICAg
ICAvLyBkaWN0aW9uYXJ5IHN0cnVjdHVyZS4gV2UgaGF2ZSB0byBiZSBjcmF6eSBjYXJlZnVsLiBC
dXQsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGJlIGhvbGRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCmluZGV4IGVjNjMwMGVhOWI5NzJjZTliYTBmYWQ4MTgyNTdhZmIy
MGQ4MmEyZWQuLjY1MTE2MGJlMGIwMTc4NzBjZTkwOTZiZjkyYTU1ZGNmMGU2Y2RiYmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaApAQCAtODE1LDcgKzgxNSw3IEBA
IGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICBzdHJ1Y3R1
cmUodm0pLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhpcyk7CiAgICAgfQotICAg
IHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVu
dEpTTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNh
cGFjaXR5QWZ0ZXIpOworICAgIHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29u
c3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFZNJiwgU3RydWN0dXJlKiwgc2l6ZV90
IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCgpIGNvbnN0CiAgICAgewpAQCAtMTMyOSw3ICsxMzI5LDcgQEAgaW5saW5lIEpTVmFsdWUg
SlNPYmplY3Q6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiAvLyBmbGF0dGVuIGFuIG9iamVjdC4KIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXRE
aXJlY3RDb25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkgY29uc3QKIHsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+
bG9jaygpKTsKKyAgICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNl
bGxMb2NrKCkpOwogICAgIGlmICghc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJuIGdldERpcmVjdChvZmZzZXQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAppbmRleCBhNjcw
MDM0N2Y2OTc2ZTYxYjA1ZGIxOGYyYjA5NmFhYTc5ZTJlYmIzLi45NWE2NzEwYzJlMzU2ODQzNmQ1
Y2NhMjhjODZiMmRjOTRkOGE4ODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdElubGluZXMuaApAQCAtMjE2LDcgKzIxNiw3IEBAIEFMV0FZU19JTkxJTkUg
UHJvcGVydHlPZmZzZXQgSlNPYmplY3Q6OnByZXBhcmVUb1B1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKFZNJiB2CiAgICAgUHJvcGVydHlPZmZzZXQgcmVzdWx0OwogICAgIHN0cnVjdHVyZS0+YWRk
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywKLSAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAg
ICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewogICAgICAgICAgICAg
dW5zaWduZWQgbmV3T3V0T2ZMaW5lQ2FwYWNpdHkgPSBTdHJ1Y3R1cmU6Om91dE9mTGluZUNhcGFj
aXR5KG5ld01heE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobmV3T3V0T2ZMaW5lQ2FwYWNpdHkg
IT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKICAgICAgICAgICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9mTGluZUNh
cGFjaXR5LCBuZXdPdXRPZkxpbmVDYXBhY2l0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAppbmRleCBlZGE0NDZiZmJlMjY3YWIwMWI4NTJlMTVmZGU5Yzlj
MzBlNmY1OGU2Li5hMDJkY2E5MWIyYzBiNjM0YjllZGI2MzAwYmM4ZWQ4MDNjNzE4MDU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKQEAgLTU1LDEwICs1
NSwxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJ1Y3R1cmUqPiYgbGl2ZVN0cnVjdHVyZVNldCA9ICoo
bmV3IEhhc2hTZXQ8U3RydWN0dXJlKj4pOwogY2xhc3MgU2luZ2xlU2xvdFRyYW5zaXRpb25XZWFr
T3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICB2b2lkIGZpbmFsaXpl
KEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAg
IEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQo
KSk7CiAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSogdGFibGUgPSByZWludGVycHJl
dF9jYXN0PFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSo+KGNvbnRleHQpOwogICAgICAgICBBU1NF
UlQodGFibGUtPmlzVXNpbmdTaW5nbGVTbG90KCkpOwogICAgICAgICBXZWFrU2V0OjpkZWFsbG9j
YXRlKHRhYmxlLT53ZWFrSW1wbCgpKTsKLSAgICAgICAgdGFibGUtPm1fZGF0YSA9IFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZTo6VXNpbmdTaW5nbGVTbG90RmxhZzsKKyAgICAgICAgdGFibGUtPm1f
ZGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpV
c2luZ1NpbmdsZVNsb3RGbGFnKTsKICAgICB9CiB9OwogCkBAIC03MCw2ICs3MSw3IEBAIHN0YXRp
YyBTaW5nbGVTbG90VHJhbnNpdGlvbldlYWtPd25lciYgc2luZ2xlU2xvdFRyYW5zaXRpb25XZWFr
T3duZXIoKQogCiBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OnNp
bmdsZVRyYW5zaXRpb24oKSBjb25zdAogeworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVh
ZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CiAgICAgQVNTRVJUKGlzVXNpbmdTaW5n
bGVTbG90KCkpOwogICAgIGlmIChXZWFrSW1wbCogaW1wbCA9IHRoaXMtPndlYWtJbXBsKCkpIHsK
ICAgICAgICAgaWYgKGltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpCkBAIC04MCwzMyAr
ODIsMzcgQEAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzaW5n
bGVUcmFuc2l0aW9uKCkgY29uc3QKIAogaW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlOjpzZXRTaW5nbGVUcmFuc2l0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlKQogeworICAgIEFT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7
CiAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwogICAgIGlmIChXZWFrSW1wbCogaW1w
bCA9IHRoaXMtPndlYWtJbXBsKCkpCiAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUoaW1wbCk7
CiAgICAgV2Vha0ltcGwqIGltcGwgPSBXZWFrU2V0OjphbGxvY2F0ZShzdHJ1Y3R1cmUsICZzaW5n
bGVTbG90VHJhbnNpdGlvbldlYWtPd25lcigpLCB0aGlzKTsKLSAgICBtX2RhdGEgPSBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KGltcGwpIHwgVXNpbmdTaW5nbGVTbG90RmxhZzsKKyAgICBtX2RhdGEg
PSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oaW1wbCkgfCBV
c2luZ1NpbmdsZVNsb3RGbGFnKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6
OmNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJv
b2wgaXNBZGRpdGlvbikgY29uc3QKIHsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xv
dCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24o
KTsKLSAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9u
UHJvcGVydHlOYW1lID09IHJlcCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlBdHRy
aWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0aW9uLT5pc1Byb3BlcnR5RGVsZXRpb25U
cmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb247CisgICAgICAgIHJldHVybiB0cmFuc2l0aW9uICYm
IHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUoKSA9PSByZXAgJiYgdHJhbnNpdGlv
bi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNp
dGlvbi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbigpID09ICFpc0FkZGl0aW9uOwogICAg
IH0KICAgICByZXR1cm4gbWFwKCktPmdldChTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6
OktleShyZXAsIGF0dHJpYnV0ZXMsIGlzQWRkaXRpb24pKTsKIH0KIAogaW5saW5lIFN0cnVjdHVy
ZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwg
dW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uKSBjb25zdAogeworICAgIEFTU0VS
VCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CiAg
ICAgaWYgKGlzVXNpbmdTaW5nbGVTbG90KCkpIHsKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0
aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwotICAgICAgICByZXR1cm4gKHRyYW5zaXRpb24gJiYg
dHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID09IHJlcCAmJiB0cmFuc2l0aW9u
LT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0
aW9uLT5pc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb24pID8gdHJh
bnNpdGlvbiA6IDA7CisgICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT50
cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Q
cm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0cmFuc2l0aW9uIDogbnVs
bHB0cjsKICAgICB9CiAgICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlOjpIYXNoOjpLZXkocmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CiB9CiAKIHZvaWQg
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKIHsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlC
ZUdDVGhyZWFkKCkpOwogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAgIFN0
cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwogCkBAIC0x
MjMsNyArMTI5LDcgQEAgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZChWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIH0KIAogICAgIC8vIEFkZCB0aGUgc3RydWN0dXJl
IHRvIHRoZSBtYXAuCi0gICAgbWFwKCktPnNldChTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhh
c2g6OktleShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0
dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCksICFzdHJ1Y3R1cmUtPmlzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVyZSk7CisgICAgbWFwKCktPnNldChTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6OktleShzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCksICFz
dHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVyZSk7CiB9
CiAKIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCkBAIC0xNTEsNyArMTU3LDcgQEAg
dm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVy
ZS0+cHJvcGVydHlUYWJsZU9yTnVsbCgpKSB7CisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0
YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKSB7CiAgICAgICAg
ICAgICArK251bWJlcldpdGhQcm9wZXJ0eU1hcHM7CiAgICAgICAgICAgICB0b3RhbFByb3BlcnR5
TWFwc1NpemUgKz0gdGFibGUtPnNpemVJbk1lbW9yeSgpOwogICAgICAgICB9CkBAIC0xNzQsMTUg
KzE4MCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogU3RydWN0dXJlOjpT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkp
CiAgICAgOiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1f
YmxvYih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCBpbmRleGlu
Z1R5cGUsIHR5cGVJbmZvKQotICAgICwgbV9vdXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8ub3V0
T2ZMaW5lVHlwZUZsYWdzKCkpCi0gICAgLCBtX2lubGluZUNhcGFjaXR5KGlubGluZUNhcGFjaXR5
KQotICAgICwgbV9iaXRGaWVsZCgwKQogICAgICwgbV9nbG9iYWxPYmplY3Qodm0sIHRoaXMsIGds
b2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQogICAg
ICwgbV9wcm90b3R5cGUodm0sIHRoaXMsIHByb3RvdHlwZSkKLSAgICAsIG1fY2xhc3NJbmZvKGNs
YXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQotICAg
ICwgbV9wcm9wZXJ0eUhhc2goMCkKIHsKKyAgICBzZXRJbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBh
Y2l0eSk7CisgICAgc2V0Q2xhc3NJbmZvKGNsYXNzSW5mbyk7CiAgICAgc2V0RGljdGlvbmFyeUtp
bmQoTm9uZURpY3Rpb25hcnlLaW5kKTsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUoZmFs
c2UpOwogICAgIHNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXMoY2xhc3NJbmZvLT5oYXNTdGF0
aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKQEAgLTIwMCwzMSArMjAzLDMwIEBAIFN0
cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUsIGNvCiAgICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlv
bihmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAg
ICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKLSAKKyAgICBzZXRPdXRPZkxpbmVU
eXBlRmxhZ3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpOworCiAgICAgQVNTRVJUKGlu
bGluZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4oaW5saW5lQ2FwYWNpdHkpIDwgZmly
c3RPdXRPZkxpbmVPZmZzZXQpOwogICAgIEFTU0VSVCghaGFzUmFyZURhdGEoKSk7Ci0gICAgQVNT
RVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8
fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwot
ICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwgIW1fY2xhc3NJbmZvLT5o
YXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NFUlQoIXRoaXMt
PnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBtX2NsYXNzSW5mby0+bWV0aG9k
VGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEpOworICAgIEFTU0VSVCho
YXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIXRo
aXMtPmNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsK
KyAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICF0aGlzLT5jbGFzc0lu
Zm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJU
KCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgdGhpcy0+Y2xhc3NJ
bmZvKCktPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsK
IH0KIAogY29uc3QgQ2xhc3NJbmZvIFN0cnVjdHVyZTo6c19pbmZvID0geyAiU3RydWN0dXJlIiwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShTdHJ1Y3R1cmUp
IH07CiAKIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAgICA6IEpTQ2VsbChDcmVhdGlu
Z0Vhcmx5Q2VsbCkKLSAgICAsIG1faW5saW5lQ2FwYWNpdHkoMCkKLSAgICAsIG1fYml0RmllbGQo
MCkKICAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBqc051bGwoKSkKLSAgICAsIG1fY2xhc3NJ
bmZvKGluZm8oKSkKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQot
ICAgICwgbV9wcm9wZXJ0eUhhc2goMCkKIHsKKyAgICBzZXRJbmxpbmVDYXBhY2l0eSgwKTsKKyAg
ICBzZXRDbGFzc0luZm8oaW5mbygpKTsKICAgICBzZXREaWN0aW9uYXJ5S2luZChOb25lRGljdGlv
bmFyeUtpbmQpOwogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZShmYWxzZSk7Ci0gICAgc2V0
SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JS
ZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhj
bGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CiAgICAg
c2V0SGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcyhmYWxzZSk7Ci0gICAgc2V0SGFzUmVh
ZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhtX2NsYXNzSW5mby0+
aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgc2V0SGFzUmVhZE9u
bHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhjbGFzc0luZm8oKS0+aGFz
U3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CiAgICAgc2V0SGFzVW5kZXJzY29y
ZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKGZhbHNlKTsKICAgICBzZXRJc1F1
aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24odHJ1ZSk7CiAgICAgc2V0VHJh
bnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygwKTsKQEAgLTI0MCwyMyArMjQyLDI2IEBAIFN0cnVj
dHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAKICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyk7CiAgICAgbV9ibG9iID0gU3RydWN0dXJlSURC
bG9iKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQodGhpcyksIDAsIHR5cGVJ
bmZvKTsKLSAgICBtX291dE9mTGluZVR5cGVGbGFncyA9IHR5cGVJbmZvLm91dE9mTGluZVR5cGVG
bGFncygpOworICAgIHNldE91dE9mTGluZVR5cGVGbGFncyh0eXBlSW5mby5vdXRPZkxpbmVUeXBl
RmxhZ3MoKSk7CiAKLSAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRp
ZXNFeGNsdWRpbmdQcm90bygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFk
b25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMo
KSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkp
OwotICAgIEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8
IG1fY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxs
RGF0YSk7CisgICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhj
bHVkaW5nUHJvdG8oKSB8fCAhY2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQ
cm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwg
IWNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKKyAg
ICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBjbGFz
c0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEp
OwogfQogCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMs
IERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKICAg
ICA6IEpTQ2VsbCh2bSwgdm0uc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9pbmxp
bmVDYXBhY2l0eShwcmV2aW91cy0+bV9pbmxpbmVDYXBhY2l0eSkKLSAgICAsIG1fYml0RmllbGQo
MCkKLSAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBwcmV2aW91cy0+bV9wcm90b3R5cGUuZ2V0
KCkpCi0gICAgLCBtX2NsYXNzSW5mbyhwcmV2aW91cy0+bV9jbGFzc0luZm8pCi0gICAgLCBtX3Ry
YW5zaXRpb25XYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKKyNpZiBDUFUoQUREUkVTUzY0KQorICAg
ICwgbV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydGllcyhwcmV2aW91cy0+bV9wcm9wZXJ0eUhh
c2hBbmRTZWVuUHJvcGVydGllcykKKyNlbHNlCiAgICAgLCBtX3Byb3BlcnR5SGFzaChwcmV2aW91
cy0+bV9wcm9wZXJ0eUhhc2gpCiAgICAgLCBtX3NlZW5Qcm9wZXJ0aWVzKHByZXZpb3VzLT5tX3Nl
ZW5Qcm9wZXJ0aWVzKQorI2VuZGlmCisgICAgLCBtX3Byb3RvdHlwZSh2bSwgdGhpcywgcHJldmlv
dXMtPm1fcHJvdG90eXBlLmdldCgpKQorICAgICwgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldChJ
c1dhdGNoZWQpCiB7CisgICAgc2V0SW5saW5lQ2FwYWNpdHkocHJldmlvdXMtPmlubGluZUNhcGFj
aXR5KCkpOworICAgIHNldENsYXNzSW5mbyhwcmV2aW91cy0+Y2xhc3NJbmZvKCkpOwogICAgIHNl
dERpY3Rpb25hcnlLaW5kKHByZXZpb3VzLT5kaWN0aW9uYXJ5S2luZCgpKTsKICAgICBzZXRJc1Bp
bm5lZFByb3BlcnR5VGFibGUoZmFsc2UpOwogICAgIHNldEhhc0JlZW5GbGF0dGVuZWRCZWZvcmUo
cHJldmlvdXMtPmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUoKSk7CkBAIC0yNzcsNyArMjgyLDcgQEAg
U3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJl
ZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQKICAKICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHByZXZp
b3VzLT50eXBlSW5mbygpOwogICAgIG1fYmxvYiA9IFN0cnVjdHVyZUlEQmxvYih2bS5oZWFwLnN0
cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCBwcmV2aW91cy0+aW5kZXhpbmdNb2Rl
SW5jbHVkaW5nSGlzdG9yeSgpLCB0eXBlSW5mbyk7Ci0gICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3Mg
PSB0eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxhZ3MoKTsKKyAgICBzZXRPdXRPZkxpbmVUeXBlRmxh
Z3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpOwogCiAgICAgQVNTRVJUKCFwcmV2aW91
cy0+dHlwZUluZm8oKS5zdHJ1Y3R1cmVJc0ltbW9ydGFsKCkpOwogICAgIHNldFByZXZpb3VzSUQo
dm0sIHByZXZpb3VzKTsKQEAgLTI4OSw5ICsyOTQsOSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShW
TSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldh
dAogCiAgICAgaWYgKHByZXZpb3VzLT5tX2dsb2JhbE9iamVjdCkKICAgICAgICAgbV9nbG9iYWxP
YmplY3Quc2V0KHZtLCB0aGlzLCBwcmV2aW91cy0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpOwotICAg
IEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3Rv
KCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygp
KTsKLSAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFtX2NsYXNzSW5m
by0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKCF0
aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgbV9jbGFzc0luZm8tPm1l
dGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKKyAgICBBU1NF
UlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8
ICFjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Cisg
ICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB8fCAhY2xhc3NJbmZvKCktPmhh
c1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVCghdGhpcy0+
dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8IGNsYXNzSW5mbygpLT5tZXRob2RU
YWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CiB9CiAKIFN0cnVjdHVy
ZTo6flN0cnVjdHVyZSgpCkBAIC0zMTMsNyArMzE4LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmNyZWF0ZShQb2x5UHJvdG9UYWcsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwKICAgICB1bnNpZ25lZCBvbGRPdXRPZkxpbmVDYXBhY2l0eSA9IHJlc3VsdC0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKICAgICByZXN1bHQtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCiAg
ICAgICAgIHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wb2x5UHJvdG9OYW1l
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLAot
ICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIFsmXSAo
Y29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChTdHJ1Y3R1cmU6Om91dE9mTGluZUNhcGFjaXR5KG5ld01heE9mZnNldCkgPT0gb2xkT3V0
T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09IGtu
b3duUG9seVByb3RvT2Zmc2V0KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW5saW5l
T2Zmc2V0KGtub3duUG9seVByb3RvT2Zmc2V0KSk7CkBAIC0zMjksMjMgKzMzNCwyMyBAQCBib29s
IFN0cnVjdHVyZTo6aXNWYWxpZFByb3RvdHlwZShKU1ZhbHVlIHByb3RvdHlwZSkKICAgICByZXR1
cm4gcHJvdG90eXBlLmlzTnVsbCgpIHx8IChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBwcm90b3R5
cGUuZ2V0T2JqZWN0KCktPm1heUJlUHJvdG90eXBlKCkpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6
ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oVmVjdG9yPFN0cnVjdHVyZSos
IDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIFByb3BlcnR5VGFibGUqJiB0
YWJsZSkKK3ZvaWQgU3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXph
dGlvbihWZWN0b3I8c3RkOjpwYWlyPFN0cnVjdHVyZSosIFVuaXF1ZWRTdHJpbmdJbXBsKj4sIDg+
JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIFByb3BlcnR5VGFibGUqJiB0YWJs
ZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlcy5pc0VtcHR5KCkpOwotICAgIHRhYmxlID0gMDsK
KyAgICB0YWJsZSA9IG51bGxwdHI7CiAKICAgICBmb3IgKHN0cnVjdHVyZSA9IHRoaXM7IHN0cnVj
dHVyZTsgc3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpIHsKLSAgICAgICAgc3Ry
dWN0dXJlLT5tX2xvY2subG9jaygpOworICAgICAgICBzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkubG9j
aygpOwogICAgICAgICAKLSAgICAgICAgdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVP
ck51bGwoKTsKKyAgICAgICAgdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVVbnNhZmVP
ck51bGwoKTsKICAgICAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgICAgICAvLyBMZWF2ZSB0aGUg
c3RydWN0dXJlIGxvY2tlZCwgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBkbyB0aGluZ3MgdG8gaXQg
YXRvbWljYWxseQogICAgICAgICAgICAgLy8gYmVmb3JlIGl0IGxvc2VzIGl0cyBwcm9wZXJ0eSB0
YWJsZS4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
c3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKLSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2su
dW5sb2NrKCk7CisgICAgICAgIHN0cnVjdHVyZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHN0cnVj
dHVyZSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlOYW1lQ29uY3VycmVudGx5KCkpKTsK
KyAgICAgICAgc3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwogICAgIH0KICAgICAKICAg
ICBBU1NFUlQoIXN0cnVjdHVyZSk7CkBAIC0zNTksMzggKzM2NCwzOSBAQCBQcm9wZXJ0eVRhYmxl
KiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0UHJv
cGVydHlUYWJsZQogICAgIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKLSAg
ICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKKyAgICBWZWN0b3I8c3RkOjpwYWly
PFN0cnVjdHVyZSosIFVuaXF1ZWRTdHJpbmdJbXBsKj4sIDg+IHN0cnVjdHVyZXM7CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmU7CiAgICAgUHJvcGVydHlUYWJsZSogdGFibGU7CiAgICAgCiAgICAg
ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oc3RydWN0dXJlcywgc3RydWN0
dXJlLCB0YWJsZSk7CiAgICAgCi0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBudW1iZXJPZlNsb3Rz
Rm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBtX2lubGluZUNhcGFjaXR5KTsKKyAgICB1bnNpZ25l
ZCBjYXBhY2l0eSA9IG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIGlubGlu
ZUNhcGFjaXR5KCkpOwogICAgIGlmICh0YWJsZSkgewogICAgICAgICB0YWJsZSA9IHRhYmxlLT5j
b3B5KHZtLCBjYXBhY2l0eSk7Ci0gICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwor
ICAgICAgICBzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHRhYmxlID0gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSk7CiAgICAgCiAg
ICAgLy8gTXVzdCBob2xkIHRoZSBsb2NrIG9uIHRoaXMgc3RydWN0dXJlLCBzaW5jZSB3ZSB3aWxs
IGJlIG1vZGlmeWluZyB0aGlzIHN0cnVjdHVyZSdzCiAgICAgLy8gcHJvcGVydHkgbWFwLiBXZSBk
b24ndCB3YW50IGdldENvbmN1cnJlbnRseSgpIHRvIHNlZSB0aGUgcHJvcGVydHkgbWFwIGluIGEg
aGFsZi1iYWtlZAogICAgIC8vIHN0YXRlLgotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2Vy
IGxvY2tlcihjZWxsTG9jaygpLCB2bS5oZWFwKTsKICAgICBpZiAoc2V0UHJvcGVydHlUYWJsZSkK
ICAgICAgICAgdGhpcy0+c2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOwogCiAgICAgZm9yIChz
aXplX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZXNbaV07Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUpCisgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV0uZmlyc3Q7CisgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB0cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gc3RydWN0dXJl
LT50cmFuc2l0aW9uUHJvcGVydHlOYW1lKCk7CisgICAgICAgIGlmICghdHJhbnNpdGlvblByb3Bl
cnR5TmFtZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgIGF1dG8gaXRlbSA9
IHRhYmxlLT5maW5kKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpKTsK
KyAgICAgICAgICAgIGF1dG8gaXRlbSA9IHRhYmxlLT5maW5kKHRyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgQVNTRVJUKGl0ZW0uZmlyc3QpOwogICAgICAgICAgICAgdGFibGUt
PnJlbW92ZShpdGVtKTsKICAgICAgICAgICAgIHRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KHN0cnVj
dHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9Ci0gICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpLCBzdHJ1
Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSk7CisgICAgICAgIFByb3BlcnR5
TWFwRW50cnkgZW50cnkodHJhbnNpdGlvblByb3BlcnR5TmFtZSwgc3RydWN0dXJlLT50cmFuc2l0
aW9uT2Zmc2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpKTsK
ICAgICAgICAgYXV0byBuZXh0T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0T2Zmc2V0LCBuZXh0
T2Zmc2V0ID09IHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKICAgICAgICAgYXV0byBy
ZXN1bHQgPSB0YWJsZS0+YWRkKGVudHJ5KTsKQEAgLTQwNSw4ICs0MTEsOCBAQCBQcm9wZXJ0eVRh
YmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0
UHJvcGVydHlUYWJsZQogICAgICAgICAgICAgZGF0YUxvZygiRm91bmQgc3RydWN0dXJlID0gIiwg
UmF3UG9pbnRlcihzdHJ1Y3R1cmUpLCAiXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coInN0cnVj
dHVyZXMgPSAiKTsKICAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAgICAgICAg
IGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiBzdHJ1Y3R1cmVzKQotICAgICAgICAgICAgICAg
IGRhdGFMb2coY29tbWEsIFJhd1BvaW50ZXIoc3RydWN0dXJlKSk7CisgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBzdHJ1Y3R1cmVzKQorICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEs
IFJhd1BvaW50ZXIocGFpci5maXJzdCkpOwogICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKICAg
ICAgICAgfSk7CiAgICAgCkBAIC00MjUsNyArNDMxLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVjdHVyZSog
c3QKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAgICB9CiAKLSAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3Bl
cnR5T2Zmc2V0JiBvZmZzZXQpCkBAIC00MzYsNyArNDQyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBz
dHJ1Y3QKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZz
ZXQpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7
CisgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5jZWxsTG9jaygp
KTsKICAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUlt
cGwoc3RydWN0dXJlLCB1aWQsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9CiAKQEAgLTQ5Nyw4ICs1
MDMsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBybwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwotCi0gICAg
dHJhbnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXRNYXlCZU51bGwodm0sIHRyYW5z
aXRpb24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSk7CisgICAgdHJh
bnNpdGlvbi0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4odm0sIHN0cnVjdHVyZS0+Y2FjaGVkUHJv
dG90eXBlQ2hhaW4oKSk7CiAgICAgCiAgICAgLy8gV2hpbGUgd2UgYXJlIGFkZGluZyB0aGUgcHJv
cGVydHksIHJlbWF0ZXJpYWxpemluZyB0aGUgcHJvcGVydHkgdGFibGUgaXMgc3VwZXIgd2VpcmQ6
IHdlIGFscmVhZHkKICAgICAvLyBoYXZlIGEgbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lIGFuZCB0
cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIGJ1dCB0aGUgbV90cmFuc2l0aW9uT2Zmc2V0IGlz
IHN0aWxsIHdyb25nLiBJZiB0aGUKQEAgLTUxMCwxMiArNTE1LDEyIEBAIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvCiAgICAgLy8gY2FzZSBhbGwgaXMgd2VsbC4gIElmIGl0IHdhc24ndCBmb3IgdGhl
IGxvY2ssIHRoZSBHQyB3b3VsZCBoYXZlIFRPQ1RPVTogaWYgY291bGQgcmVhZAogICAgIC8vIHBy
b3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nIGJlZm9yZSB3ZSBzZXQgaXQgdG8g
dHJ1ZSwgYW5kIHRoZW4gYmxvdyB0aGUgdGFibGUgYXdheSBhZnRlci4KICAgICB7Ci0gICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAgICAgICAg
Q29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2soKSk7CiAg
ICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9u
aW5nKHRydWUpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1l
KGxvY2tlciwgcHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICB9CiAKICAgICB0cmFuc2l0aW9uLT5t
X2Jsb2Iuc2V0SW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmluZGV4aW5n
TW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7Ci0gICAgdHJhbnNpdGlvbi0+
bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5z
aXRpb24tPnNldFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAg
dHJhbnNpdGlvbi0+c2V0UHJvcGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlU
YWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2
bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CkBAIC01MzAsNyArNTM1LDcgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm8KIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPnRyYW5zaXRpb25P
ZmZzZXQoKSwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgewotICAgICAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrLCB2bS5oZWFw
KTsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJl
LT5jZWxsTG9jaygpLCB2bS5oZWFwKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25U
YWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7CkBAIC01ODcsMTYgKzU5MiwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsCiAgICAgfQogCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBz
dHJ1Y3R1cmUsIGRlZmVycmVkKTsKLSAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNo
YWluLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3Rv
dHlwZUNoYWluLmdldCgpKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFp
bih2bSwgc3RydWN0dXJlLT5jYWNoZWRQcm90b3R5cGVDaGFpbigpKTsKIAogICAgIC8vIFdoaWxl
IHdlIGFyZSBkZWxldGluZyB0aGUgcHJvcGVydHksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0
YWJsZSBpcyBub3QgY2xlYXJlZC4KICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpTQ2VsbExvY2tl
ciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2soKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNl
dFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKHRydWUpOworICAgICAgICB0
cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGxvY2tlciwgcHJvcGVydHlOYW1l
LnVpZCgpKTsKICAgICB9CiAKICAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdNb2Rl
SW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnko
KSAmIH5Db3B5T25Xcml0ZSk7Ci0gICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlO
YW1lID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFi
bGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsK
ICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkp
OwogICAgIHRyYW5zaXRpb24tPnNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24odHJ1ZSk7
CkBAIC02MTIsNyArNjE3LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZU5ld1Byb3Bl
cnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLAogCiAgICAgY2hlY2tP
ZmZzZXQodHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCB0cmFuc2l0aW9uLT5pbmxpbmVD
YXBhY2l0eSgpKTsKICAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoc3RydWN0dXJlLT5tX2xvY2ssIHZtLmhlYXApOworICAgICAgICBHQ1NhZmVDb25jdXJyZW50
SlNDZWxsTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNlbGxMb2NrKCksIHZtLmhlYXApOwogICAg
ICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFkZCh2bSwgdHJhbnNpdGlvbik7CiAg
ICAgfQogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKQEAgLTYzMCw3
ICs2MzUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKUwogICAgIHRyYW5zaXRpb24tPm1fcHJv
dG90eXBlLnNldCh2bSwgdHJhbnNpdGlvbiwgcHJvdG90eXBlKTsKIAogICAgIFByb3BlcnR5VGFi
bGUqIHRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwot
ICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFi
bGUpOworICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxsTG9jaygp
KSwgdm0sIHRhYmxlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVy
ZS0+bWF4T2Zmc2V0KCkpOwogICAgIAogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKTsKQEAgLTY0Myw3ICs2NDgsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmli
dXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcgogICAg
ICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKICAg
ICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0
aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExv
Y2sodHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgICAgIHRyYW5zaXRp
b24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAgICAgICAgIAog
ICAgICAgICBzdHJ1Y3R1cmUgPSB0cmFuc2l0aW9uOwpAQCAtNjY1LDcgKzY3MCw3IEBAIFN0cnVj
dHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIERpY3RpCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZt
LCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3Ry
dWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgIHRyYW5zaXRpb24t
PnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgIHRyYW5z
aXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0sIHRhYmxlKTsK
ICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkp
OwogICAgIHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlLaW5kKGtpbmQpOwogICAgIHRyYW5zaXRp
b24tPnNldEhhc0JlZW5EaWN0aW9uYXJ5KHRydWUpOwpAQCAtNzAyLDExICs3MDcsMTEgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVy
dHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYgdm0pCiB7CiAgICAgLy8gVGhpcyBtdXN0IGFsd2F5
cyByZXR1cm4gYSBwcm9wZXJ0eSB0YWJsZS4gSXQgY2FuJ3QgcmV0dXJuIG51bGwuCi0gICAgUHJv
cGVydHlUYWJsZSogcmVzdWx0ID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgIFByb3BlcnR5
VGFibGUqIHJlc3VsdCA9IHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKTsKICAgICBpZiAocmVz
dWx0KSB7CiAgICAgICAgIGlmIChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQtPmNvcHkodm0sIHJlc3VsdC0+c2l6ZSgpICsgMSk7Ci0gICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpTQ2Vs
bExvY2tlciBsb2NrZXIoY2VsbExvY2soKSk7CiAgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0s
IG51bGxwdHIpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTc0MywxMCArNzQ4
LDEwIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb25TbG93KFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vCiAgICAgICAgIC8vIHRhYmxlIGRvZXNuJ3Qg
a25vdyBob3cgdG8gdGFrZSBpbnRvIGFjY291bnQgc3VjaCB3aG9sZXNhbGUgZWRpdHMuCiAKICAg
ICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbkZvckNhY2hpbmcoaG9sZExv
Y2sodHJhbnNpdGlvbi0+bV9sb2NrKSwgdm0sIHRhYmxlKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+
cGluRm9yQ2FjaGluZyhob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0sIHRhYmxl
KTsKICAgICAgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPm1heE9m
ZnNldCgpKTsKICAgICAgICAgCi0gICAgICAgIHRhYmxlID0gdHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZU9yTnVsbCgpOworICAgICAgICB0YWJsZSA9IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVV
bnNhZmVPck51bGwoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFibGUpOwogICAgICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogKnRhYmxlKSB7CiAgICAgICAgICAgICBpZiAoc2V0c0RvbnREZWxl
dGVPbkFsbFByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpKQpAQCAtNzYxLDE0ICs3NjYsMTQgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm8KICAgICB9CiAgICAgCiAgICAgaWYgKHNldHNSZWFkT25s
eU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKQotICAgICAgICAmJiAhdHJh
bnNpdGlvbi0+cHJvcGVydHlUYWJsZU9yTnVsbCgpLT5pc0VtcHR5KCkpCisgICAgICAgICYmICF0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCktPmlzRW1wdHkoKSkKICAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNs
dWRpbmdQcm90byh0cnVlKTsKICAgICAKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSkgewogICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHRyYW5zaXRpb24tPmVuc3VyZVBy
b3BlcnR5VGFibGUodm0pOwotICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNp
dGlvbi0+bV9sb2NrKSwgdm0sIHRhYmxlKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRM
b2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc3RydWN0dXJlLT5tX2xvY2spOworICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHN0cnVjdHVyZS0+Y2VsbExvY2soKSk7CiAgICAgICAg
IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB9
CiAKQEAgLTgyMCwxNCArODI1LDE0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGlj
dGlvbmFyeVN0cnVjdHVyZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgQVNTRVJUKGlz
RGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQob2JqZWN0LT5zdHJ1Y3R1cmUodm0pID09IHRoaXMp
OwogICAgIAotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5o
ZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygp
LCB2bS5oZWFwKTsKICAgICAKICAgICBvYmplY3QtPnNldFN0cnVjdHVyZUlERGlyZWN0bHkobnVr
ZShpZCgpKSk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKIAogICAgIHNpemVfdCBiZWZv
cmVPdXRPZkxpbmVDYXBhY2l0eSA9IHRoaXMtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYg
KGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxl
ID0gcHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgICAgICBBU1NFUlQodGFibGUpOwog
CiAgICAgICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gdGFibGUtPnNpemUoKTsKQEAgLTg0MSwx
NCArODQ2LDE0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGF1dG8gb2Zmc2V0ID0gaW52
YWxpZE9mZnNldDsKICAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0g
dGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIsICsraSkgewogICAgICAgICAgICAg
dmFsdWVzW2ldID0gb2JqZWN0LT5nZXREaXJlY3QoaXRlci0+b2Zmc2V0KTsKLSAgICAgICAgICAg
IG9mZnNldCA9IGl0ZXItPm9mZnNldCA9IG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5s
aW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgb2Zmc2V0ID0gaXRlci0+b2Zmc2V0ID0gb2Zmc2V0
Rm9yUHJvcGVydHlOdW1iZXIoaSwgaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgc2V0TWF4T2Zmc2V0KHZtLCBvZmZzZXQpOwogICAgICAgICBBU1NFUlQodHJhbnNpdGlvbk9m
ZnNldCgpID09IGludmFsaWRPZmZzZXQpOwogICAgICAgICAKICAgICAgICAgLy8gQ29waWVzIGlu
IG91ciB2YWx1ZXMgdG8gdGhlaXIgY29tcGFjdGVkIGxvY2F0aW9ucy4KICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7IGkrKykKLSAgICAgICAgICAgIG9iamVj
dC0+cHV0RGlyZWN0KHZtLCBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBtX2lubGluZUNhcGFj
aXR5KSwgdmFsdWVzW2ldKTsKKyAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBvZmZz
ZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBpbmxpbmVDYXBhY2l0eSgpKSwgdmFsdWVzW2ldKTsKIAog
ICAgICAgICB0YWJsZS0+Y2xlYXJEZWxldGVkT2Zmc2V0cygpOwogCkBAIC04OTQsMTkgKzg5OSwx
OSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoVk0m
IHZtLCBKU09iamVjdCogb2JqZWN0KQogICAgIHJldHVybiB0aGlzOwogfQogCi12b2lkIFN0cnVj
dHVyZTo6cGluKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0
YWJsZSkKK3ZvaWQgU3RydWN0dXJlOjpwaW4oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwg
Vk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5
VGFibGUodHJ1ZSk7CiAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOwogICAgIGNsZWFy
UHJldmlvdXNJRCgpOwotICAgIG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9IG51bGxwdHI7Cisg
ICAgc2V0VHJhbnNpdGlvblByb3BlcnR5TmFtZShsb2NrZXIsIG51bGxwdHIpOwogfQogCi12b2lk
IFN0cnVjdHVyZTo6cGluRm9yQ2FjaGluZyhjb25zdCBBYnN0cmFjdExvY2tlciYsIFZNJiB2bSwg
UHJvcGVydHlUYWJsZSogdGFibGUpCit2b2lkIFN0cnVjdHVyZTo6cGluRm9yQ2FjaGluZyhjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQog
ewogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZSh0cnVlKTsKICAgICBzZXRQcm9wZXJ0eVRh
YmxlKHZtLCB0YWJsZSk7Ci0gICAgbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gbnVsbHB0cjsK
KyAgICBzZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGxvY2tlciwgbnVsbHB0cik7CiB9CiAKIHZv
aWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKFZNJiB2bSkKQEAgLTkxNCw3ICs5MTksMTIg
QEAgdm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoVk0mIHZtKQogICAgIEFTU0VSVCgh
aGFzUmFyZURhdGEoKSk7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gU3RydWN0
dXJlUmFyZURhdGE6OmNyZWF0ZSh2bSwgcHJldmlvdXNJRCgpKTsKICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworI2lmIENQVShBRERSRVNTNjQpCisgICAgbV9pbmxpbmVDYXBhY2l0eUFuZFBy
ZXZpb3VzT3JSYXJlRGF0YS5zZXRQb2ludGVyKHJhcmVEYXRhKTsKKyAgICB2bS5oZWFwLndyaXRl
QmFycmllcih0aGlzLCByYXJlRGF0YSk7CisjZWxzZQogICAgIG1fcHJldmlvdXNPclJhcmVEYXRh
LnNldCh2bSwgdGhpcywgcmFyZURhdGEpOworI2VuZGlmCiAgICAgQVNTRVJUKGhhc1JhcmVEYXRh
KCkpOwogfQogCkBAIC05MjgsNyArOTM4LDcgQEAgV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjpl
bnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChWTSYgdm0sIFByb3BlcnQKICAg
ICAKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCiAgICAgICAgIGFsbG9jYXRlUmFyZURhdGEodm0p
OwotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBDb25jdXJyZW50
SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygpKTsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSog
cmFyZURhdGEgPSB0aGlzLT5yYXJlRGF0YSgpOwogICAgIGlmICghcmFyZURhdGEtPm1fcmVwbGFj
ZW1lbnRXYXRjaHBvaW50U2V0cykgewogICAgICAgICByYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdh
dGNocG9pbnRTZXRzID0KQEAgLTk5OCw3ICsxMDA4LDcgQEAgUHJvcGVydHlNYXBTdGF0aXN0aWNz
RXhpdExvZ2dlcjo6flByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXIoKQogCiBQcm9wZXJ0
eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYgdm0pCiB7
Ci0gICAgaWYgKFByb3BlcnR5VGFibGUqIHRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpKQor
ICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwo
KSkKICAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqdGFibGUpOwogICAg
IGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IGZhbHNlOwogICAgIHJldHVybiBtYXRlcmlhbGl6ZVBy
b3BlcnR5VGFibGUodm0sIHNldFByb3BlcnR5VGFibGUpOwpAQCAtMTAzOCwxNCArMTA0OCwxNCBA
QCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYgogewogICAgIHJldHVybiBhZGQ8U2hvdWxkUGluOjpO
bz4oCiAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCi0gICAgICAgIFt0aGlz
LCAmdm1dIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwg
UHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIFt0aGlzLCAmdm1dKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlP
ZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAgICBzZXRNYXhPZmZzZXQodm0sIG5ld01h
eE9mZnNldCk7CiAgICAgICAgIH0pOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJl
bW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHJl
bW92ZTxTaG91bGRQaW46Ok5vPih2bSwgcHJvcGVydHlOYW1lLCBbdGhpcywgJnZtXSAoY29uc3Qg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0
IG5ld01heE9mZnNldCkgeworICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpObz4odm0sIHBy
b3BlcnR5TmFtZSwgW3RoaXMsICZ2bV0oY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tl
ciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKICAgICAg
ICAgc2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQpOwogICAgIH0pOwogfQpAQCAtMTExNiwy
NSArMTEyNiwyMSBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKICAgICAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRoaXNP
YmplY3QtPm1fbG9jayk7CisgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIodGhpc09i
amVjdC0+Y2VsbExvY2soKSk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9nbG9iYWxPYmplY3QpOwotICAgIGlmICghdGhpc09iamVjdC0+aXNPYmplY3QoKSkKLSAgICAg
ICAgdGhpc09iamVjdC0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5jbGVhcigpOwotICAgIGVsc2Ug
ewotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3RvdHlwZSk7Ci0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwot
ICAgIH0KLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0
YSk7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm90b3R5cGUpOworICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4o
KSk7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzT2JqZWN0LT5wcmV2aW91c09y
UmFyZURhdGEoKSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNQaW5uZWRQcm9wZXJ0eVRhYmxl
KCkgfHwgdGhpc09iamVjdC0+cHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmco
KSkgewogICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigpLCBpbiB3
aGljaCBjYXNlIGl0IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAvLyBU
aGF0J3MgZmluZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2ls
bCBzY2FuIHRoaXMgYWdhaW4uCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZVVuc2FmZSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
dGhpc09iamVjdC0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKTsKICAgICB9IGVsc2UgaWYg
KHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7Ci0gICAgZWxzZSBpZiAodGhpc09iamVjdC0+
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQotICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUuY2xlYXIoKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlz
T2JqZWN0LT5wcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkpOworICAgIGVsc2UgaWYgKHRoaXNP
YmplY3QtPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkKKyAgICAgICAgdGhpc09iamVjdC0+
Y2xlYXJQcm9wZXJ0eVRhYmxlKCk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5n
R0MoVk0mIHZtKQpAQCAtMTI5MCw3ICsxMjk2LDcgQEAgYm9vbCBTdHJ1Y3R1cmU6OmNhbkNhY2hl
UHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0pIGNvbnN0CiAgICAgaWYgKCF0aGlzLT5jYW5D
YWNoZU93bktleXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RydWN0dXJlQ2hh
aW4qIHN0cnVjdHVyZUNoYWluID0gbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKTsKKyAgICBT
dHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4gPSBjYWNoZWRQcm90b3R5cGVDaGFpbigpOwog
ICAgIEFTU0VSVChzdHJ1Y3R1cmVDaGFpbik7CiAgICAgU3RydWN0dXJlSUQqIGN1cnJlbnRTdHJ1
Y3R1cmVJRCA9IHN0cnVjdHVyZUNoYWluLT5oZWFkKCk7CiAgICAgd2hpbGUgKHRydWUpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKaW5kZXggNTJjZDNjNzFkOTIw
ZjJmOGE5N2I0NjBiOTBlMGVjNzBkNWQ3MTFhZi4uMTJlNzY0OTA3MjZkODg5MTZmMzY5ZDJiMDIx
NWIyNjU5NzQzODUyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJUaW55Qmxvb21GaWx0ZXIuaCIKICNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVySW5saW5lcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMjU4LDkgKzI1OSwxOCBAQCBjbGFzcyBTdHJ1
Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBl
SW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlKCk7CiAgICAgfQorCisgICAgVHlwZUlu
Zm86Ok91dE9mTGluZVR5cGVGbGFncyBvdXRPZkxpbmVUeXBlRmxhZ3MoKSBjb25zdAorICAgIHsK
KyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gbV9vdXRPZkxpbmVUeXBlRmxhZ3NB
bmRQcm9wZXJ0eVRhYmxlVW5zYWZlLnR5cGUoKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX291
dE9mTGluZVR5cGVGbGFnczsKKyNlbmRpZgorICAgIH0KICAgICAKICAgICAvLyBUeXBlIGFjY2Vz
c29ycy4KLSAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi50eXBl
SW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KKyAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhvdXRPZkxpbmVUeXBlRmxhZ3MoKSk7IH0KICAg
ICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9
CiAKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ibG9i
LmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIEFsbFdyaXRhYmxlQXJyYXlUeXBlczsg
fQpAQCAtMzE1LDI0ICszMjUsMjQgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7CiAgICAgCiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gaXNSYXJlRGF0YShtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CisgICAgICAg
IHJldHVybiBpc1JhcmVEYXRhKHByZXZpb3VzT3JSYXJlRGF0YSgpKTsKICAgICB9CiAKICAgICBT
dHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Jh
cmVEYXRhKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEq
PihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KHByZXZpb3VzT3JSYXJlRGF0YSgpKTsKICAgICB9CiAKICAg
ICBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgU3RydWN0dXJlUmFyZURhdGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSo+KHByZXZpb3Vz
T3JSYXJlRGF0YSgpKTsKICAgICB9CiAKICAgICBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFy
ZURhdGFDb25jdXJyZW50bHkoKSBjb25zdAogICAgIHsKLSAgICAgICAgSlNDZWxsKiBjZWxsID0g
bV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCk7CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHByZXZp
b3VzT3JSYXJlRGF0YSgpOwogICAgICAgICBpZiAoaXNSYXJlRGF0YShjZWxsKSkKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTM0OCw5ICszNTgsOSBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzSUQoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkp
OwotICAgICAgICAvLyBUaGlzIGlzIHNvIHdyaXR0ZW4gYmVjYXVzZSBpdCdzIHVzZWQgY29uY3Vy
cmVudGx5LiBXZSBvbmx5IGxvYWQgZnJvbSBtX3ByZXZpb3VzT3JSYXJlRGF0YQorICAgICAgICAv
LyBUaGlzIGlzIHNvIHdyaXR0ZW4gYmVjYXVzZSBpdCdzIHVzZWQgY29uY3VycmVudGx5LiBXZSBv
bmx5IGxvYWQgZnJvbSBtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhCiAgICAg
ICAgIC8vIG9uY2UsIGFuZCB0aGlzIGxvYWQgaXMgZ3VhcmFudGVlZCBhdG9taWMuCi0gICAgICAg
IEpTQ2VsbCogY2VsbCA9IG1fcHJldmlvdXNPclJhcmVEYXRhLmdldCgpOworICAgICAgICBKU0Nl
bGwqIGNlbGwgPSBwcmV2aW91c09yUmFyZURhdGEoKTsKICAgICAgICAgaWYgKGlzUmFyZURhdGEo
Y2VsbCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEq
PihjZWxsKS0+cHJldmlvdXNJRCgpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0
dXJlKj4oY2VsbCk7CkBAIC0zNTksNyArMzY5LDExIEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6
IHB1YmxpYyBKU0NlbGwgewogCiAgICAgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KCkgY29uc3QK
ICAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgdWludDE2X3QgbWF4T2Zmc2V0ID0g
bV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90b3R5cGVDaGFpbi50eXBlKCk7CisjZWxzZQogICAgICAg
ICB1aW50MTZfdCBtYXhPZmZzZXQgPSBtX21heE9mZnNldDsKKyNlbmRpZgogICAgICAgICBpZiAo
bWF4T2Zmc2V0ID09IHNob3J0SW52YWxpZE9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBpbnZh
bGlkT2Zmc2V0OwogICAgICAgICBpZiAobWF4T2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykKQEAg
LTM2OSwyMiArMzgzLDQ1IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwg
ewogCiAgICAgdm9pZCBzZXRNYXhPZmZzZXQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CiAgICAgewotICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCi0gICAgICAgICAg
ICBtX21heE9mZnNldCA9IHNob3J0SW52YWxpZE9mZnNldDsKLSAgICAgICAgZWxzZSBpZiAob2Zm
c2V0IDwgdXNlUmFyZURhdGFGbGFnICYmIG9mZnNldCA8IHNob3J0SW52YWxpZE9mZnNldCkKLSAg
ICAgICAgICAgIG1fbWF4T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIGlmIChtX21heE9m
ZnNldCA9PSB1c2VSYXJlRGF0YUZsYWcpCisgICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRo
cmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CisgICAgICAgIGF1dG8gY29tbWl0
ID0gWyZdKHVpbnQxNl90IHZhbHVlKSB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgICAg
IG1fbWF4T2Zmc2V0QW5kQ2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0VHlwZSh2YWx1ZSk7CisjZWxz
ZQorICAgICAgICAgICAgbV9tYXhPZmZzZXQgPSB2YWx1ZTsKKyNlbmRpZgorICAgICAgICB9Owor
CisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAgY29t
bWl0KHNob3J0SW52YWxpZE9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydElu
dmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1pdChvZmZzZXQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgdWludDE2X3Qg
bWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90b3R5cGVDaGFpbi50eXBlKCk7Cisj
ZWxzZQorICAgICAgICB1aW50MTZfdCBtYXhPZmZzZXQgPSBtX21heE9mZnNldDsKKyNlbmRpZgor
ICAgICAgICBpZiAobWF4T2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykgewogICAgICAgICAgICAg
cmFyZURhdGEoKS0+bV9tYXhPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgZW5zdXJlUmFyZURhdGEodm0pLT5tX21heE9mZnNldCA9IG9mZnNldDsKLSAgICAgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgICAgICBtX21heE9mZnNldCA9IHVz
ZVJhcmVEYXRhRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAg
IGVuc3VyZVJhcmVEYXRhKHZtKS0+bV9tYXhPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIGNvbW1pdCh1c2VSYXJlRGF0YUZsYWcpOwogICAg
IH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IHRyYW5zaXRpb25PZmZzZXQoKSBjb25zdAogICAgIHsK
KyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICB1aW50MTZfdCB0cmFuc2l0aW9uT2Zmc2V0ID0g
bV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvLnR5cGUoKTsKKyNlbHNlCiAgICAgICAgIHVp
bnQxNl90IHRyYW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRpb25PZmZzZXQ7CisjZW5kaWYKICAg
ICAgICAgaWYgKHRyYW5zaXRpb25PZmZzZXQgPT0gc2hvcnRJbnZhbGlkT2Zmc2V0KQogICAgICAg
ICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAgICAgICAgIGlmICh0cmFuc2l0aW9uT2Zmc2V0
ID09IHVzZVJhcmVEYXRhRmxhZykKQEAgLTM5NCwxNyArNDMxLDM2IEBAIGNsYXNzIFN0cnVjdHVy
ZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgdm9pZCBzZXRUcmFuc2l0aW9uT2Zmc2V0
KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgaWYgKG9mZnNl
dCA9PSBpbnZhbGlkT2Zmc2V0KQotICAgICAgICAgICAgbV90cmFuc2l0aW9uT2Zmc2V0ID0gc2hv
cnRJbnZhbGlkT2Zmc2V0OwotICAgICAgICBlbHNlIGlmIChvZmZzZXQgPCB1c2VSYXJlRGF0YUZs
YWcgJiYgb2Zmc2V0IDwgc2hvcnRJbnZhbGlkT2Zmc2V0KQotICAgICAgICAgICAgbV90cmFuc2l0
aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIGlmIChtX3RyYW5zaXRpb25PZmZzZXQg
PT0gdXNlUmFyZURhdGFGbGFnKQorICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgICAgICBhdXRvIGNvbW1pdCA9IFsm
XSh1aW50MTZfdCB2YWx1ZSkgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgICAgICBtX3Ry
YW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8uc2V0VHlwZSh2YWx1ZSk7CisjZWxzZQorICAgICAg
ICAgICAgbV90cmFuc2l0aW9uT2Zmc2V0ID0gdmFsdWU7CisjZW5kaWYKKyAgICAgICAgfTsKKwor
ICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1p
dChzaG9ydEludmFsaWRPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChvZmZzZXQgPCB1c2VSYXJlRGF0YUZsYWcgJiYgb2Zmc2V0IDwgc2hvcnRJbnZh
bGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBjb21taXQob2Zmc2V0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHVpbnQxNl90IHRy
YW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8udHlwZSgpOwor
I2Vsc2UKKyAgICAgICAgdWludDE2X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9m
ZnNldDsKKyNlbmRpZgorICAgICAgICBpZiAodHJhbnNpdGlvbk9mZnNldCA9PSB1c2VSYXJlRGF0
YUZsYWcpIHsKICAgICAgICAgICAgIHJhcmVEYXRhKCktPm1fdHJhbnNpdGlvbk9mZnNldCA9IG9m
ZnNldDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBlbnN1cmVSYXJlRGF0YSh2bSktPm1f
dHJhbnNpdGlvbk9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7Ci0gICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSB1c2VSYXJlRGF0YUZsYWc7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICBlbnN1cmVSYXJlRGF0
YSh2bSktPm1fdHJhbnNpdGlvbk9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICAgICAgY29tbWl0KHVzZVJhcmVEYXRhRmxhZyk7CiAgICAgfQogCiAg
ICAgc3RhdGljIHVuc2lnbmVkIG91dE9mTGluZUNhcGFjaXR5KFByb3BlcnR5T2Zmc2V0IG1heE9m
ZnNldCkKQEAgLTQ0MCwxNyArNDk2LDE4IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgewogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZVNpemUobWF4T2Zmc2V0
KCkpOwogICAgIH0KLSAgICBib29sIGhhc0lubGluZVN0b3JhZ2UoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuICEhbV9pbmxpbmVDYXBhY2l0eTsKLSAgICB9CisgICAgYm9vbCBoYXNJbmxp
bmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gISFpbmxpbmVDYXBhY2l0eSgpOyB9CiAgICAgdW5z
aWduZWQgaW5saW5lQ2FwYWNpdHkoKSBjb25zdAogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obV9pbmxpbmVDYXBhY2l0eUFuZFBy
ZXZpb3VzT3JSYXJlRGF0YS50eXBlKCkpOworI2Vsc2UKICAgICAgICAgcmV0dXJuIG1faW5saW5l
Q2FwYWNpdHk7CisjZW5kaWYKICAgICB9CiAgICAgdW5zaWduZWQgaW5saW5lU2l6ZSgpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+KG1heE9mZnNldCgpICsg
MSwgbV9pbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4o
bWF4T2Zmc2V0KCkgKyAxLCBpbmxpbmVDYXBhY2l0eSgpKTsKICAgICB9CiAgICAgdW5zaWduZWQg
dG90YWxTdG9yYWdlQ2FwYWNpdHkoKSBjb25zdAogICAgIHsKQEAgLTQ2MiwxMiArNTE5LDEyIEBA
IGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHsKICAgICAgICAg
cmV0dXJuIEpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpCiAgICAgICAgICAgICAmJiBvZmZzZXQg
PD0gbWF4T2Zmc2V0KCkKLSAgICAgICAgICAgICYmIChvZmZzZXQgPCBtX2lubGluZUNhcGFjaXR5
IHx8IG9mZnNldCA+PSBmaXJzdE91dE9mTGluZU9mZnNldCk7CisgICAgICAgICAgICAmJiAob2Zm
c2V0IDwgc3RhdGljX2Nhc3Q8aW50PihpbmxpbmVDYXBhY2l0eSgpKSB8fCBvZmZzZXQgPj0gZmly
c3RPdXRPZkxpbmVPZmZzZXQpOwogICAgIH0KIAogICAgIGJvb2wgaGlqYWNrc0luZGV4aW5nSGVh
ZGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpc1R5cGVkVmlldyhtX2NsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKKyAgICAgICAgcmV0dXJuIGlzVHlwZWRWaWV3KGNs
YXNzSW5mbygpLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAgIH0KICAgICAKICAgICBib29s
IGNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkgY29uc3QKQEAgLTUzNSw3ICs1OTIsMTQgQEAgY2xh
c3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIHNldE9iamVj
dFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqLCBWTSYsIEpTU3RyaW5nKiB2YWx1ZSwgUHJv
cGVydHlTbG90IHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7CiAKLSAgICBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NJbmZvOyB9CisgICAgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdAorICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAg
ICAgICByZXR1cm4gbV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvLnBvaW50ZXIoKTsKKyNl
bHNlCisgICAgICAgIHJldHVybiBtX2NsYXNzSW5mbzsKKyNlbmRpZgorICAgIH0KIAogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgc3RydWN0dXJlSURPZmZzZXQoKQogICAgIHsKQEAgLTU1MiwyOSArNjE2
LDM5IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9nbG9iYWxPYmplY3QpOwogICAgIH0K
IAotICAgIHN0YXRpYyBwdHJkaWZmX3QgY2xhc3NJbmZvT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mQ2xhc3NJbmZvKCkKICAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fdHJhbnNpdGlvbk9mZnNl
dEFuZENsYXNzSW5mbyk7CisjZWxzZQogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cnVjdHVyZSwgbV9jbGFzc0luZm8pOworI2VuZGlmCiAgICAgfQotICAgICAgICAKKwogICAgIHN0
YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpCiAgICAg
ewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0
cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpOwogICAg
IH0KLSAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHByb3BlcnR5VGFibGVVbnNhZmVPZmZzZXQo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fcHJv
cGVydHlUYWJsZVVuc2FmZSk7Ci0gICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBpbmxpbmVD
YXBhY2l0eU9mZnNldCgpCisjaWYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZklubGluZUNhcGFjaXR5KCkKICAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1faW5saW5lQ2FwYWNp
dHlBbmRQcmV2aW91c09yUmFyZURhdGEpICsgQ29tcGFjdFBvaW50ZXJUdXBsZTxKU0NlbGwqLCB1
aW50MTZfdD46Om9mZnNldE9mVHlwZSgpOworI2Vsc2UKICAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTdHJ1Y3R1cmUsIG1faW5saW5lQ2FwYWNpdHkpOworI2VuZGlmCisKICAgICB9Cisj
ZW5kaWYKIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgcHJldmlvdXNPclJhcmVEYXRhT2Zmc2V0KCkK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJldmlvdXNPclJhcmVEYXRhKCkKICAgICB7
CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmUsIG1faW5saW5lQ2FwYWNpdHlBbmRQcmV2aW91c09yUmFyZURhdGEpOworI2Vsc2UKICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fcHJldmlvdXNPclJhcmVE
YXRhKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYpOwpAQCAtNjUzLDEyICs3MjcsMTQgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDog
cHVibGljIEpTQ2VsbCB7CiAgICAgCiAgICAgc3RhdGljIHZvaWQgZHVtcENvbnRleHRIZWFkZXIo
UHJpbnRTdHJlYW0mKTsKICAgICAKLSAgICBDb25jdXJyZW50SlNMb2NrJiBsb2NrKCkgeyByZXR1
cm4gbV9sb2NrOyB9Ci0KLSAgICB1bnNpZ25lZCBwcm9wZXJ0eUhhc2goKSBjb25zdCB7IHJldHVy
biBtX3Byb3BlcnR5SGFzaDsgfQotCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQ29udmVydFRvUG9s
eVByb3RvKGNvbnN0IFN0cnVjdHVyZSogYSwgY29uc3QgU3RydWN0dXJlKiBiKTsKIAorICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB0cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NU
aHJlYWQoKSk7CisgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCk7
CisgICAgfQorCiAgICAgc3RydWN0IFByb3BlcnR5SGFzaEVudHJ5IHsKICAgICAgICAgY29uc3Qg
SGFzaFRhYmxlKiB0YWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIHZhbHVlOwpA
QCAtNjY4LDYgKzc0NCwyNiBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgorICAgIGJvb2wgcnVsZU91
dFVuc2VlblByb3BlcnR5SGFzaChVbmlxdWVkU3RyaW5nSW1wbCopIGNvbnN0OworI2lmIENQVShB
RERSRVNTNjQpCisgICAgLy8gQXMgYSBwcm9wZXJ0eUhhc2gsIDY0Yml0IGVudmlyb25tZW50IHVz
ZXMgMTZiaXQgcHJvcGVydHktaGFzaCArIHNlZW5Qcm9wZXJ0aWVzIHNldC4KKyAgICB1aW50cHRy
X3QgcHJvcGVydHlIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDYXBhY2l0eUFuZFByZXZp
b3VzT3JSYXJlRGF0YS5kYXRhKCk7IH0KKyNlbHNlCisgICAgdWludDMyX3QgcHJvcGVydHlIYXNo
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUhhc2g7IH0KKyNlbmRpZgorICAgIHVpbnRwdHJf
dCBzZWVuUHJvcGVydGllcygpIGNvbnN0OworICAgIHZvaWQgYWRkUHJvcGVydHlIYXNoQW5kU2Vl
blByb3BlcnR5KHVuc2lnbmVkLCBVbmlxdWVkU3RyaW5nSW1wbCopOworCisgICAgdm9pZCBzZXRU
cmFuc2l0aW9uUHJvcGVydHlOYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpCisgICAgeworICAgICAgICBtX3RyYW5zaXRp
b25Qcm9wZXJ0eU5hbWUgPSB0cmFuc2l0aW9uUHJvcGVydHlOYW1lOworICAgIH0KKyAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdHJhbnNpdGlvblByb3BlcnR5TmFtZUNvbmN1cnJlbnRseSgpCisgICAg
eworICAgICAgICBBU1NFUlQoY2VsbExvY2soKS5pc0xvY2tlZCgpKTsKKyAgICAgICAgcmV0dXJu
IG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKTsKKyAgICB9CisKICAgICB0eXBlZGVmIGVu
dW0geyAKICAgICAgICAgTm9uZURpY3Rpb25hcnlLaW5kID0gMCwKICAgICAgICAgQ2FjaGVkRGlj
dGlvbmFyeUtpbmQgPSAxLApAQCAtNjg0LDYgKzc4MCw3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5h
bCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHtcCiAgICAgICAgIG1fYml0RmllbGQgJj0gfihzXyMj
bG93ZXJOYW1lIyNNYXNrIDw8IG9mZnNldCk7XAogICAgICAgICBtX2JpdEZpZWxkIHw9IChuZXdW
YWx1ZSAmIHNfIyNsb3dlck5hbWUjI01hc2spIDw8IG9mZnNldDtcCisgICAgICAgIEFTU0VSVChu
ZXdWYWx1ZSA9PSBsb3dlck5hbWUoKSk7XAogICAgIH0KIAogICAgIERFRklORV9CSVRGSUVMRChE
aWN0aW9uYXJ5S2luZCwgZGljdGlvbmFyeUtpbmQsIERpY3Rpb25hcnlLaW5kLCAyLCAwKTsKQEAg
LTY5MSwxOCArNzg4LDE4IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwg
ewogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCBI
YXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCAxLCAzKTsKICAgICBERUZJTkVfQklURklFTEQoYm9v
bCwgaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywgSGFz
UmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywgMSwgNCk7CiAg
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JF
bnVtZXJhdGlvbiwgSXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uLCAx
LCA1KTsKLSAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIHRyYW5zaXRpb25Qcm9wZXJ0eUF0
dHJpYnV0ZXMsIFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIDE0LCA2KTsKLSAgICBERUZJ
TkVfQklURklFTEQoYm9vbCwgZGlkUHJldmVudEV4dGVuc2lvbnMsIERpZFByZXZlbnRFeHRlbnNp
b25zLCAxLCAyMCk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFRyYW5zaXRpb24sIERp
ZFRyYW5zaXRpb24sIDEsIDIxKTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgc3RhdGljUHJv
cGVydGllc1JlaWZpZWQsIFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkLCAxLCAyMik7Ci0gICAgREVG
SU5FX0JJVEZJRUxEKGJvb2wsIGhhc0JlZW5GbGF0dGVuZWRCZWZvcmUsIEhhc0JlZW5GbGF0dGVu
ZWRCZWZvcmUsIDEsIDIzKTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzQ3VzdG9tR2V0
dGVyU2V0dGVyUHJvcGVydGllcywgSGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcywgMSwg
MjQpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGll
cywgRGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIDEsIDI1KTsKLSAgICBERUZJTkVfQklURklF
TEQoYm9vbCwgdHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgVHJhbnNpdGlv
bldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgMSwgMjYpOwotICAgIERFRklORV9CSVRGSUVM
RChib29sLCBoYXNCZWVuRGljdGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnksIDEsIDI3KTsKLSAg
ICBERUZJTkVfQklURklFTEQoYm9vbCwgcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRp
b25pbmcsIFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCAxLCAyOCk7Ci0g
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVk
aW5nT3JpZ2luYWxQcm90bywgSGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmln
aW5hbFByb3RvLCAxLCAyOSk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzUHJvcGVydHlE
ZWxldGlvblRyYW5zaXRpb24sIElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24sIDEsIDMwKTsK
KyAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIHRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0
ZXMsIFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIDgsIDYpOworICAgIERFRklORV9CSVRG
SUVMRChib29sLCBkaWRQcmV2ZW50RXh0ZW5zaW9ucywgRGlkUHJldmVudEV4dGVuc2lvbnMsIDEs
IDE0KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlkVHJhbnNp
dGlvbiwgMSwgMTUpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNQcm9wZXJ0aWVz
UmVpZmllZCwgU3RhdGljUHJvcGVydGllc1JlaWZpZWQsIDEsIDE2KTsKKyAgICBERUZJTkVfQklU
RklFTEQoYm9vbCwgaGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSwgSGFzQmVlbkZsYXR0ZW5lZEJlZm9y
ZSwgMSwgMTcpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNDdXN0b21HZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzLCBIYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCAxLCAxOCk7Cisg
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCBEaWRX
YXRjaEludGVybmFsUHJvcGVydGllcywgMSwgMTkpOworICAgIERFRklORV9CSVRGSUVMRChib29s
LCB0cmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkLCBUcmFuc2l0aW9uV2F0Y2hw
b2ludElzTGlrZWx5VG9CZUZpcmVkLCAxLCAyMCk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2ws
IGhhc0JlZW5EaWN0aW9uYXJ5LCBIYXNCZWVuRGljdGlvbmFyeSwgMSwgMjEpOworICAgIERFRklO
RV9CSVRGSUVMRChib29sLCBwcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZywg
UHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcsIDEsIDIyKTsKKyAgICBERUZJ
TkVfQklURklFTEQoYm9vbCwgaGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmln
aW5hbFByb3RvLCBIYXNVbmRlcnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJv
dG8sIDEsIDIzKTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNQcm9wZXJ0eURlbGV0aW9u
VHJhbnNpdGlvbiwgSXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwgMSwgMjQpOwogCiAgICAg
c3RhdGljX2Fzc2VydChzX2JpdFdpZHRoT2ZUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIDw9
IHNpemVvZihUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKSAqIDgpOwogCkBAIC03MjEsNyAr
ODE4LDcgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8g
YW5kIHRoZSBsaXN0IG9mIHN0cnVjdHVyZXMgdGhhdCB3ZSB2aXNpdGVkIGJlZm9yZSB3ZSBnb3Qg
dG8gaXQuIElmIGl0IHJldHVybnMgYQogICAgIC8vIG5vbi1udWxsIHN0cnVjdHVyZSwgaXQgd2ls
bCBhbHNvIGxvY2sgdGhlIHN0cnVjdHVyZSB0aGF0IGl0IHJldHVybnM7IGl0IGlzIHlvdXIgam9i
CiAgICAgLy8gdG8gdW5sb2NrIGl0LgotICAgIHZvaWQgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JN
YXRlcmlhbGl6YXRpb24oVmVjdG9yPFN0cnVjdHVyZSosIDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1
cmUqJiwgUHJvcGVydHlUYWJsZSomKTsKKyAgICB2b2lkIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9y
TWF0ZXJpYWxpemF0aW9uKFZlY3RvcjxzdGQ6OnBhaXI8U3RydWN0dXJlKiwgVW5pcXVlZFN0cmlu
Z0ltcGwqPiwgOD4mIHN0cnVjdHVyZXMsIFN0cnVjdHVyZSomLCBQcm9wZXJ0eVRhYmxlKiYpOwog
ICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBT
dHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAKQEAgLTczOCw3ICs4MzUsNyBAQCBjbGFzcyBTdHJ1
Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBUaGlzIG1heSBncmFiIHRoZSBs
b2NrLCBvciBub3QuIERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJlJ3MgbG9j
ay4KICAgICBQcm9wZXJ0eVRhYmxlKiBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eShWTSYg
dm0pCiAgICAgewotICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gbV9wcm9wZXJ0
eVRhYmxlVW5zYWZlLmdldCgpKQorICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0g
cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgaWYgKCFwcmV2aW91c0lEKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTc0OCwzOSArODQ1LDM3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewogICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwg
d2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgogICAgIFByb3BlcnR5VGFibGUqIGVu
c3VyZVByb3BlcnR5VGFibGUoVk0mIHZtKQogICAgIHsKLSAgICAgICAgaWYgKFByb3BlcnR5VGFi
bGUqIHJlc3VsdCA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgaWYgKFBy
b3BlcnR5VGFibGUqIHJlc3VsdCA9IHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5
VGFibGUodm0pOwogICAgIH0KICAgICAKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxl
T3JOdWxsKCkgY29uc3QKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JO
dWxsKCkgY29uc3QKICAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgcmV0dXJuIG1f
b3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5wb2ludGVyKCk7CisjZWxz
ZQogICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOworI2VuZGlmCiAg
ICAgfQogICAgIAogICAgIC8vIFRoaXMgd2lsbCBncmFiIHRoZSBsb2NrLiBEbyBub3QgY2FsbCB3
aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2suCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
UHJvcGVydHlUYWJsZSogbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiwgYm9vbCBzZXRQcm9w
ZXJ0eVRhYmxlID0gdHJ1ZSk7CiAgICAgCiAgICAgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2
bSwgUHJvcGVydHlUYWJsZSogdGFibGUpOworICAgIHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7
CiAgICAgCiAgICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5u
ZWQoVk0mKTsKICAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
Vk0mKTsKIAogICAgIHZvaWQgc2V0UHJldmlvdXNJRChWTSYsIFN0cnVjdHVyZSopOwotCi0gICAg
dm9pZCBjbGVhclByZXZpb3VzSUQoKQotICAgIHsKLSAgICAgICAgaWYgKGhhc1JhcmVEYXRhKCkp
Ci0gICAgICAgICAgICByYXJlRGF0YSgpLT5jbGVhclByZXZpb3VzSUQoKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuY2xlYXIoKTsKLSAgICB9CisgICAg
dm9pZCBjbGVhclByZXZpb3VzSUQoKTsKIAogICAgIGludCB0cmFuc2l0aW9uQ291bnRFc3RpbWF0
ZSgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBTaW5jZSB0aGUgbnVtYmVyIG9mIHRyYW5zaXRp
b25zIGlzIG9mdGVuIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG9mZnNldCAoZXhjZXB0IGlmIHRoZXJl
IGFyZSBkZWxldGVzKQogICAgICAgICAvLyB3ZSBrZWVwIHRoZSBzaXplIG9mIFN0cnVjdHVyZSBk
b3duIGJ5IG5vdCBzdG9yaW5nIGJvdGguCi0gICAgICAgIHJldHVybiBudW1iZXJPZlNsb3RzRm9y
TWF4T2Zmc2V0KG1heE9mZnNldCgpLCBtX2lubGluZUNhcGFjaXR5KTsKKyAgICAgICAgcmV0dXJu
IG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIGlubGluZUNhcGFjaXR5KCkp
OwogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZUNo
YWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwpAQCAtODAy
LDQ4ICs4OTcsODggQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgCiAgICAgdm9pZCBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzKFZNJik7CiAKKyAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4oKSBjb25zdDsKKyAgICB2b2lk
IHNldENhY2hlZFByb3RvdHlwZUNoYWluKFZNJiwgU3RydWN0dXJlQ2hhaW4qKTsKKworICAgIHZv
aWQgc2V0T3V0T2ZMaW5lVHlwZUZsYWdzKFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3MpOwor
ICAgIHZvaWQgc2V0Q2xhc3NJbmZvKGNvbnN0IENsYXNzSW5mbyopOworICAgIHZvaWQgc2V0SW5s
aW5lQ2FwYWNpdHkodWludDhfdCk7CisKKyAgICBKU0NlbGwqIHByZXZpb3VzT3JSYXJlRGF0YSgp
IGNvbnN0CisgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHJldHVybiBtX2lubGlu
ZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhLnBvaW50ZXIoKTsKKyNlbHNlCisgICAgICAg
IHJldHVybiBtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKTsKKyNlbmRpZgorICAgIH0KKwogICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlk
ID0gNTEyOwogCiAgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBwcm9wZXJseSBhbGlnbmVkIGF0IHRo
ZSBiZWdpbm5pbmcgb2YgdGhlICdTdHJ1Y3R1cmUnCiAgICAgLy8gcGFydCBvZiB0aGUgb2JqZWN0
LgogICAgIFN0cnVjdHVyZUlEQmxvYiBtX2Jsb2I7Ci0gICAgVHlwZUluZm86Ok91dE9mTGluZVR5
cGVGbGFncyBtX291dE9mTGluZVR5cGVGbGFnczsKIAotICAgIHVpbnQ4X3QgbV9pbmxpbmVDYXBh
Y2l0eTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwotCi0gICAgdWludDMyX3QgbV9i
aXRGaWVsZDsKLQotICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmpl
Y3Q7Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJvdG90eXBlOworICAgIC8vIFRoZSBw
cm9wZXJ0eSB0YWJsZSBwb2ludGVyIHNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIGVuc3VyZVBy
b3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBtX3Byb3BlcnR5VGFibGVVbnNhZmUgZmllbGQgcGFy
dCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCisgICAgLy8gRHVyaW5nIGEgSGVh
cCBTbmFwc2hvdCBHQyB3ZSBhdm9pZCBjbGVhcmluZyB0aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0
byB1c2UuCisjaWYgQ1BVKEFERFJFU1M2NCkKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnRwdHJfdCBjbGFzc0luZm9NYXNrID0gQ29tcGFjdFBvaW50ZXJUdXBsZTxjb25zdCBDbGFz
c0luZm8qLCB1aW50MTZfdD46OnBvaW50ZXJNYXNrOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dHB0cl90IHByZXZpb3VzT3JSYXJlRGF0YU1hc2sgPSBDb21wYWN0UG9pbnRlclR1cGxlPEpTQ2Vs
bCosIHVpbnQxNl90Pjo6cG9pbnRlck1hc2s7Citwcml2YXRlOgorICAgIC8vIFN0cnVjdHVyZSBp
cyBvbmUgb2YgdGhlIG1vc3QgZnJlcXVlbnRseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmUuIE1v
cmVvdmVyLCBTdHJ1Y3R1cmUgdGVuZHMgdG8gYmUgYWxpdmUgbG9uZyEKKyAgICAvLyBUaGlzIG1v
dGl2YXRlcyBleHRyYSBjb21wbGljYXRlZCBoYWNrIHdoaWNoIG9wdGltaXplcyBzaXplb2YoU3Ry
dWN0dXJlKS4KKyAgICAvLworICAgIC8vIFdlIGNvbWJpbmUgMTZiaXQgZGF0YSBhbmQgNjRiaXQg
cG9pbnRlciBpbnRvIG9uZSBwb2ludGVyLXNpemUgZmllbGQgdG8gKDEpIHNhdmUgbWVtb3J5IHdo
aWxlICgyKSBub3QgbG9zaW5nIGF0b21pYyBsb2FkL3N0b3JlLgorICAgIC8vIFRoZSBrZXkgaGVy
ZSBpcyBhbmFseXppbmcgZGF0YSBhY2Nlc3MgcGF0dGVybnMgY2FyZWZ1bGx5LiBUaGV5IGFyZSBj
YXRlZ29yaWV6ZWQgaW50byB0aHJlZSB0eXBlcy4KKyAgICAvLyAgICAgMS4gSW1tdXRhYmxlQWZ0
ZXJDb25zdHJ1Y3Rpb24KKyAgICAvLyAgICAgMi4gTXV0YWJsZUZyb21BbnlUaHJlYWQKKyAgICAv
LyAgICAgMy4gTXV0YWJsZUZyb21NYWluVGhyZWFkCisgICAgLy8gIFdlIGFzc3VtZSB0aGF0IGxv
YWRpbmcgaGFwcGVucyBmcm9tIGFueSB0aHJlYWRzLiBVbmRlciB0aGlzIGFzc3VtcHRpb24sIE11
dGFibGVGcm9tQW55VGhyZWFkICsgKE11dGFibGVGcm9tTWFpblRocmVhZCAvIE11dGFibGVGcm9t
QW55VGhyZWFkKSBpcyB0aGUgcGFpciB3aGljaCBpcyByYWN5LgorICAgIC8vICBPdGhlciBwYWly
cyB3b3JrcyB3ZWxsLiBXZSBjYXJlZnVsbHkgcHV0IGFzc2VydGlvbnMgdG8gc2V0dGVycywgYW5h
bHl6ZSBhY2Nlc3MgcGF0dGVybnMgYW5kIHBpY2sgYXBwcm9wcmlhdGUgcGFpcnMgaW4gU3RydWN0
dXJlIGZpZWxkcy4KKyAgICBDb21wYWN0UG9pbnRlclR1cGxlPFByb3BlcnR5VGFibGUqLCBUeXBl
SW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzPiBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5
VGFibGVVbnNhZmU7IC8vIEltbXV0YWJsZUFmdGVyQ29uc3RydWN0aW9uKG1fb3V0T2ZMaW5lVHlw
ZUZsYWdzKSBhbmQgTXV0YWJsZUZyb21BbnlUaHJlYWQobV9wcm9wZXJ0eVRhYmxlVW5zYWZlKS4K
KyAgICBDb21wYWN0UG9pbnRlclR1cGxlPFN0cnVjdHVyZUNoYWluKiwgdWludDE2X3Q+IG1fbWF4
T2Zmc2V0QW5kQ2FjaGVkUHJvdG90eXBlQ2hhaW47IC8vIE11dGFibGVGcm9tTWFpblRocmVhZCht
X21heE9mZnNldCkgYW5kIE11dGFibGVGcm9tTWFpblRocmVhZChtX2NhY2hlZFByb3RvdHlwZUNo
YWluKS4KKyAgICBDb21wYWN0UG9pbnRlclR1cGxlPGNvbnN0IENsYXNzSW5mbyosIHVpbnQxNl90
PiBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm87IC8vIE11dGFibGVGcm9tTWFpblRocmVh
ZChtX3RyYW5zaXRpb25PZmZzZXQpIGFuZCBJbW11dGFibGVBZnRlckNvbnN0cnVjdGlvbihtX2Ns
YXNzSW5mbykuCisgICAgQ29tcGFjdFBvaW50ZXJUdXBsZTxKU0NlbGwqLCB1aW50MTZfdD4gbV9p
bmxpbmVDYXBhY2l0eUFuZFByZXZpb3VzT3JSYXJlRGF0YTsgLy8gSW1tdXRhYmxlQWZ0ZXJDb25z
dHJ1Y3Rpb24obV9pbmxpbmVDYXBhY2l0eSkgYW5kIE11dGFibGVGcm9tTWFpblRocmVhZChtX3By
ZXZpb3VzT3JSYXJlRGF0YSkuCisgICAgQ29tcGFjdFBvaW50ZXJUdXBsZTxVbmlxdWVkU3RyaW5n
SW1wbCosIHVpbnQxNl90PiBtX3Byb3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0aWVzOyAvLyBNdXRh
YmxlRnJvbU1haW5UaHJlYWQobV9wcm9wZXJ0eUhhc2gpIGFuZCBNdXRhYmxlRnJvbU1haW5UaHJl
YWQobV9zZWVuUHJvcGVydGllcykuCisKKyAgICAvLyAxLiBTZXR0aW5nIFVuaXF1ZWRTdHJpbmdJ
bXBsIGhhcHBlbnMgb25seSBpbiB0aGUgbWFpbiB0aHJlYWQuIEF0IHRoYXQgdGltZSwgd2UgbXVz
dCB0YWtlIGEgbG9jay4KKyAgICAvLyAyLiBBY2Nlc3NpbmcgVW5pcXVlZFN0cmluZ0ltcGwgZnJv
bSB0aGUgbWFpbiB0aHJlYWQgaXMgT0suCisgICAgLy8gMy4gQWNjZXNzaW5nIFVuaXF1ZWRTdHJp
bmdJbXBsIGZyb20gbm9uIG1haW4gdGhyZWFkIGlzIHJlcXVpcmluZyBsb2NrLgorICAgIHN0YXRp
Y19hc3NlcnQoYWxpZ25vZihQYWNrZWRSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+KSA9PSAxKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KGFsaWdub2YoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKSA9PSAx
KTsKKyAgICBQYWNrZWRSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+IG1fdHJhbnNpdGlvblByb3Bl
cnR5TmFtZTsKKyNlbHNlCisgICAgVHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFncyBtX291dE9m
TGluZVR5cGVGbGFncyB7IDAgfTsKKyAgICB1aW50OF90IG1faW5saW5lQ2FwYWNpdHkgeyAwIH07
CisgICAgdWludDMyX3QgbV9wcm9wZXJ0eUhhc2ggeyAwIH07CisgICAgdWludDE2X3QgbV90cmFu
c2l0aW9uT2Zmc2V0IHsgMCB9OworICAgIHVpbnQxNl90IG1fbWF4T2Zmc2V0IHsgMCB9OworICAg
IFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CisgICAg
Y29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKICAgICBtdXRhYmxlIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jYWNoZWRQcm90b3R5cGVDaGFpbjsKLQogICAg
IFdyaXRlQmFycmllcjxKU0NlbGw+IG1fcHJldmlvdXNPclJhcmVEYXRhOwotCisgICAgdWludHB0
cl90IG1fc2VlblByb3BlcnRpZXMgeyAwIH07CiAgICAgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBs
PiBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWU7Ci0KLSAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xh
c3NJbmZvOwotCisjZW5kaWYKKyAgICAvLyBBY2Nlc3NpbmcgbV90cmFuc2l0aW9uVGFibGUgaXMg
b25seSBhbGxvd2VkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAgIFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKIAotICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0
aHJvdWdoIGVuc3VyZVByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRv
IDAgYnkgYW5vdGhlciB0aHJlYWQuCi0gICAgLy8gRHVyaW5nIGEgSGVhcCBTbmFwc2hvdCBHQyB3
ZSBhdm9pZCBjbGVhcmluZyB0aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0byB1c2UuCi0gICAgV3Jp
dGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKKyAgICB1aW50
MzJfdCBtX2JpdEZpZWxkIHsgMCB9OworCisgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0
PiBtX2dsb2JhbE9iamVjdDsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9wcm90b3R5cGU7
CiAKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IDwgMjU2LCBm
aXJzdE91dE9mTGluZU9mZnNldF9maXRzKTsKIAotICAgIHVpbnQxNl90IG1fdHJhbnNpdGlvbk9m
ZnNldDsKLSAgICB1aW50MTZfdCBtX21heE9mZnNldDsKLQotICAgIHVpbnQzMl90IG1fcHJvcGVy
dHlIYXNoOwotICAgIFRpbnlCbG9vbUZpbHRlciBtX3NlZW5Qcm9wZXJ0aWVzOwotCiAgICAgZnJp
ZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBKU0RvbGxhclZNSGVscGVy
OwogfTsKKyNpZiBDUFUoQUREUkVTUzY0KQorc3RhdGljX2Fzc2VydChzaXplb2YoU3RydWN0dXJl
KSA8PSA5NiwgIkRvIG5vdCBpbmNyZWFzZSBzaXplb2YoU3RydWN0dXJlKSwgaXQgaW1tZWRpYXRl
bHkgY2F1c2VzIG1lbW9yeSByZWdyZXNzaW9uIik7CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmgKaW5kZXggMGNkOThkNTJhY2M3ZjcxNGMwNWIxNTNlMDgxMzllNDkxY2Q4Y2Y4Yy4uY2JiZDcx
ZGM5OTEwOWY1MjQ0ZTk3NGYyNWRhZTFiYjIzYTJhYmZkZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaApAQCAtMTQ0LDcgKzE0NCw3IEBA
IEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFk
KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUodm0pLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwog
Ci0gICAgaWYgKG1fc2VlblByb3BlcnRpZXMucnVsZU91dChiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pihwcm9wZXJ0eU5hbWUudWlkKCkpKSkKKyAgICBpZiAocnVsZU91dFVuc2VlblByb3BlcnR5SGFz
aChwcm9wZXJ0eU5hbWUudWlkKCkpKQogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAog
ICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZO
b3RFbXB0eSh2bSk7CkBAIC0xNTksMTAgKzE1OSwzOSBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5
T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
dQogICAgIHJldHVybiBlbnRyeS0+b2Zmc2V0OwogfQogCitpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6
OnJ1bGVPdXRVbnNlZW5Qcm9wZXJ0eUhhc2goVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkgY29uc3QK
K3sKKyAgICBBU1NFUlQodWlkKTsKKyAgICB1aW50cHRyX3QgcG9pbnRlciA9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHVpZCk7CisgICAgaWYgKChzZWVuUHJvcGVydGllcygpICYgcG9pbnRlcikg
IT0gcG9pbnRlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitpbmxpbmUgdWludHB0cl90IFN0cnVjdHVyZTo6c2VlblByb3BlcnRpZXMoKSBjb25zdAorewor
I2lmIENQVShBRERSRVNTNjQpCisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1f
cHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRpZXMucG9pbnRlcigpKTsKKyNlbHNlCisgICAgcmV0
dXJuIG1fc2VlblByb3BlcnRpZXM7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJl
OjphZGRQcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydHkodW5zaWduZWQgaGFzaCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHBvaW50ZXIpCit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX3Byb3BlcnR5
SGFzaEFuZFNlZW5Qcm9wZXJ0aWVzLnNldFR5cGUobV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVy
dGllcy50eXBlKCkgXiBoYXNoKTsKKyAgICBtX3Byb3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0aWVz
LnNldFBvaW50ZXIoYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4obV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydGllcy5wb2ludGVyKCkpIHwg
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcikpKTsKKyNlbHNlCisgICAgbV9wcm9wZXJ0
eUhhc2ggPSBtX3Byb3BlcnR5SGFzaCBeIGhhc2g7CisgICAgbV9zZWVuUHJvcGVydGllcyA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIpIHwgbV9zZWVuUHJvcGVydGllczsKKyNlbmRp
ZgorfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogdm9pZCBTdHJ1Y3R1cmU6OmZvckVh
Y2hQcm9wZXJ0eUNvbmN1cnJlbnRseShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIFZl
Y3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3Ry
dWN0dXJlKiwgVW5pcXVlZFN0cmluZ0ltcGwqPiwgOD4gc3RydWN0dXJlczsKICAgICBTdHJ1Y3R1
cmUqIHRhYmxlU3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIApAQCAt
MTcwLDE4ICsxOTksMTggQEAgdm9pZCBTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJl
bnRseShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogCiAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5n
SW1wbCo+IHNlZW5Qcm9wZXJ0aWVzOwogCi0gICAgZm9yIChhdXRvKiBzdHJ1Y3R1cmUgOiBzdHJ1
Y3R1cmVzKSB7Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUgfHwgc2VlblByb3BlcnRpZXMuY29udGFpbnMoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUuZ2V0KCkpKQorICAgIGZvciAoYXV0byBbc3RydWN0dXJlLCB0cmFuc2l0aW9uUHJv
cGVydHlOYW1lXSA6IHN0cnVjdHVyZXMpIHsKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9uUHJvcGVy
dHlOYW1lIHx8IHNlZW5Qcm9wZXJ0aWVzLmNvbnRhaW5zKHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc2VlblByb3BlcnRpZXMuYWRkKHN0
cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgc2VlblBy
b3BlcnRpZXMuYWRkKHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVjdHVyZS0+
bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZz
ZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkgeworICAg
ICAgICBpZiAoIWZ1bmN0b3IoUHJvcGVydHlNYXBFbnRyeSh0cmFuc2l0aW9uUHJvcGVydHlOYW1l
LCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJv
cGVydHlBdHRyaWJ1dGVzKCkpKSkgewogICAgICAgICAgICAgaWYgKHRhYmxlKQotICAgICAgICAg
ICAgICAgIHRhYmxlU3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICAgICAg
dGFibGVTdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTIsMTEgKzIyMSwxMSBAQCB2b2lkIFN0cnVjdHVyZTo6
Zm9yRWFjaFByb3BlcnR5Q29uY3VycmVudGx5KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlmICghZnVuY3RvcihlbnRyeSkp
IHsKLSAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAg
ICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB0YWJs
ZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAgICAgICB0YWJsZVN0cnVjdHVyZS0+Y2Vs
bExvY2soKS51bmxvY2soKTsKICAgICB9CiB9CiAKQEAgLTMwMiwxNSArMzMxLDM3IEBAIGlubGlu
ZSBKU1ZhbHVlIFN0cnVjdHVyZTo6cHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQ2VsCiAgICAgcmV0dXJuIHByb3RvdHlwZUZvckxvb2t1cFByaW1pdGl2
ZUltcGwoZ2xvYmFsT2JqZWN0LCB0aGlzKTsKIH0KIAoraW5saW5lIFN0cnVjdHVyZUNoYWluKiBT
dHJ1Y3R1cmU6OmNhY2hlZFByb3RvdHlwZUNoYWluKCkgY29uc3QKK3sKKyNpZiBDUFUoQUREUkVT
UzY0KQorICAgIHJldHVybiBtX21heE9mZnNldEFuZENhY2hlZFByb3RvdHlwZUNoYWluLnBvaW50
ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCk7Cisj
ZW5kaWYKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRDYWNoZWRQcm90b3R5cGVDaGFp
bihWTSYgdm0sIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKK3sKKyAgICBBU1NFUlQoIWlzT2JqZWN0
KCkpOworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJl
R0NUaHJlYWQoKSk7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX21heE9mZnNldEFuZENhY2hl
ZFByb3RvdHlwZUNoYWluLnNldFBvaW50ZXIoY2hhaW4pOworICAgIHZtLmhlYXAud3JpdGVCYXJy
aWVyKHRoaXMsIGNoYWluKTsKKyNlbHNlCisgICAgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXQo
dm0sIHRoaXMsIGNoYWluKTsKKyNlbmRpZgorfQorCiBpbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0
cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogYmFzZSkgY29uc3QKIHsKKyAgICBBU1NFUlQodGhpcy0+aXNPYmplY3Qo
KSk7CiAgICAgQVNTRVJUKGJhc2UtPnN0cnVjdHVyZSh2bSkgPT0gdGhpcyk7CiAgICAgLy8gV2Ug
Y2FjaGUgb3VyIHByb3RvdHlwZSBjaGFpbiBzbyBvdXIgY2xpZW50cyBjYW4gc2hhcmUgaXQuCi0g
ICAgaWYgKCFpc1ZhbGlkKGdsb2JhbE9iamVjdCwgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQo
KSwgYmFzZSkpIHsKKyAgICBpZiAoIWlzVmFsaWQoZ2xvYmFsT2JqZWN0LCBjYWNoZWRQcm90b3R5
cGVDaGFpbigpLCBiYXNlKSkgewogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHByb3RvdHlw
ZUZvckxvb2t1cChnbG9iYWxPYmplY3QsIGJhc2UpOwotICAgICAgICBtX2NhY2hlZFByb3RvdHlw
ZUNoYWluLnNldCh2bSwgdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZSh2bSwgcHJvdG90eXBl
LmlzTnVsbCgpID8gbnVsbHB0ciA6IGFzT2JqZWN0KHByb3RvdHlwZSkpKTsKKyAgICAgICAgY29u
c3RfY2FzdDxTdHJ1Y3R1cmUqPih0aGlzKS0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4odm0sIFN0
cnVjdHVyZUNoYWluOjpjcmVhdGUodm0sIHByb3RvdHlwZS5pc051bGwoKSA/IG51bGxwdHIgOiBh
c09iamVjdChwcm90b3R5cGUpKSk7CiAgICAgfQotICAgIHJldHVybiBtX2NhY2hlZFByb3RvdHlw
ZUNoYWluLmdldCgpOworICAgIHJldHVybiBjYWNoZWRQcm90b3R5cGVDaGFpbigpOwogfQogCiBp
bmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UpIGNvbnN0CkBAIC0zNTAsNyArNDAx
LDcgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQogCiBpbmxpbmUgV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjpwcm9wZXJ0
eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxM
b2NrZXIgbG9ja2VyKGNlbGxMb2NrKCkpOwogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CkBAIC0zNzEsMTYg
KzQyMiwxNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNp
c3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAKICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBwcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0
b3JhZ2VTaXplKCk7Ci0gICAgdW5zaWduZWQgaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFs
U2l6ZSA9IHRvdGFsU2l6ZSA8IG1faW5saW5lQ2FwYWNpdHkgPyAwIDogdG90YWxTaXplIC0gbV9p
bmxpbmVDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90
YWxTaXplID0gdG90YWxTaXplIDwgaW5saW5lQ2FwYWNpdHkoKSA/IDAgOiB0b3RhbFNpemUgLSBp
bmxpbmVDYXBhY2l0eSgpOwogCiAgICAgYXV0byBmYWlsID0gWyZdIChjb25zdCBjaGFyKiBkZXNj
cmlwdGlvbikgewogICAgICAgICBkYXRhTG9nKCJEZXRlY3RlZCBvZmZzZXQgaW5jb25zaXN0ZW5j
eTogIiwgZGVzY3JpcHRpb24sICIhXG4iKTsKICAgICAgICAgZGF0YUxvZygidGhpcyA9ICIsIFJh
d1BvaW50ZXIodGhpcyksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCJ0cmFuc2l0aW9uT2Zmc2V0
ID0gIiwgdHJhbnNpdGlvbk9mZnNldCgpLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygibWF4T2Zm
c2V0ID0gIiwgbWF4T2Zmc2V0KCksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCJtX2lubGluZUNh
cGFjaXR5ID0gIiwgbV9pbmxpbmVDYXBhY2l0eSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIm1f
aW5saW5lQ2FwYWNpdHkgPSAiLCBpbmxpbmVDYXBhY2l0eSgpLCAiXG4iKTsKICAgICAgICAgZGF0
YUxvZygicHJvcGVydHlUYWJsZSA9ICIsIFJhd1BvaW50ZXIocHJvcGVydHlUYWJsZSksICJcbiIp
OwotICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0ID0gIiwgbnVtYmVy
T2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSksICJcbiIp
OworICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0ID0gIiwgbnVtYmVy
T2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgaW5saW5lQ2FwYWNpdHkoKSksICJcbiIp
OwogICAgICAgICBkYXRhTG9nKCJ0b3RhbFNpemUgPSAiLCB0b3RhbFNpemUsICJcbiIpOwogICAg
ICAgICBkYXRhTG9nKCJpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90YWxTaXplID0gIiwgaW5s
aW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2co
Im51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhPZmZzZXQgPSAiLCBudW1iZXJPZk91dE9mTGlu
ZVNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpKSwgIlxuIik7CkBAIC0zODgsNyArNDM5LDcg
QEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeShQ
cm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmwKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7CiAgICAgfTsKICAgICAKLSAgICBpZiAobnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldCht
YXhPZmZzZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSkgIT0gdG90YWxTaXplKQorICAgIGlmIChudW1i
ZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBpbmxpbmVDYXBhY2l0eSgpKSAhPSB0
b3RhbFNpemUpCiAgICAgICAgIGZhaWwoIm51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQgZG9lc24n
dCBtYXRjaCB0b3RhbFNpemUiKTsKICAgICBpZiAoaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1Rv
dGFsU2l6ZSAhPSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgp
KSkKICAgICAgICAgZmFpbCgiaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSBkb2Vz
bid0IG1hdGNoIG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhPZmZzZXQiKTsKQEAgLTM5OCw3
ICs0NDksNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNp
c3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibAogCiBBTFdBWVNfSU5MSU5FIGJvb2wg
U3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3QKIHsKLSAgICBQcm9wZXJ0
eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgIFByb3Bl
cnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCk7CiAK
ICAgICBpZiAoIXByb3BlcnR5VGFibGUpIHsKICAgICAgICAgQVNTRVJUKCFpc1Bpbm5lZFByb3Bl
cnR5VGFibGUoKSk7CkBAIC00MzksNyArNDkwLDcgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQK
IHsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOwog
Ci0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwor
ICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhl
YXApOwogCiAgICAgc3dpdGNoIChzaG91bGRQaW4pIHsKICAgICBjYXNlIFNob3VsZFBpbjo6WWVz
OgpAQCAtNDYwLDEwICs1MTEsOSBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjph
ZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZAogCiAgICAgYXV0
byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZz
ZXQgPSB0YWJsZS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eU9m
ZnNldCBuZXdPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChpbmxpbmVDYXBhY2l0eSgpKTsKIAot
ICAgIG1fcHJvcGVydHlIYXNoID0gbV9wcm9wZXJ0eUhhc2ggXiByZXAtPmV4aXN0aW5nU3ltYm9s
QXdhcmVIYXNoKCk7Ci0gICAgbV9zZWVuUHJvcGVydGllcy5hZGQoYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4ocmVwKSk7CisgICAgYWRkUHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnR5KHJlcC0+ZXhp
c3RpbmdTeW1ib2xBd2FyZUhhc2goKSwgcmVwKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gdGFibGUt
PmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSk7CiAgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5zZWNvbmQpOwpAQCAtNDgyLDcgKzUzMiw3IEBA
IHRlbXBsYXRlPFN0cnVjdHVyZTo6U2hvdWxkUGluIHNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4K
IGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgUHJvcGVydHlUYWJs
ZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsKLSAgICBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CisgICAgR0NTYWZlQ29uY3VycmVudEpT
Q2VsbExvY2tlciBsb2NrZXIoY2VsbExvY2soKSwgdm0uaGVhcCk7CiAKICAgICBzd2l0Y2ggKHNo
b3VsZFBpbikgewogICAgIGNhc2UgU2hvdWxkUGluOjpZZXM6CkBAIC01MzIsNyArNTgyLDcgQEAg
aW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbihWTSYgdm0sIFByb3BlcnQKIHsKICAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSk7CiAgICAgQVNTRVJUKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKLSAgICBBU1NF
UlQocHJvcGVydHlUYWJsZU9yTnVsbCgpKTsKKyAgICBBU1NFUlQocHJvcGVydHlUYWJsZVVuc2Fm
ZU9yTnVsbCgpKTsKICAgICAKICAgICByZXR1cm4gcmVtb3ZlPFNob3VsZFBpbjo6WWVzPih2bSwg
cHJvcGVydHlOYW1lLCBmdW5jKTsKIH0KQEAgLTU1MCwxNSArNjAwLDc3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBTdHJ1Y3R1cmU6OnNldEdsb2JhbE9iamVjdChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldFByb3BlcnR5
VGFibGUoVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKKyNpZiBDUFUoQUREUkVTUzY0
KQorICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5zZXRQb2lu
dGVyKHRhYmxlKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCB0YWJsZSk7CisjZWxz
ZQogICAgIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5zZXRNYXlCZU51bGwodm0sIHRoaXMsIHRhYmxl
KTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpjbGVhclByb3Bl
cnR5VGFibGUoKQoreworI2lmIENQVShBRERSRVNTNjQpCisgICAgbV9vdXRPZkxpbmVUeXBlRmxh
Z3NBbmRQcm9wZXJ0eVRhYmxlVW5zYWZlLnNldFBvaW50ZXIobnVsbHB0cik7CisjZWxzZQorICAg
IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBTdHJ1Y3R1cmU6OnNldE91dE9mTGluZVR5cGVGbGFncyhUeXBlSW5mbzo6T3V0T2ZM
aW5lVHlwZUZsYWdzIG91dE9mTGluZVR5cGVGbGFncykKK3sKKyNpZiBDUFUoQUREUkVTUzY0KQor
ICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5zZXRUeXBlKG91
dE9mTGluZVR5cGVGbGFncyk7CisjZWxzZQorICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzID0gb3V0
T2ZMaW5lVHlwZUZsYWdzOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1
cmU6OnNldElubGluZUNhcGFjaXR5KHVpbnQ4X3QgaW5saW5lQ2FwYWNpdHkpCit7CisjaWYgQ1BV
KEFERFJFU1M2NCkKKyAgICBtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhLnNl
dFR5cGUoaW5saW5lQ2FwYWNpdHkpOworI2Vsc2UKKyAgICBtX2lubGluZUNhcGFjaXR5ID0gaW5s
aW5lQ2FwYWNpdHk7CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6
c2V0Q2xhc3NJbmZvKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQoreworI2lmIENQVShBRERS
RVNTNjQpCisgICAgbV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvLnNldFBvaW50ZXIoY2xh
c3NJbmZvKTsKKyNlbHNlCisgICAgbV9jbGFzc0luZm8gPSBjbGFzc0luZm87CisjZW5kaWYKIH0K
IAogQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6c2V0UHJldmlvdXNJRChWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogeworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgp
ICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpCiAg
ICAgICAgIHJhcmVEYXRhKCktPnNldFByZXZpb3VzSUQodm0sIHN0cnVjdHVyZSk7Ci0gICAgZWxz
ZQorICAgIGVsc2UgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIG1faW5saW5lQ2FwYWNp
dHlBbmRQcmV2aW91c09yUmFyZURhdGEuc2V0UG9pbnRlcihzdHJ1Y3R1cmUpOworICAgICAgICB2
bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOworI2Vsc2UKICAgICAgICAgbV9w
cmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOworI2VuZGlmCisgICAg
fQorfQorCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNsZWFyUHJldmlvdXNJRCgpCit7CisgICAg
QVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVHQ1RocmVhZCgp
KTsKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmFyZURhdGEoKS0+Y2xlYXJQcmV2
aW91c0lEKCk7CisgICAgZWxzZSB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgbV9pbmxp
bmVDYXBhY2l0eUFuZFByZXZpb3VzT3JSYXJlRGF0YS5zZXRQb2ludGVyKG51bGxwdHIpOworI2Vs
c2UKKyAgICAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuY2xlYXIoKTsKKyNlbmRpZgorICAgIH0K
IH0KIAogQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6c2hvdWxkQ29udmVydFRvUG9seVBy
b3RvKGNvbnN0IFN0cnVjdHVyZSogYSwgY29uc3QgU3RydWN0dXJlKiBiKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aAppbmRleCBmNDg5MjhjZjNiMjk1NjZlMjI3MGQ4NmY2MDIzNDM4NWVhYmI4NTg5Li42Y2NiN2Fi
NmZmNDY3OTZlODMyYWY0NmJhZGJlNDBjMzEyYjVkYTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaApAQCAt
MzksOCArMzksOCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRy
aWJ1dGUgPSAxIDw8IDY7IC8vIFVzZSBmb3IgdHJhbnNpdGlvbgogCiAvLyBTdXBwb3J0IGZvciBh
dHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJv
cGVydGllcy4KIC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9u
IG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCi1lbnVtIGNsYXNzIE5vblByb3BlcnR5VHJhbnNpdGlv
biA6IHVuc2lnbmVkIHsKLSAgICBBbGxvY2F0ZVVuZGVjaWRlZCwKK2VudW0gY2xhc3MgTm9uUHJv
cGVydHlUcmFuc2l0aW9uIDogdWludDhfdCB7CisgICAgQWxsb2NhdGVVbmRlY2lkZWQgPSAwLAog
ICAgIEFsbG9jYXRlSW50MzIsCiAgICAgQWxsb2NhdGVEb3VibGUsCiAgICAgQWxsb2NhdGVDb250
aWd1b3VzLApAQCAtNTAsMTQgKzUwLDE2IEBAIGVudW0gY2xhc3MgTm9uUHJvcGVydHlUcmFuc2l0
aW9uIDogdW5zaWduZWQgewogICAgIEFkZEluZGV4ZWRBY2Nlc3NvcnMsCiAgICAgUHJldmVudEV4
dGVuc2lvbnMsCiAgICAgU2VhbCwKLSAgICBGcmVlemUKKyAgICBGcmVlemUsCisgICAgTGFzdE9m
Tm9uUHJvcGVydHlUcmFuc2l0aW9uID0gRnJlZXplLAogfTsKLXVzaW5nIFRyYW5zaXRpb25Qcm9w
ZXJ0eUF0dHJpYnV0ZXMgPSB1aW50MTZfdDsKK3VzaW5nIFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJp
YnV0ZXMgPSB1aW50OF90OwogCi1pbmxpbmUgdW5zaWduZWQgdG9BdHRyaWJ1dGVzKE5vblByb3Bl
cnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoraW5saW5lIGNvbnN0ZXhwciB1aW50OF90IHRvQXR0
cmlidXRlcyhOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKIHsKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyYW5zaXRpb24pICsgRmlyc3RJbnRlcm5hbEF0dHJpYnV0
ZTsKIH0KK3N0YXRpY19hc3NlcnQodG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5VHJhbnNpdGlvbjo6
TGFzdE9mTm9uUHJvcGVydHlUcmFuc2l0aW9uKSA8PSBVSU5UOF9NQVgpOwogCiBpbmxpbmUgYm9v
bCBjaGFuZ2VzSW5kZXhpbmdUeXBlKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQog
ewpAQCAtMjMxLDcgKzIzMyw3IEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAK
IHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUoKQotICAgICAgICA6IG1fZGF0
YShVc2luZ1NpbmdsZVNsb3RGbGFnKQorICAgICAgICA6IG1fZGF0YShiaXR3aXNlX2Nhc3Q8dWlu
dDhfdCo+KFVzaW5nU2luZ2xlU2xvdEZsYWcpKQogICAgIHsKICAgICB9CiAKQEAgLTI1NywxOSAr
MjU5LDE5IEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAKICAgICBib29sIGlz
VXNpbmdTaW5nbGVTbG90KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2RhdGEgJiBV
c2luZ1NpbmdsZVNsb3RGbGFnOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obV9kYXRhLmdldCgpKSAmIFVzaW5nU2luZ2xlU2xvdEZsYWc7CiAgICAgfQogCiAgICAgVHJh
bnNpdGlvbk1hcCogbWFwKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNVc2luZ1Np
bmdsZVNsb3QoKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VHJhbnNpdGlvbk1hcCo+
KG1fZGF0YSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VHJhbnNpdGlvbk1hcCo+KG1f
ZGF0YS5nZXQoKSk7CiAgICAgfQogCiAgICAgV2Vha0ltcGwqIHdlYWtJbXBsKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKLSAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxXZWFrSW1wbCo+KG1fZGF0YSAmIH5Vc2luZ1NpbmdsZVNsb3RGbGFnKTsK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXZWFrSW1wbCo+KGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KG1fZGF0YS5nZXQoKSkgJiB+VXNpbmdTaW5nbGVTbG90RmxhZyk7CiAgICAgfQogCiAg
ICAgdm9pZCBzZXRNYXAoVHJhbnNpdGlvbk1hcCogbWFwKQpAQCAtMjgwLDcgKzI4Miw3IEBAIGNs
YXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgICAgICAgICBXZWFrU2V0OjpkZWFs
bG9jYXRlKGltcGwpOwogCiAgICAgICAgIC8vIFRoaXMgaW1wbGljaXRseSBjbGVhcnMgdGhlIGZs
YWcgdGhhdCBpbmRpY2F0ZXMgd2UncmUgdXNpbmcgYSBzaW5nbGUgdHJhbnNpdGlvbgotICAgICAg
ICBtX2RhdGEgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KG1hcCk7CisgICAgICAgIG1fZGF0YSA9
IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4obWFwKTsKIAogICAgICAgICBBU1NFUlQoIWlzVXNpbmdT
aW5nbGVTbG90KCkpOwogICAgIH0KQEAgLTI4OCw3ICsyOTAsMTEgQEAgY2xhc3MgU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlIHsKICAgICBTdHJ1Y3R1cmUqIHNpbmdsZVRyYW5zaXRpb24oKSBjb25z
dDsKICAgICB2b2lkIHNldFNpbmdsZVRyYW5zaXRpb24oU3RydWN0dXJlKik7CiAKLSAgICBpbnRw
dHJfdCBtX2RhdGE7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBQYWNrZWRQdHI8dWludDhfdD4g
bV9kYXRhOworI2Vsc2UKKyAgICBOYWtlZFB0cjx1aW50OF90PiBtX2RhdGE7CisjZW5kaWYKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV3JpdGVCYXJyaWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
cml0ZUJhcnJpZXIuaAppbmRleCA3MDdlMjBiNmU1YWMzZjZiYmJjOTdjOTU1ZGQxZTAxN2Y2MGQy
MjAyLi5mN2Q0NDcxOTk0MDk4YzQyMThlZDBhNjg3NmJkZjUyMmIzNDQyNmNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaApAQCAtMjQ4LDQgKzI0OCw2
IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVLCBUcmFp
dHNVPiYgbGhzLCBjb25zdCBXcml0ZUJhcnJpCiAgICAgcmV0dXJuIGxocy5nZXQoKSA9PSByaHMu
Z2V0KCk7CiB9CiAKK3VzaW5nIFVuc2FmZUNlbGxQb2ludGVyID0gdWludHB0cl90OworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNw
cAppbmRleCA5YTdmNDlhMTQwNTNhMDgyN2RiYWUzNTJkMjhmNTAzNjA3ZmY2Y2Q3Li5hMjBmNjA2
ZjdiODFiOTQyYjg4OWQzNWE1NTNhY2VkNzgyYThiODNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCkBAIC0yODE4LDggKzI4MTgsOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3RydWN0dXJl
VHJhbnNpdGlvbkxpcwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKHN0cnVjdHVyZS0+bWF4
T2Zmc2V0KCkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKQotICAgICAgICAg
ICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwganNTdHJpbmcodm0sIFN0cmluZygqc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpKSk7CisgICAgICAgIGlmIChhdXRvKiB0cmFu
c2l0aW9uUHJvcGVydHlOYW1lID0gc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkp
CisgICAgICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc1N0cmluZyh2bSwgU3Ry
aW5nKCp0cmFuc2l0aW9uUHJvcGVydHlOYW1lKSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc051bGwoKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDE2ZWNkYWE2MWU4NmVjODhk
ZTA0NDhlMjlmNjY1ODYwNjZlYzg0YTEuLjE3YzFhMzJiZjkwM2ZiODIzMzNlOTRjNTk4NmU0M2Ix
MDhlMTgzZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC0yNzUsNyArMjc1LDggQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9p
bnRTbG93KCkKIAogICAgICAgICAgICAgc3RhY2tMaW1pdEdQUklzQ2xvYmJlcmVkID0gdHJ1ZTsK
ICAgICAgICAgICAgIGppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSwgc2NyYXRjaEdQUiwgc2NyYXRj
aEdQUiwgc3RhY2tMaW1pdEdQUik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZDbGFzc0luZm8oKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0
d2lzZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKSwgc2NyYXRjaEdQUik7
CiAKICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19maW5hbDxXZWJBc3NlbWJseUZ1
bmN0aW9uPjo6dmFsdWUsICJXZSBkbyBub3QgY2hlY2sgZm9yIHN1YnR5cGVzIGJlbG93Iik7CiAg
ICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8V2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24+Ojp2YWx1ZSwgIldlIGRvIG5vdCBjaGVjayBmb3Igc3VidHlwZXMgYmVsb3ciKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NvbXBhY3RQb2ludGVyVHVwbGUuaCBiL1NvdXJj
ZS9XVEYvd3RmL0NvbXBhY3RQb2ludGVyVHVwbGUuaAppbmRleCBiOGYyMDFlYTA5NjU4OWI5MmZm
NTA2YzY0ZjA5OWI4ZDk1Y2JiZTJmLi5mYjI4ZjAzYjQxMzI0MTg4NjIxMDc5OGU5ZDQ1ZmU5NTg2
MjdmYTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmgK
KysrIGIvU291cmNlL1dURi93dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5oCkBAIC0zMyw1NiArMzMs
NjcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIC8vIFRoZSBnb2FsIG9mIHRoaXMgY2xhc3MgaXMgZm9s
ZGluZyBhIHBvaW50ZXIgYW5kIDEgYnl0ZSB2YWx1ZSBpbnRvIDggYnl0ZXMgaW4gYm90aCAzMmJp
dCBhbmQgNjRiaXQgYXJjaGl0ZWN0dXJlcy4KIC8vIDMyYml0IGFyY2hpdGVjdHVyZSBqdXN0IGhh
cyBhIHBhaXIgb2YgYnl0ZSBhbmQgcG9pbnRlciwgd2hpY2ggc2hvdWxkIGJlIDggYnl0ZXMuCi0v
LyBJbiA2NGJpdCwgd2UgdXNlIHRoZSB1cHBlciA1IGJpdHMgYW5kIGxvd2VyIDMgYml0cyAoemVy
byBkdWUgdG8gYWxpZ25tZW50KSBzaW5jZSB0aGVzZSBiaXRzIGFyZSBzYWZlIHRvIHVzZSBldmVu
Ci0vLyB3aXRoIDUtbGV2ZWwgcGFnZSB0YWJsZXMgd2hlcmUgdGhlIGVmZmVjdGl2ZSBwb2ludGVy
IHdpZHRoIGlzIDU3Yml0cy4KKy8vIFdlIGFyZSBhc3N1bWluZyA0OGJpdCBwb2ludGVycyBoZXJl
LCB3aGljaCBpcyBhbHNvIGFzc3VtZWQgaW4gSlNWYWx1ZSBhbnl3YXkuCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBQb2ludGVyVHlwZSwgdHlwZW5hbWUgVHlwZT4KIGNsYXNzIENvbXBhY3RQb2ludGVyVHVw
bGUgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKFR5cGUpID09IDEsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihUeXBlKSA8PSAyLCAiIik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3BvaW50ZXI8
UG9pbnRlclR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRl
Z3JhbDxUeXBlPjo6dmFsdWUgfHwgc3RkOjppc19lbnVtPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUeXBlPjo6
dHlwZSkgPT0gc2l6ZW9mKFR5cGUpKTsKIAogICAgIENvbXBhY3RQb2ludGVyVHVwbGUoKSA9IGRl
ZmF1bHQ7CiAKICNpZiBDUFUoQUREUkVTUzY0KQogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDY0X3QgZW5jb2RlVHlwZSh1aW50OF90IHR5cGUpCisgICAgc3RhdGljX2Fzc2VydChX
VEZfT1NfQ09OU1RBTlRfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEggPD0gNDgpOworCisjaWYgQ1BV
KExJVFRMRV9FTkRJQU4pCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlR5cGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIDQ4IC8gODsKKyAgICB9CisjZW5kaWYKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgdWludDY0X3QgZW5jb2RlVHlwZShUeXBlIHR5cGUpCiAgICAgewotICAgICAgICAv
LyBFbmNvZGUgOGJpdCB0eXBlIFVVVUREREREIGludG8gNjRiaXQgZGF0YSBERERERC4uNTZiaXQu
LlVVVS4KLSAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50NjRfdD4odHlwZSkgPDwgNTkp
IHwgKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0eXBlKSA+PiA1KTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWdu
ZWQ8VHlwZT46OnR5cGU+KHR5cGUpKSA8PCA0ODsKICAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50OF90IGRlY29kZVR5cGUodWludDY0X3QgdmFsdWUpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBUeXBlIGRlY29kZVR5cGUodWludDY0X3QgdmFsdWUpCiAgICAgewotICAgICAgICAvLyBEZWNv
ZGUgNjRiaXQgZGF0YSBERERERC4uNTZiaXQuLlVVVSBpbnRvIDhiaXQgdHlwZSBVVVVERERERC4K
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCh2YWx1ZSA+PiA1OSkgfCAodmFs
dWUgPDwgNSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4oc3RhdGljX2Nhc3Q8
dHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFR5cGU+Ojp0eXBlPih2YWx1ZSA+PiA0OCkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgdHlwZU1hc2sgPSBlbmNvZGVU
eXBlKFVJTlQ4X01BWCk7Ci0gICAgc3RhdGljX2Fzc2VydCgweEY4MDAwMDAwMDAwMDAwMDdVTEwg
PT0gdHlwZU1hc2ssICIiKTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IHBvaW50ZXJN
YXNrID0gfnR5cGVNYXNrOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgcG9pbnRlck1h
c2sgPSAoMVVMTCA8PCA0OCkgLSAxOwogCiAgICAgQ29tcGFjdFBvaW50ZXJUdXBsZShQb2ludGVy
VHlwZSBwb2ludGVyLCBUeXBlIHR5cGUpCi0gICAgICAgIDogbV9kYXRhKGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4ocG9pbnRlcikgfCBlbmNvZGVUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHR5cGUp
KSkKKyAgICAgICAgOiBtX2RhdGEoZW5jb2RlKHBvaW50ZXIsIHR5cGUpKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKChiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHBvaW50ZXIpICYgMGIxMTEpID09IDB4
MCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT50eXBlKCkgPT0gdHlwZSk7CisgICAgICAgIEFTU0VS
VCh0aGlzLT5wb2ludGVyKCkgPT0gcG9pbnRlcik7CiAgICAgfQogCiAgICAgUG9pbnRlclR5cGUg
cG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxQb2ludGVyVHlwZT4obV9kYXRh
ICYgcG9pbnRlck1hc2spOyB9CiAgICAgdm9pZCBzZXRQb2ludGVyKFBvaW50ZXJUeXBlIHBvaW50
ZXIpCiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KGFsaWdub2YodHlwZW5hbWUgc3RkOjpy
ZW1vdmVfcG9pbnRlcjxQb2ludGVyVHlwZT46OnR5cGUpID49IGFsaWdub2Yodm9pZCopLCAiIik7
Ci0gICAgICAgIEFTU0VSVCgoYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihwb2ludGVyKSAmIDBiMTEx
KSA9PSAweDApOwotICAgICAgICBtX2RhdGEgPSBDb21wYWN0UG9pbnRlclR1cGxlKHBvaW50ZXIs
IHR5cGUoKSkubV9kYXRhOworICAgICAgICBtX2RhdGEgPSBlbmNvZGUocG9pbnRlciwgdHlwZSgp
KTsKICAgICB9CiAKLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxU
eXBlPihkZWNvZGVUeXBlKG1fZGF0YSkpOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gZGVjb2RlVHlwZShtX2RhdGEpOyB9CiAgICAgdm9pZCBzZXRUeXBlKFR5cGUgdHlwZSkKICAg
ICB7Ci0gICAgICAgIG1fZGF0YSA9IENvbXBhY3RQb2ludGVyVHVwbGUocG9pbnRlcigpLCB0eXBl
KS5tX2RhdGE7CisgICAgICAgIG1fZGF0YSA9IGVuY29kZShwb2ludGVyKCksIHR5cGUpOwogICAg
IH0KIAorICAgIHVpbnQ2NF90IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKwogcHJp
dmF0ZToKKyAgICBzdGF0aWMgdWludDY0X3QgZW5jb2RlKFBvaW50ZXJUeXBlIHBvaW50ZXIsIFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHBv
aW50ZXIpIHwgZW5jb2RlVHlwZSh0eXBlKTsKKyAgICB9CisKICAgICB1aW50NjRfdCBtX2RhdGEg
eyAwIH07CiAjZWxzZQogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCA2YmJi
ZWZlNzBmYzFjMTMwMmY0OTVlYzNmNmUyYTQ0MTAyNWU2ZDZhLi4wMDQzNTYzNDFmNzQ3MTk2NDZm
MTU4MTQ1MzZmNzUwN2Q0MTJmMzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtMTg5
LDggKzE4OSw4IEBAIGNsYXNzIFN0cmluZ0ltcGwgOiBwcml2YXRlIFN0cmluZ0ltcGxTaGFwZSB7
CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE1heExlbmd0aCA9IFN0cmluZ0ltcGxT
aGFwZTo6TWF4TGVuZ3RoOwogCi0gICAgLy8gVGhlIGJvdHRvbSA2IGJpdHMgaW4gdGhlIGhhc2gg
YXJlIGZsYWdzLgotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19mbGFnQ291
bnQgPSA2OworICAgIC8vIFRoZSBib3R0b20gNiBiaXRzIGluIHRoZSBoYXNoIGFyZSBmbGFncywg
YnV0IHJlc2VydmUgOCBiaXRzIHNpbmNlIFN0cmluZ0hhc2ggb25seSBoYXMgMjQgYml0cyBhbnl3
YXkuCisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDg7
CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdN
YXNrID0gKDF1IDw8IHNfZmxhZ0NvdW50KSAtIDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N5bWJvbEltcGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5oCmlu
ZGV4IGVkMGYxM2U1NDRmMTBjMzFiNDE5YmVhYWE4MjUyMzc0YTg3MGFjNzMuLmI4Y2MzOGNkNmUz
NTAxZGRlYTY1OTZiNmMwZWI2MjZkYmE0YWIxMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3ltYm9sSW1wbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5o
CkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFN5bWJvbEltcGwgOiBwdWJsaWMgVW5pcXVlZFN0cmlu
Z0ltcGwgewogICAgIHN0YXRpYyBjb25zdGV4cHIgRmxhZ3Mgc19mbGFnSXNSZWdpc3RlcmVkID0g
MGIwMTB1OwogICAgIHN0YXRpYyBjb25zdGV4cHIgRmxhZ3Mgc19mbGFnSXNQcml2YXRlID0gMGIx
MDB1OwogCi0gICAgdW5zaWduZWQgaGFzaEZvclN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
aEZvclN5bWJvbDsgfQorICAgIHVuc2lnbmVkIGhhc2hGb3JTeW1ib2woKSBjb25zdCB7IHJldHVy
biBtX2hhc2hGb3JTeW1ib2wgPj4gc19mbGFnQ291bnQ7IH0KICAgICBib29sIGlzTnVsbFN5bWJv
bCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBzX2ZsYWdJc051bGxTeW1ib2w7IH0KICAgICBi
b29sIGlzUmVnaXN0ZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBzX2ZsYWdJc1JlZ2lz
dGVyZWQ7IH0KICAgICBib29sIGlzUHJpdmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBz
X2ZsYWdJc1ByaXZhdGU7IH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzN2U0ZGQ5ODUxZDM0MWQ3ZjNmOTM3N2ZiMTQ2ZTMx
MmQ5MWEzNjg4Li40NTRjOTcxNjRmN2EzNDg5MmI4M2MxYWNmMzJiYmQ4YTVjMDg3MDA5IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMDItMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFw
cGxlLmNvbT4KKworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHRlc3QgaXMgaGFsZi1icm9r
ZW4gc2luY2UgaXQgcmVsaWVzIG9uIEhhc2hNYXAncyBvcmRlciBpbXBsaWNpdGx5LgorICAgICAg
ICBXZSBjaGFuZ2VkIFN5bWJvbEltcGwncyBoYXNoIGNvZGUsIHNvIGl0IG1ha2VzIHRoZSByZXN1
bHQgZGlmZmVyZW50LgorCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL3RhaWwtZGVsZXRl
ZC1mcmFtZXMvdGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLWV4cGVjdGVkLnR4dDoKKwog
MjAyMC0wMi0yMSAgSmFzb24gTGF3cmVuY2UgIDxsYXdyZW5jZS5qQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbIGlPUyBdIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2tl
eS1nZW5lcmF0b3JzL3JlYWRpbmctYXV0b2luY3JlbWVudC1pbmRleGVzLWN1cnNvcnMuYW55LnNl
cnZpY2V3b3JrZXIuaHRtbCBpcyBmbGFreSBmYWlsaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3RhaWwtZGVsZXRlZC1mcmFtZXMvdGFpbC1kZWxldGVkLWZy
YW1lcy10aGlzLXZhbHVlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1
Z2dlci90YWlsLWRlbGV0ZWQtZnJhbWVzL3RhaWwtZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1ZS1l
eHBlY3RlZC50eHQKaW5kZXggMjEyNWZiNTI5NzFjZWNlYWI3YzA4MDM0ZjJkNTM2YzdhMmE0YjRl
OC4uZTM3NDQ2NDUzN2FhYjdkNGEwYWI1ZTI0ZjRmYzhhNzBmZjdmNWI3YyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3RhaWwtZGVsZXRlZC1mcmFtZXMvdGFpbC1k
ZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZGVidWdnZXIvdGFpbC1kZWxldGVkLWZyYW1lcy90YWlsLWRlbGV0ZWQtZnJhbWVz
LXRoaXMtdmFsdWUtZXhwZWN0ZWQudHh0CkBAIC0xNCw2ICsxNCw2IEBAIENBTEwgU1RBQ0s6CiAz
OiBbRl0gc3RhcnRBQkMKICAgdGhpczogdW5kZWZpbmVkCiA0OiBbUF0gR2xvYmFsIENvZGUKLSAg
dGhpczogYyAtIAorICB0aGlzOiBhIC0gCiBSRVNVTUVECiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391453</attachid>
            <date>2020-02-21 22:30:06 -0800</date>
            <delta_ts>2020-02-21 23:11:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207827-20200221223005.patch</filename>
            <type>text/plain</type>
            <size>107454</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NDI3NDBmNDllZGMwZWQ3MmU3YzUzZjg3NzNiYzQ2NzUwNzM1NGYyLi5jZWUyZjdmNTMwZDgyNzZl
NThhMjNjM2E2MGM3NGZmYjc3Mzg0MzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzIgQEAKKzIwMjAtMDItMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNocmlua3Mgc2l6ZW9mKFN0
cnVjdHVyZSkgZnJvbSAxMTIgdG8gOTYgKDE2IGJ5dGVzKSBpbiA2NCBiaXQgYXJjaGl0ZWN0dXJl
cy4KKyAgICAgICAgU3RydWN0dXJlIGlzIG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IGFsbG9j
YXRlZCBKU0NlbGwgaW4gSlNDLiBTbyBpdCBpcyB3b3J0aCBkb2luZworICAgICAgICBhbGwgdGhl
IHNvcnQgb2YgYml0IGhhY2tzIHRvIG1ha2UgaXQgY29tcGFjdCBhcyBtdWNoIGFzIHBvc3NpYmxl
LgorCisgICAgICAgICAgICAxLiBTdHJpbmdIYXNoZXIgaXMgYWx3YXlzIGdlbmVyYXRpbmcgMjQg
Yml0cyBoYXNoZXMgc28gZmFyLiBCeSBsZXZlcmFnaW5nIHRoaXMgZmFjdCwKKyAgICAgICAgICAg
ICAgIHdlIHN0b3JlIGhhc2ggY29kZSBpbiBTdHJ1Y3R1cmUgaW4gMyBieXRlcyAoMjQgYml0cykg
Zm9yIHByb3BlcnR5LWhhc2ggYW5kIHNlZW4tcHJvcGVydHktaGFzaC4KKyAgICAgICAgICAgIDIu
IEluc3RlYWQgb2YgdXNpbmcgYmxvb20tZmlsdGVyIG9mIHBvaW50ZXJzIGZvciBzZWVuLXByb3Bl
cnRpZXMsIHdlIHNob3VsZCB1c2UgYmxvb20tZmlsdGVyIG9mIGhhc2gtY29kZXMuCisgICAgICAg
ICAgICAzLiBVc2VkIFBhY2tlZFB0ciBmb3IgQysrIG5vbi1jb25jdXJyZW50bHkgYWNjZXNzZWQg
ZGF0YSBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgNC4gUHV0IG91dE9mTGluZVR5cGVGbGFncywg
bWF4T2Zmc2V0IGFuZCB0cmFuc2l0aW9uT2Zmc2V0IGludG8gaGlnaGVzdCBiaXRzIG9mIG1fcHJv
cGVydHlUYWJsZVVuc2FmZSwKKyAgICAgICAgICAgICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4s
IGFuZCBtX2NsYXNzSW5mby4gRG8gbm90IHVzZSBQYWNrZWRQdHIgaGVyZSBzaW5jZSBzb21lIG9m
IHRoZW0gYXJlIGNvbmN1cnJlbnRseSBhY2Nlc3NlZAorICAgICAgICAgICAgICAgYnkgR0MuCisg
ICAgICAgICAgICA1LiBQdXQgbV9pbmxpbmVDYXBhY2l0eSBpbnRvIGxvd2VyIDggYml0cyBvZiBt
X3Byb3BlcnR5SGFzaC4KKyAgICAgICAgICAgIDYuIFJlbW92ZSBtX2xvY2ssIGFuZCB1c2UgU3Ry
dWN0dXJlOjpjZWxsTG9jaygpIGluc3RlYWQuCisgICAgICAgICAgICA3LiBSZW1vdmUgbV9jYWNo
ZWRQcm90b3R5cGVDaGFpbiBjbGVhcmluZyBmcm9tIHRoZSBjb25jdXJyZW50IGNvbGxlY3RvciBz
aW5jZSBpdCBpcyBkZWFkIGNvZGUsIGl0IHdhcyBvbGQgY29kZS4KKyAgICAgICAgICAgICAgIFdl
IGFyZSBzZXR0aW5nIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4gb25seSBpZiBTdHJ1Y3R1cmUgaXMg
Zm9yIEpTT2JqZWN0LiBDbGVhcmluZyBoYXBwZW5zIG9ubHkgaWYgaXQgaXMgbm90CisgICAgICAg
ICAgICAgICBhIFN0cnVjdHVyZSBmb3IgSlNPYmplY3QuCisgICAgICAgICAgICA4LiBMb2NraW5n
IHN0cnVjdHVyZSB3aGVuIG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSBpcyBjaGFuZ2VkLiBUaGlz
IGZpZWxkIGlzIG9ubHkgbW9kaWZpZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgICAg
ICAgICBBbmQgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhpcyBmaWVsZCByZXF1aXJlcyBsb2NraW5n
LiBUaGVuIHdlIGNhbiB1c2UgNiBieXRlcyBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuCisgICAg
ICAgICAgICA5LiBXZSBlbnN1cmUgdGhhdCBvbmx5IHRoZSBtYWluIHRocmVhZCBpcyBhY2Nlc3Np
bmcgbV90cmFuc2l0aW9uVGFibGUuIFRoZW4gd2UgY2FuIHVzZSA2IGJ5dGVzIG1fdHJhbnNpdGlv
blRhYmxlLgorCisgICAgICAgIE1hbnkgcGFpcnMgYXJlIHVzaW5nIENvbXBhY3RQb2ludGVyVHVw
bGUgdG8gbWFrZSBjb2RlIGNsZWFuLgorICAgICAgICBDb21iaW5pbmcgYWxsIG9mIHRoZSBhYm92
ZSB0ZWNobmlxdWVzIGFuZCBnZXR0aW5nIDE2IGJ5dGVzLgorCisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNoZWNrU3ViQ2xhc3MpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0S2V5cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDcmVhdGVUaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZVByb21pc2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdCk6CisgICAgICAgICogZnRsL0ZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU9iamVjdEtleXMp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlUHJv
bWlzZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVh
dGVJbnRlcm5hbEZpZWxkT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUNoZWNrU3ViQ2xhc3MpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKToKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAg
IChKU0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50
aW1lL0NvbmN1cnJlbnRKU0xvY2suaDoKKyAgICAgICAgKEpTQzo6Q29uY3VycmVudEpTTG9ja2Vy
QmFzZTo6Q29uY3VycmVudEpTTG9ja2VyQmFzZSk6CisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlckltcGw6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwpOgorICAgICAg
ICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsOjp+R0NTYWZlQ29uY3VycmVudEpT
TG9ja2VySW1wbCk6CisgICAgICAgIChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlckltcGw6OkNvbmN1
cnJlbnRKU0xvY2tlckltcGwpOgorICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXI6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlcjo6fkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlcjo6Q29uY3VycmVudEpTTG9ja2Vy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldERpcmVjdENvbmN1cnJlbnRseSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXBhcmVUb1B1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2luZ2xlVHJhbnNpdGlvbiBjb25z
dCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2V0U2luZ2xlVHJh
bnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFp
bnMgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmdldCBj
b25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxp
emF0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFi
bGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmVJbXBsKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dGFr
ZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3cpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwaW4p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbkZvckNhY2hpbmcpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3IgY29uc3QpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpydWxlT3V0VW5zZWVuUHJvcGVydHlIYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpzZWVuUHJvcGVydGllcyBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRk
UHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpm
b3JFYWNoUHJvcGVydHlDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNh
Y2hlZFByb3RvdHlwZUNoYWluIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRD
YWNoZWRQcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvdG90eXBl
Q2hhaW4gY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3BlcnR5UmVwbGFjZW1l
bnRXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNldENv
bnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVt
b3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
c2V0UHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2xlYXJQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRPdXRPZkxpbmVUeXBlRmxhZ3Mp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldElubGluZUNhcGFjaXR5KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpzZXRDbGFzc0luZm8pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnNldFByZXZpb3VzSUQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsZWFyUHJldmlvdXNJ
RCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAg
ICAgKEpTQzo6dG9BdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGU6OmlzVXNpbmdTaW5nbGVTbG90IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjptYXAgY29uc3QpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OndlYWtJbXBsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzZXRNYXApOgorICAgICAgICAqIHJ1bnRpbWUvV3Jp
dGVCYXJyaWVyLmg6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAgIChK
U0M6OkpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3RydWN0dXJlVHJhbnNpdGlvbkxpc3Qp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChK
U0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKwogMjAyMC0w
Mi0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXBw
b3J0IGZvciBieXRlY29kZSBjYWNoaW5nIG1vcmUgcm9idXN0IGFnYWluc3QgZmlsZSBjb3JydXB0
aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCBjZjEyZjI3NjUwZDQ4ZDUwMTViOGRjYzExZTU3ODI1YjM1YWRiODAyLi4zMTRi
ZWQyNDZmMjcwNTc4M2Y2ZDEzNmNkNGE5OTk4YjczYzBkNGFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDIwLTAyLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0pTQ10gU2hyaW5rIFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA3ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBDb21wYWN0UG9pbnRlclR1cGxlIHVzYWJsZSBmb3Igc3Rv
cmluZyAxNiBiaXRzIGRhdGEuCisKKyAgICAgICAgKiB3dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5o
OgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9T
eW1ib2xJbXBsLmg6CisgICAgICAgIChXVEY6OlN5bWJvbEltcGw6Omhhc2hGb3JTeW1ib2wgY29u
c3QpOgorCiAyMDIwLTAyLTIxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OKHIyNTcwNzIpOiBNb3Rpb25NYXJrIHwgTWFjIHwgLTEwJQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCA2
NDJiMTYzNTZmOTBlOWMzODYwMmViYzU3ZmQ5ZTA0YTBmNDViNTI4Li4wOTEyNzQwZGYxNTEzNzE4
OThlMDE2ZDhhYTZlMzU4ZGZlNTlhZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtOTYwNSw3ICs5NjA1LDEwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N1YkNsYXNzKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQ
UlJlZyBzcGVjaWZpZWRHUFIgPSBzcGVjaWZpZWQuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQuZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgYmFzZUdQUiwgb3RoZXJHUFIsIHNwZWNpZmllZEdQUik7Ci0g
ICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG90aGVyR1BSLCBTdHJ1
Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgb3RoZXJHUFIpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvdGhlckdQUiwgU3RydWN0dXJlOjpvZmZzZXRPZkNs
YXNzSW5mbygpKSwgb3RoZXJHUFIpOworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIG1faml0
LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihT
dHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKSwgb3RoZXJHUFIpOworI2VuZGlmCiAgICAgICAgIG1f
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG5vZGUtPmNsYXNzSW5mbygpKSwg
c3BlY2lmaWVkR1BSKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxvb3AgPSBtX2pp
dC5sYWJlbCgpOwpAQCAtMTI2OTgsNyArMTI3MDEsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdEtleXMoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBvYmplY3RHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVj
dHVyZTo6cHJldmlvdXNPclJhcmVEYXRhT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3Ry
dWN0dXJlOjpvZmZzZXRPZlByZXZpb3VzT3JSYXJlRGF0YSgpKSwgc2NyYXRjaEdQUik7CisjaWYg
Q1BVKEFERFJFU1M2NCkKKyAgICAgICAgICAgIG1faml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoU3RydWN0dXJlOjpwcmV2aW91c09yUmFyZURhdGFNYXNrKSwgc2NyYXRjaEdQ
Uik7CisjZW5kaWYKIAogICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2bSgpLnN0cnVjdHVyZVN0cnVjdHVy
ZS0+c3RydWN0dXJlSUQoKSkpKSk7CkBAIC0xMjgzOSw3ICsxMjg0NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVUaGlzKE5vZGUqIG5vZGUpCiAgICAgYXV0byBidXR0ZXJm
bHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJl
c3VsdEdQUiwgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVy
ZUdQUiwgYnV0dGVyZmx5LCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAKLSAgICBtX2ppdC5sb2Fk
OChKSVRDb21waWxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIGlubGluZUNhcGFjaXR5R1BSKTsKKyAgICBtX2ppdC5sb2FkOChKSVRD
b21waWxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxpbmVD
YXBhY2l0eSgpKSwgaW5saW5lQ2FwYWNpdHlHUFIpOwogICAgIG1faml0LmVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIGlubGluZUNhcGFjaXR5R1BSKTsKICAgICBtX2ppdC5t
dXRhdG9yRmVuY2Uodm0oKSk7CiAKQEAgLTEyODc3LDggKzEyODgzLDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVQcm9taXNlKE5vZGUqIG5vZGUpCiAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0
YUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcp
KSk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2Zp
bGUoKSArIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1
cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlR1BSKTsKICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzdHJ1
Y3R1cmVHUFIpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobm9kZS0+aXNJbnRlcm5h
bFByb21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkgOiBKU1Byb21pc2U6OmluZm8o
KSksIHNjcmF0Y2gxR1BSKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkpKTsKKyAgICBtX2pp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6
b2Zmc2V0T2ZDbGFzc0luZm8oKSksIHNjcmF0Y2gxR1BSKTsKKyNpZiBDUFUoQUREUkVTUzY0KQor
ICAgIG1faml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0
PHZvaWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKSwgc2NyYXRjaDFHUFIpOworI2VuZGlm
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaDFHUFIsIFRydXN0ZWRJbW1QdHIobm9kZS0+aXNJbnRlcm5hbFByb21pc2Uo
KSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkgOiBKU1Byb21pc2U6OmluZm8oKSkpKTsKICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGds
b2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkp
KTsKIApAQCAtMTI5MjUsOCArMTI5MzQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNyZWF0ZUludGVybmFsRmllbGRPYmplY3QoTm9kZSogbm9kZSwgT3BlcmF0aW9uIG9wZXIKICAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHJhcmVEYXRhR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZykpKTsKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJh
cmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxv
Y2F0aW9uUHJvZmlsZSgpICsgSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVHUFIp
OwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6
Olplcm8sIHN0cnVjdHVyZUdQUikpOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihKU0Ns
YXNzOjppbmZvKCkpLCBzY3JhdGNoMUdQUik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7
CisgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBT
dHJ1Y3R1cmU6Om9mZnNldE9mQ2xhc3NJbmZvKCkpLCBzY3JhdGNoMUdQUik7CisjaWYgQ1BVKEFE
RFJFU1M2NCkKKyAgICBtX2ppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJp
dHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSksIHNjcmF0Y2gxR1BS
KTsKKyNlbmRpZgorICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKEpTQ2xhc3M6OmluZm8o
KSkpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0Lmdy
YXBoKCksIGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaAppbmRleCBiMTA4YWJmY2NiODk1OGE4MzA3YzBhYTc4Y2Q2
N2YyMDJkM2I4YzVjLi44MzI5Yjc2YzU5N2FjNjNjM2YzYjIyMzhiN2YyM2IxMzVjZTJlYmU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaApAQCAtMTM5LDExICsxMzksMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgewogICAgIG1hY3JvKFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNl
dCgpKSBcCiAgICAgbWFjcm8oU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MsIFN0cmluZ0ltcGw6OmZs
YWdzT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2xlbmd0aCwgU3RyaW5nSW1wbDo6
bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpIFwKLSAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJbmZvLCBT
dHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCisgICAgbWFjcm8oU3RydWN0dXJlX2NsYXNz
SW5mbywgU3RydWN0dXJlOjpvZmZzZXRPZkNsYXNzSW5mbygpKSBcCiAgICAgbWFjcm8oU3RydWN0
dXJlX2dsb2JhbE9iamVjdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAg
IG1hY3JvKFN0cnVjdHVyZV9pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5LCBTdHJ1Y3R1cmU6
OmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVj
dHVyZV9pbmxpbmVDYXBhY2l0eSwgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSBc
Ci0gICAgbWFjcm8oU3RydWN0dXJlX3ByZXZpb3VzT3JSYXJlRGF0YSwgU3RydWN0dXJlOjpwcmV2
aW91c09yUmFyZURhdGFPZmZzZXQoKSkgXAorICAgIG1hY3JvKFN0cnVjdHVyZV9pbmxpbmVDYXBh
Y2l0eSwgU3RydWN0dXJlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpIFwKKyAgICBtYWNybyhT
dHJ1Y3R1cmVfcHJldmlvdXNPclJhcmVEYXRhLCBTdHJ1Y3R1cmU6Om9mZnNldE9mUHJldmlvdXNP
clJhcmVEYXRhKCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfcHJvdG90eXBlLCBTdHJ1Y3R1cmU6
OnByb3RvdHlwZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3N0cnVjdHVyZUlELCBT
dHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVSYXJl
RGF0YV9jYWNoZWRPd25LZXlzLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6b2Zmc2V0T2ZDYWNoZWRPd25L
ZXlzKCkpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAppbmRleCA0ZDM0MjdiYzgyZThjOWIyNDdhYzg3MWEwMjAwMDFiYjIzODI5ZjI2Li43YTkwOThi
ODllYzk3MTlkOGNhYmY1YTBiNjFiYjI3YWU4Y2Q4ZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC02MDkxLDcgKzYwOTEsNyBAQCBjbGFz
cyBMb3dlckRGR1RvQjMgewogCiAgICAgICAgICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd09i
amVjdChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBMVmFsdWUgc3RydWN0dXJl
ID0gbG9hZFN0cnVjdHVyZShvYmplY3QpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBwcmV2aW91
c09yUmFyZURhdGEgPSBtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVf
cHJldmlvdXNPclJhcmVEYXRhKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgcHJldmlvdXNPclJh
cmVEYXRhID0gbV9vdXQuYml0QW5kKG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6cHJldmlv
dXNPclJhcmVEYXRhTWFzayksIG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVj
dHVyZV9wcmV2aW91c09yUmFyZURhdGEpKTsKICAgICAgICAgICAgICAgICBtX291dC5icmFuY2go
bV9vdXQubm90TnVsbChwcmV2aW91c09yUmFyZURhdGEpLCB1bnN1cmUobm90TnVsbENhc2UpLCB1
bnN1cmUoc2xvd0Nhc2UpKTsKIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8obm90TnVsbENhc2UsIHJhcmVEYXRhQ2FzZSk7CkBAIC02Njc1LDcg
KzY2NzUsOCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBtX291dC5icmFuY2gobV9v
dXQuaXNaZXJvNjQoc3RydWN0dXJlKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShoYXNTdHJ1
Y3R1cmUpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhoYXNTdHJ1Y3R1cmUsIGNoZWNrR2xv
YmFsT2JqZWN0Q2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChtX291dC5s
b2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29u
c3RJbnRQdHIobV9ub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gSlNJbnRlcm5hbFByb21pc2U6
OmluZm8oKSA6IEpTUHJvbWlzZTo6aW5mbygpKSksIHVzdWFsbHkoY2hlY2tHbG9iYWxPYmplY3RD
YXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291
dC5iaXRBbmQobV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX2NsYXNz
SW5mbyksIG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFzaykpOworICAg
ICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0
cihtX25vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygp
IDogSlNQcm9taXNlOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCBy
YXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0dsb2JhbE9i
amVjdENhc2UsIGZhc3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGRl
cml2ZWRTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3Ioc3RydWN0dXJlKTsKQEAgLTY3MzAsNyArNjcz
MSw4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5p
c1plcm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVy
ZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0cnVjdHVyZSwgY2hlY2tHbG9iYWxP
YmplY3RDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQ
dHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5jb25zdElu
dFB0cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCBy
YXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmJpdEFu
ZChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKSwg
bV9vdXQuY29uc3RJbnRQdHIoU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSk7CisgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5lcXVhbChjbGFzc0luZm8sIG1fb3V0LmNvbnN0SW50UHRyKEpTQ2xh
c3M6OmluZm8oKSkpLCB1c3VhbGx5KGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSksIHJhcmVseShzbG93
Q2FzZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSwg
ZmFzdEFsbG9jYXRpb25DYXNlKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1f
b3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9nbG9iYWxPYmplY3QpLCB3
ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpKSwgdXN1YWxseShmYXN0QWxsb2NhdGlvbkNhc2UpLCBy
YXJlbHkoc2xvd0Nhc2UpKTsKQEAgLTEzMjA4LDcgKzEzMjEwLDcgQEAgY2xhc3MgTG93ZXJERkdU
b0IzIHsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Js
b2NrKCk7CiAKICAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKGNl
bGwpOwotICAgICAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmxvYWRQdHIoc3RydWN0
dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pOworICAgICAgICAgICAgTFZhbHVlIGNs
YXNzSW5mbyA9IG1fb3V0LmJpdEFuZChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5T
dHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIoU3RydWN0dXJlOjpjbGFzc0lu
Zm9NYXNrKSk7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvdGhlckF0U3RhcnQgPSBtX291
dC5hbmNob3IoY2xhc3NJbmZvKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDdmMzU4YzEyMDNiZGVh
ZTkwZDQ0YTJjN2ZiODg5OTc4MDg5Y2E4NWYuLmZkZTAwYmNjOGM5MDQ1OWM3NTM0NTA2MmE2MTFk
YzFkZTQyOWNmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApA
QCAtOTc5LDcgKzk3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwog
ICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBlbWl0QWxs
b2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2Nh
dG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsK
LSAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcs
IFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7CiAgICAg
ZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAppbmRleCBjZDY2N2IyZTU4NzgyMGUzNzM1Y2QzODEzOTM2Zjk2YTk4Yzc5NjZhLi5iMTFm
NjU1ZmNiNmY2NjA1NTI3OTljMTJhMTBjY2JmOTE5MGU4NjIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBhdXRvIGJ1dHRlcmZseSA9
IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVn
LCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgbG9hZDgoQWRkcmVzcyhz
dHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hS
ZWcpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6Om9mZnNldE9m
SW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CiAgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCmluZGV4
IDk2YTM2MzVlNjgyNzM5M2VlODM2ZDgwNDc3NzI0YTI1ZDU0NmMyNjEuLjI0OWJhNWFhYzUxZTUw
OTBjZjIzZjdmOWU4ZTllNDdiYzIxZWY0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIFN0cnVj
dHVyZSogQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENsb25lZEFyZ3Vt
ZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBpbmRleGluZ1R5cGUpOwogICAgIHN0
cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKICAgICAgICAgdm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSksCi0gICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQp
IHsKKyAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCA9PSBjbG9uZWRBcmd1bWVudHNMZW5ndGhQcm9w
ZXJ0eU9mZnNldCk7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnNldE1heE9mZnNldCh2bSwgbmV3
TWF4T2Zmc2V0KTsKICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25jdXJyZW50SlNMb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25jdXJyZW50SlNMb2NrLmgKaW5kZXggYWEyNzNiYWRiZWZhNzM3YTBlYWE1MzRmYmVi
YTlmNTAxZmRiODYyNy4uOTVlYmEwYmYzZjlhMjAwNWI2NDUyZWFkZjdjZTBhNDI1Y2E1NmE0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpTTG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2su
aApAQCAtMzMsMTggKzMzLDE4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdXNpbmcgQ29uY3VycmVu
dEpTTG9jayA9IExvY2s7Ci11c2luZyBDb25jdXJyZW50SlNMb2NrZXJJbXBsID0gTG9ja0hvbGRl
cjsKIAogc3RhdGljX2Fzc2VydChzaXplb2YoQ29uY3VycmVudEpTTG9jaykgPT0gMSwgIlJlZ2Fy
ZGxlc3Mgb2Ygc3RhdHVzIG9mIGNvbmN1cnJlbnQgSlMgZmxhZywgc2l6ZSBvZiBDb251cnJlbnRK
U0xvY2sgaXMgYWx3YXlzIG9uZSBieXRlLiIpOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrPgog
Y2xhc3MgQ29uY3VycmVudEpTTG9ja2VyQmFzZSA6IHB1YmxpYyBBYnN0cmFjdExvY2tlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uY3VycmVudEpTTG9ja2VyQmFzZSk7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9ja2VyQmFzZShDb25jdXJyZW50SlNMb2NrJiBs
b2NrYWJsZSkKKyAgICBleHBsaWNpdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlKExvY2smIGxvY2th
YmxlKQogICAgICAgICA6IG1fbG9ja2VyKCZsb2NrYWJsZSkKICAgICB7CiAgICAgfQotICAgIGV4
cGxpY2l0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoQ29uY3VycmVudEpTTG9jayogbG9ja2FibGUp
CisgICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9ja2VyQmFzZShMb2NrKiBsb2NrYWJsZSkKICAg
ICAgICAgOiBtX2xvY2tlcihsb2NrYWJsZSkKICAgICB7CiAgICAgfQpAQCAtNjQsNjMgKzY0LDY1
IEBAIGNsYXNzIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgOiBwdWJsaWMgQWJzdHJhY3RMb2NrZXIg
ewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb25jdXJyZW50SlNMb2NrZXJJbXBsIG1fbG9ja2Vy
OworICAgIExvY2tlcjxMb2NrPiBtX2xvY2tlcjsKIH07CiAKLWNsYXNzIEdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlciA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIHsKK3RlbXBsYXRlPHR5
cGVuYW1lIExvY2s+CitjbGFzcyBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsIDogcHVibGlj
IENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4gewogcHVibGljOgotICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrJiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKLSAg
ICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlckltcGwoTG9jayYgbG9ja2FibGUsIEhlYXAmIGhlYXApCisgICAgICAgIDog
Q29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPihsb2NrYWJsZSkKICAgICAgICAgLCBtX2RlZmVy
R0MoaGVhcCkKICAgICB7CiAgICAgfQogCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKENv
bmN1cnJlbnRKU0xvY2sqIGxvY2thYmxlLCBIZWFwJiBoZWFwKQotICAgICAgICA6IENvbmN1cnJl
bnRKU0xvY2tlckJhc2UobG9ja2FibGUpCisgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1w
bChMb2NrKiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlPExvY2s+KGxvY2thYmxlKQogICAgICAgICAsIG1fZGVmZXJHQyhoZWFwKQogICAgIHsK
ICAgICB9CiAKLSAgICB+R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKCkKKyAgICB+R0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VySW1wbCgpCiAgICAgewogICAgICAgICAvLyBXZSBoYXZlIHRvIHVubG9j
ayBlYXJseSBkdWUgdG8gdGhlIGRlc3RydWN0aW9uIG9yZGVyIG9mIGJhc2UKICAgICAgICAgLy8g
dnMuIGRlcml2ZWQgY2xhc3Nlcy4gSWYgd2UgZGlkbid0LCB0aGVuIHdlIHdvdWxkIGRlc3Ryb3kg
dGhlIAogICAgICAgICAvLyBEZWZlckdDIG9iamVjdCBiZWZvcmUgdW5sb2NraW5nIHRoZSBsb2Nr
IHdoaWNoIGNvdWxkIGNhdXNlIGEgR0MKICAgICAgICAgLy8gYW5kIHJlc3VsdGluZyBkZWFkbG9j
ay4KLSAgICAgICAgdW5sb2NrRWFybHkoKTsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyQmFz
ZTxMb2NrPjo6dW5sb2NrRWFybHkoKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgRGVmZXJHQyBt
X2RlZmVyR0M7CiB9OwogCi1jbGFzcyBDb25jdXJyZW50SlNMb2NrZXIgOiBwdWJsaWMgQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZSB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrPgorY2xhc3MgQ29uY3Vy
cmVudEpTTG9ja2VySW1wbCA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+IHsK
IHB1YmxpYzoKLSAgICBDb25jdXJyZW50SlNMb2NrZXIoQ29uY3VycmVudEpTTG9jayYgbG9ja2Fi
bGUpCi0gICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJsZSkKKyAgICBDb25j
dXJyZW50SlNMb2NrZXJJbXBsKExvY2smIGxvY2thYmxlKQorICAgICAgICA6IENvbmN1cnJlbnRK
U0xvY2tlckJhc2U8TG9jaz4obG9ja2FibGUpCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgICAg
ICAsIG1fZGlzYWxsb3dHQyhzdGQ6OmluX3BsYWNlKQogI2VuZGlmCiAgICAgewogICAgIH0KIAot
ICAgIENvbmN1cnJlbnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrKiBsb2NrYWJsZSkKLSAgICAg
ICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAgIENvbmN1cnJlbnRKU0xv
Y2tlckltcGwoTG9jayogbG9ja2FibGUpCisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFz
ZTxMb2NrPihsb2NrYWJsZSkKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgICAgICwgbV9kaXNh
bGxvd0dDKHN0ZDo6aW5fcGxhY2UpCiAjZW5kaWYKICAgICB7CiAgICAgfQogCi0gICAgQ29uY3Vy
cmVudEpTTG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKLSAgICAgICAgOiBDb25jdXJyZW50
SlNMb2NrZXJCYXNlKE5vTG9ja2luZ05lY2Vzc2FyeSkKKyAgICBDb25jdXJyZW50SlNMb2NrZXJJ
bXBsKE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJC
YXNlPExvY2s+KE5vTG9ja2luZ05lY2Vzc2FyeSkKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAg
ICAgICwgbV9kaXNhbGxvd0dDKFdURjo6bnVsbG9wdCkKICNlbmRpZgogICAgIHsKICAgICB9CiAg
ICAgCi0gICAgQ29uY3VycmVudEpTTG9ja2VyKGludCkgPSBkZWxldGU7CisgICAgQ29uY3VycmVu
dEpTTG9ja2VySW1wbChpbnQpID0gZGVsZXRlOwogCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogcHJp
dmF0ZToKQEAgLTEyOCw0ICsxMzAsNyBAQCBjbGFzcyBDb25jdXJyZW50SlNMb2NrZXIgOiBwdWJs
aWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZSB7CiAjZW5kaWYKIH07CiAKK3VzaW5nIENvbmN1cnJl
bnRKU0xvY2tlciA9IENvbmN1cnJlbnRKU0xvY2tlckltcGw8Q29uY3VycmVudEpTTG9jaz47Cit1
c2luZyBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgPSBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJ
bXBsPENvbmN1cnJlbnRKU0xvY2s+OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKaW5kZXggNjY1ZDA4ODljZjQ0NjFjM2FiMGEyYWY0YjA3
YzZhNThjOTA0MjFjNC4uZDU2NTZmOGJmZGZmNjMyOTkyYWMxZGE0NTFlMzVjMWE1NDhkNDY3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKQEAgLTI0LDYgKzI0LDcgQEAK
IAogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCisjaW5jbHVk
ZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkNvbnN0cnVjdERhdGEuaCIKICNpbmNs
dWRlICJFbnVtZXJhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0yODgsNiArMjg5
LDkgQEAgY2xhc3MgSlNDZWxsTG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgdW5sb2NrU2xvdygpOwogfTsKIAordXNpbmcgQ29uY3VycmVudEpTQ2VsbExv
Y2tlciA9IENvbmN1cnJlbnRKU0xvY2tlckltcGw8SlNDZWxsTG9jaz47Cit1c2luZyBHQ1NhZmVD
b25jdXJyZW50SlNDZWxsTG9ja2VyID0gR0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbDxKU0Nl
bGxMb2NrPjsKKwogLy8gRklYTUU6IFJlZmVyIHRvIFN1YnNwYWNlIGJ5IHJlZmVyZW5jZS4KIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5ODgKIHRlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAKaW5kZXggYWNkMjlkZWQ4MTM1MWZiMjg0YjIxNTlhZDQ3YTYzMWMzNDk0ZjFkZi4uM2E1MTIx
ZDY5ZGZiNGZiMmZiOWY4ODVjYTdmZjNmZTU1YzA0ZGQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcApAQCAtMjAwNSw3ICsyMDA1LDcgQEAgYm9vbCBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXIKIAogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlk
T2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CisgICAgICAgICAg
ICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0s
IHByb3BlcnR5TmFtZSwgW10oY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFBy
b3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgJmRlZmVycmVkV2F0Y2hwb2ludEZp
cmUpOwogICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5ICYmICFzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIXN0cnVjdHVyZS0+aGFzSW5kZXhpbmdIZWFkZXIo
dGhpc09iamVjdCkpIHsKQEAgLTM3NjYsNyArMzc2Niw3IEBAIHZvaWQgSlNPYmplY3Q6OmNvbnZl
cnRUb0RpY3Rpb25hcnkoVk0mIHZtKQogICAgICAgICB2bSwgU3RydWN0dXJlOjp0b0NhY2hlYWJs
ZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCAmZGVmZXJyZWRXYXRjaHBv
aW50RmlyZSkpOwogfQogCi12b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRl
bmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKK3ZvaWQgSlNPYmplY3Q6
OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0Nl
bGxMb2NrZXImLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5l
Q2FwYWNpdHlBZnRlcikKIHsKICAgICAvLyBUaGlzIGNvdWxkIGludGVybGVhdmUgdmlzaXRDaGls
ZHJlbiBiZWNhdXNlIHNvbWUgb2xkIHN0cnVjdHVyZSBjb3VsZCBoYXZlIGJlZW4gYSBub24KICAg
ICAvLyBkaWN0aW9uYXJ5IHN0cnVjdHVyZS4gV2UgaGF2ZSB0byBiZSBjcmF6eSBjYXJlZnVsLiBC
dXQsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGJlIGhvbGRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCmluZGV4IGVjNjMwMGVhOWI5NzJjZTliYTBmYWQ4MTgyNTdhZmIy
MGQ4MmEyZWQuLjY1MTE2MGJlMGIwMTc4NzBjZTkwOTZiZjkyYTU1ZGNmMGU2Y2RiYmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaApAQCAtODE1LDcgKzgxNSw3IEBA
IGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICBzdHJ1Y3R1
cmUodm0pLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhpcyk7CiAgICAgfQotICAg
IHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVu
dEpTTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNh
cGFjaXR5QWZ0ZXIpOworICAgIHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29u
c3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFZNJiwgU3RydWN0dXJlKiwgc2l6ZV90
IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCgpIGNvbnN0CiAgICAgewpAQCAtMTMyOSw3ICsxMzI5LDcgQEAgaW5saW5lIEpTVmFsdWUg
SlNPYmplY3Q6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiAvLyBmbGF0dGVuIGFuIG9iamVjdC4KIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXRE
aXJlY3RDb25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkgY29uc3QKIHsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+
bG9jaygpKTsKKyAgICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNl
bGxMb2NrKCkpOwogICAgIGlmICghc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJuIGdldERpcmVjdChvZmZzZXQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAppbmRleCBhNjcw
MDM0N2Y2OTc2ZTYxYjA1ZGIxOGYyYjA5NmFhYTc5ZTJlYmIzLi45NWE2NzEwYzJlMzU2ODQzNmQ1
Y2NhMjhjODZiMmRjOTRkOGE4ODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdElubGluZXMuaApAQCAtMjE2LDcgKzIxNiw3IEBAIEFMV0FZU19JTkxJTkUg
UHJvcGVydHlPZmZzZXQgSlNPYmplY3Q6OnByZXBhcmVUb1B1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKFZNJiB2CiAgICAgUHJvcGVydHlPZmZzZXQgcmVzdWx0OwogICAgIHN0cnVjdHVyZS0+YWRk
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywKLSAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAg
ICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewogICAgICAgICAgICAg
dW5zaWduZWQgbmV3T3V0T2ZMaW5lQ2FwYWNpdHkgPSBTdHJ1Y3R1cmU6Om91dE9mTGluZUNhcGFj
aXR5KG5ld01heE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobmV3T3V0T2ZMaW5lQ2FwYWNpdHkg
IT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKICAgICAgICAgICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9mTGluZUNh
cGFjaXR5LCBuZXdPdXRPZkxpbmVDYXBhY2l0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAppbmRleCBlZGE0NDZiZmJlMjY3YWIwMWI4NTJlMTVmZGU5Yzlj
MzBlNmY1OGU2Li5hMDJkY2E5MWIyYzBiNjM0YjllZGI2MzAwYmM4ZWQ4MDNjNzE4MDU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKQEAgLTU1LDEwICs1
NSwxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJ1Y3R1cmUqPiYgbGl2ZVN0cnVjdHVyZVNldCA9ICoo
bmV3IEhhc2hTZXQ8U3RydWN0dXJlKj4pOwogY2xhc3MgU2luZ2xlU2xvdFRyYW5zaXRpb25XZWFr
T3duZXIgZmluYWwgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICB2b2lkIGZpbmFsaXpl
KEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAg
IEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQo
KSk7CiAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSogdGFibGUgPSByZWludGVycHJl
dF9jYXN0PFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSo+KGNvbnRleHQpOwogICAgICAgICBBU1NF
UlQodGFibGUtPmlzVXNpbmdTaW5nbGVTbG90KCkpOwogICAgICAgICBXZWFrU2V0OjpkZWFsbG9j
YXRlKHRhYmxlLT53ZWFrSW1wbCgpKTsKLSAgICAgICAgdGFibGUtPm1fZGF0YSA9IFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZTo6VXNpbmdTaW5nbGVTbG90RmxhZzsKKyAgICAgICAgdGFibGUtPm1f
ZGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpV
c2luZ1NpbmdsZVNsb3RGbGFnKTsKICAgICB9CiB9OwogCkBAIC03MCw2ICs3MSw3IEBAIHN0YXRp
YyBTaW5nbGVTbG90VHJhbnNpdGlvbldlYWtPd25lciYgc2luZ2xlU2xvdFRyYW5zaXRpb25XZWFr
T3duZXIoKQogCiBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OnNp
bmdsZVRyYW5zaXRpb24oKSBjb25zdAogeworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVh
ZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CiAgICAgQVNTRVJUKGlzVXNpbmdTaW5n
bGVTbG90KCkpOwogICAgIGlmIChXZWFrSW1wbCogaW1wbCA9IHRoaXMtPndlYWtJbXBsKCkpIHsK
ICAgICAgICAgaWYgKGltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpCkBAIC04MCwzMyAr
ODIsMzcgQEAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzaW5n
bGVUcmFuc2l0aW9uKCkgY29uc3QKIAogaW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlOjpzZXRTaW5nbGVUcmFuc2l0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlKQogeworICAgIEFT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7
CiAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwogICAgIGlmIChXZWFrSW1wbCogaW1w
bCA9IHRoaXMtPndlYWtJbXBsKCkpCiAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUoaW1wbCk7
CiAgICAgV2Vha0ltcGwqIGltcGwgPSBXZWFrU2V0OjphbGxvY2F0ZShzdHJ1Y3R1cmUsICZzaW5n
bGVTbG90VHJhbnNpdGlvbldlYWtPd25lcigpLCB0aGlzKTsKLSAgICBtX2RhdGEgPSBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KGltcGwpIHwgVXNpbmdTaW5nbGVTbG90RmxhZzsKKyAgICBtX2RhdGEg
PSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oaW1wbCkgfCBV
c2luZ1NpbmdsZVNsb3RGbGFnKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6
OmNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJv
b2wgaXNBZGRpdGlvbikgY29uc3QKIHsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xv
dCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24o
KTsKLSAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9u
UHJvcGVydHlOYW1lID09IHJlcCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlBdHRy
aWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0aW9uLT5pc1Byb3BlcnR5RGVsZXRpb25U
cmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb247CisgICAgICAgIHJldHVybiB0cmFuc2l0aW9uICYm
IHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUoKSA9PSByZXAgJiYgdHJhbnNpdGlv
bi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNp
dGlvbi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbigpID09ICFpc0FkZGl0aW9uOwogICAg
IH0KICAgICByZXR1cm4gbWFwKCktPmdldChTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6
OktleShyZXAsIGF0dHJpYnV0ZXMsIGlzQWRkaXRpb24pKTsKIH0KIAogaW5saW5lIFN0cnVjdHVy
ZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwg
dW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uKSBjb25zdAogeworICAgIEFTU0VS
VCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CiAg
ICAgaWYgKGlzVXNpbmdTaW5nbGVTbG90KCkpIHsKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0
aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwotICAgICAgICByZXR1cm4gKHRyYW5zaXRpb24gJiYg
dHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID09IHJlcCAmJiB0cmFuc2l0aW9u
LT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0
aW9uLT5pc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb24pID8gdHJh
bnNpdGlvbiA6IDA7CisgICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT50
cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Q
cm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0cmFuc2l0aW9uIDogbnVs
bHB0cjsKICAgICB9CiAgICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlOjpIYXNoOjpLZXkocmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CiB9CiAKIHZvaWQg
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKIHsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlC
ZUdDVGhyZWFkKCkpOwogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAgIFN0
cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwogCkBAIC0x
MjMsNyArMTI5LDcgQEAgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZChWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIH0KIAogICAgIC8vIEFkZCB0aGUgc3RydWN0dXJl
IHRvIHRoZSBtYXAuCi0gICAgbWFwKCktPnNldChTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhh
c2g6OktleShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0
dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCksICFzdHJ1Y3R1cmUtPmlzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVyZSk7CisgICAgbWFwKCktPnNldChTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6OktleShzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCksICFz
dHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVyZSk7CiB9
CiAKIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCkBAIC0xNTEsNyArMTU3LDcgQEAg
dm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVy
ZS0+cHJvcGVydHlUYWJsZU9yTnVsbCgpKSB7CisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0
YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKSB7CiAgICAgICAg
ICAgICArK251bWJlcldpdGhQcm9wZXJ0eU1hcHM7CiAgICAgICAgICAgICB0b3RhbFByb3BlcnR5
TWFwc1NpemUgKz0gdGFibGUtPnNpemVJbk1lbW9yeSgpOwogICAgICAgICB9CkBAIC0xNzQsMTUg
KzE4MCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogU3RydWN0dXJlOjpT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkp
CiAgICAgOiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1f
YmxvYih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCBpbmRleGlu
Z1R5cGUsIHR5cGVJbmZvKQotICAgICwgbV9vdXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8ub3V0
T2ZMaW5lVHlwZUZsYWdzKCkpCi0gICAgLCBtX2lubGluZUNhcGFjaXR5KGlubGluZUNhcGFjaXR5
KQotICAgICwgbV9iaXRGaWVsZCgwKQogICAgICwgbV9nbG9iYWxPYmplY3Qodm0sIHRoaXMsIGds
b2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQogICAg
ICwgbV9wcm90b3R5cGUodm0sIHRoaXMsIHByb3RvdHlwZSkKLSAgICAsIG1fY2xhc3NJbmZvKGNs
YXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQotICAg
ICwgbV9wcm9wZXJ0eUhhc2goMCkKIHsKKyAgICBzZXRJbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBh
Y2l0eSk7CisgICAgc2V0Q2xhc3NJbmZvKGNsYXNzSW5mbyk7CiAgICAgc2V0RGljdGlvbmFyeUtp
bmQoTm9uZURpY3Rpb25hcnlLaW5kKTsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUoZmFs
c2UpOwogICAgIHNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXMoY2xhc3NJbmZvLT5oYXNTdGF0
aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKQEAgLTIwMCwzMSArMjAzLDMwIEBAIFN0
cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUsIGNvCiAgICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlv
bihmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAg
ICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKLSAKKyAgICBzZXRPdXRPZkxpbmVU
eXBlRmxhZ3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpOworCiAgICAgQVNTRVJUKGlu
bGluZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4oaW5saW5lQ2FwYWNpdHkpIDwgZmly
c3RPdXRPZkxpbmVPZmZzZXQpOwogICAgIEFTU0VSVCghaGFzUmFyZURhdGEoKSk7Ci0gICAgQVNT
RVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8
fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwot
ICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwgIW1fY2xhc3NJbmZvLT5o
YXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NFUlQoIXRoaXMt
PnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBtX2NsYXNzSW5mby0+bWV0aG9k
VGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEpOworICAgIEFTU0VSVCho
YXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIXRo
aXMtPmNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsK
KyAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICF0aGlzLT5jbGFzc0lu
Zm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJU
KCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgdGhpcy0+Y2xhc3NJ
bmZvKCktPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsK
IH0KIAogY29uc3QgQ2xhc3NJbmZvIFN0cnVjdHVyZTo6c19pbmZvID0geyAiU3RydWN0dXJlIiwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShTdHJ1Y3R1cmUp
IH07CiAKIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAgICA6IEpTQ2VsbChDcmVhdGlu
Z0Vhcmx5Q2VsbCkKLSAgICAsIG1faW5saW5lQ2FwYWNpdHkoMCkKLSAgICAsIG1fYml0RmllbGQo
MCkKICAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBqc051bGwoKSkKLSAgICAsIG1fY2xhc3NJ
bmZvKGluZm8oKSkKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQot
ICAgICwgbV9wcm9wZXJ0eUhhc2goMCkKIHsKKyAgICBzZXRJbmxpbmVDYXBhY2l0eSgwKTsKKyAg
ICBzZXRDbGFzc0luZm8oaW5mbygpKTsKICAgICBzZXREaWN0aW9uYXJ5S2luZChOb25lRGljdGlv
bmFyeUtpbmQpOwogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZShmYWxzZSk7Ci0gICAgc2V0
SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JS
ZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhj
bGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CiAgICAg
c2V0SGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcyhmYWxzZSk7Ci0gICAgc2V0SGFzUmVh
ZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhtX2NsYXNzSW5mby0+
aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgc2V0SGFzUmVhZE9u
bHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhjbGFzc0luZm8oKS0+aGFz
U3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CiAgICAgc2V0SGFzVW5kZXJzY29y
ZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKGZhbHNlKTsKICAgICBzZXRJc1F1
aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24odHJ1ZSk7CiAgICAgc2V0VHJh
bnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygwKTsKQEAgLTI0MCwyMyArMjQyLDI2IEBAIFN0cnVj
dHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAKICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyk7CiAgICAgbV9ibG9iID0gU3RydWN0dXJlSURC
bG9iKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQodGhpcyksIDAsIHR5cGVJ
bmZvKTsKLSAgICBtX291dE9mTGluZVR5cGVGbGFncyA9IHR5cGVJbmZvLm91dE9mTGluZVR5cGVG
bGFncygpOworICAgIHNldE91dE9mTGluZVR5cGVGbGFncyh0eXBlSW5mby5vdXRPZkxpbmVUeXBl
RmxhZ3MoKSk7CiAKLSAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRp
ZXNFeGNsdWRpbmdQcm90bygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFk
b25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMo
KSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkp
OwotICAgIEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8
IG1fY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxs
RGF0YSk7CisgICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhj
bHVkaW5nUHJvdG8oKSB8fCAhY2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQ
cm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwg
IWNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKKyAg
ICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBjbGFz
c0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEp
OwogfQogCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMs
IERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKICAg
ICA6IEpTQ2VsbCh2bSwgdm0uc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9pbmxp
bmVDYXBhY2l0eShwcmV2aW91cy0+bV9pbmxpbmVDYXBhY2l0eSkKLSAgICAsIG1fYml0RmllbGQo
MCkKLSAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBwcmV2aW91cy0+bV9wcm90b3R5cGUuZ2V0
KCkpCi0gICAgLCBtX2NsYXNzSW5mbyhwcmV2aW91cy0+bV9jbGFzc0luZm8pCi0gICAgLCBtX3Ry
YW5zaXRpb25XYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKKyNpZiBDUFUoQUREUkVTUzY0KQorICAg
ICwgbV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydGllcyhwcmV2aW91cy0+bV9wcm9wZXJ0eUhh
c2hBbmRTZWVuUHJvcGVydGllcykKKyNlbHNlCiAgICAgLCBtX3Byb3BlcnR5SGFzaChwcmV2aW91
cy0+bV9wcm9wZXJ0eUhhc2gpCiAgICAgLCBtX3NlZW5Qcm9wZXJ0aWVzKHByZXZpb3VzLT5tX3Nl
ZW5Qcm9wZXJ0aWVzKQorI2VuZGlmCisgICAgLCBtX3Byb3RvdHlwZSh2bSwgdGhpcywgcHJldmlv
dXMtPm1fcHJvdG90eXBlLmdldCgpKQorICAgICwgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldChJ
c1dhdGNoZWQpCiB7CisgICAgc2V0SW5saW5lQ2FwYWNpdHkocHJldmlvdXMtPmlubGluZUNhcGFj
aXR5KCkpOworICAgIHNldENsYXNzSW5mbyhwcmV2aW91cy0+Y2xhc3NJbmZvKCkpOwogICAgIHNl
dERpY3Rpb25hcnlLaW5kKHByZXZpb3VzLT5kaWN0aW9uYXJ5S2luZCgpKTsKICAgICBzZXRJc1Bp
bm5lZFByb3BlcnR5VGFibGUoZmFsc2UpOwogICAgIHNldEhhc0JlZW5GbGF0dGVuZWRCZWZvcmUo
cHJldmlvdXMtPmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUoKSk7CkBAIC0yNzcsNyArMjgyLDcgQEAg
U3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJl
ZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQKICAKICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHByZXZp
b3VzLT50eXBlSW5mbygpOwogICAgIG1fYmxvYiA9IFN0cnVjdHVyZUlEQmxvYih2bS5oZWFwLnN0
cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCBwcmV2aW91cy0+aW5kZXhpbmdNb2Rl
SW5jbHVkaW5nSGlzdG9yeSgpLCB0eXBlSW5mbyk7Ci0gICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3Mg
PSB0eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxhZ3MoKTsKKyAgICBzZXRPdXRPZkxpbmVUeXBlRmxh
Z3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpOwogCiAgICAgQVNTRVJUKCFwcmV2aW91
cy0+dHlwZUluZm8oKS5zdHJ1Y3R1cmVJc0ltbW9ydGFsKCkpOwogICAgIHNldFByZXZpb3VzSUQo
dm0sIHByZXZpb3VzKTsKQEAgLTI4OSw5ICsyOTQsOSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShW
TSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldh
dAogCiAgICAgaWYgKHByZXZpb3VzLT5tX2dsb2JhbE9iamVjdCkKICAgICAgICAgbV9nbG9iYWxP
YmplY3Quc2V0KHZtLCB0aGlzLCBwcmV2aW91cy0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpOwotICAg
IEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3Rv
KCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygp
KTsKLSAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFtX2NsYXNzSW5m
by0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKCF0
aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgbV9jbGFzc0luZm8tPm1l
dGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKKyAgICBBU1NF
UlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8
ICFjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Cisg
ICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB8fCAhY2xhc3NJbmZvKCktPmhh
c1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVCghdGhpcy0+
dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8IGNsYXNzSW5mbygpLT5tZXRob2RU
YWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CiB9CiAKIFN0cnVjdHVy
ZTo6flN0cnVjdHVyZSgpCkBAIC0zMTMsNyArMzE4LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmNyZWF0ZShQb2x5UHJvdG9UYWcsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwKICAgICB1bnNpZ25lZCBvbGRPdXRPZkxpbmVDYXBhY2l0eSA9IHJlc3VsdC0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKICAgICByZXN1bHQtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCiAg
ICAgICAgIHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wb2x5UHJvdG9OYW1l
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLAot
ICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIFsmXSAo
Y29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChTdHJ1Y3R1cmU6Om91dE9mTGluZUNhcGFjaXR5KG5ld01heE9mZnNldCkgPT0gb2xkT3V0
T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09IGtu
b3duUG9seVByb3RvT2Zmc2V0KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW5saW5l
T2Zmc2V0KGtub3duUG9seVByb3RvT2Zmc2V0KSk7CkBAIC0zMjksMjMgKzMzNCwyMyBAQCBib29s
IFN0cnVjdHVyZTo6aXNWYWxpZFByb3RvdHlwZShKU1ZhbHVlIHByb3RvdHlwZSkKICAgICByZXR1
cm4gcHJvdG90eXBlLmlzTnVsbCgpIHx8IChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBwcm90b3R5
cGUuZ2V0T2JqZWN0KCktPm1heUJlUHJvdG90eXBlKCkpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6
ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oVmVjdG9yPFN0cnVjdHVyZSos
IDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIFByb3BlcnR5VGFibGUqJiB0
YWJsZSkKK3ZvaWQgU3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXph
dGlvbihWZWN0b3I8c3RkOjpwYWlyPFN0cnVjdHVyZSosIFVuaXF1ZWRTdHJpbmdJbXBsKj4sIDg+
JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIFByb3BlcnR5VGFibGUqJiB0YWJs
ZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlcy5pc0VtcHR5KCkpOwotICAgIHRhYmxlID0gMDsK
KyAgICB0YWJsZSA9IG51bGxwdHI7CiAKICAgICBmb3IgKHN0cnVjdHVyZSA9IHRoaXM7IHN0cnVj
dHVyZTsgc3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpIHsKLSAgICAgICAgc3Ry
dWN0dXJlLT5tX2xvY2subG9jaygpOworICAgICAgICBzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkubG9j
aygpOwogICAgICAgICAKLSAgICAgICAgdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVP
ck51bGwoKTsKKyAgICAgICAgdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVVbnNhZmVP
ck51bGwoKTsKICAgICAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgICAgICAvLyBMZWF2ZSB0aGUg
c3RydWN0dXJlIGxvY2tlZCwgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBkbyB0aGluZ3MgdG8gaXQg
YXRvbWljYWxseQogICAgICAgICAgICAgLy8gYmVmb3JlIGl0IGxvc2VzIGl0cyBwcm9wZXJ0eSB0
YWJsZS4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
c3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKLSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2su
dW5sb2NrKCk7CisgICAgICAgIHN0cnVjdHVyZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHN0cnVj
dHVyZSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlOYW1lQ29uY3VycmVudGx5KCkpKTsK
KyAgICAgICAgc3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwogICAgIH0KICAgICAKICAg
ICBBU1NFUlQoIXN0cnVjdHVyZSk7CkBAIC0zNTksMzggKzM2NCwzOSBAQCBQcm9wZXJ0eVRhYmxl
KiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0UHJv
cGVydHlUYWJsZQogICAgIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKLSAg
ICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKKyAgICBWZWN0b3I8c3RkOjpwYWly
PFN0cnVjdHVyZSosIFVuaXF1ZWRTdHJpbmdJbXBsKj4sIDg+IHN0cnVjdHVyZXM7CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmU7CiAgICAgUHJvcGVydHlUYWJsZSogdGFibGU7CiAgICAgCiAgICAg
ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oc3RydWN0dXJlcywgc3RydWN0
dXJlLCB0YWJsZSk7CiAgICAgCi0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBudW1iZXJPZlNsb3Rz
Rm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBtX2lubGluZUNhcGFjaXR5KTsKKyAgICB1bnNpZ25l
ZCBjYXBhY2l0eSA9IG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIGlubGlu
ZUNhcGFjaXR5KCkpOwogICAgIGlmICh0YWJsZSkgewogICAgICAgICB0YWJsZSA9IHRhYmxlLT5j
b3B5KHZtLCBjYXBhY2l0eSk7Ci0gICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwor
ICAgICAgICBzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHRhYmxlID0gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSk7CiAgICAgCiAg
ICAgLy8gTXVzdCBob2xkIHRoZSBsb2NrIG9uIHRoaXMgc3RydWN0dXJlLCBzaW5jZSB3ZSB3aWxs
IGJlIG1vZGlmeWluZyB0aGlzIHN0cnVjdHVyZSdzCiAgICAgLy8gcHJvcGVydHkgbWFwLiBXZSBk
b24ndCB3YW50IGdldENvbmN1cnJlbnRseSgpIHRvIHNlZSB0aGUgcHJvcGVydHkgbWFwIGluIGEg
aGFsZi1iYWtlZAogICAgIC8vIHN0YXRlLgotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2Vy
IGxvY2tlcihjZWxsTG9jaygpLCB2bS5oZWFwKTsKICAgICBpZiAoc2V0UHJvcGVydHlUYWJsZSkK
ICAgICAgICAgdGhpcy0+c2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOwogCiAgICAgZm9yIChz
aXplX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZXNbaV07Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUpCisgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV0uZmlyc3Q7CisgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB0cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gc3RydWN0dXJl
LT50cmFuc2l0aW9uUHJvcGVydHlOYW1lKCk7CisgICAgICAgIGlmICghdHJhbnNpdGlvblByb3Bl
cnR5TmFtZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgIGF1dG8gaXRlbSA9
IHRhYmxlLT5maW5kKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpKTsK
KyAgICAgICAgICAgIGF1dG8gaXRlbSA9IHRhYmxlLT5maW5kKHRyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgQVNTRVJUKGl0ZW0uZmlyc3QpOwogICAgICAgICAgICAgdGFibGUt
PnJlbW92ZShpdGVtKTsKICAgICAgICAgICAgIHRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KHN0cnVj
dHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9Ci0gICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpLCBzdHJ1
Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSk7CisgICAgICAgIFByb3BlcnR5
TWFwRW50cnkgZW50cnkodHJhbnNpdGlvblByb3BlcnR5TmFtZSwgc3RydWN0dXJlLT50cmFuc2l0
aW9uT2Zmc2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpKTsK
ICAgICAgICAgYXV0byBuZXh0T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0T2Zmc2V0LCBuZXh0
T2Zmc2V0ID09IHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKICAgICAgICAgYXV0byBy
ZXN1bHQgPSB0YWJsZS0+YWRkKGVudHJ5KTsKQEAgLTQwNSw4ICs0MTEsOCBAQCBQcm9wZXJ0eVRh
YmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0
UHJvcGVydHlUYWJsZQogICAgICAgICAgICAgZGF0YUxvZygiRm91bmQgc3RydWN0dXJlID0gIiwg
UmF3UG9pbnRlcihzdHJ1Y3R1cmUpLCAiXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coInN0cnVj
dHVyZXMgPSAiKTsKICAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAgICAgICAg
IGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiBzdHJ1Y3R1cmVzKQotICAgICAgICAgICAgICAg
IGRhdGFMb2coY29tbWEsIFJhd1BvaW50ZXIoc3RydWN0dXJlKSk7CisgICAgICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBzdHJ1Y3R1cmVzKQorICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEs
IFJhd1BvaW50ZXIocGFpci5maXJzdCkpOwogICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKICAg
ICAgICAgfSk7CiAgICAgCkBAIC00MjUsNyArNDMxLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVjdHVyZSog
c3QKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAgICB9CiAKLSAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3Bl
cnR5T2Zmc2V0JiBvZmZzZXQpCkBAIC00MzYsNyArNDQyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBz
dHJ1Y3QKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZz
ZXQpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7
CisgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5jZWxsTG9jaygp
KTsKICAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUlt
cGwoc3RydWN0dXJlLCB1aWQsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9CiAKQEAgLTQ5Nyw4ICs1
MDMsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBybwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwotCi0gICAg
dHJhbnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXRNYXlCZU51bGwodm0sIHRyYW5z
aXRpb24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSk7CisgICAgdHJh
bnNpdGlvbi0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4odm0sIHN0cnVjdHVyZS0+Y2FjaGVkUHJv
dG90eXBlQ2hhaW4oKSk7CiAgICAgCiAgICAgLy8gV2hpbGUgd2UgYXJlIGFkZGluZyB0aGUgcHJv
cGVydHksIHJlbWF0ZXJpYWxpemluZyB0aGUgcHJvcGVydHkgdGFibGUgaXMgc3VwZXIgd2VpcmQ6
IHdlIGFscmVhZHkKICAgICAvLyBoYXZlIGEgbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lIGFuZCB0
cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIGJ1dCB0aGUgbV90cmFuc2l0aW9uT2Zmc2V0IGlz
IHN0aWxsIHdyb25nLiBJZiB0aGUKQEAgLTUxMCwxMiArNTE1LDEyIEBAIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvCiAgICAgLy8gY2FzZSBhbGwgaXMgd2VsbC4gIElmIGl0IHdhc24ndCBmb3IgdGhl
IGxvY2ssIHRoZSBHQyB3b3VsZCBoYXZlIFRPQ1RPVTogaWYgY291bGQgcmVhZAogICAgIC8vIHBy
b3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nIGJlZm9yZSB3ZSBzZXQgaXQgdG8g
dHJ1ZSwgYW5kIHRoZW4gYmxvdyB0aGUgdGFibGUgYXdheSBhZnRlci4KICAgICB7Ci0gICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAgICAgICAg
Q29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2soKSk7CiAg
ICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9u
aW5nKHRydWUpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1l
KGxvY2tlciwgcHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICB9CiAKICAgICB0cmFuc2l0aW9uLT5t
X2Jsb2Iuc2V0SW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmluZGV4aW5n
TW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7Ci0gICAgdHJhbnNpdGlvbi0+
bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5z
aXRpb24tPnNldFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAg
dHJhbnNpdGlvbi0+c2V0UHJvcGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlU
YWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2
bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CkBAIC01MzAsNyArNTM1LDcgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm8KIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPnRyYW5zaXRpb25P
ZmZzZXQoKSwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgewotICAgICAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrLCB2bS5oZWFw
KTsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJl
LT5jZWxsTG9jaygpLCB2bS5oZWFwKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25U
YWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7CkBAIC01ODcsMTYgKzU5MiwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsCiAgICAgfQogCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBz
dHJ1Y3R1cmUsIGRlZmVycmVkKTsKLSAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNo
YWluLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3Rv
dHlwZUNoYWluLmdldCgpKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFp
bih2bSwgc3RydWN0dXJlLT5jYWNoZWRQcm90b3R5cGVDaGFpbigpKTsKIAogICAgIC8vIFdoaWxl
IHdlIGFyZSBkZWxldGluZyB0aGUgcHJvcGVydHksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0
YWJsZSBpcyBub3QgY2xlYXJlZC4KICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpTQ2VsbExvY2tl
ciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2soKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNl
dFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKHRydWUpOworICAgICAgICB0
cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGxvY2tlciwgcHJvcGVydHlOYW1l
LnVpZCgpKTsKICAgICB9CiAKICAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdNb2Rl
SW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnko
KSAmIH5Db3B5T25Xcml0ZSk7Ci0gICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlO
YW1lID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFi
bGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsK
ICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkp
OwogICAgIHRyYW5zaXRpb24tPnNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24odHJ1ZSk7
CkBAIC02MTIsNyArNjE3LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZU5ld1Byb3Bl
cnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLAogCiAgICAgY2hlY2tP
ZmZzZXQodHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCB0cmFuc2l0aW9uLT5pbmxpbmVD
YXBhY2l0eSgpKTsKICAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoc3RydWN0dXJlLT5tX2xvY2ssIHZtLmhlYXApOworICAgICAgICBHQ1NhZmVDb25jdXJyZW50
SlNDZWxsTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNlbGxMb2NrKCksIHZtLmhlYXApOwogICAg
ICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFkZCh2bSwgdHJhbnNpdGlvbik7CiAg
ICAgfQogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKQEAgLTYzMCw3
ICs2MzUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKUwogICAgIHRyYW5zaXRpb24tPm1fcHJv
dG90eXBlLnNldCh2bSwgdHJhbnNpdGlvbiwgcHJvdG90eXBlKTsKIAogICAgIFByb3BlcnR5VGFi
bGUqIHRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwot
ICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFi
bGUpOworICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxsTG9jaygp
KSwgdm0sIHRhYmxlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVy
ZS0+bWF4T2Zmc2V0KCkpOwogICAgIAogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKTsKQEAgLTY0Myw3ICs2NDgsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmli
dXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcgogICAg
ICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKICAg
ICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0
aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExv
Y2sodHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgICAgIHRyYW5zaXRp
b24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAgICAgICAgIAog
ICAgICAgICBzdHJ1Y3R1cmUgPSB0cmFuc2l0aW9uOwpAQCAtNjY1LDcgKzY3MCw3IEBAIFN0cnVj
dHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIERpY3RpCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZt
LCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3Ry
dWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgIHRyYW5zaXRpb24t
PnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgIHRyYW5z
aXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0sIHRhYmxlKTsK
ICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkp
OwogICAgIHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlLaW5kKGtpbmQpOwogICAgIHRyYW5zaXRp
b24tPnNldEhhc0JlZW5EaWN0aW9uYXJ5KHRydWUpOwpAQCAtNzAyLDExICs3MDcsMTEgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVy
dHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYgdm0pCiB7CiAgICAgLy8gVGhpcyBtdXN0IGFsd2F5
cyByZXR1cm4gYSBwcm9wZXJ0eSB0YWJsZS4gSXQgY2FuJ3QgcmV0dXJuIG51bGwuCi0gICAgUHJv
cGVydHlUYWJsZSogcmVzdWx0ID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgIFByb3BlcnR5
VGFibGUqIHJlc3VsdCA9IHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKTsKICAgICBpZiAocmVz
dWx0KSB7CiAgICAgICAgIGlmIChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQtPmNvcHkodm0sIHJlc3VsdC0+c2l6ZSgpICsgMSk7Ci0gICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpTQ2Vs
bExvY2tlciBsb2NrZXIoY2VsbExvY2soKSk7CiAgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0s
IG51bGxwdHIpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTc0MywxMCArNzQ4
LDEwIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb25TbG93KFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vCiAgICAgICAgIC8vIHRhYmxlIGRvZXNuJ3Qg
a25vdyBob3cgdG8gdGFrZSBpbnRvIGFjY291bnQgc3VjaCB3aG9sZXNhbGUgZWRpdHMuCiAKICAg
ICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbkZvckNhY2hpbmcoaG9sZExv
Y2sodHJhbnNpdGlvbi0+bV9sb2NrKSwgdm0sIHRhYmxlKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+
cGluRm9yQ2FjaGluZyhob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0sIHRhYmxl
KTsKICAgICAgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPm1heE9m
ZnNldCgpKTsKICAgICAgICAgCi0gICAgICAgIHRhYmxlID0gdHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZU9yTnVsbCgpOworICAgICAgICB0YWJsZSA9IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVV
bnNhZmVPck51bGwoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFibGUpOwogICAgICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogKnRhYmxlKSB7CiAgICAgICAgICAgICBpZiAoc2V0c0RvbnREZWxl
dGVPbkFsbFByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpKQpAQCAtNzYxLDE0ICs3NjYsMTQgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm8KICAgICB9CiAgICAgCiAgICAgaWYgKHNldHNSZWFkT25s
eU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKQotICAgICAgICAmJiAhdHJh
bnNpdGlvbi0+cHJvcGVydHlUYWJsZU9yTnVsbCgpLT5pc0VtcHR5KCkpCisgICAgICAgICYmICF0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCktPmlzRW1wdHkoKSkKICAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNs
dWRpbmdQcm90byh0cnVlKTsKICAgICAKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSkgewogICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHRyYW5zaXRpb24tPmVuc3VyZVBy
b3BlcnR5VGFibGUodm0pOwotICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNp
dGlvbi0+bV9sb2NrKSwgdm0sIHRhYmxlKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRM
b2NrKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc3RydWN0dXJlLT5tX2xvY2spOworICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHN0cnVjdHVyZS0+Y2VsbExvY2soKSk7CiAgICAgICAg
IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB9
CiAKQEAgLTgyMCwxNCArODI1LDE0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGlj
dGlvbmFyeVN0cnVjdHVyZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgQVNTRVJUKGlz
RGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQob2JqZWN0LT5zdHJ1Y3R1cmUodm0pID09IHRoaXMp
OwogICAgIAotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5o
ZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygp
LCB2bS5oZWFwKTsKICAgICAKICAgICBvYmplY3QtPnNldFN0cnVjdHVyZUlERGlyZWN0bHkobnVr
ZShpZCgpKSk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKIAogICAgIHNpemVfdCBiZWZv
cmVPdXRPZkxpbmVDYXBhY2l0eSA9IHRoaXMtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYg
KGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxl
ID0gcHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgICAgICBBU1NFUlQodGFibGUpOwog
CiAgICAgICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gdGFibGUtPnNpemUoKTsKQEAgLTg0MSwx
NCArODQ2LDE0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGF1dG8gb2Zmc2V0ID0gaW52
YWxpZE9mZnNldDsKICAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0g
dGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIsICsraSkgewogICAgICAgICAgICAg
dmFsdWVzW2ldID0gb2JqZWN0LT5nZXREaXJlY3QoaXRlci0+b2Zmc2V0KTsKLSAgICAgICAgICAg
IG9mZnNldCA9IGl0ZXItPm9mZnNldCA9IG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5s
aW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgb2Zmc2V0ID0gaXRlci0+b2Zmc2V0ID0gb2Zmc2V0
Rm9yUHJvcGVydHlOdW1iZXIoaSwgaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgc2V0TWF4T2Zmc2V0KHZtLCBvZmZzZXQpOwogICAgICAgICBBU1NFUlQodHJhbnNpdGlvbk9m
ZnNldCgpID09IGludmFsaWRPZmZzZXQpOwogICAgICAgICAKICAgICAgICAgLy8gQ29waWVzIGlu
IG91ciB2YWx1ZXMgdG8gdGhlaXIgY29tcGFjdGVkIGxvY2F0aW9ucy4KICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7IGkrKykKLSAgICAgICAgICAgIG9iamVj
dC0+cHV0RGlyZWN0KHZtLCBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBtX2lubGluZUNhcGFj
aXR5KSwgdmFsdWVzW2ldKTsKKyAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBvZmZz
ZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBpbmxpbmVDYXBhY2l0eSgpKSwgdmFsdWVzW2ldKTsKIAog
ICAgICAgICB0YWJsZS0+Y2xlYXJEZWxldGVkT2Zmc2V0cygpOwogCkBAIC04OTQsMTkgKzg5OSwx
OSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoVk0m
IHZtLCBKU09iamVjdCogb2JqZWN0KQogICAgIHJldHVybiB0aGlzOwogfQogCi12b2lkIFN0cnVj
dHVyZTo6cGluKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0
YWJsZSkKK3ZvaWQgU3RydWN0dXJlOjpwaW4oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwg
Vk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5
VGFibGUodHJ1ZSk7CiAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOwogICAgIGNsZWFy
UHJldmlvdXNJRCgpOwotICAgIG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9IG51bGxwdHI7Cisg
ICAgc2V0VHJhbnNpdGlvblByb3BlcnR5TmFtZShsb2NrZXIsIG51bGxwdHIpOwogfQogCi12b2lk
IFN0cnVjdHVyZTo6cGluRm9yQ2FjaGluZyhjb25zdCBBYnN0cmFjdExvY2tlciYsIFZNJiB2bSwg
UHJvcGVydHlUYWJsZSogdGFibGUpCit2b2lkIFN0cnVjdHVyZTo6cGluRm9yQ2FjaGluZyhjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQog
ewogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZSh0cnVlKTsKICAgICBzZXRQcm9wZXJ0eVRh
YmxlKHZtLCB0YWJsZSk7Ci0gICAgbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gbnVsbHB0cjsK
KyAgICBzZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGxvY2tlciwgbnVsbHB0cik7CiB9CiAKIHZv
aWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKFZNJiB2bSkKQEAgLTkxNCw3ICs5MTksMTIg
QEAgdm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoVk0mIHZtKQogICAgIEFTU0VSVCgh
aGFzUmFyZURhdGEoKSk7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gU3RydWN0
dXJlUmFyZURhdGE6OmNyZWF0ZSh2bSwgcHJldmlvdXNJRCgpKTsKICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworI2lmIENQVShBRERSRVNTNjQpCisgICAgbV9pbmxpbmVDYXBhY2l0eUFuZFBy
ZXZpb3VzT3JSYXJlRGF0YS5zZXRQb2ludGVyKHJhcmVEYXRhKTsKKyAgICB2bS5oZWFwLndyaXRl
QmFycmllcih0aGlzLCByYXJlRGF0YSk7CisjZWxzZQogICAgIG1fcHJldmlvdXNPclJhcmVEYXRh
LnNldCh2bSwgdGhpcywgcmFyZURhdGEpOworI2VuZGlmCiAgICAgQVNTRVJUKGhhc1JhcmVEYXRh
KCkpOwogfQogCkBAIC05MjgsNyArOTM4LDcgQEAgV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjpl
bnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChWTSYgdm0sIFByb3BlcnQKICAg
ICAKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCiAgICAgICAgIGFsbG9jYXRlUmFyZURhdGEodm0p
OwotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBDb25jdXJyZW50
SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygpKTsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSog
cmFyZURhdGEgPSB0aGlzLT5yYXJlRGF0YSgpOwogICAgIGlmICghcmFyZURhdGEtPm1fcmVwbGFj
ZW1lbnRXYXRjaHBvaW50U2V0cykgewogICAgICAgICByYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdh
dGNocG9pbnRTZXRzID0KQEAgLTk5OCw3ICsxMDA4LDcgQEAgUHJvcGVydHlNYXBTdGF0aXN0aWNz
RXhpdExvZ2dlcjo6flByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXIoKQogCiBQcm9wZXJ0
eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYgdm0pCiB7
Ci0gICAgaWYgKFByb3BlcnR5VGFibGUqIHRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpKQor
ICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwo
KSkKICAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqdGFibGUpOwogICAg
IGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IGZhbHNlOwogICAgIHJldHVybiBtYXRlcmlhbGl6ZVBy
b3BlcnR5VGFibGUodm0sIHNldFByb3BlcnR5VGFibGUpOwpAQCAtMTAzOCwxNCArMTA0OCwxNCBA
QCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYgogewogICAgIHJldHVybiBhZGQ8U2hvdWxkUGluOjpO
bz4oCiAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCi0gICAgICAgIFt0aGlz
LCAmdm1dIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwg
UHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIFt0aGlzLCAmdm1dKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlP
ZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAgICBzZXRNYXhPZmZzZXQodm0sIG5ld01h
eE9mZnNldCk7CiAgICAgICAgIH0pOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJl
bW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHJl
bW92ZTxTaG91bGRQaW46Ok5vPih2bSwgcHJvcGVydHlOYW1lLCBbdGhpcywgJnZtXSAoY29uc3Qg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0
IG5ld01heE9mZnNldCkgeworICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpObz4odm0sIHBy
b3BlcnR5TmFtZSwgW3RoaXMsICZ2bV0oY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tl
ciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKICAgICAg
ICAgc2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQpOwogICAgIH0pOwogfQpAQCAtMTExNiwy
NSArMTEyNiwyMSBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKICAgICAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRoaXNP
YmplY3QtPm1fbG9jayk7CisgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIodGhpc09i
amVjdC0+Y2VsbExvY2soKSk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9nbG9iYWxPYmplY3QpOwotICAgIGlmICghdGhpc09iamVjdC0+aXNPYmplY3QoKSkKLSAgICAg
ICAgdGhpc09iamVjdC0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5jbGVhcigpOwotICAgIGVsc2Ug
ewotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3RvdHlwZSk7Ci0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwot
ICAgIH0KLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0
YSk7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm90b3R5cGUpOworICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4o
KSk7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzT2JqZWN0LT5wcmV2aW91c09y
UmFyZURhdGEoKSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNQaW5uZWRQcm9wZXJ0eVRhYmxl
KCkgfHwgdGhpc09iamVjdC0+cHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmco
KSkgewogICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBpbnRlcmxlYXZlIGluIHBpbigpLCBpbiB3
aGljaCBjYXNlIGl0IG1heSBzZWUgYSBudWxsIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAvLyBU
aGF0J3MgZmluZSwgYmVjYXVzZSB0aGVuIHRoZSBiYXJyaWVyIHdpbGwgZmlyZSBhbmQgd2Ugd2ls
bCBzY2FuIHRoaXMgYWdhaW4uCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZVVuc2FmZSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
dGhpc09iamVjdC0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKTsKICAgICB9IGVsc2UgaWYg
KHZpc2l0b3IuaXNBbmFseXppbmdIZWFwKCkpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7Ci0gICAgZWxzZSBpZiAodGhpc09iamVjdC0+
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQotICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUuY2xlYXIoKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlz
T2JqZWN0LT5wcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkpOworICAgIGVsc2UgaWYgKHRoaXNP
YmplY3QtPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkKKyAgICAgICAgdGhpc09iamVjdC0+
Y2xlYXJQcm9wZXJ0eVRhYmxlKCk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjppc0NoZWFwRHVyaW5n
R0MoVk0mIHZtKQpAQCAtMTI5MCw3ICsxMjk2LDcgQEAgYm9vbCBTdHJ1Y3R1cmU6OmNhbkNhY2hl
UHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0pIGNvbnN0CiAgICAgaWYgKCF0aGlzLT5jYW5D
YWNoZU93bktleXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RydWN0dXJlQ2hh
aW4qIHN0cnVjdHVyZUNoYWluID0gbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKTsKKyAgICBT
dHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4gPSBjYWNoZWRQcm90b3R5cGVDaGFpbigpOwog
ICAgIEFTU0VSVChzdHJ1Y3R1cmVDaGFpbik7CiAgICAgU3RydWN0dXJlSUQqIGN1cnJlbnRTdHJ1
Y3R1cmVJRCA9IHN0cnVjdHVyZUNoYWluLT5oZWFkKCk7CiAgICAgd2hpbGUgKHRydWUpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKaW5kZXggNTJjZDNjNzFkOTIw
ZjJmOGE5N2I0NjBiOTBlMGVjNzBkNWQ3MTFhZi4uMTJlNzY0OTA3MjZkODg5MTZmMzY5ZDJiMDIx
NWIyNjU5NzQzODUyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJUaW55Qmxvb21GaWx0ZXIuaCIKICNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVySW5saW5lcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMjU4LDkgKzI1OSwxOCBAQCBjbGFzcyBTdHJ1
Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBl
SW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlKCk7CiAgICAgfQorCisgICAgVHlwZUlu
Zm86Ok91dE9mTGluZVR5cGVGbGFncyBvdXRPZkxpbmVUeXBlRmxhZ3MoKSBjb25zdAorICAgIHsK
KyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gbV9vdXRPZkxpbmVUeXBlRmxhZ3NB
bmRQcm9wZXJ0eVRhYmxlVW5zYWZlLnR5cGUoKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX291
dE9mTGluZVR5cGVGbGFnczsKKyNlbmRpZgorICAgIH0KICAgICAKICAgICAvLyBUeXBlIGFjY2Vz
c29ycy4KLSAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi50eXBl
SW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KKyAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhvdXRPZkxpbmVUeXBlRmxhZ3MoKSk7IH0KICAg
ICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9
CiAKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ibG9i
LmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIEFsbFdyaXRhYmxlQXJyYXlUeXBlczsg
fQpAQCAtMzE1LDI0ICszMjUsMjQgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7CiAgICAgCiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gaXNSYXJlRGF0YShtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CisgICAgICAg
IHJldHVybiBpc1JhcmVEYXRhKHByZXZpb3VzT3JSYXJlRGF0YSgpKTsKICAgICB9CiAKICAgICBT
dHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Jh
cmVEYXRhKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEq
PihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KHByZXZpb3VzT3JSYXJlRGF0YSgpKTsKICAgICB9CiAKICAg
ICBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgU3RydWN0dXJlUmFyZURhdGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSo+KHByZXZpb3Vz
T3JSYXJlRGF0YSgpKTsKICAgICB9CiAKICAgICBjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFy
ZURhdGFDb25jdXJyZW50bHkoKSBjb25zdAogICAgIHsKLSAgICAgICAgSlNDZWxsKiBjZWxsID0g
bV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCk7CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHByZXZp
b3VzT3JSYXJlRGF0YSgpOwogICAgICAgICBpZiAoaXNSYXJlRGF0YShjZWxsKSkKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTM0OCw5ICszNTgsOSBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzSUQoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkp
OwotICAgICAgICAvLyBUaGlzIGlzIHNvIHdyaXR0ZW4gYmVjYXVzZSBpdCdzIHVzZWQgY29uY3Vy
cmVudGx5LiBXZSBvbmx5IGxvYWQgZnJvbSBtX3ByZXZpb3VzT3JSYXJlRGF0YQorICAgICAgICAv
LyBUaGlzIGlzIHNvIHdyaXR0ZW4gYmVjYXVzZSBpdCdzIHVzZWQgY29uY3VycmVudGx5LiBXZSBv
bmx5IGxvYWQgZnJvbSBtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhCiAgICAg
ICAgIC8vIG9uY2UsIGFuZCB0aGlzIGxvYWQgaXMgZ3VhcmFudGVlZCBhdG9taWMuCi0gICAgICAg
IEpTQ2VsbCogY2VsbCA9IG1fcHJldmlvdXNPclJhcmVEYXRhLmdldCgpOworICAgICAgICBKU0Nl
bGwqIGNlbGwgPSBwcmV2aW91c09yUmFyZURhdGEoKTsKICAgICAgICAgaWYgKGlzUmFyZURhdGEo
Y2VsbCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEq
PihjZWxsKS0+cHJldmlvdXNJRCgpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0
dXJlKj4oY2VsbCk7CkBAIC0zNTksNyArMzY5LDExIEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6
IHB1YmxpYyBKU0NlbGwgewogCiAgICAgUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KCkgY29uc3QK
ICAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgdWludDE2X3QgbWF4T2Zmc2V0ID0g
bV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90b3R5cGVDaGFpbi50eXBlKCk7CisjZWxzZQogICAgICAg
ICB1aW50MTZfdCBtYXhPZmZzZXQgPSBtX21heE9mZnNldDsKKyNlbmRpZgogICAgICAgICBpZiAo
bWF4T2Zmc2V0ID09IHNob3J0SW52YWxpZE9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBpbnZh
bGlkT2Zmc2V0OwogICAgICAgICBpZiAobWF4T2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykKQEAg
LTM2OSwyMiArMzgzLDQ1IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwg
ewogCiAgICAgdm9pZCBzZXRNYXhPZmZzZXQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CiAgICAgewotICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCi0gICAgICAgICAg
ICBtX21heE9mZnNldCA9IHNob3J0SW52YWxpZE9mZnNldDsKLSAgICAgICAgZWxzZSBpZiAob2Zm
c2V0IDwgdXNlUmFyZURhdGFGbGFnICYmIG9mZnNldCA8IHNob3J0SW52YWxpZE9mZnNldCkKLSAg
ICAgICAgICAgIG1fbWF4T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIGlmIChtX21heE9m
ZnNldCA9PSB1c2VSYXJlRGF0YUZsYWcpCisgICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRo
cmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CisgICAgICAgIGF1dG8gY29tbWl0
ID0gWyZdKHVpbnQxNl90IHZhbHVlKSB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgICAg
IG1fbWF4T2Zmc2V0QW5kQ2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0VHlwZSh2YWx1ZSk7CisjZWxz
ZQorICAgICAgICAgICAgbV9tYXhPZmZzZXQgPSB2YWx1ZTsKKyNlbmRpZgorICAgICAgICB9Owor
CisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAgY29t
bWl0KHNob3J0SW52YWxpZE9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydElu
dmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1pdChvZmZzZXQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgdWludDE2X3Qg
bWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90b3R5cGVDaGFpbi50eXBlKCk7Cisj
ZWxzZQorICAgICAgICB1aW50MTZfdCBtYXhPZmZzZXQgPSBtX21heE9mZnNldDsKKyNlbmRpZgor
ICAgICAgICBpZiAobWF4T2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykgewogICAgICAgICAgICAg
cmFyZURhdGEoKS0+bV9tYXhPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgZW5zdXJlUmFyZURhdGEodm0pLT5tX21heE9mZnNldCA9IG9mZnNldDsKLSAgICAgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgICAgICBtX21heE9mZnNldCA9IHVz
ZVJhcmVEYXRhRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAg
IGVuc3VyZVJhcmVEYXRhKHZtKS0+bV9tYXhPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIGNvbW1pdCh1c2VSYXJlRGF0YUZsYWcpOwogICAg
IH0KIAogICAgIFByb3BlcnR5T2Zmc2V0IHRyYW5zaXRpb25PZmZzZXQoKSBjb25zdAogICAgIHsK
KyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICB1aW50MTZfdCB0cmFuc2l0aW9uT2Zmc2V0ID0g
bV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvLnR5cGUoKTsKKyNlbHNlCiAgICAgICAgIHVp
bnQxNl90IHRyYW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRpb25PZmZzZXQ7CisjZW5kaWYKICAg
ICAgICAgaWYgKHRyYW5zaXRpb25PZmZzZXQgPT0gc2hvcnRJbnZhbGlkT2Zmc2V0KQogICAgICAg
ICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAgICAgICAgIGlmICh0cmFuc2l0aW9uT2Zmc2V0
ID09IHVzZVJhcmVEYXRhRmxhZykKQEAgLTM5NCwxNyArNDMxLDM2IEBAIGNsYXNzIFN0cnVjdHVy
ZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgdm9pZCBzZXRUcmFuc2l0aW9uT2Zmc2V0
KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgaWYgKG9mZnNl
dCA9PSBpbnZhbGlkT2Zmc2V0KQotICAgICAgICAgICAgbV90cmFuc2l0aW9uT2Zmc2V0ID0gc2hv
cnRJbnZhbGlkT2Zmc2V0OwotICAgICAgICBlbHNlIGlmIChvZmZzZXQgPCB1c2VSYXJlRGF0YUZs
YWcgJiYgb2Zmc2V0IDwgc2hvcnRJbnZhbGlkT2Zmc2V0KQotICAgICAgICAgICAgbV90cmFuc2l0
aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIGlmIChtX3RyYW5zaXRpb25PZmZzZXQg
PT0gdXNlUmFyZURhdGFGbGFnKQorICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgICAgICBhdXRvIGNvbW1pdCA9IFsm
XSh1aW50MTZfdCB2YWx1ZSkgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgICAgICBtX3Ry
YW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8uc2V0VHlwZSh2YWx1ZSk7CisjZWxzZQorICAgICAg
ICAgICAgbV90cmFuc2l0aW9uT2Zmc2V0ID0gdmFsdWU7CisjZW5kaWYKKyAgICAgICAgfTsKKwor
ICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1p
dChzaG9ydEludmFsaWRPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChvZmZzZXQgPCB1c2VSYXJlRGF0YUZsYWcgJiYgb2Zmc2V0IDwgc2hvcnRJbnZh
bGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBjb21taXQob2Zmc2V0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHVpbnQxNl90IHRy
YW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8udHlwZSgpOwor
I2Vsc2UKKyAgICAgICAgdWludDE2X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9m
ZnNldDsKKyNlbmRpZgorICAgICAgICBpZiAodHJhbnNpdGlvbk9mZnNldCA9PSB1c2VSYXJlRGF0
YUZsYWcpIHsKICAgICAgICAgICAgIHJhcmVEYXRhKCktPm1fdHJhbnNpdGlvbk9mZnNldCA9IG9m
ZnNldDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBlbnN1cmVSYXJlRGF0YSh2bSktPm1f
dHJhbnNpdGlvbk9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7Ci0gICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSB1c2VSYXJlRGF0YUZsYWc7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICBlbnN1cmVSYXJlRGF0
YSh2bSktPm1fdHJhbnNpdGlvbk9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICAgICAgY29tbWl0KHVzZVJhcmVEYXRhRmxhZyk7CiAgICAgfQogCiAg
ICAgc3RhdGljIHVuc2lnbmVkIG91dE9mTGluZUNhcGFjaXR5KFByb3BlcnR5T2Zmc2V0IG1heE9m
ZnNldCkKQEAgLTQ0MCwxNyArNDk2LDE4IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgewogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZVNpemUobWF4T2Zmc2V0
KCkpOwogICAgIH0KLSAgICBib29sIGhhc0lubGluZVN0b3JhZ2UoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuICEhbV9pbmxpbmVDYXBhY2l0eTsKLSAgICB9CisgICAgYm9vbCBoYXNJbmxp
bmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gISFpbmxpbmVDYXBhY2l0eSgpOyB9CiAgICAgdW5z
aWduZWQgaW5saW5lQ2FwYWNpdHkoKSBjb25zdAogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obV9pbmxpbmVDYXBhY2l0eUFuZFBy
ZXZpb3VzT3JSYXJlRGF0YS50eXBlKCkpOworI2Vsc2UKICAgICAgICAgcmV0dXJuIG1faW5saW5l
Q2FwYWNpdHk7CisjZW5kaWYKICAgICB9CiAgICAgdW5zaWduZWQgaW5saW5lU2l6ZSgpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+KG1heE9mZnNldCgpICsg
MSwgbV9pbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4o
bWF4T2Zmc2V0KCkgKyAxLCBpbmxpbmVDYXBhY2l0eSgpKTsKICAgICB9CiAgICAgdW5zaWduZWQg
dG90YWxTdG9yYWdlQ2FwYWNpdHkoKSBjb25zdAogICAgIHsKQEAgLTQ2MiwxMiArNTE5LDEyIEBA
IGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHsKICAgICAgICAg
cmV0dXJuIEpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpCiAgICAgICAgICAgICAmJiBvZmZzZXQg
PD0gbWF4T2Zmc2V0KCkKLSAgICAgICAgICAgICYmIChvZmZzZXQgPCBtX2lubGluZUNhcGFjaXR5
IHx8IG9mZnNldCA+PSBmaXJzdE91dE9mTGluZU9mZnNldCk7CisgICAgICAgICAgICAmJiAob2Zm
c2V0IDwgc3RhdGljX2Nhc3Q8aW50PihpbmxpbmVDYXBhY2l0eSgpKSB8fCBvZmZzZXQgPj0gZmly
c3RPdXRPZkxpbmVPZmZzZXQpOwogICAgIH0KIAogICAgIGJvb2wgaGlqYWNrc0luZGV4aW5nSGVh
ZGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpc1R5cGVkVmlldyhtX2NsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKKyAgICAgICAgcmV0dXJuIGlzVHlwZWRWaWV3KGNs
YXNzSW5mbygpLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAgIH0KICAgICAKICAgICBib29s
IGNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkgY29uc3QKQEAgLTUzNSw3ICs1OTIsMTQgQEAgY2xh
c3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIHNldE9iamVj
dFRvU3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqLCBWTSYsIEpTU3RyaW5nKiB2YWx1ZSwgUHJv
cGVydHlTbG90IHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7CiAKLSAgICBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NJbmZvOyB9CisgICAgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdAorICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAg
ICAgICByZXR1cm4gbV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvLnBvaW50ZXIoKTsKKyNl
bHNlCisgICAgICAgIHJldHVybiBtX2NsYXNzSW5mbzsKKyNlbmRpZgorICAgIH0KIAogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgc3RydWN0dXJlSURPZmZzZXQoKQogICAgIHsKQEAgLTU1MiwyOSArNjE2
LDM5IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9nbG9iYWxPYmplY3QpOwogICAgIH0K
IAotICAgIHN0YXRpYyBwdHJkaWZmX3QgY2xhc3NJbmZvT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mQ2xhc3NJbmZvKCkKICAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fdHJhbnNpdGlvbk9mZnNl
dEFuZENsYXNzSW5mbyk7CisjZWxzZQogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cnVjdHVyZSwgbV9jbGFzc0luZm8pOworI2VuZGlmCiAgICAgfQotICAgICAgICAKKwogICAgIHN0
YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpCiAgICAg
ewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0
cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpOwogICAg
IH0KLSAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHByb3BlcnR5VGFibGVVbnNhZmVPZmZzZXQo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fcHJv
cGVydHlUYWJsZVVuc2FmZSk7Ci0gICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBpbmxpbmVD
YXBhY2l0eU9mZnNldCgpCisjaWYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZklubGluZUNhcGFjaXR5KCkKICAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1faW5saW5lQ2FwYWNp
dHlBbmRQcmV2aW91c09yUmFyZURhdGEpICsgQ29tcGFjdFBvaW50ZXJUdXBsZTxKU0NlbGwqLCB1
aW50MTZfdD46Om9mZnNldE9mVHlwZSgpOworI2Vsc2UKICAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTdHJ1Y3R1cmUsIG1faW5saW5lQ2FwYWNpdHkpOworI2VuZGlmCisKICAgICB9Cisj
ZW5kaWYKIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgcHJldmlvdXNPclJhcmVEYXRhT2Zmc2V0KCkK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJldmlvdXNPclJhcmVEYXRhKCkKICAgICB7
CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmUsIG1faW5saW5lQ2FwYWNpdHlBbmRQcmV2aW91c09yUmFyZURhdGEpOworI2Vsc2UKICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fcHJldmlvdXNPclJhcmVE
YXRhKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYpOwpAQCAtNjUzLDEyICs3MjcsMTQgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDog
cHVibGljIEpTQ2VsbCB7CiAgICAgCiAgICAgc3RhdGljIHZvaWQgZHVtcENvbnRleHRIZWFkZXIo
UHJpbnRTdHJlYW0mKTsKICAgICAKLSAgICBDb25jdXJyZW50SlNMb2NrJiBsb2NrKCkgeyByZXR1
cm4gbV9sb2NrOyB9Ci0KLSAgICB1bnNpZ25lZCBwcm9wZXJ0eUhhc2goKSBjb25zdCB7IHJldHVy
biBtX3Byb3BlcnR5SGFzaDsgfQotCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQ29udmVydFRvUG9s
eVByb3RvKGNvbnN0IFN0cnVjdHVyZSogYSwgY29uc3QgU3RydWN0dXJlKiBiKTsKIAorICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB0cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NU
aHJlYWQoKSk7CisgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCk7
CisgICAgfQorCiAgICAgc3RydWN0IFByb3BlcnR5SGFzaEVudHJ5IHsKICAgICAgICAgY29uc3Qg
SGFzaFRhYmxlKiB0YWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIHZhbHVlOwpA
QCAtNjY4LDYgKzc0NCwyNiBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgorICAgIGJvb2wgcnVsZU91
dFVuc2VlblByb3BlcnR5SGFzaChVbmlxdWVkU3RyaW5nSW1wbCopIGNvbnN0OworI2lmIENQVShB
RERSRVNTNjQpCisgICAgLy8gQXMgYSBwcm9wZXJ0eUhhc2gsIDY0Yml0IGVudmlyb25tZW50IHVz
ZXMgMTZiaXQgcHJvcGVydHktaGFzaCArIHNlZW5Qcm9wZXJ0aWVzIHNldC4KKyAgICB1aW50cHRy
X3QgcHJvcGVydHlIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDYXBhY2l0eUFuZFByZXZp
b3VzT3JSYXJlRGF0YS5kYXRhKCk7IH0KKyNlbHNlCisgICAgdWludDMyX3QgcHJvcGVydHlIYXNo
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUhhc2g7IH0KKyNlbmRpZgorICAgIHVpbnRwdHJf
dCBzZWVuUHJvcGVydGllcygpIGNvbnN0OworICAgIHZvaWQgYWRkUHJvcGVydHlIYXNoQW5kU2Vl
blByb3BlcnR5KHVuc2lnbmVkLCBVbmlxdWVkU3RyaW5nSW1wbCopOworCisgICAgdm9pZCBzZXRU
cmFuc2l0aW9uUHJvcGVydHlOYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpCisgICAgeworICAgICAgICBtX3RyYW5zaXRp
b25Qcm9wZXJ0eU5hbWUgPSB0cmFuc2l0aW9uUHJvcGVydHlOYW1lOworICAgIH0KKyAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdHJhbnNpdGlvblByb3BlcnR5TmFtZUNvbmN1cnJlbnRseSgpCisgICAg
eworICAgICAgICBBU1NFUlQoY2VsbExvY2soKS5pc0xvY2tlZCgpKTsKKyAgICAgICAgcmV0dXJu
IG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKTsKKyAgICB9CisKICAgICB0eXBlZGVmIGVu
dW0geyAKICAgICAgICAgTm9uZURpY3Rpb25hcnlLaW5kID0gMCwKICAgICAgICAgQ2FjaGVkRGlj
dGlvbmFyeUtpbmQgPSAxLApAQCAtNjg0LDYgKzc4MCw3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5h
bCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHtcCiAgICAgICAgIG1fYml0RmllbGQgJj0gfihzXyMj
bG93ZXJOYW1lIyNNYXNrIDw8IG9mZnNldCk7XAogICAgICAgICBtX2JpdEZpZWxkIHw9IChuZXdW
YWx1ZSAmIHNfIyNsb3dlck5hbWUjI01hc2spIDw8IG9mZnNldDtcCisgICAgICAgIEFTU0VSVChu
ZXdWYWx1ZSA9PSBsb3dlck5hbWUoKSk7XAogICAgIH0KIAogICAgIERFRklORV9CSVRGSUVMRChE
aWN0aW9uYXJ5S2luZCwgZGljdGlvbmFyeUtpbmQsIERpY3Rpb25hcnlLaW5kLCAyLCAwKTsKQEAg
LTY5MSwxOCArNzg4LDE4IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwg
ewogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCBI
YXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCAxLCAzKTsKICAgICBERUZJTkVfQklURklFTEQoYm9v
bCwgaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywgSGFz
UmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywgMSwgNCk7CiAg
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JF
bnVtZXJhdGlvbiwgSXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uLCAx
LCA1KTsKLSAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIHRyYW5zaXRpb25Qcm9wZXJ0eUF0
dHJpYnV0ZXMsIFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIDE0LCA2KTsKLSAgICBERUZJ
TkVfQklURklFTEQoYm9vbCwgZGlkUHJldmVudEV4dGVuc2lvbnMsIERpZFByZXZlbnRFeHRlbnNp
b25zLCAxLCAyMCk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFRyYW5zaXRpb24sIERp
ZFRyYW5zaXRpb24sIDEsIDIxKTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgc3RhdGljUHJv
cGVydGllc1JlaWZpZWQsIFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkLCAxLCAyMik7Ci0gICAgREVG
SU5FX0JJVEZJRUxEKGJvb2wsIGhhc0JlZW5GbGF0dGVuZWRCZWZvcmUsIEhhc0JlZW5GbGF0dGVu
ZWRCZWZvcmUsIDEsIDIzKTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzQ3VzdG9tR2V0
dGVyU2V0dGVyUHJvcGVydGllcywgSGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcywgMSwg
MjQpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGll
cywgRGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIDEsIDI1KTsKLSAgICBERUZJTkVfQklURklF
TEQoYm9vbCwgdHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgVHJhbnNpdGlv
bldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgMSwgMjYpOwotICAgIERFRklORV9CSVRGSUVM
RChib29sLCBoYXNCZWVuRGljdGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnksIDEsIDI3KTsKLSAg
ICBERUZJTkVfQklURklFTEQoYm9vbCwgcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRp
b25pbmcsIFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCAxLCAyOCk7Ci0g
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVk
aW5nT3JpZ2luYWxQcm90bywgSGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmln
aW5hbFByb3RvLCAxLCAyOSk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzUHJvcGVydHlE
ZWxldGlvblRyYW5zaXRpb24sIElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24sIDEsIDMwKTsK
KyAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIHRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0
ZXMsIFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIDgsIDYpOworICAgIERFRklORV9CSVRG
SUVMRChib29sLCBkaWRQcmV2ZW50RXh0ZW5zaW9ucywgRGlkUHJldmVudEV4dGVuc2lvbnMsIDEs
IDE0KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlkVHJhbnNp
dGlvbiwgMSwgMTUpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNQcm9wZXJ0aWVz
UmVpZmllZCwgU3RhdGljUHJvcGVydGllc1JlaWZpZWQsIDEsIDE2KTsKKyAgICBERUZJTkVfQklU
RklFTEQoYm9vbCwgaGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSwgSGFzQmVlbkZsYXR0ZW5lZEJlZm9y
ZSwgMSwgMTcpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNDdXN0b21HZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzLCBIYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCAxLCAxOCk7Cisg
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCBEaWRX
YXRjaEludGVybmFsUHJvcGVydGllcywgMSwgMTkpOworICAgIERFRklORV9CSVRGSUVMRChib29s
LCB0cmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkLCBUcmFuc2l0aW9uV2F0Y2hw
b2ludElzTGlrZWx5VG9CZUZpcmVkLCAxLCAyMCk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2ws
IGhhc0JlZW5EaWN0aW9uYXJ5LCBIYXNCZWVuRGljdGlvbmFyeSwgMSwgMjEpOworICAgIERFRklO
RV9CSVRGSUVMRChib29sLCBwcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZywg
UHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcsIDEsIDIyKTsKKyAgICBERUZJ
TkVfQklURklFTEQoYm9vbCwgaGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmln
aW5hbFByb3RvLCBIYXNVbmRlcnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJv
dG8sIDEsIDIzKTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNQcm9wZXJ0eURlbGV0aW9u
VHJhbnNpdGlvbiwgSXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwgMSwgMjQpOwogCiAgICAg
c3RhdGljX2Fzc2VydChzX2JpdFdpZHRoT2ZUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIDw9
IHNpemVvZihUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKSAqIDgpOwogCkBAIC03MjEsNyAr
ODE4LDcgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8g
YW5kIHRoZSBsaXN0IG9mIHN0cnVjdHVyZXMgdGhhdCB3ZSB2aXNpdGVkIGJlZm9yZSB3ZSBnb3Qg
dG8gaXQuIElmIGl0IHJldHVybnMgYQogICAgIC8vIG5vbi1udWxsIHN0cnVjdHVyZSwgaXQgd2ls
bCBhbHNvIGxvY2sgdGhlIHN0cnVjdHVyZSB0aGF0IGl0IHJldHVybnM7IGl0IGlzIHlvdXIgam9i
CiAgICAgLy8gdG8gdW5sb2NrIGl0LgotICAgIHZvaWQgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JN
YXRlcmlhbGl6YXRpb24oVmVjdG9yPFN0cnVjdHVyZSosIDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1
cmUqJiwgUHJvcGVydHlUYWJsZSomKTsKKyAgICB2b2lkIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9y
TWF0ZXJpYWxpemF0aW9uKFZlY3RvcjxzdGQ6OnBhaXI8U3RydWN0dXJlKiwgVW5pcXVlZFN0cmlu
Z0ltcGwqPiwgOD4mIHN0cnVjdHVyZXMsIFN0cnVjdHVyZSomLCBQcm9wZXJ0eVRhYmxlKiYpOwog
ICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBT
dHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAKQEAgLTczOCw3ICs4MzUsNyBAQCBjbGFzcyBTdHJ1
Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBUaGlzIG1heSBncmFiIHRoZSBs
b2NrLCBvciBub3QuIERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJlJ3MgbG9j
ay4KICAgICBQcm9wZXJ0eVRhYmxlKiBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eShWTSYg
dm0pCiAgICAgewotICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gbV9wcm9wZXJ0
eVRhYmxlVW5zYWZlLmdldCgpKQorICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0g
cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgaWYgKCFwcmV2aW91c0lEKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTc0OCwzOSArODQ1LDM3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewogICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwg
d2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgogICAgIFByb3BlcnR5VGFibGUqIGVu
c3VyZVByb3BlcnR5VGFibGUoVk0mIHZtKQogICAgIHsKLSAgICAgICAgaWYgKFByb3BlcnR5VGFi
bGUqIHJlc3VsdCA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgaWYgKFBy
b3BlcnR5VGFibGUqIHJlc3VsdCA9IHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5
VGFibGUodm0pOwogICAgIH0KICAgICAKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxl
T3JOdWxsKCkgY29uc3QKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JO
dWxsKCkgY29uc3QKICAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgcmV0dXJuIG1f
b3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5wb2ludGVyKCk7CisjZWxz
ZQogICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOworI2VuZGlmCiAg
ICAgfQogICAgIAogICAgIC8vIFRoaXMgd2lsbCBncmFiIHRoZSBsb2NrLiBEbyBub3QgY2FsbCB3
aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2suCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
UHJvcGVydHlUYWJsZSogbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiwgYm9vbCBzZXRQcm9w
ZXJ0eVRhYmxlID0gdHJ1ZSk7CiAgICAgCiAgICAgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2
bSwgUHJvcGVydHlUYWJsZSogdGFibGUpOworICAgIHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7
CiAgICAgCiAgICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5u
ZWQoVk0mKTsKICAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
Vk0mKTsKIAogICAgIHZvaWQgc2V0UHJldmlvdXNJRChWTSYsIFN0cnVjdHVyZSopOwotCi0gICAg
dm9pZCBjbGVhclByZXZpb3VzSUQoKQotICAgIHsKLSAgICAgICAgaWYgKGhhc1JhcmVEYXRhKCkp
Ci0gICAgICAgICAgICByYXJlRGF0YSgpLT5jbGVhclByZXZpb3VzSUQoKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuY2xlYXIoKTsKLSAgICB9CisgICAg
dm9pZCBjbGVhclByZXZpb3VzSUQoKTsKIAogICAgIGludCB0cmFuc2l0aW9uQ291bnRFc3RpbWF0
ZSgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBTaW5jZSB0aGUgbnVtYmVyIG9mIHRyYW5zaXRp
b25zIGlzIG9mdGVuIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG9mZnNldCAoZXhjZXB0IGlmIHRoZXJl
IGFyZSBkZWxldGVzKQogICAgICAgICAvLyB3ZSBrZWVwIHRoZSBzaXplIG9mIFN0cnVjdHVyZSBk
b3duIGJ5IG5vdCBzdG9yaW5nIGJvdGguCi0gICAgICAgIHJldHVybiBudW1iZXJPZlNsb3RzRm9y
TWF4T2Zmc2V0KG1heE9mZnNldCgpLCBtX2lubGluZUNhcGFjaXR5KTsKKyAgICAgICAgcmV0dXJu
IG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIGlubGluZUNhcGFjaXR5KCkp
OwogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZUNo
YWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwpAQCAtODAy
LDQ4ICs4OTcsODggQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgCiAgICAgdm9pZCBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzKFZNJik7CiAKKyAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4oKSBjb25zdDsKKyAgICB2b2lk
IHNldENhY2hlZFByb3RvdHlwZUNoYWluKFZNJiwgU3RydWN0dXJlQ2hhaW4qKTsKKworICAgIHZv
aWQgc2V0T3V0T2ZMaW5lVHlwZUZsYWdzKFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3MpOwor
ICAgIHZvaWQgc2V0Q2xhc3NJbmZvKGNvbnN0IENsYXNzSW5mbyopOworICAgIHZvaWQgc2V0SW5s
aW5lQ2FwYWNpdHkodWludDhfdCk7CisKKyAgICBKU0NlbGwqIHByZXZpb3VzT3JSYXJlRGF0YSgp
IGNvbnN0CisgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHJldHVybiBtX2lubGlu
ZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhLnBvaW50ZXIoKTsKKyNlbHNlCisgICAgICAg
IHJldHVybiBtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKTsKKyNlbmRpZgorICAgIH0KKwogICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0
YXRpYyBjb25zdGV4cHIgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlk
ID0gNTEyOwogCiAgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBwcm9wZXJseSBhbGlnbmVkIGF0IHRo
ZSBiZWdpbm5pbmcgb2YgdGhlICdTdHJ1Y3R1cmUnCiAgICAgLy8gcGFydCBvZiB0aGUgb2JqZWN0
LgogICAgIFN0cnVjdHVyZUlEQmxvYiBtX2Jsb2I7Ci0gICAgVHlwZUluZm86Ok91dE9mTGluZVR5
cGVGbGFncyBtX291dE9mTGluZVR5cGVGbGFnczsKIAotICAgIHVpbnQ4X3QgbV9pbmxpbmVDYXBh
Y2l0eTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwotCi0gICAgdWludDMyX3QgbV9i
aXRGaWVsZDsKLQotICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmpl
Y3Q7Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJvdG90eXBlOworICAgIC8vIFRoZSBw
cm9wZXJ0eSB0YWJsZSBwb2ludGVyIHNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIGVuc3VyZVBy
b3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBtX3Byb3BlcnR5VGFibGVVbnNhZmUgZmllbGQgcGFy
dCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCisgICAgLy8gRHVyaW5nIGEgSGVh
cCBTbmFwc2hvdCBHQyB3ZSBhdm9pZCBjbGVhcmluZyB0aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0
byB1c2UuCisjaWYgQ1BVKEFERFJFU1M2NCkKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnRwdHJfdCBjbGFzc0luZm9NYXNrID0gQ29tcGFjdFBvaW50ZXJUdXBsZTxjb25zdCBDbGFz
c0luZm8qLCB1aW50MTZfdD46OnBvaW50ZXJNYXNrOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dHB0cl90IHByZXZpb3VzT3JSYXJlRGF0YU1hc2sgPSBDb21wYWN0UG9pbnRlclR1cGxlPEpTQ2Vs
bCosIHVpbnQxNl90Pjo6cG9pbnRlck1hc2s7Citwcml2YXRlOgorICAgIC8vIFN0cnVjdHVyZSBp
cyBvbmUgb2YgdGhlIG1vc3QgZnJlcXVlbnRseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmUuIE1v
cmVvdmVyLCBTdHJ1Y3R1cmUgdGVuZHMgdG8gYmUgYWxpdmUgbG9uZyEKKyAgICAvLyBUaGlzIG1v
dGl2YXRlcyBleHRyYSBjb21wbGljYXRlZCBoYWNrIHdoaWNoIG9wdGltaXplcyBzaXplb2YoU3Ry
dWN0dXJlKS4KKyAgICAvLworICAgIC8vIFdlIGNvbWJpbmUgMTZiaXQgZGF0YSBhbmQgNjRiaXQg
cG9pbnRlciBpbnRvIG9uZSBwb2ludGVyLXNpemUgZmllbGQgdG8gKDEpIHNhdmUgbWVtb3J5IHdo
aWxlICgyKSBub3QgbG9zaW5nIGF0b21pYyBsb2FkL3N0b3JlLgorICAgIC8vIFRoZSBrZXkgaGVy
ZSBpcyBhbmFseXppbmcgZGF0YSBhY2Nlc3MgcGF0dGVybnMgY2FyZWZ1bGx5LiBUaGV5IGFyZSBj
YXRlZ29yaWV6ZWQgaW50byB0aHJlZSB0eXBlcy4KKyAgICAvLyAgICAgMS4gSW1tdXRhYmxlQWZ0
ZXJDb25zdHJ1Y3Rpb24KKyAgICAvLyAgICAgMi4gTXV0YWJsZUZyb21BbnlUaHJlYWQKKyAgICAv
LyAgICAgMy4gTXV0YWJsZUZyb21NYWluVGhyZWFkCisgICAgLy8gIFdlIGFzc3VtZSB0aGF0IGxv
YWRpbmcgaGFwcGVucyBmcm9tIGFueSB0aHJlYWRzLiBVbmRlciB0aGlzIGFzc3VtcHRpb24sIE11
dGFibGVGcm9tQW55VGhyZWFkICsgKE11dGFibGVGcm9tTWFpblRocmVhZCAvIE11dGFibGVGcm9t
QW55VGhyZWFkKSBpcyB0aGUgcGFpciB3aGljaCBpcyByYWN5LgorICAgIC8vICBPdGhlciBwYWly
cyB3b3JrcyB3ZWxsLiBXZSBjYXJlZnVsbHkgcHV0IGFzc2VydGlvbnMgdG8gc2V0dGVycywgYW5h
bHl6ZSBhY2Nlc3MgcGF0dGVybnMgYW5kIHBpY2sgYXBwcm9wcmlhdGUgcGFpcnMgaW4gU3RydWN0
dXJlIGZpZWxkcy4KKyAgICBDb21wYWN0UG9pbnRlclR1cGxlPFByb3BlcnR5VGFibGUqLCBUeXBl
SW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzPiBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5
VGFibGVVbnNhZmU7IC8vIEltbXV0YWJsZUFmdGVyQ29uc3RydWN0aW9uKG1fb3V0T2ZMaW5lVHlw
ZUZsYWdzKSBhbmQgTXV0YWJsZUZyb21BbnlUaHJlYWQobV9wcm9wZXJ0eVRhYmxlVW5zYWZlKS4K
KyAgICBDb21wYWN0UG9pbnRlclR1cGxlPFN0cnVjdHVyZUNoYWluKiwgdWludDE2X3Q+IG1fbWF4
T2Zmc2V0QW5kQ2FjaGVkUHJvdG90eXBlQ2hhaW47IC8vIE11dGFibGVGcm9tTWFpblRocmVhZCht
X21heE9mZnNldCkgYW5kIE11dGFibGVGcm9tTWFpblRocmVhZChtX2NhY2hlZFByb3RvdHlwZUNo
YWluKS4KKyAgICBDb21wYWN0UG9pbnRlclR1cGxlPGNvbnN0IENsYXNzSW5mbyosIHVpbnQxNl90
PiBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm87IC8vIE11dGFibGVGcm9tTWFpblRocmVh
ZChtX3RyYW5zaXRpb25PZmZzZXQpIGFuZCBJbW11dGFibGVBZnRlckNvbnN0cnVjdGlvbihtX2Ns
YXNzSW5mbykuCisgICAgQ29tcGFjdFBvaW50ZXJUdXBsZTxKU0NlbGwqLCB1aW50MTZfdD4gbV9p
bmxpbmVDYXBhY2l0eUFuZFByZXZpb3VzT3JSYXJlRGF0YTsgLy8gSW1tdXRhYmxlQWZ0ZXJDb25z
dHJ1Y3Rpb24obV9pbmxpbmVDYXBhY2l0eSkgYW5kIE11dGFibGVGcm9tTWFpblRocmVhZChtX3By
ZXZpb3VzT3JSYXJlRGF0YSkuCisgICAgQ29tcGFjdFBvaW50ZXJUdXBsZTxVbmlxdWVkU3RyaW5n
SW1wbCosIHVpbnQxNl90PiBtX3Byb3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0aWVzOyAvLyBNdXRh
YmxlRnJvbU1haW5UaHJlYWQobV9wcm9wZXJ0eUhhc2gpIGFuZCBNdXRhYmxlRnJvbU1haW5UaHJl
YWQobV9zZWVuUHJvcGVydGllcykuCisKKyAgICAvLyAxLiBTZXR0aW5nIFVuaXF1ZWRTdHJpbmdJ
bXBsIGhhcHBlbnMgb25seSBpbiB0aGUgbWFpbiB0aHJlYWQuIEF0IHRoYXQgdGltZSwgd2UgbXVz
dCB0YWtlIGEgbG9jay4KKyAgICAvLyAyLiBBY2Nlc3NpbmcgVW5pcXVlZFN0cmluZ0ltcGwgZnJv
bSB0aGUgbWFpbiB0aHJlYWQgaXMgT0suCisgICAgLy8gMy4gQWNjZXNzaW5nIFVuaXF1ZWRTdHJp
bmdJbXBsIGZyb20gbm9uIG1haW4gdGhyZWFkIGlzIHJlcXVpcmluZyBsb2NrLgorICAgIHN0YXRp
Y19hc3NlcnQoYWxpZ25vZihQYWNrZWRSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+KSA9PSAxKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KGFsaWdub2YoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKSA9PSAx
KTsKKyAgICBQYWNrZWRSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+IG1fdHJhbnNpdGlvblByb3Bl
cnR5TmFtZTsKKyNlbHNlCisgICAgVHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFncyBtX291dE9m
TGluZVR5cGVGbGFncyB7IDAgfTsKKyAgICB1aW50OF90IG1faW5saW5lQ2FwYWNpdHkgeyAwIH07
CisgICAgdWludDMyX3QgbV9wcm9wZXJ0eUhhc2ggeyAwIH07CisgICAgdWludDE2X3QgbV90cmFu
c2l0aW9uT2Zmc2V0IHsgMCB9OworICAgIHVpbnQxNl90IG1fbWF4T2Zmc2V0IHsgMCB9OworICAg
IFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CisgICAg
Y29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKICAgICBtdXRhYmxlIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jYWNoZWRQcm90b3R5cGVDaGFpbjsKLQogICAg
IFdyaXRlQmFycmllcjxKU0NlbGw+IG1fcHJldmlvdXNPclJhcmVEYXRhOwotCisgICAgdWludHB0
cl90IG1fc2VlblByb3BlcnRpZXMgeyAwIH07CiAgICAgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBs
PiBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWU7Ci0KLSAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xh
c3NJbmZvOwotCisjZW5kaWYKKyAgICAvLyBBY2Nlc3NpbmcgbV90cmFuc2l0aW9uVGFibGUgaXMg
b25seSBhbGxvd2VkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAgIFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKIAotICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0
aHJvdWdoIGVuc3VyZVByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRv
IDAgYnkgYW5vdGhlciB0aHJlYWQuCi0gICAgLy8gRHVyaW5nIGEgSGVhcCBTbmFwc2hvdCBHQyB3
ZSBhdm9pZCBjbGVhcmluZyB0aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0byB1c2UuCi0gICAgV3Jp
dGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKKyAgICB1aW50
MzJfdCBtX2JpdEZpZWxkIHsgMCB9OworCisgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0
PiBtX2dsb2JhbE9iamVjdDsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9wcm90b3R5cGU7
CiAKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IDwgMjU2LCBm
aXJzdE91dE9mTGluZU9mZnNldF9maXRzKTsKIAotICAgIHVpbnQxNl90IG1fdHJhbnNpdGlvbk9m
ZnNldDsKLSAgICB1aW50MTZfdCBtX21heE9mZnNldDsKLQotICAgIHVpbnQzMl90IG1fcHJvcGVy
dHlIYXNoOwotICAgIFRpbnlCbG9vbUZpbHRlciBtX3NlZW5Qcm9wZXJ0aWVzOwotCiAgICAgZnJp
ZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBKU0RvbGxhclZNSGVscGVy
OwogfTsKKyNpZiBDUFUoQUREUkVTUzY0KQorc3RhdGljX2Fzc2VydChzaXplb2YoU3RydWN0dXJl
KSA8PSA5NiwgIkRvIG5vdCBpbmNyZWFzZSBzaXplb2YoU3RydWN0dXJlKSwgaXQgaW1tZWRpYXRl
bHkgY2F1c2VzIG1lbW9yeSByZWdyZXNzaW9uIik7CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmgKaW5kZXggMGNkOThkNTJhY2M3ZjcxNGMwNWIxNTNlMDgxMzllNDkxY2Q4Y2Y4Yy4uY2JiZDcx
ZGM5OTEwOWY1MjQ0ZTk3NGYyNWRhZTFiYjIzYTJhYmZkZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaApAQCAtMTQ0LDcgKzE0NCw3IEBA
IEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFk
KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUodm0pLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwog
Ci0gICAgaWYgKG1fc2VlblByb3BlcnRpZXMucnVsZU91dChiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pihwcm9wZXJ0eU5hbWUudWlkKCkpKSkKKyAgICBpZiAocnVsZU91dFVuc2VlblByb3BlcnR5SGFz
aChwcm9wZXJ0eU5hbWUudWlkKCkpKQogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAog
ICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZO
b3RFbXB0eSh2bSk7CkBAIC0xNTksMTAgKzE1OSwzOSBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5
T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
dQogICAgIHJldHVybiBlbnRyeS0+b2Zmc2V0OwogfQogCitpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6
OnJ1bGVPdXRVbnNlZW5Qcm9wZXJ0eUhhc2goVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkgY29uc3QK
K3sKKyAgICBBU1NFUlQodWlkKTsKKyAgICB1aW50cHRyX3QgcG9pbnRlciA9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHVpZCk7CisgICAgaWYgKChzZWVuUHJvcGVydGllcygpICYgcG9pbnRlcikg
IT0gcG9pbnRlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitpbmxpbmUgdWludHB0cl90IFN0cnVjdHVyZTo6c2VlblByb3BlcnRpZXMoKSBjb25zdAorewor
I2lmIENQVShBRERSRVNTNjQpCisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1f
cHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRpZXMucG9pbnRlcigpKTsKKyNlbHNlCisgICAgcmV0
dXJuIG1fc2VlblByb3BlcnRpZXM7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJl
OjphZGRQcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydHkodW5zaWduZWQgaGFzaCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHBvaW50ZXIpCit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX3Byb3BlcnR5
SGFzaEFuZFNlZW5Qcm9wZXJ0aWVzLnNldFR5cGUobV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVy
dGllcy50eXBlKCkgXiBoYXNoKTsKKyAgICBtX3Byb3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0aWVz
LnNldFBvaW50ZXIoYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4obV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydGllcy5wb2ludGVyKCkpIHwg
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcikpKTsKKyNlbHNlCisgICAgbV9wcm9wZXJ0
eUhhc2ggPSBtX3Byb3BlcnR5SGFzaCBeIGhhc2g7CisgICAgbV9zZWVuUHJvcGVydGllcyA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIpIHwgbV9zZWVuUHJvcGVydGllczsKKyNlbmRp
ZgorfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogdm9pZCBTdHJ1Y3R1cmU6OmZvckVh
Y2hQcm9wZXJ0eUNvbmN1cnJlbnRseShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIFZl
Y3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3Ry
dWN0dXJlKiwgVW5pcXVlZFN0cmluZ0ltcGwqPiwgOD4gc3RydWN0dXJlczsKICAgICBTdHJ1Y3R1
cmUqIHRhYmxlU3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIApAQCAt
MTcwLDE4ICsxOTksMTggQEAgdm9pZCBTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJl
bnRseShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogCiAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5n
SW1wbCo+IHNlZW5Qcm9wZXJ0aWVzOwogCi0gICAgZm9yIChhdXRvKiBzdHJ1Y3R1cmUgOiBzdHJ1
Y3R1cmVzKSB7Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUgfHwgc2VlblByb3BlcnRpZXMuY29udGFpbnMoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUuZ2V0KCkpKQorICAgIGZvciAoYXV0byBbc3RydWN0dXJlLCB0cmFuc2l0aW9uUHJv
cGVydHlOYW1lXSA6IHN0cnVjdHVyZXMpIHsKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9uUHJvcGVy
dHlOYW1lIHx8IHNlZW5Qcm9wZXJ0aWVzLmNvbnRhaW5zKHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc2VlblByb3BlcnRpZXMuYWRkKHN0
cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgc2VlblBy
b3BlcnRpZXMuYWRkKHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVjdHVyZS0+
bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZz
ZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkgeworICAg
ICAgICBpZiAoIWZ1bmN0b3IoUHJvcGVydHlNYXBFbnRyeSh0cmFuc2l0aW9uUHJvcGVydHlOYW1l
LCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJv
cGVydHlBdHRyaWJ1dGVzKCkpKSkgewogICAgICAgICAgICAgaWYgKHRhYmxlKQotICAgICAgICAg
ICAgICAgIHRhYmxlU3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICAgICAg
dGFibGVTdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTIsMTEgKzIyMSwxMSBAQCB2b2lkIFN0cnVjdHVyZTo6
Zm9yRWFjaFByb3BlcnR5Q29uY3VycmVudGx5KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlmICghZnVuY3RvcihlbnRyeSkp
IHsKLSAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAg
ICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB0YWJs
ZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAgICAgICB0YWJsZVN0cnVjdHVyZS0+Y2Vs
bExvY2soKS51bmxvY2soKTsKICAgICB9CiB9CiAKQEAgLTMwMiwxNSArMzMxLDM3IEBAIGlubGlu
ZSBKU1ZhbHVlIFN0cnVjdHVyZTo6cHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQ2VsCiAgICAgcmV0dXJuIHByb3RvdHlwZUZvckxvb2t1cFByaW1pdGl2
ZUltcGwoZ2xvYmFsT2JqZWN0LCB0aGlzKTsKIH0KIAoraW5saW5lIFN0cnVjdHVyZUNoYWluKiBT
dHJ1Y3R1cmU6OmNhY2hlZFByb3RvdHlwZUNoYWluKCkgY29uc3QKK3sKKyNpZiBDUFUoQUREUkVT
UzY0KQorICAgIHJldHVybiBtX21heE9mZnNldEFuZENhY2hlZFByb3RvdHlwZUNoYWluLnBvaW50
ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCk7Cisj
ZW5kaWYKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRDYWNoZWRQcm90b3R5cGVDaGFp
bihWTSYgdm0sIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKK3sKKyAgICBBU1NFUlQoIWlzT2JqZWN0
KCkpOworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJl
R0NUaHJlYWQoKSk7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX21heE9mZnNldEFuZENhY2hl
ZFByb3RvdHlwZUNoYWluLnNldFBvaW50ZXIoY2hhaW4pOworICAgIHZtLmhlYXAud3JpdGVCYXJy
aWVyKHRoaXMsIGNoYWluKTsKKyNlbHNlCisgICAgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXQo
dm0sIHRoaXMsIGNoYWluKTsKKyNlbmRpZgorfQorCiBpbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0
cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogYmFzZSkgY29uc3QKIHsKKyAgICBBU1NFUlQodGhpcy0+aXNPYmplY3Qo
KSk7CiAgICAgQVNTRVJUKGJhc2UtPnN0cnVjdHVyZSh2bSkgPT0gdGhpcyk7CiAgICAgLy8gV2Ug
Y2FjaGUgb3VyIHByb3RvdHlwZSBjaGFpbiBzbyBvdXIgY2xpZW50cyBjYW4gc2hhcmUgaXQuCi0g
ICAgaWYgKCFpc1ZhbGlkKGdsb2JhbE9iamVjdCwgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQo
KSwgYmFzZSkpIHsKKyAgICBpZiAoIWlzVmFsaWQoZ2xvYmFsT2JqZWN0LCBjYWNoZWRQcm90b3R5
cGVDaGFpbigpLCBiYXNlKSkgewogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHByb3RvdHlw
ZUZvckxvb2t1cChnbG9iYWxPYmplY3QsIGJhc2UpOwotICAgICAgICBtX2NhY2hlZFByb3RvdHlw
ZUNoYWluLnNldCh2bSwgdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZSh2bSwgcHJvdG90eXBl
LmlzTnVsbCgpID8gbnVsbHB0ciA6IGFzT2JqZWN0KHByb3RvdHlwZSkpKTsKKyAgICAgICAgY29u
c3RfY2FzdDxTdHJ1Y3R1cmUqPih0aGlzKS0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4odm0sIFN0
cnVjdHVyZUNoYWluOjpjcmVhdGUodm0sIHByb3RvdHlwZS5pc051bGwoKSA/IG51bGxwdHIgOiBh
c09iamVjdChwcm90b3R5cGUpKSk7CiAgICAgfQotICAgIHJldHVybiBtX2NhY2hlZFByb3RvdHlw
ZUNoYWluLmdldCgpOworICAgIHJldHVybiBjYWNoZWRQcm90b3R5cGVDaGFpbigpOwogfQogCiBp
bmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UpIGNvbnN0CkBAIC0zNTAsNyArNDAx
LDcgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQogCiBpbmxpbmUgV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjpwcm9wZXJ0
eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxM
b2NrZXIgbG9ja2VyKGNlbGxMb2NrKCkpOwogICAgIGlmICghaGFzUmFyZURhdGEoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CkBAIC0zNzEsMTYg
KzQyMiwxNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNp
c3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAKICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBwcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0
b3JhZ2VTaXplKCk7Ci0gICAgdW5zaWduZWQgaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFs
U2l6ZSA9IHRvdGFsU2l6ZSA8IG1faW5saW5lQ2FwYWNpdHkgPyAwIDogdG90YWxTaXplIC0gbV9p
bmxpbmVDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90
YWxTaXplID0gdG90YWxTaXplIDwgaW5saW5lQ2FwYWNpdHkoKSA/IDAgOiB0b3RhbFNpemUgLSBp
bmxpbmVDYXBhY2l0eSgpOwogCiAgICAgYXV0byBmYWlsID0gWyZdIChjb25zdCBjaGFyKiBkZXNj
cmlwdGlvbikgewogICAgICAgICBkYXRhTG9nKCJEZXRlY3RlZCBvZmZzZXQgaW5jb25zaXN0ZW5j
eTogIiwgZGVzY3JpcHRpb24sICIhXG4iKTsKICAgICAgICAgZGF0YUxvZygidGhpcyA9ICIsIFJh
d1BvaW50ZXIodGhpcyksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCJ0cmFuc2l0aW9uT2Zmc2V0
ID0gIiwgdHJhbnNpdGlvbk9mZnNldCgpLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygibWF4T2Zm
c2V0ID0gIiwgbWF4T2Zmc2V0KCksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCJtX2lubGluZUNh
cGFjaXR5ID0gIiwgbV9pbmxpbmVDYXBhY2l0eSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIm1f
aW5saW5lQ2FwYWNpdHkgPSAiLCBpbmxpbmVDYXBhY2l0eSgpLCAiXG4iKTsKICAgICAgICAgZGF0
YUxvZygicHJvcGVydHlUYWJsZSA9ICIsIFJhd1BvaW50ZXIocHJvcGVydHlUYWJsZSksICJcbiIp
OwotICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0ID0gIiwgbnVtYmVy
T2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSksICJcbiIp
OworICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0ID0gIiwgbnVtYmVy
T2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgaW5saW5lQ2FwYWNpdHkoKSksICJcbiIp
OwogICAgICAgICBkYXRhTG9nKCJ0b3RhbFNpemUgPSAiLCB0b3RhbFNpemUsICJcbiIpOwogICAg
ICAgICBkYXRhTG9nKCJpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90YWxTaXplID0gIiwgaW5s
aW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2co
Im51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhPZmZzZXQgPSAiLCBudW1iZXJPZk91dE9mTGlu
ZVNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpKSwgIlxuIik7CkBAIC0zODgsNyArNDM5LDcg
QEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeShQ
cm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmwKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7CiAgICAgfTsKICAgICAKLSAgICBpZiAobnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldCht
YXhPZmZzZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSkgIT0gdG90YWxTaXplKQorICAgIGlmIChudW1i
ZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBpbmxpbmVDYXBhY2l0eSgpKSAhPSB0
b3RhbFNpemUpCiAgICAgICAgIGZhaWwoIm51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQgZG9lc24n
dCBtYXRjaCB0b3RhbFNpemUiKTsKICAgICBpZiAoaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1Rv
dGFsU2l6ZSAhPSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgp
KSkKICAgICAgICAgZmFpbCgiaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSBkb2Vz
bid0IG1hdGNoIG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhPZmZzZXQiKTsKQEAgLTM5OCw3
ICs0NDksNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNp
c3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibAogCiBBTFdBWVNfSU5MSU5FIGJvb2wg
U3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3QKIHsKLSAgICBQcm9wZXJ0
eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgIFByb3Bl
cnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCk7CiAK
ICAgICBpZiAoIXByb3BlcnR5VGFibGUpIHsKICAgICAgICAgQVNTRVJUKCFpc1Bpbm5lZFByb3Bl
cnR5VGFibGUoKSk7CkBAIC00MzksNyArNDkwLDcgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQK
IHsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOwog
Ci0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwor
ICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhl
YXApOwogCiAgICAgc3dpdGNoIChzaG91bGRQaW4pIHsKICAgICBjYXNlIFNob3VsZFBpbjo6WWVz
OgpAQCAtNDYwLDEwICs1MTEsOSBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjph
ZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZAogCiAgICAgYXV0
byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZz
ZXQgPSB0YWJsZS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eU9m
ZnNldCBuZXdPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChpbmxpbmVDYXBhY2l0eSgpKTsKIAot
ICAgIG1fcHJvcGVydHlIYXNoID0gbV9wcm9wZXJ0eUhhc2ggXiByZXAtPmV4aXN0aW5nU3ltYm9s
QXdhcmVIYXNoKCk7Ci0gICAgbV9zZWVuUHJvcGVydGllcy5hZGQoYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4ocmVwKSk7CisgICAgYWRkUHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnR5KHJlcC0+ZXhp
c3RpbmdTeW1ib2xBd2FyZUhhc2goKSwgcmVwKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gdGFibGUt
PmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSk7CiAgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5zZWNvbmQpOwpAQCAtNDgyLDcgKzUzMiw3IEBA
IHRlbXBsYXRlPFN0cnVjdHVyZTo6U2hvdWxkUGluIHNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4K
IGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgUHJvcGVydHlUYWJs
ZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsKLSAgICBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CisgICAgR0NTYWZlQ29uY3VycmVudEpT
Q2VsbExvY2tlciBsb2NrZXIoY2VsbExvY2soKSwgdm0uaGVhcCk7CiAKICAgICBzd2l0Y2ggKHNo
b3VsZFBpbikgewogICAgIGNhc2UgU2hvdWxkUGluOjpZZXM6CkBAIC01MzIsNyArNTgyLDcgQEAg
aW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbihWTSYgdm0sIFByb3BlcnQKIHsKICAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSk7CiAgICAgQVNTRVJUKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKLSAgICBBU1NF
UlQocHJvcGVydHlUYWJsZU9yTnVsbCgpKTsKKyAgICBBU1NFUlQocHJvcGVydHlUYWJsZVVuc2Fm
ZU9yTnVsbCgpKTsKICAgICAKICAgICByZXR1cm4gcmVtb3ZlPFNob3VsZFBpbjo6WWVzPih2bSwg
cHJvcGVydHlOYW1lLCBmdW5jKTsKIH0KQEAgLTU1MCwxNSArNjAwLDc3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBTdHJ1Y3R1cmU6OnNldEdsb2JhbE9iamVjdChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldFByb3BlcnR5
VGFibGUoVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKKyNpZiBDUFUoQUREUkVTUzY0
KQorICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5zZXRQb2lu
dGVyKHRhYmxlKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCB0YWJsZSk7CisjZWxz
ZQogICAgIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5zZXRNYXlCZU51bGwodm0sIHRoaXMsIHRhYmxl
KTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpjbGVhclByb3Bl
cnR5VGFibGUoKQoreworI2lmIENQVShBRERSRVNTNjQpCisgICAgbV9vdXRPZkxpbmVUeXBlRmxh
Z3NBbmRQcm9wZXJ0eVRhYmxlVW5zYWZlLnNldFBvaW50ZXIobnVsbHB0cik7CisjZWxzZQorICAg
IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBTdHJ1Y3R1cmU6OnNldE91dE9mTGluZVR5cGVGbGFncyhUeXBlSW5mbzo6T3V0T2ZM
aW5lVHlwZUZsYWdzIG91dE9mTGluZVR5cGVGbGFncykKK3sKKyNpZiBDUFUoQUREUkVTUzY0KQor
ICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5zZXRUeXBlKG91
dE9mTGluZVR5cGVGbGFncyk7CisjZWxzZQorICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzID0gb3V0
T2ZMaW5lVHlwZUZsYWdzOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1
cmU6OnNldElubGluZUNhcGFjaXR5KHVpbnQ4X3QgaW5saW5lQ2FwYWNpdHkpCit7CisjaWYgQ1BV
KEFERFJFU1M2NCkKKyAgICBtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhLnNl
dFR5cGUoaW5saW5lQ2FwYWNpdHkpOworI2Vsc2UKKyAgICBtX2lubGluZUNhcGFjaXR5ID0gaW5s
aW5lQ2FwYWNpdHk7CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6
c2V0Q2xhc3NJbmZvKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQoreworI2lmIENQVShBRERS
RVNTNjQpCisgICAgbV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvLnNldFBvaW50ZXIoY2xh
c3NJbmZvKTsKKyNlbHNlCisgICAgbV9jbGFzc0luZm8gPSBjbGFzc0luZm87CisjZW5kaWYKIH0K
IAogQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6c2V0UHJldmlvdXNJRChWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogeworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgp
ICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpCiAg
ICAgICAgIHJhcmVEYXRhKCktPnNldFByZXZpb3VzSUQodm0sIHN0cnVjdHVyZSk7Ci0gICAgZWxz
ZQorICAgIGVsc2UgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIG1faW5saW5lQ2FwYWNp
dHlBbmRQcmV2aW91c09yUmFyZURhdGEuc2V0UG9pbnRlcihzdHJ1Y3R1cmUpOworICAgICAgICB2
bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOworI2Vsc2UKICAgICAgICAgbV9w
cmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOworI2VuZGlmCisgICAg
fQorfQorCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNsZWFyUHJldmlvdXNJRCgpCit7CisgICAg
QVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVHQ1RocmVhZCgp
KTsKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmFyZURhdGEoKS0+Y2xlYXJQcmV2
aW91c0lEKCk7CisgICAgZWxzZSB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgbV9pbmxp
bmVDYXBhY2l0eUFuZFByZXZpb3VzT3JSYXJlRGF0YS5zZXRQb2ludGVyKG51bGxwdHIpOworI2Vs
c2UKKyAgICAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuY2xlYXIoKTsKKyNlbmRpZgorICAgIH0K
IH0KIAogQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6c2hvdWxkQ29udmVydFRvUG9seVBy
b3RvKGNvbnN0IFN0cnVjdHVyZSogYSwgY29uc3QgU3RydWN0dXJlKiBiKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aAppbmRleCBmNDg5MjhjZjNiMjk1NjZlMjI3MGQ4NmY2MDIzNDM4NWVhYmI4NTg5Li42Y2NiN2Fi
NmZmNDY3OTZlODMyYWY0NmJhZGJlNDBjMzEyYjVkYTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaApAQCAt
MzksOCArMzksOCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRy
aWJ1dGUgPSAxIDw8IDY7IC8vIFVzZSBmb3IgdHJhbnNpdGlvbgogCiAvLyBTdXBwb3J0IGZvciBh
dHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJv
cGVydGllcy4KIC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9u
IG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCi1lbnVtIGNsYXNzIE5vblByb3BlcnR5VHJhbnNpdGlv
biA6IHVuc2lnbmVkIHsKLSAgICBBbGxvY2F0ZVVuZGVjaWRlZCwKK2VudW0gY2xhc3MgTm9uUHJv
cGVydHlUcmFuc2l0aW9uIDogdWludDhfdCB7CisgICAgQWxsb2NhdGVVbmRlY2lkZWQgPSAwLAog
ICAgIEFsbG9jYXRlSW50MzIsCiAgICAgQWxsb2NhdGVEb3VibGUsCiAgICAgQWxsb2NhdGVDb250
aWd1b3VzLApAQCAtNTAsMTQgKzUwLDE2IEBAIGVudW0gY2xhc3MgTm9uUHJvcGVydHlUcmFuc2l0
aW9uIDogdW5zaWduZWQgewogICAgIEFkZEluZGV4ZWRBY2Nlc3NvcnMsCiAgICAgUHJldmVudEV4
dGVuc2lvbnMsCiAgICAgU2VhbCwKLSAgICBGcmVlemUKKyAgICBGcmVlemUsCisgICAgTGFzdE9m
Tm9uUHJvcGVydHlUcmFuc2l0aW9uID0gRnJlZXplLAogfTsKLXVzaW5nIFRyYW5zaXRpb25Qcm9w
ZXJ0eUF0dHJpYnV0ZXMgPSB1aW50MTZfdDsKK3VzaW5nIFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJp
YnV0ZXMgPSB1aW50OF90OwogCi1pbmxpbmUgdW5zaWduZWQgdG9BdHRyaWJ1dGVzKE5vblByb3Bl
cnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoraW5saW5lIGNvbnN0ZXhwciB1aW50OF90IHRvQXR0
cmlidXRlcyhOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKIHsKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyYW5zaXRpb24pICsgRmlyc3RJbnRlcm5hbEF0dHJpYnV0
ZTsKIH0KK3N0YXRpY19hc3NlcnQodG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5VHJhbnNpdGlvbjo6
TGFzdE9mTm9uUHJvcGVydHlUcmFuc2l0aW9uKSA8PSBVSU5UOF9NQVgpOwogCiBpbmxpbmUgYm9v
bCBjaGFuZ2VzSW5kZXhpbmdUeXBlKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQog
ewpAQCAtMjMxLDcgKzIzMyw3IEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAK
IHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUoKQotICAgICAgICA6IG1fZGF0
YShVc2luZ1NpbmdsZVNsb3RGbGFnKQorICAgICAgICA6IG1fZGF0YShiaXR3aXNlX2Nhc3Q8dWlu
dDhfdCo+KFVzaW5nU2luZ2xlU2xvdEZsYWcpKQogICAgIHsKICAgICB9CiAKQEAgLTI1NywxOSAr
MjU5LDE5IEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAKICAgICBib29sIGlz
VXNpbmdTaW5nbGVTbG90KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2RhdGEgJiBV
c2luZ1NpbmdsZVNsb3RGbGFnOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obV9kYXRhLmdldCgpKSAmIFVzaW5nU2luZ2xlU2xvdEZsYWc7CiAgICAgfQogCiAgICAgVHJh
bnNpdGlvbk1hcCogbWFwKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNVc2luZ1Np
bmdsZVNsb3QoKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VHJhbnNpdGlvbk1hcCo+
KG1fZGF0YSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VHJhbnNpdGlvbk1hcCo+KG1f
ZGF0YS5nZXQoKSk7CiAgICAgfQogCiAgICAgV2Vha0ltcGwqIHdlYWtJbXBsKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKLSAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxXZWFrSW1wbCo+KG1fZGF0YSAmIH5Vc2luZ1NpbmdsZVNsb3RGbGFnKTsK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXZWFrSW1wbCo+KGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KG1fZGF0YS5nZXQoKSkgJiB+VXNpbmdTaW5nbGVTbG90RmxhZyk7CiAgICAgfQogCiAg
ICAgdm9pZCBzZXRNYXAoVHJhbnNpdGlvbk1hcCogbWFwKQpAQCAtMjgwLDcgKzI4Miw3IEBAIGNs
YXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgICAgICAgICBXZWFrU2V0OjpkZWFs
bG9jYXRlKGltcGwpOwogCiAgICAgICAgIC8vIFRoaXMgaW1wbGljaXRseSBjbGVhcnMgdGhlIGZs
YWcgdGhhdCBpbmRpY2F0ZXMgd2UncmUgdXNpbmcgYSBzaW5nbGUgdHJhbnNpdGlvbgotICAgICAg
ICBtX2RhdGEgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KG1hcCk7CisgICAgICAgIG1fZGF0YSA9
IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4obWFwKTsKIAogICAgICAgICBBU1NFUlQoIWlzVXNpbmdT
aW5nbGVTbG90KCkpOwogICAgIH0KQEAgLTI4OCw3ICsyOTAsMTEgQEAgY2xhc3MgU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlIHsKICAgICBTdHJ1Y3R1cmUqIHNpbmdsZVRyYW5zaXRpb24oKSBjb25z
dDsKICAgICB2b2lkIHNldFNpbmdsZVRyYW5zaXRpb24oU3RydWN0dXJlKik7CiAKLSAgICBpbnRw
dHJfdCBtX2RhdGE7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBQYWNrZWRQdHI8dWludDhfdD4g
bV9kYXRhOworI2Vsc2UKKyAgICBOYWtlZFB0cjx1aW50OF90PiBtX2RhdGE7CisjZW5kaWYKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV3JpdGVCYXJyaWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
cml0ZUJhcnJpZXIuaAppbmRleCA3MDdlMjBiNmU1YWMzZjZiYmJjOTdjOTU1ZGQxZTAxN2Y2MGQy
MjAyLi5mN2Q0NDcxOTk0MDk4YzQyMThlZDBhNjg3NmJkZjUyMmIzNDQyNmNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaApAQCAtMjQ4LDQgKzI0OCw2
IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVLCBUcmFp
dHNVPiYgbGhzLCBjb25zdCBXcml0ZUJhcnJpCiAgICAgcmV0dXJuIGxocy5nZXQoKSA9PSByaHMu
Z2V0KCk7CiB9CiAKK3VzaW5nIFVuc2FmZUNlbGxQb2ludGVyID0gdWludHB0cl90OworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNw
cAppbmRleCA5YTdmNDlhMTQwNTNhMDgyN2RiYWUzNTJkMjhmNTAzNjA3ZmY2Y2Q3Li5hMjBmNjA2
ZjdiODFiOTQyYjg4OWQzNWE1NTNhY2VkNzgyYThiODNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCkBAIC0yODE4LDggKzI4MTgsOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3RydWN0dXJl
VHJhbnNpdGlvbkxpcwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKHN0cnVjdHVyZS0+bWF4
T2Zmc2V0KCkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKQotICAgICAgICAg
ICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwganNTdHJpbmcodm0sIFN0cmluZygqc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpKSk7CisgICAgICAgIGlmIChhdXRvKiB0cmFu
c2l0aW9uUHJvcGVydHlOYW1lID0gc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkp
CisgICAgICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc1N0cmluZyh2bSwgU3Ry
aW5nKCp0cmFuc2l0aW9uUHJvcGVydHlOYW1lKSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc051bGwoKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDE2ZWNkYWE2MWU4NmVjODhk
ZTA0NDhlMjlmNjY1ODYwNjZlYzg0YTEuLjE3YzFhMzJiZjkwM2ZiODIzMzNlOTRjNTk4NmU0M2Ix
MDhlMTgzZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC0yNzUsNyArMjc1LDggQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9p
bnRTbG93KCkKIAogICAgICAgICAgICAgc3RhY2tMaW1pdEdQUklzQ2xvYmJlcmVkID0gdHJ1ZTsK
ICAgICAgICAgICAgIGppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSwgc2NyYXRjaEdQUiwgc2NyYXRj
aEdQUiwgc3RhY2tMaW1pdEdQUik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZDbGFzc0luZm8oKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgaml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0
d2lzZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKSwgc2NyYXRjaEdQUik7
CiAKICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19maW5hbDxXZWJBc3NlbWJseUZ1
bmN0aW9uPjo6dmFsdWUsICJXZSBkbyBub3QgY2hlY2sgZm9yIHN1YnR5cGVzIGJlbG93Iik7CiAg
ICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8V2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24+Ojp2YWx1ZSwgIldlIGRvIG5vdCBjaGVjayBmb3Igc3VidHlwZXMgYmVsb3ciKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NvbXBhY3RQb2ludGVyVHVwbGUuaCBiL1NvdXJj
ZS9XVEYvd3RmL0NvbXBhY3RQb2ludGVyVHVwbGUuaAppbmRleCBiOGYyMDFlYTA5NjU4OWI5MmZm
NTA2YzY0ZjA5OWI4ZDk1Y2JiZTJmLi41YTU1OTU4YzA5MjY4OGYwYmEzZGViZjc2NmYwYzE5ZTZk
NGNlOGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmgK
KysrIGIvU291cmNlL1dURi93dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5oCkBAIC0zMyw1NiArMzMs
NjggQEAgbmFtZXNwYWNlIFdURiB7CiAKIC8vIFRoZSBnb2FsIG9mIHRoaXMgY2xhc3MgaXMgZm9s
ZGluZyBhIHBvaW50ZXIgYW5kIDEgYnl0ZSB2YWx1ZSBpbnRvIDggYnl0ZXMgaW4gYm90aCAzMmJp
dCBhbmQgNjRiaXQgYXJjaGl0ZWN0dXJlcy4KIC8vIDMyYml0IGFyY2hpdGVjdHVyZSBqdXN0IGhh
cyBhIHBhaXIgb2YgYnl0ZSBhbmQgcG9pbnRlciwgd2hpY2ggc2hvdWxkIGJlIDggYnl0ZXMuCi0v
LyBJbiA2NGJpdCwgd2UgdXNlIHRoZSB1cHBlciA1IGJpdHMgYW5kIGxvd2VyIDMgYml0cyAoemVy
byBkdWUgdG8gYWxpZ25tZW50KSBzaW5jZSB0aGVzZSBiaXRzIGFyZSBzYWZlIHRvIHVzZSBldmVu
Ci0vLyB3aXRoIDUtbGV2ZWwgcGFnZSB0YWJsZXMgd2hlcmUgdGhlIGVmZmVjdGl2ZSBwb2ludGVy
IHdpZHRoIGlzIDU3Yml0cy4KKy8vIFdlIGFyZSBhc3N1bWluZyA0OGJpdCBwb2ludGVycyBoZXJl
LCB3aGljaCBpcyBhbHNvIGFzc3VtZWQgaW4gSlNWYWx1ZSBhbnl3YXkuCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBQb2ludGVyVHlwZSwgdHlwZW5hbWUgVHlwZT4KIGNsYXNzIENvbXBhY3RQb2ludGVyVHVw
bGUgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKFR5cGUpID09IDEsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihUeXBlKSA8PSAyLCAiIik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3BvaW50ZXI8
UG9pbnRlclR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRl
Z3JhbDxUeXBlPjo6dmFsdWUgfHwgc3RkOjppc19lbnVtPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAg
IHVzaW5nIFVuc2lnbmVkVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxU
eXBlLCBib29sPiwgdWludDhfdCwgc3RkOjptYWtlX3Vuc2lnbmVkX3Q8VHlwZT4+OworICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKFVuc2lnbmVkVHlwZSkgPT0gc2l6ZW9mKFR5cGUpKTsKIAogICAg
IENvbXBhY3RQb2ludGVyVHVwbGUoKSA9IGRlZmF1bHQ7CiAKICNpZiBDUFUoQUREUkVTUzY0KQog
cHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZW5jb2RlVHlwZSh1aW50OF90
IHR5cGUpCisgICAgc3RhdGljX2Fzc2VydChXVEZfT1NfQ09OU1RBTlRfRUZGRUNUSVZFX0FERFJF
U1NfV0lEVEggPD0gNDgpOworCisjaWYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDQ4IC8gODsKKyAg
ICB9CisjZW5kaWYKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZW5jb2RlVHlwZShU
eXBlIHR5cGUpCiAgICAgewotICAgICAgICAvLyBFbmNvZGUgOGJpdCB0eXBlIFVVVUREREREIGlu
dG8gNjRiaXQgZGF0YSBERERERC4uNTZiaXQuLlVVVS4KLSAgICAgICAgcmV0dXJuIChzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odHlwZSkgPDwgNTkpIHwgKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0eXBl
KSA+PiA1KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2Fz
dDxVbnNpZ25lZFR5cGU+KHR5cGUpKSA8PCA0ODsKICAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50OF90IGRlY29kZVR5cGUodWludDY0X3QgdmFsdWUpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBUeXBlIGRlY29kZVR5cGUodWludDY0X3QgdmFsdWUpCiAgICAgewotICAgICAgICAvLyBEZWNv
ZGUgNjRiaXQgZGF0YSBERERERC4uNTZiaXQuLlVVVSBpbnRvIDhiaXQgdHlwZSBVVVVERERERC4K
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCh2YWx1ZSA+PiA1OSkgfCAodmFs
dWUgPDwgNSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4oc3RhdGljX2Nhc3Q8
VW5zaWduZWRUeXBlPih2YWx1ZSA+PiA0OCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDY0X3QgdHlwZU1hc2sgPSBlbmNvZGVUeXBlKFVJTlQ4X01BWCk7Ci0gICAgc3RhdGlj
X2Fzc2VydCgweEY4MDAwMDAwMDAwMDAwMDdVTEwgPT0gdHlwZU1hc2ssICIiKTsKLSAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQ2NF90IHBvaW50ZXJNYXNrID0gfnR5cGVNYXNrOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdWludDY0X3QgcG9pbnRlck1hc2sgPSAoMVVMTCA8PCA0OCkgLSAxOwogCiAg
ICAgQ29tcGFjdFBvaW50ZXJUdXBsZShQb2ludGVyVHlwZSBwb2ludGVyLCBUeXBlIHR5cGUpCi0g
ICAgICAgIDogbV9kYXRhKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4ocG9pbnRlcikgfCBlbmNvZGVU
eXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHR5cGUpKSkKKyAgICAgICAgOiBtX2RhdGEoZW5jb2Rl
KHBvaW50ZXIsIHR5cGUpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKChiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3Q+KHBvaW50ZXIpICYgMGIxMTEpID09IDB4MCk7CisgICAgICAgIEFTU0VSVCh0aGlzLT50
eXBlKCkgPT0gdHlwZSk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5wb2ludGVyKCkgPT0gcG9pbnRl
cik7CiAgICAgfQogCiAgICAgUG9pbnRlclR5cGUgcG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIGJp
dHdpc2VfY2FzdDxQb2ludGVyVHlwZT4obV9kYXRhICYgcG9pbnRlck1hc2spOyB9CiAgICAgdm9p
ZCBzZXRQb2ludGVyKFBvaW50ZXJUeXBlIHBvaW50ZXIpCiAgICAgewotICAgICAgICBzdGF0aWNf
YXNzZXJ0KGFsaWdub2YodHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxQb2ludGVyVHlwZT46
OnR5cGUpID49IGFsaWdub2Yodm9pZCopLCAiIik7Ci0gICAgICAgIEFTU0VSVCgoYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pihwb2ludGVyKSAmIDBiMTExKSA9PSAweDApOwotICAgICAgICBtX2RhdGEg
PSBDb21wYWN0UG9pbnRlclR1cGxlKHBvaW50ZXIsIHR5cGUoKSkubV9kYXRhOworICAgICAgICBt
X2RhdGEgPSBlbmNvZGUocG9pbnRlciwgdHlwZSgpKTsKICAgICB9CiAKLSAgICBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihkZWNvZGVUeXBlKG1fZGF0YSkpOyB9
CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gZGVjb2RlVHlwZShtX2RhdGEpOyB9CiAg
ICAgdm9pZCBzZXRUeXBlKFR5cGUgdHlwZSkKICAgICB7Ci0gICAgICAgIG1fZGF0YSA9IENvbXBh
Y3RQb2ludGVyVHVwbGUocG9pbnRlcigpLCB0eXBlKS5tX2RhdGE7CisgICAgICAgIG1fZGF0YSA9
IGVuY29kZShwb2ludGVyKCksIHR5cGUpOwogICAgIH0KIAorICAgIHVpbnQ2NF90IGRhdGEoKSBj
b25zdCB7IHJldHVybiBtX2RhdGE7IH0KKwogcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDY0X3Qg
ZW5jb2RlKFBvaW50ZXJUeXBlIHBvaW50ZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHBvaW50ZXIpIHwgZW5jb2RlVHlwZSh0eXBlKTsK
KyAgICB9CisKICAgICB1aW50NjRfdCBtX2RhdGEgeyAwIH07CiAjZWxzZQogcHVibGljOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCA2YmJiZWZlNzBmYzFjMTMwMmY0OTVlYzNmNmUyYTQ0
MTAyNWU2ZDZhLi4wMDQzNTYzNDFmNzQ3MTk2NDZmMTU4MTQ1MzZmNzUwN2Q0MTJmMzQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtMTg5LDggKzE4OSw4IEBAIGNsYXNzIFN0cmluZ0lt
cGwgOiBwcml2YXRlIFN0cmluZ0ltcGxTaGFwZSB7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIE1heExlbmd0aCA9IFN0cmluZ0ltcGxTaGFwZTo6TWF4TGVuZ3RoOwogCi0gICAgLy8g
VGhlIGJvdHRvbSA2IGJpdHMgaW4gdGhlIGhhc2ggYXJlIGZsYWdzLgotICAgIHN0YXRpYyBjb25z
dGV4cHIgY29uc3QgdW5zaWduZWQgc19mbGFnQ291bnQgPSA2OworICAgIC8vIFRoZSBib3R0b20g
NiBiaXRzIGluIHRoZSBoYXNoIGFyZSBmbGFncywgYnV0IHJlc2VydmUgOCBiaXRzIHNpbmNlIFN0
cmluZ0hhc2ggb25seSBoYXMgMjQgYml0cyBhbnl3YXkuCisgICAgc3RhdGljIGNvbnN0ZXhwciBj
b25zdCB1bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDg7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdNYXNrID0gKDF1IDw8IHNfZmxhZ0NvdW50KSAt
IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbEltcGwuaCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5oCmluZGV4IGVkMGYxM2U1NDRmMTBjMzFiNDE5YmVh
YWE4MjUyMzc0YTg3MGFjNzMuLmI4Y2MzOGNkNmUzNTAxZGRlYTY1OTZiNmMwZWI2MjZkYmE0YWIx
MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFN5
bWJvbEltcGwgOiBwdWJsaWMgVW5pcXVlZFN0cmluZ0ltcGwgewogICAgIHN0YXRpYyBjb25zdGV4
cHIgRmxhZ3Mgc19mbGFnSXNSZWdpc3RlcmVkID0gMGIwMTB1OwogICAgIHN0YXRpYyBjb25zdGV4
cHIgRmxhZ3Mgc19mbGFnSXNQcml2YXRlID0gMGIxMDB1OwogCi0gICAgdW5zaWduZWQgaGFzaEZv
clN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEZvclN5bWJvbDsgfQorICAgIHVuc2lnbmVk
IGhhc2hGb3JTeW1ib2woKSBjb25zdCB7IHJldHVybiBtX2hhc2hGb3JTeW1ib2wgPj4gc19mbGFn
Q291bnQ7IH0KICAgICBib29sIGlzTnVsbFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3Mg
JiBzX2ZsYWdJc051bGxTeW1ib2w7IH0KICAgICBib29sIGlzUmVnaXN0ZXJlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmxhZ3MgJiBzX2ZsYWdJc1JlZ2lzdGVyZWQ7IH0KICAgICBib29sIGlzUHJpdmF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBzX2ZsYWdJc1ByaXZhdGU7IH0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAz
N2U0ZGQ5ODUxZDM0MWQ3ZjNmOTM3N2ZiMTQ2ZTMxMmQ5MWEzNjg4Li40NTRjOTcxNjRmN2EzNDg5
MmI4M2MxYWNmMzJiYmQ4YTVjMDg3MDA5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMDIt
MjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBT
aHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHRlc3QgaXMgaGFsZi1icm9rZW4gc2luY2UgaXQgcmVsaWVzIG9uIEhhc2hN
YXAncyBvcmRlciBpbXBsaWNpdGx5LgorICAgICAgICBXZSBjaGFuZ2VkIFN5bWJvbEltcGwncyBo
YXNoIGNvZGUsIHNvIGl0IG1ha2VzIHRoZSByZXN1bHQgZGlmZmVyZW50LgorCisgICAgICAgICog
aW5zcGVjdG9yL2RlYnVnZ2VyL3RhaWwtZGVsZXRlZC1mcmFtZXMvdGFpbC1kZWxldGVkLWZyYW1l
cy10aGlzLXZhbHVlLWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMi0yMSAgSmFzb24gTGF3cmVuY2Ug
IDxsYXdyZW5jZS5qQGFwcGxlLmNvbT4KIAogICAgICAgICBbIGlPUyBdIGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2tleS1nZW5lcmF0b3JzL3JlYWRpbmctYXV0b2lu
Y3JlbWVudC1pbmRleGVzLWN1cnNvcnMuYW55LnNlcnZpY2V3b3JrZXIuaHRtbCBpcyBmbGFreSBm
YWlsaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3RhaWwt
ZGVsZXRlZC1mcmFtZXMvdGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci90YWlsLWRlbGV0ZWQtZnJhbWVzL3Rh
aWwtZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1ZS1leHBlY3RlZC50eHQKaW5kZXggMjEyNWZiNTI5
NzFjZWNlYWI3YzA4MDM0ZjJkNTM2YzdhMmE0YjRlOC4uZTM3NDQ2NDUzN2FhYjdkNGEwYWI1ZTI0
ZjRmYzhhNzBmZjdmNWI3YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVn
Z2VyL3RhaWwtZGVsZXRlZC1mcmFtZXMvdGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvdGFpbC1kZWxl
dGVkLWZyYW1lcy90YWlsLWRlbGV0ZWQtZnJhbWVzLXRoaXMtdmFsdWUtZXhwZWN0ZWQudHh0CkBA
IC0xNCw2ICsxNCw2IEBAIENBTEwgU1RBQ0s6CiAzOiBbRl0gc3RhcnRBQkMKICAgdGhpczogdW5k
ZWZpbmVkCiA0OiBbUF0gR2xvYmFsIENvZGUKLSAgdGhpczogYyAtIAorICB0aGlzOiBhIC0gCiBS
RVNVTUVECiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391454</attachid>
            <date>2020-02-21 23:11:12 -0800</date>
            <delta_ts>2020-02-22 00:55:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207827-20200221231111.patch</filename>
            <type>text/plain</type>
            <size>111913</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NDI3NDBmNDllZGMwZWQ3MmU3YzUzZjg3NzNiYzQ2NzUwNzM1NGYyLi5lNzllMzVlZTBkYzk5ZWZk
NzQ0NTllZGQ4MzUwNjJjY2IxMjBlNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzIgQEAKKzIwMjAtMDItMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNocmlua3Mgc2l6ZW9mKFN0
cnVjdHVyZSkgZnJvbSAxMTIgdG8gOTYgKDE2IGJ5dGVzKSBpbiA2NCBiaXQgYXJjaGl0ZWN0dXJl
cy4KKyAgICAgICAgU3RydWN0dXJlIGlzIG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IGFsbG9j
YXRlZCBKU0NlbGwgaW4gSlNDLiBTbyBpdCBpcyB3b3J0aCBkb2luZworICAgICAgICBhbGwgdGhl
IHNvcnQgb2YgYml0IGhhY2tzIHRvIG1ha2UgaXQgY29tcGFjdCBhcyBtdWNoIGFzIHBvc3NpYmxl
LgorCisgICAgICAgICAgICAxLiBTdHJpbmdIYXNoZXIgaXMgYWx3YXlzIGdlbmVyYXRpbmcgMjQg
Yml0cyBoYXNoZXMgc28gZmFyLiBCeSBsZXZlcmFnaW5nIHRoaXMgZmFjdCwKKyAgICAgICAgICAg
ICAgIHdlIHN0b3JlIGhhc2ggY29kZSBpbiBTdHJ1Y3R1cmUgaW4gMyBieXRlcyAoMjQgYml0cykg
Zm9yIHByb3BlcnR5LWhhc2ggYW5kIHNlZW4tcHJvcGVydHktaGFzaC4KKyAgICAgICAgICAgIDIu
IFVzZWQgUGFja2VkUHRyIGZvciBDKysgbm9uLWNvbmN1cnJlbnRseSBhY2Nlc3NlZCBkYXRhIHN0
cnVjdHVyZXMuCisgICAgICAgICAgICAzLiBQdXQgb3V0T2ZMaW5lVHlwZUZsYWdzLCBtYXhPZmZz
ZXQgYW5kIHRyYW5zaXRpb25PZmZzZXQgaW50byBoaWdoZXN0IGJpdHMgb2YgbV9wcm9wZXJ0eVRh
YmxlVW5zYWZlLAorICAgICAgICAgICAgICAgbV9jYWNoZWRQcm90b3R5cGVDaGFpbiwgYW5kIG1f
Y2xhc3NJbmZvLiBEbyBub3QgdXNlIFBhY2tlZFB0ciBoZXJlIHNpbmNlIHNvbWUgb2YgdGhlbSBh
cmUgY29uY3VycmVudGx5IGFjY2Vzc2VkCisgICAgICAgICAgICAgICBieSBHQy4KKyAgICAgICAg
ICAgIDQuIFB1dCBtX2lubGluZUNhcGFjaXR5IGludG8gbG93ZXIgOCBiaXRzIG9mIG1fcHJvcGVy
dHlIYXNoLgorICAgICAgICAgICAgNS4gUmVtb3ZlIG1fbG9jaywgYW5kIHVzZSBTdHJ1Y3R1cmU6
OmNlbGxMb2NrKCkgaW5zdGVhZC4KKyAgICAgICAgICAgIDYuIFJlbW92ZSBtX2NhY2hlZFByb3Rv
dHlwZUNoYWluIGNsZWFyaW5nIGZyb20gdGhlIGNvbmN1cnJlbnQgY29sbGVjdG9yIHNpbmNlIGl0
IGlzIGRlYWQgY29kZSwgaXQgd2FzIG9sZCBjb2RlLgorICAgICAgICAgICAgICAgV2UgYXJlIHNl
dHRpbmcgbV9jYWNoZWRQcm90b3R5cGVDaGFpbiBvbmx5IGlmIFN0cnVjdHVyZSBpcyBmb3IgSlNP
YmplY3QuIENsZWFyaW5nIGhhcHBlbnMgb25seSBpZiBpdCBpcyBub3QKKyAgICAgICAgICAgICAg
IGEgU3RydWN0dXJlIGZvciBKU09iamVjdC4KKyAgICAgICAgICAgIDcuIExvY2tpbmcgc3RydWN0
dXJlIHdoZW4gbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lIGlzIGNoYW5nZWQuIFRoaXMgZmllbGQg
aXMgb25seSBtb2RpZmllZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgICAgIEFu
ZCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIGZpZWxkIHJlcXVpcmVzIGxvY2tpbmcuIFRoZW4g
d2UgY2FuIHVzZSA2IGJ5dGVzIG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS4KKyAgICAgICAgICAg
IDguIFdlIGVuc3VyZSB0aGF0IG9ubHkgdGhlIG1haW4gdGhyZWFkIGlzIGFjY2Vzc2luZyBtX3Ry
YW5zaXRpb25UYWJsZS4gVGhlbiB3ZSBjYW4gdXNlIDYgYnl0ZXMgbV90cmFuc2l0aW9uVGFibGUu
CisKKyAgICAgICAgTWFueSBwYWlycyBhcmUgdXNpbmcgQ29tcGFjdFBvaW50ZXJUdXBsZSB0byBt
YWtlIGNvZGUgY2xlYW4uCisgICAgICAgIENvbWJpbmluZyBhbGwgb2YgdGhlIGFib3ZlIHRlY2hu
aXF1ZXMgYW5kIGdldHMgdXMgMTYgYnl0ZXMuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hl
Y2tTdWJDbGFzcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RLZXlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNy
ZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3Jl
YXRlUHJvbWlzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
cmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlT2JqZWN0S2V5cyk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVQcm9taXNlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZUludGVy
bmFsRmllbGRPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlQ2hlY2tTdWJDbGFzcyk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkQ2xhc3NJbmZvRnJvbVN0cnVj
dHVyZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAqIHJ1
bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2xvbmVkQXJndW1lbnRz
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uY3VycmVudEpTTG9jay5o
OgorICAgICAgICAoSlNDOjpDb25jdXJyZW50SlNMb2NrZXJCYXNlOjpDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlKToKKyAgICAgICAgKEpTQzo6R0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbDo6R0NT
YWZlQ29uY3VycmVudEpTTG9ja2VySW1wbCk6CisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlckltcGw6On5HQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsKToKKyAgICAgICAg
KEpTQzo6Q29uY3VycmVudEpTTG9ja2VySW1wbDo6Q29uY3VycmVudEpTTG9ja2VySW1wbCk6Cisg
ICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcjo6R0NTYWZlQ29uY3VycmVudEpT
TG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
Ojp+R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29u
Y3VycmVudEpTTG9ja2VyOjpDb25jdXJyZW50SlNMb2NrZXIpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyk6CisgICAgICAgICogcnVudGltZS9K
U09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0Q29uY3VycmVudGx5
IGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlOjpzaW5nbGVUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzZXRTaW5nbGVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Z2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmR1bXBTdGF0aXN0aWNzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmVDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZE5ld1By
b3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJv
cGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5
cGVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJ
ZlBpbm5lZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
U2xvdyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cGluRm9yQ2FjaGluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWxsb2NhdGVS
YXJlRGF0YSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNl
bWVudFdhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlO
YW1lRW51bWVyYXRvciBjb25zdCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpnZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJ1bGVPdXRVbnNlZW5Qcm9wZXJ0
eUhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNlZW5Qcm9wZXJ0aWVzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eUhhc2hBbmRTZWVuUHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJl
bnRseSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FjaGVkUHJvdG90eXBlQ2hhaW4gY29u
c3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldENhY2hlZFByb3RvdHlwZUNoYWluKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbiBjb25zdCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3kgY29uc3QpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVt
b3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRQcm9wZXJ0eVRhYmxlKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpjbGVhclByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnNldE91dE9mTGluZVR5cGVGbGFncyk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6c2V0SW5saW5lQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldENs
YXNzSW5mbyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJldmlvdXNJRCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6Y2xlYXJQcmV2aW91c0lEKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjp0b0F0dHJpYnV0ZXMp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OlN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6aXNV
c2luZ1NpbmdsZVNsb3QgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGU6Om1hcCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZTo6d2Vha0ltcGwgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGU6OnNldE1hcCk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAgIChK
U0M6OkpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3RydWN0dXJlVHJhbnNpdGlvbkxpc3Qp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChK
U0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKwogMjAyMC0w
Mi0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXBw
b3J0IGZvciBieXRlY29kZSBjYWNoaW5nIG1vcmUgcm9idXN0IGFnYWluc3QgZmlsZSBjb3JydXB0
aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCBjZjEyZjI3NjUwZDQ4ZDUwMTViOGRjYzExZTU3ODI1YjM1YWRiODAyLi43NGVj
NTgzY2Y3NTJkYWUyYmIwNTAxNGVhNmExNTNlNjNiNTgyNjI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDIwLTAyLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0pTQ10gU2hyaW5rIFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA3ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBDb21wYWN0UG9pbnRlclR1cGxlIHVzYWJsZSBmb3Igc3Rv
cmluZyAxNiBiaXRzIGRhdGEuCisKKyAgICAgICAgKiB3dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5o
OgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9T
eW1ib2xJbXBsLmg6CisgICAgICAgIChXVEY6OlN5bWJvbEltcGw6Omhhc2hGb3JTeW1ib2wgY29u
c3QpOgorICAgICAgICAoV1RGOjpTeW1ib2xJbXBsOjpTeW1ib2xJbXBsKToKKwogMjAyMC0wMi0y
MSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lP
TihyMjU3MDcyKTogTW90aW9uTWFyayB8IE1hYyB8IC0xMCUKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggNjQyYjE2MzU2ZjkwZTljMzg2
MDJlYmM1N2ZkOWUwNGEwZjQ1YjUyOC4uOTRkOTJjMmFhMTNmYjc2NGY2NGEwMzQ2YWFiY2ZhNzU5
NGU5OTE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKQEAgLTk2MDUsNyArOTYwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDaGVja1N1YkNsYXNzKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzcGVjaWZpZWRHUFIg
PSBzcGVjaWZpZWQuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgYmFzZUdQUiwgb3RoZXJHUFIsIHNwZWNpZmllZEdQUik7Ci0gICAgICAgIG1faml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG90aGVyR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09m
ZnNldCgpKSwgb3RoZXJHUFIpOworICAgICAgICBtX2ppdC5lbWl0TG9hZENsYXNzSW5mb0Zyb21T
dHJ1Y3R1cmUob3RoZXJHUFIsIG90aGVyR1BSKTsKICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobm9kZS0+Y2xhc3NJbmZvKCkpLCBzcGVjaWZpZWRHUFIpOwog
CiAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CkBAIC0x
MjY5OCw3ICsxMjY5OCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0S2V5
cyhOb2RlKiBub2RlKQogCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dD
YXNlczsKICAgICAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIG9iamVjdEdQ
Uiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpwcmV2aW91c09y
UmFyZURhdGFPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6Om9mZnNldE9m
UHJldmlvdXNPclJhcmVEYXRhKCkpLCBzY3JhdGNoR1BSKTsKKyNpZiBDUFUoQUREUkVTUzY0KQor
ICAgICAgICAgICAgbV9qaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihTdHJ1
Y3R1cmU6OnByZXZpb3VzT3JSYXJlRGF0YU1hc2spLCBzY3JhdGNoR1BSKTsKKyNlbmRpZgogCiAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6RXF1YWwsIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoYml0
d2lzZV9jYXN0PGludDMyX3Q+KHZtKCkuc3RydWN0dXJlU3RydWN0dXJlLT5zdHJ1Y3R1cmVJRCgp
KSkpKTsKQEAgLTEyODM5LDcgKzEyODQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNyZWF0ZVRoaXMoTm9kZSogbm9kZSkKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1Q
dHIobnVsbHB0cik7CiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxv
Y2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJmbHks
IHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAotICAgIG1faml0LmxvYWQ4KEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
aW5saW5lQ2FwYWNpdHlHUFIpOworICAgIG1faml0LmxvYWQ4KEpJVENvbXBpbGVyOjpBZGRyZXNz
KHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpLCBpbmxp
bmVDYXBhY2l0eUdQUik7CiAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJl
c3VsdEdQUiwgaW5saW5lQ2FwYWNpdHlHUFIpOwogICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgp
KTsKIApAQCAtMTI4NzcsOCArMTI4ODAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3JlYXRlUHJvbWlzZShOb2RlKiBub2RlKQogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmFyZURhdGFHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwogICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlKCkgKyBJbnRlcm5hbEZ1
bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgc3RydWN0dXJlR1BSKSk7Ci0gICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0lu
dGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpLCBzY3JhdGNoMUdQUik7
Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7CisgICAgbV9qaXQuZW1pdExvYWRDbGFzc0lu
Zm9Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZUdQUiwgc2NyYXRjaDFHUFIpOworICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gx
R1BSLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFs
UHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpKSk7CiAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBnbG9iYWxPYmplY3QpLCBz
Y3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1
Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpKSk7CiAKQEAgLTEyOTI1
LDggKzEyOTI4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUludGVybmFs
RmllbGRPYmplY3QoTm9kZSogbm9kZSwgT3BlcmF0aW9uIG9wZXIKICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsK
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5j
dGlvblJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgp
ICsgSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgp
IC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVHUFIpOwogICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIHN0cnVjdHVy
ZUdQUikpOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihKU0NsYXNzOjppbmZvKCkpLCBz
Y3JhdGNoMUdQUik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1
Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7CisgICAgbV9qaXQuZW1p
dExvYWRDbGFzc0luZm9Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZUdQUiwgc2NyYXRjaDFHUFIpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKEpTQ2xhc3M6OmluZm8oKSkpKTsKICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGdsb2Jh
bE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaAppbmRleCBiMTA4YWJmY2NiODk1OGE4MzA3YzBhYTc4Y2Q2N2YyMDJkM2I4YzVj
Li44MzI5Yjc2YzU5N2FjNjNjM2YzYjIyMzhiN2YyM2IxMzVjZTJlYmU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaApA
QCAtMTM5LDExICsxMzksMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAg
IG1hY3JvKFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBcCiAgICAg
bWFjcm8oU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkp
IFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2xlbmd0aCwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5
T2Zmc2V0KCkpIFwKLSAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJbmZvLCBTdHJ1Y3R1cmU6OmNs
YXNzSW5mb09mZnNldCgpKSBcCisgICAgbWFjcm8oU3RydWN0dXJlX2NsYXNzSW5mbywgU3RydWN0
dXJlOjpvZmZzZXRPZkNsYXNzSW5mbygpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2dsb2JhbE9i
amVjdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVj
dHVyZV9pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5LCBTdHJ1Y3R1cmU6OmluZGV4aW5nTW9k
ZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVyZV9pbmxpbmVD
YXBhY2l0eSwgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSBcCi0gICAgbWFjcm8o
U3RydWN0dXJlX3ByZXZpb3VzT3JSYXJlRGF0YSwgU3RydWN0dXJlOjpwcmV2aW91c09yUmFyZURh
dGFPZmZzZXQoKSkgXAorICAgIG1hY3JvKFN0cnVjdHVyZV9pbmxpbmVDYXBhY2l0eSwgU3RydWN0
dXJlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpIFwKKyAgICBtYWNybyhTdHJ1Y3R1cmVfcHJl
dmlvdXNPclJhcmVEYXRhLCBTdHJ1Y3R1cmU6Om9mZnNldE9mUHJldmlvdXNPclJhcmVEYXRhKCkp
IFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfcHJvdG90eXBlLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9m
ZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3N0cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVSYXJlRGF0YV9jYWNoZWRP
d25LZXlzLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6b2Zmc2V0T2ZDYWNoZWRPd25LZXlzKCkpIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA0ZDM0
MjdiYzgyZThjOWIyNDdhYzg3MWEwMjAwMDFiYjIzODI5ZjI2Li43YTkwOThiODllYzk3MTlkOGNh
YmY1YTBiNjFiYjI3YWU4Y2Q4ZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCkBAIC02MDkxLDcgKzYwOTEsNyBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogCiAgICAgICAgICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd09iamVjdChtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0gbG9hZFN0cnVj
dHVyZShvYmplY3QpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBwcmV2aW91c09yUmFyZURhdGEg
PSBtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfcHJldmlvdXNPclJh
cmVEYXRhKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgcHJldmlvdXNPclJhcmVEYXRhID0gbV9v
dXQuYml0QW5kKG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6cHJldmlvdXNPclJhcmVEYXRh
TWFzayksIG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9wcmV2aW91
c09yUmFyZURhdGEpKTsKICAgICAgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90TnVs
bChwcmV2aW91c09yUmFyZURhdGEpLCB1bnN1cmUobm90TnVsbENhc2UpLCB1bnN1cmUoc2xvd0Nh
c2UpKTsKIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8obm90TnVsbENhc2UsIHJhcmVEYXRhQ2FzZSk7CkBAIC02Njc1LDcgKzY2NzUsOCBAQCBj
bGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQo
c3RydWN0dXJlKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShoYXNTdHJ1Y3R1cmUpKTsKIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhoYXNTdHJ1Y3R1cmUsIGNoZWNrR2xvYmFsT2JqZWN0Q2Fz
ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChtX291dC5sb2FkUHRyKHN0cnVj
dHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIobV9u
b2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSA6IEpT
UHJvbWlzZTo6aW5mbygpKSksIHVzdWFsbHkoY2hlY2tHbG9iYWxPYmplY3RDYXNlKSwgcmFyZWx5
KHNsb3dDYXNlKSk7CisgICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5iaXRBbmQobV9v
dXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX2NsYXNzSW5mbyksIG1fb3V0
LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFzaykpOworICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0cihtX25vZGUtPmlz
SW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNl
OjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nh
c2UpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0dsb2JhbE9iamVjdENhc2UsIGZh
c3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGRlcml2ZWRTdHJ1Y3R1
cmUgPSBtX291dC5hbmNob3Ioc3RydWN0dXJlKTsKQEAgLTY3MzAsNyArNjczMSw4IEBAIGNsYXNz
IExvd2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChzdHJ1
Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOwogCiAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmplY3RDYXNlKTsK
LSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIoc3RydWN0dXJl
LCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5jb25zdEludFB0cihKU0NsYXNz
OjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nh
c2UpKTsKKyAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmJpdEFuZChtX291dC5sb2Fk
UHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJ
bnRQdHIoU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCht
X291dC5lcXVhbChjbGFzc0luZm8sIG1fb3V0LmNvbnN0SW50UHRyKEpTQ2xhc3M6OmluZm8oKSkp
LCB1c3VhbGx5KGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSksIHJhcmVseShzbG93Q2FzZSkpOwogCiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSwgZmFzdEFsbG9jYXRp
b25DYXNlKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIo
c3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9nbG9iYWxPYmplY3QpLCB3ZWFrUG9pbnRlcihn
bG9iYWxPYmplY3QpKSwgdXN1YWxseShmYXN0QWxsb2NhdGlvbkNhc2UpLCByYXJlbHkoc2xvd0Nh
c2UpKTsKQEAgLTEzMjA4LDcgKzEzMjEwLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKICAg
ICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKGNlbGwpOwotICAgICAg
ICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBz
LlN0cnVjdHVyZV9jbGFzc0luZm8pOworICAgICAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1f
b3V0LmJpdEFuZChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xh
c3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIoU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSk7CiAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvdGhlckF0U3RhcnQgPSBtX291dC5hbmNob3IoY2xh
c3NJbmZvKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDcyOWY1ODQ2MzdkMzkzNTU4Njdj
NGU2ZDE0MjNkNjY5YTY2YTIxNjUuLjRjYjZlZGQyZWJkOTJlNzRmZGI1ZTI0NWQwZGQyM2Q4NzZh
MTg3OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApA
QCAtMTUxNyw2ICsxNTE3LDE0IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNy
b0Fzc2VtYmxlciB7CiAgICAgCiAgICAgdm9pZCBlbWl0TG9hZFN0cnVjdHVyZShWTSYsIFJlZ2lz
dGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKKyAg
ICB2b2lkIGVtaXRMb2FkQ2xhc3NJbmZvRnJvbVN0cnVjdHVyZShSZWdpc3RlcklEIHN0cnVjdHVy
ZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc3RydWN0
dXJlLCBTdHJ1Y3R1cmU6Om9mZnNldE9mQ2xhc3NJbmZvKCkpLCBkc3QpOworI2lmIENQVShBRERS
RVNTNjQpIC8vIE5vdCBVU0UoSlNWQUxVRTY0KS4gU3RydWN0dXJlOjptX2NsYXNzSW5mbydzIGlt
cGxlbWVudGF0aW9uIGlzIGNoYW5nZWQgYnkgc2l6ZSBvZiBwb2ludGVyLgorICAgICAgICBhbmRQ
dHIoVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KFN0cnVjdHVyZTo6Y2xhc3NJbmZv
TWFzaykpLCBkc3QpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBlbWl0U3RvcmVTdHJ1Y3R1
cmVXaXRoVHlwZUluZm8oVHJ1c3RlZEltbVB0ciBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCwg
UmVnaXN0ZXJJRCkKICAgICB7CiAgICAgICAgIGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5m
bygqdGhpcywgc3RydWN0dXJlLCBkZXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCmluZGV4IDdmMzU4YzEyMDNiZGVhZTkwZDQ0YTJjN2ZiODg5OTc4MDg5Y2E4NWYu
LmZkZTAwYmNjOGM5MDQ1OWM3NTM0NTA2MmE2MTFkYzFkZTQyOWNmZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtOTc5LDcgKzk3OSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJ
VEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRl
cmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVy
ZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Cisg
ICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxpbmVD
YXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdl
KHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBjZDY2N2IyZTU4NzgyMGUz
NzM1Y2QzODEzOTM2Zjk2YTk4Yzc5NjZhLi5iMTFmNjU1ZmNiNmY2NjA1NTI3OTljMTJhMTBjY2Jm
OTE5MGU4NjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxl
KCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNs
b3dDYXNlcyk7Ci0gICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGxvYWQ4KEFkZHJlc3Moc3Ry
dWN0dXJlUmVnLCBTdHJ1Y3R1cmU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hS
ZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hS
ZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgZW1pdFN0b3JlQ2VsbChieXRl
Y29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCmluZGV4IDk2YTM2MzVlNjgyNzM5M2VlODM2ZDgwNDc3
NzI0YTI1ZDU0NmMyNjEuLjI0OWJhNWFhYzUxZTUwOTBjZjIzZjdmOWU4ZTllNDdiYzIxZWY0N2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIFN0cnVjdHVyZSogQ2xvbmVkQXJndW1lbnRzOjpjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKENsb25lZEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpLCBpbmRleGluZ1R5cGUpOwogICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbigKICAgICAgICAgdm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksCi0gICAgICAgIFsm
XSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKKyAgICAgICAgWyZdIChjb25zdCBHQ1Nh
ZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0
eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNl
dCA9PSBjbG9uZWRBcmd1bWVudHNMZW5ndGhQcm9wZXJ0eU9mZnNldCk7CiAgICAgICAgICAgICBz
dHJ1Y3R1cmUtPnNldE1heE9mZnNldCh2bSwgbmV3TWF4T2Zmc2V0KTsKICAgICAgICAgfSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SlNMb2Nr
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SlNMb2NrLmgKaW5k
ZXggYWEyNzNiYWRiZWZhNzM3YTBlYWE1MzRmYmViYTlmNTAxZmRiODYyNy4uMWQ0MDgwNzExNWFl
MzY1ZDBmZmM0Mzg1ZGVlNTg1MWE0ZDBhOWQwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpTTG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2suaApAQCAtMzMsMTggKzMzLDE4IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogdXNpbmcgQ29uY3VycmVudEpTTG9jayA9IExvY2s7Ci11c2luZyBDb25j
dXJyZW50SlNMb2NrZXJJbXBsID0gTG9ja0hvbGRlcjsKIAotc3RhdGljX2Fzc2VydChzaXplb2Yo
Q29uY3VycmVudEpTTG9jaykgPT0gMSwgIlJlZ2FyZGxlc3Mgb2Ygc3RhdHVzIG9mIGNvbmN1cnJl
bnQgSlMgZmxhZywgc2l6ZSBvZiBDb251cnJlbnRKU0xvY2sgaXMgYWx3YXlzIG9uZSBieXRlLiIp
Oworc3RhdGljX2Fzc2VydChzaXplb2YoQ29uY3VycmVudEpTTG9jaykgPT0gMSwgIlJlZ2FyZGxl
c3Mgb2Ygc3RhdHVzIG9mIGNvbmN1cnJlbnQgSlMgZmxhZywgc2l6ZSBvZiBDb25jdXJyZW50SlNM
b2NrIGlzIGFsd2F5cyBvbmUgYnl0ZS4iKTsKIAordGVtcGxhdGU8dHlwZW5hbWUgTG9jaz4KIGNs
YXNzIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgOiBwdWJsaWMgQWJzdHJhY3RMb2NrZXIgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmN1cnJlbnRKU0xvY2tlckJhc2UpOwogcHVibGljOgot
ICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoQ29uY3VycmVudEpTTG9jayYgbG9j
a2FibGUpCisgICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9ja2VyQmFzZShMb2NrJiBsb2NrYWJs
ZSkKICAgICAgICAgOiBtX2xvY2tlcigmbG9ja2FibGUpCiAgICAgewogICAgIH0KLSAgICBleHBs
aWNpdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlKENvbmN1cnJlbnRKU0xvY2sqIGxvY2thYmxlKQor
ICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoTG9jayogbG9ja2FibGUpCiAgICAg
ICAgIDogbV9sb2NrZXIobG9ja2FibGUpCiAgICAgewogICAgIH0KQEAgLTY0LDYzICs2NCw2NSBA
QCBjbGFzcyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIDogcHVibGljIEFic3RyYWN0TG9ja2VyIHsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29uY3VycmVudEpTTG9ja2VySW1wbCBtX2xvY2tlcjsK
KyAgICBMb2NrZXI8TG9jaz4gbV9sb2NrZXI7CiB9OwogCi1jbGFzcyBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgOiBwdWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZSB7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBMb2NrPgorY2xhc3MgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbCA6IHB1YmxpYyBD
b25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+IHsKIHB1YmxpYzoKLSAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIoQ29uY3VycmVudEpTTG9jayYgbG9ja2FibGUsIEhlYXAmIGhlYXApCi0gICAg
ICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJsZSkKKyAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXJJbXBsKExvY2smIGxvY2thYmxlLCBIZWFwJiBoZWFwKQorICAgICAgICA6IENv
bmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4obG9ja2FibGUpCiAgICAgICAgICwgbV9kZWZlckdD
KGhlYXApCiAgICAgewogICAgIH0KIAotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcihDb25j
dXJyZW50SlNMb2NrKiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKLSAgICAgICAgOiBDb25jdXJyZW50
SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwo
TG9jayogbG9ja2FibGUsIEhlYXAmIGhlYXApCisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2Vy
QmFzZTxMb2NrPihsb2NrYWJsZSkKICAgICAgICAgLCBtX2RlZmVyR0MoaGVhcCkKICAgICB7CiAg
ICAgfQogCi0gICAgfkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcigpCisgICAgfkdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlckltcGwoKQogICAgIHsKICAgICAgICAgLy8gV2UgaGF2ZSB0byB1bmxvY2sg
ZWFybHkgZHVlIHRvIHRoZSBkZXN0cnVjdGlvbiBvcmRlciBvZiBiYXNlCiAgICAgICAgIC8vIHZz
LiBkZXJpdmVkIGNsYXNzZXMuIElmIHdlIGRpZG4ndCwgdGhlbiB3ZSB3b3VsZCBkZXN0cm95IHRo
ZSAKICAgICAgICAgLy8gRGVmZXJHQyBvYmplY3QgYmVmb3JlIHVubG9ja2luZyB0aGUgbG9jayB3
aGljaCBjb3VsZCBjYXVzZSBhIEdDCiAgICAgICAgIC8vIGFuZCByZXN1bHRpbmcgZGVhZGxvY2su
Ci0gICAgICAgIHVubG9ja0Vhcmx5KCk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlckJhc2U8
TG9jaz46OnVubG9ja0Vhcmx5KCk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIERlZmVyR0MgbV9k
ZWZlckdDOwogfTsKIAotY2xhc3MgQ29uY3VycmVudEpTTG9ja2VyIDogcHVibGljIENvbmN1cnJl
bnRKU0xvY2tlckJhc2UgewordGVtcGxhdGU8dHlwZW5hbWUgTG9jaz4KK2NsYXNzIENvbmN1cnJl
bnRKU0xvY2tlckltcGwgOiBwdWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPiB7CiBw
dWJsaWM6Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyKENvbmN1cnJlbnRKU0xvY2smIGxvY2thYmxl
KQotICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UobG9ja2FibGUpCisgICAgQ29uY3Vy
cmVudEpTTG9ja2VySW1wbChMb2NrJiBsb2NrYWJsZSkKKyAgICAgICAgOiBDb25jdXJyZW50SlNM
b2NrZXJCYXNlPExvY2s+KGxvY2thYmxlKQogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICAgICAg
LCBtX2Rpc2FsbG93R0Moc3RkOjppbl9wbGFjZSkKICNlbmRpZgogICAgIHsKICAgICB9CiAKLSAg
ICBDb25jdXJyZW50SlNMb2NrZXIoQ29uY3VycmVudEpTTG9jayogbG9ja2FibGUpCi0gICAgICAg
IDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJsZSkKKyAgICBDb25jdXJyZW50SlNMb2Nr
ZXJJbXBsKExvY2sqIGxvY2thYmxlKQorICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2U8
TG9jaz4obG9ja2FibGUpCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgICAgICAsIG1fZGlzYWxs
b3dHQyhzdGQ6OmluX3BsYWNlKQogI2VuZGlmCiAgICAgewogICAgIH0KIAotICAgIENvbmN1cnJl
bnRKU0xvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnlUYWcpCi0gICAgICAgIDogQ29uY3VycmVudEpT
TG9ja2VyQmFzZShOb0xvY2tpbmdOZWNlc3NhcnkpCisgICAgQ29uY3VycmVudEpTTG9ja2VySW1w
bChOb0xvY2tpbmdOZWNlc3NhcnlUYWcpCisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFz
ZTxMb2NrPihOb0xvY2tpbmdOZWNlc3NhcnkpCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgICAg
ICAsIG1fZGlzYWxsb3dHQyhXVEY6Om51bGxvcHQpCiAjZW5kaWYKICAgICB7CiAgICAgfQogICAg
IAotICAgIENvbmN1cnJlbnRKU0xvY2tlcihpbnQpID0gZGVsZXRlOworICAgIENvbmN1cnJlbnRK
U0xvY2tlckltcGwoaW50KSA9IGRlbGV0ZTsKIAogI2lmICFkZWZpbmVkKE5ERUJVRykKIHByaXZh
dGU6CkBAIC0xMjgsNCArMTMwLDcgQEAgY2xhc3MgQ29uY3VycmVudEpTTG9ja2VyIDogcHVibGlj
IENvbmN1cnJlbnRKU0xvY2tlckJhc2UgewogI2VuZGlmCiB9OwogCit1c2luZyBDb25jdXJyZW50
SlNMb2NrZXIgPSBDb25jdXJyZW50SlNMb2NrZXJJbXBsPENvbmN1cnJlbnRKU0xvY2s+OwordXNp
bmcgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyID0gR0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1w
bDxDb25jdXJyZW50SlNMb2NrPjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCmluZGV4IDY2NWQwODg5Y2Y0NDYxYzNhYjBhMmFmNGIwN2M2
YTU4YzkwNDIxYzQuLmQ1NjU2ZjhiZmRmZjYzMjk5MmFjMWRhNDUxZTM1YzFhNTQ4ZDQ2N2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCkBAIC0yNCw2ICsyNCw3IEBACiAK
ICNpbmNsdWRlICJDYWxsRGF0YS5oIgogI2luY2x1ZGUgIkNlbGxTdGF0ZS5oIgorI2luY2x1ZGUg
IkNvbmN1cnJlbnRKU0xvY2suaCIKICNpbmNsdWRlICJDb25zdHJ1Y3REYXRhLmgiCiAjaW5jbHVk
ZSAiRW51bWVyYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtMjg4LDYgKzI4OSw5
IEBAIGNsYXNzIEpTQ2VsbExvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHVubG9ja1Nsb3coKTsKIH07CiAKK3VzaW5nIENvbmN1cnJlbnRKU0NlbGxMb2Nr
ZXIgPSBDb25jdXJyZW50SlNMb2NrZXJJbXBsPEpTQ2VsbExvY2s+OwordXNpbmcgR0NTYWZlQ29u
Y3VycmVudEpTQ2VsbExvY2tlciA9IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGw8SlNDZWxs
TG9jaz47CisKIC8vIEZJWE1FOiBSZWZlciB0byBTdWJzcGFjZSBieSByZWZlcmVuY2UuCiAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CmluZGV4IGFjZDI5ZGVkODEzNTFmYjI4NGIyMTU5YWQ0N2E2MzFjMzQ5NGYxZGYuLjNhNTEyMWQ2
OWRmYjRmYjJmYjlmODg1Y2E3ZmYzZmU1NWMwNGRkODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAKQEAgLTIwMDUsNyArMjAwNSw3IEBAIGJvb2wgSlNPYmpl
Y3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVyCiAKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9m
ZnNldDsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkK
LSAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBbXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOworICAgICAgICAgICAg
b2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBw
cm9wZXJ0eU5hbWUsIFtdKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9w
ZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsICZkZWZlcnJlZFdhdGNocG9pbnRGaXJl
KTsKICAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSAmJiAhc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRo
aXNPYmplY3QpKSB7CkBAIC0zNzY2LDcgKzM3NjYsNyBAQCB2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0
VG9EaWN0aW9uYXJ5KFZNJiB2bSkKICAgICAgICAgdm0sIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVE
aWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgJmRlZmVycmVkV2F0Y2hwb2lu
dEZpcmUpKTsKIH0KIAotdm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5p
bmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCit2b2lkIEpTT2JqZWN0Ojpz
aGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxs
TG9ja2VyJiwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNh
cGFjaXR5QWZ0ZXIpCiB7CiAgICAgLy8gVGhpcyBjb3VsZCBpbnRlcmxlYXZlIHZpc2l0Q2hpbGRy
ZW4gYmVjYXVzZSBzb21lIG9sZCBzdHJ1Y3R1cmUgY291bGQgaGF2ZSBiZWVuIGEgbm9uCiAgICAg
Ly8gZGljdGlvbmFyeSBzdHJ1Y3R1cmUuIFdlIGhhdmUgdG8gYmUgY3JhenkgY2FyZWZ1bC4gQnV0
LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBob2xkaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAppbmRleCBlYzYzMDBlYTliOTcyY2U5YmEwZmFkODE4MjU3YWZiMjBk
ODJhMmVkLi42NTExNjBiZTBiMDE3ODcwY2U5MDk2YmY5MmE1NWRjZjBlNmNkYmJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKQEAgLTgxNSw3ICs4MTUsNyBAQCBj
bGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHsKICAgICAgICAgc3RydWN0dXJl
KHZtKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIHRoaXMpOwogICAgIH0KLSAgICB2
b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciYsIFZNJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBh
Y2l0eUFmdGVyKTsKKyAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBWTSYsIFN0cnVjdHVyZSosIHNpemVfdCBv
dXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QoKSBjb25zdAogICAgIHsKQEAgLTEzMjksNyArMTMyOSw3IEBAIGlubGluZSBKU1ZhbHVlIEpT
T2JqZWN0OjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogLy8gZmxhdHRlbiBhbiBvYmplY3QuCiBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0RGly
ZWN0Q29uY3VycmVudGx5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpIGNvbnN0CiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmxv
Y2soKSk7CisgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5jZWxs
TG9jaygpKTsKICAgICBpZiAoIXN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAg
ICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBnZXREaXJlY3Qob2Zmc2V0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKaW5kZXggYTY3MDAz
NDdmNjk3NmU2MWIwNWRiMThmMmIwOTZhYWE3OWUyZWJiMy4uOTVhNjcxMGMyZTM1Njg0MzZkNWNj
YTI4Yzg2YjJkYzk0ZDhhODgwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3RJbmxpbmVzLmgKQEAgLTIxNiw3ICsyMTYsNyBAQCBBTFdBWVNfSU5MSU5FIFBy
b3BlcnR5T2Zmc2V0IEpTT2JqZWN0OjpwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihWTSYgdgogICAgIFByb3BlcnR5T2Zmc2V0IHJlc3VsdDsKICAgICBzdHJ1Y3R1cmUtPmFkZFBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCiAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsCi0gICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKKyAgICAg
ICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKICAgICAgICAgICAgIHVu
c2lnbmVkIG5ld091dE9mTGluZUNhcGFjaXR5ID0gU3RydWN0dXJlOjpvdXRPZkxpbmVDYXBhY2l0
eShuZXdNYXhPZmZzZXQpOwogICAgICAgICAgICAgaWYgKG5ld091dE9mTGluZUNhcGFjaXR5ICE9
IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CiAgICAgICAgICAgICAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRPdXRPZkxpbmVDYXBh
Y2l0eSwgbmV3T3V0T2ZMaW5lQ2FwYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAKaW5kZXggZWRhNDQ2YmZiZTI2N2FiMDFiODUyZTE1ZmRlOWM5YzMw
ZTZmNThlNi4uM2I1OWI0ZDQ1ZTY3ZGViYWExNjU3ODA4Njg1Y2E0ZWI3NDMzZDc3OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCkBAIC01NSwxMCArNTUs
MTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RydWN0dXJlKj4mIGxpdmVTdHJ1Y3R1cmVTZXQgPSAqKG5l
dyBIYXNoU2V0PFN0cnVjdHVyZSo+KTsKIGNsYXNzIFNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093
bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgdm9pZCBmaW5hbGl6ZShI
YW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBB
U1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkp
OwogICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUqIHRhYmxlID0gcmVpbnRlcnByZXRf
Y2FzdDxTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUqPihjb250ZXh0KTsKICAgICAgICAgQVNTRVJU
KHRhYmxlLT5pc1VzaW5nU2luZ2xlU2xvdCgpKTsKICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0
ZSh0YWJsZS0+d2Vha0ltcGwoKSk7Ci0gICAgICAgIHRhYmxlLT5tX2RhdGEgPSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGU6OlVzaW5nU2luZ2xlU2xvdEZsYWc7CisgICAgICAgIHRhYmxlLT5tX2Rh
dGEgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6VXNp
bmdTaW5nbGVTbG90RmxhZyk7CiAgICAgfQogfTsKIApAQCAtNzAsNiArNzEsNyBAQCBzdGF0aWMg
U2luZ2xlU2xvdFRyYW5zaXRpb25XZWFrT3duZXImIHNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093
bmVyKCkKIAogaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzaW5n
bGVUcmFuc2l0aW9uKCkgY29uc3QKIHsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwogICAgIEFTU0VSVChpc1VzaW5nU2luZ2xl
U2xvdCgpKTsKICAgICBpZiAoV2Vha0ltcGwqIGltcGwgPSB0aGlzLT53ZWFrSW1wbCgpKSB7CiAg
ICAgICAgIGlmIChpbXBsLT5zdGF0ZSgpID09IFdlYWtJbXBsOjpMaXZlKQpAQCAtODAsMzMgKzgy
LDM3IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2luZ2xl
VHJhbnNpdGlvbigpIGNvbnN0CiAKIGlubGluZSB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZTo6c2V0U2luZ2xlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKKyAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwog
ICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKICAgICBpZiAoV2Vha0ltcGwqIGltcGwg
PSB0aGlzLT53ZWFrSW1wbCgpKQogICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKGltcGwpOwog
ICAgIFdlYWtJbXBsKiBpbXBsID0gV2Vha1NldDo6YWxsb2NhdGUoc3RydWN0dXJlLCAmc2luZ2xl
U2xvdFRyYW5zaXRpb25XZWFrT3duZXIoKSwgdGhpcyk7Ci0gICAgbV9kYXRhID0gYml0d2lzZV9j
YXN0PGludHB0cl90PihpbXBsKSB8IFVzaW5nU2luZ2xlU2xvdEZsYWc7CisgICAgbV9kYXRhID0g
Yml0d2lzZV9jYXN0PHVpbnQ4X3QqPihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGltcGwpIHwgVXNp
bmdTaW5nbGVTbG90RmxhZyk7CiB9CiAKIGJvb2wgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpj
b250YWlucyhVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29s
IGlzQWRkaXRpb24pIGNvbnN0CiB7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkg
JiYgIVRocmVhZDo6bWF5QmVHQ1RocmVhZCgpKTsKICAgICBpZiAoaXNVc2luZ1NpbmdsZVNsb3Qo
KSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7
Ci0gICAgICAgIHJldHVybiB0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmli
dXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlvbi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJh
bnNpdGlvbigpID09ICFpc0FkZGl0aW9uOworICAgICAgICByZXR1cm4gdHJhbnNpdGlvbiAmJiB0
cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkgPT0gcmVwICYmIHRyYW5zaXRpb24t
PnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRp
b24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbjsKICAgICB9
CiAgICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpL
ZXkocmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CiB9CiAKIGlubGluZSBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRpdGlvbikgY29uc3QKIHsKKyAgICBBU1NFUlQo
IWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwogICAg
IGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IHNpbmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgcmV0dXJuICh0cmFuc2l0aW9uICYmIHRy
YW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+
dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlv
bi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbigpID09ICFpc0FkZGl0aW9uKSA/IHRyYW5z
aXRpb24gOiAwOworICAgICAgICByZXR1cm4gKHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+dHJh
bnNpdGlvblByb3BlcnR5TmFtZSgpID09IHJlcCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJv
cGVydHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0aW9uLT5pc1Byb3BlcnR5
RGVsZXRpb25UcmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb24pID8gdHJhbnNpdGlvbiA6IG51bGxw
dHI7CiAgICAgfQogICAgIHJldHVybiBtYXAoKS0+Z2V0KFN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZTo6SGFzaDo6S2V5KHJlcCwgYXR0cmlidXRlcywgaXNBZGRpdGlvbikpOwogfQogCiB2b2lkIFN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVH
Q1RocmVhZCgpKTsKICAgICBpZiAoaXNVc2luZ1NpbmdsZVNsb3QoKSkgewogICAgICAgICBTdHJ1
Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKIApAQCAtMTIz
LDcgKzEyOSw3IEBAIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB9CiAKICAgICAvLyBBZGQgdGhlIHN0cnVjdHVyZSB0
byB0aGUgbWFwLgotICAgIG1hcCgpLT5zZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNo
OjpLZXkoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVy
ZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpLCAhc3RydWN0dXJlLT5pc1Byb3BlcnR5
RGVsZXRpb25UcmFuc2l0aW9uKCkpLCBzdHJ1Y3R1cmUpOworICAgIG1hcCgpLT5zZXQoU3RydWN0
dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkoc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVy
dHlOYW1lKCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpLCAhc3Ry
dWN0dXJlLT5pc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkpLCBzdHJ1Y3R1cmUpOwogfQog
CiB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQpAQCAtMTUxLDcgKzE1Nyw3IEBAIHZv
aWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUt
PnByb3BlcnR5VGFibGVPck51bGwoKSkgeworICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkgewogICAgICAgICAg
ICAgKytudW1iZXJXaXRoUHJvcGVydHlNYXBzOwogICAgICAgICAgICAgdG90YWxQcm9wZXJ0eU1h
cHNTaXplICs9IHRhYmxlLT5zaXplSW5NZW1vcnkoKTsKICAgICAgICAgfQpAQCAtMTc0LDE1ICsx
ODAsMTIgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKIFN0cnVjdHVyZTo6U3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQog
ICAgIDogSlNDZWxsKHZtLCB2bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2Js
b2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJRCh0aGlzKSwgaW5kZXhpbmdU
eXBlLCB0eXBlSW5mbykKLSAgICAsIG1fb3V0T2ZMaW5lVHlwZUZsYWdzKHR5cGVJbmZvLm91dE9m
TGluZVR5cGVGbGFncygpKQotICAgICwgbV9pbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBhY2l0eSkK
LSAgICAsIG1fYml0RmllbGQoMCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KHZtLCB0aGlzLCBnbG9i
YWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1heUJlTnVsbCkKICAgICAs
IG1fcHJvdG90eXBlKHZtLCB0aGlzLCBwcm90b3R5cGUpCi0gICAgLCBtX2NsYXNzSW5mbyhjbGFz
c0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKLSAgICAs
IG1fcHJvcGVydHlIYXNoKDApCiB7CisgICAgc2V0SW5saW5lQ2FwYWNpdHkoaW5saW5lQ2FwYWNp
dHkpOworICAgIHNldENsYXNzSW5mbyhjbGFzc0luZm8pOwogICAgIHNldERpY3Rpb25hcnlLaW5k
KE5vbmVEaWN0aW9uYXJ5S2luZCk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKGZhbHNl
KTsKICAgICBzZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKGNsYXNzSW5mby0+aGFzU3RhdGlj
U2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CkBAIC0yMDAsMzEgKzIwMywzMCBAQCBTdHJ1
Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlLCBjbwogICAgIHNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24o
ZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25PZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogICAg
IHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7Ci0gCisgICAgc2V0T3V0T2ZMaW5lVHlw
ZUZsYWdzKHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpKTsKKwogICAgIEFTU0VSVChpbmxp
bmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsKICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8UHJvcGVydHlPZmZzZXQ+KGlubGluZUNhcGFjaXR5KSA8IGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KTsKICAgICBBU1NFUlQoIWhhc1JhcmVEYXRhKCkpOwotICAgIEFTU0VS
VChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwg
IW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAg
ICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFtX2NsYXNzSW5mby0+aGFz
U3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKCF0aGlzLT50
eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgbV9jbGFzc0luZm8tPm1ldGhvZFRh
YmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKKyAgICBBU1NFUlQoaGFz
UmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8ICF0aGlz
LT5jbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Cisg
ICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB8fCAhdGhpcy0+Y2xhc3NJbmZv
KCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVCgh
dGhpcy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8IHRoaXMtPmNsYXNzSW5m
bygpLT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CiB9
CiAKIGNvbnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIlN0cnVjdHVyZSIsIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoU3RydWN0dXJlKSB9
OwogCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgOiBKU0NlbGwoQ3JlYXRpbmdF
YXJseUNlbGwpCi0gICAgLCBtX2lubGluZUNhcGFjaXR5KDApCi0gICAgLCBtX2JpdEZpZWxkKDAp
CiAgICAgLCBtX3Byb3RvdHlwZSh2bSwgdGhpcywganNOdWxsKCkpCi0gICAgLCBtX2NsYXNzSW5m
byhpbmZvKCkpCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKLSAg
ICAsIG1fcHJvcGVydHlIYXNoKDApCiB7CisgICAgc2V0SW5saW5lQ2FwYWNpdHkoMCk7CisgICAg
c2V0Q2xhc3NJbmZvKGluZm8oKSk7CiAgICAgc2V0RGljdGlvbmFyeUtpbmQoTm9uZURpY3Rpb25h
cnlLaW5kKTsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUoZmFsc2UpOwotICAgIHNldEhh
c0dldHRlclNldHRlclByb3BlcnRpZXMobV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVh
ZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIHNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXMoY2xh
c3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwogICAgIHNl
dEhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMoZmFsc2UpOwotICAgIHNldEhhc1JlYWRP
bmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8obV9jbGFzc0luZm8tPmhh
c1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIHNldEhhc1JlYWRPbmx5
T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oY2xhc3NJbmZvKCktPmhhc1N0
YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwogICAgIHNldEhhc1VuZGVyc2NvcmVQ
cm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90byhmYWxzZSk7CiAgICAgc2V0SXNRdWlj
a1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKHRydWUpOwogICAgIHNldFRyYW5z
aXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoMCk7CkBAIC0yNDAsMjMgKzI0MiwyNiBAQCBTdHJ1Y3R1
cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgCiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBUeXBlSW5m
byhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpOwogICAgIG1fYmxvYiA9IFN0cnVjdHVyZUlEQmxv
Yih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCAwLCB0eXBlSW5m
byk7Ci0gICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxh
Z3MoKTsKKyAgICBzZXRPdXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZs
YWdzKCkpOwogCi0gICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
RXhjbHVkaW5nUHJvdG8oKSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9u
bHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkg
fHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsK
LSAgICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBt
X2NsYXNzSW5mby0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERh
dGEpOworICAgIEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1
ZGluZ1Byb3RvKCkgfHwgIWNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJv
cGVydGllcygpKTsKKyAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFj
bGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAg
QVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgY2xhc3NJ
bmZvKCktPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsK
IH0KIAogU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBE
ZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCiAgICAg
OiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1faW5saW5l
Q2FwYWNpdHkocHJldmlvdXMtPm1faW5saW5lQ2FwYWNpdHkpCi0gICAgLCBtX2JpdEZpZWxkKDAp
Ci0gICAgLCBtX3Byb3RvdHlwZSh2bSwgdGhpcywgcHJldmlvdXMtPm1fcHJvdG90eXBlLmdldCgp
KQotICAgICwgbV9jbGFzc0luZm8ocHJldmlvdXMtPm1fY2xhc3NJbmZvKQotICAgICwgbV90cmFu
c2l0aW9uV2F0Y2hwb2ludFNldChJc1dhdGNoZWQpCisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAs
IG1fcHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRpZXMocHJldmlvdXMtPm1fcHJvcGVydHlIYXNo
QW5kU2VlblByb3BlcnRpZXMpCisjZWxzZQogICAgICwgbV9wcm9wZXJ0eUhhc2gocHJldmlvdXMt
Pm1fcHJvcGVydHlIYXNoKQogICAgICwgbV9zZWVuUHJvcGVydGllcyhwcmV2aW91cy0+bV9zZWVu
UHJvcGVydGllcykKKyNlbmRpZgorICAgICwgbV9wcm90b3R5cGUodm0sIHRoaXMsIHByZXZpb3Vz
LT5tX3Byb3RvdHlwZS5nZXQoKSkKKyAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSXNX
YXRjaGVkKQogeworICAgIHNldElubGluZUNhcGFjaXR5KHByZXZpb3VzLT5pbmxpbmVDYXBhY2l0
eSgpKTsKKyAgICBzZXRDbGFzc0luZm8ocHJldmlvdXMtPmNsYXNzSW5mbygpKTsKICAgICBzZXRE
aWN0aW9uYXJ5S2luZChwcmV2aW91cy0+ZGljdGlvbmFyeUtpbmQoKSk7CiAgICAgc2V0SXNQaW5u
ZWRQcm9wZXJ0eVRhYmxlKGZhbHNlKTsKICAgICBzZXRIYXNCZWVuRmxhdHRlbmVkQmVmb3JlKHBy
ZXZpb3VzLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpOwpAQCAtMjc3LDcgKzI4Miw3IEBAIFN0
cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2aW91cywgRGVmZXJyZWRT
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0CiAgCiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBwcmV2aW91
cy0+dHlwZUluZm8oKTsKICAgICBtX2Jsb2IgPSBTdHJ1Y3R1cmVJREJsb2Iodm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJRCh0aGlzKSwgcHJldmlvdXMtPmluZGV4aW5nTW9kZUlu
Y2x1ZGluZ0hpc3RvcnkoKSwgdHlwZUluZm8pOwotICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzID0g
dHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCk7CisgICAgc2V0T3V0T2ZMaW5lVHlwZUZsYWdz
KHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpKTsKIAogICAgIEFTU0VSVCghcHJldmlvdXMt
PnR5cGVJbmZvKCkuc3RydWN0dXJlSXNJbW1vcnRhbCgpKTsKICAgICBzZXRQcmV2aW91c0lEKHZt
LCBwcmV2aW91cyk7CkBAIC0yODksOSArMjk0LDkgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQK
IAogICAgIGlmIChwcmV2aW91cy0+bV9nbG9iYWxPYmplY3QpCiAgICAgICAgIG1fZ2xvYmFsT2Jq
ZWN0LnNldCh2bSwgdGhpcywgcHJldmlvdXMtPm1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKLSAgICBB
U1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygp
IHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7
Ci0gICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB8fCAhbV9jbGFzc0luZm8t
Pmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVCghdGhp
cy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8IG1fY2xhc3NJbmZvLT5tZXRo
b2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CisgICAgQVNTRVJU
KGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAh
Y2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAg
IEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwgIWNsYXNzSW5mbygpLT5oYXNT
dGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQoIXRoaXMtPnR5
cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBjbGFzc0luZm8oKS0+bWV0aG9kVGFi
bGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEpOwogfQogCiBTdHJ1Y3R1cmU6
On5TdHJ1Y3R1cmUoKQpAQCAtMzEzLDcgKzMxOCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpj
cmVhdGUoUG9seVByb3RvVGFnLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
CiAgICAgdW5zaWduZWQgb2xkT3V0T2ZMaW5lQ2FwYWNpdHkgPSByZXN1bHQtPm91dE9mTGluZUNh
cGFjaXR5KCk7CiAgICAgcmVzdWx0LT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAogICAg
ICAgICB2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucG9seVByb3RvTmFtZSgp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwKLSAg
ICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAgICAgICBbJl0gKGNv
bnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoU3RydWN0dXJlOjpvdXRPZkxpbmVDYXBhY2l0eShuZXdNYXhPZmZzZXQpID09IG9sZE91dE9m
TGluZUNhcGFjaXR5KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCA9PSBrbm93
blBvbHlQcm90b09mZnNldCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0lubGluZU9m
ZnNldChrbm93blBvbHlQcm90b09mZnNldCkpOwpAQCAtMzI5LDIzICszMzQsMjMgQEAgYm9vbCBT
dHJ1Y3R1cmU6OmlzVmFsaWRQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgcmV0dXJu
IHByb3RvdHlwZS5pc051bGwoKSB8fCAocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgcHJvdG90eXBl
LmdldE9iamVjdCgpLT5tYXlCZVByb3RvdHlwZSgpKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmZp
bmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKFZlY3RvcjxTdHJ1Y3R1cmUqLCA4
PiYgc3RydWN0dXJlcywgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBQcm9wZXJ0eVRhYmxlKiYgdGFi
bGUpCit2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRp
b24oVmVjdG9yPHN0ZDo6cGFpcjxTdHJ1Y3R1cmUqLCBVbmlxdWVkU3RyaW5nSW1wbCo+LCA4PiYg
c3RydWN0dXJlQW5kVHJhbnNpdGlvblByb3BlcnR5TmFtZXMsIFN0cnVjdHVyZSomIHN0cnVjdHVy
ZSwgUHJvcGVydHlUYWJsZSomIHRhYmxlKQogewotICAgIEFTU0VSVChzdHJ1Y3R1cmVzLmlzRW1w
dHkoKSk7Ci0gICAgdGFibGUgPSAwOworICAgIEFTU0VSVChzdHJ1Y3R1cmVBbmRUcmFuc2l0aW9u
UHJvcGVydHlOYW1lcy5pc0VtcHR5KCkpOworICAgIHRhYmxlID0gbnVsbHB0cjsKIAogICAgIGZv
ciAoc3RydWN0dXJlID0gdGhpczsgc3RydWN0dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnBy
ZXZpb3VzSUQoKSkgewotICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay5sb2NrKCk7CisgICAgICAg
IHN0cnVjdHVyZS0+Y2VsbExvY2soKS5sb2NrKCk7CiAgICAgICAgIAotICAgICAgICB0YWJsZSA9
IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgICAgICB0YWJsZSA9IHN0cnVj
dHVyZS0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgICAgICBpZiAodGFibGUpIHsK
ICAgICAgICAgICAgIC8vIExlYXZlIHRoZSBzdHJ1Y3R1cmUgbG9ja2VkLCBzbyB0aGF0IHRoZSBj
YWxsZXIgY2FuIGRvIHRoaW5ncyB0byBpdCBhdG9taWNhbGx5CiAgICAgICAgICAgICAvLyBiZWZv
cmUgaXQgbG9zZXMgaXRzIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBzdHJ1Y3R1cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOwot
ICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKKyAgICAgICAgc3RydWN0dXJlQW5k
VHJhbnNpdGlvblByb3BlcnR5TmFtZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHN0cnVjdHVyZSwg
c3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlOYW1lQ29uY3VycmVudGx5KCkpKTsKKyAgICAg
ICAgc3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwogICAgIH0KICAgICAKICAgICBBU1NF
UlQoIXN0cnVjdHVyZSk7CkBAIC0zNTksMzggKzM2NCwzOCBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1
Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0UHJvcGVydHlU
YWJsZQogICAgIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKLSAgICBWZWN0
b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cnVj
dHVyZSosIFVuaXF1ZWRTdHJpbmdJbXBsKj4sIDg+IHN0cnVjdHVyZUFuZFRyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWVzOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUq
IHRhYmxlOwogICAgIAotICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9u
KHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOworICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFw
Rm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZUFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWVzLCBz
dHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG51bWJlck9m
U2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOworICAgIHVu
c2lnbmVkIGNhcGFjaXR5ID0gbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwg
aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgIHRhYmxlID0gdGFi
bGUtPmNvcHkodm0sIGNhcGFjaXR5KTsKLSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2Nr
KCk7CisgICAgICAgIHN0cnVjdHVyZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICB9IGVsc2UK
ICAgICAgICAgdGFibGUgPSBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KTsKICAg
ICAKICAgICAvLyBNdXN0IGhvbGQgdGhlIGxvY2sgb24gdGhpcyBzdHJ1Y3R1cmUsIHNpbmNlIHdl
IHdpbGwgYmUgbW9kaWZ5aW5nIHRoaXMgc3RydWN0dXJlJ3MKICAgICAvLyBwcm9wZXJ0eSBtYXAu
IFdlIGRvbid0IHdhbnQgZ2V0Q29uY3VycmVudGx5KCkgdG8gc2VlIHRoZSBwcm9wZXJ0eSBtYXAg
aW4gYSBoYWxmLWJha2VkCiAgICAgLy8gc3RhdGUuCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxM
b2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhlYXApOwogICAgIGlmIChzZXRQcm9wZXJ0eVRh
YmxlKQogICAgICAgICB0aGlzLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAKLSAgICBm
b3IgKHNpemVfdCBpID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgc3RydWN0
dXJlID0gc3RydWN0dXJlc1tpXTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blByb3BlcnR5TmFtZSkKKyAgICBmb3IgKHNpemVfdCBpID0gc3RydWN0dXJlQW5kVHJhbnNpdGlv
blByb3BlcnR5TmFtZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGF1dG8gW3N0cnVjdHVyZSwg
dHJhbnNpdGlvblByb3BlcnR5TmFtZV0gPSBzdHJ1Y3R1cmVBbmRUcmFuc2l0aW9uUHJvcGVydHlO
YW1lc1tpXTsKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9uUHJvcGVydHlOYW1lKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRy
YW5zaXRpb24oKSkgewotICAgICAgICAgICAgYXV0byBpdGVtID0gdGFibGUtPmZpbmQoc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICAgICAgYXV0byBp
dGVtID0gdGFibGUtPmZpbmQodHJhbnNpdGlvblByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBB
U1NFUlQoaXRlbS5maXJzdCk7CiAgICAgICAgICAgICB0YWJsZS0+cmVtb3ZlKGl0ZW0pOwogICAg
ICAgICAgICAgdGFibGUtPmFkZERlbGV0ZWRPZmZzZXQoc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zm
c2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgUHJvcGVy
dHlNYXBFbnRyeSBlbnRyeShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQo
KSwgc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblBy
b3BlcnR5QXR0cmlidXRlcygpKTsKKyAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeSh0cmFu
c2l0aW9uUHJvcGVydHlOYW1lLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0
dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpOwogICAgICAgICBhdXRvIG5leHRP
ZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwog
ICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHRPZmZzZXQsIG5leHRPZmZzZXQgPT0gc3RydWN0dXJl
LT50cmFuc2l0aW9uT2Zmc2V0KCkpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IHRhYmxlLT5hZGQo
ZW50cnkpOwpAQCAtNDA1LDggKzQxMCw4IEBAIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6bWF0
ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlCiAgICAg
ICAgICAgICBkYXRhTG9nKCJGb3VuZCBzdHJ1Y3R1cmUgPSAiLCBSYXdQb2ludGVyKHN0cnVjdHVy
ZSksICJcbiIpOwogICAgICAgICAgICAgZGF0YUxvZygic3RydWN0dXJlcyA9ICIpOwogICAgICAg
ICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA6IHN0cnVjdHVyZXMpCi0gICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgUmF3
UG9pbnRlcihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IHN0cnVj
dHVyZUFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWVzKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
Y29tbWEsIFJhd1BvaW50ZXIocGFpci5maXJzdCkpOwogICAgICAgICAgICAgZGF0YUxvZygiXG4i
KTsKICAgICAgICAgfSk7CiAgICAgCkBAIC00MjUsNyArNDMwLDcgQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVj
dHVyZSogc3QKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAgICB9CiAKLSAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCkBAIC00MzYsNyArNDQxLDcgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0
dXJlKiBzdHJ1Y3QKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
blRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0
JiBvZmZzZXQpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1f
bG9jayk7CisgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5jZWxs
TG9jaygpKTsKICAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVj
dHVyZUltcGwoc3RydWN0dXJlLCB1aWQsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9CiAKQEAgLTQ5
Nyw4ICs1MDIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBybwogICAgIH0KICAgICAKICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwot
Ci0gICAgdHJhbnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXRNYXlCZU51bGwodm0s
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSk7Cisg
ICAgdHJhbnNpdGlvbi0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4odm0sIHN0cnVjdHVyZS0+Y2Fj
aGVkUHJvdG90eXBlQ2hhaW4oKSk7CiAgICAgCiAgICAgLy8gV2hpbGUgd2UgYXJlIGFkZGluZyB0
aGUgcHJvcGVydHksIHJlbWF0ZXJpYWxpemluZyB0aGUgcHJvcGVydHkgdGFibGUgaXMgc3VwZXIg
d2VpcmQ6IHdlIGFscmVhZHkKICAgICAvLyBoYXZlIGEgbV90cmFuc2l0aW9uUHJvcGVydHlOYW1l
IGFuZCB0cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIGJ1dCB0aGUgbV90cmFuc2l0aW9uT2Zm
c2V0IGlzIHN0aWxsIHdyb25nLiBJZiB0aGUKQEAgLTUxMCwxMiArNTE0LDEyIEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvCiAgICAgLy8gY2FzZSBhbGwgaXMgd2VsbC4gIElmIGl0IHdhc24ndCBm
b3IgdGhlIGxvY2ssIHRoZSBHQyB3b3VsZCBoYXZlIFRPQ1RPVTogaWYgY291bGQgcmVhZAogICAg
IC8vIHByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nIGJlZm9yZSB3ZSBzZXQg
aXQgdG8gdHJ1ZSwgYW5kIHRoZW4gYmxvdyB0aGUgdGFibGUgYXdheSBhZnRlci4KICAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAg
ICAgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2so
KSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFu
c2l0aW9uaW5nKHRydWUpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVy
dHlOYW1lKGxvY2tlciwgcHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICB9CiAKICAgICB0cmFuc2l0
aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmlu
ZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7Ci0gICAgdHJhbnNp
dGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAg
IHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7
CiAgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJv
cGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPnNldE1heE9m
ZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CkBAIC01MzAsNyArNTM0LDcgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm8KIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPnRyYW5z
aXRpb25PZmZzZXQoKSwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgewotICAg
ICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrLCB2
bS5oZWFwKTsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3Ry
dWN0dXJlLT5jZWxsTG9jaygpLCB2bS5oZWFwKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5z
aXRpb25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5j
aGVja09mZnNldENvbnNpc3RlbmN5KCk7CkBAIC01ODcsMTYgKzU5MSwxNiBAQCBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsCiAgICAgfQogCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRl
KHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKLSAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3Rv
dHlwZUNoYWluLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hl
ZFByb3RvdHlwZUNoYWluLmdldCgpKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRDYWNoZWRQcm90b3R5
cGVDaGFpbih2bSwgc3RydWN0dXJlLT5jYWNoZWRQcm90b3R5cGVDaGFpbigpKTsKIAogICAgIC8v
IFdoaWxlIHdlIGFyZSBkZWxldGluZyB0aGUgcHJvcGVydHksIHdlIG5lZWQgdG8gbWFrZSBzdXJl
IHRoZSB0YWJsZSBpcyBub3QgY2xlYXJlZC4KICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpTQ2Vs
bExvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2soKSk7CiAgICAgICAgIHRyYW5zaXRp
b24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKHRydWUpOworICAg
ICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGxvY2tlciwgcHJvcGVy
dHlOYW1lLnVpZCgpKTsKICAgICB9CiAKICAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhp
bmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hp
c3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7Ci0gICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJv
cGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5zaXRpb24tPnNldFByb3Bl
cnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQo
dm0pKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zm
c2V0KCkpOwogICAgIHRyYW5zaXRpb24tPnNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24o
dHJ1ZSk7CkBAIC02MTIsNyArNjE2LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZU5l
d1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLAogCiAgICAg
Y2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCB0cmFuc2l0aW9uLT5p
bmxpbmVDYXBhY2l0eSgpKTsKICAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2ssIHZtLmhlYXApOworICAgICAgICBHQ1NhZmVDb25j
dXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNlbGxMb2NrKCksIHZtLmhlYXAp
OwogICAgICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFkZCh2bSwgdHJhbnNpdGlv
bik7CiAgICAgfQogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKQEAg
LTYzMCw3ICs2MzQsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJh
bnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKUwogICAgIHRyYW5zaXRpb24t
Pm1fcHJvdG90eXBlLnNldCh2bSwgdHJhbnNpdGlvbiwgcHJvdG90eXBlKTsKIAogICAgIFByb3Bl
cnR5VGFibGUqIHRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
dm0pOwotICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2
bSwgdGFibGUpOworICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxs
TG9jaygpKSwgdm0sIHRhYmxlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0
cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOwogICAgIAogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0
Q29uc2lzdGVuY3koKTsKQEAgLTY0Myw3ICs2NDcsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
cgogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7
CiAKICAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0
cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW4o
aG9sZExvY2sodHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgICAgIHRy
YW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAgICAg
ICAgIAogICAgICAgICBzdHJ1Y3R1cmUgPSB0cmFuc2l0aW9uOwpAQCAtNjY1LDcgKzY2OSw3IEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3RpCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAogICAgIFByb3BlcnR5VGFibGUqIHRhYmxl
ID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgIHRyYW5z
aXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAg
IHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0sIHRh
YmxlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zm
c2V0KCkpOwogICAgIHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlLaW5kKGtpbmQpOwogICAgIHRy
YW5zaXRpb24tPnNldEhhc0JlZW5EaWN0aW9uYXJ5KHRydWUpOwpAQCAtNzAxLDEyICs3MDUsMTIg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRh
a2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKLSAgICAvLyBUaGlzIG11
c3QgYWx3YXlzIHJldHVybiBhIHByb3BlcnR5IHRhYmxlLiBJdCBjYW4ndCByZXR1cm4gbnVsbC4K
LSAgICBQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBtdXN0IGFsd2F5cyByZXR1cm4gYSBwcm9wZXJ0eSB0YWJsZS4gSXQg
Y2FuJ3QgcmV0dXJuIG51bGwuCisgICAgUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gcHJvcGVydHlU
YWJsZVVuc2FmZU9yTnVsbCgpOwogICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgaWYgKGlzUGlu
bmVkUHJvcGVydHlUYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+Y29weSh2bSwg
cmVzdWx0LT5zaXplKCkgKyAxKTsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygp
KTsKICAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtNzQzLDEwICs3NDcsMTAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgTm8KICAgICAgICAgLy8gdGFibGUgZG9lc24ndCBrbm93IGhvdyB0byB0YWtlIGludG8gYWNj
b3VudCBzdWNoIHdob2xlc2FsZSBlZGl0cy4KIAogICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKTsKLSAgICAgICAg
dHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZyhob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2
bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNoaW5nKGhvbGRMb2NrKHRy
YW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUpOwogICAgICAgICB0cmFuc2l0aW9uLT5z
ZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOwogICAgICAgICAKLSAgICAg
ICAgdGFibGUgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIHRh
YmxlID0gdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCh0YWJsZSk7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqdGFibGUp
IHsKICAgICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVydGllcyh0cmFuc2l0
aW9uS2luZCkpCkBAIC03NjEsMTQgKzc2NSwxNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uU2xvdyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBObwog
ICAgIH0KICAgICAKICAgICBpZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXMo
dHJhbnNpdGlvbktpbmQpCi0gICAgICAgICYmICF0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JO
dWxsKCktPmlzRW1wdHkoKSkKKyAgICAgICAgJiYgIXRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVV
bnNhZmVPck51bGwoKS0+aXNFbXB0eSgpKQogICAgICAgICB0cmFuc2l0aW9uLT5zZXRIYXNSZWFk
T25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKHRydWUpOwogICAgIAog
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIFByb3BlcnR5VGFi
bGUqIHRhYmxlID0gdHJhbnNpdGlvbi0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7Ci0gICAgICAg
IHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUp
OworICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+Y2VsbExvY2so
KSksIHZtLCB0YWJsZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhzdHJ1Y3R1cmUtPm1fbG9jayk7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
c3RydWN0dXJlLT5jZWxsTG9jaygpKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25U
YWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KIApAQCAtODIwLDE0ICs4MjQsMTQgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiB2bSwg
SlNPYmplY3QqIG9iamVjdCkKICAgICBBU1NFUlQoaXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VS
VChvYmplY3QtPnN0cnVjdHVyZSh2bSkgPT0gdGhpcyk7CiAgICAgCi0gICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJl
bnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhlYXApOwogICAgIAogICAgIG9i
amVjdC0+c2V0U3RydWN0dXJlSUREaXJlY3RseShudWtlKGlkKCkpKTsKICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ID0gdGhp
cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnko
KSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwo
KTsKKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JO
dWxsKCk7CiAgICAgICAgIEFTU0VSVCh0YWJsZSk7CiAKICAgICAgICAgc2l6ZV90IHByb3BlcnR5
Q291bnQgPSB0YWJsZS0+c2l6ZSgpOwpAQCAtODQxLDE0ICs4NDUsMTQgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiB2bSwgSlNPYmplY3QqIG9i
amVjdCkKICAgICAgICAgYXV0byBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwogICAgICAgICBmb3Ig
KFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlciwgKytpKSB7CiAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvYmplY3QtPmdldERp
cmVjdChpdGVyLT5vZmZzZXQpOwotICAgICAgICAgICAgb2Zmc2V0ID0gaXRlci0+b2Zmc2V0ID0g
b2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAg
ICBvZmZzZXQgPSBpdGVyLT5vZmZzZXQgPSBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBpbmxp
bmVDYXBhY2l0eSgpKTsKICAgICAgICAgfQogICAgICAgICBzZXRNYXhPZmZzZXQodm0sIG9mZnNl
dCk7CiAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9uT2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNldCk7
CiAgICAgICAgIAogICAgICAgICAvLyBDb3BpZXMgaW4gb3VyIHZhbHVlcyB0byB0aGVpciBjb21w
YWN0ZWQgbG9jYXRpb25zLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVy
dHlDb3VudDsgaSsrKQotICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZv
clByb3BlcnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkpLCB2YWx1ZXNbaV0pOworICAgICAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIGlu
bGluZUNhcGFjaXR5KCkpLCB2YWx1ZXNbaV0pOwogCiAgICAgICAgIHRhYmxlLT5jbGVhckRlbGV0
ZWRPZmZzZXRzKCk7CiAKQEAgLTg5NCwxOSArODk4LDE5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAg
ICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW4oY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQordm9pZCBTdHJ1Y3R1cmU6OnBp
bihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRh
YmxlKQogewogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZSh0cnVlKTsKICAgICBzZXRQcm9w
ZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAgICAgY2xlYXJQcmV2aW91c0lEKCk7Ci0gICAgbV90cmFu
c2l0aW9uUHJvcGVydHlOYW1lID0gbnVsbHB0cjsKKyAgICBzZXRUcmFuc2l0aW9uUHJvcGVydHlO
YW1lKGxvY2tlciwgbnVsbHB0cik7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5n
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKK3Zv
aWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5nKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIs
IFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0
eVRhYmxlKHRydWUpOwogICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKLSAgICBtX3Ry
YW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSBudWxscHRyOworICAgIHNldFRyYW5zaXRpb25Qcm9wZXJ0
eU5hbWUobG9ja2VyLCBudWxscHRyKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFy
ZURhdGEoVk0mIHZtKQpAQCAtOTE0LDcgKzkxOCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6YWxsb2Nh
dGVSYXJlRGF0YShWTSYgdm0pCiAgICAgQVNTRVJUKCFoYXNSYXJlRGF0YSgpKTsKICAgICBTdHJ1
Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKHZtLCBw
cmV2aW91c0lEKCkpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisjaWYgQ1BVKEFERFJF
U1M2NCkKKyAgICBtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhLnNldFBvaW50
ZXIocmFyZURhdGEpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHJhcmVEYXRhKTsK
KyNlbHNlCiAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlzLCByYXJlRGF0YSk7
CisjZW5kaWYKICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CiB9CiAKQEAgLTkyOCw3ICs5Mzcs
NyBAQCBXYXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRX
YXRjaHBvaW50U2V0KFZNJiB2bSwgUHJvcGVydAogICAgIAogICAgIGlmICghaGFzUmFyZURhdGEo
KSkKICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7Ci0gICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxM
b2NrKCkpOwogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMtPnJhcmVEYXRh
KCk7CiAgICAgaWYgKCFyYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzKSB7CiAg
ICAgICAgIHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMgPQpAQCAtOTk4LDcg
KzEwMDcsNyBAQCBQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyOjp+UHJvcGVydHlNYXBT
dGF0aXN0aWNzRXhpdExvZ2dlcigpCiAKIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiB2bSkKIHsKLSAgICBpZiAoUHJvcGVydHlUYWJsZSog
dGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpCisgICAgaWYgKFByb3BlcnR5VGFibGUqIHRh
YmxlID0gcHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKQogICAgICAgICByZXR1cm4gUHJvcGVy
dHlUYWJsZTo6Y2xvbmUodm0sICp0YWJsZSk7CiAgICAgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0g
ZmFsc2U7CiAgICAgcmV0dXJuIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSh2bSwgc2V0UHJvcGVy
dHlUYWJsZSk7CkBAIC0xMDM4LDE0ICsxMDQ3LDE0IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVy
ZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmli
CiB7CiAgICAgcmV0dXJuIGFkZDxTaG91bGRQaW46Ok5vPigKICAgICAgICAgdm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywKLSAgICAgICAgW3RoaXMsICZ2bV0gKGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZz
ZXQpIHsKKyAgICAgICAgW3RoaXMsICZ2bV0oY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExv
Y2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKICAg
ICAgICAgICAgIHNldE1heE9mZnNldCh2bSwgbmV3TWF4T2Zmc2V0KTsKICAgICAgICAgfSk7CiB9
CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gcmVtb3ZlPFNob3VsZFBpbjo6Tm8+KHZtLCBw
cm9wZXJ0eU5hbWUsIFt0aGlzLCAmdm1dIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIm
LCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgcmV0
dXJuIHJlbW92ZTxTaG91bGRQaW46Ok5vPih2bSwgcHJvcGVydHlOYW1lLCBbdGhpcywgJnZtXShj
b25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3Bl
cnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewogICAgICAgICBzZXRNYXhPZmZzZXQodm0sIG5ld01h
eE9mZnNldCk7CiAgICAgfSk7CiB9CkBAIC0xMTE2LDI1ICsxMTI1LDIxIEBAIHZvaWQgU3RydWN0
dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIAotICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodGhpc09iamVjdC0+bV9sb2NrKTsKKyAgICBDb25j
dXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKICAgICAK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dsb2JhbE9iamVjdCk7Ci0gICAgaWYg
KCF0aGlzT2JqZWN0LT5pc09iamVjdCgpKQotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZFBy
b3RvdHlwZUNoYWluLmNsZWFyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fcHJvdG90eXBlKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbik7Ci0gICAgfQotICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fcHJldmlvdXNPclJhcmVEYXRhKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3Byb3RvdHlwZSk7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0
aGlzT2JqZWN0LT5jYWNoZWRQcm90b3R5cGVDaGFpbigpKTsKKyAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKHRoaXNPYmplY3QtPnByZXZpb3VzT3JSYXJlRGF0YSgpKTsKIAogICAgIGlmICh0
aGlzT2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSB8fCB0aGlzT2JqZWN0LT5wcm90ZWN0
UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZygpKSB7CiAgICAgICAgIC8vIE5PVEU6IFRo
aXMgY2FuIGludGVybGVhdmUgaW4gcGluKCksIGluIHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51
bGwgcHJvcGVydHkgdGFibGUuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4g
dGhlIGJhcnJpZXIgd2lsbCBmaXJlIGFuZCB3ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzT2JqZWN0LT5wcm9wZXJ0eVRhYmxl
VW5zYWZlT3JOdWxsKCkpOwogICAgIH0gZWxzZSBpZiAodmlzaXRvci5pc0FuYWx5emluZ0hlYXAo
KSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5z
YWZlKTsKLSAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCi0g
ICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOworICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXNPYmplY3QtPnByb3BlcnR5VGFibGVVbnNh
ZmVPck51bGwoKSk7CisgICAgZWxzZSBpZiAodGhpc09iamVjdC0+cHJvcGVydHlUYWJsZVVuc2Fm
ZU9yTnVsbCgpKQorICAgICAgICB0aGlzT2JqZWN0LT5jbGVhclByb3BlcnR5VGFibGUoKTsKIH0K
IAogYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCkBAIC0xMjkwLDcgKzEy
OTUsNyBAQCBib29sIFN0cnVjdHVyZTo6Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZN
JiB2bSkgY29uc3QKICAgICBpZiAoIXRoaXMtPmNhbkNhY2hlT3duS2V5cygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4gPSBtX2Nh
Y2hlZFByb3RvdHlwZUNoYWluLmdldCgpOworICAgIFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVD
aGFpbiA9IGNhY2hlZFByb3RvdHlwZUNoYWluKCk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZUNoYWlu
KTsKICAgICBTdHJ1Y3R1cmVJRCogY3VycmVudFN0cnVjdHVyZUlEID0gc3RydWN0dXJlQ2hhaW4t
PmhlYWQoKTsKICAgICB3aGlsZSAodHJ1ZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAppbmRleCA1MmNkM2M3MWQ5MjBmMmY4YTk3YjQ2MGI5MGUwZWM3MGQ1ZDcx
MWFmLi4xMmU3NjQ5MDcyNmQ4ODkxNmYzNjlkMmIwMjE1YjI2NTk3NDM4NTJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaApAQCAtNDIsNiArNDIsNyBAQAogI2lu
Y2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJXcml0ZUJhcnJpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBhY3RQb2ludGVy
VHVwbGUuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdURiB7
CkBAIC0yNTgsOSArMjU5LDE4IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuZ2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmUoKTsKICAgICB9CisKKyAgICBUeXBlSW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzIG91
dE9mTGluZVR5cGVGbGFncygpIGNvbnN0CisgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAg
ICAgIHJldHVybiBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUudHlw
ZSgpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lVHlwZUZsYWdzOworI2VuZGlm
CisgICAgfQogICAgIAogICAgIC8vIFR5cGUgYWNjZXNzb3JzLgotICAgIFR5cGVJbmZvIHR5cGVJ
bmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdz
KTsgfQorICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnR5cGVJ
bmZvKG91dE9mTGluZVR5cGVGbGFncygpKTsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7
IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KIAogICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlz
dG9yeSgpICYgQWxsV3JpdGFibGVBcnJheVR5cGVzOyB9CkBAIC0zMTUsMjQgKzMyNSwyNCBAQCBj
bGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAgICBib29sIGhh
c1JhcmVEYXRhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpc1JhcmVEYXRhKG1fcHJl
dmlvdXNPclJhcmVEYXRhLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGlzUmFyZURhdGEocHJldmlv
dXNPclJhcmVEYXRhKCkpOwogICAgIH0KIAogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0
YSgpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KG1fcHJldmlvdXNPclJhcmVEYXRhLmdl
dCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4ocHJl
dmlvdXNPclJhcmVEYXRhKCkpOwogICAgIH0KIAogICAgIGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRh
KiByYXJlRGF0YSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSo+KG1f
cHJldmlvdXNPclJhcmVEYXRhLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IFN0cnVjdHVyZVJhcmVEYXRhKj4ocHJldmlvdXNPclJhcmVEYXRhKCkpOwogICAgIH0KIAog
ICAgIGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YUNvbmN1cnJlbnRseSgpIGNvbnN0
CiAgICAgewotICAgICAgICBKU0NlbGwqIGNlbGwgPSBtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQo
KTsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gcHJldmlvdXNPclJhcmVEYXRhKCk7CiAgICAgICAg
IGlmIChpc1JhcmVEYXRhKGNlbGwpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0
cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzQ4
LDkgKzM1OCw5IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAg
IFN0cnVjdHVyZSogcHJldmlvdXNJRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgIC8vIFRoaXMgaXMgc28g
d3JpdHRlbiBiZWNhdXNlIGl0J3MgdXNlZCBjb25jdXJyZW50bHkuIFdlIG9ubHkgbG9hZCBmcm9t
IG1fcHJldmlvdXNPclJhcmVEYXRhCisgICAgICAgIC8vIFRoaXMgaXMgc28gd3JpdHRlbiBiZWNh
dXNlIGl0J3MgdXNlZCBjb25jdXJyZW50bHkuIFdlIG9ubHkgbG9hZCBmcm9tIG1faW5saW5lQ2Fw
YWNpdHlBbmRQcmV2aW91c09yUmFyZURhdGEKICAgICAgICAgLy8gb25jZSwgYW5kIHRoaXMgbG9h
ZCBpcyBndWFyYW50ZWVkIGF0b21pYy4KLSAgICAgICAgSlNDZWxsKiBjZWxsID0gbV9wcmV2aW91
c09yUmFyZURhdGEuZ2V0KCk7CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHByZXZpb3VzT3JSYXJl
RGF0YSgpOwogICAgICAgICBpZiAoaXNSYXJlRGF0YShjZWxsKSkKICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpLT5wcmV2aW91c0lEKCk7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmUqPihjZWxsKTsKQEAgLTM1OSw3ICsz
NjksMTEgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQoKSBjb25zdAogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0
KQorICAgICAgICB1aW50MTZfdCBtYXhPZmZzZXQgPSBtX21heE9mZnNldEFuZENhY2hlZFByb3Rv
dHlwZUNoYWluLnR5cGUoKTsKKyNlbHNlCiAgICAgICAgIHVpbnQxNl90IG1heE9mZnNldCA9IG1f
bWF4T2Zmc2V0OworI2VuZGlmCiAgICAgICAgIGlmIChtYXhPZmZzZXQgPT0gc2hvcnRJbnZhbGlk
T2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAgICAgICAgIGlmICht
YXhPZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKQpAQCAtMzY5LDIyICszODMsNDUgQEAgY2xhc3Mg
U3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIHNldE1heE9mZnNl
dChWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChvZmZz
ZXQgPT0gaW52YWxpZE9mZnNldCkKLSAgICAgICAgICAgIG1fbWF4T2Zmc2V0ID0gc2hvcnRJbnZh
bGlkT2Zmc2V0OwotICAgICAgICBlbHNlIGlmIChvZmZzZXQgPCB1c2VSYXJlRGF0YUZsYWcgJiYg
b2Zmc2V0IDwgc2hvcnRJbnZhbGlkT2Zmc2V0KQotICAgICAgICAgICAgbV9tYXhPZmZzZXQgPSBv
ZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKG1fbWF4T2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykK
KyAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVH
Q1RocmVhZCgpKTsKKyAgICAgICAgYXV0byBjb21taXQgPSBbJl0odWludDE2X3QgdmFsdWUpIHsK
KyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICAgICAgbV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90
b3R5cGVDaGFpbi5zZXRUeXBlKHZhbHVlKTsKKyNlbHNlCisgICAgICAgICAgICBtX21heE9mZnNl
dCA9IHZhbHVlOworI2VuZGlmCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKG9mZnNldCA9PSBp
bnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBjb21taXQoc2hvcnRJbnZhbGlkT2Zmc2V0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAob2Zmc2V0IDwgdXNl
UmFyZURhdGFGbGFnICYmIG9mZnNldCA8IHNob3J0SW52YWxpZE9mZnNldCkgeworICAgICAgICAg
ICAgY29tbWl0KG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNpZiBD
UFUoQUREUkVTUzY0KQorICAgICAgICB1aW50MTZfdCBtYXhPZmZzZXQgPSBtX21heE9mZnNldEFu
ZENhY2hlZFByb3RvdHlwZUNoYWluLnR5cGUoKTsKKyNlbHNlCisgICAgICAgIHVpbnQxNl90IG1h
eE9mZnNldCA9IG1fbWF4T2Zmc2V0OworI2VuZGlmCisgICAgICAgIGlmIChtYXhPZmZzZXQgPT0g
dXNlUmFyZURhdGFGbGFnKSB7CiAgICAgICAgICAgICByYXJlRGF0YSgpLT5tX21heE9mZnNldCA9
IG9mZnNldDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBlbnN1cmVSYXJlRGF0YSh2bSkt
Pm1fbWF4T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKLSAgICAgICAgICAgIG1fbWF4T2Zmc2V0ID0gdXNlUmFyZURhdGFGbGFnOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlUmFyZURhdGEodm0pLT5tX21h
eE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAg
ICAgY29tbWl0KHVzZVJhcmVEYXRhRmxhZyk7CiAgICAgfQogCiAgICAgUHJvcGVydHlPZmZzZXQg
dHJhbnNpdGlvbk9mZnNldCgpIGNvbnN0CiAgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAg
ICAgIHVpbnQxNl90IHRyYW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFz
c0luZm8udHlwZSgpOworI2Vsc2UKICAgICAgICAgdWludDE2X3QgdHJhbnNpdGlvbk9mZnNldCA9
IG1fdHJhbnNpdGlvbk9mZnNldDsKKyNlbmRpZgogICAgICAgICBpZiAodHJhbnNpdGlvbk9mZnNl
dCA9PSBzaG9ydEludmFsaWRPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNl
dDsKICAgICAgICAgaWYgKHRyYW5zaXRpb25PZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKQpAQCAt
Mzk0LDE3ICs0MzEsMzYgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7
CiAKICAgICB2b2lkIHNldFRyYW5zaXRpb25PZmZzZXQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCiAgICAgewotICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCi0gICAg
ICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSBzaG9ydEludmFsaWRPZmZzZXQ7Ci0gICAgICAg
IGVsc2UgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFs
aWRPZmZzZXQpCi0gICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSBvZmZzZXQ7Ci0gICAg
ICAgIGVsc2UgaWYgKG1fdHJhbnNpdGlvbk9mZnNldCA9PSB1c2VSYXJlRGF0YUZsYWcpCisgICAg
ICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJl
YWQoKSk7CisgICAgICAgIGF1dG8gY29tbWl0ID0gWyZdKHVpbnQxNl90IHZhbHVlKSB7CisjaWYg
Q1BVKEFERFJFU1M2NCkKKyAgICAgICAgICAgIG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5m
by5zZXRUeXBlKHZhbHVlKTsKKyNlbHNlCisgICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQg
PSB2YWx1ZTsKKyNlbmRpZgorICAgICAgICB9OworCisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52
YWxpZE9mZnNldCkgeworICAgICAgICAgICAgY29tbWl0KHNob3J0SW52YWxpZE9mZnNldCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJh
cmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAg
IGNvbW1pdChvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWYgQ1BV
KEFERFJFU1M2NCkKKyAgICAgICAgdWludDE2X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNp
dGlvbk9mZnNldEFuZENsYXNzSW5mby50eXBlKCk7CisjZWxzZQorICAgICAgICB1aW50MTZfdCB0
cmFuc2l0aW9uT2Zmc2V0ID0gbV90cmFuc2l0aW9uT2Zmc2V0OworI2VuZGlmCisgICAgICAgIGlm
ICh0cmFuc2l0aW9uT2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykgewogICAgICAgICAgICAgcmFy
ZURhdGEoKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0
OwotICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIG1fdHJh
bnNpdGlvbk9mZnNldCA9IHVzZVJhcmVEYXRhRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQorCisgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0
ID0gb2Zmc2V0OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBjb21t
aXQodXNlUmFyZURhdGFGbGFnKTsKICAgICB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQgb3V0T2ZM
aW5lQ2FwYWNpdHkoUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQpAQCAtNDQwLDE3ICs0OTYsMTgg
QEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lU2l6ZShtYXhPZmZzZXQoKSk7CiAgICAgfQotICAgIGJvb2wgaGFz
SW5saW5lU3RvcmFnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISFtX2lubGluZUNh
cGFjaXR5OwotICAgIH0KKyAgICBib29sIGhhc0lubGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVy
biAhIWlubGluZUNhcGFjaXR5KCk7IH0KICAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIGNv
bnN0CiAgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50OF90PihtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhLnR5cGUoKSk7
CisjZWxzZQogICAgICAgICByZXR1cm4gbV9pbmxpbmVDYXBhY2l0eTsKKyNlbmRpZgogICAgIH0K
ICAgICB1bnNpZ25lZCBpbmxpbmVTaXplKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBz
dGQ6Om1pbjx1bnNpZ25lZD4obWF4T2Zmc2V0KCkgKyAxLCBtX2lubGluZUNhcGFjaXR5KTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihtYXhPZmZzZXQoKSArIDEsIGlubGluZUNh
cGFjaXR5KCkpOwogICAgIH0KICAgICB1bnNpZ25lZCB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpIGNv
bnN0CiAgICAgewpAQCAtNDYyLDEyICs1MTksMTIgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDog
cHVibGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICByZXR1cm4gSlNDOjppc1ZhbGlkT2Zmc2V0
KG9mZnNldCkKICAgICAgICAgICAgICYmIG9mZnNldCA8PSBtYXhPZmZzZXQoKQotICAgICAgICAg
ICAgJiYgKG9mZnNldCA8IG1faW5saW5lQ2FwYWNpdHkgfHwgb2Zmc2V0ID49IGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KTsKKyAgICAgICAgICAgICYmIChvZmZzZXQgPCBzdGF0aWNfY2FzdDxpbnQ+KGlu
bGluZUNhcGFjaXR5KCkpIHx8IG9mZnNldCA+PSBmaXJzdE91dE9mTGluZU9mZnNldCk7CiAgICAg
fQogCiAgICAgYm9vbCBoaWphY2tzSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGlzVHlwZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUp
OworICAgICAgICByZXR1cm4gaXNUeXBlZFZpZXcoY2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSBjb25zdApAQCAtNTM1LDcgKzU5MiwxNCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJs
aWMgSlNDZWxsIHsKIAogICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9i
amVjdCosIFZNJiwgSlNTdHJpbmcqIHZhbHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJpbmdUYWdTeW1i
b2xTbG90KTsKIAotICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gbV9jbGFzc0luZm87IH0KKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
CisgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25P
ZmZzZXRBbmRDbGFzc0luZm8ucG9pbnRlcigpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fY2xh
c3NJbmZvOworI2VuZGlmCisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJ
RE9mZnNldCgpCiAgICAgewpAQCAtNTUyLDI5ICs2MTYsMzkgQEAgY2xhc3MgU3RydWN0dXJlIGZp
bmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3Ry
dWN0dXJlLCBtX2dsb2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBj
bGFzc0luZm9PZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDbGFzc0luZm8o
KQogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZSwgbV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKTsKKyNlbHNlCiAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7Cisj
ZW5kaWYKICAgICB9Ci0gICAgICAgIAorCiAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ01v
ZGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRleGluZ01v
ZGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBwdHJk
aWZmX3QgcHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCi0gICAgewotICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9
CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGlubGluZUNhcGFjaXR5T2Zmc2V0KCkKKyNpZiBDUFUo
TElUVExFX0VORElBTikKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5lQ2FwYWNp
dHkoKQogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFN0cnVjdHVyZSwgbV9pbmxpbmVDYXBhY2l0eUFuZFByZXZpb3VzT3JSYXJlRGF0YSkg
KyBDb21wYWN0UG9pbnRlclR1cGxlPEpTQ2VsbCosIHVpbnQxNl90Pjo6b2Zmc2V0T2ZUeXBlKCk7
CisjZWxzZQogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9pbmxp
bmVDYXBhY2l0eSk7CisjZW5kaWYKKwogICAgIH0KKyNlbmRpZgogCi0gICAgc3RhdGljIHB0cmRp
ZmZfdCBwcmV2aW91c09yUmFyZURhdGFPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZQcmV2aW91c09yUmFyZURhdGEoKQogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9pbmxpbmVDYXBhY2l0eUFu
ZFByZXZpb3VzT3JSYXJlRGF0YSk7CisjZWxzZQogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZSwgbV9wcmV2aW91c09yUmFyZURhdGEpOworI2VuZGlmCiAgICAgfQogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJik7CkBAIC02NTMsMTIgKzcy
NywxNCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAg
ICBzdGF0aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRlcihQcmludFN0cmVhbSYpOwogICAgIAotICAg
IENvbmN1cnJlbnRKU0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KLQotICAgIHVuc2ln
bmVkIHByb3BlcnR5SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlIYXNoOyB9Ci0KICAg
ICBzdGF0aWMgYm9vbCBzaG91bGRDb252ZXJ0VG9Qb2x5UHJvdG8oY29uc3QgU3RydWN0dXJlKiBh
LCBjb25zdCBTdHJ1Y3R1cmUqIGIpOwogCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHRyYW5zaXRp
b25Qcm9wZXJ0eU5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0
aW9uVGhyZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVHQ1RocmVhZCgpKTsKKyAgICAgICAgcmV0dXJu
IG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKTsKKyAgICB9CisKICAgICBzdHJ1Y3QgUHJv
cGVydHlIYXNoRW50cnkgewogICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlOwogICAgICAg
ICBjb25zdCBIYXNoVGFibGVWYWx1ZSogdmFsdWU7CkBAIC02NjgsNiArNzQ0LDI2IEBAIGNsYXNz
IFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CiAKIHByaXZhdGU6CisgICAgYm9vbCBydWxlT3V0VW5zZWVuUHJvcGVydHlIYXNoKFVuaXF1
ZWRTdHJpbmdJbXBsKikgY29uc3Q7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAvLyBBcyBhIHBy
b3BlcnR5SGFzaCwgNjRiaXQgZW52aXJvbm1lbnQgdXNlcyAxNmJpdCBwcm9wZXJ0eS1oYXNoICsg
c2VlblByb3BlcnRpZXMgc2V0LgorICAgIHVpbnRwdHJfdCBwcm9wZXJ0eUhhc2goKSBjb25zdCB7
IHJldHVybiBtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhLmRhdGEoKTsgfQor
I2Vsc2UKKyAgICB1aW50MzJfdCBwcm9wZXJ0eUhhc2goKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnR5SGFzaDsgfQorI2VuZGlmCisgICAgdWludHB0cl90IHNlZW5Qcm9wZXJ0aWVzKCkgY29uc3Q7
CisgICAgdm9pZCBhZGRQcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydHkodW5zaWduZWQsIFVuaXF1
ZWRTdHJpbmdJbXBsKik7CisKKyAgICB2b2lkIHNldFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCogdHJhbnNpdGlvblByb3BlcnR5
TmFtZSkKKyAgICB7CisgICAgICAgIG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9IHRyYW5zaXRp
b25Qcm9wZXJ0eU5hbWU7CisgICAgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB0cmFuc2l0aW9u
UHJvcGVydHlOYW1lQ29uY3VycmVudGx5KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjZWxsTG9j
aygpLmlzTG9ja2VkKCkpOworICAgICAgICByZXR1cm4gbV90cmFuc2l0aW9uUHJvcGVydHlOYW1l
LmdldCgpOworICAgIH0KKwogICAgIHR5cGVkZWYgZW51bSB7IAogICAgICAgICBOb25lRGljdGlv
bmFyeUtpbmQgPSAwLAogICAgICAgICBDYWNoZWREaWN0aW9uYXJ5S2luZCA9IDEsCkBAIC02ODQs
NiArNzgwLDcgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAg
e1wKICAgICAgICAgbV9iaXRGaWVsZCAmPSB+KHNfIyNsb3dlck5hbWUjI01hc2sgPDwgb2Zmc2V0
KTtcCiAgICAgICAgIG1fYml0RmllbGQgfD0gKG5ld1ZhbHVlICYgc18jI2xvd2VyTmFtZSMjTWFz
aykgPDwgb2Zmc2V0O1wKKyAgICAgICAgQVNTRVJUKG5ld1ZhbHVlID09IGxvd2VyTmFtZSgpKTtc
CiAgICAgfQogCiAgICAgREVGSU5FX0JJVEZJRUxEKERpY3Rpb25hcnlLaW5kLCBkaWN0aW9uYXJ5
S2luZCwgRGljdGlvbmFyeUtpbmQsIDIsIDApOwpAQCAtNjkxLDE4ICs3ODgsMTggQEAgY2xhc3Mg
U3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJv
b2wsIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMsIEhhc0dldHRlclNldHRlclByb3BlcnRpZXMs
IDEsIDMpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCBIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJv
cGVydGllc0V4Y2x1ZGluZ1Byb3RvLCAxLCA0KTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
aXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uLCBJc1F1aWNrUHJvcGVy
dHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24sIDEsIDUpOwotICAgIERFRklORV9CSVRGSUVM
RCh1bnNpZ25lZCwgdHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcywgVHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcywgMTQsIDYpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRQcmV2
ZW50RXh0ZW5zaW9ucywgRGlkUHJldmVudEV4dGVuc2lvbnMsIDEsIDIwKTsKLSAgICBERUZJTkVf
QklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlkVHJhbnNpdGlvbiwgMSwgMjEpOwotICAg
IERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCwgU3RhdGljUHJv
cGVydGllc1JlaWZpZWQsIDEsIDIyKTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzQmVl
bkZsYXR0ZW5lZEJlZm9yZSwgSGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSwgMSwgMjMpOwotICAgIERF
RklORV9CSVRGSUVMRChib29sLCBoYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCBIYXND
dXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCAxLCAyNCk7Ci0gICAgREVGSU5FX0JJVEZJRUxE
KGJvb2wsIGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCBEaWRXYXRjaEludGVybmFsUHJvcGVy
dGllcywgMSwgMjUpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCB0cmFuc2l0aW9uV2F0Y2hw
b2ludElzTGlrZWx5VG9CZUZpcmVkLCBUcmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZp
cmVkLCAxLCAyNik7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc0JlZW5EaWN0aW9uYXJ5
LCBIYXNCZWVuRGljdGlvbmFyeSwgMSwgMjcpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBw
cm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZywgUHJvdGVjdFByb3BlcnR5VGFi
bGVXaGlsZVRyYW5zaXRpb25pbmcsIDEsIDI4KTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
aGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvLCBIYXNVbmRl
cnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8sIDEsIDI5KTsKLSAgICBE
RUZJTkVfQklURklFTEQoYm9vbCwgaXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwgSXNQcm9w
ZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwgMSwgMzApOworICAgIERFRklORV9CSVRGSUVMRCh1bnNp
Z25lZCwgdHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcywgVHJhbnNpdGlvblByb3BlcnR5QXR0
cmlidXRlcywgOCwgNik7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFByZXZlbnRFeHRl
bnNpb25zLCBEaWRQcmV2ZW50RXh0ZW5zaW9ucywgMSwgMTQpOworICAgIERFRklORV9CSVRGSUVM
RChib29sLCBkaWRUcmFuc2l0aW9uLCBEaWRUcmFuc2l0aW9uLCAxLCAxNSk7CisgICAgREVGSU5F
X0JJVEZJRUxEKGJvb2wsIHN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkLCBTdGF0aWNQcm9wZXJ0aWVz
UmVpZmllZCwgMSwgMTYpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNCZWVuRmxhdHRl
bmVkQmVmb3JlLCBIYXNCZWVuRmxhdHRlbmVkQmVmb3JlLCAxLCAxNyk7CisgICAgREVGSU5FX0JJ
VEZJRUxEKGJvb2wsIGhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMsIEhhc0N1c3RvbUdl
dHRlclNldHRlclByb3BlcnRpZXMsIDEsIDE4KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
ZGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCAx
LCAxOSk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHRyYW5zaXRpb25XYXRjaHBvaW50SXNM
aWtlbHlUb0JlRmlyZWQsIFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0JlRmlyZWQsIDEs
IDIwKTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzQmVlbkRpY3Rpb25hcnksIEhhc0Jl
ZW5EaWN0aW9uYXJ5LCAxLCAyMSk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHByb3RlY3RQ
cm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCBQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxl
VHJhbnNpdGlvbmluZywgMSwgMjIpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNVbmRl
cnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8sIEhhc1VuZGVyc2NvcmVQ
cm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgMSwgMjMpOworICAgIERFRklORV9C
SVRGSUVMRChib29sLCBpc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uLCBJc1Byb3BlcnR5RGVs
ZXRpb25UcmFuc2l0aW9uLCAxLCAyNCk7CiAKICAgICBzdGF0aWNfYXNzZXJ0KHNfYml0V2lkdGhP
ZlRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMgPD0gc2l6ZW9mKFRyYW5zaXRpb25Qcm9wZXJ0
eUF0dHJpYnV0ZXMpICogOCk7CiAKQEAgLTcyMSw3ICs4MTgsNyBAQCBjbGFzcyBTdHJ1Y3R1cmUg
ZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBhbmQgdGhlIGxpc3Qgb2Ygc3RydWN0dXJl
cyB0aGF0IHdlIHZpc2l0ZWQgYmVmb3JlIHdlIGdvdCB0byBpdC4gSWYgaXQgcmV0dXJucyBhCiAg
ICAgLy8gbm9uLW51bGwgc3RydWN0dXJlLCBpdCB3aWxsIGFsc28gbG9jayB0aGUgc3RydWN0dXJl
IHRoYXQgaXQgcmV0dXJuczsgaXQgaXMgeW91ciBqb2IKICAgICAvLyB0byB1bmxvY2sgaXQuCi0g
ICAgdm9pZCBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3Ry
dWN0dXJlKiwgOD4mIHN0cnVjdHVyZXMsIFN0cnVjdHVyZSomLCBQcm9wZXJ0eVRhYmxlKiYpOwor
ICAgIHZvaWQgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oVmVjdG9yPHN0
ZDo6cGFpcjxTdHJ1Y3R1cmUqLCBVbmlxdWVkU3RyaW5nSW1wbCo+LCA4PiYgc3RydWN0dXJlcywg
U3RydWN0dXJlKiYsIFByb3BlcnR5VGFibGUqJik7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5k
LCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsK
IApAQCAtNzM4LDcgKzgzNSw3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewogICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwg
d2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgogICAgIFByb3BlcnR5VGFibGUqIGVu
c3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KFZNJiB2bSkKICAgICB7Ci0gICAgICAgIGlmIChQ
cm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCkpCisgICAg
ICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxs
KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICBpZiAoIXByZXZpb3VzSUQo
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzQ4LDM5ICs4NDUsMzcgQEAgY2xh
c3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBtYXkgZ3Jh
YiB0aGUgbG9jaywgb3Igbm90LiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVy
ZSdzIGxvY2suCiAgICAgUHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVydHlUYWJsZShWTSYgdm0p
CiAgICAgewotICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gbV9wcm9wZXJ0eVRh
YmxlVW5zYWZlLmdldCgpKQorICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gcHJv
cGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgcmV0dXJuIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSh2bSk7CiAgICAgfQogICAgIAot
ICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGVPck51bGwoKSBjb25zdAorICAgIFByb3Bl
cnR5VGFibGUqIHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSBjb25zdAogICAgIHsKKyNpZiBD
UFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gbV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9w
ZXJ0eVRhYmxlVW5zYWZlLnBvaW50ZXIoKTsKKyNlbHNlCiAgICAgICAgIHJldHVybiBtX3Byb3Bl
cnR5VGFibGVVbnNhZmUuZ2V0KCk7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAgLy8gVGhpcyB3
aWxsIGdyYWIgdGhlIGxvY2suIERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jay4KICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVRhYmxlKiBtYXRlcmlhbGl6
ZVByb3BlcnR5VGFibGUoVk0mLCBib29sIHNldFByb3BlcnR5VGFibGUgPSB0cnVlKTsKICAgICAK
ICAgICB2b2lkIHNldFByb3BlcnR5VGFibGUoVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSk7
CisgICAgdm9pZCBjbGVhclByb3BlcnR5VGFibGUoKTsKICAgICAKICAgICBQcm9wZXJ0eVRhYmxl
KiB0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOwogICAgIFByb3BlcnR5VGFi
bGUqIGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYpOwogCiAgICAgdm9pZCBzZXRQcmV2
aW91c0lEKFZNJiwgU3RydWN0dXJlKik7Ci0KLSAgICB2b2lkIGNsZWFyUHJldmlvdXNJRCgpCi0g
ICAgewotICAgICAgICBpZiAoaGFzUmFyZURhdGEoKSkKLSAgICAgICAgICAgIHJhcmVEYXRhKCkt
PmNsZWFyUHJldmlvdXNJRCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ByZXZpb3Vz
T3JSYXJlRGF0YS5jbGVhcigpOwotICAgIH0KKyAgICB2b2lkIGNsZWFyUHJldmlvdXNJRCgpOwog
CiAgICAgaW50IHRyYW5zaXRpb25Db3VudEVzdGltYXRlKCkgY29uc3QKICAgICB7CiAgICAgICAg
IC8vIFNpbmNlIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgaXMgb2Z0ZW4gdGhlIHNhbWUgYXMg
dGhlIGxhc3Qgb2Zmc2V0IChleGNlcHQgaWYgdGhlcmUgYXJlIGRlbGV0ZXMpCiAgICAgICAgIC8v
IHdlIGtlZXAgdGhlIHNpemUgb2YgU3RydWN0dXJlIGRvd24gYnkgbm90IHN0b3JpbmcgYm90aC4K
LSAgICAgICAgcmV0dXJuIG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1f
aW5saW5lQ2FwYWNpdHkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNl
dChtYXhPZmZzZXQoKSwgaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1Zh
bGlkKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWlu
LCBKU09iamVjdCogYmFzZSkgY29uc3Q7CkBAIC04MDIsNDggKzg5Nyw4OCBAQCBjbGFzcyBTdHJ1
Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAgICB2b2lkIHN0YXJ0V2F0Y2hp
bmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQ
cm90b3R5cGVDaGFpbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4o
Vk0mLCBTdHJ1Y3R1cmVDaGFpbiopOworCisgICAgdm9pZCBzZXRPdXRPZkxpbmVUeXBlRmxhZ3Mo
VHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFncyk7CisgICAgdm9pZCBzZXRDbGFzc0luZm8oY29u
c3QgQ2xhc3NJbmZvKik7CisgICAgdm9pZCBzZXRJbmxpbmVDYXBhY2l0eSh1aW50OF90KTsKKwor
ICAgIEpTQ2VsbCogcHJldmlvdXNPclJhcmVEYXRhKCkgY29uc3QKKyAgICB7CisjaWYgQ1BVKEFE
RFJFU1M2NCkKKyAgICAgICAgcmV0dXJuIG1faW5saW5lQ2FwYWNpdHlBbmRQcmV2aW91c09yUmFy
ZURhdGEucG9pbnRlcigpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fcHJldmlvdXNPclJhcmVE
YXRhLmdldCgpOworI2VuZGlmCisgICAgfQorCiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19t
YXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19tYXhU
cmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAKICAgICAvLyBUaGVzZSBu
ZWVkIHRvIGJlIHByb3Blcmx5IGFsaWduZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgJ1N0cnVj
dHVyZScKICAgICAvLyBwYXJ0IG9mIHRoZSBvYmplY3QuCiAgICAgU3RydWN0dXJlSURCbG9iIG1f
YmxvYjsKLSAgICBUeXBlSW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzIG1fb3V0T2ZMaW5lVHlwZUZs
YWdzOwogCi0gICAgdWludDhfdCBtX2lubGluZUNhcGFjaXR5OwotCi0gICAgQ29uY3VycmVudEpT
TG9jayBtX2xvY2s7Ci0KLSAgICB1aW50MzJfdCBtX2JpdEZpZWxkOwotCi0gICAgV3JpdGVCYXJy
aWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKLSAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV9wcm90b3R5cGU7CisgICAgLy8gVGhlIHByb3BlcnR5IHRhYmxlIHBvaW50ZXIgc2hv
dWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0Ms
IG1fcHJvcGVydHlUYWJsZVVuc2FmZSBmaWVsZCBwYXJ0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90
aGVyIHRocmVhZC4KKyAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNs
ZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KKyNpZiBDUFUoQUREUkVTUzY0
KQorcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IGNsYXNzSW5mb01hc2sg
PSBDb21wYWN0UG9pbnRlclR1cGxlPGNvbnN0IENsYXNzSW5mbyosIHVpbnQxNl90Pjo6cG9pbnRl
ck1hc2s7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcHJldmlvdXNPclJhcmVEYXRh
TWFzayA9IENvbXBhY3RQb2ludGVyVHVwbGU8SlNDZWxsKiwgdWludDE2X3Q+Ojpwb2ludGVyTWFz
azsKK3ByaXZhdGU6CisgICAgLy8gU3RydWN0dXJlIGlzIG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVu
dGx5IGFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZS4gTW9yZW92ZXIsIFN0cnVjdHVyZSB0ZW5kcyB0
byBiZSBhbGl2ZSBsb25nIQorICAgIC8vIFRoaXMgbW90aXZhdGVzIGV4dHJhIGNvbXBsaWNhdGVk
IGhhY2sgd2hpY2ggb3B0aW1pemVzIHNpemVvZihTdHJ1Y3R1cmUpLgorICAgIC8vCisgICAgLy8g
V2UgY29tYmluZSAxNmJpdCBkYXRhIGFuZCA2NGJpdCBwb2ludGVyIGludG8gb25lIHBvaW50ZXIt
c2l6ZSBmaWVsZCB0byAoMSkgc2F2ZSBtZW1vcnkgd2hpbGUgKDIpIG5vdCBsb3NpbmcgYXRvbWlj
IGxvYWQvc3RvcmUuCisgICAgLy8gVGhlIGtleSBoZXJlIGlzIGFuYWx5emluZyBkYXRhIGFjY2Vz
cyBwYXR0ZXJucyBjYXJlZnVsbHkuIFRoZXkgYXJlIGNhdGVnb3JpZXplZCBpbnRvIHRocmVlIHR5
cGVzLgorICAgIC8vICAgICAxLiBJbW11dGFibGVBZnRlckNvbnN0cnVjdGlvbgorICAgIC8vICAg
ICAyLiBNdXRhYmxlRnJvbUFueVRocmVhZAorICAgIC8vICAgICAzLiBNdXRhYmxlRnJvbU1haW5U
aHJlYWQKKyAgICAvLyAgV2UgYXNzdW1lIHRoYXQgbG9hZGluZyBoYXBwZW5zIGZyb20gYW55IHRo
cmVhZHMuIFVuZGVyIHRoaXMgYXNzdW1wdGlvbiwgTXV0YWJsZUZyb21BbnlUaHJlYWQgKyAoTXV0
YWJsZUZyb21NYWluVGhyZWFkIC8gTXV0YWJsZUZyb21BbnlUaHJlYWQpIGlzIHRoZSBwYWlyIHdo
aWNoIGlzIHJhY3kuCisgICAgLy8gIE90aGVyIHBhaXJzIHdvcmtzIHdlbGwuIFdlIGNhcmVmdWxs
eSBwdXQgYXNzZXJ0aW9ucyB0byBzZXR0ZXJzLCBhbmFseXplIGFjY2VzcyBwYXR0ZXJucyBhbmQg
cGljayBhcHByb3ByaWF0ZSBwYWlycyBpbiBTdHJ1Y3R1cmUgZmllbGRzLgorICAgIENvbXBhY3RQ
b2ludGVyVHVwbGU8UHJvcGVydHlUYWJsZSosIFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3M+
IG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZTsgLy8gSW1tdXRhYmxl
QWZ0ZXJDb25zdHJ1Y3Rpb24obV9vdXRPZkxpbmVUeXBlRmxhZ3MpIGFuZCBNdXRhYmxlRnJvbUFu
eVRocmVhZChtX3Byb3BlcnR5VGFibGVVbnNhZmUpLgorICAgIENvbXBhY3RQb2ludGVyVHVwbGU8
U3RydWN0dXJlQ2hhaW4qLCB1aW50MTZfdD4gbV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90b3R5cGVD
aGFpbjsgLy8gTXV0YWJsZUZyb21NYWluVGhyZWFkKG1fbWF4T2Zmc2V0KSBhbmQgTXV0YWJsZUZy
b21NYWluVGhyZWFkKG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pLgorICAgIENvbXBhY3RQb2ludGVy
VHVwbGU8Y29uc3QgQ2xhc3NJbmZvKiwgdWludDE2X3Q+IG1fdHJhbnNpdGlvbk9mZnNldEFuZENs
YXNzSW5mbzsgLy8gTXV0YWJsZUZyb21NYWluVGhyZWFkKG1fdHJhbnNpdGlvbk9mZnNldCkgYW5k
IEltbXV0YWJsZUFmdGVyQ29uc3RydWN0aW9uKG1fY2xhc3NJbmZvKS4KKyAgICBDb21wYWN0UG9p
bnRlclR1cGxlPEpTQ2VsbCosIHVpbnQxNl90PiBtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNP
clJhcmVEYXRhOyAvLyBJbW11dGFibGVBZnRlckNvbnN0cnVjdGlvbihtX2lubGluZUNhcGFjaXR5
KSBhbmQgTXV0YWJsZUZyb21NYWluVGhyZWFkKG1fcHJldmlvdXNPclJhcmVEYXRhKS4KKyAgICBD
b21wYWN0UG9pbnRlclR1cGxlPFVuaXF1ZWRTdHJpbmdJbXBsKiwgdWludDE2X3Q+IG1fcHJvcGVy
dHlIYXNoQW5kU2VlblByb3BlcnRpZXM7IC8vIE11dGFibGVGcm9tTWFpblRocmVhZChtX3Byb3Bl
cnR5SGFzaCkgYW5kIE11dGFibGVGcm9tTWFpblRocmVhZChtX3NlZW5Qcm9wZXJ0aWVzKS4KKwor
ICAgIC8vIDEuIFNldHRpbmcgVW5pcXVlZFN0cmluZ0ltcGwgaGFwcGVucyBvbmx5IGluIHRoZSBt
YWluIHRocmVhZC4gQXQgdGhhdCB0aW1lLCB3ZSBtdXN0IHRha2UgYSBsb2NrLgorICAgIC8vIDIu
IEFjY2Vzc2luZyBVbmlxdWVkU3RyaW5nSW1wbCBmcm9tIHRoZSBtYWluIHRocmVhZCBpcyBPSy4K
KyAgICAvLyAzLiBBY2Nlc3NpbmcgVW5pcXVlZFN0cmluZ0ltcGwgZnJvbSBub24gbWFpbiB0aHJl
YWQgaXMgcmVxdWlyaW5nIGxvY2suCisgICAgc3RhdGljX2Fzc2VydChhbGlnbm9mKFBhY2tlZFJl
ZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4pID09IDEpOworICAgIHN0YXRpY19hc3NlcnQoYWxpZ25v
ZihTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpID09IDEpOworICAgIFBhY2tlZFJlZlB0cjxVbmlx
dWVkU3RyaW5nSW1wbD4gbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lOworI2Vsc2UKKyAgICBUeXBl
SW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzIG1fb3V0T2ZMaW5lVHlwZUZsYWdzIHsgMCB9OworICAg
IHVpbnQ4X3QgbV9pbmxpbmVDYXBhY2l0eSB7IDAgfTsKKyAgICB1aW50MzJfdCBtX3Byb3BlcnR5
SGFzaCB7IDAgfTsKKyAgICB1aW50MTZfdCBtX3RyYW5zaXRpb25PZmZzZXQgeyAwIH07CisgICAg
dWludDE2X3QgbV9tYXhPZmZzZXQgeyAwIH07CisgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFi
bGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKKyAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJ
bmZvIHsgbnVsbHB0ciB9OwogICAgIG11dGFibGUgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWlu
PiBtX2NhY2hlZFByb3RvdHlwZUNoYWluOwotCiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9w
cmV2aW91c09yUmFyZURhdGE7Ci0KKyAgICB1aW50cHRyX3QgbV9zZWVuUHJvcGVydGllcyB7IDAg
fTsKICAgICBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+IG1fdHJhbnNpdGlvblByb3BlcnR5TmFt
ZTsKLQotICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87Ci0KKyNlbmRpZgorICAgIC8v
IEFjY2Vzc2luZyBtX3RyYW5zaXRpb25UYWJsZSBpcyBvbmx5IGFsbG93ZWQgZnJvbSB0aGUgbWFp
biB0aHJlYWQuCiAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIG1fdHJhbnNpdGlvblRhYmxl
OwogCi0gICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlUYWJs
ZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KLSAg
ICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0YWJs
ZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KLSAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4g
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlOworICAgIHVpbnQzMl90IG1fYml0RmllbGQgeyAwIH07CisK
KyAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OworICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3Byb3RvdHlwZTsKIAogICAgIG11dGFibGUgSW5saW5lV2F0
Y2hwb2ludFNldCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0OwogCiAgICAgQ09NUElMRV9BU1NF
UlQoZmlyc3RPdXRPZkxpbmVPZmZzZXQgPCAyNTYsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0X2ZpdHMp
OwogCi0gICAgdWludDE2X3QgbV90cmFuc2l0aW9uT2Zmc2V0OwotICAgIHVpbnQxNl90IG1fbWF4
T2Zmc2V0OwotCi0gICAgdWludDMyX3QgbV9wcm9wZXJ0eUhhc2g7Ci0gICAgVGlueUJsb29tRmls
dGVyIG1fc2VlblByb3BlcnRpZXM7Ci0KICAgICBmcmllbmQgY2xhc3MgVk1JbnNwZWN0b3I7CiAg
ICAgZnJpZW5kIGNsYXNzIEpTRG9sbGFyVk1IZWxwZXI7CiB9OworI2lmIENQVShBRERSRVNTNjQp
CitzdGF0aWNfYXNzZXJ0KHNpemVvZihTdHJ1Y3R1cmUpIDw9IDk2LCAiRG8gbm90IGluY3JlYXNl
IHNpemVvZihTdHJ1Y3R1cmUpLCBpdCBpbW1lZGlhdGVseSBjYXVzZXMgbWVtb3J5IHJlZ3Jlc3Np
b24iKTsKKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAppbmRleCAwY2Q5OGQ1MmFjYzdmNzE0
YzA1YjE1M2UwODEzOWU0OTFjZDhjZjhjLi4zZTgwOWZhYTVlMGZlNzkxY2FhNmE2MzMxZDIyODVm
ZjJlYjA5ODEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCkBAIC0xNDQsNyArMTQ0LDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHUK
ICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVy
ZSh2bSktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAKLSAgICBpZiAobV9zZWVuUHJvcGVydGll
cy5ydWxlT3V0KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHByb3BlcnR5TmFtZS51aWQoKSkpKQor
ICAgIGlmIChydWxlT3V0VW5zZWVuUHJvcGVydHlIYXNoKHByb3BlcnR5TmFtZS51aWQoKSkpCiAg
ICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCiAgICAgUHJvcGVydHlUYWJsZSogcHJvcGVy
dHlUYWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKQEAgLTE1OSwyOSAr
MTU5LDU4IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0m
IHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1CiAgICAgcmV0dXJuIGVudHJ5LT5vZmZz
ZXQ7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6cnVsZU91dFVuc2VlblByb3BlcnR5SGFz
aChVbmlxdWVkU3RyaW5nSW1wbCogdWlkKSBjb25zdAoreworICAgIEFTU0VSVCh1aWQpOworICAg
IHVpbnRwdHJfdCBwb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odWlkKTsKKyAgICBp
ZiAoKHNlZW5Qcm9wZXJ0aWVzKCkgJiBwb2ludGVyKSAhPSBwb2ludGVyKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSB1aW50cHRyX3QgU3RydWN0
dXJlOjpzZWVuUHJvcGVydGllcygpIGNvbnN0Cit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVy
dGllcy5wb2ludGVyKCkpOworI2Vsc2UKKyAgICByZXR1cm4gbV9zZWVuUHJvcGVydGllczsKKyNl
bmRpZgorfQorCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5SGFzaEFuZFNlZW5Q
cm9wZXJ0eSh1bnNpZ25lZCBoYXNoLCBVbmlxdWVkU3RyaW5nSW1wbCogcG9pbnRlcikKK3sKKyNp
ZiBDUFUoQUREUkVTUzY0KQorICAgIG1fcHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRpZXMuc2V0
VHlwZShtX3Byb3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0aWVzLnR5cGUoKSBeIGhhc2gpOworICAg
IG1fcHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRpZXMuc2V0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8
VW5pcXVlZFN0cmluZ0ltcGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3Byb3BlcnR5SGFz
aEFuZFNlZW5Qcm9wZXJ0aWVzLnBvaW50ZXIoKSkgfCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihw
b2ludGVyKSkpOworI2Vsc2UKKyAgICBtX3Byb3BlcnR5SGFzaCA9IG1fcHJvcGVydHlIYXNoIF4g
aGFzaDsKKyAgICBtX3NlZW5Qcm9wZXJ0aWVzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9p
bnRlcikgfCBtX3NlZW5Qcm9wZXJ0aWVzOworI2VuZGlmCit9CisKIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CiB2b2lkIFN0cnVjdHVyZTo6Zm9yRWFjaFByb3BlcnR5Q29uY3VycmVudGx5KGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7Ci0gICAgVmVjdG9yPFN0cnVjdHVyZSosIDg+IHN0cnVj
dHVyZXM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJ1Y3R1cmUqLCBVbmlxdWVkU3RyaW5nSW1w
bCo+LCA4PiBzdHJ1Y3R1cmVBbmRUcmFuc2l0aW9uUHJvcGVydHlOYW1lczsKICAgICBTdHJ1Y3R1
cmUqIHRhYmxlU3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIAotICAg
IGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHRhYmxl
U3RydWN0dXJlLCB0YWJsZSk7CisgICAgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6
YXRpb24oc3RydWN0dXJlQW5kVHJhbnNpdGlvblByb3BlcnR5TmFtZXMsIHRhYmxlU3RydWN0dXJl
LCB0YWJsZSk7CiAKICAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gc2VlblByb3BlcnRp
ZXM7CiAKLSAgICBmb3IgKGF1dG8qIHN0cnVjdHVyZSA6IHN0cnVjdHVyZXMpIHsKLSAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSB8fCBzZWVuUHJvcGVydGll
cy5jb250YWlucyhzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSkpCisg
ICAgZm9yIChhdXRvIFtzdHJ1Y3R1cmUsIHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWVdIDogc3RydWN0
dXJlQW5kVHJhbnNpdGlvblByb3BlcnR5TmFtZXMpIHsKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9u
UHJvcGVydHlOYW1lIHx8IHNlZW5Qcm9wZXJ0aWVzLmNvbnRhaW5zKHRyYW5zaXRpb25Qcm9wZXJ0
eU5hbWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc2VlblByb3BlcnRpZXMu
YWRkKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAg
c2VlblByb3BlcnRpZXMuYWRkKHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVj
dHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkg
eworICAgICAgICBpZiAoIWZ1bmN0b3IoUHJvcGVydHlNYXBFbnRyeSh0cmFuc2l0aW9uUHJvcGVy
dHlOYW1lLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0
aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkgewogICAgICAgICAgICAgaWYgKHRhYmxlKQotICAg
ICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgICAg
ICAgICAgdGFibGVTdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTIsMTEgKzIyMSwxMSBAQCB2b2lkIFN0cnVj
dHVyZTo6Zm9yRWFjaFByb3BlcnR5Q29uY3VycmVudGx5KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlmICghZnVuY3Rvcihl
bnRyeSkpIHsKLSAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygp
OworICAgICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAgICAgICB0YWJsZVN0cnVjdHVy
ZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICB9CiB9CiAKQEAgLTMwMiwxNSArMzMxLDM3IEBA
IGlubGluZSBKU1ZhbHVlIFN0cnVjdHVyZTo6cHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsCiAgICAgcmV0dXJuIHByb3RvdHlwZUZvckxvb2t1cFBy
aW1pdGl2ZUltcGwoZ2xvYmFsT2JqZWN0LCB0aGlzKTsKIH0KIAoraW5saW5lIFN0cnVjdHVyZUNo
YWluKiBTdHJ1Y3R1cmU6OmNhY2hlZFByb3RvdHlwZUNoYWluKCkgY29uc3QKK3sKKyNpZiBDUFUo
QUREUkVTUzY0KQorICAgIHJldHVybiBtX21heE9mZnNldEFuZENhY2hlZFByb3RvdHlwZUNoYWlu
LnBvaW50ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0
KCk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRDYWNoZWRQcm90b3R5
cGVDaGFpbihWTSYgdm0sIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKK3sKKyAgICBBU1NFUlQoIWlz
T2JqZWN0KCkpOworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6
Om1heUJlR0NUaHJlYWQoKSk7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX21heE9mZnNldEFu
ZENhY2hlZFByb3RvdHlwZUNoYWluLnNldFBvaW50ZXIoY2hhaW4pOworICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKHRoaXMsIGNoYWluKTsKKyNlbHNlCisgICAgbV9jYWNoZWRQcm90b3R5cGVDaGFp
bi5zZXQodm0sIHRoaXMsIGNoYWluKTsKKyNlbmRpZgorfQorCiBpbmxpbmUgU3RydWN0dXJlQ2hh
aW4qIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSkgY29uc3QKIHsKKyAgICBBU1NFUlQodGhpcy0+aXNP
YmplY3QoKSk7CiAgICAgQVNTRVJUKGJhc2UtPnN0cnVjdHVyZSh2bSkgPT0gdGhpcyk7CiAgICAg
Ly8gV2UgY2FjaGUgb3VyIHByb3RvdHlwZSBjaGFpbiBzbyBvdXIgY2xpZW50cyBjYW4gc2hhcmUg
aXQuCi0gICAgaWYgKCFpc1ZhbGlkKGdsb2JhbE9iamVjdCwgbV9jYWNoZWRQcm90b3R5cGVDaGFp
bi5nZXQoKSwgYmFzZSkpIHsKKyAgICBpZiAoIWlzVmFsaWQoZ2xvYmFsT2JqZWN0LCBjYWNoZWRQ
cm90b3R5cGVDaGFpbigpLCBiYXNlKSkgewogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHBy
b3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QsIGJhc2UpOwotICAgICAgICBtX2NhY2hlZFBy
b3RvdHlwZUNoYWluLnNldCh2bSwgdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZSh2bSwgcHJv
dG90eXBlLmlzTnVsbCgpID8gbnVsbHB0ciA6IGFzT2JqZWN0KHByb3RvdHlwZSkpKTsKKyAgICAg
ICAgY29uc3RfY2FzdDxTdHJ1Y3R1cmUqPih0aGlzKS0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4o
dm0sIFN0cnVjdHVyZUNoYWluOjpjcmVhdGUodm0sIHByb3RvdHlwZS5pc051bGwoKSA/IG51bGxw
dHIgOiBhc09iamVjdChwcm90b3R5cGUpKSk7CiAgICAgfQotICAgIHJldHVybiBtX2NhY2hlZFBy
b3RvdHlwZUNoYWluLmdldCgpOworICAgIHJldHVybiBjYWNoZWRQcm90b3R5cGVDaGFpbigpOwog
fQogCiBpbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UpIGNvbnN0CkBAIC0zNTAs
NyArNDAxLDcgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQogCiBpbmxpbmUgV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjpw
cm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7
Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRK
U0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCkpOwogICAgIGlmICghaGFzUmFyZURhdGEoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CkBAIC0z
NzEsMTYgKzQyMiwxNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNl
dENvbnNpc3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAKICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBwcm9wZXJ0eVRhYmxlLT5wcm9w
ZXJ0eVN0b3JhZ2VTaXplKCk7Ci0gICAgdW5zaWduZWQgaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdU
b1RvdGFsU2l6ZSA9IHRvdGFsU2l6ZSA8IG1faW5saW5lQ2FwYWNpdHkgPyAwIDogdG90YWxTaXpl
IC0gbV9pbmxpbmVDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBpbmxpbmVPdmVyZmxvd0FjY29yZGlu
Z1RvVG90YWxTaXplID0gdG90YWxTaXplIDwgaW5saW5lQ2FwYWNpdHkoKSA/IDAgOiB0b3RhbFNp
emUgLSBpbmxpbmVDYXBhY2l0eSgpOwogCiAgICAgYXV0byBmYWlsID0gWyZdIChjb25zdCBjaGFy
KiBkZXNjcmlwdGlvbikgewogICAgICAgICBkYXRhTG9nKCJEZXRlY3RlZCBvZmZzZXQgaW5jb25z
aXN0ZW5jeTogIiwgZGVzY3JpcHRpb24sICIhXG4iKTsKICAgICAgICAgZGF0YUxvZygidGhpcyA9
ICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCJ0cmFuc2l0aW9u
T2Zmc2V0ID0gIiwgdHJhbnNpdGlvbk9mZnNldCgpLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygi
bWF4T2Zmc2V0ID0gIiwgbWF4T2Zmc2V0KCksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCJtX2lu
bGluZUNhcGFjaXR5ID0gIiwgbV9pbmxpbmVDYXBhY2l0eSwgIlxuIik7CisgICAgICAgIGRhdGFM
b2coIm1faW5saW5lQ2FwYWNpdHkgPSAiLCBpbmxpbmVDYXBhY2l0eSgpLCAiXG4iKTsKICAgICAg
ICAgZGF0YUxvZygicHJvcGVydHlUYWJsZSA9ICIsIFJhd1BvaW50ZXIocHJvcGVydHlUYWJsZSks
ICJcbiIpOwotICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0ID0gIiwg
bnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSks
ICJcbiIpOworICAgICAgICBkYXRhTG9nKCJudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0ID0gIiwg
bnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgaW5saW5lQ2FwYWNpdHkoKSks
ICJcbiIpOwogICAgICAgICBkYXRhTG9nKCJ0b3RhbFNpemUgPSAiLCB0b3RhbFNpemUsICJcbiIp
OwogICAgICAgICBkYXRhTG9nKCJpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90YWxTaXplID0g
IiwgaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSwgIlxuIik7CiAgICAgICAgIGRh
dGFMb2coIm51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhPZmZzZXQgPSAiLCBudW1iZXJPZk91
dE9mTGluZVNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpKSwgIlxuIik7CkBAIC0zODgsNyAr
NDM5LDcgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0
ZW5jeShQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmwKICAgICAgICAgVU5SRUFDSEFCTEVfRk9S
X1BMQVRGT1JNKCk7CiAgICAgfTsKICAgICAKLSAgICBpZiAobnVtYmVyT2ZTbG90c0Zvck1heE9m
ZnNldChtYXhPZmZzZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSkgIT0gdG90YWxTaXplKQorICAgIGlm
IChudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBpbmxpbmVDYXBhY2l0eSgp
KSAhPSB0b3RhbFNpemUpCiAgICAgICAgIGZhaWwoIm51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQg
ZG9lc24ndCBtYXRjaCB0b3RhbFNpemUiKTsKICAgICBpZiAoaW5saW5lT3ZlcmZsb3dBY2NvcmRp
bmdUb1RvdGFsU2l6ZSAhPSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTWF4T2Zmc2V0KG1heE9m
ZnNldCgpKSkKICAgICAgICAgZmFpbCgiaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6
ZSBkb2Vzbid0IG1hdGNoIG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhPZmZzZXQiKTsKQEAg
LTM5OCw3ICs0NDksNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNl
dENvbnNpc3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibAogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3QKIHsKLSAgICBQ
cm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAg
IFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxs
KCk7CiAKICAgICBpZiAoIXByb3BlcnR5VGFibGUpIHsKICAgICAgICAgQVNTRVJUKCFpc1Bpbm5l
ZFByb3BlcnR5VGFibGUoKSk7CkBAIC00MzksNyArNDkwLDcgQEAgaW5saW5lIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQKIHsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUo
dm0pOwogCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhl
YXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCks
IHZtLmhlYXApOwogCiAgICAgc3dpdGNoIChzaG91bGRQaW4pIHsKICAgICBjYXNlIFNob3VsZFBp
bjo6WWVzOgpAQCAtNDYwLDEwICs1MTEsOSBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZAogCiAg
ICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBu
ZXdPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKKyAgICBQcm9w
ZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChpbmxpbmVDYXBhY2l0eSgp
KTsKIAotICAgIG1fcHJvcGVydHlIYXNoID0gbV9wcm9wZXJ0eUhhc2ggXiByZXAtPmV4aXN0aW5n
U3ltYm9sQXdhcmVIYXNoKCk7Ci0gICAgbV9zZWVuUHJvcGVydGllcy5hZGQoYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4ocmVwKSk7CisgICAgYWRkUHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnR5KHJl
cC0+ZXhpc3RpbmdTeW1ib2xBd2FyZUhhc2goKSwgcmVwKTsKIAogICAgIGF1dG8gcmVzdWx0ID0g
dGFibGUtPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSk7
CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5zZWNvbmQpOwpAQCAtNDgyLDcgKzUz
Miw3IEBAIHRlbXBsYXRlPFN0cnVjdHVyZTo6U2hvdWxkUGluIHNob3VsZFBpbiwgdHlwZW5hbWUg
RnVuYz4KIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgUHJvcGVy
dHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsKLSAgICBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CisgICAgR0NTYWZlQ29uY3Vy
cmVudEpTQ2VsbExvY2tlciBsb2NrZXIoY2VsbExvY2soKSwgdm0uaGVhcCk7CiAKICAgICBzd2l0
Y2ggKHNob3VsZFBpbikgewogICAgIGNhc2UgU2hvdWxkUGluOjpZZXM6CkBAIC01MzIsNyArNTgy
LDcgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnQKIHsKICAgICBBU1NFUlQoaXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKLSAg
ICBBU1NFUlQocHJvcGVydHlUYWJsZU9yTnVsbCgpKTsKKyAgICBBU1NFUlQocHJvcGVydHlUYWJs
ZVVuc2FmZU9yTnVsbCgpKTsKICAgICAKICAgICByZXR1cm4gcmVtb3ZlPFNob3VsZFBpbjo6WWVz
Pih2bSwgcHJvcGVydHlOYW1lLCBmdW5jKTsKIH0KQEAgLTU1MCwxNSArNjAwLDc3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldEdsb2JhbE9iamVjdChWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldFBy
b3BlcnR5VGFibGUoVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKKyNpZiBDUFUoQURE
UkVTUzY0KQorICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5z
ZXRQb2ludGVyKHRhYmxlKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCB0YWJsZSk7
CisjZWxzZQogICAgIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5zZXRNYXlCZU51bGwodm0sIHRoaXMs
IHRhYmxlKTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpjbGVh
clByb3BlcnR5VGFibGUoKQoreworI2lmIENQVShBRERSRVNTNjQpCisgICAgbV9vdXRPZkxpbmVU
eXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxlVW5zYWZlLnNldFBvaW50ZXIobnVsbHB0cik7CisjZWxz
ZQorICAgIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOworI2VuZGlmCit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldE91dE9mTGluZVR5cGVGbGFncyhUeXBlSW5mbzo6
T3V0T2ZMaW5lVHlwZUZsYWdzIG91dE9mTGluZVR5cGVGbGFncykKK3sKKyNpZiBDUFUoQUREUkVT
UzY0KQorICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5zZXRU
eXBlKG91dE9mTGluZVR5cGVGbGFncyk7CisjZWxzZQorICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdz
ID0gb3V0T2ZMaW5lVHlwZUZsYWdzOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBT
dHJ1Y3R1cmU6OnNldElubGluZUNhcGFjaXR5KHVpbnQ4X3QgaW5saW5lQ2FwYWNpdHkpCit7Cisj
aWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVE
YXRhLnNldFR5cGUoaW5saW5lQ2FwYWNpdHkpOworI2Vsc2UKKyAgICBtX2lubGluZUNhcGFjaXR5
ID0gaW5saW5lQ2FwYWNpdHk7CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFN0cnVj
dHVyZTo6c2V0Q2xhc3NJbmZvKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQoreworI2lmIENQ
VShBRERSRVNTNjQpCisgICAgbV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvLnNldFBvaW50
ZXIoY2xhc3NJbmZvKTsKKyNlbHNlCisgICAgbV9jbGFzc0luZm8gPSBjbGFzc0luZm87CisjZW5k
aWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6c2V0UHJldmlvdXNJRChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogeworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRo
cmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CiAgICAgaWYgKGhhc1JhcmVEYXRh
KCkpCiAgICAgICAgIHJhcmVEYXRhKCktPnNldFByZXZpb3VzSUQodm0sIHN0cnVjdHVyZSk7Ci0g
ICAgZWxzZQorICAgIGVsc2UgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIG1faW5saW5l
Q2FwYWNpdHlBbmRQcmV2aW91c09yUmFyZURhdGEuc2V0UG9pbnRlcihzdHJ1Y3R1cmUpOworICAg
ICAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOworI2Vsc2UKICAgICAg
ICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOworI2VuZGlm
CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNsZWFyUHJldmlvdXNJRCgpCit7
CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVHQ1Ro
cmVhZCgpKTsKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmFyZURhdGEoKS0+Y2xl
YXJQcmV2aW91c0lEKCk7CisgICAgZWxzZSB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAg
bV9pbmxpbmVDYXBhY2l0eUFuZFByZXZpb3VzT3JSYXJlRGF0YS5zZXRQb2ludGVyKG51bGxwdHIp
OworI2Vsc2UKKyAgICAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuY2xlYXIoKTsKKyNlbmRpZgor
ICAgIH0KIH0KIAogQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6c2hvdWxkQ29udmVydFRv
UG9seVByb3RvKGNvbnN0IFN0cnVjdHVyZSogYSwgY29uc3QgU3RydWN0dXJlKiBiKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUuaAppbmRleCBmNDg5MjhjZjNiMjk1NjZlMjI3MGQ4NmY2MDIzNDM4NWVhYmI4NTg5Li42
Y2NiN2FiNmZmNDY3OTZlODMyYWY0NmJhZGJlNDBjMzEyYjVkYTk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aApAQCAtMzksOCArMzksOCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEZpcnN0SW50ZXJu
YWxBdHRyaWJ1dGUgPSAxIDw8IDY7IC8vIFVzZSBmb3IgdHJhbnNpdGlvbgogCiAvLyBTdXBwb3J0
IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQg
dG8gcHJvcGVydGllcy4KIC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBw
b3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCi1lbnVtIGNsYXNzIE5vblByb3BlcnR5VHJh
bnNpdGlvbiA6IHVuc2lnbmVkIHsKLSAgICBBbGxvY2F0ZVVuZGVjaWRlZCwKK2VudW0gY2xhc3Mg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uIDogdWludDhfdCB7CisgICAgQWxsb2NhdGVVbmRlY2lkZWQg
PSAwLAogICAgIEFsbG9jYXRlSW50MzIsCiAgICAgQWxsb2NhdGVEb3VibGUsCiAgICAgQWxsb2Nh
dGVDb250aWd1b3VzLApAQCAtNTAsMTQgKzUwLDE2IEBAIGVudW0gY2xhc3MgTm9uUHJvcGVydHlU
cmFuc2l0aW9uIDogdW5zaWduZWQgewogICAgIEFkZEluZGV4ZWRBY2Nlc3NvcnMsCiAgICAgUHJl
dmVudEV4dGVuc2lvbnMsCiAgICAgU2VhbCwKLSAgICBGcmVlemUKKyAgICBGcmVlemUsCisgICAg
TGFzdE9mTm9uUHJvcGVydHlUcmFuc2l0aW9uID0gRnJlZXplLAogfTsKLXVzaW5nIFRyYW5zaXRp
b25Qcm9wZXJ0eUF0dHJpYnV0ZXMgPSB1aW50MTZfdDsKK3VzaW5nIFRyYW5zaXRpb25Qcm9wZXJ0
eUF0dHJpYnV0ZXMgPSB1aW50OF90OwogCi1pbmxpbmUgdW5zaWduZWQgdG9BdHRyaWJ1dGVzKE5v
blByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoraW5saW5lIGNvbnN0ZXhwciB1aW50OF90
IHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKIHsKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyYW5zaXRpb24pICsgRmlyc3RJbnRlcm5hbEF0
dHJpYnV0ZTsKIH0KK3N0YXRpY19hc3NlcnQodG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5VHJhbnNp
dGlvbjo6TGFzdE9mTm9uUHJvcGVydHlUcmFuc2l0aW9uKSA8PSBVSU5UOF9NQVgpOwogCiBpbmxp
bmUgYm9vbCBjaGFuZ2VzSW5kZXhpbmdUeXBlKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0
aW9uKQogewpAQCAtMjMxLDcgKzIzMyw3IEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZSB7CiAKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUoKQotICAgICAgICA6
IG1fZGF0YShVc2luZ1NpbmdsZVNsb3RGbGFnKQorICAgICAgICA6IG1fZGF0YShiaXR3aXNlX2Nh
c3Q8dWludDhfdCo+KFVzaW5nU2luZ2xlU2xvdEZsYWcpKQogICAgIHsKICAgICB9CiAKQEAgLTI1
NywxOSArMjU5LDE5IEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAKICAgICBi
b29sIGlzVXNpbmdTaW5nbGVTbG90KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2Rh
dGEgJiBVc2luZ1NpbmdsZVNsb3RGbGFnOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4obV9kYXRhLmdldCgpKSAmIFVzaW5nU2luZ2xlU2xvdEZsYWc7CiAgICAgfQogCiAg
ICAgVHJhbnNpdGlvbk1hcCogbWFwKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNV
c2luZ1NpbmdsZVNsb3QoKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VHJhbnNpdGlv
bk1hcCo+KG1fZGF0YSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VHJhbnNpdGlvbk1h
cCo+KG1fZGF0YS5nZXQoKSk7CiAgICAgfQogCiAgICAgV2Vha0ltcGwqIHdlYWtJbXBsKCkgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKLSAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxXZWFrSW1wbCo+KG1fZGF0YSAmIH5Vc2luZ1NpbmdsZVNsb3RG
bGFnKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXZWFrSW1wbCo+KGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG1fZGF0YS5nZXQoKSkgJiB+VXNpbmdTaW5nbGVTbG90RmxhZyk7CiAgICAg
fQogCiAgICAgdm9pZCBzZXRNYXAoVHJhbnNpdGlvbk1hcCogbWFwKQpAQCAtMjgwLDcgKzI4Miw3
IEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgICAgICAgICBXZWFrU2V0
OjpkZWFsbG9jYXRlKGltcGwpOwogCiAgICAgICAgIC8vIFRoaXMgaW1wbGljaXRseSBjbGVhcnMg
dGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2UncmUgdXNpbmcgYSBzaW5nbGUgdHJhbnNpdGlvbgot
ICAgICAgICBtX2RhdGEgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KG1hcCk7CisgICAgICAgIG1f
ZGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4obWFwKTsKIAogICAgICAgICBBU1NFUlQoIWlz
VXNpbmdTaW5nbGVTbG90KCkpOwogICAgIH0KQEAgLTI4OCw3ICsyOTAsMTEgQEAgY2xhc3MgU3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKICAgICBTdHJ1Y3R1cmUqIHNpbmdsZVRyYW5zaXRpb24o
KSBjb25zdDsKICAgICB2b2lkIHNldFNpbmdsZVRyYW5zaXRpb24oU3RydWN0dXJlKik7CiAKLSAg
ICBpbnRwdHJfdCBtX2RhdGE7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBQYWNrZWRQdHI8dWlu
dDhfdD4gbV9kYXRhOworI2Vsc2UKKyAgICBOYWtlZFB0cjx1aW50OF90PiBtX2RhdGE7CisjZW5k
aWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0pTRG9sbGFyVk0uY3BwCmluZGV4IDlhN2Y0OWExNDA1M2EwODI3ZGJhZTM1MmQyOGY1MDM2MDdm
ZjZjZDcuLmEyMGY2MDZmN2I4MWI5NDJiODg5ZDM1YTU1M2FjZWQ3ODJhOGI4M2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTI4MTgsOCArMjgxOCw4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rp
b25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUo
c3RydWN0dXJlLT5tYXhPZmZzZXQoKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUpCi0gICAgICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc1N0cmluZyh2bSwg
U3RyaW5nKCpzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSkpKTsKKyAgICAgICAg
aWYgKGF1dG8qIHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Q
cm9wZXJ0eU5hbWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpz
U3RyaW5nKHZtLCBTdHJpbmcoKnRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggMTZl
Y2RhYTYxZTg2ZWM4OGRlMDQ0OGUyOWY2NjU4NjA2NmVjODRhMS4uMmJmZjcwNDBhYWE1NTZhZDA0
ZWMzZWRkYjI5NGFkMzkyZjNlOWVhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTI3NSw3ICsyNzUsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6
anNDYWxsRW50cnlwb2ludFNsb3coKQogCiAgICAgICAgICAgICBzdGFja0xpbWl0R1BSSXNDbG9i
YmVyZWQgPSB0cnVlOwogICAgICAgICAgICAgaml0LmVtaXRMb2FkU3RydWN0dXJlKHZtLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSLCBzdGFja0xpbWl0R1BSKTsKLSAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5m
b09mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuZW1pdExvYWRDbGFzc0lu
Zm9Gcm9tU3RydWN0dXJlKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8V2ViQXNzZW1ibHlGdW5jdGlvbj46OnZhbHVlLCAi
V2UgZG8gbm90IGNoZWNrIGZvciBzdWJ0eXBlcyBiZWxvdyIpOwogICAgICAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2ZpbmFsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPjo6dmFsdWUs
ICJXZSBkbyBub3QgY2hlY2sgZm9yIHN1YnR5cGVzIGJlbG93Iik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9Db21wYWN0
UG9pbnRlclR1cGxlLmgKaW5kZXggYjhmMjAxZWEwOTY1ODliOTJmZjUwNmM2NGYwOTliOGQ5NWNi
YmUyZi4uMDBmMTlhMjBiOTNkY2I1MWJhNzVmYWIxMGRkMmQ0NmJhMDYwMDBmNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0NvbXBhY3RQb2ludGVyVHVwbGUuaApAQCAtMzEsNTggKzMxLDcwIEBACiAKIG5hbWVzcGFj
ZSBXVEYgewogCi0vLyBUaGUgZ29hbCBvZiB0aGlzIGNsYXNzIGlzIGZvbGRpbmcgYSBwb2ludGVy
IGFuZCAxIGJ5dGUgdmFsdWUgaW50byA4IGJ5dGVzIGluIGJvdGggMzJiaXQgYW5kIDY0Yml0IGFy
Y2hpdGVjdHVyZXMuCisvLyBUaGUgZ29hbCBvZiB0aGlzIGNsYXNzIGlzIGZvbGRpbmcgYSBwb2lu
dGVyIGFuZCAyIGJ5dGVzIHZhbHVlIGludG8gOCBieXRlcyBpbiBib3RoIDMyYml0IGFuZCA2NGJp
dCBhcmNoaXRlY3R1cmVzLgogLy8gMzJiaXQgYXJjaGl0ZWN0dXJlIGp1c3QgaGFzIGEgcGFpciBv
ZiBieXRlIGFuZCBwb2ludGVyLCB3aGljaCBzaG91bGQgYmUgOCBieXRlcy4KLS8vIEluIDY0Yml0
LCB3ZSB1c2UgdGhlIHVwcGVyIDUgYml0cyBhbmQgbG93ZXIgMyBiaXRzICh6ZXJvIGR1ZSB0byBh
bGlnbm1lbnQpIHNpbmNlIHRoZXNlIGJpdHMgYXJlIHNhZmUgdG8gdXNlIGV2ZW4KLS8vIHdpdGgg
NS1sZXZlbCBwYWdlIHRhYmxlcyB3aGVyZSB0aGUgZWZmZWN0aXZlIHBvaW50ZXIgd2lkdGggaXMg
NTdiaXRzLgorLy8gV2UgYXJlIGFzc3VtaW5nIDQ4Yml0IHBvaW50ZXJzIGhlcmUsIHdoaWNoIGlz
IGFsc28gYXNzdW1lZCBpbiBKU1ZhbHVlIGFueXdheS4KIHRlbXBsYXRlPHR5cGVuYW1lIFBvaW50
ZXJUeXBlLCB0eXBlbmFtZSBUeXBlPgogY2xhc3MgQ29tcGFjdFBvaW50ZXJUdXBsZSBmaW5hbCB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoVHlwZSkgPT0gMSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFR5cGUp
IDw9IDIsICIiKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfcG9pbnRlcjxQb2ludGVyVHlw
ZT46OnZhbHVlLCAiIik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPFR5cGU+
Ojp2YWx1ZSB8fCBzdGQ6OmlzX2VudW08VHlwZT46OnZhbHVlLCAiIik7CisgICAgdXNpbmcgVW5z
aWduZWRUeXBlID0gc3RkOjptYWtlX3Vuc2lnbmVkX3Q8c3RkOjpjb25kaXRpb25hbF90PHN0ZDo6
aXNfc2FtZV92PFR5cGUsIGJvb2w+LCB1aW50OF90LCBUeXBlPj47CisgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoVW5zaWduZWRUeXBlKSA9PSBzaXplb2YoVHlwZSkpOwogCiAgICAgQ29tcGFjdFBv
aW50ZXJUdXBsZSgpID0gZGVmYXVsdDsKIAogI2lmIENQVShBRERSRVNTNjQpCiBwdWJsaWM6Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBlbmNvZGVUeXBlKHVpbnQ4X3QgdHlwZSkKLSAg
ICB7Ci0gICAgICAgIC8vIEVuY29kZSA4Yml0IHR5cGUgVVVVREREREQgaW50byA2NGJpdCBkYXRh
IERERERELi41NmJpdC4uVVVVLgotICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVpbnQ2NF90
Pih0eXBlKSA8PCA1OSkgfCAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHR5cGUpID4+IDUpOwotICAg
IH0KLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgZGVjb2RlVHlwZSh1aW50NjRfdCB2YWx1
ZSkKKyAgICBzdGF0aWNfYXNzZXJ0KFdURl9PU19DT05TVEFOVF9FRkZFQ1RJVkVfQUREUkVTU19X
SURUSCA8PSA0OCk7CisKKyNpZiBDUFUoTElUVExFX0VORElBTikKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mVHlwZSgpCiAgICAgewotICAgICAgICAvLyBEZWNvZGUgNjRiaXQgZGF0YSBE
RERERC4uNTZiaXQuLlVVVSBpbnRvIDhiaXQgdHlwZSBVVVVERERERC4KLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCh2YWx1ZSA+PiA1OSkgfCAodmFsdWUgPDwgNSkpOworICAg
ICAgICByZXR1cm4gNDggLyA4OwogICAgIH0KKyNlbmRpZgogCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50NjRfdCB0eXBlTWFzayA9IGVuY29kZVR5cGUoVUlOVDhfTUFYKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KDB4RjgwMDAwMDAwMDAwMDAwN1VMTCA9PSB0eXBlTWFzaywgIiIpOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdWludDY0X3QgcG9pbnRlck1hc2sgPSB+dHlwZU1hc2s7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50NjRfdCBwb2ludGVyTWFzayA9ICgxVUxMIDw8IDQ4KSAtIDE7CiAKICAg
ICBDb21wYWN0UG9pbnRlclR1cGxlKFBvaW50ZXJUeXBlIHBvaW50ZXIsIFR5cGUgdHlwZSkKLSAg
ICAgICAgOiBtX2RhdGEoYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihwb2ludGVyKSB8IGVuY29kZVR5
cGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSkpKQorICAgICAgICA6IG1fZGF0YShlbmNvZGUo
cG9pbnRlciwgdHlwZSkpCiAgICAgewotICAgICAgICBBU1NFUlQoKGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4ocG9pbnRlcikgJiAwYjExMSkgPT0gMHgwKTsKKyAgICAgICAgQVNTRVJUKHRoaXMtPnR5
cGUoKSA9PSB0eXBlKTsKKyAgICAgICAgQVNTRVJUKHRoaXMtPnBvaW50ZXIoKSA9PSBwb2ludGVy
KTsKICAgICB9CiAKICAgICBQb2ludGVyVHlwZSBwb2ludGVyKCkgY29uc3QgeyByZXR1cm4gYml0
d2lzZV9jYXN0PFBvaW50ZXJUeXBlPihtX2RhdGEgJiBwb2ludGVyTWFzayk7IH0KICAgICB2b2lk
IHNldFBvaW50ZXIoUG9pbnRlclR5cGUgcG9pbnRlcikKICAgICB7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoYWxpZ25vZih0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPFBvaW50ZXJUeXBlPjo6
dHlwZSkgPj0gYWxpZ25vZih2b2lkKiksICIiKTsKLSAgICAgICAgQVNTRVJUKChiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KHBvaW50ZXIpICYgMGIxMTEpID09IDB4MCk7Ci0gICAgICAgIG1fZGF0YSA9
IENvbXBhY3RQb2ludGVyVHVwbGUocG9pbnRlciwgdHlwZSgpKS5tX2RhdGE7CisgICAgICAgIG1f
ZGF0YSA9IGVuY29kZShwb2ludGVyLCB0eXBlKCkpOwogICAgIH0KIAotICAgIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KGRlY29kZVR5cGUobV9kYXRhKSk7IH0K
KyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBkZWNvZGVUeXBlKG1fZGF0YSk7IH0KICAg
ICB2b2lkIHNldFR5cGUoVHlwZSB0eXBlKQogICAgIHsKLSAgICAgICAgbV9kYXRhID0gQ29tcGFj
dFBvaW50ZXJUdXBsZShwb2ludGVyKCksIHR5cGUpLm1fZGF0YTsKKyAgICAgICAgbV9kYXRhID0g
ZW5jb2RlKHBvaW50ZXIoKSwgdHlwZSk7CiAgICAgfQogCisgICAgdWludDY0X3QgZGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCiBwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDY0X3QgZW5jb2RlVHlwZShUeXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PFVuc2lnbmVkVHlwZT4odHlwZSkpIDw8IDQ4
OworICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIFR5cGUgZGVjb2RlVHlwZSh1aW50NjRfdCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihzdGF0aWNfY2Fz
dDxVbnNpZ25lZFR5cGU+KHZhbHVlID4+IDQ4KSk7CisgICAgfQorCisgICAgc3RhdGljIHVpbnQ2
NF90IGVuY29kZShQb2ludGVyVHlwZSBwb2ludGVyLCBUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihwb2ludGVyKSB8IGVuY29kZVR5cGUodHlw
ZSk7CisgICAgfQorCiAgICAgdWludDY0X3QgbV9kYXRhIHsgMCB9OwogI2Vsc2UKIHB1YmxpYzoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggNmJiYmVmZTcwZmMxYzEzMDJmNDk1ZWMzZjZl
MmE0NDEwMjVlNmQ2YS4uMDA0MzU2MzQxZjc0NzE5NjQ2ZjE1ODE0NTM2Zjc1MDdkNDEyZjM0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTE4OSw4ICsxODksOCBAQCBjbGFzcyBTdHJp
bmdJbXBsIDogcHJpdmF0ZSBTdHJpbmdJbXBsU2hhcGUgewogCiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBNYXhMZW5ndGggPSBTdHJpbmdJbXBsU2hhcGU6Ok1heExlbmd0aDsKIAotICAg
IC8vIFRoZSBib3R0b20gNiBiaXRzIGluIHRoZSBoYXNoIGFyZSBmbGFncy4KLSAgICBzdGF0aWMg
Y29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ0NvdW50ID0gNjsKKyAgICAvLyBUaGUgYm90
dG9tIDYgYml0cyBpbiB0aGUgaGFzaCBhcmUgZmxhZ3MsIGJ1dCByZXNlcnZlIDggYml0cyBzaW5j
ZSBTdHJpbmdIYXNoIG9ubHkgaGFzIDI0IGJpdHMgYW55d2F5LgorICAgIHN0YXRpYyBjb25zdGV4
cHIgY29uc3QgdW5zaWduZWQgc19mbGFnQ291bnQgPSA4OwogCiBwcml2YXRlOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19mbGFnTWFzayA9ICgxdSA8PCBzX2ZsYWdDb3Vu
dCkgLSAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmggYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbEltcGwuaAppbmRleCBlZDBmMTNlNTQ0ZjEwYzMxYjQx
OWJlYWFhODI1MjM3NGE4NzBhYzczLi42MzEwZGM1NzNjZjU3ZjBkNWE4Njg4NThiMjVkMDdmNjMw
NjEwMzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbEltcGwuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbEltcGwuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFz
cyBTeW1ib2xJbXBsIDogcHVibGljIFVuaXF1ZWRTdHJpbmdJbXBsIHsKICAgICBzdGF0aWMgY29u
c3RleHByIEZsYWdzIHNfZmxhZ0lzUmVnaXN0ZXJlZCA9IDBiMDEwdTsKICAgICBzdGF0aWMgY29u
c3RleHByIEZsYWdzIHNfZmxhZ0lzUHJpdmF0ZSA9IDBiMTAwdTsKIAotICAgIHVuc2lnbmVkIGhh
c2hGb3JTeW1ib2woKSBjb25zdCB7IHJldHVybiBtX2hhc2hGb3JTeW1ib2w7IH0KKyAgICB1bnNp
Z25lZCBoYXNoRm9yU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoRm9yU3ltYm9sU2hpZnRl
ZFdpdGhGbGFnQ291bnQgPj4gc19mbGFnQ291bnQ7IH0KICAgICBib29sIGlzTnVsbFN5bWJvbCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBzX2ZsYWdJc051bGxTeW1ib2w7IH0KICAgICBib29s
IGlzUmVnaXN0ZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBzX2ZsYWdJc1JlZ2lzdGVy
ZWQ7IH0KICAgICBib29sIGlzUHJpdmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBzX2Zs
YWdJc1ByaXZhdGU7IH0KQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgU3ltYm9sSW1wbCA6IHB1Ymxp
YyBVbmlxdWVkU3RyaW5nSW1wbCB7CiAgICAgICAgIGNvbnN0ZXhwciBTdGF0aWNTeW1ib2xJbXBs
KGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIEZsYWdzIGZsYWdzID0g
c19mbGFnRGVmYXVsdCkKICAgICAgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRG
bGFnSXNTdGF0aWNTdHJpbmcsIGNoYXJhY3RlckNvdW50IC0gMSwgY2hhcmFjdGVycywKICAgICAg
ICAgICAgICAgICBzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0
IHwgU3RyaW5nU3ltYm9sIHwgQnVmZmVySW50ZXJuYWwgfCAoU3RyaW5nSGFzaGVyOjpjb21wdXRl
TGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQpLCBD
b25zdHJ1Y3RXaXRoQ29uc3RFeHByKQotICAgICAgICAgICAgLCBtX2hhc2hGb3JTeW1ib2woU3Ry
aW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycykg
PDwgc19mbGFnQ291bnQpCisgICAgICAgICAgICAsIG1faGFzaEZvclN5bWJvbFNoaWZ0ZWRXaXRo
RmxhZ0NvdW50KFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUxpdGVyYWxIYXNoQW5kTWFza1RvcDhCaXRz
KGNoYXJhY3RlcnMpIDw8IHNfZmxhZ0NvdW50KQogICAgICAgICAgICAgLCBtX2ZsYWdzKGZsYWdz
KQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgU3ltYm9sSW1w
bCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5nSW1wbCB7CiAgICAgICAgIGNvbnN0ZXhwciBTdGF0aWNT
eW1ib2xJbXBsKGNvbnN0IGNoYXIxNl90ICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRdLCBG
bGFncyBmbGFncyA9IHNfZmxhZ0RlZmF1bHQpCiAgICAgICAgICAgICA6IFN0cmluZ0ltcGxTaGFw
ZShzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nLCBjaGFyYWN0ZXJDb3VudCAtIDEsIGNoYXJh
Y3RlcnMsCiAgICAgICAgICAgICAgICAgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QgfCBTdHJpbmdT
eW1ib2wgfCBCdWZmZXJJbnRlcm5hbCB8IChTdHJpbmdIYXNoZXI6OmNvbXB1dGVMaXRlcmFsSGFz
aEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCksIENvbnN0cnVjdFdp
dGhDb25zdEV4cHIpCi0gICAgICAgICAgICAsIG1faGFzaEZvclN5bWJvbChTdHJpbmdIYXNoZXI6
OmNvbXB1dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdD
b3VudCkKKyAgICAgICAgICAgICwgbV9oYXNoRm9yU3ltYm9sU2hpZnRlZFdpdGhGbGFnQ291bnQo
U3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVy
cykgPDwgc19mbGFnQ291bnQpCiAgICAgICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCiAgICAgICAg
IHsKICAgICAgICAgfQpAQCAtODAsNyArODAsNyBAQCBjbGFzcyBTeW1ib2xJbXBsIDogcHVibGlj
IFVuaXF1ZWRTdHJpbmdJbXBsIHsKICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZ0ltcGwqIG1f
b3duZXIgeyBudWxscHRyIH07IC8vIFdlIGRvIG5vdCBtYWtlIFN0YXRpY1N5bWJvbEltcGwgQnVm
ZmVyU3Vic3RyaW5nLiBUaHVzIHdlIGNhbiBtYWtlIHRoaXMgbnVsbHB0ci4KLSAgICAgICAgdW5z
aWduZWQgbV9oYXNoRm9yU3ltYm9sOworICAgICAgICB1bnNpZ25lZCBtX2hhc2hGb3JTeW1ib2xT
aGlmdGVkV2l0aEZsYWdDb3VudDsKICAgICAgICAgRmxhZ3MgbV9mbGFnczsKICAgICB9OwogCkBA
IC05Miw3ICs5Miw3IEBAIGNsYXNzIFN5bWJvbEltcGwgOiBwdWJsaWMgVW5pcXVlZFN0cmluZ0lt
cGwgewogICAgIFN5bWJvbEltcGwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCwgUmVmPFN0cmluZ0ltcGw+JiYgYmFzZSwgRmxhZ3MgZmxhZ3MgPSBzX2ZsYWdEZWZhdWx0
KQogICAgICAgICA6IFVuaXF1ZWRTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbCwgY2hhcmFjdGVycywg
bGVuZ3RoKQogICAgICAgICAsIG1fb3duZXIoJmJhc2UubGVha1JlZigpKQotICAgICAgICAsIG1f
aGFzaEZvclN5bWJvbChuZXh0SGFzaEZvclN5bWJvbCgpKQorICAgICAgICAsIG1faGFzaEZvclN5
bWJvbFNoaWZ0ZWRXaXRoRmxhZ0NvdW50KG5leHRIYXNoRm9yU3ltYm9sKCkpCiAgICAgICAgICwg
bV9mbGFncyhmbGFncykKICAgICB7CiAgICAgICAgIEFTU0VSVChTdHJpbmdJbXBsOjp0YWlsT2Zm
c2V0PFN0cmluZ0ltcGwqPigpID09IE9CSkVDVF9PRkZTRVRPRihTeW1ib2xJbXBsLCBtX293bmVy
KSk7CkBAIC0xMDEsNyArMTAxLDcgQEAgY2xhc3MgU3ltYm9sSW1wbCA6IHB1YmxpYyBVbmlxdWVk
U3RyaW5nSW1wbCB7CiAgICAgU3ltYm9sSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoLCBSZWY8U3RyaW5nSW1wbD4mJiBiYXNlLCBGbGFncyBmbGFncyA9IHNfZmxh
Z0RlZmF1bHQpCiAgICAgICAgIDogVW5pcXVlZFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sLCBjaGFy
YWN0ZXJzLCBsZW5ndGgpCiAgICAgICAgICwgbV9vd25lcigmYmFzZS5sZWFrUmVmKCkpCi0gICAg
ICAgICwgbV9oYXNoRm9yU3ltYm9sKG5leHRIYXNoRm9yU3ltYm9sKCkpCisgICAgICAgICwgbV9o
YXNoRm9yU3ltYm9sU2hpZnRlZFdpdGhGbGFnQ291bnQobmV4dEhhc2hGb3JTeW1ib2woKSkKICAg
ICAgICAgLCBtX2ZsYWdzKGZsYWdzKQogICAgIHsKICAgICAgICAgQVNTRVJUKFN0cmluZ0ltcGw6
OnRhaWxPZmZzZXQ8U3RyaW5nSW1wbCo+KCkgPT0gT0JKRUNUX09GRlNFVE9GKFN5bWJvbEltcGws
IG1fb3duZXIpKTsKQEAgLTExMCw3ICsxMTAsNyBAQCBjbGFzcyBTeW1ib2xJbXBsIDogcHVibGlj
IFVuaXF1ZWRTdHJpbmdJbXBsIHsKICAgICBTeW1ib2xJbXBsKEZsYWdzIGZsYWdzID0gc19mbGFn
RGVmYXVsdCkKICAgICAgICAgOiBVbmlxdWVkU3RyaW5nSW1wbChDcmVhdGVTeW1ib2wpCiAgICAg
ICAgICwgbV9vd25lcihTdHJpbmdJbXBsOjplbXB0eSgpKQotICAgICAgICAsIG1faGFzaEZvclN5
bWJvbChuZXh0SGFzaEZvclN5bWJvbCgpKQorICAgICAgICAsIG1faGFzaEZvclN5bWJvbFNoaWZ0
ZWRXaXRoRmxhZ0NvdW50KG5leHRIYXNoRm9yU3ltYm9sKCkpCiAgICAgICAgICwgbV9mbGFncyhm
bGFncyB8IHNfZmxhZ0lzTnVsbFN5bWJvbCkKICAgICB7CiAgICAgICAgIEFTU0VSVChTdHJpbmdJ
bXBsOjp0YWlsT2Zmc2V0PFN0cmluZ0ltcGwqPigpID09IE9CSkVDVF9PRkZTRVRPRihTeW1ib2xJ
bXBsLCBtX293bmVyKSk7CkBAIC0xMTksNyArMTE5LDcgQEAgY2xhc3MgU3ltYm9sSW1wbCA6IHB1
YmxpYyBVbmlxdWVkU3RyaW5nSW1wbCB7CiAgICAgLy8gVGhlIHBvaW50ZXIgdG8gdGhlIG93bmVy
IHN0cmluZyBzaG91bGQgYmUgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGFmdGVyIHRoZSBTdHJpbmdJ
bXBsIGxheW91dCwKICAgICAvLyBzaW5jZSB3ZSB3b3VsZCBsaWtlIHRvIGFsaWduIHRoZSBsYXlv
dXQgb2YgU3ltYm9sSW1wbCB0byB0aGUgb25lIG9mIEJ1ZmZlclN1YnN0cmluZyBTdHJpbmdJbXBs
LgogICAgIFN0cmluZ0ltcGwqIG1fb3duZXI7Ci0gICAgdW5zaWduZWQgbV9oYXNoRm9yU3ltYm9s
OworICAgIHVuc2lnbmVkIG1faGFzaEZvclN5bWJvbFNoaWZ0ZWRXaXRoRmxhZ0NvdW50OwogICAg
IEZsYWdzIG1fZmxhZ3MgeyBzX2ZsYWdEZWZhdWx0IH07CiB9Owogc3RhdGljX2Fzc2VydChzaXpl
b2YoU3ltYm9sSW1wbCkgPT0gc2l6ZW9mKFN5bWJvbEltcGw6OlN0YXRpY1N5bWJvbEltcGwpLCAi
Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggMzdlNGRkOTg1MWQzNDFkN2YzZjkzNzdmYjE0NmUzMTJkOTFhMzY4OC4uNDU0
Yzk3MTY0ZjdhMzQ4OTJiODNjMWFjZjMyYmJkOGE1YzA4NzAwOSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
IEBACisyMDIwLTAyLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAg
ICAgICAgW0pTQ10gU2hyaW5rIFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyB0ZXN0IGlzIGhhbGYtYnJva2VuIHNpbmNlIGl0IHJl
bGllcyBvbiBIYXNoTWFwJ3Mgb3JkZXIgaW1wbGljaXRseS4KKyAgICAgICAgV2UgY2hhbmdlZCBT
eW1ib2xJbXBsJ3MgaGFzaCBjb2RlLCBzbyBpdCBtYWtlcyB0aGUgcmVzdWx0IGRpZmZlcmVudC4K
KworICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci90YWlsLWRlbGV0ZWQtZnJhbWVzL3RhaWwt
ZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1ZS1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDItMjEgIEph
c29uIExhd3JlbmNlICA8bGF3cmVuY2UuakBhcHBsZS5jb20+CiAKICAgICAgICAgWyBpT1MgXSBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9rZXktZ2VuZXJhdG9ycy9y
ZWFkaW5nLWF1dG9pbmNyZW1lbnQtaW5kZXhlcy1jdXJzb3JzLmFueS5zZXJ2aWNld29ya2VyLmh0
bWwgaXMgZmxha3kgZmFpbGluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9k
ZWJ1Z2dlci90YWlsLWRlbGV0ZWQtZnJhbWVzL3RhaWwtZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1
ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvdGFpbC1kZWxl
dGVkLWZyYW1lcy90YWlsLWRlbGV0ZWQtZnJhbWVzLXRoaXMtdmFsdWUtZXhwZWN0ZWQudHh0Cmlu
ZGV4IDIxMjVmYjUyOTcxY2VjZWFiN2MwODAzNGYyZDUzNmM3YTJhNGI0ZTguLmUzNzQ0NjQ1Mzdh
YWI3ZDRhMGFiNWUyNGY0ZmM4YTcwZmY3ZjViN2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9kZWJ1Z2dlci90YWlsLWRlbGV0ZWQtZnJhbWVzL3RhaWwtZGVsZXRlZC1mcmFtZXMt
dGhpcy12YWx1ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVn
Z2VyL3RhaWwtZGVsZXRlZC1mcmFtZXMvdGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLWV4
cGVjdGVkLnR4dApAQCAtMTQsNiArMTQsNiBAQCBDQUxMIFNUQUNLOgogMzogW0ZdIHN0YXJ0QUJD
CiAgIHRoaXM6IHVuZGVmaW5lZAogNDogW1BdIEdsb2JhbCBDb2RlCi0gIHRoaXM6IGMgLSAKKyAg
dGhpczogYSAtIAogUkVTVU1FRAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391456</attachid>
            <date>2020-02-22 00:55:03 -0800</date>
            <delta_ts>2020-02-23 02:48:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207827-20200222005502.patch</filename>
            <type>text/plain</type>
            <size>111912</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NDI3NDBmNDllZGMwZWQ3MmU3YzUzZjg3NzNiYzQ2NzUwNzM1NGYyLi4yNjdkNDg3MDI4Y2ZmMzc1
NzIwNDM2MWY3OGY0MDUwMTJlMWE0ZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzIgQEAKKzIwMjAtMDItMjIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNocmlua3Mgc2l6ZW9mKFN0
cnVjdHVyZSkgZnJvbSAxMTIgdG8gOTYgKDE2IGJ5dGVzKSBpbiA2NCBiaXQgYXJjaGl0ZWN0dXJl
cy4KKyAgICAgICAgU3RydWN0dXJlIGlzIG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IGFsbG9j
YXRlZCBKU0NlbGwgaW4gSlNDLiBTbyBpdCBpcyB3b3J0aCBkb2luZworICAgICAgICBhbGwgdGhl
IHNvcnQgb2YgYml0IGhhY2tzIHRvIG1ha2UgaXQgY29tcGFjdCBhcyBtdWNoIGFzIHBvc3NpYmxl
LgorCisgICAgICAgICAgICAxLiBTdHJpbmdIYXNoZXIgaXMgYWx3YXlzIGdlbmVyYXRpbmcgMjQg
Yml0cyBoYXNoZXMgc28gZmFyLiBCeSBsZXZlcmFnaW5nIHRoaXMgZmFjdCwKKyAgICAgICAgICAg
ICAgIHdlIHN0b3JlIGhhc2ggY29kZSBpbiBTdHJ1Y3R1cmUgaW4gMyBieXRlcyAoMjQgYml0cykg
Zm9yIHByb3BlcnR5LWhhc2ggYW5kIHNlZW4tcHJvcGVydHktaGFzaC4KKyAgICAgICAgICAgIDIu
IFVzZWQgUGFja2VkUHRyIGZvciBDKysgbm9uLWNvbmN1cnJlbnRseSBhY2Nlc3NlZCBkYXRhIHN0
cnVjdHVyZXMuCisgICAgICAgICAgICAzLiBQdXQgb3V0T2ZMaW5lVHlwZUZsYWdzLCBtYXhPZmZz
ZXQgYW5kIHRyYW5zaXRpb25PZmZzZXQgaW50byBoaWdoZXN0IGJpdHMgb2YgbV9wcm9wZXJ0eVRh
YmxlVW5zYWZlLAorICAgICAgICAgICAgICAgbV9jYWNoZWRQcm90b3R5cGVDaGFpbiwgYW5kIG1f
Y2xhc3NJbmZvLiBEbyBub3QgdXNlIFBhY2tlZFB0ciBoZXJlIHNpbmNlIHNvbWUgb2YgdGhlbSBh
cmUgY29uY3VycmVudGx5IGFjY2Vzc2VkCisgICAgICAgICAgICAgICBieSBHQy4KKyAgICAgICAg
ICAgIDQuIFB1dCBtX2lubGluZUNhcGFjaXR5IGludG8gbG93ZXIgOCBiaXRzIG9mIG1fcHJvcGVy
dHlIYXNoLgorICAgICAgICAgICAgNS4gUmVtb3ZlIG1fbG9jaywgYW5kIHVzZSBTdHJ1Y3R1cmU6
OmNlbGxMb2NrKCkgaW5zdGVhZC4KKyAgICAgICAgICAgIDYuIFJlbW92ZSBtX2NhY2hlZFByb3Rv
dHlwZUNoYWluIGNsZWFyaW5nIGZyb20gdGhlIGNvbmN1cnJlbnQgY29sbGVjdG9yIHNpbmNlIGl0
IGlzIGRlYWQgY29kZSwgaXQgd2FzIG9sZCBjb2RlLgorICAgICAgICAgICAgICAgV2UgYXJlIHNl
dHRpbmcgbV9jYWNoZWRQcm90b3R5cGVDaGFpbiBvbmx5IGlmIFN0cnVjdHVyZSBpcyBmb3IgSlNP
YmplY3QuIENsZWFyaW5nIGhhcHBlbnMgb25seSBpZiBpdCBpcyBub3QKKyAgICAgICAgICAgICAg
IGEgU3RydWN0dXJlIGZvciBKU09iamVjdC4KKyAgICAgICAgICAgIDcuIExvY2tpbmcgc3RydWN0
dXJlIHdoZW4gbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lIGlzIGNoYW5nZWQuIFRoaXMgZmllbGQg
aXMgb25seSBtb2RpZmllZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgICAgIEFu
ZCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIGZpZWxkIHJlcXVpcmVzIGxvY2tpbmcuIFRoZW4g
d2UgY2FuIHVzZSA2IGJ5dGVzIG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS4KKyAgICAgICAgICAg
IDguIFdlIGVuc3VyZSB0aGF0IG9ubHkgdGhlIG1haW4gdGhyZWFkIGlzIGFjY2Vzc2luZyBtX3Ry
YW5zaXRpb25UYWJsZS4gVGhlbiB3ZSBjYW4gdXNlIDYgYnl0ZXMgbV90cmFuc2l0aW9uVGFibGUu
CisKKyAgICAgICAgTWFueSBwYWlycyBhcmUgdXNpbmcgQ29tcGFjdFBvaW50ZXJUdXBsZSB0byBt
YWtlIGNvZGUgY2xlYW4uCisgICAgICAgIENvbWJpbmluZyBhbGwgb2YgdGhlIGFib3ZlIHRlY2hu
aXF1ZXMgYW5kIGdldHMgdXMgMTYgYnl0ZXMuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hl
Y2tTdWJDbGFzcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RLZXlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNy
ZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3Jl
YXRlUHJvbWlzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
cmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlT2JqZWN0S2V5cyk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVQcm9taXNlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZUludGVy
bmFsRmllbGRPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlQ2hlY2tTdWJDbGFzcyk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkQ2xhc3NJbmZvRnJvbVN0cnVj
dHVyZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAqIHJ1
bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2xvbmVkQXJndW1lbnRz
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uY3VycmVudEpTTG9jay5o
OgorICAgICAgICAoSlNDOjpDb25jdXJyZW50SlNMb2NrZXJCYXNlOjpDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlKToKKyAgICAgICAgKEpTQzo6R0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbDo6R0NT
YWZlQ29uY3VycmVudEpTTG9ja2VySW1wbCk6CisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlckltcGw6On5HQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsKToKKyAgICAgICAg
KEpTQzo6Q29uY3VycmVudEpTTG9ja2VySW1wbDo6Q29uY3VycmVudEpTTG9ja2VySW1wbCk6Cisg
ICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcjo6R0NTYWZlQ29uY3VycmVudEpT
TG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6R0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
Ojp+R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29u
Y3VycmVudEpTTG9ja2VyOjpDb25jdXJyZW50SlNMb2NrZXIpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyk6CisgICAgICAgICogcnVudGltZS9K
U09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0Q29uY3VycmVudGx5
IGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlOjpzaW5nbGVUcmFuc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzZXRTaW5nbGVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Z2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmR1bXBTdGF0aXN0aWNzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmVDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZE5ld1By
b3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJv
cGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5
cGVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJ
ZlBpbm5lZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
U2xvdyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cGluRm9yQ2FjaGluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWxsb2NhdGVS
YXJlRGF0YSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNl
bWVudFdhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlO
YW1lRW51bWVyYXRvciBjb25zdCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpnZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJ1bGVPdXRVbnNlZW5Qcm9wZXJ0
eUhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNlZW5Qcm9wZXJ0aWVzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eUhhc2hBbmRTZWVuUHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJl
bnRseSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FjaGVkUHJvdG90eXBlQ2hhaW4gY29u
c3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldENhY2hlZFByb3RvdHlwZUNoYWluKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbiBjb25zdCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3kgY29uc3QpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVt
b3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRQcm9wZXJ0eVRhYmxlKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpjbGVhclByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnNldE91dE9mTGluZVR5cGVGbGFncyk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6c2V0SW5saW5lQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldENs
YXNzSW5mbyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJldmlvdXNJRCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6Y2xlYXJQcmV2aW91c0lEKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjp0b0F0dHJpYnV0ZXMp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OlN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6aXNV
c2luZ1NpbmdsZVNsb3QgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGU6Om1hcCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZTo6d2Vha0ltcGwgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGU6OnNldE1hcCk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAgIChK
U0M6OkpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3RydWN0dXJlVHJhbnNpdGlvbkxpc3Qp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChK
U0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKwogMjAyMC0w
Mi0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXBw
b3J0IGZvciBieXRlY29kZSBjYWNoaW5nIG1vcmUgcm9idXN0IGFnYWluc3QgZmlsZSBjb3JydXB0
aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCBjZjEyZjI3NjUwZDQ4ZDUwMTViOGRjYzExZTU3ODI1YjM1YWRiODAyLi41YTc5
MTdmY2QzOGM3YzBhMmQ5ZDU3N2Y3OWE0ZTU2YTdhYzhjNzY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDIwLTAyLTIyICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0pTQ10gU2hyaW5rIFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA3ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBDb21wYWN0UG9pbnRlclR1cGxlIHVzYWJsZSBmb3Igc3Rv
cmluZyAxNiBiaXRzIGRhdGEuCisKKyAgICAgICAgKiB3dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5o
OgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9T
eW1ib2xJbXBsLmg6CisgICAgICAgIChXVEY6OlN5bWJvbEltcGw6Omhhc2hGb3JTeW1ib2wgY29u
c3QpOgorICAgICAgICAoV1RGOjpTeW1ib2xJbXBsOjpTeW1ib2xJbXBsKToKKwogMjAyMC0wMi0y
MSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lP
TihyMjU3MDcyKTogTW90aW9uTWFyayB8IE1hYyB8IC0xMCUKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggNjQyYjE2MzU2ZjkwZTljMzg2
MDJlYmM1N2ZkOWUwNGEwZjQ1YjUyOC4uOTRkOTJjMmFhMTNmYjc2NGY2NGEwMzQ2YWFiY2ZhNzU5
NGU5OTE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKQEAgLTk2MDUsNyArOTYwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDaGVja1N1YkNsYXNzKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzcGVjaWZpZWRHUFIg
PSBzcGVjaWZpZWQuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgYmFzZUdQUiwgb3RoZXJHUFIsIHNwZWNpZmllZEdQUik7Ci0gICAgICAgIG1faml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG90aGVyR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09m
ZnNldCgpKSwgb3RoZXJHUFIpOworICAgICAgICBtX2ppdC5lbWl0TG9hZENsYXNzSW5mb0Zyb21T
dHJ1Y3R1cmUob3RoZXJHUFIsIG90aGVyR1BSKTsKICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobm9kZS0+Y2xhc3NJbmZvKCkpLCBzcGVjaWZpZWRHUFIpOwog
CiAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CkBAIC0x
MjY5OCw3ICsxMjY5OCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0S2V5
cyhOb2RlKiBub2RlKQogCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dD
YXNlczsKICAgICAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIG9iamVjdEdQ
Uiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpwcmV2aW91c09y
UmFyZURhdGFPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6Om9mZnNldE9m
UHJldmlvdXNPclJhcmVEYXRhKCkpLCBzY3JhdGNoR1BSKTsKKyNpZiBDUFUoQUREUkVTUzY0KQor
ICAgICAgICAgICAgbV9qaXQuYW5kUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihTdHJ1
Y3R1cmU6OnByZXZpb3VzT3JSYXJlRGF0YU1hc2spLCBzY3JhdGNoR1BSKTsKKyNlbmRpZgogCiAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6RXF1YWwsIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoYml0
d2lzZV9jYXN0PGludDMyX3Q+KHZtKCkuc3RydWN0dXJlU3RydWN0dXJlLT5zdHJ1Y3R1cmVJRCgp
KSkpKTsKQEAgLTEyODM5LDcgKzEyODQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNyZWF0ZVRoaXMoTm9kZSogbm9kZSkKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1Q
dHIobnVsbHB0cik7CiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxv
Y2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJmbHks
IHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAotICAgIG1faml0LmxvYWQ4KEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
aW5saW5lQ2FwYWNpdHlHUFIpOworICAgIG1faml0LmxvYWQ4KEpJVENvbXBpbGVyOjpBZGRyZXNz
KHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpLCBpbmxp
bmVDYXBhY2l0eUdQUik7CiAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJl
c3VsdEdQUiwgaW5saW5lQ2FwYWNpdHlHUFIpOwogICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgp
KTsKIApAQCAtMTI4NzcsOCArMTI4ODAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3JlYXRlUHJvbWlzZShOb2RlKiBub2RlKQogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmFyZURhdGFHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwogICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlKCkgKyBJbnRlcm5hbEZ1
bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgc3RydWN0dXJlR1BSKSk7Ci0gICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0lu
dGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpLCBzY3JhdGNoMUdQUik7
Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7CisgICAgbV9qaXQuZW1pdExvYWRDbGFzc0lu
Zm9Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZUdQUiwgc2NyYXRjaDFHUFIpOworICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gx
R1BSLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFs
UHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpKSk7CiAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBnbG9iYWxPYmplY3QpLCBz
Y3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1
Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpKSk7CiAKQEAgLTEyOTI1
LDggKzEyOTI4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUludGVybmFs
RmllbGRPYmplY3QoTm9kZSogbm9kZSwgT3BlcmF0aW9uIG9wZXIKICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsK
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5j
dGlvblJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgp
ICsgSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgp
IC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVHUFIpOwogICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIHN0cnVjdHVy
ZUdQUikpOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihKU0NsYXNzOjppbmZvKCkpLCBz
Y3JhdGNoMUdQUik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1
Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7CisgICAgbV9qaXQuZW1p
dExvYWRDbGFzc0luZm9Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZUdQUiwgc2NyYXRjaDFHUFIpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKEpTQ2xhc3M6OmluZm8oKSkpKTsKICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGdsb2Jh
bE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaAppbmRleCBiMTA4YWJmY2NiODk1OGE4MzA3YzBhYTc4Y2Q2N2YyMDJkM2I4YzVj
Li44MzI5Yjc2YzU5N2FjNjNjM2YzYjIyMzhiN2YyM2IxMzVjZTJlYmU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaApA
QCAtMTM5LDExICsxMzksMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAg
IG1hY3JvKFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBcCiAgICAg
bWFjcm8oU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkp
IFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2xlbmd0aCwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5
T2Zmc2V0KCkpIFwKLSAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJbmZvLCBTdHJ1Y3R1cmU6OmNs
YXNzSW5mb09mZnNldCgpKSBcCisgICAgbWFjcm8oU3RydWN0dXJlX2NsYXNzSW5mbywgU3RydWN0
dXJlOjpvZmZzZXRPZkNsYXNzSW5mbygpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2dsb2JhbE9i
amVjdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVj
dHVyZV9pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5LCBTdHJ1Y3R1cmU6OmluZGV4aW5nTW9k
ZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVyZV9pbmxpbmVD
YXBhY2l0eSwgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSBcCi0gICAgbWFjcm8o
U3RydWN0dXJlX3ByZXZpb3VzT3JSYXJlRGF0YSwgU3RydWN0dXJlOjpwcmV2aW91c09yUmFyZURh
dGFPZmZzZXQoKSkgXAorICAgIG1hY3JvKFN0cnVjdHVyZV9pbmxpbmVDYXBhY2l0eSwgU3RydWN0
dXJlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpIFwKKyAgICBtYWNybyhTdHJ1Y3R1cmVfcHJl
dmlvdXNPclJhcmVEYXRhLCBTdHJ1Y3R1cmU6Om9mZnNldE9mUHJldmlvdXNPclJhcmVEYXRhKCkp
IFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfcHJvdG90eXBlLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9m
ZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3N0cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVSYXJlRGF0YV9jYWNoZWRP
d25LZXlzLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6b2Zmc2V0T2ZDYWNoZWRPd25LZXlzKCkpIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA0ZDM0
MjdiYzgyZThjOWIyNDdhYzg3MWEwMjAwMDFiYjIzODI5ZjI2Li43YTkwOThiODllYzk3MTlkOGNh
YmY1YTBiNjFiYjI3YWU4Y2Q4ZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCkBAIC02MDkxLDcgKzYwOTEsNyBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogCiAgICAgICAgICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd09iamVjdChtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0gbG9hZFN0cnVj
dHVyZShvYmplY3QpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBwcmV2aW91c09yUmFyZURhdGEg
PSBtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfcHJldmlvdXNPclJh
cmVEYXRhKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgcHJldmlvdXNPclJhcmVEYXRhID0gbV9v
dXQuYml0QW5kKG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6cHJldmlvdXNPclJhcmVEYXRh
TWFzayksIG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9wcmV2aW91
c09yUmFyZURhdGEpKTsKICAgICAgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90TnVs
bChwcmV2aW91c09yUmFyZURhdGEpLCB1bnN1cmUobm90TnVsbENhc2UpLCB1bnN1cmUoc2xvd0Nh
c2UpKTsKIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8obm90TnVsbENhc2UsIHJhcmVEYXRhQ2FzZSk7CkBAIC02Njc1LDcgKzY2NzUsOCBAQCBj
bGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQo
c3RydWN0dXJlKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShoYXNTdHJ1Y3R1cmUpKTsKIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhoYXNTdHJ1Y3R1cmUsIGNoZWNrR2xvYmFsT2JqZWN0Q2Fz
ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChtX291dC5sb2FkUHRyKHN0cnVj
dHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIobV9u
b2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSA6IEpT
UHJvbWlzZTo6aW5mbygpKSksIHVzdWFsbHkoY2hlY2tHbG9iYWxPYmplY3RDYXNlKSwgcmFyZWx5
KHNsb3dDYXNlKSk7CisgICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5iaXRBbmQobV9v
dXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX2NsYXNzSW5mbyksIG1fb3V0
LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFzaykpOworICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0cihtX25vZGUtPmlz
SW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNl
OjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nh
c2UpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0dsb2JhbE9iamVjdENhc2UsIGZh
c3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGRlcml2ZWRTdHJ1Y3R1
cmUgPSBtX291dC5hbmNob3Ioc3RydWN0dXJlKTsKQEAgLTY3MzAsNyArNjczMSw4IEBAIGNsYXNz
IExvd2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChzdHJ1
Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOwogCiAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmplY3RDYXNlKTsK
LSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIoc3RydWN0dXJl
LCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5jb25zdEludFB0cihKU0NsYXNz
OjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nh
c2UpKTsKKyAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmJpdEFuZChtX291dC5sb2Fk
UHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJ
bnRQdHIoU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCht
X291dC5lcXVhbChjbGFzc0luZm8sIG1fb3V0LmNvbnN0SW50UHRyKEpTQ2xhc3M6OmluZm8oKSkp
LCB1c3VhbGx5KGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSksIHJhcmVseShzbG93Q2FzZSkpOwogCiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSwgZmFzdEFsbG9jYXRp
b25DYXNlKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIo
c3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9nbG9iYWxPYmplY3QpLCB3ZWFrUG9pbnRlcihn
bG9iYWxPYmplY3QpKSwgdXN1YWxseShmYXN0QWxsb2NhdGlvbkNhc2UpLCByYXJlbHkoc2xvd0Nh
c2UpKTsKQEAgLTEzMjA4LDcgKzEzMjEwLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKICAg
ICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKGNlbGwpOwotICAgICAg
ICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBz
LlN0cnVjdHVyZV9jbGFzc0luZm8pOworICAgICAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1f
b3V0LmJpdEFuZChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xh
c3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIoU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSk7CiAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvdGhlckF0U3RhcnQgPSBtX291dC5hbmNob3IoY2xh
c3NJbmZvKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDcyOWY1ODQ2MzdkMzkzNTU4Njdj
NGU2ZDE0MjNkNjY5YTY2YTIxNjUuLjRjYjZlZGQyZWJkOTJlNzRmZGI1ZTI0NWQwZGQyM2Q4NzZh
MTg3OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApA
QCAtMTUxNyw2ICsxNTE3LDE0IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNy
b0Fzc2VtYmxlciB7CiAgICAgCiAgICAgdm9pZCBlbWl0TG9hZFN0cnVjdHVyZShWTSYsIFJlZ2lz
dGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKKyAg
ICB2b2lkIGVtaXRMb2FkQ2xhc3NJbmZvRnJvbVN0cnVjdHVyZShSZWdpc3RlcklEIHN0cnVjdHVy
ZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc3RydWN0
dXJlLCBTdHJ1Y3R1cmU6Om9mZnNldE9mQ2xhc3NJbmZvKCkpLCBkc3QpOworI2lmIENQVShBRERS
RVNTNjQpIC8vIE5vdCBVU0UoSlNWQUxVRTY0KS4gU3RydWN0dXJlOjptX2NsYXNzSW5mbydzIGlt
cGxlbWVudGF0aW9uIGlzIGNoYW5nZWQgYnkgc2l6ZSBvZiBwb2ludGVyLgorICAgICAgICBhbmRQ
dHIoVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KFN0cnVjdHVyZTo6Y2xhc3NJbmZv
TWFzaykpLCBkc3QpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBlbWl0U3RvcmVTdHJ1Y3R1
cmVXaXRoVHlwZUluZm8oVHJ1c3RlZEltbVB0ciBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCwg
UmVnaXN0ZXJJRCkKICAgICB7CiAgICAgICAgIGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5m
bygqdGhpcywgc3RydWN0dXJlLCBkZXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCmluZGV4IDdmMzU4YzEyMDNiZGVhZTkwZDQ0YTJjN2ZiODg5OTc4MDg5Y2E4NWYu
LmZkZTAwYmNjOGM5MDQ1OWM3NTM0NTA2MmE2MTFkYzFkZTQyOWNmZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtOTc5LDcgKzk3OSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJ
VEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRl
cmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVy
ZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Cisg
ICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxpbmVD
YXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdl
KHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBjZDY2N2IyZTU4NzgyMGUz
NzM1Y2QzODEzOTM2Zjk2YTk4Yzc5NjZhLi5iMTFmNjU1ZmNiNmY2NjA1NTI3OTljMTJhMTBjY2Jm
OTE5MGU4NjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxl
KCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNs
b3dDYXNlcyk7Ci0gICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGxvYWQ4KEFkZHJlc3Moc3Ry
dWN0dXJlUmVnLCBTdHJ1Y3R1cmU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hS
ZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hS
ZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgZW1pdFN0b3JlQ2VsbChieXRl
Y29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCmluZGV4IDk2YTM2MzVlNjgyNzM5M2VlODM2ZDgwNDc3
NzI0YTI1ZDU0NmMyNjEuLjI0OWJhNWFhYzUxZTUwOTBjZjIzZjdmOWU4ZTllNDdiYzIxZWY0N2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIFN0cnVjdHVyZSogQ2xvbmVkQXJndW1lbnRzOjpjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKENsb25lZEFyZ3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpLCBpbmRleGluZ1R5cGUpOwogICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbigKICAgICAgICAgdm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksCi0gICAgICAgIFsm
XSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKKyAgICAgICAgWyZdIChjb25zdCBHQ1Nh
ZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0
eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNl
dCA9PSBjbG9uZWRBcmd1bWVudHNMZW5ndGhQcm9wZXJ0eU9mZnNldCk7CiAgICAgICAgICAgICBz
dHJ1Y3R1cmUtPnNldE1heE9mZnNldCh2bSwgbmV3TWF4T2Zmc2V0KTsKICAgICAgICAgfSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SlNMb2Nr
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SlNMb2NrLmgKaW5k
ZXggYWEyNzNiYWRiZWZhNzM3YTBlYWE1MzRmYmViYTlmNTAxZmRiODYyNy4uMWQ0MDgwNzExNWFl
MzY1ZDBmZmM0Mzg1ZGVlNTg1MWE0ZDBhOWQwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpTTG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2suaApAQCAtMzMsMTggKzMzLDE4IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogdXNpbmcgQ29uY3VycmVudEpTTG9jayA9IExvY2s7Ci11c2luZyBDb25j
dXJyZW50SlNMb2NrZXJJbXBsID0gTG9ja0hvbGRlcjsKIAotc3RhdGljX2Fzc2VydChzaXplb2Yo
Q29uY3VycmVudEpTTG9jaykgPT0gMSwgIlJlZ2FyZGxlc3Mgb2Ygc3RhdHVzIG9mIGNvbmN1cnJl
bnQgSlMgZmxhZywgc2l6ZSBvZiBDb251cnJlbnRKU0xvY2sgaXMgYWx3YXlzIG9uZSBieXRlLiIp
Oworc3RhdGljX2Fzc2VydChzaXplb2YoQ29uY3VycmVudEpTTG9jaykgPT0gMSwgIlJlZ2FyZGxl
c3Mgb2Ygc3RhdHVzIG9mIGNvbmN1cnJlbnQgSlMgZmxhZywgc2l6ZSBvZiBDb25jdXJyZW50SlNM
b2NrIGlzIGFsd2F5cyBvbmUgYnl0ZS4iKTsKIAordGVtcGxhdGU8dHlwZW5hbWUgTG9jaz4KIGNs
YXNzIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgOiBwdWJsaWMgQWJzdHJhY3RMb2NrZXIgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmN1cnJlbnRKU0xvY2tlckJhc2UpOwogcHVibGljOgot
ICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoQ29uY3VycmVudEpTTG9jayYgbG9j
a2FibGUpCisgICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9ja2VyQmFzZShMb2NrJiBsb2NrYWJs
ZSkKICAgICAgICAgOiBtX2xvY2tlcigmbG9ja2FibGUpCiAgICAgewogICAgIH0KLSAgICBleHBs
aWNpdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlKENvbmN1cnJlbnRKU0xvY2sqIGxvY2thYmxlKQor
ICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoTG9jayogbG9ja2FibGUpCiAgICAg
ICAgIDogbV9sb2NrZXIobG9ja2FibGUpCiAgICAgewogICAgIH0KQEAgLTY0LDYzICs2NCw2NSBA
QCBjbGFzcyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIDogcHVibGljIEFic3RyYWN0TG9ja2VyIHsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29uY3VycmVudEpTTG9ja2VySW1wbCBtX2xvY2tlcjsK
KyAgICBMb2NrZXI8TG9jaz4gbV9sb2NrZXI7CiB9OwogCi1jbGFzcyBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgOiBwdWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZSB7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBMb2NrPgorY2xhc3MgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbCA6IHB1YmxpYyBD
b25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+IHsKIHB1YmxpYzoKLSAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIoQ29uY3VycmVudEpTTG9jayYgbG9ja2FibGUsIEhlYXAmIGhlYXApCi0gICAg
ICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJsZSkKKyAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXJJbXBsKExvY2smIGxvY2thYmxlLCBIZWFwJiBoZWFwKQorICAgICAgICA6IENv
bmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4obG9ja2FibGUpCiAgICAgICAgICwgbV9kZWZlckdD
KGhlYXApCiAgICAgewogICAgIH0KIAotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcihDb25j
dXJyZW50SlNMb2NrKiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKLSAgICAgICAgOiBDb25jdXJyZW50
SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwo
TG9jayogbG9ja2FibGUsIEhlYXAmIGhlYXApCisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2Vy
QmFzZTxMb2NrPihsb2NrYWJsZSkKICAgICAgICAgLCBtX2RlZmVyR0MoaGVhcCkKICAgICB7CiAg
ICAgfQogCi0gICAgfkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcigpCisgICAgfkdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlckltcGwoKQogICAgIHsKICAgICAgICAgLy8gV2UgaGF2ZSB0byB1bmxvY2sg
ZWFybHkgZHVlIHRvIHRoZSBkZXN0cnVjdGlvbiBvcmRlciBvZiBiYXNlCiAgICAgICAgIC8vIHZz
LiBkZXJpdmVkIGNsYXNzZXMuIElmIHdlIGRpZG4ndCwgdGhlbiB3ZSB3b3VsZCBkZXN0cm95IHRo
ZSAKICAgICAgICAgLy8gRGVmZXJHQyBvYmplY3QgYmVmb3JlIHVubG9ja2luZyB0aGUgbG9jayB3
aGljaCBjb3VsZCBjYXVzZSBhIEdDCiAgICAgICAgIC8vIGFuZCByZXN1bHRpbmcgZGVhZGxvY2su
Ci0gICAgICAgIHVubG9ja0Vhcmx5KCk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlckJhc2U8
TG9jaz46OnVubG9ja0Vhcmx5KCk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIERlZmVyR0MgbV9k
ZWZlckdDOwogfTsKIAotY2xhc3MgQ29uY3VycmVudEpTTG9ja2VyIDogcHVibGljIENvbmN1cnJl
bnRKU0xvY2tlckJhc2UgewordGVtcGxhdGU8dHlwZW5hbWUgTG9jaz4KK2NsYXNzIENvbmN1cnJl
bnRKU0xvY2tlckltcGwgOiBwdWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPiB7CiBw
dWJsaWM6Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyKENvbmN1cnJlbnRKU0xvY2smIGxvY2thYmxl
KQotICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UobG9ja2FibGUpCisgICAgQ29uY3Vy
cmVudEpTTG9ja2VySW1wbChMb2NrJiBsb2NrYWJsZSkKKyAgICAgICAgOiBDb25jdXJyZW50SlNM
b2NrZXJCYXNlPExvY2s+KGxvY2thYmxlKQogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICAgICAg
LCBtX2Rpc2FsbG93R0Moc3RkOjppbl9wbGFjZSkKICNlbmRpZgogICAgIHsKICAgICB9CiAKLSAg
ICBDb25jdXJyZW50SlNMb2NrZXIoQ29uY3VycmVudEpTTG9jayogbG9ja2FibGUpCi0gICAgICAg
IDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJsZSkKKyAgICBDb25jdXJyZW50SlNMb2Nr
ZXJJbXBsKExvY2sqIGxvY2thYmxlKQorICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2U8
TG9jaz4obG9ja2FibGUpCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgICAgICAsIG1fZGlzYWxs
b3dHQyhzdGQ6OmluX3BsYWNlKQogI2VuZGlmCiAgICAgewogICAgIH0KIAotICAgIENvbmN1cnJl
bnRKU0xvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnlUYWcpCi0gICAgICAgIDogQ29uY3VycmVudEpT
TG9ja2VyQmFzZShOb0xvY2tpbmdOZWNlc3NhcnkpCisgICAgQ29uY3VycmVudEpTTG9ja2VySW1w
bChOb0xvY2tpbmdOZWNlc3NhcnlUYWcpCisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFz
ZTxMb2NrPihOb0xvY2tpbmdOZWNlc3NhcnkpCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgICAg
ICAsIG1fZGlzYWxsb3dHQyhXVEY6Om51bGxvcHQpCiAjZW5kaWYKICAgICB7CiAgICAgfQogICAg
IAotICAgIENvbmN1cnJlbnRKU0xvY2tlcihpbnQpID0gZGVsZXRlOworICAgIENvbmN1cnJlbnRK
U0xvY2tlckltcGwoaW50KSA9IGRlbGV0ZTsKIAogI2lmICFkZWZpbmVkKE5ERUJVRykKIHByaXZh
dGU6CkBAIC0xMjgsNCArMTMwLDcgQEAgY2xhc3MgQ29uY3VycmVudEpTTG9ja2VyIDogcHVibGlj
IENvbmN1cnJlbnRKU0xvY2tlckJhc2UgewogI2VuZGlmCiB9OwogCit1c2luZyBDb25jdXJyZW50
SlNMb2NrZXIgPSBDb25jdXJyZW50SlNMb2NrZXJJbXBsPENvbmN1cnJlbnRKU0xvY2s+OwordXNp
bmcgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyID0gR0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1w
bDxDb25jdXJyZW50SlNMb2NrPjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCmluZGV4IDY2NWQwODg5Y2Y0NDYxYzNhYjBhMmFmNGIwN2M2
YTU4YzkwNDIxYzQuLmQ1NjU2ZjhiZmRmZjYzMjk5MmFjMWRhNDUxZTM1YzFhNTQ4ZDQ2N2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCkBAIC0yNCw2ICsyNCw3IEBACiAK
ICNpbmNsdWRlICJDYWxsRGF0YS5oIgogI2luY2x1ZGUgIkNlbGxTdGF0ZS5oIgorI2luY2x1ZGUg
IkNvbmN1cnJlbnRKU0xvY2suaCIKICNpbmNsdWRlICJDb25zdHJ1Y3REYXRhLmgiCiAjaW5jbHVk
ZSAiRW51bWVyYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtMjg4LDYgKzI4OSw5
IEBAIGNsYXNzIEpTQ2VsbExvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHVubG9ja1Nsb3coKTsKIH07CiAKK3VzaW5nIENvbmN1cnJlbnRKU0NlbGxMb2Nr
ZXIgPSBDb25jdXJyZW50SlNMb2NrZXJJbXBsPEpTQ2VsbExvY2s+OwordXNpbmcgR0NTYWZlQ29u
Y3VycmVudEpTQ2VsbExvY2tlciA9IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGw8SlNDZWxs
TG9jaz47CisKIC8vIEZJWE1FOiBSZWZlciB0byBTdWJzcGFjZSBieSByZWZlcmVuY2UuCiAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CmluZGV4IGFjZDI5ZGVkODEzNTFmYjI4NGIyMTU5YWQ0N2E2MzFjMzQ5NGYxZGYuLjNhNTEyMWQ2
OWRmYjRmYjJmYjlmODg1Y2E3ZmYzZmU1NWMwNGRkODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAKQEAgLTIwMDUsNyArMjAwNSw3IEBAIGJvb2wgSlNPYmpl
Y3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVyCiAKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9m
ZnNldDsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkK
LSAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBbXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOworICAgICAgICAgICAg
b2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBw
cm9wZXJ0eU5hbWUsIFtdKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9w
ZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsICZkZWZlcnJlZFdhdGNocG9pbnRGaXJl
KTsKICAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSAmJiAhc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRo
aXNPYmplY3QpKSB7CkBAIC0zNzY2LDcgKzM3NjYsNyBAQCB2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0
VG9EaWN0aW9uYXJ5KFZNJiB2bSkKICAgICAgICAgdm0sIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVE
aWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgJmRlZmVycmVkV2F0Y2hwb2lu
dEZpcmUpKTsKIH0KIAotdm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5p
bmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCit2b2lkIEpTT2JqZWN0Ojpz
aGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxs
TG9ja2VyJiwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNh
cGFjaXR5QWZ0ZXIpCiB7CiAgICAgLy8gVGhpcyBjb3VsZCBpbnRlcmxlYXZlIHZpc2l0Q2hpbGRy
ZW4gYmVjYXVzZSBzb21lIG9sZCBzdHJ1Y3R1cmUgY291bGQgaGF2ZSBiZWVuIGEgbm9uCiAgICAg
Ly8gZGljdGlvbmFyeSBzdHJ1Y3R1cmUuIFdlIGhhdmUgdG8gYmUgY3JhenkgY2FyZWZ1bC4gQnV0
LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBob2xkaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAppbmRleCBlYzYzMDBlYTliOTcyY2U5YmEwZmFkODE4MjU3YWZiMjBk
ODJhMmVkLi42NTExNjBiZTBiMDE3ODcwY2U5MDk2YmY5MmE1NWRjZjBlNmNkYmJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKQEAgLTgxNSw3ICs4MTUsNyBAQCBj
bGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHsKICAgICAgICAgc3RydWN0dXJl
KHZtKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIHRoaXMpOwogICAgIH0KLSAgICB2
b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciYsIFZNJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBh
Y2l0eUFmdGVyKTsKKyAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBWTSYsIFN0cnVjdHVyZSosIHNpemVfdCBv
dXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QoKSBjb25zdAogICAgIHsKQEAgLTEzMjksNyArMTMyOSw3IEBAIGlubGluZSBKU1ZhbHVlIEpT
T2JqZWN0OjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogLy8gZmxhdHRlbiBhbiBvYmplY3QuCiBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0RGly
ZWN0Q29uY3VycmVudGx5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpIGNvbnN0CiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmxv
Y2soKSk7CisgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5jZWxs
TG9jaygpKTsKICAgICBpZiAoIXN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAg
ICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBnZXREaXJlY3Qob2Zmc2V0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKaW5kZXggYTY3MDAz
NDdmNjk3NmU2MWIwNWRiMThmMmIwOTZhYWE3OWUyZWJiMy4uOTVhNjcxMGMyZTM1Njg0MzZkNWNj
YTI4Yzg2YjJkYzk0ZDhhODgwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3RJbmxpbmVzLmgKQEAgLTIxNiw3ICsyMTYsNyBAQCBBTFdBWVNfSU5MSU5FIFBy
b3BlcnR5T2Zmc2V0IEpTT2JqZWN0OjpwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihWTSYgdgogICAgIFByb3BlcnR5T2Zmc2V0IHJlc3VsdDsKICAgICBzdHJ1Y3R1cmUtPmFkZFBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCiAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsCi0gICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKKyAgICAg
ICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKICAgICAgICAgICAgIHVu
c2lnbmVkIG5ld091dE9mTGluZUNhcGFjaXR5ID0gU3RydWN0dXJlOjpvdXRPZkxpbmVDYXBhY2l0
eShuZXdNYXhPZmZzZXQpOwogICAgICAgICAgICAgaWYgKG5ld091dE9mTGluZUNhcGFjaXR5ICE9
IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CiAgICAgICAgICAgICAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRPdXRPZkxpbmVDYXBh
Y2l0eSwgbmV3T3V0T2ZMaW5lQ2FwYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAKaW5kZXggZWRhNDQ2YmZiZTI2N2FiMDFiODUyZTE1ZmRlOWM5YzMw
ZTZmNThlNi4uM2I1OWI0ZDQ1ZTY3ZGViYWExNjU3ODA4Njg1Y2E0ZWI3NDMzZDc3OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCkBAIC01NSwxMCArNTUs
MTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RydWN0dXJlKj4mIGxpdmVTdHJ1Y3R1cmVTZXQgPSAqKG5l
dyBIYXNoU2V0PFN0cnVjdHVyZSo+KTsKIGNsYXNzIFNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093
bmVyIGZpbmFsIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgdm9pZCBmaW5hbGl6ZShI
YW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBB
U1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkp
OwogICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUqIHRhYmxlID0gcmVpbnRlcnByZXRf
Y2FzdDxTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUqPihjb250ZXh0KTsKICAgICAgICAgQVNTRVJU
KHRhYmxlLT5pc1VzaW5nU2luZ2xlU2xvdCgpKTsKICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0
ZSh0YWJsZS0+d2Vha0ltcGwoKSk7Ci0gICAgICAgIHRhYmxlLT5tX2RhdGEgPSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGU6OlVzaW5nU2luZ2xlU2xvdEZsYWc7CisgICAgICAgIHRhYmxlLT5tX2Rh
dGEgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6VXNp
bmdTaW5nbGVTbG90RmxhZyk7CiAgICAgfQogfTsKIApAQCAtNzAsNiArNzEsNyBAQCBzdGF0aWMg
U2luZ2xlU2xvdFRyYW5zaXRpb25XZWFrT3duZXImIHNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093
bmVyKCkKIAogaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzaW5n
bGVUcmFuc2l0aW9uKCkgY29uc3QKIHsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwogICAgIEFTU0VSVChpc1VzaW5nU2luZ2xl
U2xvdCgpKTsKICAgICBpZiAoV2Vha0ltcGwqIGltcGwgPSB0aGlzLT53ZWFrSW1wbCgpKSB7CiAg
ICAgICAgIGlmIChpbXBsLT5zdGF0ZSgpID09IFdlYWtJbXBsOjpMaXZlKQpAQCAtODAsMzMgKzgy
LDM3IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2luZ2xl
VHJhbnNpdGlvbigpIGNvbnN0CiAKIGlubGluZSB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZTo6c2V0U2luZ2xlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKKyAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwog
ICAgIEFTU0VSVChpc1VzaW5nU2luZ2xlU2xvdCgpKTsKICAgICBpZiAoV2Vha0ltcGwqIGltcGwg
PSB0aGlzLT53ZWFrSW1wbCgpKQogICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKGltcGwpOwog
ICAgIFdlYWtJbXBsKiBpbXBsID0gV2Vha1NldDo6YWxsb2NhdGUoc3RydWN0dXJlLCAmc2luZ2xl
U2xvdFRyYW5zaXRpb25XZWFrT3duZXIoKSwgdGhpcyk7Ci0gICAgbV9kYXRhID0gYml0d2lzZV9j
YXN0PGludHB0cl90PihpbXBsKSB8IFVzaW5nU2luZ2xlU2xvdEZsYWc7CisgICAgbV9kYXRhID0g
Yml0d2lzZV9jYXN0PHVpbnQ4X3QqPihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGltcGwpIHwgVXNp
bmdTaW5nbGVTbG90RmxhZyk7CiB9CiAKIGJvb2wgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpj
b250YWlucyhVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29s
IGlzQWRkaXRpb24pIGNvbnN0CiB7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkg
JiYgIVRocmVhZDo6bWF5QmVHQ1RocmVhZCgpKTsKICAgICBpZiAoaXNVc2luZ1NpbmdsZVNsb3Qo
KSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7
Ci0gICAgICAgIHJldHVybiB0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmli
dXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlvbi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJh
bnNpdGlvbigpID09ICFpc0FkZGl0aW9uOworICAgICAgICByZXR1cm4gdHJhbnNpdGlvbiAmJiB0
cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkgPT0gcmVwICYmIHRyYW5zaXRpb24t
PnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRp
b24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbjsKICAgICB9
CiAgICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpL
ZXkocmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CiB9CiAKIGlubGluZSBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRpdGlvbikgY29uc3QKIHsKKyAgICBBU1NFUlQo
IWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOwogICAg
IGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IHNpbmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgcmV0dXJuICh0cmFuc2l0aW9uICYmIHRy
YW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+
dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlv
bi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbigpID09ICFpc0FkZGl0aW9uKSA/IHRyYW5z
aXRpb24gOiAwOworICAgICAgICByZXR1cm4gKHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+dHJh
bnNpdGlvblByb3BlcnR5TmFtZSgpID09IHJlcCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJv
cGVydHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0aW9uLT5pc1Byb3BlcnR5
RGVsZXRpb25UcmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb24pID8gdHJhbnNpdGlvbiA6IG51bGxw
dHI7CiAgICAgfQogICAgIHJldHVybiBtYXAoKS0+Z2V0KFN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZTo6SGFzaDo6S2V5KHJlcCwgYXR0cmlidXRlcywgaXNBZGRpdGlvbikpOwogfQogCiB2b2lkIFN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVH
Q1RocmVhZCgpKTsKICAgICBpZiAoaXNVc2luZ1NpbmdsZVNsb3QoKSkgewogICAgICAgICBTdHJ1
Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKIApAQCAtMTIz
LDcgKzEyOSw3IEBAIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB9CiAKICAgICAvLyBBZGQgdGhlIHN0cnVjdHVyZSB0
byB0aGUgbWFwLgotICAgIG1hcCgpLT5zZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNo
OjpLZXkoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVy
ZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpLCAhc3RydWN0dXJlLT5pc1Byb3BlcnR5
RGVsZXRpb25UcmFuc2l0aW9uKCkpLCBzdHJ1Y3R1cmUpOworICAgIG1hcCgpLT5zZXQoU3RydWN0
dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkoc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVy
dHlOYW1lKCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpLCAhc3Ry
dWN0dXJlLT5pc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkpLCBzdHJ1Y3R1cmUpOwogfQog
CiB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQpAQCAtMTUxLDcgKzE1Nyw3IEBAIHZv
aWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUt
PnByb3BlcnR5VGFibGVPck51bGwoKSkgeworICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkgewogICAgICAgICAg
ICAgKytudW1iZXJXaXRoUHJvcGVydHlNYXBzOwogICAgICAgICAgICAgdG90YWxQcm9wZXJ0eU1h
cHNTaXplICs9IHRhYmxlLT5zaXplSW5NZW1vcnkoKTsKICAgICAgICAgfQpAQCAtMTc0LDE1ICsx
ODAsMTIgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKIFN0cnVjdHVyZTo6U3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQog
ICAgIDogSlNDZWxsKHZtLCB2bS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2Js
b2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJRCh0aGlzKSwgaW5kZXhpbmdU
eXBlLCB0eXBlSW5mbykKLSAgICAsIG1fb3V0T2ZMaW5lVHlwZUZsYWdzKHR5cGVJbmZvLm91dE9m
TGluZVR5cGVGbGFncygpKQotICAgICwgbV9pbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBhY2l0eSkK
LSAgICAsIG1fYml0RmllbGQoMCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KHZtLCB0aGlzLCBnbG9i
YWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1heUJlTnVsbCkKICAgICAs
IG1fcHJvdG90eXBlKHZtLCB0aGlzLCBwcm90b3R5cGUpCi0gICAgLCBtX2NsYXNzSW5mbyhjbGFz
c0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKLSAgICAs
IG1fcHJvcGVydHlIYXNoKDApCiB7CisgICAgc2V0SW5saW5lQ2FwYWNpdHkoaW5saW5lQ2FwYWNp
dHkpOworICAgIHNldENsYXNzSW5mbyhjbGFzc0luZm8pOwogICAgIHNldERpY3Rpb25hcnlLaW5k
KE5vbmVEaWN0aW9uYXJ5S2luZCk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKGZhbHNl
KTsKICAgICBzZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKGNsYXNzSW5mby0+aGFzU3RhdGlj
U2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CkBAIC0yMDAsMzEgKzIwMywzMCBAQCBTdHJ1
Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlLCBjbwogICAgIHNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24o
ZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25PZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogICAg
IHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7Ci0gCisgICAgc2V0T3V0T2ZMaW5lVHlw
ZUZsYWdzKHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpKTsKKwogICAgIEFTU0VSVChpbmxp
bmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsKICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8UHJvcGVydHlPZmZzZXQ+KGlubGluZUNhcGFjaXR5KSA8IGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KTsKICAgICBBU1NFUlQoIWhhc1JhcmVEYXRhKCkpOwotICAgIEFTU0VS
VChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwg
IW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAg
ICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFtX2NsYXNzSW5mby0+aGFz
U3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKCF0aGlzLT50
eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgbV9jbGFzc0luZm8tPm1ldGhvZFRh
YmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKKyAgICBBU1NFUlQoaGFz
UmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8ICF0aGlz
LT5jbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Cisg
ICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB8fCAhdGhpcy0+Y2xhc3NJbmZv
KCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVCgh
dGhpcy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8IHRoaXMtPmNsYXNzSW5m
bygpLT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CiB9
CiAKIGNvbnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIlN0cnVjdHVyZSIsIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoU3RydWN0dXJlKSB9
OwogCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgOiBKU0NlbGwoQ3JlYXRpbmdF
YXJseUNlbGwpCi0gICAgLCBtX2lubGluZUNhcGFjaXR5KDApCi0gICAgLCBtX2JpdEZpZWxkKDAp
CiAgICAgLCBtX3Byb3RvdHlwZSh2bSwgdGhpcywganNOdWxsKCkpCi0gICAgLCBtX2NsYXNzSW5m
byhpbmZvKCkpCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKLSAg
ICAsIG1fcHJvcGVydHlIYXNoKDApCiB7CisgICAgc2V0SW5saW5lQ2FwYWNpdHkoMCk7CisgICAg
c2V0Q2xhc3NJbmZvKGluZm8oKSk7CiAgICAgc2V0RGljdGlvbmFyeUtpbmQoTm9uZURpY3Rpb25h
cnlLaW5kKTsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUoZmFsc2UpOwotICAgIHNldEhh
c0dldHRlclNldHRlclByb3BlcnRpZXMobV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVh
ZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIHNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXMoY2xh
c3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwogICAgIHNl
dEhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMoZmFsc2UpOwotICAgIHNldEhhc1JlYWRP
bmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8obV9jbGFzc0luZm8tPmhh
c1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIHNldEhhc1JlYWRPbmx5
T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oY2xhc3NJbmZvKCktPmhhc1N0
YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwogICAgIHNldEhhc1VuZGVyc2NvcmVQ
cm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90byhmYWxzZSk7CiAgICAgc2V0SXNRdWlj
a1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKHRydWUpOwogICAgIHNldFRyYW5z
aXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoMCk7CkBAIC0yNDAsMjMgKzI0MiwyNiBAQCBTdHJ1Y3R1
cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgCiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBUeXBlSW5m
byhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpOwogICAgIG1fYmxvYiA9IFN0cnVjdHVyZUlEQmxv
Yih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCAwLCB0eXBlSW5m
byk7Ci0gICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxh
Z3MoKTsKKyAgICBzZXRPdXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZs
YWdzKCkpOwogCi0gICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
RXhjbHVkaW5nUHJvdG8oKSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9u
bHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkg
fHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsK
LSAgICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBt
X2NsYXNzSW5mby0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERh
dGEpOworICAgIEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1
ZGluZ1Byb3RvKCkgfHwgIWNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJv
cGVydGllcygpKTsKKyAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFj
bGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAg
QVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgY2xhc3NJ
bmZvKCktPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsK
IH0KIAogU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBE
ZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCiAgICAg
OiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1faW5saW5l
Q2FwYWNpdHkocHJldmlvdXMtPm1faW5saW5lQ2FwYWNpdHkpCi0gICAgLCBtX2JpdEZpZWxkKDAp
Ci0gICAgLCBtX3Byb3RvdHlwZSh2bSwgdGhpcywgcHJldmlvdXMtPm1fcHJvdG90eXBlLmdldCgp
KQotICAgICwgbV9jbGFzc0luZm8ocHJldmlvdXMtPm1fY2xhc3NJbmZvKQotICAgICwgbV90cmFu
c2l0aW9uV2F0Y2hwb2ludFNldChJc1dhdGNoZWQpCisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAs
IG1fcHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRpZXMocHJldmlvdXMtPm1fcHJvcGVydHlIYXNo
QW5kU2VlblByb3BlcnRpZXMpCisjZWxzZQogICAgICwgbV9wcm9wZXJ0eUhhc2gocHJldmlvdXMt
Pm1fcHJvcGVydHlIYXNoKQogICAgICwgbV9zZWVuUHJvcGVydGllcyhwcmV2aW91cy0+bV9zZWVu
UHJvcGVydGllcykKKyNlbmRpZgorICAgICwgbV9wcm90b3R5cGUodm0sIHRoaXMsIHByZXZpb3Vz
LT5tX3Byb3RvdHlwZS5nZXQoKSkKKyAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSXNX
YXRjaGVkKQogeworICAgIHNldElubGluZUNhcGFjaXR5KHByZXZpb3VzLT5pbmxpbmVDYXBhY2l0
eSgpKTsKKyAgICBzZXRDbGFzc0luZm8ocHJldmlvdXMtPmNsYXNzSW5mbygpKTsKICAgICBzZXRE
aWN0aW9uYXJ5S2luZChwcmV2aW91cy0+ZGljdGlvbmFyeUtpbmQoKSk7CiAgICAgc2V0SXNQaW5u
ZWRQcm9wZXJ0eVRhYmxlKGZhbHNlKTsKICAgICBzZXRIYXNCZWVuRmxhdHRlbmVkQmVmb3JlKHBy
ZXZpb3VzLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpOwpAQCAtMjc3LDcgKzI4Miw3IEBAIFN0
cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2aW91cywgRGVmZXJyZWRT
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0CiAgCiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBwcmV2aW91
cy0+dHlwZUluZm8oKTsKICAgICBtX2Jsb2IgPSBTdHJ1Y3R1cmVJREJsb2Iodm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJRCh0aGlzKSwgcHJldmlvdXMtPmluZGV4aW5nTW9kZUlu
Y2x1ZGluZ0hpc3RvcnkoKSwgdHlwZUluZm8pOwotICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzID0g
dHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCk7CisgICAgc2V0T3V0T2ZMaW5lVHlwZUZsYWdz
KHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpKTsKIAogICAgIEFTU0VSVCghcHJldmlvdXMt
PnR5cGVJbmZvKCkuc3RydWN0dXJlSXNJbW1vcnRhbCgpKTsKICAgICBzZXRQcmV2aW91c0lEKHZt
LCBwcmV2aW91cyk7CkBAIC0yODksOSArMjk0LDkgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQK
IAogICAgIGlmIChwcmV2aW91cy0+bV9nbG9iYWxPYmplY3QpCiAgICAgICAgIG1fZ2xvYmFsT2Jq
ZWN0LnNldCh2bSwgdGhpcywgcHJldmlvdXMtPm1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKLSAgICBB
U1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygp
IHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7
Ci0gICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB8fCAhbV9jbGFzc0luZm8t
Pmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVCghdGhp
cy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8IG1fY2xhc3NJbmZvLT5tZXRo
b2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CisgICAgQVNTRVJU
KGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAh
Y2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAg
IEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwgIWNsYXNzSW5mbygpLT5oYXNT
dGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQoIXRoaXMtPnR5
cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBjbGFzc0luZm8oKS0+bWV0aG9kVGFi
bGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEpOwogfQogCiBTdHJ1Y3R1cmU6
On5TdHJ1Y3R1cmUoKQpAQCAtMzEzLDcgKzMxOCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpj
cmVhdGUoUG9seVByb3RvVGFnLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
CiAgICAgdW5zaWduZWQgb2xkT3V0T2ZMaW5lQ2FwYWNpdHkgPSByZXN1bHQtPm91dE9mTGluZUNh
cGFjaXR5KCk7CiAgICAgcmVzdWx0LT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAogICAg
ICAgICB2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucG9seVByb3RvTmFtZSgp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwKLSAg
ICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAgICAgICBbJl0gKGNv
bnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoU3RydWN0dXJlOjpvdXRPZkxpbmVDYXBhY2l0eShuZXdNYXhPZmZzZXQpID09IG9sZE91dE9m
TGluZUNhcGFjaXR5KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCA9PSBrbm93
blBvbHlQcm90b09mZnNldCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0lubGluZU9m
ZnNldChrbm93blBvbHlQcm90b09mZnNldCkpOwpAQCAtMzI5LDIzICszMzQsMjMgQEAgYm9vbCBT
dHJ1Y3R1cmU6OmlzVmFsaWRQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgcmV0dXJu
IHByb3RvdHlwZS5pc051bGwoKSB8fCAocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgcHJvdG90eXBl
LmdldE9iamVjdCgpLT5tYXlCZVByb3RvdHlwZSgpKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmZp
bmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKFZlY3RvcjxTdHJ1Y3R1cmUqLCA4
PiYgc3RydWN0dXJlcywgU3RydWN0dXJlKiYgc3RydWN0dXJlLCBQcm9wZXJ0eVRhYmxlKiYgdGFi
bGUpCit2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRp
b24oVmVjdG9yPHN0ZDo6cGFpcjxTdHJ1Y3R1cmUqLCBVbmlxdWVkU3RyaW5nSW1wbCo+LCA4PiYg
c3RydWN0dXJlQW5kVHJhbnNpdGlvblByb3BlcnR5TmFtZXMsIFN0cnVjdHVyZSomIHN0cnVjdHVy
ZSwgUHJvcGVydHlUYWJsZSomIHRhYmxlKQogewotICAgIEFTU0VSVChzdHJ1Y3R1cmVzLmlzRW1w
dHkoKSk7Ci0gICAgdGFibGUgPSAwOworICAgIEFTU0VSVChzdHJ1Y3R1cmVBbmRUcmFuc2l0aW9u
UHJvcGVydHlOYW1lcy5pc0VtcHR5KCkpOworICAgIHRhYmxlID0gbnVsbHB0cjsKIAogICAgIGZv
ciAoc3RydWN0dXJlID0gdGhpczsgc3RydWN0dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnBy
ZXZpb3VzSUQoKSkgewotICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay5sb2NrKCk7CisgICAgICAg
IHN0cnVjdHVyZS0+Y2VsbExvY2soKS5sb2NrKCk7CiAgICAgICAgIAotICAgICAgICB0YWJsZSA9
IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgICAgICB0YWJsZSA9IHN0cnVj
dHVyZS0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgICAgICBpZiAodGFibGUpIHsK
ICAgICAgICAgICAgIC8vIExlYXZlIHRoZSBzdHJ1Y3R1cmUgbG9ja2VkLCBzbyB0aGF0IHRoZSBj
YWxsZXIgY2FuIGRvIHRoaW5ncyB0byBpdCBhdG9taWNhbGx5CiAgICAgICAgICAgICAvLyBiZWZv
cmUgaXQgbG9zZXMgaXRzIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBzdHJ1Y3R1cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOwot
ICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKKyAgICAgICAgc3RydWN0dXJlQW5k
VHJhbnNpdGlvblByb3BlcnR5TmFtZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHN0cnVjdHVyZSwg
c3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlOYW1lQ29uY3VycmVudGx5KCkpKTsKKyAgICAg
ICAgc3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwogICAgIH0KICAgICAKICAgICBBU1NF
UlQoIXN0cnVjdHVyZSk7CkBAIC0zNTksMzggKzM2NCwzOCBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1
Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0UHJvcGVydHlU
YWJsZQogICAgIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKLSAgICBWZWN0
b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cnVj
dHVyZSosIFVuaXF1ZWRTdHJpbmdJbXBsKj4sIDg+IHN0cnVjdHVyZUFuZFRyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWVzOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUq
IHRhYmxlOwogICAgIAotICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9u
KHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOworICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFw
Rm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZUFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWVzLCBz
dHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG51bWJlck9m
U2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOworICAgIHVu
c2lnbmVkIGNhcGFjaXR5ID0gbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwg
aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgIHRhYmxlID0gdGFi
bGUtPmNvcHkodm0sIGNhcGFjaXR5KTsKLSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2Nr
KCk7CisgICAgICAgIHN0cnVjdHVyZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICB9IGVsc2UK
ICAgICAgICAgdGFibGUgPSBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KTsKICAg
ICAKICAgICAvLyBNdXN0IGhvbGQgdGhlIGxvY2sgb24gdGhpcyBzdHJ1Y3R1cmUsIHNpbmNlIHdl
IHdpbGwgYmUgbW9kaWZ5aW5nIHRoaXMgc3RydWN0dXJlJ3MKICAgICAvLyBwcm9wZXJ0eSBtYXAu
IFdlIGRvbid0IHdhbnQgZ2V0Q29uY3VycmVudGx5KCkgdG8gc2VlIHRoZSBwcm9wZXJ0eSBtYXAg
aW4gYSBoYWxmLWJha2VkCiAgICAgLy8gc3RhdGUuCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxM
b2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhlYXApOwogICAgIGlmIChzZXRQcm9wZXJ0eVRh
YmxlKQogICAgICAgICB0aGlzLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAKLSAgICBm
b3IgKHNpemVfdCBpID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgc3RydWN0
dXJlID0gc3RydWN0dXJlc1tpXTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blByb3BlcnR5TmFtZSkKKyAgICBmb3IgKHNpemVfdCBpID0gc3RydWN0dXJlQW5kVHJhbnNpdGlv
blByb3BlcnR5TmFtZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGF1dG8gW3N0cnVjdHVyZSwg
dHJhbnNpdGlvblByb3BlcnR5TmFtZV0gPSBzdHJ1Y3R1cmVBbmRUcmFuc2l0aW9uUHJvcGVydHlO
YW1lc1tpXTsKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9uUHJvcGVydHlOYW1lKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRy
YW5zaXRpb24oKSkgewotICAgICAgICAgICAgYXV0byBpdGVtID0gdGFibGUtPmZpbmQoc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICAgICAgYXV0byBp
dGVtID0gdGFibGUtPmZpbmQodHJhbnNpdGlvblByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBB
U1NFUlQoaXRlbS5maXJzdCk7CiAgICAgICAgICAgICB0YWJsZS0+cmVtb3ZlKGl0ZW0pOwogICAg
ICAgICAgICAgdGFibGUtPmFkZERlbGV0ZWRPZmZzZXQoc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zm
c2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgUHJvcGVy
dHlNYXBFbnRyeSBlbnRyeShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQo
KSwgc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblBy
b3BlcnR5QXR0cmlidXRlcygpKTsKKyAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeSh0cmFu
c2l0aW9uUHJvcGVydHlOYW1lLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0
dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpOwogICAgICAgICBhdXRvIG5leHRP
ZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwog
ICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHRPZmZzZXQsIG5leHRPZmZzZXQgPT0gc3RydWN0dXJl
LT50cmFuc2l0aW9uT2Zmc2V0KCkpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IHRhYmxlLT5hZGQo
ZW50cnkpOwpAQCAtNDA1LDggKzQxMCw4IEBAIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6bWF0
ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlCiAgICAg
ICAgICAgICBkYXRhTG9nKCJGb3VuZCBzdHJ1Y3R1cmUgPSAiLCBSYXdQb2ludGVyKHN0cnVjdHVy
ZSksICJcbiIpOwogICAgICAgICAgICAgZGF0YUxvZygic3RydWN0dXJlcyA9ICIpOwogICAgICAg
ICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA6IHN0cnVjdHVyZXMpCi0gICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgUmF3
UG9pbnRlcihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IHN0cnVj
dHVyZUFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWVzKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
Y29tbWEsIFJhd1BvaW50ZXIocGFpci5maXJzdCkpOwogICAgICAgICAgICAgZGF0YUxvZygiXG4i
KTsKICAgICAgICAgfSk7CiAgICAgCkBAIC00MjUsNyArNDMwLDcgQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVj
dHVyZSogc3QKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAgICB9CiAKLSAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCkBAIC00MzYsNyArNDQxLDcgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0
dXJlKiBzdHJ1Y3QKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
blRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0
JiBvZmZzZXQpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1f
bG9jayk7CisgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5jZWxs
TG9jaygpKTsKICAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVj
dHVyZUltcGwoc3RydWN0dXJlLCB1aWQsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9CiAKQEAgLTQ5
Nyw4ICs1MDIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBybwogICAgIH0KICAgICAKICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwot
Ci0gICAgdHJhbnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXRNYXlCZU51bGwodm0s
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSk7Cisg
ICAgdHJhbnNpdGlvbi0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4odm0sIHN0cnVjdHVyZS0+Y2Fj
aGVkUHJvdG90eXBlQ2hhaW4oKSk7CiAgICAgCiAgICAgLy8gV2hpbGUgd2UgYXJlIGFkZGluZyB0
aGUgcHJvcGVydHksIHJlbWF0ZXJpYWxpemluZyB0aGUgcHJvcGVydHkgdGFibGUgaXMgc3VwZXIg
d2VpcmQ6IHdlIGFscmVhZHkKICAgICAvLyBoYXZlIGEgbV90cmFuc2l0aW9uUHJvcGVydHlOYW1l
IGFuZCB0cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIGJ1dCB0aGUgbV90cmFuc2l0aW9uT2Zm
c2V0IGlzIHN0aWxsIHdyb25nLiBJZiB0aGUKQEAgLTUxMCwxMiArNTE0LDEyIEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvCiAgICAgLy8gY2FzZSBhbGwgaXMgd2VsbC4gIElmIGl0IHdhc24ndCBm
b3IgdGhlIGxvY2ssIHRoZSBHQyB3b3VsZCBoYXZlIFRPQ1RPVTogaWYgY291bGQgcmVhZAogICAg
IC8vIHByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nIGJlZm9yZSB3ZSBzZXQg
aXQgdG8gdHJ1ZSwgYW5kIHRoZW4gYmxvdyB0aGUgdGFibGUgYXdheSBhZnRlci4KICAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAg
ICAgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2so
KSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFu
c2l0aW9uaW5nKHRydWUpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVy
dHlOYW1lKGxvY2tlciwgcHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICB9CiAKICAgICB0cmFuc2l0
aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmlu
ZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7Ci0gICAgdHJhbnNp
dGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAg
IHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7
CiAgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJv
cGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPnNldE1heE9m
ZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CkBAIC01MzAsNyArNTM0LDcgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm8KIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPnRyYW5z
aXRpb25PZmZzZXQoKSwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgewotICAg
ICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrLCB2
bS5oZWFwKTsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoc3Ry
dWN0dXJlLT5jZWxsTG9jaygpLCB2bS5oZWFwKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5z
aXRpb25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5j
aGVja09mZnNldENvbnNpc3RlbmN5KCk7CkBAIC01ODcsMTYgKzU5MSwxNiBAQCBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsCiAgICAgfQogCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRl
KHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKLSAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3Rv
dHlwZUNoYWluLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hl
ZFByb3RvdHlwZUNoYWluLmdldCgpKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRDYWNoZWRQcm90b3R5
cGVDaGFpbih2bSwgc3RydWN0dXJlLT5jYWNoZWRQcm90b3R5cGVDaGFpbigpKTsKIAogICAgIC8v
IFdoaWxlIHdlIGFyZSBkZWxldGluZyB0aGUgcHJvcGVydHksIHdlIG5lZWQgdG8gbWFrZSBzdXJl
IHRoZSB0YWJsZSBpcyBub3QgY2xlYXJlZC4KICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpTQ2Vs
bExvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2soKSk7CiAgICAgICAgIHRyYW5zaXRp
b24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKHRydWUpOworICAg
ICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGxvY2tlciwgcHJvcGVy
dHlOYW1lLnVpZCgpKTsKICAgICB9CiAKICAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhp
bmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hp
c3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7Ci0gICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJv
cGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5zaXRpb24tPnNldFByb3Bl
cnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQo
dm0pKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zm
c2V0KCkpOwogICAgIHRyYW5zaXRpb24tPnNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24o
dHJ1ZSk7CkBAIC02MTIsNyArNjE2LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZU5l
d1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLAogCiAgICAg
Y2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCB0cmFuc2l0aW9uLT5p
bmxpbmVDYXBhY2l0eSgpKTsKICAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2ssIHZtLmhlYXApOworICAgICAgICBHQ1NhZmVDb25j
dXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNlbGxMb2NrKCksIHZtLmhlYXAp
OwogICAgICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFkZCh2bSwgdHJhbnNpdGlv
bik7CiAgICAgfQogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKQEAg
LTYzMCw3ICs2MzQsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJh
bnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKUwogICAgIHRyYW5zaXRpb24t
Pm1fcHJvdG90eXBlLnNldCh2bSwgdHJhbnNpdGlvbiwgcHJvdG90eXBlKTsKIAogICAgIFByb3Bl
cnR5VGFibGUqIHRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
dm0pOwotICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2
bSwgdGFibGUpOworICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxs
TG9jaygpKSwgdm0sIHRhYmxlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0
cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOwogICAgIAogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0
Q29uc2lzdGVuY3koKTsKQEAgLTY0Myw3ICs2NDcsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
cgogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7
CiAKICAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0
cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW4o
aG9sZExvY2sodHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgICAgIHRy
YW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAgICAg
ICAgIAogICAgICAgICBzdHJ1Y3R1cmUgPSB0cmFuc2l0aW9uOwpAQCAtNjY1LDcgKzY2OSw3IEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3RpCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAogICAgIFByb3BlcnR5VGFibGUqIHRhYmxl
ID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgIHRyYW5z
aXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAg
IHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0sIHRh
YmxlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zm
c2V0KCkpOwogICAgIHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlLaW5kKGtpbmQpOwogICAgIHRy
YW5zaXRpb24tPnNldEhhc0JlZW5EaWN0aW9uYXJ5KHRydWUpOwpAQCAtNzAxLDEyICs3MDUsMTIg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRh
a2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKLSAgICAvLyBUaGlzIG11
c3QgYWx3YXlzIHJldHVybiBhIHByb3BlcnR5IHRhYmxlLiBJdCBjYW4ndCByZXR1cm4gbnVsbC4K
LSAgICBQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBtdXN0IGFsd2F5cyByZXR1cm4gYSBwcm9wZXJ0eSB0YWJsZS4gSXQg
Y2FuJ3QgcmV0dXJuIG51bGwuCisgICAgUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gcHJvcGVydHlU
YWJsZVVuc2FmZU9yTnVsbCgpOwogICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgaWYgKGlzUGlu
bmVkUHJvcGVydHlUYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+Y29weSh2bSwg
cmVzdWx0LT5zaXplKCkgKyAxKTsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygp
KTsKICAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtNzQzLDEwICs3NDcsMTAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgTm8KICAgICAgICAgLy8gdGFibGUgZG9lc24ndCBrbm93IGhvdyB0byB0YWtlIGludG8gYWNj
b3VudCBzdWNoIHdob2xlc2FsZSBlZGl0cy4KIAogICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKTsKLSAgICAgICAg
dHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZyhob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2
bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNoaW5nKGhvbGRMb2NrKHRy
YW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUpOwogICAgICAgICB0cmFuc2l0aW9uLT5z
ZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOwogICAgICAgICAKLSAgICAg
ICAgdGFibGUgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIHRh
YmxlID0gdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCh0YWJsZSk7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqdGFibGUp
IHsKICAgICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVydGllcyh0cmFuc2l0
aW9uS2luZCkpCkBAIC03NjEsMTQgKzc2NSwxNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uU2xvdyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBObwog
ICAgIH0KICAgICAKICAgICBpZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXMo
dHJhbnNpdGlvbktpbmQpCi0gICAgICAgICYmICF0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JO
dWxsKCktPmlzRW1wdHkoKSkKKyAgICAgICAgJiYgIXRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVV
bnNhZmVPck51bGwoKS0+aXNFbXB0eSgpKQogICAgICAgICB0cmFuc2l0aW9uLT5zZXRIYXNSZWFk
T25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKHRydWUpOwogICAgIAog
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIFByb3BlcnR5VGFi
bGUqIHRhYmxlID0gdHJhbnNpdGlvbi0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7Ci0gICAgICAg
IHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUp
OworICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+Y2VsbExvY2so
KSksIHZtLCB0YWJsZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhzdHJ1Y3R1cmUtPm1fbG9jayk7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
c3RydWN0dXJlLT5jZWxsTG9jaygpKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25U
YWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KIApAQCAtODIwLDE0ICs4MjQsMTQgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiB2bSwg
SlNPYmplY3QqIG9iamVjdCkKICAgICBBU1NFUlQoaXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VS
VChvYmplY3QtPnN0cnVjdHVyZSh2bSkgPT0gdGhpcyk7CiAgICAgCi0gICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJl
bnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhlYXApOwogICAgIAogICAgIG9i
amVjdC0+c2V0U3RydWN0dXJlSUREaXJlY3RseShudWtlKGlkKCkpKTsKICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ID0gdGhp
cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnko
KSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwo
KTsKKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JO
dWxsKCk7CiAgICAgICAgIEFTU0VSVCh0YWJsZSk7CiAKICAgICAgICAgc2l6ZV90IHByb3BlcnR5
Q291bnQgPSB0YWJsZS0+c2l6ZSgpOwpAQCAtODQxLDE0ICs4NDUsMTQgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiB2bSwgSlNPYmplY3QqIG9i
amVjdCkKICAgICAgICAgYXV0byBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwogICAgICAgICBmb3Ig
KFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlciwgKytpKSB7CiAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvYmplY3QtPmdldERp
cmVjdChpdGVyLT5vZmZzZXQpOwotICAgICAgICAgICAgb2Zmc2V0ID0gaXRlci0+b2Zmc2V0ID0g
b2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAg
ICBvZmZzZXQgPSBpdGVyLT5vZmZzZXQgPSBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBpbmxp
bmVDYXBhY2l0eSgpKTsKICAgICAgICAgfQogICAgICAgICBzZXRNYXhPZmZzZXQodm0sIG9mZnNl
dCk7CiAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9uT2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNldCk7
CiAgICAgICAgIAogICAgICAgICAvLyBDb3BpZXMgaW4gb3VyIHZhbHVlcyB0byB0aGVpciBjb21w
YWN0ZWQgbG9jYXRpb25zLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVy
dHlDb3VudDsgaSsrKQotICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZv
clByb3BlcnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkpLCB2YWx1ZXNbaV0pOworICAgICAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIGlu
bGluZUNhcGFjaXR5KCkpLCB2YWx1ZXNbaV0pOwogCiAgICAgICAgIHRhYmxlLT5jbGVhckRlbGV0
ZWRPZmZzZXRzKCk7CiAKQEAgLTg5NCwxOSArODk4LDE5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAg
ICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW4oY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQordm9pZCBTdHJ1Y3R1cmU6OnBp
bihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRh
YmxlKQogewogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZSh0cnVlKTsKICAgICBzZXRQcm9w
ZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAgICAgY2xlYXJQcmV2aW91c0lEKCk7Ci0gICAgbV90cmFu
c2l0aW9uUHJvcGVydHlOYW1lID0gbnVsbHB0cjsKKyAgICBzZXRUcmFuc2l0aW9uUHJvcGVydHlO
YW1lKGxvY2tlciwgbnVsbHB0cik7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5n
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKK3Zv
aWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5nKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIs
IFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0
eVRhYmxlKHRydWUpOwogICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKLSAgICBtX3Ry
YW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSBudWxscHRyOworICAgIHNldFRyYW5zaXRpb25Qcm9wZXJ0
eU5hbWUobG9ja2VyLCBudWxscHRyKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFy
ZURhdGEoVk0mIHZtKQpAQCAtOTE0LDcgKzkxOCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6YWxsb2Nh
dGVSYXJlRGF0YShWTSYgdm0pCiAgICAgQVNTRVJUKCFoYXNSYXJlRGF0YSgpKTsKICAgICBTdHJ1
Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKHZtLCBw
cmV2aW91c0lEKCkpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisjaWYgQ1BVKEFERFJF
U1M2NCkKKyAgICBtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhLnNldFBvaW50
ZXIocmFyZURhdGEpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHJhcmVEYXRhKTsK
KyNlbHNlCiAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlzLCByYXJlRGF0YSk7
CisjZW5kaWYKICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CiB9CiAKQEAgLTkyOCw3ICs5Mzcs
NyBAQCBXYXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRX
YXRjaHBvaW50U2V0KFZNJiB2bSwgUHJvcGVydAogICAgIAogICAgIGlmICghaGFzUmFyZURhdGEo
KSkKICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7Ci0gICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxM
b2NrKCkpOwogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMtPnJhcmVEYXRh
KCk7CiAgICAgaWYgKCFyYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzKSB7CiAg
ICAgICAgIHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMgPQpAQCAtOTk4LDcg
KzEwMDcsNyBAQCBQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyOjp+UHJvcGVydHlNYXBT
dGF0aXN0aWNzRXhpdExvZ2dlcigpCiAKIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiB2bSkKIHsKLSAgICBpZiAoUHJvcGVydHlUYWJsZSog
dGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpCisgICAgaWYgKFByb3BlcnR5VGFibGUqIHRh
YmxlID0gcHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKQogICAgICAgICByZXR1cm4gUHJvcGVy
dHlUYWJsZTo6Y2xvbmUodm0sICp0YWJsZSk7CiAgICAgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0g
ZmFsc2U7CiAgICAgcmV0dXJuIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSh2bSwgc2V0UHJvcGVy
dHlUYWJsZSk7CkBAIC0xMDM4LDE0ICsxMDQ3LDE0IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVy
ZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmli
CiB7CiAgICAgcmV0dXJuIGFkZDxTaG91bGRQaW46Ok5vPigKICAgICAgICAgdm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywKLSAgICAgICAgW3RoaXMsICZ2bV0gKGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZz
ZXQpIHsKKyAgICAgICAgW3RoaXMsICZ2bV0oY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExv
Y2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKICAg
ICAgICAgICAgIHNldE1heE9mZnNldCh2bSwgbmV3TWF4T2Zmc2V0KTsKICAgICAgICAgfSk7CiB9
CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gcmVtb3ZlPFNob3VsZFBpbjo6Tm8+KHZtLCBw
cm9wZXJ0eU5hbWUsIFt0aGlzLCAmdm1dIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIm
LCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgcmV0
dXJuIHJlbW92ZTxTaG91bGRQaW46Ok5vPih2bSwgcHJvcGVydHlOYW1lLCBbdGhpcywgJnZtXShj
b25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3Bl
cnR5T2Zmc2V0IG5ld01heE9mZnNldCkgewogICAgICAgICBzZXRNYXhPZmZzZXQodm0sIG5ld01h
eE9mZnNldCk7CiAgICAgfSk7CiB9CkBAIC0xMTE2LDI1ICsxMTI1LDIxIEBAIHZvaWQgU3RydWN0
dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIAotICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodGhpc09iamVjdC0+bV9sb2NrKTsKKyAgICBDb25j
dXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKICAgICAK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dsb2JhbE9iamVjdCk7Ci0gICAgaWYg
KCF0aGlzT2JqZWN0LT5pc09iamVjdCgpKQotICAgICAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZFBy
b3RvdHlwZUNoYWluLmNsZWFyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fcHJvdG90eXBlKTsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbik7Ci0gICAgfQotICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fcHJldmlvdXNPclJhcmVEYXRhKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3Byb3RvdHlwZSk7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0
aGlzT2JqZWN0LT5jYWNoZWRQcm90b3R5cGVDaGFpbigpKTsKKyAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKHRoaXNPYmplY3QtPnByZXZpb3VzT3JSYXJlRGF0YSgpKTsKIAogICAgIGlmICh0
aGlzT2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSB8fCB0aGlzT2JqZWN0LT5wcm90ZWN0
UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZygpKSB7CiAgICAgICAgIC8vIE5PVEU6IFRo
aXMgY2FuIGludGVybGVhdmUgaW4gcGluKCksIGluIHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51
bGwgcHJvcGVydHkgdGFibGUuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4g
dGhlIGJhcnJpZXIgd2lsbCBmaXJlIGFuZCB3ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzT2JqZWN0LT5wcm9wZXJ0eVRhYmxl
VW5zYWZlT3JOdWxsKCkpOwogICAgIH0gZWxzZSBpZiAodmlzaXRvci5pc0FuYWx5emluZ0hlYXAo
KSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5z
YWZlKTsKLSAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCi0g
ICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOworICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXNPYmplY3QtPnByb3BlcnR5VGFibGVVbnNh
ZmVPck51bGwoKSk7CisgICAgZWxzZSBpZiAodGhpc09iamVjdC0+cHJvcGVydHlUYWJsZVVuc2Fm
ZU9yTnVsbCgpKQorICAgICAgICB0aGlzT2JqZWN0LT5jbGVhclByb3BlcnR5VGFibGUoKTsKIH0K
IAogYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCkBAIC0xMjkwLDcgKzEy
OTUsNyBAQCBib29sIFN0cnVjdHVyZTo6Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZN
JiB2bSkgY29uc3QKICAgICBpZiAoIXRoaXMtPmNhbkNhY2hlT3duS2V5cygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4gPSBtX2Nh
Y2hlZFByb3RvdHlwZUNoYWluLmdldCgpOworICAgIFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVD
aGFpbiA9IGNhY2hlZFByb3RvdHlwZUNoYWluKCk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZUNoYWlu
KTsKICAgICBTdHJ1Y3R1cmVJRCogY3VycmVudFN0cnVjdHVyZUlEID0gc3RydWN0dXJlQ2hhaW4t
PmhlYWQoKTsKICAgICB3aGlsZSAodHJ1ZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAppbmRleCA1MmNkM2M3MWQ5MjBmMmY4YTk3YjQ2MGI5MGUwZWM3MGQ1ZDcx
MWFmLi4xMmU3NjQ5MDcyNmQ4ODkxNmYzNjlkMmIwMjE1YjI2NTk3NDM4NTJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaApAQCAtNDIsNiArNDIsNyBAQAogI2lu
Y2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJXcml0ZUJhcnJpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBhY3RQb2ludGVy
VHVwbGUuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdURiB7
CkBAIC0yNTgsOSArMjU5LDE4IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGVJbmZvKCkuZ2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmUoKTsKICAgICB9CisKKyAgICBUeXBlSW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzIG91
dE9mTGluZVR5cGVGbGFncygpIGNvbnN0CisgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAg
ICAgIHJldHVybiBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUudHlw
ZSgpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lVHlwZUZsYWdzOworI2VuZGlm
CisgICAgfQogICAgIAogICAgIC8vIFR5cGUgYWNjZXNzb3JzLgotICAgIFR5cGVJbmZvIHR5cGVJ
bmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdz
KTsgfQorICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnR5cGVJ
bmZvKG91dE9mTGluZVR5cGVGbGFncygpKTsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7
IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KIAogICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlz
dG9yeSgpICYgQWxsV3JpdGFibGVBcnJheVR5cGVzOyB9CkBAIC0zMTUsMjQgKzMyNSwyNCBAQCBj
bGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAgICBib29sIGhh
c1JhcmVEYXRhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpc1JhcmVEYXRhKG1fcHJl
dmlvdXNPclJhcmVEYXRhLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGlzUmFyZURhdGEocHJldmlv
dXNPclJhcmVEYXRhKCkpOwogICAgIH0KIAogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0
YSgpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KG1fcHJldmlvdXNPclJhcmVEYXRhLmdl
dCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4ocHJl
dmlvdXNPclJhcmVEYXRhKCkpOwogICAgIH0KIAogICAgIGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRh
KiByYXJlRGF0YSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHJ1Y3R1cmVSYXJlRGF0YSo+KG1f
cHJldmlvdXNPclJhcmVEYXRhLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IFN0cnVjdHVyZVJhcmVEYXRhKj4ocHJldmlvdXNPclJhcmVEYXRhKCkpOwogICAgIH0KIAog
ICAgIGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YUNvbmN1cnJlbnRseSgpIGNvbnN0
CiAgICAgewotICAgICAgICBKU0NlbGwqIGNlbGwgPSBtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQo
KTsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gcHJldmlvdXNPclJhcmVEYXRhKCk7CiAgICAgICAg
IGlmIChpc1JhcmVEYXRhKGNlbGwpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0
cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzQ4
LDkgKzM1OCw5IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAg
IFN0cnVjdHVyZSogcHJldmlvdXNJRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgIC8vIFRoaXMgaXMgc28g
d3JpdHRlbiBiZWNhdXNlIGl0J3MgdXNlZCBjb25jdXJyZW50bHkuIFdlIG9ubHkgbG9hZCBmcm9t
IG1fcHJldmlvdXNPclJhcmVEYXRhCisgICAgICAgIC8vIFRoaXMgaXMgc28gd3JpdHRlbiBiZWNh
dXNlIGl0J3MgdXNlZCBjb25jdXJyZW50bHkuIFdlIG9ubHkgbG9hZCBmcm9tIG1faW5saW5lQ2Fw
YWNpdHlBbmRQcmV2aW91c09yUmFyZURhdGEKICAgICAgICAgLy8gb25jZSwgYW5kIHRoaXMgbG9h
ZCBpcyBndWFyYW50ZWVkIGF0b21pYy4KLSAgICAgICAgSlNDZWxsKiBjZWxsID0gbV9wcmV2aW91
c09yUmFyZURhdGEuZ2V0KCk7CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHByZXZpb3VzT3JSYXJl
RGF0YSgpOwogICAgICAgICBpZiAoaXNSYXJlRGF0YShjZWxsKSkKICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpLT5wcmV2aW91c0lEKCk7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmUqPihjZWxsKTsKQEAgLTM1OSw3ICsz
NjksMTEgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQoKSBjb25zdAogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0
KQorICAgICAgICB1aW50MTZfdCBtYXhPZmZzZXQgPSBtX21heE9mZnNldEFuZENhY2hlZFByb3Rv
dHlwZUNoYWluLnR5cGUoKTsKKyNlbHNlCiAgICAgICAgIHVpbnQxNl90IG1heE9mZnNldCA9IG1f
bWF4T2Zmc2V0OworI2VuZGlmCiAgICAgICAgIGlmIChtYXhPZmZzZXQgPT0gc2hvcnRJbnZhbGlk
T2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAgICAgICAgIGlmICht
YXhPZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKQpAQCAtMzY5LDIyICszODMsNDUgQEAgY2xhc3Mg
U3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIHNldE1heE9mZnNl
dChWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGlmIChvZmZz
ZXQgPT0gaW52YWxpZE9mZnNldCkKLSAgICAgICAgICAgIG1fbWF4T2Zmc2V0ID0gc2hvcnRJbnZh
bGlkT2Zmc2V0OwotICAgICAgICBlbHNlIGlmIChvZmZzZXQgPCB1c2VSYXJlRGF0YUZsYWcgJiYg
b2Zmc2V0IDwgc2hvcnRJbnZhbGlkT2Zmc2V0KQotICAgICAgICAgICAgbV9tYXhPZmZzZXQgPSBv
ZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKG1fbWF4T2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykK
KyAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVH
Q1RocmVhZCgpKTsKKyAgICAgICAgYXV0byBjb21taXQgPSBbJl0odWludDE2X3QgdmFsdWUpIHsK
KyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICAgICAgbV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90
b3R5cGVDaGFpbi5zZXRUeXBlKHZhbHVlKTsKKyNlbHNlCisgICAgICAgICAgICBtX21heE9mZnNl
dCA9IHZhbHVlOworI2VuZGlmCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKG9mZnNldCA9PSBp
bnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBjb21taXQoc2hvcnRJbnZhbGlkT2Zmc2V0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAob2Zmc2V0IDwgdXNl
UmFyZURhdGFGbGFnICYmIG9mZnNldCA8IHNob3J0SW52YWxpZE9mZnNldCkgeworICAgICAgICAg
ICAgY29tbWl0KG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNpZiBD
UFUoQUREUkVTUzY0KQorICAgICAgICB1aW50MTZfdCBtYXhPZmZzZXQgPSBtX21heE9mZnNldEFu
ZENhY2hlZFByb3RvdHlwZUNoYWluLnR5cGUoKTsKKyNlbHNlCisgICAgICAgIHVpbnQxNl90IG1h
eE9mZnNldCA9IG1fbWF4T2Zmc2V0OworI2VuZGlmCisgICAgICAgIGlmIChtYXhPZmZzZXQgPT0g
dXNlUmFyZURhdGFGbGFnKSB7CiAgICAgICAgICAgICByYXJlRGF0YSgpLT5tX21heE9mZnNldCA9
IG9mZnNldDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBlbnN1cmVSYXJlRGF0YSh2bSkt
Pm1fbWF4T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKLSAgICAgICAgICAgIG1fbWF4T2Zmc2V0ID0gdXNlUmFyZURhdGFGbGFnOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlUmFyZURhdGEodm0pLT5tX21h
eE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAg
ICAgY29tbWl0KHVzZVJhcmVEYXRhRmxhZyk7CiAgICAgfQogCiAgICAgUHJvcGVydHlPZmZzZXQg
dHJhbnNpdGlvbk9mZnNldCgpIGNvbnN0CiAgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAg
ICAgIHVpbnQxNl90IHRyYW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFz
c0luZm8udHlwZSgpOworI2Vsc2UKICAgICAgICAgdWludDE2X3QgdHJhbnNpdGlvbk9mZnNldCA9
IG1fdHJhbnNpdGlvbk9mZnNldDsKKyNlbmRpZgogICAgICAgICBpZiAodHJhbnNpdGlvbk9mZnNl
dCA9PSBzaG9ydEludmFsaWRPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNl
dDsKICAgICAgICAgaWYgKHRyYW5zaXRpb25PZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKQpAQCAt
Mzk0LDE3ICs0MzEsMzYgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7
CiAKICAgICB2b2lkIHNldFRyYW5zaXRpb25PZmZzZXQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCiAgICAgewotICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCi0gICAg
ICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSBzaG9ydEludmFsaWRPZmZzZXQ7Ci0gICAgICAg
IGVsc2UgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFs
aWRPZmZzZXQpCi0gICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSBvZmZzZXQ7Ci0gICAg
ICAgIGVsc2UgaWYgKG1fdHJhbnNpdGlvbk9mZnNldCA9PSB1c2VSYXJlRGF0YUZsYWcpCisgICAg
ICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJl
YWQoKSk7CisgICAgICAgIGF1dG8gY29tbWl0ID0gWyZdKHVpbnQxNl90IHZhbHVlKSB7CisjaWYg
Q1BVKEFERFJFU1M2NCkKKyAgICAgICAgICAgIG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5m
by5zZXRUeXBlKHZhbHVlKTsKKyNlbHNlCisgICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQg
PSB2YWx1ZTsKKyNlbmRpZgorICAgICAgICB9OworCisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52
YWxpZE9mZnNldCkgeworICAgICAgICAgICAgY29tbWl0KHNob3J0SW52YWxpZE9mZnNldCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJh
cmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAg
IGNvbW1pdChvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWYgQ1BV
KEFERFJFU1M2NCkKKyAgICAgICAgdWludDE2X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNp
dGlvbk9mZnNldEFuZENsYXNzSW5mby50eXBlKCk7CisjZWxzZQorICAgICAgICB1aW50MTZfdCB0
cmFuc2l0aW9uT2Zmc2V0ID0gbV90cmFuc2l0aW9uT2Zmc2V0OworI2VuZGlmCisgICAgICAgIGlm
ICh0cmFuc2l0aW9uT2Zmc2V0ID09IHVzZVJhcmVEYXRhRmxhZykgewogICAgICAgICAgICAgcmFy
ZURhdGEoKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0
OwotICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIG1fdHJh
bnNpdGlvbk9mZnNldCA9IHVzZVJhcmVEYXRhRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQorCisgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0
ID0gb2Zmc2V0OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBjb21t
aXQodXNlUmFyZURhdGFGbGFnKTsKICAgICB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQgb3V0T2ZM
aW5lQ2FwYWNpdHkoUHJvcGVydHlPZmZzZXQgbWF4T2Zmc2V0KQpAQCAtNDQwLDE3ICs0OTYsMTgg
QEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lU2l6ZShtYXhPZmZzZXQoKSk7CiAgICAgfQotICAgIGJvb2wgaGFz
SW5saW5lU3RvcmFnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISFtX2lubGluZUNh
cGFjaXR5OwotICAgIH0KKyAgICBib29sIGhhc0lubGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVy
biAhIWlubGluZUNhcGFjaXR5KCk7IH0KICAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIGNv
bnN0CiAgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50OF90PihtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhLnR5cGUoKSk7
CisjZWxzZQogICAgICAgICByZXR1cm4gbV9pbmxpbmVDYXBhY2l0eTsKKyNlbmRpZgogICAgIH0K
ICAgICB1bnNpZ25lZCBpbmxpbmVTaXplKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBz
dGQ6Om1pbjx1bnNpZ25lZD4obWF4T2Zmc2V0KCkgKyAxLCBtX2lubGluZUNhcGFjaXR5KTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihtYXhPZmZzZXQoKSArIDEsIGlubGluZUNh
cGFjaXR5KCkpOwogICAgIH0KICAgICB1bnNpZ25lZCB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpIGNv
bnN0CiAgICAgewpAQCAtNDYyLDEyICs1MTksMTIgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDog
cHVibGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICByZXR1cm4gSlNDOjppc1ZhbGlkT2Zmc2V0
KG9mZnNldCkKICAgICAgICAgICAgICYmIG9mZnNldCA8PSBtYXhPZmZzZXQoKQotICAgICAgICAg
ICAgJiYgKG9mZnNldCA8IG1faW5saW5lQ2FwYWNpdHkgfHwgb2Zmc2V0ID49IGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KTsKKyAgICAgICAgICAgICYmIChvZmZzZXQgPCBzdGF0aWNfY2FzdDxpbnQ+KGlu
bGluZUNhcGFjaXR5KCkpIHx8IG9mZnNldCA+PSBmaXJzdE91dE9mTGluZU9mZnNldCk7CiAgICAg
fQogCiAgICAgYm9vbCBoaWphY2tzSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGlzVHlwZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUp
OworICAgICAgICByZXR1cm4gaXNUeXBlZFZpZXcoY2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSBjb25zdApAQCAtNTM1LDcgKzU5MiwxNCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJs
aWMgSlNDZWxsIHsKIAogICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9i
amVjdCosIFZNJiwgSlNTdHJpbmcqIHZhbHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJpbmdUYWdTeW1i
b2xTbG90KTsKIAotICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gbV9jbGFzc0luZm87IH0KKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
CisgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25P
ZmZzZXRBbmRDbGFzc0luZm8ucG9pbnRlcigpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fY2xh
c3NJbmZvOworI2VuZGlmCisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJ
RE9mZnNldCgpCiAgICAgewpAQCAtNTUyLDI5ICs2MTYsMzkgQEAgY2xhc3MgU3RydWN0dXJlIGZp
bmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3Ry
dWN0dXJlLCBtX2dsb2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBj
bGFzc0luZm9PZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDbGFzc0luZm8o
KQogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZSwgbV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKTsKKyNlbHNlCiAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7Cisj
ZW5kaWYKICAgICB9Ci0gICAgICAgIAorCiAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ01v
ZGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRleGluZ01v
ZGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBwdHJk
aWZmX3QgcHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCi0gICAgewotICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9
CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGlubGluZUNhcGFjaXR5T2Zmc2V0KCkKKyNpZiBDUFUo
TElUVExFX0VORElBTikKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5lQ2FwYWNp
dHkoKQogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFN0cnVjdHVyZSwgbV9pbmxpbmVDYXBhY2l0eUFuZFByZXZpb3VzT3JSYXJlRGF0YSkg
KyBDb21wYWN0UG9pbnRlclR1cGxlPEpTQ2VsbCosIHVpbnQxNl90Pjo6b2Zmc2V0T2ZUeXBlKCk7
CisjZWxzZQogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9pbmxp
bmVDYXBhY2l0eSk7CisjZW5kaWYKKwogICAgIH0KKyNlbmRpZgogCi0gICAgc3RhdGljIHB0cmRp
ZmZfdCBwcmV2aW91c09yUmFyZURhdGFPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZQcmV2aW91c09yUmFyZURhdGEoKQogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9pbmxpbmVDYXBhY2l0eUFu
ZFByZXZpb3VzT3JSYXJlRGF0YSk7CisjZWxzZQogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZSwgbV9wcmV2aW91c09yUmFyZURhdGEpOworI2VuZGlmCiAgICAgfQogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJik7CkBAIC02NTMsMTIgKzcy
NywxNCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAg
ICBzdGF0aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRlcihQcmludFN0cmVhbSYpOwogICAgIAotICAg
IENvbmN1cnJlbnRKU0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KLQotICAgIHVuc2ln
bmVkIHByb3BlcnR5SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlIYXNoOyB9Ci0KICAg
ICBzdGF0aWMgYm9vbCBzaG91bGRDb252ZXJ0VG9Qb2x5UHJvdG8oY29uc3QgU3RydWN0dXJlKiBh
LCBjb25zdCBTdHJ1Y3R1cmUqIGIpOwogCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHRyYW5zaXRp
b25Qcm9wZXJ0eU5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0
aW9uVGhyZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVHQ1RocmVhZCgpKTsKKyAgICAgICAgcmV0dXJu
IG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKTsKKyAgICB9CisKICAgICBzdHJ1Y3QgUHJv
cGVydHlIYXNoRW50cnkgewogICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlOwogICAgICAg
ICBjb25zdCBIYXNoVGFibGVWYWx1ZSogdmFsdWU7CkBAIC02NjgsNiArNzQ0LDI2IEBAIGNsYXNz
IFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CiAKIHByaXZhdGU6CisgICAgYm9vbCBydWxlT3V0VW5zZWVuUHJvcGVydHlIYXNoKFVuaXF1
ZWRTdHJpbmdJbXBsKikgY29uc3Q7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAvLyBBcyBhIHBy
b3BlcnR5SGFzaCwgNjRiaXQgZW52aXJvbm1lbnQgdXNlcyAxNmJpdCBwcm9wZXJ0eS1oYXNoICsg
c2VlblByb3BlcnRpZXMgc2V0LgorICAgIHVpbnRwdHJfdCBwcm9wZXJ0eUhhc2goKSBjb25zdCB7
IHJldHVybiBtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhLmRhdGEoKTsgfQor
I2Vsc2UKKyAgICB1aW50MzJfdCBwcm9wZXJ0eUhhc2goKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnR5SGFzaDsgfQorI2VuZGlmCisgICAgdWludHB0cl90IHNlZW5Qcm9wZXJ0aWVzKCkgY29uc3Q7
CisgICAgdm9pZCBhZGRQcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydHkodW5zaWduZWQsIFVuaXF1
ZWRTdHJpbmdJbXBsKik7CisKKyAgICB2b2lkIHNldFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCogdHJhbnNpdGlvblByb3BlcnR5
TmFtZSkKKyAgICB7CisgICAgICAgIG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9IHRyYW5zaXRp
b25Qcm9wZXJ0eU5hbWU7CisgICAgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB0cmFuc2l0aW9u
UHJvcGVydHlOYW1lQ29uY3VycmVudGx5KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjZWxsTG9j
aygpLmlzTG9ja2VkKCkpOworICAgICAgICByZXR1cm4gbV90cmFuc2l0aW9uUHJvcGVydHlOYW1l
LmdldCgpOworICAgIH0KKwogICAgIHR5cGVkZWYgZW51bSB7IAogICAgICAgICBOb25lRGljdGlv
bmFyeUtpbmQgPSAwLAogICAgICAgICBDYWNoZWREaWN0aW9uYXJ5S2luZCA9IDEsCkBAIC02ODQs
NiArNzgwLDcgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAg
e1wKICAgICAgICAgbV9iaXRGaWVsZCAmPSB+KHNfIyNsb3dlck5hbWUjI01hc2sgPDwgb2Zmc2V0
KTtcCiAgICAgICAgIG1fYml0RmllbGQgfD0gKG5ld1ZhbHVlICYgc18jI2xvd2VyTmFtZSMjTWFz
aykgPDwgb2Zmc2V0O1wKKyAgICAgICAgQVNTRVJUKG5ld1ZhbHVlID09IGxvd2VyTmFtZSgpKTtc
CiAgICAgfQogCiAgICAgREVGSU5FX0JJVEZJRUxEKERpY3Rpb25hcnlLaW5kLCBkaWN0aW9uYXJ5
S2luZCwgRGljdGlvbmFyeUtpbmQsIDIsIDApOwpAQCAtNjkxLDE4ICs3ODgsMTggQEAgY2xhc3Mg
U3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJv
b2wsIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMsIEhhc0dldHRlclNldHRlclByb3BlcnRpZXMs
IDEsIDMpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCBIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJv
cGVydGllc0V4Y2x1ZGluZ1Byb3RvLCAxLCA0KTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
aXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uLCBJc1F1aWNrUHJvcGVy
dHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24sIDEsIDUpOwotICAgIERFRklORV9CSVRGSUVM
RCh1bnNpZ25lZCwgdHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcywgVHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcywgMTQsIDYpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRQcmV2
ZW50RXh0ZW5zaW9ucywgRGlkUHJldmVudEV4dGVuc2lvbnMsIDEsIDIwKTsKLSAgICBERUZJTkVf
QklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlkVHJhbnNpdGlvbiwgMSwgMjEpOwotICAg
IERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCwgU3RhdGljUHJv
cGVydGllc1JlaWZpZWQsIDEsIDIyKTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzQmVl
bkZsYXR0ZW5lZEJlZm9yZSwgSGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSwgMSwgMjMpOwotICAgIERF
RklORV9CSVRGSUVMRChib29sLCBoYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCBIYXND
dXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCAxLCAyNCk7Ci0gICAgREVGSU5FX0JJVEZJRUxE
KGJvb2wsIGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCBEaWRXYXRjaEludGVybmFsUHJvcGVy
dGllcywgMSwgMjUpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCB0cmFuc2l0aW9uV2F0Y2hw
b2ludElzTGlrZWx5VG9CZUZpcmVkLCBUcmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZp
cmVkLCAxLCAyNik7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc0JlZW5EaWN0aW9uYXJ5
LCBIYXNCZWVuRGljdGlvbmFyeSwgMSwgMjcpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBw
cm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZywgUHJvdGVjdFByb3BlcnR5VGFi
bGVXaGlsZVRyYW5zaXRpb25pbmcsIDEsIDI4KTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
aGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvLCBIYXNVbmRl
cnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8sIDEsIDI5KTsKLSAgICBE
RUZJTkVfQklURklFTEQoYm9vbCwgaXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwgSXNQcm9w
ZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwgMSwgMzApOworICAgIERFRklORV9CSVRGSUVMRCh1bnNp
Z25lZCwgdHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcywgVHJhbnNpdGlvblByb3BlcnR5QXR0
cmlidXRlcywgOCwgNik7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFByZXZlbnRFeHRl
bnNpb25zLCBEaWRQcmV2ZW50RXh0ZW5zaW9ucywgMSwgMTQpOworICAgIERFRklORV9CSVRGSUVM
RChib29sLCBkaWRUcmFuc2l0aW9uLCBEaWRUcmFuc2l0aW9uLCAxLCAxNSk7CisgICAgREVGSU5F
X0JJVEZJRUxEKGJvb2wsIHN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkLCBTdGF0aWNQcm9wZXJ0aWVz
UmVpZmllZCwgMSwgMTYpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNCZWVuRmxhdHRl
bmVkQmVmb3JlLCBIYXNCZWVuRmxhdHRlbmVkQmVmb3JlLCAxLCAxNyk7CisgICAgREVGSU5FX0JJ
VEZJRUxEKGJvb2wsIGhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMsIEhhc0N1c3RvbUdl
dHRlclNldHRlclByb3BlcnRpZXMsIDEsIDE4KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
ZGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCAx
LCAxOSk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHRyYW5zaXRpb25XYXRjaHBvaW50SXNM
aWtlbHlUb0JlRmlyZWQsIFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0JlRmlyZWQsIDEs
IDIwKTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzQmVlbkRpY3Rpb25hcnksIEhhc0Jl
ZW5EaWN0aW9uYXJ5LCAxLCAyMSk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHByb3RlY3RQ
cm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCBQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxl
VHJhbnNpdGlvbmluZywgMSwgMjIpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNVbmRl
cnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8sIEhhc1VuZGVyc2NvcmVQ
cm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgMSwgMjMpOworICAgIERFRklORV9C
SVRGSUVMRChib29sLCBpc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uLCBJc1Byb3BlcnR5RGVs
ZXRpb25UcmFuc2l0aW9uLCAxLCAyNCk7CiAKICAgICBzdGF0aWNfYXNzZXJ0KHNfYml0V2lkdGhP
ZlRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMgPD0gc2l6ZW9mKFRyYW5zaXRpb25Qcm9wZXJ0
eUF0dHJpYnV0ZXMpICogOCk7CiAKQEAgLTcyMSw3ICs4MTgsNyBAQCBjbGFzcyBTdHJ1Y3R1cmUg
ZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBhbmQgdGhlIGxpc3Qgb2Ygc3RydWN0dXJl
cyB0aGF0IHdlIHZpc2l0ZWQgYmVmb3JlIHdlIGdvdCB0byBpdC4gSWYgaXQgcmV0dXJucyBhCiAg
ICAgLy8gbm9uLW51bGwgc3RydWN0dXJlLCBpdCB3aWxsIGFsc28gbG9jayB0aGUgc3RydWN0dXJl
IHRoYXQgaXQgcmV0dXJuczsgaXQgaXMgeW91ciBqb2IKICAgICAvLyB0byB1bmxvY2sgaXQuCi0g
ICAgdm9pZCBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3Ry
dWN0dXJlKiwgOD4mIHN0cnVjdHVyZXMsIFN0cnVjdHVyZSomLCBQcm9wZXJ0eVRhYmxlKiYpOwor
ICAgIHZvaWQgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oVmVjdG9yPHN0
ZDo6cGFpcjxTdHJ1Y3R1cmUqLCBVbmlxdWVkU3RyaW5nSW1wbCo+LCA4PiYgc3RydWN0dXJlcywg
U3RydWN0dXJlKiYsIFByb3BlcnR5VGFibGUqJik7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5k
LCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsK
IApAQCAtNzM4LDcgKzgzNSw3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewogICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwg
d2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgogICAgIFByb3BlcnR5VGFibGUqIGVu
c3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KFZNJiB2bSkKICAgICB7Ci0gICAgICAgIGlmIChQ
cm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCkpCisgICAg
ICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxs
KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICBpZiAoIXByZXZpb3VzSUQo
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzQ4LDM5ICs4NDUsMzcgQEAgY2xh
c3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBtYXkgZ3Jh
YiB0aGUgbG9jaywgb3Igbm90LiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVy
ZSdzIGxvY2suCiAgICAgUHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVydHlUYWJsZShWTSYgdm0p
CiAgICAgewotICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gbV9wcm9wZXJ0eVRh
YmxlVW5zYWZlLmdldCgpKQorICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gcHJv
cGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgcmV0dXJuIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSh2bSk7CiAgICAgfQogICAgIAot
ICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGVPck51bGwoKSBjb25zdAorICAgIFByb3Bl
cnR5VGFibGUqIHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSBjb25zdAogICAgIHsKKyNpZiBD
UFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gbV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9w
ZXJ0eVRhYmxlVW5zYWZlLnBvaW50ZXIoKTsKKyNlbHNlCiAgICAgICAgIHJldHVybiBtX3Byb3Bl
cnR5VGFibGVVbnNhZmUuZ2V0KCk7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAgLy8gVGhpcyB3
aWxsIGdyYWIgdGhlIGxvY2suIERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jay4KICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVRhYmxlKiBtYXRlcmlhbGl6
ZVByb3BlcnR5VGFibGUoVk0mLCBib29sIHNldFByb3BlcnR5VGFibGUgPSB0cnVlKTsKICAgICAK
ICAgICB2b2lkIHNldFByb3BlcnR5VGFibGUoVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSk7
CisgICAgdm9pZCBjbGVhclByb3BlcnR5VGFibGUoKTsKICAgICAKICAgICBQcm9wZXJ0eVRhYmxl
KiB0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOwogICAgIFByb3BlcnR5VGFi
bGUqIGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYpOwogCiAgICAgdm9pZCBzZXRQcmV2
aW91c0lEKFZNJiwgU3RydWN0dXJlKik7Ci0KLSAgICB2b2lkIGNsZWFyUHJldmlvdXNJRCgpCi0g
ICAgewotICAgICAgICBpZiAoaGFzUmFyZURhdGEoKSkKLSAgICAgICAgICAgIHJhcmVEYXRhKCkt
PmNsZWFyUHJldmlvdXNJRCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ByZXZpb3Vz
T3JSYXJlRGF0YS5jbGVhcigpOwotICAgIH0KKyAgICB2b2lkIGNsZWFyUHJldmlvdXNJRCgpOwog
CiAgICAgaW50IHRyYW5zaXRpb25Db3VudEVzdGltYXRlKCkgY29uc3QKICAgICB7CiAgICAgICAg
IC8vIFNpbmNlIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgaXMgb2Z0ZW4gdGhlIHNhbWUgYXMg
dGhlIGxhc3Qgb2Zmc2V0IChleGNlcHQgaWYgdGhlcmUgYXJlIGRlbGV0ZXMpCiAgICAgICAgIC8v
IHdlIGtlZXAgdGhlIHNpemUgb2YgU3RydWN0dXJlIGRvd24gYnkgbm90IHN0b3JpbmcgYm90aC4K
LSAgICAgICAgcmV0dXJuIG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1f
aW5saW5lQ2FwYWNpdHkpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNl
dChtYXhPZmZzZXQoKSwgaW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1Zh
bGlkKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWlu
LCBKU09iamVjdCogYmFzZSkgY29uc3Q7CkBAIC04MDIsNDggKzg5Nyw4OCBAQCBjbGFzcyBTdHJ1
Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAgICB2b2lkIHN0YXJ0V2F0Y2hp
bmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQ
cm90b3R5cGVDaGFpbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4o
Vk0mLCBTdHJ1Y3R1cmVDaGFpbiopOworCisgICAgdm9pZCBzZXRPdXRPZkxpbmVUeXBlRmxhZ3Mo
VHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFncyk7CisgICAgdm9pZCBzZXRDbGFzc0luZm8oY29u
c3QgQ2xhc3NJbmZvKik7CisgICAgdm9pZCBzZXRJbmxpbmVDYXBhY2l0eSh1aW50OF90KTsKKwor
ICAgIEpTQ2VsbCogcHJldmlvdXNPclJhcmVEYXRhKCkgY29uc3QKKyAgICB7CisjaWYgQ1BVKEFE
RFJFU1M2NCkKKyAgICAgICAgcmV0dXJuIG1faW5saW5lQ2FwYWNpdHlBbmRQcmV2aW91c09yUmFy
ZURhdGEucG9pbnRlcigpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fcHJldmlvdXNPclJhcmVE
YXRhLmdldCgpOworI2VuZGlmCisgICAgfQorCiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19t
YXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19tYXhU
cmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAKICAgICAvLyBUaGVzZSBu
ZWVkIHRvIGJlIHByb3Blcmx5IGFsaWduZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgJ1N0cnVj
dHVyZScKICAgICAvLyBwYXJ0IG9mIHRoZSBvYmplY3QuCiAgICAgU3RydWN0dXJlSURCbG9iIG1f
YmxvYjsKLSAgICBUeXBlSW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzIG1fb3V0T2ZMaW5lVHlwZUZs
YWdzOwogCi0gICAgdWludDhfdCBtX2lubGluZUNhcGFjaXR5OwotCi0gICAgQ29uY3VycmVudEpT
TG9jayBtX2xvY2s7Ci0KLSAgICB1aW50MzJfdCBtX2JpdEZpZWxkOwotCi0gICAgV3JpdGVCYXJy
aWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKLSAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV9wcm90b3R5cGU7CisgICAgLy8gVGhlIHByb3BlcnR5IHRhYmxlIHBvaW50ZXIgc2hv
dWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0Ms
IG1fcHJvcGVydHlUYWJsZVVuc2FmZSBmaWVsZCBwYXJ0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90
aGVyIHRocmVhZC4KKyAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNs
ZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KKyNpZiBDUFUoQUREUkVTUzY0
KQorcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IGNsYXNzSW5mb01hc2sg
PSBDb21wYWN0UG9pbnRlclR1cGxlPGNvbnN0IENsYXNzSW5mbyosIHVpbnQxNl90Pjo6cG9pbnRl
ck1hc2s7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcHJldmlvdXNPclJhcmVEYXRh
TWFzayA9IENvbXBhY3RQb2ludGVyVHVwbGU8SlNDZWxsKiwgdWludDE2X3Q+Ojpwb2ludGVyTWFz
azsKK3ByaXZhdGU6CisgICAgLy8gU3RydWN0dXJlIGlzIG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVu
dGx5IGFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZS4gTW9yZW92ZXIsIFN0cnVjdHVyZSB0ZW5kcyB0
byBiZSBhbGl2ZSBsb25nIQorICAgIC8vIFRoaXMgbW90aXZhdGVzIGV4dHJhIGNvbXBsaWNhdGVk
IGhhY2sgd2hpY2ggb3B0aW1pemVzIHNpemVvZihTdHJ1Y3R1cmUpLgorICAgIC8vCisgICAgLy8g
V2UgY29tYmluZSAxNmJpdCBkYXRhIGFuZCA2NGJpdCBwb2ludGVyIGludG8gb25lIHBvaW50ZXIt
c2l6ZSBmaWVsZCB0byAoMSkgc2F2ZSBtZW1vcnkgd2hpbGUgKDIpIG5vdCBsb3NpbmcgYXRvbWlj
IGxvYWQvc3RvcmUuCisgICAgLy8gVGhlIGtleSBoZXJlIGlzIGFuYWx5emluZyBkYXRhIGFjY2Vz
cyBwYXR0ZXJucyBjYXJlZnVsbHkuIFRoZXkgYXJlIGNhdGVnb3JpZXplZCBpbnRvIHRocmVlIHR5
cGVzLgorICAgIC8vICAgICAxLiBJbW11dGFibGVBZnRlckNvbnN0cnVjdGlvbgorICAgIC8vICAg
ICAyLiBNdXRhYmxlRnJvbUFueVRocmVhZAorICAgIC8vICAgICAzLiBNdXRhYmxlRnJvbU1haW5U
aHJlYWQKKyAgICAvLyAgV2UgYXNzdW1lIHRoYXQgbG9hZGluZyBoYXBwZW5zIGZyb20gYW55IHRo
cmVhZHMuIFVuZGVyIHRoaXMgYXNzdW1wdGlvbiwgTXV0YWJsZUZyb21BbnlUaHJlYWQgKyAoTXV0
YWJsZUZyb21NYWluVGhyZWFkIC8gTXV0YWJsZUZyb21BbnlUaHJlYWQpIGlzIHRoZSBwYWlyIHdo
aWNoIGlzIHJhY3kuCisgICAgLy8gIE90aGVyIHBhaXJzIHdvcmtzIHdlbGwuIFdlIGNhcmVmdWxs
eSBwdXQgYXNzZXJ0aW9ucyB0byBzZXR0ZXJzLCBhbmFseXplIGFjY2VzcyBwYXR0ZXJucyBhbmQg
cGljayBhcHByb3ByaWF0ZSBwYWlycyBpbiBTdHJ1Y3R1cmUgZmllbGRzLgorICAgIENvbXBhY3RQ
b2ludGVyVHVwbGU8UHJvcGVydHlUYWJsZSosIFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3M+
IG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZTsgLy8gSW1tdXRhYmxl
QWZ0ZXJDb25zdHJ1Y3Rpb24obV9vdXRPZkxpbmVUeXBlRmxhZ3MpIGFuZCBNdXRhYmxlRnJvbUFu
eVRocmVhZChtX3Byb3BlcnR5VGFibGVVbnNhZmUpLgorICAgIENvbXBhY3RQb2ludGVyVHVwbGU8
U3RydWN0dXJlQ2hhaW4qLCB1aW50MTZfdD4gbV9tYXhPZmZzZXRBbmRDYWNoZWRQcm90b3R5cGVD
aGFpbjsgLy8gTXV0YWJsZUZyb21NYWluVGhyZWFkKG1fbWF4T2Zmc2V0KSBhbmQgTXV0YWJsZUZy
b21NYWluVGhyZWFkKG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pLgorICAgIENvbXBhY3RQb2ludGVy
VHVwbGU8Y29uc3QgQ2xhc3NJbmZvKiwgdWludDE2X3Q+IG1fdHJhbnNpdGlvbk9mZnNldEFuZENs
YXNzSW5mbzsgLy8gTXV0YWJsZUZyb21NYWluVGhyZWFkKG1fdHJhbnNpdGlvbk9mZnNldCkgYW5k
IEltbXV0YWJsZUFmdGVyQ29uc3RydWN0aW9uKG1fY2xhc3NJbmZvKS4KKyAgICBDb21wYWN0UG9p
bnRlclR1cGxlPEpTQ2VsbCosIHVpbnQxNl90PiBtX2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNP
clJhcmVEYXRhOyAvLyBJbW11dGFibGVBZnRlckNvbnN0cnVjdGlvbihtX2lubGluZUNhcGFjaXR5
KSBhbmQgTXV0YWJsZUZyb21NYWluVGhyZWFkKG1fcHJldmlvdXNPclJhcmVEYXRhKS4KKyAgICBD
b21wYWN0UG9pbnRlclR1cGxlPFVuaXF1ZWRTdHJpbmdJbXBsKiwgdWludDE2X3Q+IG1fcHJvcGVy
dHlIYXNoQW5kU2VlblByb3BlcnRpZXM7IC8vIE11dGFibGVGcm9tTWFpblRocmVhZChtX3Byb3Bl
cnR5SGFzaCkgYW5kIE11dGFibGVGcm9tTWFpblRocmVhZChtX3NlZW5Qcm9wZXJ0aWVzKS4KKwor
ICAgIC8vIDEuIFNldHRpbmcgVW5pcXVlZFN0cmluZ0ltcGwgaGFwcGVucyBvbmx5IGluIHRoZSBt
YWluIHRocmVhZC4gQXQgdGhhdCB0aW1lLCB3ZSBtdXN0IHRha2UgYSBsb2NrLgorICAgIC8vIDIu
IEFjY2Vzc2luZyBVbmlxdWVkU3RyaW5nSW1wbCBmcm9tIHRoZSBtYWluIHRocmVhZCBpcyBPSy4K
KyAgICAvLyAzLiBBY2Nlc3NpbmcgVW5pcXVlZFN0cmluZ0ltcGwgZnJvbSBub24gbWFpbiB0aHJl
YWQgaXMgcmVxdWlyaW5nIGxvY2suCisgICAgc3RhdGljX2Fzc2VydChhbGlnbm9mKFBhY2tlZFJl
ZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4pID09IDEpOworICAgIHN0YXRpY19hc3NlcnQoYWxpZ25v
ZihTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpID09IDEpOworICAgIFBhY2tlZFJlZlB0cjxVbmlx
dWVkU3RyaW5nSW1wbD4gbV90cmFuc2l0aW9uUHJvcGVydHlOYW1lOworI2Vsc2UKKyAgICBUeXBl
SW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzIG1fb3V0T2ZMaW5lVHlwZUZsYWdzIHsgMCB9OworICAg
IHVpbnQ4X3QgbV9pbmxpbmVDYXBhY2l0eSB7IDAgfTsKKyAgICB1aW50MzJfdCBtX3Byb3BlcnR5
SGFzaCB7IDAgfTsKKyAgICB1aW50MTZfdCBtX3RyYW5zaXRpb25PZmZzZXQgeyAwIH07CisgICAg
dWludDE2X3QgbV9tYXhPZmZzZXQgeyAwIH07CisgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFi
bGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKKyAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJ
bmZvIHsgbnVsbHB0ciB9OwogICAgIG11dGFibGUgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWlu
PiBtX2NhY2hlZFByb3RvdHlwZUNoYWluOwotCiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9w
cmV2aW91c09yUmFyZURhdGE7Ci0KKyAgICB1aW50cHRyX3QgbV9zZWVuUHJvcGVydGllcyB7IDAg
fTsKICAgICBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+IG1fdHJhbnNpdGlvblByb3BlcnR5TmFt
ZTsKLQotICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87Ci0KKyNlbmRpZgorICAgIC8v
IEFjY2Vzc2luZyBtX3RyYW5zaXRpb25UYWJsZSBpcyBvbmx5IGFsbG93ZWQgZnJvbSB0aGUgbWFp
biB0aHJlYWQuCiAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIG1fdHJhbnNpdGlvblRhYmxl
OwogCi0gICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlUYWJs
ZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KLSAg
ICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0YWJs
ZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KLSAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4g
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlOworICAgIHVpbnQzMl90IG1fYml0RmllbGQgeyAwIH07CisK
KyAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OworICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3Byb3RvdHlwZTsKIAogICAgIG11dGFibGUgSW5saW5lV2F0
Y2hwb2ludFNldCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0OwogCiAgICAgQ09NUElMRV9BU1NF
UlQoZmlyc3RPdXRPZkxpbmVPZmZzZXQgPCAyNTYsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0X2ZpdHMp
OwogCi0gICAgdWludDE2X3QgbV90cmFuc2l0aW9uT2Zmc2V0OwotICAgIHVpbnQxNl90IG1fbWF4
T2Zmc2V0OwotCi0gICAgdWludDMyX3QgbV9wcm9wZXJ0eUhhc2g7Ci0gICAgVGlueUJsb29tRmls
dGVyIG1fc2VlblByb3BlcnRpZXM7Ci0KICAgICBmcmllbmQgY2xhc3MgVk1JbnNwZWN0b3I7CiAg
ICAgZnJpZW5kIGNsYXNzIEpTRG9sbGFyVk1IZWxwZXI7CiB9OworI2lmIENQVShBRERSRVNTNjQp
CitzdGF0aWNfYXNzZXJ0KHNpemVvZihTdHJ1Y3R1cmUpIDw9IDk2LCAiRG8gbm90IGluY3JlYXNl
IHNpemVvZihTdHJ1Y3R1cmUpLCBpdCBpbW1lZGlhdGVseSBjYXVzZXMgbWVtb3J5IHJlZ3Jlc3Np
b24iKTsKKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAppbmRleCAwY2Q5OGQ1MmFjYzdmNzE0
YzA1YjE1M2UwODEzOWU0OTFjZDhjZjhjLi5kNmE0NTYwNTNiNWI2YjRkZThjYzAzNDFjOGEzYmQy
OWIyMTM1NWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCkBAIC0xNDQsNyArMTQ0LDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHUK
ICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVy
ZSh2bSktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAKLSAgICBpZiAobV9zZWVuUHJvcGVydGll
cy5ydWxlT3V0KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHByb3BlcnR5TmFtZS51aWQoKSkpKQor
ICAgIGlmIChydWxlT3V0VW5zZWVuUHJvcGVydHlIYXNoKHByb3BlcnR5TmFtZS51aWQoKSkpCiAg
ICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCiAgICAgUHJvcGVydHlUYWJsZSogcHJvcGVy
dHlUYWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKQEAgLTE1OSwyOSAr
MTU5LDU4IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0m
IHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1CiAgICAgcmV0dXJuIGVudHJ5LT5vZmZz
ZXQ7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6cnVsZU91dFVuc2VlblByb3BlcnR5SGFz
aChVbmlxdWVkU3RyaW5nSW1wbCogdWlkKSBjb25zdAoreworICAgIEFTU0VSVCh1aWQpOworICAg
IHVpbnRwdHJfdCBwb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odWlkKTsKKyAgICBp
ZiAoKHNlZW5Qcm9wZXJ0aWVzKCkgJiBwb2ludGVyKSAhPSBwb2ludGVyKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSB1aW50cHRyX3QgU3RydWN0
dXJlOjpzZWVuUHJvcGVydGllcygpIGNvbnN0Cit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVy
dGllcy5wb2ludGVyKCkpOworI2Vsc2UKKyAgICByZXR1cm4gbV9zZWVuUHJvcGVydGllczsKKyNl
bmRpZgorfQorCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5SGFzaEFuZFNlZW5Q
cm9wZXJ0eSh1bnNpZ25lZCBoYXNoLCBVbmlxdWVkU3RyaW5nSW1wbCogcG9pbnRlcikKK3sKKyNp
ZiBDUFUoQUREUkVTUzY0KQorICAgIG1fcHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRpZXMuc2V0
VHlwZShtX3Byb3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0aWVzLnR5cGUoKSBeIGhhc2gpOworICAg
IG1fcHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRpZXMuc2V0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8
VW5pcXVlZFN0cmluZ0ltcGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3Byb3BlcnR5SGFz
aEFuZFNlZW5Qcm9wZXJ0aWVzLnBvaW50ZXIoKSkgfCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihw
b2ludGVyKSkpOworI2Vsc2UKKyAgICBtX3Byb3BlcnR5SGFzaCA9IG1fcHJvcGVydHlIYXNoIF4g
aGFzaDsKKyAgICBtX3NlZW5Qcm9wZXJ0aWVzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9p
bnRlcikgfCBtX3NlZW5Qcm9wZXJ0aWVzOworI2VuZGlmCit9CisKIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CiB2b2lkIFN0cnVjdHVyZTo6Zm9yRWFjaFByb3BlcnR5Q29uY3VycmVudGx5KGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7Ci0gICAgVmVjdG9yPFN0cnVjdHVyZSosIDg+IHN0cnVj
dHVyZXM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJ1Y3R1cmUqLCBVbmlxdWVkU3RyaW5nSW1w
bCo+LCA4PiBzdHJ1Y3R1cmVBbmRUcmFuc2l0aW9uUHJvcGVydHlOYW1lczsKICAgICBTdHJ1Y3R1
cmUqIHRhYmxlU3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIAotICAg
IGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHRhYmxl
U3RydWN0dXJlLCB0YWJsZSk7CisgICAgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6
YXRpb24oc3RydWN0dXJlQW5kVHJhbnNpdGlvblByb3BlcnR5TmFtZXMsIHRhYmxlU3RydWN0dXJl
LCB0YWJsZSk7CiAKICAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gc2VlblByb3BlcnRp
ZXM7CiAKLSAgICBmb3IgKGF1dG8qIHN0cnVjdHVyZSA6IHN0cnVjdHVyZXMpIHsKLSAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSB8fCBzZWVuUHJvcGVydGll
cy5jb250YWlucyhzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSkpCisg
ICAgZm9yIChhdXRvIFtzdHJ1Y3R1cmUsIHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWVdIDogc3RydWN0
dXJlQW5kVHJhbnNpdGlvblByb3BlcnR5TmFtZXMpIHsKKyAgICAgICAgaWYgKCF0cmFuc2l0aW9u
UHJvcGVydHlOYW1lIHx8IHNlZW5Qcm9wZXJ0aWVzLmNvbnRhaW5zKHRyYW5zaXRpb25Qcm9wZXJ0
eU5hbWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc2VlblByb3BlcnRpZXMu
YWRkKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAg
c2VlblByb3BlcnRpZXMuYWRkKHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVj
dHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkg
eworICAgICAgICBpZiAoIWZ1bmN0b3IoUHJvcGVydHlNYXBFbnRyeSh0cmFuc2l0aW9uUHJvcGVy
dHlOYW1lLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0
aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkgewogICAgICAgICAgICAgaWYgKHRhYmxlKQotICAg
ICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgICAg
ICAgICAgdGFibGVTdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTIsMTEgKzIyMSwxMSBAQCB2b2lkIFN0cnVj
dHVyZTo6Zm9yRWFjaFByb3BlcnR5Q29uY3VycmVudGx5KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlmICghZnVuY3Rvcihl
bnRyeSkpIHsKLSAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygp
OworICAgICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9jaygpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAgICAgICB0YWJsZVN0cnVjdHVy
ZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICB9CiB9CiAKQEAgLTMwMiwxNSArMzMxLDM3IEBA
IGlubGluZSBKU1ZhbHVlIFN0cnVjdHVyZTo6cHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsCiAgICAgcmV0dXJuIHByb3RvdHlwZUZvckxvb2t1cFBy
aW1pdGl2ZUltcGwoZ2xvYmFsT2JqZWN0LCB0aGlzKTsKIH0KIAoraW5saW5lIFN0cnVjdHVyZUNo
YWluKiBTdHJ1Y3R1cmU6OmNhY2hlZFByb3RvdHlwZUNoYWluKCkgY29uc3QKK3sKKyNpZiBDUFUo
QUREUkVTUzY0KQorICAgIHJldHVybiBtX21heE9mZnNldEFuZENhY2hlZFByb3RvdHlwZUNoYWlu
LnBvaW50ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0
KCk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRDYWNoZWRQcm90b3R5
cGVDaGFpbihWTSYgdm0sIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKK3sKKyAgICBBU1NFUlQoaXNP
YmplY3QoKSk7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkgJiYgIVRocmVhZDo6
bWF5QmVHQ1RocmVhZCgpKTsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgIG1fbWF4T2Zmc2V0QW5k
Q2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0UG9pbnRlcihjaGFpbik7CisgICAgdm0uaGVhcC53cml0
ZUJhcnJpZXIodGhpcywgY2hhaW4pOworI2Vsc2UKKyAgICBtX2NhY2hlZFByb3RvdHlwZUNoYWlu
LnNldCh2bSwgdGhpcywgY2hhaW4pOworI2VuZGlmCit9CisKIGlubGluZSBTdHJ1Y3R1cmVDaGFp
biogU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlKSBjb25zdAogeworICAgIEFTU0VSVCh0aGlzLT5pc09i
amVjdCgpKTsKICAgICBBU1NFUlQoYmFzZS0+c3RydWN0dXJlKHZtKSA9PSB0aGlzKTsKICAgICAv
LyBXZSBjYWNoZSBvdXIgcHJvdG90eXBlIGNoYWluIHNvIG91ciBjbGllbnRzIGNhbiBzaGFyZSBp
dC4KLSAgICBpZiAoIWlzVmFsaWQoZ2xvYmFsT2JqZWN0LCBtX2NhY2hlZFByb3RvdHlwZUNoYWlu
LmdldCgpLCBiYXNlKSkgeworICAgIGlmICghaXNWYWxpZChnbG9iYWxPYmplY3QsIGNhY2hlZFBy
b3RvdHlwZUNoYWluKCksIGJhc2UpKSB7CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gcHJv
dG90eXBlRm9yTG9va3VwKGdsb2JhbE9iamVjdCwgYmFzZSk7Ci0gICAgICAgIG1fY2FjaGVkUHJv
dG90eXBlQ2hhaW4uc2V0KHZtLCB0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlKHZtLCBwcm90
b3R5cGUuaXNOdWxsKCkgPyBudWxscHRyIDogYXNPYmplY3QocHJvdG90eXBlKSkpOworICAgICAg
ICBjb25zdF9jYXN0PFN0cnVjdHVyZSo+KHRoaXMpLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2
bSwgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZSh2bSwgcHJvdG90eXBlLmlzTnVsbCgpID8gbnVsbHB0
ciA6IGFzT2JqZWN0KHByb3RvdHlwZSkpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fY2FjaGVkUHJv
dG90eXBlQ2hhaW4uZ2V0KCk7CisgICAgcmV0dXJuIGNhY2hlZFByb3RvdHlwZUNoYWluKCk7CiB9
CiAKIGlubGluZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSkgY29uc3QKQEAgLTM1MCw3
ICs0MDEsNyBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0eShQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCiAKIGlubGluZSBXYXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OnBy
b3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsK
LSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ29uY3VycmVudEpT
Q2VsbExvY2tlciBsb2NrZXIoY2VsbExvY2soKSk7CiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKQEAgLTM3
MSwxNiArNDIyLDE2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0
Q29uc2lzdGVuY3koUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIAogICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IHByb3BlcnR5VGFibGUtPnByb3Bl
cnR5U3RvcmFnZVNpemUoKTsKLSAgICB1bnNpZ25lZCBpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1Rv
VG90YWxTaXplID0gdG90YWxTaXplIDwgbV9pbmxpbmVDYXBhY2l0eSA/IDAgOiB0b3RhbFNpemUg
LSBtX2lubGluZUNhcGFjaXR5OworICAgIHVuc2lnbmVkIGlubGluZU92ZXJmbG93QWNjb3JkaW5n
VG9Ub3RhbFNpemUgPSB0b3RhbFNpemUgPCBpbmxpbmVDYXBhY2l0eSgpID8gMCA6IHRvdGFsU2l6
ZSAtIGlubGluZUNhcGFjaXR5KCk7CiAKICAgICBhdXRvIGZhaWwgPSBbJl0gKGNvbnN0IGNoYXIq
IGRlc2NyaXB0aW9uKSB7CiAgICAgICAgIGRhdGFMb2coIkRldGVjdGVkIG9mZnNldCBpbmNvbnNp
c3RlbmN5OiAiLCBkZXNjcmlwdGlvbiwgIiFcbiIpOwogICAgICAgICBkYXRhTG9nKCJ0aGlzID0g
IiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coInRyYW5zaXRpb25P
ZmZzZXQgPSAiLCB0cmFuc2l0aW9uT2Zmc2V0KCksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCJt
YXhPZmZzZXQgPSAiLCBtYXhPZmZzZXQoKSwgIlxuIik7Ci0gICAgICAgIGRhdGFMb2coIm1faW5s
aW5lQ2FwYWNpdHkgPSAiLCBtX2lubGluZUNhcGFjaXR5LCAiXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygibV9pbmxpbmVDYXBhY2l0eSA9ICIsIGlubGluZUNhcGFjaXR5KCksICJcbiIpOwogICAgICAg
ICBkYXRhTG9nKCJwcm9wZXJ0eVRhYmxlID0gIiwgUmF3UG9pbnRlcihwcm9wZXJ0eVRhYmxlKSwg
IlxuIik7Ci0gICAgICAgIGRhdGFMb2coIm51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQgPSAiLCBu
dW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBtX2lubGluZUNhcGFjaXR5KSwg
IlxuIik7CisgICAgICAgIGRhdGFMb2coIm51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQgPSAiLCBu
dW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBpbmxpbmVDYXBhY2l0eSgpKSwg
IlxuIik7CiAgICAgICAgIGRhdGFMb2coInRvdGFsU2l6ZSA9ICIsIHRvdGFsU2l6ZSwgIlxuIik7
CiAgICAgICAgIGRhdGFMb2coImlubGluZU92ZXJmbG93QWNjb3JkaW5nVG9Ub3RhbFNpemUgPSAi
LCBpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90YWxTaXplLCAiXG4iKTsKICAgICAgICAgZGF0
YUxvZygibnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvck1heE9mZnNldCA9ICIsIG51bWJlck9mT3V0
T2ZMaW5lU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCkpLCAiXG4iKTsKQEAgLTM4OCw3ICs0
MzksNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3Rl
bmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibAogICAgICAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKICAgICB9OwogICAgIAotICAgIGlmIChudW1iZXJPZlNsb3RzRm9yTWF4T2Zm
c2V0KG1heE9mZnNldCgpLCBtX2lubGluZUNhcGFjaXR5KSAhPSB0b3RhbFNpemUpCisgICAgaWYg
KG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIGlubGluZUNhcGFjaXR5KCkp
ICE9IHRvdGFsU2l6ZSkKICAgICAgICAgZmFpbCgibnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldCBk
b2Vzbid0IG1hdGNoIHRvdGFsU2l6ZSIpOwogICAgIGlmIChpbmxpbmVPdmVyZmxvd0FjY29yZGlu
Z1RvVG90YWxTaXplICE9IG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zm
c2V0KCkpKQogICAgICAgICBmYWlsKCJpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90YWxTaXpl
IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvck1heE9mZnNldCIpOwpAQCAt
Mzk4LDcgKzQ0OSw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0
Q29uc2lzdGVuY3koUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsCiAKIEFMV0FZU19JTkxJTkUg
Ym9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdAogewotICAgIFBy
b3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAg
UHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwo
KTsKIAogICAgIGlmICghcHJvcGVydHlUYWJsZSkgewogICAgICAgICBBU1NFUlQoIWlzUGlubmVk
UHJvcGVydHlUYWJsZSgpKTsKQEAgLTQzOSw3ICs0OTAsNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZAogewogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2
bSk7CiAKLSAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVh
cCk7CisgICAgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoY2VsbExvY2soKSwg
dm0uaGVhcCk7CiAKICAgICBzd2l0Y2ggKHNob3VsZFBpbikgewogICAgIGNhc2UgU2hvdWxkUGlu
OjpZZXM6CkBAIC00NjAsMTAgKzUxMSw5IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkCiAKICAg
ICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKIAotICAgIFByb3BlcnR5T2Zmc2V0IG5l
d09mZnNldCA9IHRhYmxlLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOworICAgIFByb3Bl
cnR5T2Zmc2V0IG5ld09mZnNldCA9IHRhYmxlLT5uZXh0T2Zmc2V0KGlubGluZUNhcGFjaXR5KCkp
OwogCi0gICAgbV9wcm9wZXJ0eUhhc2ggPSBtX3Byb3BlcnR5SGFzaCBeIHJlcC0+ZXhpc3RpbmdT
eW1ib2xBd2FyZUhhc2goKTsKLSAgICBtX3NlZW5Qcm9wZXJ0aWVzLmFkZChiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihyZXApKTsKKyAgICBhZGRQcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydHkocmVw
LT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpLCByZXApOwogCiAgICAgYXV0byByZXN1bHQgPSB0
YWJsZS0+YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMpKTsK
ICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LnNlY29uZCk7CkBAIC00ODIsNyArNTMy
LDcgQEAgdGVtcGxhdGU8U3RydWN0dXJlOjpTaG91bGRQaW4gc2hvdWxkUGluLCB0eXBlbmFtZSBG
dW5jPgogaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBQcm9wZXJ0
eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOwotICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJy
ZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygpLCB2bS5oZWFwKTsKIAogICAgIHN3aXRj
aCAoc2hvdWxkUGluKSB7CiAgICAgY2FzZSBTaG91bGRQaW46OlllczoKQEAgLTUzMiw3ICs1ODIs
NyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydAogewogICAgIEFTU0VSVChpc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpOwotICAg
IEFTU0VSVChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOworICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxl
VW5zYWZlT3JOdWxsKCkpOwogICAgIAogICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpZZXM+
KHZtLCBwcm9wZXJ0eU5hbWUsIGZ1bmMpOwogfQpAQCAtNTUwLDE1ICs2MDAsNzcgQEAgQUxXQVlT
X0lOTElORSB2b2lkIFN0cnVjdHVyZTo6c2V0R2xvYmFsT2JqZWN0KFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamUKIAogQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6c2V0UHJv
cGVydHlUYWJsZShWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQogeworI2lmIENQVShBRERS
RVNTNjQpCisgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxlVW5zYWZlLnNl
dFBvaW50ZXIodGFibGUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHRhYmxlKTsK
KyNlbHNlCiAgICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLnNldE1heUJlTnVsbCh2bSwgdGhpcywg
dGFibGUpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OmNsZWFy
UHJvcGVydHlUYWJsZSgpCit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX291dE9mTGluZVR5
cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUuc2V0UG9pbnRlcihudWxscHRyKTsKKyNlbHNl
CisgICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CisjZW5kaWYKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIFN0cnVjdHVyZTo6c2V0T3V0T2ZMaW5lVHlwZUZsYWdzKFR5cGVJbmZvOjpP
dXRPZkxpbmVUeXBlRmxhZ3Mgb3V0T2ZMaW5lVHlwZUZsYWdzKQoreworI2lmIENQVShBRERSRVNT
NjQpCisgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxlVW5zYWZlLnNldFR5
cGUob3V0T2ZMaW5lVHlwZUZsYWdzKTsKKyNlbHNlCisgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3Mg
PSBvdXRPZkxpbmVUeXBlRmxhZ3M7CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFN0
cnVjdHVyZTo6c2V0SW5saW5lQ2FwYWNpdHkodWludDhfdCBpbmxpbmVDYXBhY2l0eSkKK3sKKyNp
ZiBDUFUoQUREUkVTUzY0KQorICAgIG1faW5saW5lQ2FwYWNpdHlBbmRQcmV2aW91c09yUmFyZURh
dGEuc2V0VHlwZShpbmxpbmVDYXBhY2l0eSk7CisjZWxzZQorICAgIG1faW5saW5lQ2FwYWNpdHkg
PSBpbmxpbmVDYXBhY2l0eTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0
dXJlOjpzZXRDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCit7CisjaWYgQ1BV
KEFERFJFU1M2NCkKKyAgICBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8uc2V0UG9pbnRl
cihjbGFzc0luZm8pOworI2Vsc2UKKyAgICBtX2NsYXNzSW5mbyA9IGNsYXNzSW5mbzsKKyNlbmRp
ZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpzZXRQcmV2aW91c0lEKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhy
ZWFkKCkgJiYgIVRocmVhZDo6bWF5QmVHQ1RocmVhZCgpKTsKICAgICBpZiAoaGFzUmFyZURhdGEo
KSkKICAgICAgICAgcmFyZURhdGEoKS0+c2V0UHJldmlvdXNJRCh2bSwgc3RydWN0dXJlKTsKLSAg
ICBlbHNlCisgICAgZWxzZSB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgbV9pbmxpbmVD
YXBhY2l0eUFuZFByZXZpb3VzT3JSYXJlRGF0YS5zZXRQb2ludGVyKHN0cnVjdHVyZSk7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVyZSk7CisjZWxzZQogICAgICAg
ICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CisjZW5kaWYK
KyAgICB9Cit9CisKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2xlYXJQcmV2aW91c0lEKCkKK3sK
KyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhy
ZWFkKCkpOworICAgIGlmIChoYXNSYXJlRGF0YSgpKQorICAgICAgICByYXJlRGF0YSgpLT5jbGVh
clByZXZpb3VzSUQoKTsKKyAgICBlbHNlIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICBt
X2lubGluZUNhcGFjaXR5QW5kUHJldmlvdXNPclJhcmVEYXRhLnNldFBvaW50ZXIobnVsbHB0cik7
CisjZWxzZQorICAgICAgICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5jbGVhcigpOworI2VuZGlmCisg
ICAgfQogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpzaG91bGRDb252ZXJ0VG9Q
b2x5UHJvdG8oY29uc3QgU3RydWN0dXJlKiBhLCBjb25zdCBTdHJ1Y3R1cmUqIGIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZS5oCmluZGV4IGY0ODkyOGNmM2IyOTU2NmUyMjcwZDg2ZjYwMjM0Mzg1ZWFiYjg1ODkuLjZj
Y2I3YWI2ZmY0Njc5NmU4MzJhZjQ2YmFkYmU0MGMzMTJiNWRhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5o
CkBAIC0zOSw4ICszOSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgRmlyc3RJbnRlcm5h
bEF0dHJpYnV0ZSA9IDEgPDwgNjsgLy8gVXNlIGZvciB0cmFuc2l0aW9uCiAKIC8vIFN1cHBvcnQg
Zm9yIGF0dHJpYnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0aW9ucyBub3QgcmVsYXRlZCB0
byBwcm9wZXJ0aWVzLgogLy8gSWYgYW55IG9mIHRoZXNlIGFyZSB1c2VkLCB0aGUgc3RyaW5nIHBv
cnRpb24gb2YgdGhlIGtleSBzaG91bGQgYmUgMC4KLWVudW0gY2xhc3MgTm9uUHJvcGVydHlUcmFu
c2l0aW9uIDogdW5zaWduZWQgewotICAgIEFsbG9jYXRlVW5kZWNpZGVkLAorZW51bSBjbGFzcyBO
b25Qcm9wZXJ0eVRyYW5zaXRpb24gOiB1aW50OF90IHsKKyAgICBBbGxvY2F0ZVVuZGVjaWRlZCA9
IDAsCiAgICAgQWxsb2NhdGVJbnQzMiwKICAgICBBbGxvY2F0ZURvdWJsZSwKICAgICBBbGxvY2F0
ZUNvbnRpZ3VvdXMsCkBAIC01MCwxNCArNTAsMTYgQEAgZW51bSBjbGFzcyBOb25Qcm9wZXJ0eVRy
YW5zaXRpb24gOiB1bnNpZ25lZCB7CiAgICAgQWRkSW5kZXhlZEFjY2Vzc29ycywKICAgICBQcmV2
ZW50RXh0ZW5zaW9ucywKICAgICBTZWFsLAotICAgIEZyZWV6ZQorICAgIEZyZWV6ZSwKKyAgICBM
YXN0T2ZOb25Qcm9wZXJ0eVRyYW5zaXRpb24gPSBGcmVlemUsCiB9OwotdXNpbmcgVHJhbnNpdGlv
blByb3BlcnR5QXR0cmlidXRlcyA9IHVpbnQxNl90OwordXNpbmcgVHJhbnNpdGlvblByb3BlcnR5
QXR0cmlidXRlcyA9IHVpbnQ4X3Q7CiAKLWlubGluZSB1bnNpZ25lZCB0b0F0dHJpYnV0ZXMoTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCitpbmxpbmUgY29uc3RleHByIHVpbnQ4X3Qg
dG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQogewogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJhbnNpdGlvbikgKyBGaXJzdEludGVybmFsQXR0
cmlidXRlOwogfQorc3RhdGljX2Fzc2VydCh0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHlUcmFuc2l0
aW9uOjpMYXN0T2ZOb25Qcm9wZXJ0eVRyYW5zaXRpb24pIDw9IFVJTlQ4X01BWCk7CiAKIGlubGlu
ZSBib29sIGNoYW5nZXNJbmRleGluZ1R5cGUoTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRp
b24pCiB7CkBAIC0yMzEsNyArMjMzLDcgQEAgY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
IHsKIAogcHVibGljOgogICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSgpCi0gICAgICAgIDog
bV9kYXRhKFVzaW5nU2luZ2xlU2xvdEZsYWcpCisgICAgICAgIDogbV9kYXRhKGJpdHdpc2VfY2Fz
dDx1aW50OF90Kj4oVXNpbmdTaW5nbGVTbG90RmxhZykpCiAgICAgewogICAgIH0KIApAQCAtMjU3
LDE5ICsyNTksMTkgQEAgY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKIAogICAgIGJv
b2wgaXNVc2luZ1NpbmdsZVNsb3QoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGF0
YSAmIFVzaW5nU2luZ2xlU2xvdEZsYWc7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihtX2RhdGEuZ2V0KCkpICYgVXNpbmdTaW5nbGVTbG90RmxhZzsKICAgICB9CiAKICAg
ICBUcmFuc2l0aW9uTWFwKiBtYXAoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc1Vz
aW5nU2luZ2xlU2xvdCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUcmFuc2l0aW9u
TWFwKj4obV9kYXRhKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUcmFuc2l0aW9uTWFw
Kj4obV9kYXRhLmdldCgpKTsKICAgICB9CiAKICAgICBXZWFrSW1wbCogd2Vha0ltcGwoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOwotICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFdlYWtJbXBsKj4obV9kYXRhICYgflVzaW5nU2luZ2xlU2xvdEZs
YWcpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdlYWtJbXBsKj4oYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4obV9kYXRhLmdldCgpKSAmIH5Vc2luZ1NpbmdsZVNsb3RGbGFnKTsKICAgICB9
CiAKICAgICB2b2lkIHNldE1hcChUcmFuc2l0aW9uTWFwKiBtYXApCkBAIC0yODAsNyArMjgyLDcg
QEAgY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKICAgICAgICAgICAgIFdlYWtTZXQ6
OmRlYWxsb2NhdGUoaW1wbCk7CiAKICAgICAgICAgLy8gVGhpcyBpbXBsaWNpdGx5IGNsZWFycyB0
aGUgZmxhZyB0aGF0IGluZGljYXRlcyB3ZSdyZSB1c2luZyBhIHNpbmdsZSB0cmFuc2l0aW9uCi0g
ICAgICAgIG1fZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4obWFwKTsKKyAgICAgICAgbV9k
YXRhID0gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihtYXApOwogCiAgICAgICAgIEFTU0VSVCghaXNV
c2luZ1NpbmdsZVNsb3QoKSk7CiAgICAgfQpAQCAtMjg4LDcgKzI5MCwxMSBAQCBjbGFzcyBTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgIFN0cnVjdHVyZSogc2luZ2xlVHJhbnNpdGlvbigp
IGNvbnN0OwogICAgIHZvaWQgc2V0U2luZ2xlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqKTsKIAotICAg
IGludHB0cl90IG1fZGF0YTsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgIFBhY2tlZFB0cjx1aW50
OF90PiBtX2RhdGE7CisjZWxzZQorICAgIE5ha2VkUHRyPHVpbnQ4X3Q+IG1fZGF0YTsKKyNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5jcHAKaW5kZXggOWE3ZjQ5YTE0MDUzYTA4MjdkYmFlMzUyZDI4ZjUwMzYwN2Zm
NmNkNy4uYTIwZjYwNmY3YjgxYjk0MmI4ODlkMzVhNTUzYWNlZDc4MmE4YjgzZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcApAQCAtMjgxOCw4ICsyODE4LDgg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0RvbGxhclZNSGVscGVyOjpmdW5jdGlv
bkdldFN0cnVjdHVyZVRyYW5zaXRpb25MaXMKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKICAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShz
dHJ1Y3R1cmUtPm1heE9mZnNldCgpKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFt
ZSkKLSAgICAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzU3RyaW5nKHZtLCBT
dHJpbmcoKnN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKSkpOworICAgICAgICBp
ZiAoYXV0byogdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9IHN0cnVjdHVyZS0+dHJhbnNpdGlvblBy
b3BlcnR5TmFtZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwganNT
dHJpbmcodm0sIFN0cmluZygqdHJhbnNpdGlvblByb3BlcnR5TmFtZSkpKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwganNOdWxsKCkpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAppbmRleCAxNmVj
ZGFhNjFlODZlYzg4ZGUwNDQ4ZTI5ZjY2NTg2MDY2ZWM4NGExLi4yYmZmNzA0MGFhYTU1NmFkMDRl
YzNlZGRiMjk0YWQzOTJmM2U5ZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtMjc1LDcgKzI3NSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpq
c0NhbGxFbnRyeXBvaW50U2xvdygpCiAKICAgICAgICAgICAgIHN0YWNrTGltaXRHUFJJc0Nsb2Ji
ZXJlZCA9IHRydWU7CiAgICAgICAgICAgICBqaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0sIHNjcmF0
Y2hHUFIsIHNjcmF0Y2hHUFIsIHN0YWNrTGltaXRHUFIpOwotICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5lbWl0TG9hZENsYXNzSW5m
b0Zyb21TdHJ1Y3R1cmUoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19maW5hbDxXZWJBc3NlbWJseUZ1bmN0aW9uPjo6dmFsdWUsICJX
ZSBkbyBub3QgY2hlY2sgZm9yIHN1YnR5cGVzIGJlbG93Iik7CiAgICAgICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfZmluYWw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+Ojp2YWx1ZSwg
IldlIGRvIG5vdCBjaGVjayBmb3Igc3VidHlwZXMgYmVsb3ciKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL0NvbXBhY3RQb2ludGVyVHVwbGUuaCBiL1NvdXJjZS9XVEYvd3RmL0NvbXBhY3RQ
b2ludGVyVHVwbGUuaAppbmRleCBiOGYyMDFlYTA5NjU4OWI5MmZmNTA2YzY0ZjA5OWI4ZDk1Y2Ji
ZTJmLi4wMGYxOWEyMGI5M2RjYjUxYmE3NWZhYjEwZGQyZDQ2YmEwNjAwMGY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmgKKysrIGIvU291cmNlL1dURi93
dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5oCkBAIC0zMSw1OCArMzEsNzAgQEAKIAogbmFtZXNwYWNl
IFdURiB7CiAKLS8vIFRoZSBnb2FsIG9mIHRoaXMgY2xhc3MgaXMgZm9sZGluZyBhIHBvaW50ZXIg
YW5kIDEgYnl0ZSB2YWx1ZSBpbnRvIDggYnl0ZXMgaW4gYm90aCAzMmJpdCBhbmQgNjRiaXQgYXJj
aGl0ZWN0dXJlcy4KKy8vIFRoZSBnb2FsIG9mIHRoaXMgY2xhc3MgaXMgZm9sZGluZyBhIHBvaW50
ZXIgYW5kIDIgYnl0ZXMgdmFsdWUgaW50byA4IGJ5dGVzIGluIGJvdGggMzJiaXQgYW5kIDY0Yml0
IGFyY2hpdGVjdHVyZXMuCiAvLyAzMmJpdCBhcmNoaXRlY3R1cmUganVzdCBoYXMgYSBwYWlyIG9m
IGJ5dGUgYW5kIHBvaW50ZXIsIHdoaWNoIHNob3VsZCBiZSA4IGJ5dGVzLgotLy8gSW4gNjRiaXQs
IHdlIHVzZSB0aGUgdXBwZXIgNSBiaXRzIGFuZCBsb3dlciAzIGJpdHMgKHplcm8gZHVlIHRvIGFs
aWdubWVudCkgc2luY2UgdGhlc2UgYml0cyBhcmUgc2FmZSB0byB1c2UgZXZlbgotLy8gd2l0aCA1
LWxldmVsIHBhZ2UgdGFibGVzIHdoZXJlIHRoZSBlZmZlY3RpdmUgcG9pbnRlciB3aWR0aCBpcyA1
N2JpdHMuCisvLyBXZSBhcmUgYXNzdW1pbmcgNDhiaXQgcG9pbnRlcnMgaGVyZSwgd2hpY2ggaXMg
YWxzbyBhc3N1bWVkIGluIEpTVmFsdWUgYW55d2F5LgogdGVtcGxhdGU8dHlwZW5hbWUgUG9pbnRl
clR5cGUsIHR5cGVuYW1lIFR5cGU+CiBjbGFzcyBDb21wYWN0UG9pbnRlclR1cGxlIGZpbmFsIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihUeXBlKSA9PSAxLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVHlwZSkg
PD0gMiwgIiIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19wb2ludGVyPFBvaW50ZXJUeXBl
Pjo6dmFsdWUsICIiKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8VHlwZT46
OnZhbHVlIHx8IHN0ZDo6aXNfZW51bTxUeXBlPjo6dmFsdWUsICIiKTsKKyAgICB1c2luZyBVbnNp
Z25lZFR5cGUgPSBzdGQ6Om1ha2VfdW5zaWduZWRfdDxzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjpp
c19zYW1lX3Y8VHlwZSwgYm9vbD4sIHVpbnQ4X3QsIFR5cGU+PjsKKyAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihVbnNpZ25lZFR5cGUpID09IHNpemVvZihUeXBlKSk7CiAKICAgICBDb21wYWN0UG9p
bnRlclR1cGxlKCkgPSBkZWZhdWx0OwogCiAjaWYgQ1BVKEFERFJFU1M2NCkKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGVuY29kZVR5cGUodWludDhfdCB0eXBlKQotICAg
IHsKLSAgICAgICAgLy8gRW5jb2RlIDhiaXQgdHlwZSBVVVVERERERCBpbnRvIDY0Yml0IGRhdGEg
REREREQuLjU2Yml0Li5VVVUuCi0gICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHR5cGUpIDw8IDU5KSB8IChzdGF0aWNfY2FzdDx1aW50NjRfdD4odHlwZSkgPj4gNSk7Ci0gICAg
fQotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBkZWNvZGVUeXBlKHVpbnQ2NF90IHZhbHVl
KQorICAgIHN0YXRpY19hc3NlcnQoV1RGX09TX0NPTlNUQU5UX0VGRkVDVElWRV9BRERSRVNTX1dJ
RFRIIDw9IDQ4KTsKKworI2lmIENQVShMSVRUTEVfRU5ESUFOKQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZUeXBlKCkKICAgICB7Ci0gICAgICAgIC8vIERlY29kZSA2NGJpdCBkYXRhIERE
RERELi41NmJpdC4uVVVVIGludG8gOGJpdCB0eXBlIFVVVURERERELgotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDhfdD4oKHZhbHVlID4+IDU5KSB8ICh2YWx1ZSA8PCA1KSk7CisgICAg
ICAgIHJldHVybiA0OCAvIDg7CiAgICAgfQorI2VuZGlmCiAKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQ2NF90IHR5cGVNYXNrID0gZW5jb2RlVHlwZShVSU5UOF9NQVgpOwotICAgIHN0YXRpY19h
c3NlcnQoMHhGODAwMDAwMDAwMDAwMDA3VUxMID09IHR5cGVNYXNrLCAiIik7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50NjRfdCBwb2ludGVyTWFzayA9IH50eXBlTWFzazsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQ2NF90IHBvaW50ZXJNYXNrID0gKDFVTEwgPDwgNDgpIC0gMTsKIAogICAg
IENvbXBhY3RQb2ludGVyVHVwbGUoUG9pbnRlclR5cGUgcG9pbnRlciwgVHlwZSB0eXBlKQotICAg
ICAgICA6IG1fZGF0YShiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHBvaW50ZXIpIHwgZW5jb2RlVHlw
ZShzdGF0aWNfY2FzdDx1aW50OF90Pih0eXBlKSkpCisgICAgICAgIDogbV9kYXRhKGVuY29kZShw
b2ludGVyLCB0eXBlKSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCgoYml0d2lzZV9jYXN0PHVpbnQ2
NF90Pihwb2ludGVyKSAmIDBiMTExKSA9PSAweDApOworICAgICAgICBBU1NFUlQodGhpcy0+dHlw
ZSgpID09IHR5cGUpOworICAgICAgICBBU1NFUlQodGhpcy0+cG9pbnRlcigpID09IHBvaW50ZXIp
OwogICAgIH0KIAogICAgIFBvaW50ZXJUeXBlIHBvaW50ZXIoKSBjb25zdCB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8UG9pbnRlclR5cGU+KG1fZGF0YSAmIHBvaW50ZXJNYXNrKTsgfQogICAgIHZvaWQg
c2V0UG9pbnRlcihQb2ludGVyVHlwZSBwb2ludGVyKQogICAgIHsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChhbGlnbm9mKHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8UG9pbnRlclR5cGU+Ojp0
eXBlKSA+PSBhbGlnbm9mKHZvaWQqKSwgIiIpOwotICAgICAgICBBU1NFUlQoKGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4ocG9pbnRlcikgJiAwYjExMSkgPT0gMHgwKTsKLSAgICAgICAgbV9kYXRhID0g
Q29tcGFjdFBvaW50ZXJUdXBsZShwb2ludGVyLCB0eXBlKCkpLm1fZGF0YTsKKyAgICAgICAgbV9k
YXRhID0gZW5jb2RlKHBvaW50ZXIsIHR5cGUoKSk7CiAgICAgfQogCi0gICAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4oZGVjb2RlVHlwZShtX2RhdGEpKTsgfQor
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGRlY29kZVR5cGUobV9kYXRhKTsgfQogICAg
IHZvaWQgc2V0VHlwZShUeXBlIHR5cGUpCiAgICAgewotICAgICAgICBtX2RhdGEgPSBDb21wYWN0
UG9pbnRlclR1cGxlKHBvaW50ZXIoKSwgdHlwZSkubV9kYXRhOworICAgICAgICBtX2RhdGEgPSBl
bmNvZGUocG9pbnRlcigpLCB0eXBlKTsKICAgICB9CiAKKyAgICB1aW50NjRfdCBkYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhOyB9CisKIHByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50NjRfdCBlbmNvZGVUeXBlKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8VW5zaWduZWRUeXBlPih0eXBlKSkgPDwgNDg7
CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgVHlwZSBkZWNvZGVUeXBlKHVpbnQ2NF90IHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0YXRpY19jYXN0
PFVuc2lnbmVkVHlwZT4odmFsdWUgPj4gNDgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDY0
X3QgZW5jb2RlKFBvaW50ZXJUeXBlIHBvaW50ZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHBvaW50ZXIpIHwgZW5jb2RlVHlwZSh0eXBl
KTsKKyAgICB9CisKICAgICB1aW50NjRfdCBtX2RhdGEgeyAwIH07CiAjZWxzZQogcHVibGljOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCA2YmJiZWZlNzBmYzFjMTMwMmY0OTVlYzNmNmUy
YTQ0MTAyNWU2ZDZhLi4wMDQzNTYzNDFmNzQ3MTk2NDZmMTU4MTQ1MzZmNzUwN2Q0MTJmMzQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtMTg5LDggKzE4OSw4IEBAIGNsYXNzIFN0cmlu
Z0ltcGwgOiBwcml2YXRlIFN0cmluZ0ltcGxTaGFwZSB7CiAKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIE1heExlbmd0aCA9IFN0cmluZ0ltcGxTaGFwZTo6TWF4TGVuZ3RoOwogCi0gICAg
Ly8gVGhlIGJvdHRvbSA2IGJpdHMgaW4gdGhlIGhhc2ggYXJlIGZsYWdzLgotICAgIHN0YXRpYyBj
b25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19mbGFnQ291bnQgPSA2OworICAgIC8vIFRoZSBib3R0
b20gNiBiaXRzIGluIHRoZSBoYXNoIGFyZSBmbGFncywgYnV0IHJlc2VydmUgOCBiaXRzIHNpbmNl
IFN0cmluZ0hhc2ggb25seSBoYXMgMjQgYml0cyBhbnl3YXkuCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDg7CiAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdNYXNrID0gKDF1IDw8IHNfZmxhZ0NvdW50
KSAtIDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJvbEltcGwuaCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5oCmluZGV4IGVkMGYxM2U1NDRmMTBjMzFiNDE5
YmVhYWE4MjUyMzc0YTg3MGFjNzMuLjYzMTBkYzU3M2NmNTdmMGQ1YTg2ODg1OGIyNWQwN2Y2MzA2
MTAzMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9sSW1wbC5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNz
IFN5bWJvbEltcGwgOiBwdWJsaWMgVW5pcXVlZFN0cmluZ0ltcGwgewogICAgIHN0YXRpYyBjb25z
dGV4cHIgRmxhZ3Mgc19mbGFnSXNSZWdpc3RlcmVkID0gMGIwMTB1OwogICAgIHN0YXRpYyBjb25z
dGV4cHIgRmxhZ3Mgc19mbGFnSXNQcml2YXRlID0gMGIxMDB1OwogCi0gICAgdW5zaWduZWQgaGFz
aEZvclN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEZvclN5bWJvbDsgfQorICAgIHVuc2ln
bmVkIGhhc2hGb3JTeW1ib2woKSBjb25zdCB7IHJldHVybiBtX2hhc2hGb3JTeW1ib2xTaGlmdGVk
V2l0aEZsYWdDb3VudCA+PiBzX2ZsYWdDb3VudDsgfQogICAgIGJvb2wgaXNOdWxsU3ltYm9sKCkg
Y29uc3QgeyByZXR1cm4gbV9mbGFncyAmIHNfZmxhZ0lzTnVsbFN5bWJvbDsgfQogICAgIGJvb2wg
aXNSZWdpc3RlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIHNfZmxhZ0lzUmVnaXN0ZXJl
ZDsgfQogICAgIGJvb2wgaXNQcml2YXRlKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIHNfZmxh
Z0lzUHJpdmF0ZTsgfQpAQCAtNjAsNyArNjAsNyBAQCBjbGFzcyBTeW1ib2xJbXBsIDogcHVibGlj
IFVuaXF1ZWRTdHJpbmdJbXBsIHsKICAgICAgICAgY29uc3RleHByIFN0YXRpY1N5bWJvbEltcGwo
Y29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSwgRmxhZ3MgZmxhZ3MgPSBz
X2ZsYWdEZWZhdWx0KQogICAgICAgICAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEZs
YWdJc1N0YXRpY1N0cmluZywgY2hhcmFjdGVyQ291bnQgLSAxLCBjaGFyYWN0ZXJzLAogICAgICAg
ICAgICAgICAgIHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3Qg
fCBTdHJpbmdTeW1ib2wgfCBCdWZmZXJJbnRlcm5hbCB8IChTdHJpbmdIYXNoZXI6OmNvbXB1dGVM
aXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCksIENv
bnN0cnVjdFdpdGhDb25zdEV4cHIpCi0gICAgICAgICAgICAsIG1faGFzaEZvclN5bWJvbChTdHJp
bmdIYXNoZXI6OmNvbXB1dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8
PCBzX2ZsYWdDb3VudCkKKyAgICAgICAgICAgICwgbV9oYXNoRm9yU3ltYm9sU2hpZnRlZFdpdGhG
bGFnQ291bnQoU3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMo
Y2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQpCiAgICAgICAgICAgICAsIG1fZmxhZ3MoZmxhZ3Mp
CiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNjksNyArNjksNyBAQCBjbGFzcyBTeW1ib2xJbXBs
IDogcHVibGljIFVuaXF1ZWRTdHJpbmdJbXBsIHsKICAgICAgICAgY29uc3RleHByIFN0YXRpY1N5
bWJvbEltcGwoY29uc3QgY2hhcjE2X3QgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIEZs
YWdzIGZsYWdzID0gc19mbGFnRGVmYXVsdCkKICAgICAgICAgICAgIDogU3RyaW5nSW1wbFNoYXBl
KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcsIGNoYXJhY3RlckNvdW50IC0gMSwgY2hhcmFj
dGVycywKICAgICAgICAgICAgICAgICBzX2hhc2hGbGFnRGlkUmVwb3J0Q29zdCB8IFN0cmluZ1N5
bWJvbCB8IEJ1ZmZlckludGVybmFsIHwgKFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUxpdGVyYWxIYXNo
QW5kTWFza1RvcDhCaXRzKGNoYXJhY3RlcnMpIDw8IHNfZmxhZ0NvdW50KSwgQ29uc3RydWN0V2l0
aENvbnN0RXhwcikKLSAgICAgICAgICAgICwgbV9oYXNoRm9yU3ltYm9sKFN0cmluZ0hhc2hlcjo6
Y29tcHV0ZUxpdGVyYWxIYXNoQW5kTWFza1RvcDhCaXRzKGNoYXJhY3RlcnMpIDw8IHNfZmxhZ0Nv
dW50KQorICAgICAgICAgICAgLCBtX2hhc2hGb3JTeW1ib2xTaGlmdGVkV2l0aEZsYWdDb3VudChT
dHJpbmdIYXNoZXI6OmNvbXB1dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJz
KSA8PCBzX2ZsYWdDb3VudCkKICAgICAgICAgICAgICwgbV9mbGFncyhmbGFncykKICAgICAgICAg
ewogICAgICAgICB9CkBAIC04MCw3ICs4MCw3IEBAIGNsYXNzIFN5bWJvbEltcGwgOiBwdWJsaWMg
VW5pcXVlZFN0cmluZ0ltcGwgewogICAgICAgICB9CiAKICAgICAgICAgU3RyaW5nSW1wbCogbV9v
d25lciB7IG51bGxwdHIgfTsgLy8gV2UgZG8gbm90IG1ha2UgU3RhdGljU3ltYm9sSW1wbCBCdWZm
ZXJTdWJzdHJpbmcuIFRodXMgd2UgY2FuIG1ha2UgdGhpcyBudWxscHRyLgotICAgICAgICB1bnNp
Z25lZCBtX2hhc2hGb3JTeW1ib2w7CisgICAgICAgIHVuc2lnbmVkIG1faGFzaEZvclN5bWJvbFNo
aWZ0ZWRXaXRoRmxhZ0NvdW50OwogICAgICAgICBGbGFncyBtX2ZsYWdzOwogICAgIH07CiAKQEAg
LTkyLDcgKzkyLDcgQEAgY2xhc3MgU3ltYm9sSW1wbCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5nSW1w
bCB7CiAgICAgU3ltYm9sSW1wbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoLCBSZWY8U3RyaW5nSW1wbD4mJiBiYXNlLCBGbGFncyBmbGFncyA9IHNfZmxhZ0RlZmF1bHQp
CiAgICAgICAgIDogVW5pcXVlZFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sLCBjaGFyYWN0ZXJzLCBs
ZW5ndGgpCiAgICAgICAgICwgbV9vd25lcigmYmFzZS5sZWFrUmVmKCkpCi0gICAgICAgICwgbV9o
YXNoRm9yU3ltYm9sKG5leHRIYXNoRm9yU3ltYm9sKCkpCisgICAgICAgICwgbV9oYXNoRm9yU3lt
Ym9sU2hpZnRlZFdpdGhGbGFnQ291bnQobmV4dEhhc2hGb3JTeW1ib2woKSkKICAgICAgICAgLCBt
X2ZsYWdzKGZsYWdzKQogICAgIHsKICAgICAgICAgQVNTRVJUKFN0cmluZ0ltcGw6OnRhaWxPZmZz
ZXQ8U3RyaW5nSW1wbCo+KCkgPT0gT0JKRUNUX09GRlNFVE9GKFN5bWJvbEltcGwsIG1fb3duZXIp
KTsKQEAgLTEwMSw3ICsxMDEsNyBAQCBjbGFzcyBTeW1ib2xJbXBsIDogcHVibGljIFVuaXF1ZWRT
dHJpbmdJbXBsIHsKICAgICBTeW1ib2xJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgsIFJlZjxTdHJpbmdJbXBsPiYmIGJhc2UsIEZsYWdzIGZsYWdzID0gc19mbGFn
RGVmYXVsdCkKICAgICAgICAgOiBVbmlxdWVkU3RyaW5nSW1wbChDcmVhdGVTeW1ib2wsIGNoYXJh
Y3RlcnMsIGxlbmd0aCkKICAgICAgICAgLCBtX293bmVyKCZiYXNlLmxlYWtSZWYoKSkKLSAgICAg
ICAgLCBtX2hhc2hGb3JTeW1ib2wobmV4dEhhc2hGb3JTeW1ib2woKSkKKyAgICAgICAgLCBtX2hh
c2hGb3JTeW1ib2xTaGlmdGVkV2l0aEZsYWdDb3VudChuZXh0SGFzaEZvclN5bWJvbCgpKQogICAg
ICAgICAsIG1fZmxhZ3MoZmxhZ3MpCiAgICAgewogICAgICAgICBBU1NFUlQoU3RyaW5nSW1wbDo6
dGFpbE9mZnNldDxTdHJpbmdJbXBsKj4oKSA9PSBPQkpFQ1RfT0ZGU0VUT0YoU3ltYm9sSW1wbCwg
bV9vd25lcikpOwpAQCAtMTEwLDcgKzExMCw3IEBAIGNsYXNzIFN5bWJvbEltcGwgOiBwdWJsaWMg
VW5pcXVlZFN0cmluZ0ltcGwgewogICAgIFN5bWJvbEltcGwoRmxhZ3MgZmxhZ3MgPSBzX2ZsYWdE
ZWZhdWx0KQogICAgICAgICA6IFVuaXF1ZWRTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbCkKICAgICAg
ICAgLCBtX293bmVyKFN0cmluZ0ltcGw6OmVtcHR5KCkpCi0gICAgICAgICwgbV9oYXNoRm9yU3lt
Ym9sKG5leHRIYXNoRm9yU3ltYm9sKCkpCisgICAgICAgICwgbV9oYXNoRm9yU3ltYm9sU2hpZnRl
ZFdpdGhGbGFnQ291bnQobmV4dEhhc2hGb3JTeW1ib2woKSkKICAgICAgICAgLCBtX2ZsYWdzKGZs
YWdzIHwgc19mbGFnSXNOdWxsU3ltYm9sKQogICAgIHsKICAgICAgICAgQVNTRVJUKFN0cmluZ0lt
cGw6OnRhaWxPZmZzZXQ8U3RyaW5nSW1wbCo+KCkgPT0gT0JKRUNUX09GRlNFVE9GKFN5bWJvbElt
cGwsIG1fb3duZXIpKTsKQEAgLTExOSw3ICsxMTksNyBAQCBjbGFzcyBTeW1ib2xJbXBsIDogcHVi
bGljIFVuaXF1ZWRTdHJpbmdJbXBsIHsKICAgICAvLyBUaGUgcG9pbnRlciB0byB0aGUgb3duZXIg
c3RyaW5nIHNob3VsZCBiZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYWZ0ZXIgdGhlIFN0cmluZ0lt
cGwgbGF5b3V0LAogICAgIC8vIHNpbmNlIHdlIHdvdWxkIGxpa2UgdG8gYWxpZ24gdGhlIGxheW91
dCBvZiBTeW1ib2xJbXBsIHRvIHRoZSBvbmUgb2YgQnVmZmVyU3Vic3RyaW5nIFN0cmluZ0ltcGwu
CiAgICAgU3RyaW5nSW1wbCogbV9vd25lcjsKLSAgICB1bnNpZ25lZCBtX2hhc2hGb3JTeW1ib2w7
CisgICAgdW5zaWduZWQgbV9oYXNoRm9yU3ltYm9sU2hpZnRlZFdpdGhGbGFnQ291bnQ7CiAgICAg
RmxhZ3MgbV9mbGFncyB7IHNfZmxhZ0RlZmF1bHQgfTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihTeW1ib2xJbXBsKSA9PSBzaXplb2YoU3ltYm9sSW1wbDo6U3RhdGljU3ltYm9sSW1wbCksICIi
KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCAzN2U0ZGQ5ODUxZDM0MWQ3ZjNmOTM3N2ZiMTQ2ZTMxMmQ5MWEzNjg4Li40ZjU1
NDRkNDI3NWM5NDBmZjc2M2I3MDI1OTM2MDc5MjEzZjFkMDdhIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMjAtMDItMjIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAg
ICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHRlc3QgaXMgaGFsZi1icm9rZW4gc2luY2UgaXQgcmVs
aWVzIG9uIEhhc2hNYXAncyBvcmRlciBpbXBsaWNpdGx5LgorICAgICAgICBXZSBjaGFuZ2VkIFN5
bWJvbEltcGwncyBoYXNoIGNvZGUsIHNvIGl0IG1ha2VzIHRoZSByZXN1bHQgZGlmZmVyZW50Lgor
CisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL3RhaWwtZGVsZXRlZC1mcmFtZXMvdGFpbC1k
ZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMi0yMSAgSmFz
b24gTGF3cmVuY2UgIDxsYXdyZW5jZS5qQGFwcGxlLmNvbT4KIAogICAgICAgICBbIGlPUyBdIGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2tleS1nZW5lcmF0b3JzL3Jl
YWRpbmctYXV0b2luY3JlbWVudC1pbmRleGVzLWN1cnNvcnMuYW55LnNlcnZpY2V3b3JrZXIuaHRt
bCBpcyBmbGFreSBmYWlsaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Rl
YnVnZ2VyL3RhaWwtZGVsZXRlZC1mcmFtZXMvdGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVl
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci90YWlsLWRlbGV0
ZWQtZnJhbWVzL3RhaWwtZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1ZS1leHBlY3RlZC50eHQKaW5k
ZXggMjEyNWZiNTI5NzFjZWNlYWI3YzA4MDM0ZjJkNTM2YzdhMmE0YjRlOC4uZTM3NDQ2NDUzN2Fh
YjdkNGEwYWI1ZTI0ZjRmYzhhNzBmZjdmNWI3YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2RlYnVnZ2VyL3RhaWwtZGVsZXRlZC1mcmFtZXMvdGFpbC1kZWxldGVkLWZyYW1lcy10
aGlzLXZhbHVlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXIvdGFpbC1kZWxldGVkLWZyYW1lcy90YWlsLWRlbGV0ZWQtZnJhbWVzLXRoaXMtdmFsdWUtZXhw
ZWN0ZWQudHh0CkBAIC0xNCw2ICsxNCw2IEBAIENBTEwgU1RBQ0s6CiAzOiBbRl0gc3RhcnRBQkMK
ICAgdGhpczogdW5kZWZpbmVkCiA0OiBbUF0gR2xvYmFsIENvZGUKLSAgdGhpczogYyAtIAorICB0
aGlzOiBhIC0gCiBSRVNVTUVECiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391486</attachid>
            <date>2020-02-23 02:48:03 -0800</date>
            <delta_ts>2020-02-23 03:28:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207827-20200223024803.patch</filename>
            <type>text/plain</type>
            <size>131041</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NDI3NDBmNDllZGMwZWQ3MmU3YzUzZjg3NzNiYzQ2NzUwNzM1NGYyLi45NjMyMDdjMTBiMWFhMDM2
NzY2ODBiZmFmODM5YTNjODY0ZTE0MWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTEgQEAKKzIwMjAtMDItMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNocmlua3Mgc2l6ZW9mKFN0
cnVjdHVyZSkgZnJvbSAxMTIgdG8gOTYgKDE2IGJ5dGVzKSBpbiA2NCBiaXQgYXJjaGl0ZWN0dXJl
cy4KKyAgICAgICAgU3RydWN0dXJlIGlzIG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IGFsbG9j
YXRlZCBKU0NlbGwgaW4gSlNDLiBTbyBpdCBpcyB3b3J0aCBkb2luZworICAgICAgICBhbGwgdGhl
IHNvcnQgb2YgYml0IGhhY2tzIHRvIG1ha2UgaXQgY29tcGFjdCBhcyBtdWNoIGFzIHBvc3NpYmxl
LgorCisgICAgICAgICAgICAxLiBTdHJpbmdIYXNoZXIgaXMgYWx3YXlzIGdlbmVyYXRpbmcgMjQg
Yml0cyBoYXNoZXMgc28gZmFyLiBCeSBsZXZlcmFnaW5nIHRoaXMgZmFjdCwKKyAgICAgICAgICAg
ICAgIHdlIHN0b3JlIGhhc2ggY29kZSBpbiBTdHJ1Y3R1cmUgaW4gMyBieXRlcyAoMjQgYml0cykg
Zm9yIHByb3BlcnR5LWhhc2ggYW5kIHNlZW4tcHJvcGVydHktaGFzaC4KKyAgICAgICAgICAgIDIu
IFB1dCBvdXRPZkxpbmVUeXBlRmxhZ3MsIG1heE9mZnNldCBhbmQgdHJhbnNpdGlvbk9mZnNldCBp
bnRvIGhpZ2hlc3QgYml0cyBvZiBtX3Byb3BlcnR5VGFibGVVbnNhZmUsCisgICAgICAgICAgICAg
ICBtX2NhY2hlZFByb3RvdHlwZUNoYWluLCBtX2NsYXNzSW5mbywgYW5kIG1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZS4gRG8gbm90IHVzZSBQYWNrZWRQdHIgaGVyZSBzaW5jZQorICAgICAgICAgICAg
ICAgc29tZSBvZiB0aGVtIGFyZSBjb25jdXJyZW50bHkgYWNjZXNzZWQgYnkgR0MuCisgICAgICAg
ICAgICAzLiBQdXQgbV9pbmxpbmVDYXBhY2l0eSBpbnRvIGxvd2VyIDggYml0cyBvZiBtX3Byb3Bl
cnR5SGFzaC4KKyAgICAgICAgICAgIDQuIFJlbW92ZSBtX2xvY2ssIGFuZCB1c2UgU3RydWN0dXJl
OjpjZWxsTG9jaygpIGluc3RlYWQuCisgICAgICAgICAgICA1LiBSZW1vdmUgbV9jYWNoZWRQcm90
b3R5cGVDaGFpbiBjbGVhcmluZyBmcm9tIHRoZSBjb25jdXJyZW50IGNvbGxlY3RvciBzaW5jZSBp
dCBpcyBkZWFkIGNvZGUsIGl0IHdhcyBvbGQgY29kZS4KKyAgICAgICAgICAgICAgIFdlIGFyZSBz
ZXR0aW5nIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4gb25seSBpZiBTdHJ1Y3R1cmUgaXMgZm9yIEpT
T2JqZWN0LiBDbGVhcmluZyBoYXBwZW5zIG9ubHkgaWYgaXQgaXMgbm90CisgICAgICAgICAgICAg
ICBhIFN0cnVjdHVyZSBmb3IgSlNPYmplY3QuCisgICAgICAgICAgICA2LiBQcmV2aW91cyBTdHJ1
Y3R1cmUgaXMgaGVsZCBhcyBTdHJ1Y3R1cmVJRCBtX3ByZXZpb3VzLiBBbmQgbV9wcmV2aW91c09y
UmFyZURhdGEgYmVjb21lcyBtX2NhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YS4KKworICAg
ICAgICBNYW55IHBhaXJzIGFyZSB1c2luZyBDb21wYWN0UG9pbnRlclR1cGxlIHRvIG1ha2UgY29k
ZSBjbGVhbi4KKyAgICAgICAgQ29tYmluaW5nIGFsbCBvZiB0aGUgYWJvdmUgdGVjaG5pcXVlcyBh
bmQgZ2V0cyB1cyAxNiBieXRlcy4KKworICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpzdHJ1Y3R1cmUgY29uc3Qp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEtleXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlVGhpcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVQcm9taXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUludGVybmFsRmllbGRPYmplY3QpOgor
ICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVPYmplY3RLZXlzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUNyZWF0ZVByb21pc2UpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToKKyAgICAg
ICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6ZW1pdExvYWRDbGFzc0luZm9Gcm9tU3RydWN0dXJlKToKKyAgICAgICAgKiBqaXQvSklUT3Bj
b2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAg
ICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
Ojp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBy
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkNsb25lZEFyZ3VtZW50
czo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRKU0xvY2su
aDoKKyAgICAgICAgKEpTQzo6Q29uY3VycmVudEpTTG9ja2VyQmFzZTo6Q29uY3VycmVudEpTTG9j
a2VyQmFzZSk6CisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGw6OkdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwpOgorICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXJJbXBsOjp+R0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbCk6CisgICAgICAg
IChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlckltcGw6OkNvbmN1cnJlbnRKU0xvY2tlckltcGwpOgor
ICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXI6OkdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tl
cjo6fkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
bmN1cnJlbnRKU0xvY2tlcjo6Q29uY3VycmVudEpTTG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdENvbmN1cnJlbnRs
eSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnByZXBhcmVUb1B1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVHlwZS5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OnNldFNpbmds
ZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmNv
bnRhaW5zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpn
ZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlSW1wbCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb25TbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
cGluKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5nKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjplbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yIGNvbnN0KToKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldCk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cnVsZU91dFVuc2VlblByb3BlcnR5SGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6c2VlblByb3BlcnRpZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6Zm9yRWFjaFByb3BlcnR5Q29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Ojp0cmFuc2l0aXZlbHlUcmFuc2l0aW9uZWRGcm9tKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpjYWNoZWRQcm90b3R5cGVDaGFpbiBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3Rv
dHlwZUNoYWluIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxh
Y2VtZW50V2F0Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnNldFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsZWFyUHJv
cGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0T3V0T2ZMaW5lVHlwZUZs
YWdzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRJbmxpbmVDYXBhY2l0eSk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0Q2xhc3NJbmZvKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpzZXRQcmV2aW91c0lEKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjbGVhclByZXZp
b3VzSUQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJh
cmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVE
YXRhOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
Lmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hlZFByb3RvdHlwZUNoYWluKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldFByZXZpb3VzSUQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xlYXJQcmV2aW91c0lEKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAg
ICAoSlNDOjp0b0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGU6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZTo6aXNVc2luZ1NpbmdsZVNsb3QgY29uc3QpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Om1hcCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6d2Vha0ltcGwgY29uc3QpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OnNldE1hcCk6CisgICAgICAgICogdG9vbHMvSlNEb2xs
YXJWTS5jcHA6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3Ry
dWN0dXJlVHJhbnNpdGlvbkxpc3QpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5
cG9pbnRTbG93KToKKwogMjAyMC0wMi0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgTWFrZSBzdXBwb3J0IGZvciBieXRlY29kZSBjYWNoaW5nIG1vcmUgcm9idXN0
IGFnYWluc3QgZmlsZSBjb3JydXB0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBjZjEyZjI3NjUwZDQ4ZDUwMTViOGRjYzEx
ZTU3ODI1YjM1YWRiODAyLi4yOWFlYWU1MWYzNTAyNWEwOWJlZTQyMGMzNmZjZTdiNzM1MjU5NzY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIwLTAyLTIzICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gU2hyaW5rIFN0cnVjdHVyZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3ODI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBDb21wYWN0UG9pbnRl
clR1cGxlIHVzYWJsZSBmb3Igc3RvcmluZyAxNiBiaXRzIGRhdGEuCisKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogd3RmL0NvbXBhY3RQb2ludGVyVHVwbGUuaDoKKyAgICAgICAgKiB3dGYvQ29t
cGFjdFJlZlB0clR1cGxlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aDoKKyAgICAgICAgKiB3dGYvdGV4dC9TeW1ib2xJbXBsLmg6CisgICAgICAgIChXVEY6OlN5bWJv
bEltcGw6Omhhc2hGb3JTeW1ib2wgY29uc3QpOgorICAgICAgICAoV1RGOjpTeW1ib2xJbXBsOjpT
eW1ib2xJbXBsKToKKwogMjAyMC0wMi0yMSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjU3MDcyKTogTW90aW9uTWFyayB8IE1hYyB8IC0x
MCUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRl
eCAyYWY0ODBhOWNlN2Q4MDI1Y2U1ODgzZDhhZGY5Yzk4NDI2OWJhOTc1Li5kZWY2NzUyOTM5YWU1
NDlkODE5YjU2ZTg0MDM0NDA4NTk4M2I1OWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNyZWF0ZSgKICAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCiAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1
bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVChvbGRTdHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91
c0lEKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0cnVjdHVyZSA9PSBuZXdTdHJ1Y3R1cmUt
PnByZXZpb3VzSUQodm0pKTsKIAogICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVy
ZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQogICAgIC8vIGVub3VnaCByZWdp
c3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCkBAIC03MDUsNyArNzA1LDcgQEAgYm9vbCBBY2Nlc3ND
YXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIAog
ICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAo
dmlzaXRvci52bSgpLmhlYXAuaXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisg
ICAgICAgIGlmICh2aXNpdG9yLnZtKCkuaGVhcC5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlv
dXNJRCh2aXNpdG9yLnZtKCkpKSkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQg
PSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCmlu
ZGV4IDc5ZDMxMDE1NWU5M2E1NDUzZDI4NjFjNDMyMjdiYTNiYWMxOWYyNzcuLmE3Njc3NjdiZmM2
MDM0OGRjNzU5M2E2ODRhM2Q2NDAyZDU2ZjcxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaApAQCAtMTU4LDcgKzE1OCw3IEBAIGNsYXNzIEFjY2Vzc0Nh
c2UgewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlm
IChtX3R5cGUgPT0gVHJhbnNpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+
cHJldmlvdXNJRCgpOworICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT5wcmV2aW91c0lE
KG1fc3RydWN0dXJlLT52bSgpKTsKICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOwog
ICAgIH0KICAgICBib29sIGd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKGNvbnN0IFN0cnVjdHVyZVN0
dWJJbmZvJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCmluZGV4IDY0MmIxNjM1NmY5MGU5YzM4NjAyZWJjNTdmZDllMDRhMGY0NWI1
MjguLjE3YmEyYjJmZjM1YTRmYWYwMTFhMzIyOTczZTc5NjllN2I0N2U1N2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC05NjA1LDcg
Kzk2MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdWJDbGFzcyhOb2Rl
KiBub2RlKQogICAgICAgICBHUFJSZWcgc3BlY2lmaWVkR1BSID0gc3BlY2lmaWVkLmdwcigpOwog
CiAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGJhc2VHUFIsIG90aGVyR1BS
LCBzcGVjaWZpZWRHUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhvdGhlckdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIG90aGVyR1BSKTsK
KyAgICAgICAgbV9qaXQuZW1pdExvYWRDbGFzc0luZm9Gcm9tU3RydWN0dXJlKG90aGVyR1BSLCBv
dGhlckdQUik7CiAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG5vZGUtPmNsYXNzSW5mbygpKSwgc3BlY2lmaWVkR1BSKTsKIAogICAgICAgICBDQ2FsbEhlbHBl
cnM6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOwpAQCAtMTI2OTgsMTAgKzEyNjk4LDEzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RLZXlzKE5vZGUqIG5vZGUpCiAKICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICAgICAg
bV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgb2JqZWN0R1BSLCBzdHJ1Y3R1cmVHUFIsIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnByZXZpb3VzT3JSYXJlRGF0YU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZDYWNoZWRQcm90b3R5cGVDaGFp
bk9yUmFyZURhdGEoKSksIHNjcmF0Y2hHUFIpOworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAg
ICAgICBtX2ppdC5hbmRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKFN0cnVjdHVyZTo6
Y2FjaGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhTWFzayksIHNjcmF0Y2hHUFIpOworI2VuZGlm
CiAKICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2Fs
bEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odm0oKS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUtPnN0cnVjdHVy
ZUlEKCkpKSkpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKGJpdHdpc2VfY2FzdDxp
bnQzMl90Pih2bSgpLnN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLT5zdHJ1Y3R1cmVJRCgpKSkp
KTsKIAogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgU3RydWN0dXJlUmFyZURhdGE6Om9mZnNldE9mQ2FjaGVkT3duS2V5cygpKSwgc2Ny
YXRjaEdQUik7CiAKQEAgLTEyODM5LDcgKzEyODQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNyZWF0ZVRoaXMoTm9kZSogbm9kZSkKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBK
SVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0
ZXJmbHksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAotICAgIG1faml0LmxvYWQ4KEpJVENvbXBp
bGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgaW5saW5lQ2FwYWNpdHlHUFIpOworICAgIG1faml0LmxvYWQ4KEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkp
LCBpbmxpbmVDYXBhY2l0eUdQUik7CiAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdEdQUiwgaW5saW5lQ2FwYWNpdHlHUFIpOwogICAgIG1faml0Lm11dGF0b3JGZW5j
ZSh2bSgpKTsKIApAQCAtMTI4NzcsOCArMTI4ODAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQ3JlYXRlUHJvbWlzZShOb2RlKiBub2RlKQogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmFyZURhdGFHUFIsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwogICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlKCkgKyBJbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1
bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgc3RydWN0dXJlR1BSKSk7
Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkg
PyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpLCBzY3JhdGNo
MUdQUik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVH
UFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7CisgICAgbV9qaXQuZW1pdExvYWRD
bGFzc0luZm9Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZUdQUiwgc2NyYXRjaDFHUFIpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNj
cmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0lu
dGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9taXNlOjppbmZvKCkpKSk7CiAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBnbG9iYWxPYmpl
Y3QpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIo
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpKSk7CiAKQEAg
LTEyOTI1LDggKzEyOTI4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUlu
dGVybmFsRmllbGRPYmplY3QoTm9kZSogbm9kZSwgT3BlcmF0aW9uIG9wZXIKICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVE
YXRhR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRh
ZykpKTsKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BS
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJv
ZmlsZSgpICsgSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVj
dHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVHUFIpOwogICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIHN0
cnVjdHVyZUdQUikpOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihKU0NsYXNzOjppbmZv
KCkpLCBzY3JhdGNoMUdQUik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIo
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7CisgICAgbV9q
aXQuZW1pdExvYWRDbGFzc0luZm9Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZUdQUiwgc2NyYXRjaDFH
UFIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKEpTQ2xhc3M6OmluZm8oKSkpKTsK
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCks
IGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAppbmRleCBiMTA4YWJmY2NiODk1OGE4MzA3YzBhYTc4Y2Q2N2YyMDJk
M2I4YzVjLi4yMTlhNGY0YTQzZDMzNzc1ODRlYjYzNTYzM2FiOTRjMjI2Yjg4ZjU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaApAQCAtMTM5LDExICsxMzksMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewogICAgIG1hY3JvKFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBc
CiAgICAgbWFjcm8oU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MsIFN0cmluZ0ltcGw6OmZsYWdzT2Zm
c2V0KCkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2xlbmd0aCwgU3RyaW5nSW1wbDo6bGVuZ3Ro
TWVtb3J5T2Zmc2V0KCkpIFwKLSAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJbmZvLCBTdHJ1Y3R1
cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCisgICAgbWFjcm8oU3RydWN0dXJlX2NsYXNzSW5mbywg
U3RydWN0dXJlOjpvZmZzZXRPZkNsYXNzSW5mbygpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2ds
b2JhbE9iamVjdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAgIG1hY3Jv
KFN0cnVjdHVyZV9pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5LCBTdHJ1Y3R1cmU6OmluZGV4
aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVyZV9p
bmxpbmVDYXBhY2l0eSwgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSBcCi0gICAg
bWFjcm8oU3RydWN0dXJlX3ByZXZpb3VzT3JSYXJlRGF0YSwgU3RydWN0dXJlOjpwcmV2aW91c09y
UmFyZURhdGFPZmZzZXQoKSkgXAorICAgIG1hY3JvKFN0cnVjdHVyZV9pbmxpbmVDYXBhY2l0eSwg
U3RydWN0dXJlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpIFwKKyAgICBtYWNybyhTdHJ1Y3R1
cmVfY2FjaGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhLCBTdHJ1Y3R1cmU6Om9mZnNldE9mQ2Fj
aGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhKCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfcHJv
dG90eXBlLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0
dXJlX3N0cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBt
YWNybyhTdHJ1Y3R1cmVSYXJlRGF0YV9jYWNoZWRPd25LZXlzLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6
b2Zmc2V0T2ZDYWNoZWRPd25LZXlzKCkpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA0ZDM0MjdiYzgyZThjOWIyNDdhYzg3MWEwMjAwMDFi
YjIzODI5ZjI2Li4yZGQ1NDg0MWQ0ZTMxZjU2ODExOGZiZDViODQ1NjI0NDA2MmFmNThkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC02MDkx
LDE3ICs2MDkxLDE3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICAgICAgICAgICAgICBM
VmFsdWUgb2JqZWN0ID0gbG93T2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
ICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKG9iamVjdCk7Ci0gICAgICAgICAg
ICAgICAgTFZhbHVlIHByZXZpb3VzT3JSYXJlRGF0YSA9IG1fb3V0LmxvYWRQdHIoc3RydWN0dXJl
LCBtX2hlYXBzLlN0cnVjdHVyZV9wcmV2aW91c09yUmFyZURhdGEpOwotICAgICAgICAgICAgICAg
IG1fb3V0LmJyYW5jaChtX291dC5ub3ROdWxsKHByZXZpb3VzT3JSYXJlRGF0YSksIHVuc3VyZShu
b3ROdWxsQ2FzZSksIHVuc3VyZShzbG93Q2FzZSkpOworICAgICAgICAgICAgICAgIExWYWx1ZSBj
YWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEgPSBtX291dC5iaXRBbmQobV9vdXQuY29uc3RJ
bnRQdHIoU3RydWN0dXJlOjpjYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGFNYXNrKSwgbV9v
dXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX2NhY2hlZFByb3RvdHlwZUNo
YWluT3JSYXJlRGF0YSkpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3RO
dWxsKGNhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YSksIHVuc3VyZShub3ROdWxsQ2FzZSks
IHVuc3VyZShzbG93Q2FzZSkpOwogCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhub3ROdWxsQ2FzZSwgcmFyZURhdGFDYXNlKTsKICAgICAgICAg
ICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFs
KG1fb3V0LmxvYWQzMihwcmV2aW91c09yUmFyZURhdGEsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVy
ZUlEKSwgbV9vdXQuY29uc3RJbnQzMihtX2dyYXBoLm1fdm0uc3RydWN0dXJlU3RydWN0dXJlLT5z
dHJ1Y3R1cmVJRCgpKSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKG1fb3V0Lmxv
YWQzMihjYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEsIG1faGVhcHMuSlNDZWxsX3N0cnVj
dHVyZUlEKSwgbV9vdXQuY29uc3RJbnQzMihtX2dyYXBoLm1fdm0uc3RydWN0dXJlUmFyZURhdGFT
dHJ1Y3R1cmUtPnN0cnVjdHVyZUlEKCkpKSwKICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKHJh
cmVEYXRhQ2FzZSksIHVuc3VyZShzbG93Q2FzZSkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8ocmFyZURhdGFDYXNlLCB1c2VDYWNoZUNhc2UpOwogICAgICAgICAgICAgICAgIEFT
U0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkT3du
S2V5c1NlbnRpbmVsKCkpID09IDEpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBjYWNoZWRPd25L
ZXlzID0gbV9vdXQubG9hZFB0cihwcmV2aW91c09yUmFyZURhdGEsIG1faGVhcHMuU3RydWN0dXJl
UmFyZURhdGFfY2FjaGVkT3duS2V5cyk7CisgICAgICAgICAgICAgICAgTFZhbHVlIGNhY2hlZE93
bktleXMgPSBtX291dC5sb2FkUHRyKGNhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YSwgbV9o
ZWFwcy5TdHJ1Y3R1cmVSYXJlRGF0YV9jYWNoZWRPd25LZXlzKTsKICAgICAgICAgICAgICAgICBt
X291dC5icmFuY2gobV9vdXQuYmVsb3dPckVxdWFsKGNhY2hlZE93bktleXMsIG1fb3V0LmNvbnN0
SW50UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oU3RydWN0dXJlUmFyZURhdGE6OmNhY2hlZE93bktl
eXNTZW50aW5lbCgpKSkpLCB1bnN1cmUoc2xvd0Nhc2UpLCB1bnN1cmUodXNlQ2FjaGVDYXNlKSk7
CiAKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh1c2VDYWNoZUNhc2UsIHNsb3dCdXRB
cnJheUJ1ZmZlckNhc2UpOwpAQCAtNjY3NSw3ICs2Njc1LDggQEAgY2xhc3MgTG93ZXJERkdUb0Iz
IHsKICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzY0KHN0cnVjdHVyZSksIHJhcmVs
eShzbG93Q2FzZSksIHVzdWFsbHkoaGFzU3RydWN0dXJlKSk7CiAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaGFzU3RydWN0dXJlLCBjaGVja0dsb2JhbE9iamVjdENhc2UpOwotICAgICAgICBtX291
dC5icmFuY2gobV9vdXQuZXF1YWwobV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3Ry
dWN0dXJlX2NsYXNzSW5mbyksIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+aXNJbnRlcm5hbFBy
b21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkgOiBKU1Byb21pc2U6OmluZm8oKSkp
LCB1c3VhbGx5KGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSksIHJhcmVseShzbG93Q2FzZSkpOworICAg
ICAgICBMVmFsdWUgY2xhc3NJbmZvID0gbV9vdXQuYml0QW5kKG1fb3V0LmxvYWRQdHIoc3RydWN0
dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5jb25zdEludFB0cihTdHJ1
Y3R1cmU6OmNsYXNzSW5mb01hc2spKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFs
KGNsYXNzSW5mbywgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5pc0ludGVybmFsUHJvbWlzZSgp
ID8gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSA6IEpTUHJvbWlzZTo6aW5mbygpKSksIHVzdWFs
bHkoY2hlY2tHbG9iYWxPYmplY3RDYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CiAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY2hlY2tHbG9iYWxPYmplY3RDYXNlLCBmYXN0QWxsb2NhdGlvbkNhc2Up
OwogICAgICAgICBWYWx1ZUZyb21CbG9jayBkZXJpdmVkU3RydWN0dXJlID0gbV9vdXQuYW5jaG9y
KHN0cnVjdHVyZSk7CkBAIC02NzMwLDcgKzY3MzEsOCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewog
ICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQoc3RydWN0dXJlKSwgcmFyZWx5KHNs
b3dDYXNlKSwgdXN1YWxseShoYXNTdHJ1Y3R1cmUpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRU
byhoYXNTdHJ1Y3R1cmUsIGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSk7Ci0gICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5lcXVhbChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1
cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIoSlNDbGFzczo6aW5mbygpKSksIHVzdWFs
bHkoY2hlY2tHbG9iYWxPYmplY3RDYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAgICAgIExW
YWx1ZSBjbGFzc0luZm8gPSBtX291dC5iaXRBbmQobV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1f
aGVhcHMuU3RydWN0dXJlX2NsYXNzSW5mbyksIG1fb3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6
Y2xhc3NJbmZvTWFzaykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJ
bmZvLCBtX291dC5jb25zdEludFB0cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0ds
b2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhjaGVja0dsb2JhbE9iamVjdENhc2UsIGZhc3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAgICAg
IG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFw
cy5TdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0KSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSksIHVz
dWFsbHkoZmFzdEFsbG9jYXRpb25DYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CkBAIC0xMzIwOCw3
ICsxMzIxMCw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogCiAgICAgICAgICAgICBMVmFsdWUg
c3RydWN0dXJlID0gbG9hZFN0cnVjdHVyZShjZWxsKTsKLSAgICAgICAgICAgIExWYWx1ZSBjbGFz
c0luZm8gPSBtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJ
bmZvKTsKKyAgICAgICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5iaXRBbmQobV9vdXQu
bG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX2NsYXNzSW5mbyksIG1fb3V0LmNv
bnN0SW50UHRyKFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFzaykpOwogICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgb3RoZXJBdFN0YXJ0ID0gbV9vdXQuYW5jaG9yKGNsYXNzSW5mbyk7CiAgICAgICAg
ICAgICBtX291dC5qdW1wKGxvb3ApOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAppbmRleCA3MjlmNTg0NjM3ZDM5MzU1ODY3YzRlNmQxNDIzZDY2OWE2NmEy
MTY1Li40Y2I2ZWRkMmViZDkyZTc0ZmRiNWUyNDVkMGRkMjNkODc2YTE4NzljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTE1MTcsNiArMTUxNywx
NCBAQCBjbGFzcyBBc3NlbWJseUhlbHBlcnMgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXIgewogICAg
IAogICAgIHZvaWQgZW1pdExvYWRTdHJ1Y3R1cmUoVk0mLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVn
aXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCisgICAgdm9pZCBlbWl0TG9hZENs
YXNzSW5mb0Zyb21TdHJ1Y3R1cmUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHN0cnVjdHVyZSwgU3RydWN0dXJlOjpv
ZmZzZXRPZkNsYXNzSW5mbygpKSwgZHN0KTsKKyNpZiBDUFUoQUREUkVTUzY0KSAvLyBOb3QgVVNF
KEpTVkFMVUU2NCkuIFN0cnVjdHVyZTo6bV9jbGFzc0luZm8ncyBpbXBsZW1lbnRhdGlvbiBpcyBj
aGFuZ2VkIGJ5IHNpemUgb2YgcG9pbnRlci4KKyAgICAgICAgYW5kUHRyKFRydXN0ZWRJbW1QdHIo
Yml0d2lzZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmU6OmNsYXNzSW5mb01hc2spKSwgZHN0KTsKKyNl
bmRpZgorICAgIH0KKwogICAgIHZvaWQgZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKFRy
dXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQpCiAgICAg
ewogICAgICAgICBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oKnRoaXMsIHN0cnVjdHVy
ZSwgZGVzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA3
ZjM1OGMxMjAzYmRlYWU5MGQ0NGEyYzdmYjg4OTk3ODA4OWNhODVmLi5mZGUwMGJjYzhjOTA0NTlj
NzUzNDUwNjJhNjExZGMxZGU0MjljZmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKQEAgLTk3OSw3ICs5NzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7
CiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlh
YmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcs
IHNsb3dDYXNlcyk7Ci0gICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6
aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGxvYWQ4KEFkZHJlc3Mo
c3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0
Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0
Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAKaW5kZXggY2Q2NjdiMmU1ODc4MjBlMzczNWNkMzgxMzkzNmY5NmE5
OGM3OTY2YS4uYjExZjY1NWZjYjZmNjYwNTUyNzk5YzEyYTEwY2NiZjkxOTBlODYyMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTA5Myw3
ICsxMDkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgYXV0
byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcs
IHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGxv
YWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0
KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0
dXJlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5p
dGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOwogICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dFJlZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAppbmRleCA5MTgyMDQxNTU0
YmRjNzZjMTkxY2IxMzg1ZDEzYTljODFmZmQ0NWViLi4wODY5NmIxZjNhNDhmY2FiNjdkZmRmMWQw
ODE5MjVlMzRkOTFiNzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAg
LTYxNyw3ICs2MTcsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlE
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jawogICAgICAgICAgICAgICAg
IGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgIT0gbmV3U3RydWN0dXJlKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgICAgICAgICAg
ICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQodm0pID09IG9s
ZFN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFuZXdTdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVj
dCgpKTsKICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDIyNTRmY2M0Mjk2MTdjZTgzOTdkMjRlNTUwZTFhY2Vj
NjdiNjE0NDMuLmI5MTFlZTI3ODI2MjY2YzczZjc2ZTA5NTU0MmFkYzY1OTI1MDhjNmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtODU1
LDcgKzg1NSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQpCiAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBhID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCku
Z2V0KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGIgPSBiYXNl
VmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgICAgICAgICAgaWYgKHNsb3Qu
dHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpCi0gICAgICAgICAgICAgICAg
ICAgIGIgPSBiLT5wcmV2aW91c0lEKCk7CisgICAgICAgICAgICAgICAgICAgIGIgPSBiLT5wcmV2
aW91c0lEKHZtKTsKIAogICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmU6OnNob3VsZENvbnZl
cnRUb1BvbHlQcm90byhhLCBiKSkgewogICAgICAgICAgICAgICAgICAgICBhLT5yYXJlRGF0YSgp
LT5zaGFyZWRQb2x5UHJvdG9XYXRjaHBvaW50KCktPmludmFsaWRhdGUodm0sIFN0cmluZ0ZpcmVE
ZXRhaWwoIkRldGVjdGVkIHBvbHkgcHJvdG8gb3Bwb3J0dW5pdHkuIikpOwpAQCAtODc2LDkgKzg3
Niw5IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQpCiAgICAgICAg
IGlmIChuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSAmJiBiYXNl
Q2VsbCA9PSBzbG90LmJhc2UoKSkgewogICAgICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1
dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKICAgICAgICAgICAgICAgICBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bS5oZWFwKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgJiYgbmV3U3RydWN0
dXJlLT5wcmV2aW91c0lEKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChvbGRTdHJ1
Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAob2xkU3RydWN0dXJlID09IG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpICYmIG5ld1N0cnVj
dHVyZS0+cHJldmlvdXNJRCh2bSktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvbGRT
dHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKHZtKSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKHZtKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJhbnNpdGlv
bldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2F3UG9seVByb3RvID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAppbmRleCA5NmEzNjM1ZTY4MjczOTNl
ZTgzNmQ4MDQ3NzcyNGEyNWQ1NDZjMjYxLi4yNDliYTVhYWM1MWU1MDkwY2YyM2Y3ZjllOGU5ZTQ3
YmMyMWVmNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25l
ZEFyZ3VtZW50cy5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCBTdHJ1Y3R1cmUqIENsb25lZEFyZ3Vt
ZW50czo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDbG9uZWRBcmd1bWVudHNUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSwgaW5kZXhpbmdUeXBlKTsKICAgICBzdHJ1Y3R1cmUtPmFkZFByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb24oCiAgICAgICAgIHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLAot
ICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIFsmXSAo
Y29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChvZmZzZXQgPT0gY2xvbmVkQXJndW1lbnRzTGVuZ3RoUHJvcGVydHlPZmZzZXQpOwogICAg
ICAgICAgICAgc3RydWN0dXJlLT5zZXRNYXhPZmZzZXQodm0sIG5ld01heE9mZnNldCk7CiAgICAg
ICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3Vy
cmVudEpTTG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpT
TG9jay5oCmluZGV4IGFhMjczYmFkYmVmYTczN2EwZWFhNTM0ZmJlYmE5ZjUwMWZkYjg2MjcuLjFk
NDA4MDcxMTVhZTM2NWQwZmZjNDM4NWRlZTU4NTFhNGQwYTlkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SlNMb2NrLmgKQEAgLTMzLDE4ICszMywx
OCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHVzaW5nIENvbmN1cnJlbnRKU0xvY2sgPSBMb2NrOwot
dXNpbmcgQ29uY3VycmVudEpTTG9ja2VySW1wbCA9IExvY2tIb2xkZXI7CiAKLXN0YXRpY19hc3Nl
cnQoc2l6ZW9mKENvbmN1cnJlbnRKU0xvY2spID09IDEsICJSZWdhcmRsZXNzIG9mIHN0YXR1cyBv
ZiBjb25jdXJyZW50IEpTIGZsYWcsIHNpemUgb2YgQ29udXJyZW50SlNMb2NrIGlzIGFsd2F5cyBv
bmUgYnl0ZS4iKTsKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKENvbmN1cnJlbnRKU0xvY2spID09IDEs
ICJSZWdhcmRsZXNzIG9mIHN0YXR1cyBvZiBjb25jdXJyZW50IEpTIGZsYWcsIHNpemUgb2YgQ29u
Y3VycmVudEpTTG9jayBpcyBhbHdheXMgb25lIGJ5dGUuIik7CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IExvY2s+CiBjbGFzcyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIDogcHVibGljIEFic3RyYWN0TG9j
a2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50SlNMb2NrZXJCYXNlKTsK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlKENvbmN1cnJlbnRK
U0xvY2smIGxvY2thYmxlKQorICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UoTG9j
ayYgbG9ja2FibGUpCiAgICAgICAgIDogbV9sb2NrZXIoJmxvY2thYmxlKQogICAgIHsKICAgICB9
Ci0gICAgZXhwbGljaXQgQ29uY3VycmVudEpTTG9ja2VyQmFzZShDb25jdXJyZW50SlNMb2NrKiBs
b2NrYWJsZSkKKyAgICBleHBsaWNpdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlKExvY2sqIGxvY2th
YmxlKQogICAgICAgICA6IG1fbG9ja2VyKGxvY2thYmxlKQogICAgIHsKICAgICB9CkBAIC02NCw2
MyArNjQsNjUgQEAgY2xhc3MgQ29uY3VycmVudEpTTG9ja2VyQmFzZSA6IHB1YmxpYyBBYnN0cmFj
dExvY2tlciB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvbmN1cnJlbnRKU0xvY2tlckltcGwg
bV9sb2NrZXI7CisgICAgTG9ja2VyPExvY2s+IG1fbG9ja2VyOwogfTsKIAotY2xhc3MgR0NTYWZl
Q29uY3VycmVudEpTTG9ja2VyIDogcHVibGljIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgewordGVt
cGxhdGU8dHlwZW5hbWUgTG9jaz4KK2NsYXNzIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwg
OiBwdWJsaWMgQ29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPiB7CiBwdWJsaWM6Ci0gICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyKENvbmN1cnJlbnRKU0xvY2smIGxvY2thYmxlLCBIZWFwJiBo
ZWFwKQotICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UobG9ja2FibGUpCisgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VySW1wbChMb2NrJiBsb2NrYWJsZSwgSGVhcCYgaGVhcCkKKyAg
ICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+KGxvY2thYmxlKQogICAgICAgICAs
IG1fZGVmZXJHQyhoZWFwKQogICAgIHsKICAgICB9CiAKLSAgICBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXIoQ29uY3VycmVudEpTTG9jayogbG9ja2FibGUsIEhlYXAmIGhlYXApCi0gICAgICAgIDog
Q29uY3VycmVudEpTTG9ja2VyQmFzZShsb2NrYWJsZSkKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXJJbXBsKExvY2sqIGxvY2thYmxlLCBIZWFwJiBoZWFwKQorICAgICAgICA6IENvbmN1cnJl
bnRKU0xvY2tlckJhc2U8TG9jaz4obG9ja2FibGUpCiAgICAgICAgICwgbV9kZWZlckdDKGhlYXAp
CiAgICAgewogICAgIH0KIAotICAgIH5HQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIoKQorICAgIH5H
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsKCkKICAgICB7CiAgICAgICAgIC8vIFdlIGhhdmUg
dG8gdW5sb2NrIGVhcmx5IGR1ZSB0byB0aGUgZGVzdHJ1Y3Rpb24gb3JkZXIgb2YgYmFzZQogICAg
ICAgICAvLyB2cy4gZGVyaXZlZCBjbGFzc2VzLiBJZiB3ZSBkaWRuJ3QsIHRoZW4gd2Ugd291bGQg
ZGVzdHJveSB0aGUgCiAgICAgICAgIC8vIERlZmVyR0Mgb2JqZWN0IGJlZm9yZSB1bmxvY2tpbmcg
dGhlIGxvY2sgd2hpY2ggY291bGQgY2F1c2UgYSBHQwogICAgICAgICAvLyBhbmQgcmVzdWx0aW5n
IGRlYWRsb2NrLgotICAgICAgICB1bmxvY2tFYXJseSgpOworICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXJCYXNlPExvY2s+Ojp1bmxvY2tFYXJseSgpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBE
ZWZlckdDIG1fZGVmZXJHQzsKIH07CiAKLWNsYXNzIENvbmN1cnJlbnRKU0xvY2tlciA6IHB1Ymxp
YyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIHsKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2s+CitjbGFz
cyBDb25jdXJyZW50SlNMb2NrZXJJbXBsIDogcHVibGljIENvbmN1cnJlbnRKU0xvY2tlckJhc2U8
TG9jaz4gewogcHVibGljOgotICAgIENvbmN1cnJlbnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2Nr
JiBsb2NrYWJsZSkKLSAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQor
ICAgIENvbmN1cnJlbnRKU0xvY2tlckltcGwoTG9jayYgbG9ja2FibGUpCisgICAgICAgIDogQ29u
Y3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPihsb2NrYWJsZSkKICNpZiAhZGVmaW5lZChOREVCVUcp
CiAgICAgICAgICwgbV9kaXNhbGxvd0dDKHN0ZDo6aW5fcGxhY2UpCiAjZW5kaWYKICAgICB7CiAg
ICAgfQogCi0gICAgQ29uY3VycmVudEpTTG9ja2VyKENvbmN1cnJlbnRKU0xvY2sqIGxvY2thYmxl
KQotICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2UobG9ja2FibGUpCisgICAgQ29uY3Vy
cmVudEpTTG9ja2VySW1wbChMb2NrKiBsb2NrYWJsZSkKKyAgICAgICAgOiBDb25jdXJyZW50SlNM
b2NrZXJCYXNlPExvY2s+KGxvY2thYmxlKQogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICAgICAg
LCBtX2Rpc2FsbG93R0Moc3RkOjppbl9wbGFjZSkKICNlbmRpZgogICAgIHsKICAgICB9CiAKLSAg
ICBDb25jdXJyZW50SlNMb2NrZXIoTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKQotICAgICAgICA6IENv
bmN1cnJlbnRKU0xvY2tlckJhc2UoTm9Mb2NraW5nTmVjZXNzYXJ5KQorICAgIENvbmN1cnJlbnRK
U0xvY2tlckltcGwoTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKQorICAgICAgICA6IENvbmN1cnJlbnRK
U0xvY2tlckJhc2U8TG9jaz4oTm9Mb2NraW5nTmVjZXNzYXJ5KQogI2lmICFkZWZpbmVkKE5ERUJV
RykKICAgICAgICAgLCBtX2Rpc2FsbG93R0MoV1RGOjpudWxsb3B0KQogI2VuZGlmCiAgICAgewog
ICAgIH0KICAgICAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIoaW50KSA9IGRlbGV0ZTsKKyAgICBD
b25jdXJyZW50SlNMb2NrZXJJbXBsKGludCkgPSBkZWxldGU7CiAKICNpZiAhZGVmaW5lZChOREVC
VUcpCiBwcml2YXRlOgpAQCAtMTI4LDQgKzEzMCw3IEBAIGNsYXNzIENvbmN1cnJlbnRKU0xvY2tl
ciA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJCYXNlIHsKICNlbmRpZgogfTsKIAordXNpbmcg
Q29uY3VycmVudEpTTG9ja2VyID0gQ29uY3VycmVudEpTTG9ja2VySW1wbDxDb25jdXJyZW50SlNM
b2NrPjsKK3VzaW5nIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciA9IEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlckltcGw8Q29uY3VycmVudEpTTG9jaz47CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAppbmRleCA2NjVkMDg4OWNmNDQ2MWMzYWIw
YTJhZjRiMDdjNmE1OGM5MDQyMWM0Li5kNTY1NmY4YmZkZmY2MzI5OTJhYzFkYTQ1MWUzNWMxYTU0
OGQ0NjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaApAQCAtMjQsNiAr
MjQsNyBAQAogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKICNpbmNsdWRlICJDZWxsU3RhdGUuaCIK
KyNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiQ29uc3RydWN0RGF0YS5o
IgogI2luY2x1ZGUgIkVudW1lcmF0aW9uTW9kZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTI4
OCw2ICsyODksOSBAQCBjbGFzcyBKU0NlbGxMb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CiB9OwogCit1c2luZyBDb25jdXJyZW50
SlNDZWxsTG9ja2VyID0gQ29uY3VycmVudEpTTG9ja2VySW1wbDxKU0NlbGxMb2NrPjsKK3VzaW5n
IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgPSBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJ
bXBsPEpTQ2VsbExvY2s+OworCiAvLyBGSVhNRTogUmVmZXIgdG8gU3Vic3BhY2UgYnkgcmVmZXJl
bmNlLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4OAog
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAppbmRleCBhY2QyOWRlZDgxMzUxZmIyODRiMjE1OWFkNDdhNjMxYzM0OTRmMWRm
Li4zYTUxMjFkNjlkZmI0ZmIyZmI5Zjg4NWNhN2ZmM2ZlNTVjMDRkZDgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCkBAIC0yMDA1LDcgKzIwMDUsNyBAQCBi
b29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcgogCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IGludmFsaWRPZmZzZXQ7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkpCi0gICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgW10gKGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKKyAg
ICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbih2bSwgcHJvcGVydHlOYW1lLCBbXShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9j
a2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCAmZGVmZXJyZWRXYXRj
aHBvaW50RmlyZSk7CiAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+bV9idXR0ZXJmbHkgJiYg
IXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhc3RydWN0dXJlLT5oYXNJbmRleGlu
Z0hlYWRlcih0aGlzT2JqZWN0KSkgewpAQCAtMzc2Niw3ICszNzY2LDcgQEAgdm9pZCBKU09iamVj
dDo6Y29udmVydFRvRGljdGlvbmFyeShWTSYgdm0pCiAgICAgICAgIHZtLCBTdHJ1Y3R1cmU6OnRv
Q2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksICZkZWZlcnJl
ZFdhdGNocG9pbnRGaXJlKSk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0
ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKQordm9pZCBK
U09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3Vy
cmVudEpTQ2VsbExvY2tlciYsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBv
dXRPZkxpbmVDYXBhY2l0eUFmdGVyKQogewogICAgIC8vIFRoaXMgY291bGQgaW50ZXJsZWF2ZSB2
aXNpdENoaWxkcmVuIGJlY2F1c2Ugc29tZSBvbGQgc3RydWN0dXJlIGNvdWxkIGhhdmUgYmVlbiBh
IG5vbgogICAgIC8vIGRpY3Rpb25hcnkgc3RydWN0dXJlLiBXZSBoYXZlIHRvIGJlIGNyYXp5IGNh
cmVmdWwuIEJ1dCwgd2UgYXJlIGd1YXJhbnRlZWQgdG8gYmUgaG9sZGluZwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKaW5kZXggZWM2MzAwZWE5Yjk3MmNlOWJhMGZhZDgx
ODI1N2FmYjIwZDgyYTJlZC4uNjUxMTYwYmUwYjAxNzg3MGNlOTA5NmJmOTJhNTVkY2YwZTZjZGJi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCkBAIC04MTUsNyAr
ODE1LDcgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB7CiAgICAgICAg
IHN0cnVjdHVyZSh2bSktPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCB0aGlzKTsKICAg
ICB9Ci0gICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXImLCBWTSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0
T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRl
bmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1cmUq
LCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CiAKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KCkgY29uc3QKICAgICB7CkBAIC0xMzI5LDcgKzEzMjksNyBAQCBpbmxpbmUg
SlNWYWx1ZSBKU09iamVjdDo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIC8vIGZsYXR0ZW4gYW4gb2JqZWN0LgogaW5saW5lIEpTVmFsdWUgSlNPYmpl
Y3Q6OmdldERpcmVjdENvbmN1cnJlbnRseShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KSBjb25zdAogewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3Ry
dWN0dXJlLT5sb2NrKCkpOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVj
dHVyZS0+Y2VsbExvY2soKSk7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gZ2V0RGlyZWN0KG9mZnNldCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGlu
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCmlu
ZGV4IGE2NzAwMzQ3ZjY5NzZlNjFiMDVkYjE4ZjJiMDk2YWFhNzllMmViYjMuLjk1YTY3MTBjMmUz
NTY4NDM2ZDVjY2EyOGM4NmIyZGM5NGQ4YTg4MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCkBAIC0yMTYsNyArMjE2LDcgQEAgQUxXQVlT
X0lOTElORSBQcm9wZXJ0eU9mZnNldCBKU09iamVjdDo6cHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oVk0mIHYKICAgICBQcm9wZXJ0eU9mZnNldCByZXN1bHQ7CiAgICAgc3RydWN0
dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAogICAgICAgICB2bSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzLAotICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0
KSB7CisgICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBuZXdPdXRPZkxpbmVDYXBhY2l0eSA9IFN0cnVjdHVyZTo6b3V0T2ZM
aW5lQ2FwYWNpdHkobmV3TWF4T2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChuZXdPdXRPZkxpbmVD
YXBhY2l0eSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0eSkgewogICAgICAgICAgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0
T2ZMaW5lQ2FwYWNpdHksIG5ld091dE9mTGluZUNhcGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGUuY3BwCmluZGV4IGIwMmIzNDdkNmE1MDA0NTUzYjU5MmVjNjRiNGMx
NDRlMzA4ZGQwY2YuLmExMzM3YzZhNGVmMTMxY2I4MTdjN2NmZDJjY2ZiOWNiMDc4NTU0ZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmNwcApAQCAtNDQsNiArNDQsNyBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpKU1R5cGUgdHlwZSkK
ICAgICBDQVNFKFN0cmluZ1R5cGUpCiAgICAgQ0FTRShTeW1ib2xUeXBlKQogICAgIENBU0UoQmln
SW50VHlwZSkKKyAgICBDQVNFKFN0cnVjdHVyZVJhcmVEYXRhVHlwZSkKICAgICBDQVNFKEN1c3Rv
bUdldHRlclNldHRlclR5cGUpCiAgICAgQ0FTRShBUElWYWx1ZVdyYXBwZXJUeXBlKQogICAgIENB
U0UoTmF0aXZlRXhlY3V0YWJsZVR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZS5oCmluZGV4IDE0Nzk5MjVkNmY1ZmFlNjNlNWQ3NTdlYTIzMGUyY2RiNGVkNDgyNmMuLmNkMjk1
M2MxMGYzMzZlZTAyNzY4MmExMGMwNjE3NjcwYWQyYTNjNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZS5oCkBAIC0yOSw2ICsyOSw3IEBAIGVudW0gSlNUeXBlIDogdWludDhf
dCB7CiAgICAgU3ltYm9sVHlwZSwKICAgICBCaWdJbnRUeXBlLAogCisgICAgU3RydWN0dXJlUmFy
ZURhdGFUeXBlLAogICAgIEdldHRlclNldHRlclR5cGUsCiAgICAgQ3VzdG9tR2V0dGVyU2V0dGVy
VHlwZSwKICAgICBBUElWYWx1ZVdyYXBwZXJUeXBlLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAKaW5kZXggZWRhNDQ2YmZiZTI2N2FiMDFiODUyZTE1ZmRlOWM5
YzMwZTZmNThlNi4uMGIyNGMzNjU3YWE2NDA1NDYzMDQyZDFkZTM1OTgwM2EwNDY1ZjE1YiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCkBAIC01OCw3ICs1
OCw3IEBAIGNsYXNzIFNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093bmVyIGZpbmFsIDogcHVibGlj
IFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSogdGFi
bGUgPSByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSo+KGNvbnRleHQp
OwogICAgICAgICBBU1NFUlQodGFibGUtPmlzVXNpbmdTaW5nbGVTbG90KCkpOwogICAgICAgICBX
ZWFrU2V0OjpkZWFsbG9jYXRlKHRhYmxlLT53ZWFrSW1wbCgpKTsKLSAgICAgICAgdGFibGUtPm1f
ZGF0YSA9IFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6VXNpbmdTaW5nbGVTbG90RmxhZzsKKyAg
ICAgICAgdGFibGUtPm1fZGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlOjpVc2luZ1NpbmdsZVNsb3RGbGFnKTsKICAgICB9CiB9OwogCkBAIC04NCwx
NCArODQsMTQgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzZXRTaW5n
bGVUcmFuc2l0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIGlmIChXZWFrSW1wbCogaW1w
bCA9IHRoaXMtPndlYWtJbXBsKCkpCiAgICAgICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUoaW1wbCk7
CiAgICAgV2Vha0ltcGwqIGltcGwgPSBXZWFrU2V0OjphbGxvY2F0ZShzdHJ1Y3R1cmUsICZzaW5n
bGVTbG90VHJhbnNpdGlvbldlYWtPd25lcigpLCB0aGlzKTsKLSAgICBtX2RhdGEgPSBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KGltcGwpIHwgVXNpbmdTaW5nbGVTbG90RmxhZzsKKyAgICBtX2RhdGEg
PSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oaW1wbCkgfCBV
c2luZ1NpbmdsZVNsb3RGbGFnKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6
OmNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJv
b2wgaXNBZGRpdGlvbikgY29uc3QKIHsKICAgICBpZiAoaXNVc2luZ1NpbmdsZVNsb3QoKSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAg
ICAgIHJldHVybiB0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5
TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygp
ID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlvbi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlv
bigpID09ICFpc0FkZGl0aW9uOworICAgICAgICByZXR1cm4gdHJhbnNpdGlvbiAmJiB0cmFuc2l0
aW9uLT50cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5z
aXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlz
UHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbjsKICAgICB9CiAgICAg
cmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkocmVw
LCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAgaW5saW5l
IFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0lt
cGwqIHJlcCwgdW5zaWduZWQKIHsKICAgICBpZiAoaXNVc2luZ1NpbmdsZVNsb3QoKSkgewogICAg
ICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAgICAg
IHJldHVybiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9
PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24o
KSA9PSAhaXNBZGRpdGlvbikgPyB0cmFuc2l0aW9uIDogMDsKKyAgICAgICAgcmV0dXJuICh0cmFu
c2l0aW9uICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUoKSA9PSByZXAgJiYg
dHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMg
JiYgdHJhbnNpdGlvbi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbigpID09ICFpc0FkZGl0
aW9uKSA/IHRyYW5zaXRpb24gOiBudWxscHRyOwogICAgIH0KICAgICByZXR1cm4gbWFwKCktPmdl
dChTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6OktleShyZXAsIGF0dHJpYnV0ZXMsIGlz
QWRkaXRpb24pKTsKIH0KQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZTo6YWRkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgfQogCiAgICAg
Ly8gQWRkIHRoZSBzdHJ1Y3R1cmUgdG8gdGhlIG1hcC4KLSAgICBtYXAoKS0+c2V0KFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZTo6SGFzaDo6S2V5KHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVy
dHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSwg
IXN0cnVjdHVyZS0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbigpKSwgc3RydWN0dXJlKTsK
KyAgICBtYXAoKS0+c2V0KFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6SGFzaDo6S2V5KHN0cnVj
dHVyZS0+dHJhbnNpdGlvblByb3BlcnR5TmFtZSgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9w
ZXJ0eUF0dHJpYnV0ZXMoKSwgIXN0cnVjdHVyZS0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlv
bigpKSwgc3RydWN0dXJlKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkK
QEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuc2l6ZSgpKSB7CiAgICAg
ICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgKytudW1iZXJMZWFmOwotICAgICAgICAg
ICAgICAgIGlmICghc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpCisgICAgICAgICAgICAgICAgaWYg
KCFzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoc3RydWN0dXJlLT52bSgpKSkKICAgICAgICAgICAgICAg
ICAgICAgKytudW1iZXJTaW5nbGV0b25zOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0x
NTEsNyArMTUxLDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0
YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZU9yTnVsbCgpKSB7CisgICAgICAgIGlmIChQ
cm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVs
bCgpKSB7CiAgICAgICAgICAgICArK251bWJlcldpdGhQcm9wZXJ0eU1hcHM7CiAgICAgICAgICAg
ICB0b3RhbFByb3BlcnR5TWFwc1NpemUgKz0gdGFibGUtPnNpemVJbk1lbW9yeSgpOwogICAgICAg
ICB9CkBAIC0xNzQsMTUgKzE3NCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3Mo
KQogU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHkpCiAgICAgOiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5n
ZXQoKSkKICAgICAsIG1fYmxvYih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlE
KHRoaXMpLCBpbmRleGluZ1R5cGUsIHR5cGVJbmZvKQotICAgICwgbV9vdXRPZkxpbmVUeXBlRmxh
Z3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpCi0gICAgLCBtX2lubGluZUNhcGFjaXR5
KGlubGluZUNhcGFjaXR5KQotICAgICwgbV9iaXRGaWVsZCgwKQogICAgICwgbV9nbG9iYWxPYmpl
Y3Qodm0sIHRoaXMsIGdsb2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6
TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5cGUodm0sIHRoaXMsIHByb3RvdHlwZSkKLSAgICAs
IG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
SXNXYXRjaGVkKQotICAgICwgbV9wcm9wZXJ0eUhhc2goMCkKIHsKKyAgICBzZXRJbmxpbmVDYXBh
Y2l0eShpbmxpbmVDYXBhY2l0eSk7CisgICAgc2V0Q2xhc3NJbmZvKGNsYXNzSW5mbyk7CiAgICAg
c2V0RGljdGlvbmFyeUtpbmQoTm9uZURpY3Rpb25hcnlLaW5kKTsKICAgICBzZXRJc1Bpbm5lZFBy
b3BlcnR5VGFibGUoZmFsc2UpOwogICAgIHNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXMoY2xh
c3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKQEAgLTIwMCwz
MSArMTk3LDMwIEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvCiAgICAgc2V0SXNQcm9wZXJ0eURl
bGV0aW9uVHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52
YWxpZE9mZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKLSAKKyAg
ICBzZXRPdXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpOwor
CiAgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNh
cGFjaXR5KCkpOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4oaW5saW5l
Q2FwYWNpdHkpIDwgZmlyc3RPdXRPZkxpbmVPZmZzZXQpOwogICAgIEFTU0VSVCghaGFzUmFyZURh
dGEoKSk7Ci0gICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhj
bHVkaW5nUHJvdG8oKSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQ
cm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwg
IW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAg
ICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBtX2Ns
YXNzSW5mby0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEp
OworICAgIEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGlu
Z1Byb3RvKCkgfHwgIXRoaXMtPmNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5
UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8
ICF0aGlzLT5jbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMo
KSk7CisgICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkg
fHwgdGhpcy0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6
OmdldENhbGxEYXRhKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIFN0cnVjdHVyZTo6c19pbmZvID0g
eyAiU3RydWN0dXJlIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShTdHJ1Y3R1cmUpIH07CiAKIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAgICA6
IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkKLSAgICAsIG1faW5saW5lQ2FwYWNpdHkoMCkKLSAg
ICAsIG1fYml0RmllbGQoMCkKICAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBqc051bGwoKSkK
LSAgICAsIG1fY2xhc3NJbmZvKGluZm8oKSkKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRT
ZXQoSXNXYXRjaGVkKQotICAgICwgbV9wcm9wZXJ0eUhhc2goMCkKIHsKKyAgICBzZXRJbmxpbmVD
YXBhY2l0eSgwKTsKKyAgICBzZXRDbGFzc0luZm8oaW5mbygpKTsKICAgICBzZXREaWN0aW9uYXJ5
S2luZChOb25lRGljdGlvbmFyeUtpbmQpOwogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZShm
YWxzZSk7Ci0gICAgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhtX2NsYXNzSW5mby0+aGFz
U3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgc2V0SGFzR2V0dGVyU2V0
dGVyUHJvcGVydGllcyhjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3Bl
cnRpZXMoKSk7CiAgICAgc2V0SGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcyhmYWxzZSk7
Ci0gICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90
byhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Cisg
ICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhj
bGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CiAgICAg
c2V0SGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKGZhbHNl
KTsKICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24odHJ1
ZSk7CiAgICAgc2V0VHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygwKTsKQEAgLTI0MCwyMyAr
MjM2LDI2IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAKICAgICBUeXBlSW5mbyB0
eXBlSW5mbyA9IFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyk7CiAgICAgbV9ibG9i
ID0gU3RydWN0dXJlSURCbG9iKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQo
dGhpcyksIDAsIHR5cGVJbmZvKTsKLSAgICBtX291dE9mTGluZVR5cGVGbGFncyA9IHR5cGVJbmZv
Lm91dE9mTGluZVR5cGVGbGFncygpOworICAgIHNldE91dE9mTGluZVR5cGVGbGFncyh0eXBlSW5m
by5vdXRPZkxpbmVUeXBlRmxhZ3MoKSk7CiAKLSAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRl
clNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3Rh
dGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKGhhc0dldHRlclNl
dHRlclByb3BlcnRpZXMoKSB8fCAhbV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9u
bHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlkZXNH
ZXRDYWxsRGF0YSgpIHx8IG1fY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAm
SlNDZWxsOjpnZXRDYWxsRGF0YSk7CisgICAgQVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAhY2xhc3NJbmZvKCktPmhhc1N0YXRpY1Nl
dHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzKCkgfHwgIWNsYXNzSW5mbygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJv
cGVydGllcygpKTsKKyAgICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2Fs
bERhdGEoKSB8fCBjbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2Vs
bDo6Z2V0Q2FsbERhdGEpOwogfQogCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVj
dHVyZSogcHJldmlvdXMsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJl
KiBkZWZlcnJlZCkKICAgICA6IEpTQ2VsbCh2bSwgdm0uc3RydWN0dXJlU3RydWN0dXJlLmdldCgp
KQotICAgICwgbV9pbmxpbmVDYXBhY2l0eShwcmV2aW91cy0+bV9pbmxpbmVDYXBhY2l0eSkKLSAg
ICAsIG1fYml0RmllbGQoMCkKLSAgICAsIG1fcHJvdG90eXBlKHZtLCB0aGlzLCBwcmV2aW91cy0+
bV9wcm90b3R5cGUuZ2V0KCkpCi0gICAgLCBtX2NsYXNzSW5mbyhwcmV2aW91cy0+bV9jbGFzc0lu
Zm8pCi0gICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkKKyNpZiBDUFUo
QUREUkVTUzY0KQorICAgICwgbV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydGllcyhwcmV2aW91
cy0+bV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydGllcykKKyNlbHNlCiAgICAgLCBtX3Byb3Bl
cnR5SGFzaChwcmV2aW91cy0+bV9wcm9wZXJ0eUhhc2gpCiAgICAgLCBtX3NlZW5Qcm9wZXJ0aWVz
KHByZXZpb3VzLT5tX3NlZW5Qcm9wZXJ0aWVzKQorI2VuZGlmCisgICAgLCBtX3Byb3RvdHlwZSh2
bSwgdGhpcywgcHJldmlvdXMtPm1fcHJvdG90eXBlLmdldCgpKQorICAgICwgbV90cmFuc2l0aW9u
V2F0Y2hwb2ludFNldChJc1dhdGNoZWQpCiB7CisgICAgc2V0SW5saW5lQ2FwYWNpdHkocHJldmlv
dXMtPmlubGluZUNhcGFjaXR5KCkpOworICAgIHNldENsYXNzSW5mbyhwcmV2aW91cy0+Y2xhc3NJ
bmZvKCkpOwogICAgIHNldERpY3Rpb25hcnlLaW5kKHByZXZpb3VzLT5kaWN0aW9uYXJ5S2luZCgp
KTsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUoZmFsc2UpOwogICAgIHNldEhhc0JlZW5G
bGF0dGVuZWRCZWZvcmUocHJldmlvdXMtPmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUoKSk7CkBAIC0y
NzcsNyArMjc2LDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHBy
ZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQKICAKICAgICBUeXBlSW5mbyB0
eXBlSW5mbyA9IHByZXZpb3VzLT50eXBlSW5mbygpOwogICAgIG1fYmxvYiA9IFN0cnVjdHVyZUlE
QmxvYih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCBwcmV2aW91
cy0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpLCB0eXBlSW5mbyk7Ci0gICAgbV9vdXRP
ZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxhZ3MoKTsKKyAgICBzZXRP
dXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpOwogCiAgICAg
QVNTRVJUKCFwcmV2aW91cy0+dHlwZUluZm8oKS5zdHJ1Y3R1cmVJc0ltbW9ydGFsKCkpOwogICAg
IHNldFByZXZpb3VzSUQodm0sIHByZXZpb3VzKTsKQEAgLTI4OSw5ICsyODgsOSBAQCBTdHJ1Y3R1
cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMsIERlZmVycmVkU3RydWN0
dXJlVHJhbnNpdGlvbldhdAogCiAgICAgaWYgKHByZXZpb3VzLT5tX2dsb2JhbE9iamVjdCkKICAg
ICAgICAgbV9nbG9iYWxPYmplY3Quc2V0KHZtLCB0aGlzLCBwcmV2aW91cy0+bV9nbG9iYWxPYmpl
Y3QuZ2V0KCkpOwotICAgIEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGll
c0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRv
bmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NFUlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygp
IHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7
Ci0gICAgQVNTRVJUKCF0aGlzLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwg
bV9jbGFzc0luZm8tPm1ldGhvZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxE
YXRhKTsKKyAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNs
dWRpbmdQcm90bygpIHx8ICFjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVBy
b3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB8fCAh
Y2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAg
IEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8IGNsYXNz
SW5mbygpLT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7
CiB9CiAKIFN0cnVjdHVyZTo6flN0cnVjdHVyZSgpCkBAIC0zMTMsNyArMzEyLDcgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShQb2x5UHJvdG9UYWcsIFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwKICAgICB1bnNpZ25lZCBvbGRPdXRPZkxpbmVDYXBhY2l0eSA9IHJl
c3VsdC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICByZXN1bHQtPmFkZFByb3BlcnR5V2l0aG91
dFRyYW5zaXRpb24oCiAgICAgICAgIHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMo
KS5wb2x5UHJvdG9OYW1lKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pLAotICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tl
ciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7
CisgICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChTdHJ1Y3R1cmU6Om91dE9mTGluZUNhcGFjaXR5KG5ld01heE9m
ZnNldCkgPT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQob2Zmc2V0ID09IGtub3duUG9seVByb3RvT2Zmc2V0KTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGlzSW5saW5lT2Zmc2V0KGtub3duUG9seVByb3RvT2Zmc2V0KSk7CkBAIC0zMjksMjMg
KzMyOCwyMyBAQCBib29sIFN0cnVjdHVyZTo6aXNWYWxpZFByb3RvdHlwZShKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICByZXR1cm4gcHJvdG90eXBlLmlzTnVsbCgpIHx8IChwcm90b3R5cGUuaXNPYmpl
Y3QoKSAmJiBwcm90b3R5cGUuZ2V0T2JqZWN0KCktPm1heUJlUHJvdG90eXBlKCkpOwogfQogCi12
b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oVmVj
dG9yPFN0cnVjdHVyZSosIDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5VGFibGUqJiB0YWJsZSkKK3ZvaWQgU3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1h
cEZvck1hdGVyaWFsaXphdGlvbihWTSYgdm0sIFZlY3RvcjxzdGQ6OnBhaXI8U3RydWN0dXJlKiwg
VW5pcXVlZFN0cmluZ0ltcGwqPiwgOD4mIHN0cnVjdHVyZUFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5h
bWVzLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIFByb3BlcnR5VGFibGUqJiB0YWJsZSkKIHsKLSAg
ICBBU1NFUlQoc3RydWN0dXJlcy5pc0VtcHR5KCkpOwotICAgIHRhYmxlID0gMDsKKyAgICBBU1NF
UlQoc3RydWN0dXJlQW5kVHJhbnNpdGlvblByb3BlcnR5TmFtZXMuaXNFbXB0eSgpKTsKKyAgICB0
YWJsZSA9IG51bGxwdHI7CiAKLSAgICBmb3IgKHN0cnVjdHVyZSA9IHRoaXM7IHN0cnVjdHVyZTsg
c3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpIHsKLSAgICAgICAgc3RydWN0dXJl
LT5tX2xvY2subG9jaygpOworICAgIGZvciAoc3RydWN0dXJlID0gdGhpczsgc3RydWN0dXJlOyBz
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQodm0pKSB7CisgICAgICAgIHN0cnVjdHVy
ZS0+Y2VsbExvY2soKS5sb2NrKCk7CiAgICAgICAgIAotICAgICAgICB0YWJsZSA9IHN0cnVjdHVy
ZS0+cHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgICAgICB0YWJsZSA9IHN0cnVjdHVyZS0+cHJv
cGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgICAgICBpZiAodGFibGUpIHsKICAgICAgICAg
ICAgIC8vIExlYXZlIHRoZSBzdHJ1Y3R1cmUgbG9ja2VkLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2Fu
IGRvIHRoaW5ncyB0byBpdCBhdG9taWNhbGx5CiAgICAgICAgICAgICAvLyBiZWZvcmUgaXQgbG9z
ZXMgaXRzIHByb3BlcnR5IHRhYmxlLgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBzdHJ1Y3R1cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOwotICAgICAgICBz
dHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKKyAgICAgICAgc3RydWN0dXJlQW5kVHJhbnNpdGlv
blByb3BlcnR5TmFtZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHN0cnVjdHVyZSwgc3RydWN0dXJl
LT50cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkpKTsKKyAgICAgICAgc3RydWN0dXJlLT5jZWxsTG9j
aygpLnVubG9jaygpOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoIXN0cnVjdHVyZSk7CkBAIC0z
NTksMzggKzM1OCwzOCBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJv
cGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0UHJvcGVydHlUYWJsZQogICAgIAogICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKLSAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3Ry
dWN0dXJlczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cnVjdHVyZSosIFVuaXF1ZWRTdHJpbmdJ
bXBsKj4sIDg+IHN0cnVjdHVyZUFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWVzOwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIAotICAgIGZp
bmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVy
ZSwgdGFibGUpOworICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHZt
LCBzdHJ1Y3R1cmVBbmRUcmFuc2l0aW9uUHJvcGVydHlOYW1lcywgc3RydWN0dXJlLCB0YWJsZSk7
CiAgICAgCi0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0
KG1heE9mZnNldCgpLCBtX2lubGluZUNhcGFjaXR5KTsKKyAgICB1bnNpZ25lZCBjYXBhY2l0eSA9
IG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIGlubGluZUNhcGFjaXR5KCkp
OwogICAgIGlmICh0YWJsZSkgewogICAgICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBjYXBh
Y2l0eSk7Ci0gICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAgICAgICBzdHJ1
Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHRhYmxlID0g
UHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSk7CiAgICAgCiAgICAgLy8gTXVzdCBo
b2xkIHRoZSBsb2NrIG9uIHRoaXMgc3RydWN0dXJlLCBzaW5jZSB3ZSB3aWxsIGJlIG1vZGlmeWlu
ZyB0aGlzIHN0cnVjdHVyZSdzCiAgICAgLy8gcHJvcGVydHkgbWFwLiBXZSBkb24ndCB3YW50IGdl
dENvbmN1cnJlbnRseSgpIHRvIHNlZSB0aGUgcHJvcGVydHkgbWFwIGluIGEgaGFsZi1iYWtlZAog
ICAgIC8vIHN0YXRlLgotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
LCB2bS5oZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxs
TG9jaygpLCB2bS5oZWFwKTsKICAgICBpZiAoc2V0UHJvcGVydHlUYWJsZSkKICAgICAgICAgdGhp
cy0+c2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IHN0
cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNb
aV07Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpCisg
ICAgZm9yIChzaXplX3QgaSA9IHN0cnVjdHVyZUFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWVzLnNp
emUoKTsgaS0tOykgeworICAgICAgICBhdXRvIFtzdHJ1Y3R1cmUsIHRyYW5zaXRpb25Qcm9wZXJ0
eU5hbWVdID0gc3RydWN0dXJlQW5kVHJhbnNpdGlvblByb3BlcnR5TmFtZXNbaV07CisgICAgICAg
IGlmICghdHJhbnNpdGlvblByb3BlcnR5TmFtZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkpIHsKLSAg
ICAgICAgICAgIGF1dG8gaXRlbSA9IHRhYmxlLT5maW5kKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9u
UHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlbSA9IHRhYmxlLT5maW5k
KHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgQVNTRVJUKGl0ZW0uZmlyc3Qp
OwogICAgICAgICAgICAgdGFibGUtPnJlbW92ZShpdGVtKTsKICAgICAgICAgICAgIHRhYmxlLT5h
ZGREZWxldGVkT2Zmc2V0KHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnko
c3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZS0+dHJh
bnNpdGlvbk9mZnNldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMo
KSk7CisgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkodHJhbnNpdGlvblByb3BlcnR5TmFt
ZSwgc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblBy
b3BlcnR5QXR0cmlidXRlcygpKTsKICAgICAgICAgYXV0byBuZXh0T2Zmc2V0ID0gdGFibGUtPm5l
eHRPZmZzZXQoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgQVNTRVJUX1VO
VVNFRChuZXh0T2Zmc2V0LCBuZXh0T2Zmc2V0ID09IHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNl
dCgpKTsKICAgICAgICAgYXV0byByZXN1bHQgPSB0YWJsZS0+YWRkKGVudHJ5KTsKQEAgLTQwNSw4
ICs0MDQsOCBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlU
YWJsZShWTSYgdm0sIGJvb2wgc2V0UHJvcGVydHlUYWJsZQogICAgICAgICAgICAgZGF0YUxvZygi
Rm91bmQgc3RydWN0dXJlID0gIiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmUpLCAiXG4iKTsKICAgICAg
ICAgICAgIGRhdGFMb2coInN0cnVjdHVyZXMgPSAiKTsKICAgICAgICAgICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKLSAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiBzdHJ1Y3R1
cmVzKQotICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsIFJhd1BvaW50ZXIoc3RydWN0dXJl
KSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBzdHJ1Y3R1cmVBbmRUcmFuc2l0aW9u
UHJvcGVydHlOYW1lcykKKyAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBSYXdQb2ludGVy
KHBhaXIuZmlyc3QpKTsKICAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgICAgIH0pOwog
ICAgIApAQCAtNDI1LDcgKzQyNCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqIHN0CiAgICAgICAg
IHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYg
b2Zmc2V0KQpAQCAtNDM2LDcgKzQzNSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0CiAKIFN0
cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewotICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2spOworICAgIENvbmN1
cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+Y2VsbExvY2soKSk7CiAgICAgcmV0
dXJuIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVy
ZSwgdWlkLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOwogfQogCkBAIC00OTcsOCArNDk2LDcgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm8KICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0
aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKLQotICAgIHRyYW5zaXRpb24t
Pm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1
Y3R1cmUtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOworICAgIHRyYW5zaXRpb24tPnNl
dENhY2hlZFByb3RvdHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPmNhY2hlZFByb3RvdHlwZUNoYWlu
KCkpOwogICAgIAogICAgIC8vIFdoaWxlIHdlIGFyZSBhZGRpbmcgdGhlIHByb3BlcnR5LCByZW1h
dGVyaWFsaXppbmcgdGhlIHByb3BlcnR5IHRhYmxlIGlzIHN1cGVyIHdlaXJkOiB3ZSBhbHJlYWR5
CiAgICAgLy8gaGF2ZSBhIG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSBhbmQgdHJhbnNpdGlvblBy
b3BlcnR5QXR0cmlidXRlcyBidXQgdGhlIG1fdHJhbnNpdGlvbk9mZnNldCBpcyBzdGlsbCB3cm9u
Zy4gSWYgdGhlCkBAIC01MTAsMTIgKzUwOCwxMiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRk
TmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBybwog
ICAgIC8vIGNhc2UgYWxsIGlzIHdlbGwuICBJZiBpdCB3YXNuJ3QgZm9yIHRoZSBsb2NrLCB0aGUg
R0Mgd291bGQgaGF2ZSBUT0NUT1U6IGlmIGNvdWxkIHJlYWQKICAgICAvLyBwcm90ZWN0UHJvcGVy
dHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyBiZWZvcmUgd2Ugc2V0IGl0IHRvIHRydWUsIGFuZCB0
aGVuIGJsb3cgdGhlIHRhYmxlIGF3YXkgYWZ0ZXIuCiAgICAgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHRyYW5zaXRpb24tPm1fbG9jayk7CisgICAgICAgIENvbmN1cnJlbnRK
U0NlbGxMb2NrZXIgbG9ja2VyKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpOwogICAgICAgICB0cmFu
c2l0aW9uLT5zZXRQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyh0cnVlKTsK
KyAgICAgICAgdHJhbnNpdGlvbi0+c2V0VHJhbnNpdGlvblByb3BlcnR5TmFtZShsb2NrZXIsIHBy
b3BlcnR5TmFtZS51aWQoKSk7CiAgICAgfQogCiAgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldElu
ZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnkoc3RydWN0dXJlLT5pbmRleGluZ01vZGVJbmNsdWRp
bmdIaXN0b3J5KCkgJiB+Q29weU9uV3JpdGUpOwotICAgIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlv
blByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS51aWQoKTsKICAgICB0cmFuc2l0aW9uLT5zZXRU
cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwogICAgIHRyYW5zaXRpb24t
PnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25l
SWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVy
ZS0+bWF4T2Zmc2V0KCkpOwpAQCAtNTMwLDcgKzUyOCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvCiAKICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIHRy
YW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7CisgICAgICAg
IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+Y2VsbExvY2so
KSwgdm0uaGVhcCk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZt
LCB0cmFuc2l0aW9uKTsKICAgICB9CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0
ZW5jeSgpOwpAQCAtNTc1LDcgKzU3Myw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVO
ZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKICAgICBB
U1NFUlQoIVN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3Ry
dWN0dXJlKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBkZWZlcnJlZCkpOwog
CiAgICAgaW50IHRyYW5zaXRpb25Db3VudCA9IDA7Ci0gICAgZm9yIChhdXRvKiBzID0gc3RydWN0
dXJlOyBzICYmIHRyYW5zaXRpb25Db3VudCA8PSBzX21heFRyYW5zaXRpb25MZW5ndGg7IHMgPSBz
LT5wcmV2aW91c0lEKCkpCisgICAgZm9yIChhdXRvKiBzID0gc3RydWN0dXJlOyBzICYmIHRyYW5z
aXRpb25Db3VudCA8PSBzX21heFRyYW5zaXRpb25MZW5ndGg7IHMgPSBzLT5wcmV2aW91c0lEKHZt
KSkKICAgICAgICAgKyt0cmFuc2l0aW9uQ291bnQ7CiAKICAgICBpZiAodHJhbnNpdGlvbkNvdW50
ID4gc19tYXhUcmFuc2l0aW9uTGVuZ3RoKSB7CkBAIC01ODcsMTYgKzU4NSwxNiBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsCiAgICAgfQogCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKLSAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFBy
b3RvdHlwZUNoYWluLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2Nh
Y2hlZFByb3RvdHlwZUNoYWluLmdldCgpKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRDYWNoZWRQcm90
b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5jYWNoZWRQcm90b3R5cGVDaGFpbigpKTsKIAogICAg
IC8vIFdoaWxlIHdlIGFyZSBkZWxldGluZyB0aGUgcHJvcGVydHksIHdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRoZSB0YWJsZSBpcyBub3QgY2xlYXJlZC4KICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpT
Q2VsbExvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+Y2VsbExvY2soKSk7CiAgICAgICAgIHRyYW5z
aXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKHRydWUpOwor
ICAgICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGxvY2tlciwgcHJv
cGVydHlOYW1lLnVpZCgpKTsKICAgICB9CiAKICAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5k
ZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZUluY2x1ZGlu
Z0hpc3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7Ci0gICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9u
UHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5zaXRpb24tPnNldFBy
b3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5u
ZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4
T2Zmc2V0KCkpOwogICAgIHRyYW5zaXRpb24tPnNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRp
b24odHJ1ZSk7CkBAIC02MTIsNyArNjEwLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92
ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLAogCiAg
ICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCB0cmFuc2l0aW9u
LT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2ssIHZtLmhlYXApOworICAgICAgICBHQ1NhZmVD
b25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNlbGxMb2NrKCksIHZtLmhl
YXApOwogICAgICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFkZCh2bSwgdHJhbnNp
dGlvbik7CiAgICAgfQogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsK
QEAgLTYzMCw3ICs2MjgsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBl
VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKUwogICAgIHRyYW5zaXRp
b24tPm1fcHJvdG90eXBlLnNldCh2bSwgdHJhbnNpdGlvbiwgcHJvdG90eXBlKTsKIAogICAgIFBy
b3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5p
bmcodm0pOwotICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2sp
LCB2bSwgdGFibGUpOworICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5j
ZWxsTG9jaygpKSwgdm0sIHRhYmxlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0s
IHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOwogICAgIAogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zm
c2V0Q29uc2lzdGVuY3koKTsKQEAgLTY0Myw3ICs2NDEsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcgogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVy
ZSk7CiAKICAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9w
ZXJ0eVRhYmxlRm9yUGlubmluZyh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9j
ayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5w
aW4oaG9sZExvY2sodHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgICAg
IHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAg
ICAgICAgIAogICAgICAgICBzdHJ1Y3R1cmUgPSB0cmFuc2l0aW9uOwpAQCAtNjY1LDcgKzY2Myw3
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3RpCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0g
Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAogICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgIHRy
YW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOwor
ICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0s
IHRhYmxlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4
T2Zmc2V0KCkpOwogICAgIHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlLaW5kKGtpbmQpOwogICAg
IHRyYW5zaXRpb24tPnNldEhhc0JlZW5EaWN0aW9uYXJ5KHRydWUpOwpAQCAtNzAxLDEyICs2OTks
MTIgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6
OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKLSAgICAvLyBUaGlz
IG11c3QgYWx3YXlzIHJldHVybiBhIHByb3BlcnR5IHRhYmxlLiBJdCBjYW4ndCByZXR1cm4gbnVs
bC4KLSAgICBQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7Cisg
ICAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGFsd2F5cyByZXR1cm4gYSBwcm9wZXJ0eSB0YWJsZS4g
SXQgY2FuJ3QgcmV0dXJuIG51bGwuCisgICAgUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gcHJvcGVy
dHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgaWYgKGlz
UGlubmVkUHJvcGVydHlUYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+Y29weSh2
bSwgcmVzdWx0LT5zaXplKCkgKyAxKTsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9j
aygpKTsKICAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgbnVsbHB0cik7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNzQzLDEwICs3NDEsMTAgQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgTm8KICAgICAgICAgLy8gdGFibGUgZG9lc24ndCBrbm93IGhvdyB0byB0YWtlIGludG8g
YWNjb3VudCBzdWNoIHdob2xlc2FsZSBlZGl0cy4KIAogICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0
YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKTsKLSAgICAg
ICAgdHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZyhob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2sp
LCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNoaW5nKGhvbGRMb2Nr
KHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpLCB2bSwgdGFibGUpOwogICAgICAgICB0cmFuc2l0aW9u
LT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOwogICAgICAgICAKLSAg
ICAgICAgdGFibGUgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAg
IHRhYmxlID0gdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh0YWJsZSk7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqdGFi
bGUpIHsKICAgICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVydGllcyh0cmFu
c2l0aW9uS2luZCkpCkBAIC03NjEsMTQgKzc1OSwxNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uU2xvdyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBO
bwogICAgIH0KICAgICAKICAgICBpZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRp
ZXModHJhbnNpdGlvbktpbmQpCi0gICAgICAgICYmICF0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxl
T3JOdWxsKCktPmlzRW1wdHkoKSkKKyAgICAgICAgJiYgIXRyYW5zaXRpb24tPnByb3BlcnR5VGFi
bGVVbnNhZmVPck51bGwoKS0+aXNFbXB0eSgpKQogICAgICAgICB0cmFuc2l0aW9uLT5zZXRIYXNS
ZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKHRydWUpOwogICAg
IAogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIFByb3BlcnR5
VGFibGUqIHRhYmxlID0gdHJhbnNpdGlvbi0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7Ci0gICAg
ICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFi
bGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+Y2VsbExv
Y2soKSksIHZtLCB0YWJsZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhzdHJ1Y3R1cmUtPm1fbG9jayk7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soc3RydWN0dXJlLT5jZWxsTG9jaygpKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KIApAQCAtODIwLDE0ICs4MTgsMTQg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiB2
bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICBBU1NFUlQoaXNEaWN0aW9uYXJ5KCkpOwogICAgIEFT
U0VSVChvYmplY3QtPnN0cnVjdHVyZSh2bSkgPT0gdGhpcyk7CiAgICAgCi0gICAgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhlYXApOwogICAgIAogICAg
IG9iamVjdC0+c2V0U3RydWN0dXJlSUREaXJlY3RseShudWtlKGlkKCkpKTsKICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ID0g
dGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51
bGwoKTsKKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlVW5zYWZl
T3JOdWxsKCk7CiAgICAgICAgIEFTU0VSVCh0YWJsZSk7CiAKICAgICAgICAgc2l6ZV90IHByb3Bl
cnR5Q291bnQgPSB0YWJsZS0+c2l6ZSgpOwpAQCAtODQxLDE0ICs4MzksMTQgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiB2bSwgSlNPYmplY3Qq
IG9iamVjdCkKICAgICAgICAgYXV0byBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwogICAgICAgICBm
b3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlciwgKytpKSB7CiAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvYmplY3QtPmdl
dERpcmVjdChpdGVyLT5vZmZzZXQpOwotICAgICAgICAgICAgb2Zmc2V0ID0gaXRlci0+b2Zmc2V0
ID0gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSk7CisgICAgICAg
ICAgICBvZmZzZXQgPSBpdGVyLT5vZmZzZXQgPSBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBp
bmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgfQogICAgICAgICBzZXRNYXhPZmZzZXQodm0sIG9m
ZnNldCk7CiAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9uT2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNl
dCk7CiAgICAgICAgIAogICAgICAgICAvLyBDb3BpZXMgaW4gb3VyIHZhbHVlcyB0byB0aGVpciBj
b21wYWN0ZWQgbG9jYXRpb25zLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJv
cGVydHlDb3VudDsgaSsrKQotICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNl
dEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkpLCB2YWx1ZXNbaV0pOworICAg
ICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGks
IGlubGluZUNhcGFjaXR5KCkpLCB2YWx1ZXNbaV0pOwogCiAgICAgICAgIHRhYmxlLT5jbGVhckRl
bGV0ZWRPZmZzZXRzKCk7CiAKQEAgLTg5NCwyNyArODkyLDMyIEBAIFN0cnVjdHVyZSogU3RydWN0
dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3Qp
CiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW4oY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQordm9pZCBTdHJ1Y3R1cmU6
OnBpbihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFByb3BlcnR5VGFibGUq
IHRhYmxlKQogewogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZSh0cnVlKTsKICAgICBzZXRQ
cm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAgICAgY2xlYXJQcmV2aW91c0lEKCk7Ci0gICAgbV90
cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gbnVsbHB0cjsKKyAgICBzZXRUcmFuc2l0aW9uUHJvcGVy
dHlOYW1lKGxvY2tlciwgbnVsbHB0cik7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNo
aW5nKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkK
K3ZvaWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5nKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2Nr
ZXIsIFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7CiAgICAgc2V0SXNQaW5uZWRQcm9w
ZXJ0eVRhYmxlKHRydWUpOwogICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKLSAgICBt
X3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSBudWxscHRyOworICAgIHNldFRyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUobG9ja2VyLCBudWxscHRyKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRl
UmFyZURhdGEoVk0mIHZtKQogewogICAgIEFTU0VSVCghaGFzUmFyZURhdGEoKSk7Ci0gICAgU3Ry
dWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZSh2bSwg
cHJldmlvdXNJRCgpKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSBTdHJ1Y3R1
cmVSYXJlRGF0YTo6Y3JlYXRlKHZtLCBjYWNoZWRQcm90b3R5cGVDaGFpbigpKTsKICAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldCh2bSwgdGhp
cywgcmFyZURhdGEpOworI2lmIENQVShBRERSRVNTNjQpCisgICAgbV9pbmxpbmVDYXBhY2l0eUFu
ZENhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YS5zZXRQb2ludGVyKHJhcmVEYXRhKTsKKyAg
ICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCByYXJlRGF0YSk7CisjZWxzZQorICAgIG1fY2Fj
aGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhLnNldCh2bSwgdGhpcywgcmFyZURhdGEpOworI2Vu
ZGlmCiAgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwogfQogCkBAIC05MjgsNyArOTMxLDcgQEAg
V2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjplbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hw
b2ludFNldChWTSYgdm0sIFByb3BlcnQKICAgICAKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCiAg
ICAgICAgIGFsbG9jYXRlUmFyZURhdGEodm0pOwotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygp
KTsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSB0aGlzLT5yYXJlRGF0YSgpOwog
ICAgIGlmICghcmFyZURhdGEtPm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cykgewogICAgICAg
ICByYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzID0KQEAgLTk5OCw3ICsxMDAx
LDcgQEAgUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlcjo6flByb3BlcnR5TWFwU3RhdGlz
dGljc0V4aXRMb2dnZXIoKQogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyhWTSYgdm0pCiB7Ci0gICAgaWYgKFByb3BlcnR5VGFibGUqIHRhYmxl
ID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpKQorICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkKICAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFi
bGU6OmNsb25lKHZtLCAqdGFibGUpOwogICAgIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IGZhbHNl
OwogICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0sIHNldFByb3BlcnR5VGFi
bGUpOwpAQCAtMTAzOCwxNCArMTA0MSwxNCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFk
ZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYgogewog
ICAgIHJldHVybiBhZGQ8U2hvdWxkUGluOjpObz4oCiAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsCi0gICAgICAgIFt0aGlzLCAmdm1dIChjb25zdCBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7
CisgICAgICAgIFt0aGlzLCAmdm1dKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXIm
LCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAg
ICAgICBzZXRNYXhPZmZzZXQodm0sIG5ld01heE9mZnNldCk7CiAgICAgICAgIH0pOwogfQogCiBQ
cm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46Ok5vPih2bSwgcHJvcGVy
dHlOYW1lLCBbdGhpcywgJnZtXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJv
cGVydHlPZmZzZXQsIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAgIHJldHVybiBy
ZW1vdmU8U2hvdWxkUGluOjpObz4odm0sIHByb3BlcnR5TmFtZSwgW3RoaXMsICZ2bV0oY29uc3Qg
R0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9m
ZnNldCBuZXdNYXhPZmZzZXQpIHsKICAgICAgICAgc2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZz
ZXQpOwogICAgIH0pOwogfQpAQCAtMTExNiwyNSArMTExOSwyMSBAQCB2b2lkIFN0cnVjdHVyZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAKLSAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPm1fbG9jayk7CisgICAgQ29uY3VycmVu
dEpTQ2VsbExvY2tlciBsb2NrZXIodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9nbG9iYWxPYmplY3QpOwotICAgIGlmICghdGhp
c09iamVjdC0+aXNPYmplY3QoKSkKLSAgICAgICAgdGhpc09iamVjdC0+bV9jYWNoZWRQcm90b3R5
cGVDaGFpbi5jbGVhcigpOwotICAgIGVsc2UgewotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3Byb3RvdHlwZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwotICAgIH0KLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0YSk7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9wcm90b3R5cGUpOworICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09i
amVjdC0+cHJldmlvdXNJRCh2aXNpdG9yLnZtKCkpKTsKKyAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKHRoaXNPYmplY3QtPmNhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YSgpKTsKIAog
ICAgIGlmICh0aGlzT2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSB8fCB0aGlzT2JqZWN0
LT5wcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZygpKSB7CiAgICAgICAgIC8v
IE5PVEU6IFRoaXMgY2FuIGludGVybGVhdmUgaW4gcGluKCksIGluIHdoaWNoIGNhc2UgaXQgbWF5
IHNlZSBhIG51bGwgcHJvcGVydHkgdGFibGUuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBiZWNh
dXNlIHRoZW4gdGhlIGJhcnJpZXIgd2lsbCBmaXJlIGFuZCB3ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fp
bi4KLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5z
YWZlKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzT2JqZWN0LT5wcm9w
ZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkpOwogICAgIH0gZWxzZSBpZiAodmlzaXRvci5pc0FuYWx5
emluZ0hlYXAoKSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0
eVRhYmxlVW5zYWZlKTsKLSAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVV
bnNhZmUpCi0gICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigp
OworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXNPYmplY3QtPnByb3BlcnR5
VGFibGVVbnNhZmVPck51bGwoKSk7CisgICAgZWxzZSBpZiAodGhpc09iamVjdC0+cHJvcGVydHlU
YWJsZVVuc2FmZU9yTnVsbCgpKQorICAgICAgICB0aGlzT2JqZWN0LT5jbGVhclByb3BlcnR5VGFi
bGUoKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCkBAIC0x
MjkwLDcgKzEyODksNyBAQCBib29sIFN0cnVjdHVyZTo6Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKFZNJiB2bSkgY29uc3QKICAgICBpZiAoIXRoaXMtPmNhbkNhY2hlT3duS2V5cygpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hh
aW4gPSBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpOworICAgIFN0cnVjdHVyZUNoYWluKiBz
dHJ1Y3R1cmVDaGFpbiA9IGNhY2hlZFByb3RvdHlwZUNoYWluKCk7CiAgICAgQVNTRVJUKHN0cnVj
dHVyZUNoYWluKTsKICAgICBTdHJ1Y3R1cmVJRCogY3VycmVudFN0cnVjdHVyZUlEID0gc3RydWN0
dXJlQ2hhaW4tPmhlYWQoKTsKICAgICB3aGlsZSAodHJ1ZSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCA1MmNkM2M3MWQ5MjBmMmY4YTk3YjQ2MGI5MGUw
ZWM3MGQ1ZDcxMWFmLi5jMzJmMWZkYjMwZDhmMTJiMGUyNjFhNTY4NDRiN2M0NjkzN2MwNDMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaApAQCAtNDIsNiArNDIs
NyBAQAogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBh
Y3RSZWZQdHJUdXBsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV1RGIHsKQEAgLTI1OCw5ICsyNTksMTggQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5nZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZSgpOwogICAgIH0KKworICAgIFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBl
RmxhZ3Mgb3V0T2ZMaW5lVHlwZUZsYWdzKCkgY29uc3QKKyAgICB7CisjaWYgQ1BVKEFERFJFU1M2
NCkKKyAgICAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVu
c2FmZS50eXBlKCk7CisjZWxzZQorICAgICAgICByZXR1cm4gbV9vdXRPZkxpbmVUeXBlRmxhZ3M7
CisjZW5kaWYKKyAgICB9CiAgICAgCiAgICAgLy8gVHlwZSBhY2Nlc3NvcnMuCi0gICAgVHlwZUlu
Zm8gdHlwZUluZm8oKSBjb25zdCB7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVU
eXBlRmxhZ3MpOyB9CisgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IHJldHVybiBtX2Js
b2IudHlwZUluZm8ob3V0T2ZMaW5lVHlwZUZsYWdzKCkpOyB9CiAgICAgYm9vbCBpc09iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQogCiAgICAgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ01vZGVJbmNs
dWRpbmdIaXN0b3J5KCkgJiBBbGxXcml0YWJsZUFycmF5VHlwZXM7IH0KQEAgLTMxNSwyNCArMzI1
LDI0IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIAogICAg
IGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzUmFyZURh
dGEobV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCkpOworICAgICAgICByZXR1cm4gaXNSYXJlRGF0
YShjYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEoKSk7CiAgICAgfQogCiAgICAgU3RydWN0
dXJlUmFyZURhdGEqIHJhcmVEYXRhKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNSYXJlRGF0
YSgpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4obV9w
cmV2aW91c09yUmFyZURhdGEuZ2V0KCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3Ry
dWN0dXJlUmFyZURhdGEqPihjYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEoKSk7CiAgICAg
fQogCiAgICAgY29uc3QgU3RydWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFN0cnVjdHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCkp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3RydWN0dXJlUmFyZURhdGEqPihj
YWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEoKSk7CiAgICAgfQogCiAgICAgY29uc3QgU3Ry
dWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhQ29uY3VycmVudGx5KCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIEpTQ2VsbCogY2VsbCA9IG1fcHJldmlvdXNPclJhcmVEYXRhLmdldCgpOworICAgICAgICBK
U0NlbGwqIGNlbGwgPSBjYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEoKTsKICAgICAgICAg
aWYgKGlzUmFyZURhdGEoY2VsbCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3Ry
dWN0dXJlUmFyZURhdGEqPihjZWxsKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zNDUs
MjEgKzM1NSwyMSBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAg
ICAgICAgcmV0dXJuIHJhcmVEYXRhKCk7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSogcHJl
dmlvdXNJRCgpIGNvbnN0CisgICAgU3RydWN0dXJlKiBwcmV2aW91c0lEKFZNJiB2bSkgY29uc3QK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygp
KTsKLSAgICAgICAgLy8gVGhpcyBpcyBzbyB3cml0dGVuIGJlY2F1c2UgaXQncyB1c2VkIGNvbmN1
cnJlbnRseS4gV2Ugb25seSBsb2FkIGZyb20gbV9wcmV2aW91c09yUmFyZURhdGEKLSAgICAgICAg
Ly8gb25jZSwgYW5kIHRoaXMgbG9hZCBpcyBndWFyYW50ZWVkIGF0b21pYy4KLSAgICAgICAgSlND
ZWxsKiBjZWxsID0gbV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCk7Ci0gICAgICAgIGlmIChpc1Jh
cmVEYXRhKGNlbGwpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJh
cmVEYXRhKj4oY2VsbCktPnByZXZpb3VzSUQoKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFN0cnVjdHVyZSo+KGNlbGwpOworICAgICAgICBpZiAoIW1fcHJldmlvdXNJRCkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1fcHJl
dmlvdXNJRCk7CiAgICAgfQogICAgIGJvb2wgdHJhbnNpdGl2ZWx5VHJhbnNpdGlvbmVkRnJvbShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZVRvRmluZCk7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBtYXhPZmZz
ZXQoKSBjb25zdAogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICB1aW50MTZfdCBt
YXhPZmZzZXQgPSBtX21heE9mZnNldEFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUudHlwZSgpOwor
I2Vsc2UKICAgICAgICAgdWludDE2X3QgbWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXQ7CisjZW5kaWYK
ICAgICAgICAgaWYgKG1heE9mZnNldCA9PSBzaG9ydEludmFsaWRPZmZzZXQpCiAgICAgICAgICAg
ICByZXR1cm4gaW52YWxpZE9mZnNldDsKICAgICAgICAgaWYgKG1heE9mZnNldCA9PSB1c2VSYXJl
RGF0YUZsYWcpCkBAIC0zNjksMjIgKzM3OSw0NSBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBw
dWJsaWMgSlNDZWxsIHsKIAogICAgIHZvaWQgc2V0TWF4T2Zmc2V0KFZNJiB2bSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0
KQotICAgICAgICAgICAgbV9tYXhPZmZzZXQgPSBzaG9ydEludmFsaWRPZmZzZXQ7Ci0gICAgICAg
IGVsc2UgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFs
aWRPZmZzZXQpCi0gICAgICAgICAgICBtX21heE9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgZWxz
ZSBpZiAobV9tYXhPZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKQorICAgICAgICBBU1NFUlQoIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgICAg
ICBhdXRvIGNvbW1pdCA9IFsmXSh1aW50MTZfdCB2YWx1ZSkgeworI2lmIENQVShBRERSRVNTNjQp
CisgICAgICAgICAgICBtX21heE9mZnNldEFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuc2V0VHlw
ZSh2YWx1ZSk7CisjZWxzZQorICAgICAgICAgICAgbV9tYXhPZmZzZXQgPSB2YWx1ZTsKKyNlbmRp
ZgorICAgICAgICB9OworCisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkgewor
ICAgICAgICAgICAgY29tbWl0KHNob3J0SW52YWxpZE9mZnNldCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBv
ZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1pdChvZmZzZXQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAg
ICAgICAgdWludDE2X3QgbWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXRBbmRUcmFuc2l0aW9uUHJvcGVy
dHlOYW1lLnR5cGUoKTsKKyNlbHNlCisgICAgICAgIHVpbnQxNl90IG1heE9mZnNldCA9IG1fbWF4
T2Zmc2V0OworI2VuZGlmCisgICAgICAgIGlmIChtYXhPZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFn
KSB7CiAgICAgICAgICAgICByYXJlRGF0YSgpLT5tX21heE9mZnNldCA9IG9mZnNldDsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBlbnN1cmVSYXJlRGF0YSh2bSktPm1fbWF4T2Zmc2V0ID0g
b2Zmc2V0OwotICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAg
IG1fbWF4T2Zmc2V0ID0gdXNlUmFyZURhdGFGbGFnOworICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CisKKyAgICAgICAgZW5zdXJlUmFyZURhdGEodm0pLT5tX21heE9mZnNldCA9IG9mZnNl
dDsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgY29tbWl0KHVzZVJh
cmVEYXRhRmxhZyk7CiAgICAgfQogCiAgICAgUHJvcGVydHlPZmZzZXQgdHJhbnNpdGlvbk9mZnNl
dCgpIGNvbnN0CiAgICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHVpbnQxNl90IHRy
YW5zaXRpb25PZmZzZXQgPSBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8udHlwZSgpOwor
I2Vsc2UKICAgICAgICAgdWludDE2X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9m
ZnNldDsKKyNlbmRpZgogICAgICAgICBpZiAodHJhbnNpdGlvbk9mZnNldCA9PSBzaG9ydEludmFs
aWRPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKICAgICAgICAgaWYg
KHRyYW5zaXRpb25PZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKQpAQCAtMzk0LDE3ICs0MjcsMzYg
QEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIHNl
dFRyYW5zaXRpb25PZmZzZXQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgewot
ICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCi0gICAgICAgICAgICBtX3RyYW5z
aXRpb25PZmZzZXQgPSBzaG9ydEludmFsaWRPZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKG9mZnNl
dCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQpCi0gICAg
ICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKG1f
dHJhbnNpdGlvbk9mZnNldCA9PSB1c2VSYXJlRGF0YUZsYWcpCisgICAgICAgIEFTU0VSVCghaXND
b21waWxhdGlvblRocmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CisgICAgICAg
IGF1dG8gY29tbWl0ID0gWyZdKHVpbnQxNl90IHZhbHVlKSB7CisjaWYgQ1BVKEFERFJFU1M2NCkK
KyAgICAgICAgICAgIG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mby5zZXRUeXBlKHZhbHVl
KTsKKyNlbHNlCisgICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSB2YWx1ZTsKKyNlbmRp
ZgorICAgICAgICB9OworCisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkgewor
ICAgICAgICAgICAgY29tbWl0KHNob3J0SW52YWxpZE9mZnNldCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBv
ZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1pdChvZmZzZXQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAg
ICAgICAgdWludDE2X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9mZnNldEFuZENs
YXNzSW5mby50eXBlKCk7CisjZWxzZQorICAgICAgICB1aW50MTZfdCB0cmFuc2l0aW9uT2Zmc2V0
ID0gbV90cmFuc2l0aW9uT2Zmc2V0OworI2VuZGlmCisgICAgICAgIGlmICh0cmFuc2l0aW9uT2Zm
c2V0ID09IHVzZVJhcmVEYXRhRmxhZykgewogICAgICAgICAgICAgcmFyZURhdGEoKS0+bV90cmFu
c2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGVuc3Vy
ZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIG1fdHJhbnNpdGlvbk9mZnNldCA9
IHVzZVJhcmVEYXRhRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAg
ICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBjb21taXQodXNlUmFyZURhdGFG
bGFnKTsKICAgICB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQgb3V0T2ZMaW5lQ2FwYWNpdHkoUHJv
cGVydHlPZmZzZXQgbWF4T2Zmc2V0KQpAQCAtNDQwLDE3ICs0OTIsMTggQEAgY2xhc3MgU3RydWN0
dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZM
aW5lU2l6ZShtYXhPZmZzZXQoKSk7CiAgICAgfQotICAgIGJvb2wgaGFzSW5saW5lU3RvcmFnZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISFtX2lubGluZUNhcGFjaXR5OwotICAgIH0K
KyAgICBib29sIGhhc0lubGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiAhIWlubGluZUNhcGFj
aXR5KCk7IH0KICAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIGNvbnN0CiAgICAgeworI2lm
IENQVShBRERSRVNTNjQpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihtX2lu
bGluZUNhcGFjaXR5QW5kQ2FjaGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhLnR5cGUoKSk7Cisj
ZWxzZQogICAgICAgICByZXR1cm4gbV9pbmxpbmVDYXBhY2l0eTsKKyNlbmRpZgogICAgIH0KICAg
ICB1bnNpZ25lZCBpbmxpbmVTaXplKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6
Om1pbjx1bnNpZ25lZD4obWF4T2Zmc2V0KCkgKyAxLCBtX2lubGluZUNhcGFjaXR5KTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihtYXhPZmZzZXQoKSArIDEsIGlubGluZUNhcGFj
aXR5KCkpOwogICAgIH0KICAgICB1bnNpZ25lZCB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpIGNvbnN0
CiAgICAgewpAQCAtNDYyLDEyICs1MTUsMTIgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICByZXR1cm4gSlNDOjppc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkKICAgICAgICAgICAgICYmIG9mZnNldCA8PSBtYXhPZmZzZXQoKQotICAgICAgICAgICAg
JiYgKG9mZnNldCA8IG1faW5saW5lQ2FwYWNpdHkgfHwgb2Zmc2V0ID49IGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KTsKKyAgICAgICAgICAgICYmIChvZmZzZXQgPCBzdGF0aWNfY2FzdDxpbnQ+KGlubGlu
ZUNhcGFjaXR5KCkpIHx8IG9mZnNldCA+PSBmaXJzdE91dE9mTGluZU9mZnNldCk7CiAgICAgfQog
CiAgICAgYm9vbCBoaWphY2tzSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIGlzVHlwZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwor
ICAgICAgICByZXR1cm4gaXNUeXBlZFZpZXcoY2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9yYWdl
VHlwZSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSBj
b25zdApAQCAtNTM1LDcgKzU4OCwxNCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMg
SlNDZWxsIHsKIAogICAgIHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVj
dCosIFZNJiwgSlNTdHJpbmcqIHZhbHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJpbmdUYWdTeW1ib2xT
bG90KTsKIAotICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g
bV9jbGFzc0luZm87IH0KKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0Cisg
ICAgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25PZmZz
ZXRBbmRDbGFzc0luZm8ucG9pbnRlcigpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fY2xhc3NJ
bmZvOworI2VuZGlmCisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9m
ZnNldCgpCiAgICAgewpAQCAtNTUyLDI5ICs2MTIsMzkgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFs
IDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0
dXJlLCBtX2dsb2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBjbGFz
c0luZm9PZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDbGFzc0luZm8oKQog
ICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFN0cnVjdHVyZSwgbV90cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKTsKKyNlbHNlCiAgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7CisjZW5k
aWYKICAgICB9Ci0gICAgICAgIAorCiAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ01vZGVJ
bmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRleGluZ01vZGVJ
bmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBwdHJkaWZm
X3QgcHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCi0gICAgewotICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9CiAK
LSAgICBzdGF0aWMgcHRyZGlmZl90IGlubGluZUNhcGFjaXR5T2Zmc2V0KCkKKyNpZiBDUFUoTElU
VExFX0VORElBTikKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5lQ2FwYWNpdHko
KQogICAgIHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZSwgbV9pbmxpbmVDYXBhY2l0eUFuZENhY2hlZFByb3RvdHlwZUNoYWluT3JS
YXJlRGF0YSkgKyBDb21wYWN0UG9pbnRlclR1cGxlPEpTQ2VsbCosIHVpbnQxNl90Pjo6b2Zmc2V0
T2ZUeXBlKCk7CisjZWxzZQogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVy
ZSwgbV9pbmxpbmVDYXBhY2l0eSk7CisjZW5kaWYKKwogICAgIH0KKyNlbmRpZgogCi0gICAgc3Rh
dGljIHB0cmRpZmZfdCBwcmV2aW91c09yUmFyZURhdGFPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fcHJldmlvdXNPclJhcmVE
YXRhKTsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFN0cnVjdHVyZSwgbV9pbmxpbmVDYXBhY2l0eUFuZENhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJl
RGF0YSk7CisjZWxzZQorICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwg
bV9jYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEpOworI2VuZGlmCiAgICAgfQogCiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJik7CkBAIC02NTMsMTIgKzcyMywx
MyBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAgICBz
dGF0aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRlcihQcmludFN0cmVhbSYpOwogICAgIAotICAgIENv
bmN1cnJlbnRKU0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KLQotICAgIHVuc2lnbmVk
IHByb3BlcnR5SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlIYXNoOyB9Ci0KICAgICBz
dGF0aWMgYm9vbCBzaG91bGRDb252ZXJ0VG9Qb2x5UHJvdG8oY29uc3QgU3RydWN0dXJlKiBhLCBj
b25zdCBTdHJ1Y3R1cmUqIGIpOwogCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHRyYW5zaXRpb25Q
cm9wZXJ0eU5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWF4T2Zmc2V0QW5k
VHJhbnNpdGlvblByb3BlcnR5TmFtZS5wb2ludGVyKCk7CisgICAgfQorCiAgICAgc3RydWN0IFBy
b3BlcnR5SGFzaEVudHJ5IHsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZTsKICAgICAg
ICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIHZhbHVlOwpAQCAtNjY4LDYgKzczOSwyMSBAQCBjbGFz
cyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCiBwcml2YXRlOgorICAgIGJvb2wgcnVsZU91dFVuc2VlblByb3BlcnR5SGFzaChVbmlx
dWVkU3RyaW5nSW1wbCopIGNvbnN0OworI2lmIENQVShBRERSRVNTNjQpCisgICAgLy8gQXMgYSBw
cm9wZXJ0eUhhc2gsIDY0Yml0IGVudmlyb25tZW50IHVzZXMgMTZiaXQgcHJvcGVydHktaGFzaCAr
IHNlZW5Qcm9wZXJ0aWVzIHNldC4KKyAgICB1aW50cHRyX3QgcHJvcGVydHlIYXNoKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydGllcy5kYXRhKCk7IH0KKyNlbHNl
CisgICAgdWludDMyX3QgcHJvcGVydHlIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUhh
c2g7IH0KKyNlbmRpZgorICAgIHVpbnRwdHJfdCBzZWVuUHJvcGVydGllcygpIGNvbnN0OworICAg
IHZvaWQgYWRkUHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnR5KHVuc2lnbmVkLCBVbmlxdWVkU3Ry
aW5nSW1wbCopOworCisgICAgdm9pZCBzZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgVW5pcXVlZFN0cmluZ0ltcGwqIHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUp
CisgICAgeworICAgICAgICBtX21heE9mZnNldEFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuc2V0
UG9pbnRlcih0cmFuc2l0aW9uUHJvcGVydHlOYW1lKTsKKyAgICB9CisKICAgICB0eXBlZGVmIGVu
dW0geyAKICAgICAgICAgTm9uZURpY3Rpb25hcnlLaW5kID0gMCwKICAgICAgICAgQ2FjaGVkRGlj
dGlvbmFyeUtpbmQgPSAxLApAQCAtNjg0LDYgKzc3MCw3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5h
bCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHtcCiAgICAgICAgIG1fYml0RmllbGQgJj0gfihzXyMj
bG93ZXJOYW1lIyNNYXNrIDw8IG9mZnNldCk7XAogICAgICAgICBtX2JpdEZpZWxkIHw9IChuZXdW
YWx1ZSAmIHNfIyNsb3dlck5hbWUjI01hc2spIDw8IG9mZnNldDtcCisgICAgICAgIEFTU0VSVChu
ZXdWYWx1ZSA9PSBsb3dlck5hbWUoKSk7XAogICAgIH0KIAogICAgIERFRklORV9CSVRGSUVMRChE
aWN0aW9uYXJ5S2luZCwgZGljdGlvbmFyeUtpbmQsIERpY3Rpb25hcnlLaW5kLCAyLCAwKTsKQEAg
LTY5MSwxOCArNzc4LDE4IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwg
ewogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCBI
YXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCAxLCAzKTsKICAgICBERUZJTkVfQklURklFTEQoYm9v
bCwgaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywgSGFz
UmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywgMSwgNCk7CiAg
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JF
bnVtZXJhdGlvbiwgSXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uLCAx
LCA1KTsKLSAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIHRyYW5zaXRpb25Qcm9wZXJ0eUF0
dHJpYnV0ZXMsIFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIDE0LCA2KTsKLSAgICBERUZJ
TkVfQklURklFTEQoYm9vbCwgZGlkUHJldmVudEV4dGVuc2lvbnMsIERpZFByZXZlbnRFeHRlbnNp
b25zLCAxLCAyMCk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFRyYW5zaXRpb24sIERp
ZFRyYW5zaXRpb24sIDEsIDIxKTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgc3RhdGljUHJv
cGVydGllc1JlaWZpZWQsIFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkLCAxLCAyMik7Ci0gICAgREVG
SU5FX0JJVEZJRUxEKGJvb2wsIGhhc0JlZW5GbGF0dGVuZWRCZWZvcmUsIEhhc0JlZW5GbGF0dGVu
ZWRCZWZvcmUsIDEsIDIzKTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzQ3VzdG9tR2V0
dGVyU2V0dGVyUHJvcGVydGllcywgSGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcywgMSwg
MjQpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGll
cywgRGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIDEsIDI1KTsKLSAgICBERUZJTkVfQklURklF
TEQoYm9vbCwgdHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgVHJhbnNpdGlv
bldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgMSwgMjYpOwotICAgIERFRklORV9CSVRGSUVM
RChib29sLCBoYXNCZWVuRGljdGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnksIDEsIDI3KTsKLSAg
ICBERUZJTkVfQklURklFTEQoYm9vbCwgcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRp
b25pbmcsIFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCAxLCAyOCk7Ci0g
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVk
aW5nT3JpZ2luYWxQcm90bywgSGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmln
aW5hbFByb3RvLCAxLCAyOSk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzUHJvcGVydHlE
ZWxldGlvblRyYW5zaXRpb24sIElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24sIDEsIDMwKTsK
KyAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIHRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0
ZXMsIFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIDgsIDYpOworICAgIERFRklORV9CSVRG
SUVMRChib29sLCBkaWRQcmV2ZW50RXh0ZW5zaW9ucywgRGlkUHJldmVudEV4dGVuc2lvbnMsIDEs
IDE0KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlkVHJhbnNp
dGlvbiwgMSwgMTUpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNQcm9wZXJ0aWVz
UmVpZmllZCwgU3RhdGljUHJvcGVydGllc1JlaWZpZWQsIDEsIDE2KTsKKyAgICBERUZJTkVfQklU
RklFTEQoYm9vbCwgaGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSwgSGFzQmVlbkZsYXR0ZW5lZEJlZm9y
ZSwgMSwgMTcpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNDdXN0b21HZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzLCBIYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCAxLCAxOCk7Cisg
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCBEaWRX
YXRjaEludGVybmFsUHJvcGVydGllcywgMSwgMTkpOworICAgIERFRklORV9CSVRGSUVMRChib29s
LCB0cmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkLCBUcmFuc2l0aW9uV2F0Y2hw
b2ludElzTGlrZWx5VG9CZUZpcmVkLCAxLCAyMCk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2ws
IGhhc0JlZW5EaWN0aW9uYXJ5LCBIYXNCZWVuRGljdGlvbmFyeSwgMSwgMjEpOworICAgIERFRklO
RV9CSVRGSUVMRChib29sLCBwcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZywg
UHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcsIDEsIDIyKTsKKyAgICBERUZJ
TkVfQklURklFTEQoYm9vbCwgaGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmln
aW5hbFByb3RvLCBIYXNVbmRlcnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJv
dG8sIDEsIDIzKTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNQcm9wZXJ0eURlbGV0aW9u
VHJhbnNpdGlvbiwgSXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwgMSwgMjQpOwogCiAgICAg
c3RhdGljX2Fzc2VydChzX2JpdFdpZHRoT2ZUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIDw9
IHNpemVvZihUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKSAqIDgpOwogCkBAIC03MjEsNyAr
ODA4LDcgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8g
YW5kIHRoZSBsaXN0IG9mIHN0cnVjdHVyZXMgdGhhdCB3ZSB2aXNpdGVkIGJlZm9yZSB3ZSBnb3Qg
dG8gaXQuIElmIGl0IHJldHVybnMgYQogICAgIC8vIG5vbi1udWxsIHN0cnVjdHVyZSwgaXQgd2ls
bCBhbHNvIGxvY2sgdGhlIHN0cnVjdHVyZSB0aGF0IGl0IHJldHVybnM7IGl0IGlzIHlvdXIgam9i
CiAgICAgLy8gdG8gdW5sb2NrIGl0LgotICAgIHZvaWQgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JN
YXRlcmlhbGl6YXRpb24oVmVjdG9yPFN0cnVjdHVyZSosIDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1
cmUqJiwgUHJvcGVydHlUYWJsZSomKTsKKyAgICB2b2lkIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9y
TWF0ZXJpYWxpemF0aW9uKFZNJiwgVmVjdG9yPHN0ZDo6cGFpcjxTdHJ1Y3R1cmUqLCBVbmlxdWVk
U3RyaW5nSW1wbCo+LCA4PiYgc3RydWN0dXJlcywgU3RydWN0dXJlKiYsIFByb3BlcnR5VGFibGUq
Jik7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihW
TSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKIApAQCAtNzM4LDkgKzgyNSw5IEBAIGNsYXNz
IFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIC8vIFRoaXMgbWF5IGdyYWIg
dGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUn
cyBsb2NrLgogICAgIFByb3BlcnR5VGFibGUqIGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5
KFZNJiB2bSkKICAgICB7Ci0gICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBtX3By
b3BlcnR5VGFibGVVbnNhZmUuZ2V0KCkpCisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1
bHQgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICBpZiAoIXByZXZpb3VzSUQoKSkKKyAgICAgICAgaWYgKCFwcmV2aW91c0lE
KHZtKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gbWF0ZXJp
YWxpemVQcm9wZXJ0eVRhYmxlKHZtKTsKICAgICB9CkBAIC03NDgsMzkgKzgzNSwzNyBAQCBjbGFz
cyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBUaGlzIG1heSBncmFi
IHRoZSBsb2NrLCBvciBub3QuIERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jay4KICAgICBQcm9wZXJ0eVRhYmxlKiBlbnN1cmVQcm9wZXJ0eVRhYmxlKFZNJiB2bSkK
ICAgICB7Ci0gICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBtX3Byb3BlcnR5VGFi
bGVVbnNhZmUuZ2V0KCkpCisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9w
ZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtKTsKICAgICB9CiAgICAgCi0g
ICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZU9yTnVsbCgpIGNvbnN0CisgICAgUHJvcGVy
dHlUYWJsZSogcHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpIGNvbnN0CiAgICAgeworI2lmIENQ
VShBRERSRVNTNjQpCisgICAgICAgIHJldHVybiBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3Bl
cnR5VGFibGVVbnNhZmUucG9pbnRlcigpOworI2Vsc2UKICAgICAgICAgcmV0dXJuIG1fcHJvcGVy
dHlUYWJsZVVuc2FmZS5nZXQoKTsKKyNlbmRpZgogICAgIH0KICAgICAKICAgICAvLyBUaGlzIHdp
bGwgZ3JhYiB0aGUgbG9jay4gRG8gbm90IGNhbGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUn
cyBsb2NrLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5VGFibGUqIG1hdGVyaWFsaXpl
UHJvcGVydHlUYWJsZShWTSYsIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IHRydWUpOwogICAgIAog
ICAgIHZvaWQgc2V0UHJvcGVydHlUYWJsZShWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKTsK
KyAgICB2b2lkIGNsZWFyUHJvcGVydHlUYWJsZSgpOwogICAgIAogICAgIFByb3BlcnR5VGFibGUq
IHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJik7CiAgICAgUHJvcGVydHlUYWJs
ZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJik7CiAKICAgICB2b2lkIHNldFByZXZp
b3VzSUQoVk0mLCBTdHJ1Y3R1cmUqKTsKLQotICAgIHZvaWQgY2xlYXJQcmV2aW91c0lEKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChoYXNSYXJlRGF0YSgpKQotICAgICAgICAgICAgcmFyZURhdGEoKS0+
Y2xlYXJQcmV2aW91c0lEKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcHJldmlvdXNP
clJhcmVEYXRhLmNsZWFyKCk7Ci0gICAgfQorICAgIHZvaWQgY2xlYXJQcmV2aW91c0lEKCk7CiAK
ICAgICBpbnQgdHJhbnNpdGlvbkNvdW50RXN0aW1hdGUoKSBjb25zdAogICAgIHsKICAgICAgICAg
Ly8gU2luY2UgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBpcyBvZnRlbiB0aGUgc2FtZSBhcyB0
aGUgbGFzdCBvZmZzZXQgKGV4Y2VwdCBpZiB0aGVyZSBhcmUgZGVsZXRlcykKICAgICAgICAgLy8g
d2Uga2VlcCB0aGUgc2l6ZSBvZiBTdHJ1Y3R1cmUgZG93biBieSBub3Qgc3RvcmluZyBib3RoLgot
ICAgICAgICByZXR1cm4gbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgbV9p
bmxpbmVDYXBhY2l0eSk7CisgICAgICAgIHJldHVybiBudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0
KG1heE9mZnNldCgpLCBpbmxpbmVDYXBhY2l0eSgpKTsKICAgICB9CiAKICAgICBib29sIGlzVmFs
aWQoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4s
IEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKQEAgLTc5MSw3ICs4NzYsNyBAQCBjbGFzcyBTdHJ1Y3R1
cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAgICBib29sIGlzUmFyZURhdGEoSlND
ZWxsKiBjZWxsKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGNlbGwgJiYgY2VsbC0+c3Ry
dWN0dXJlSUQoKSAhPSBzdHJ1Y3R1cmVJRCgpOworICAgICAgICByZXR1cm4gY2VsbCAmJiBjZWxs
LT50eXBlKCkgPT0gU3RydWN0dXJlUmFyZURhdGFUeXBlOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIERldGFpbHNGdW5jPgpAQCAtODAyLDQ4ICs4ODcsNzkgQEAgY2xhc3MgU3RydWN0
dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgCiAgICAgdm9pZCBzdGFydFdhdGNoaW5n
SW50ZXJuYWxQcm9wZXJ0aWVzKFZNJik7CiAKKyAgICBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJv
dG90eXBlQ2hhaW4oKSBjb25zdDsKKyAgICB2b2lkIHNldENhY2hlZFByb3RvdHlwZUNoYWluKFZN
JiwgU3RydWN0dXJlQ2hhaW4qKTsKKworICAgIHZvaWQgc2V0T3V0T2ZMaW5lVHlwZUZsYWdzKFR5
cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3MpOworICAgIHZvaWQgc2V0Q2xhc3NJbmZvKGNvbnN0
IENsYXNzSW5mbyopOworICAgIHZvaWQgc2V0SW5saW5lQ2FwYWNpdHkodWludDhfdCk7CisKKyAg
ICBKU0NlbGwqIGNhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YSgpIGNvbnN0CisgICAgewor
I2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHJldHVybiBtX2lubGluZUNhcGFjaXR5QW5kQ2Fj
aGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhLnBvaW50ZXIoKTsKKyNlbHNlCisgICAgICAgIHJl
dHVybiBtX2NhY2hlZFN0cnVjdHVyZUNoYWluT3JSYXJlRGF0YS5nZXQoKTsKKyNlbmRpZgorICAg
IH0KKwogICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2
YWxQdXRCeUlkID0gNTEyOwogCiAgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBwcm9wZXJseSBhbGln
bmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlICdTdHJ1Y3R1cmUnCiAgICAgLy8gcGFydCBvZiB0
aGUgb2JqZWN0LgogICAgIFN0cnVjdHVyZUlEQmxvYiBtX2Jsb2I7Ci0gICAgVHlwZUluZm86Ok91
dE9mTGluZVR5cGVGbGFncyBtX291dE9mTGluZVR5cGVGbGFnczsKLQotICAgIHVpbnQ4X3QgbV9p
bmxpbmVDYXBhY2l0eTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwotCi0gICAgdWlu
dDMyX3QgbV9iaXRGaWVsZDsKLQotICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9n
bG9iYWxPYmplY3Q7Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJvdG90eXBlOwotICAg
IG11dGFibGUgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NhY2hlZFByb3RvdHlwZUNo
YWluOwotCi0gICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9wcmV2aW91c09yUmFyZURhdGE7CiAK
KyAgICAvLyBUaGUgcHJvcGVydHkgdGFibGUgcG9pbnRlciBzaG91bGQgYmUgYWNjZXNzZWQgdGhy
b3VnaCBlbnN1cmVQcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgbV9wcm9wZXJ0eVRhYmxlVW5z
YWZlIGZpZWxkIHBhcnQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3RoZXIgdGhyZWFkLgorICAgIC8v
IER1cmluZyBhIEhlYXAgU25hcHNob3QgR0Mgd2UgYXZvaWQgY2xlYXJpbmcgdGhlIHRhYmxlIHNv
IGl0IGlzIHNhZmUgdG8gdXNlLgorI2lmIENQVShBRERSRVNTNjQpCitwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50cHRyX3QgY2xhc3NJbmZvTWFzayA9IENvbXBhY3RQb2ludGVyVHVw
bGU8Y29uc3QgQ2xhc3NJbmZvKiwgdWludDE2X3Q+Ojpwb2ludGVyTWFzazsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnRwdHJfdCBjYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGFNYXNrID0g
Q29tcGFjdFBvaW50ZXJUdXBsZTxKU0NlbGwqLCB1aW50MTZfdD46OnBvaW50ZXJNYXNrOworcHJp
dmF0ZToKKyAgICAvLyBTdHJ1Y3R1cmUgaXMgb25lIG9mIHRoZSBtb3N0IGZyZXF1ZW50bHkgYWxs
b2NhdGVkIGRhdGEgc3RydWN0dXJlLiBNb3Jlb3ZlciwgU3RydWN0dXJlIHRlbmRzIHRvIGJlIGFs
aXZlIGxvbmchCisgICAgLy8gVGhpcyBtb3RpdmF0ZXMgZXh0cmEgY29tcGxpY2F0ZWQgaGFjayB3
aGljaCBvcHRpbWl6ZXMgc2l6ZW9mKFN0cnVjdHVyZSkuCisgICAgLy8KKyAgICAvLyBXZSBjb21i
aW5lIDE2Yml0IGRhdGEgYW5kIDY0Yml0IHBvaW50ZXIgaW50byBvbmUgcG9pbnRlci1zaXplIGZp
ZWxkIHRvICgxKSBzYXZlIG1lbW9yeSB3aGlsZSAoMikgbm90IGxvc2luZyBhdG9taWMgbG9hZC9z
dG9yZS4KKyAgICAvLyBUaGUga2V5IGhlcmUgaXMgYW5hbHl6aW5nIGRhdGEgYWNjZXNzIHBhdHRl
cm5zIGNhcmVmdWxseS4gVGhleSBhcmUgY2F0ZWdvcmllemVkIGludG8gdGhyZWUgdHlwZXMuCisg
ICAgLy8gICAgIDEuIEltbXV0YWJsZUFmdGVyQ29uc3RydWN0aW9uCisgICAgLy8gICAgIDIuIE11
dGFibGVGcm9tQW55VGhyZWFkCisgICAgLy8gICAgIDMuIE11dGFibGVGcm9tTWFpblRocmVhZAor
ICAgIC8vICBXZSBhc3N1bWUgdGhhdCBsb2FkaW5nIGhhcHBlbnMgZnJvbSBhbnkgdGhyZWFkcy4g
VW5kZXIgdGhpcyBhc3N1bXB0aW9uLCBNdXRhYmxlRnJvbUFueVRocmVhZCArIChNdXRhYmxlRnJv
bU1haW5UaHJlYWQgLyBNdXRhYmxlRnJvbUFueVRocmVhZCkgaXMgdGhlIHBhaXIgd2hpY2ggaXMg
cmFjeS4KKyAgICAvLyAgT3RoZXIgcGFpcnMgd29ya3Mgd2VsbC4gV2UgY2FyZWZ1bGx5IHB1dCBh
c3NlcnRpb25zIHRvIHNldHRlcnMsIGFuYWx5emUgYWNjZXNzIHBhdHRlcm5zIGFuZCBwaWNrIGFw
cHJvcHJpYXRlIHBhaXJzIGluIFN0cnVjdHVyZSBmaWVsZHMuCisgICAgQ29tcGFjdFBvaW50ZXJU
dXBsZTxQcm9wZXJ0eVRhYmxlKiwgVHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFncz4gbV9vdXRP
ZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxlVW5zYWZlOyAvLyBJbW11dGFibGVBZnRlckNv
bnN0cnVjdGlvbihtX291dE9mTGluZVR5cGVGbGFncykgYW5kIE11dGFibGVGcm9tQW55VGhyZWFk
KG1fcHJvcGVydHlUYWJsZVVuc2FmZSkuCisgICAgQ29tcGFjdFJlZlB0clR1cGxlPFVuaXF1ZWRT
dHJpbmdJbXBsLCB1aW50MTZfdD4gbV9tYXhPZmZzZXRBbmRUcmFuc2l0aW9uUHJvcGVydHlOYW1l
OyAvLyBNdXRhYmxlRnJvbU1haW5UaHJlYWQobV9tYXhPZmZzZXQpIGFuZCBNdXRhYmxlRnJvbU1h
aW5UaHJlYWQobV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKS4KKyAgICBDb21wYWN0UG9pbnRlclR1
cGxlPGNvbnN0IENsYXNzSW5mbyosIHVpbnQxNl90PiBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFz
c0luZm87IC8vIE11dGFibGVGcm9tTWFpblRocmVhZChtX3RyYW5zaXRpb25PZmZzZXQpIGFuZCBJ
bW11dGFibGVBZnRlckNvbnN0cnVjdGlvbihtX2NsYXNzSW5mbykuCisgICAgQ29tcGFjdFBvaW50
ZXJUdXBsZTxKU0NlbGwqLCB1aW50MTZfdD4gbV9pbmxpbmVDYXBhY2l0eUFuZENhY2hlZFByb3Rv
dHlwZUNoYWluT3JSYXJlRGF0YTsgLy8gSW1tdXRhYmxlQWZ0ZXJDb25zdHJ1Y3Rpb24obV9pbmxp
bmVDYXBhY2l0eSkgYW5kIE11dGFibGVGcm9tTWFpblRocmVhZChtX2NhY2hlZFByb3RvdHlwZUNo
YWluT3JSYXJlRGF0YSkuCisgICAgQ29tcGFjdFBvaW50ZXJUdXBsZTxVbmlxdWVkU3RyaW5nSW1w
bCosIHVpbnQxNl90PiBtX3Byb3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0aWVzOyAvLyBNdXRhYmxl
RnJvbU1haW5UaHJlYWQobV9wcm9wZXJ0eUhhc2gpIGFuZCBNdXRhYmxlRnJvbU1haW5UaHJlYWQo
bV9zZWVuUHJvcGVydGllcykuCisjZWxzZQorICAgIFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxh
Z3MgbV9vdXRPZkxpbmVUeXBlRmxhZ3MgeyAwIH07CisgICAgdWludDhfdCBtX2lubGluZUNhcGFj
aXR5IHsgMCB9OworICAgIHVpbnQzMl90IG1fcHJvcGVydHlIYXNoIHsgMCB9OworICAgIHVpbnQx
Nl90IG1fdHJhbnNpdGlvbk9mZnNldCB7IDAgfTsKKyAgICB1aW50MTZfdCBtX21heE9mZnNldCB7
IDAgfTsKKyAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5z
YWZlOworICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CisgICAg
V3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9jYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGE7Cisg
ICAgdWludHB0cl90IG1fc2VlblByb3BlcnRpZXMgeyAwIH07CiAgICAgUmVmUHRyPFVuaXF1ZWRT
dHJpbmdJbXBsPiBtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWU7Ci0KLSAgICBjb25zdCBDbGFzc0lu
Zm8qIG1fY2xhc3NJbmZvOworI2VuZGlmCisgICAgU3RydWN0dXJlSUQgbV9wcmV2aW91c0lEIHsg
MCB9OworICAgIHVpbnQzMl90IG1fYml0RmllbGQgeyAwIH07CiAKICAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUgbV90cmFuc2l0aW9uVGFibGU7Ci0KLSAgICAvLyBTaG91bGQgYmUgYWNjZXNz
ZWQgdGhyb3VnaCBlbnN1cmVQcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNl
dCB0byAwIGJ5IGFub3RoZXIgdGhyZWFkLgotICAgIC8vIER1cmluZyBhIEhlYXAgU25hcHNob3Qg
R0Mgd2UgYXZvaWQgY2xlYXJpbmcgdGhlIHRhYmxlIHNvIGl0IGlzIHNhZmUgdG8gdXNlLgotICAg
IFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CisgICAg
V3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4gbV9wcm90b3R5cGU7CiAKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9p
bnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IDwgMjU2LCBmaXJzdE91dE9mTGluZU9mZnNldF9maXRzKTsKIAot
ICAgIHVpbnQxNl90IG1fdHJhbnNpdGlvbk9mZnNldDsKLSAgICB1aW50MTZfdCBtX21heE9mZnNl
dDsKLQotICAgIHVpbnQzMl90IG1fcHJvcGVydHlIYXNoOwotICAgIFRpbnlCbG9vbUZpbHRlciBt
X3NlZW5Qcm9wZXJ0aWVzOwotCiAgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogICAgIGZy
aWVuZCBjbGFzcyBKU0RvbGxhclZNSGVscGVyOwogfTsKKyNpZiBDUFUoQUREUkVTUzY0KQorc3Rh
dGljX2Fzc2VydChzaXplb2YoU3RydWN0dXJlKSA8PSA5NiwgIkRvIG5vdCBpbmNyZWFzZSBzaXpl
b2YoU3RydWN0dXJlKSwgaXQgaW1tZWRpYXRlbHkgY2F1c2VzIG1lbW9yeSByZWdyZXNzaW9uIik7
CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKaW5kZXggMGNkOThkNTJhY2M3ZjcxNGMwNWIx
NTNlMDgxMzllNDkxY2Q4Y2Y4Yy4uZGYxOTlmOWRiODYzMzE4YTFjNTRlMDhhMzgwNmM0MTY5Yzk4
ZGYwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1CiAgICAg
QVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUodm0p
LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwogCi0gICAgaWYgKG1fc2VlblByb3BlcnRpZXMucnVs
ZU91dChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihwcm9wZXJ0eU5hbWUudWlkKCkpKSkKKyAgICBp
ZiAocnVsZU91dFVuc2VlblByb3BlcnR5SGFzaChwcm9wZXJ0eU5hbWUudWlkKCkpKQogICAgICAg
ICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFi
bGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7CkBAIC0xNTksMjkgKzE1OSw1
OSBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdQogICAgIHJldHVybiBlbnRyeS0+b2Zmc2V0Owog
fQogCitpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnJ1bGVPdXRVbnNlZW5Qcm9wZXJ0eUhhc2goVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkgY29uc3QKK3sKKyAgICBBU1NFUlQodWlkKTsKKyAgICB1aW50
cHRyX3QgcG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVpZCk7CisgICAgaWYgKChz
ZWVuUHJvcGVydGllcygpICYgcG9pbnRlcikgIT0gcG9pbnRlcikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgdWludHB0cl90IFN0cnVjdHVyZTo6
c2VlblByb3BlcnRpZXMoKSBjb25zdAoreworI2lmIENQVShBRERSRVNTNjQpCisgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRpZXMu
cG9pbnRlcigpKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fc2VlblByb3BlcnRpZXM7CisjZW5kaWYK
K30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVy
dHkodW5zaWduZWQgaGFzaCwgVW5pcXVlZFN0cmluZ0ltcGwqIHBvaW50ZXIpCit7CisjaWYgQ1BV
KEFERFJFU1M2NCkKKyAgICBtX3Byb3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0aWVzLnNldFR5cGUo
bV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJvcGVydGllcy50eXBlKCkgXiBoYXNoKTsKKyAgICBtX3By
b3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0aWVzLnNldFBvaW50ZXIoYml0d2lzZV9jYXN0PFVuaXF1
ZWRTdHJpbmdJbXBsKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9wcm9wZXJ0eUhhc2hBbmRT
ZWVuUHJvcGVydGllcy5wb2ludGVyKCkpIHwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRl
cikpKTsKKyNlbHNlCisgICAgbV9wcm9wZXJ0eUhhc2ggPSBtX3Byb3BlcnR5SGFzaCBeIGhhc2g7
CisgICAgbV9zZWVuUHJvcGVydGllcyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIp
IHwgbV9zZWVuUHJvcGVydGllczsKKyNlbmRpZgorfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgogdm9pZCBTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJlbnRseShjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogewotICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVz
OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RydWN0dXJlKiwgVW5pcXVlZFN0cmluZ0ltcGwqPiwg
OD4gc3RydWN0dXJlQW5kVHJhbnNpdGlvblByb3BlcnR5TmFtZXM7CiAgICAgU3RydWN0dXJlKiB0
YWJsZVN0cnVjdHVyZTsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZTsKKyAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIAotICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0
aW9uKHN0cnVjdHVyZXMsIHRhYmxlU3RydWN0dXJlLCB0YWJsZSk7CisgICAgZmluZFN0cnVjdHVy
ZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24odm0sIHN0cnVjdHVyZUFuZFRyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWVzLCB0YWJsZVN0cnVjdHVyZSwgdGFibGUpOwogCiAgICAgSGFzaFNldDxVbmlxdWVk
U3RyaW5nSW1wbCo+IHNlZW5Qcm9wZXJ0aWVzOwogCi0gICAgZm9yIChhdXRvKiBzdHJ1Y3R1cmUg
OiBzdHJ1Y3R1cmVzKSB7Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUgfHwgc2VlblByb3BlcnRpZXMuY29udGFpbnMoc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25Qcm9wZXJ0eU5hbWUuZ2V0KCkpKQorICAgIGZvciAoYXV0byBbc3RydWN0dXJlLCB0cmFuc2l0
aW9uUHJvcGVydHlOYW1lXSA6IHN0cnVjdHVyZUFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWVzKSB7
CisgICAgICAgIGlmICghdHJhbnNpdGlvblByb3BlcnR5TmFtZSB8fCBzZWVuUHJvcGVydGllcy5j
b250YWlucyh0cmFuc2l0aW9uUHJvcGVydHlOYW1lKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIHNlZW5Qcm9wZXJ0aWVzLmFkZChzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3Bl
cnR5TmFtZS5nZXQoKSk7CisgICAgICAgIHNlZW5Qcm9wZXJ0aWVzLmFkZCh0cmFuc2l0aW9uUHJv
cGVydHlOYW1lKTsKIAogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3BlcnR5RGVsZXRpb25U
cmFuc2l0aW9uKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoIWZ1bmN0
b3IoUHJvcGVydHlNYXBFbnRyeShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5n
ZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlv
blByb3BlcnR5QXR0cmlidXRlcygpKSkpIHsKKyAgICAgICAgaWYgKCFmdW5jdG9yKFByb3BlcnR5
TWFwRW50cnkodHJhbnNpdGlvblByb3BlcnR5TmFtZSwgc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zm
c2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpKSkpIHsKICAg
ICAgICAgICAgIGlmICh0YWJsZSkKLSAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVyZS0+bV9s
b2NrLnVubG9jaygpOworICAgICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5jZWxsTG9jaygp
LnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTky
LDExICsyMjIsMTEgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJlbnRs
eShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgICAgICBpZiAoIWZ1bmN0b3IoZW50cnkpKSB7Ci0gICAgICAgICAgICAgICAgdGFibGVT
dHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKKyAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVy
ZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2so
KTsKKyAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2NrKCk7CiAgICAgfQog
fQogCkBAIC0yMzUsNyArMjY1LDggQEAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjptYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWMKIAogaW5saW5l
IGJvb2wgU3RydWN0dXJlOjp0cmFuc2l0aXZlbHlUcmFuc2l0aW9uZWRGcm9tKFN0cnVjdHVyZSog
c3RydWN0dXJlVG9GaW5kKQogewotICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0gdGhpczsg
Y3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnByZXZpb3VzSUQoKSkgeworICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CisgICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSB0aGlzOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+cHJldmlvdXNJRCh2bSkpIHsKICAgICAgICAgaWYgKGN1cnJl
bnQgPT0gc3RydWN0dXJlVG9GaW5kKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMzAyLDE1ICszMzMsNDEgQEAgaW5saW5lIEpTVmFsdWUgU3RydWN0dXJlOjpwcm90b3R5cGVG
b3JMb29rdXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWwKICAgICByZXR1cm4g
cHJvdG90eXBlRm9yTG9va3VwUHJpbWl0aXZlSW1wbChnbG9iYWxPYmplY3QsIHRoaXMpOwogfQog
CitpbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVyZTo6Y2FjaGVkUHJvdG90eXBlQ2hhaW4o
KSBjb25zdAoreworICAgIEpTQ2VsbCogY2VsbCA9IGNhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJl
RGF0YSgpOworICAgIGlmIChpc1JhcmVEYXRhKGNlbGwpKQorICAgICAgICByZXR1cm4ganNDYXN0
PFN0cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCktPmNhY2hlZFByb3RvdHlwZUNoYWluKCk7CisgICAg
cmV0dXJuIGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwpOworfQorCitpbmxpbmUgdm9pZCBT
dHJ1Y3R1cmU6OnNldENhY2hlZFByb3RvdHlwZUNoYWluKFZNJiB2bSwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluKQoreworICAgIEFTU0VSVChpc09iamVjdCgpKTsKKyAgICBBU1NFUlQoIWlzQ29tcGls
YXRpb25UaHJlYWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgIEpTQ2VsbCog
Y2VsbCA9IGNhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YSgpOworICAgIGlmIChpc1JhcmVE
YXRhKGNlbGwpKSB7CisgICAgICAgIGpzQ2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpLT5z
ZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwgY2hhaW4pOworICAgICAgICByZXR1cm47CisgICAg
fQorI2lmIENQVShBRERSRVNTNjQpCisgICAgbV9pbmxpbmVDYXBhY2l0eUFuZENhY2hlZFByb3Rv
dHlwZUNoYWluT3JSYXJlRGF0YS5zZXRQb2ludGVyKGNoYWluKTsKKyAgICB2bS5oZWFwLndyaXRl
QmFycmllcih0aGlzLCBjaGFpbik7CisjZWxzZQorICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW5P
clJhcmVEYXRhLnNldCh2bSwgdGhpcywgY2hhaW4pOworI2VuZGlmCit9CisKIGlubGluZSBTdHJ1
Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlKSBjb25zdAogeworICAgIEFTU0VSVCh0
aGlzLT5pc09iamVjdCgpKTsKICAgICBBU1NFUlQoYmFzZS0+c3RydWN0dXJlKHZtKSA9PSB0aGlz
KTsKICAgICAvLyBXZSBjYWNoZSBvdXIgcHJvdG90eXBlIGNoYWluIHNvIG91ciBjbGllbnRzIGNh
biBzaGFyZSBpdC4KLSAgICBpZiAoIWlzVmFsaWQoZ2xvYmFsT2JqZWN0LCBtX2NhY2hlZFByb3Rv
dHlwZUNoYWluLmdldCgpLCBiYXNlKSkgeworICAgIGlmICghaXNWYWxpZChnbG9iYWxPYmplY3Qs
IGNhY2hlZFByb3RvdHlwZUNoYWluKCksIGJhc2UpKSB7CiAgICAgICAgIEpTVmFsdWUgcHJvdG90
eXBlID0gcHJvdG90eXBlRm9yTG9va3VwKGdsb2JhbE9iamVjdCwgYmFzZSk7Ci0gICAgICAgIG1f
Y2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0KHZtLCB0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRl
KHZtLCBwcm90b3R5cGUuaXNOdWxsKCkgPyBudWxscHRyIDogYXNPYmplY3QocHJvdG90eXBlKSkp
OworICAgICAgICBjb25zdF9jYXN0PFN0cnVjdHVyZSo+KHRoaXMpLT5zZXRDYWNoZWRQcm90b3R5
cGVDaGFpbih2bSwgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZSh2bSwgcHJvdG90eXBlLmlzTnVsbCgp
ID8gbnVsbHB0ciA6IGFzT2JqZWN0KHByb3RvdHlwZSkpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1f
Y2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCk7CisgICAgcmV0dXJuIGNhY2hlZFByb3RvdHlwZUNo
YWluKCk7CiB9CiAKIGlubGluZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpwcm90b3R5cGVD
aGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSkgY29uc3QK
QEAgLTM1MCw3ICs0MDcsNyBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9w
ZXJ0eShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAKIGlubGluZSBXYXRjaHBvaW50U2V0KiBTdHJ1
Y3R1cmU6OnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKIHsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgQ29u
Y3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoY2VsbExvY2soKSk7CiAgICAgaWYgKCFoYXNSYXJl
RGF0YSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBXVEY6OmxvYWRMb2FkRmVuY2Uo
KTsKQEAgLTM3MSwxNiArNDI4LDE2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAogICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IHByb3BlcnR5VGFi
bGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKLSAgICB1bnNpZ25lZCBpbmxpbmVPdmVyZmxvd0Fj
Y29yZGluZ1RvVG90YWxTaXplID0gdG90YWxTaXplIDwgbV9pbmxpbmVDYXBhY2l0eSA/IDAgOiB0
b3RhbFNpemUgLSBtX2lubGluZUNhcGFjaXR5OworICAgIHVuc2lnbmVkIGlubGluZU92ZXJmbG93
QWNjb3JkaW5nVG9Ub3RhbFNpemUgPSB0b3RhbFNpemUgPCBpbmxpbmVDYXBhY2l0eSgpID8gMCA6
IHRvdGFsU2l6ZSAtIGlubGluZUNhcGFjaXR5KCk7CiAKICAgICBhdXRvIGZhaWwgPSBbJl0gKGNv
bnN0IGNoYXIqIGRlc2NyaXB0aW9uKSB7CiAgICAgICAgIGRhdGFMb2coIkRldGVjdGVkIG9mZnNl
dCBpbmNvbnNpc3RlbmN5OiAiLCBkZXNjcmlwdGlvbiwgIiFcbiIpOwogICAgICAgICBkYXRhTG9n
KCJ0aGlzID0gIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coInRy
YW5zaXRpb25PZmZzZXQgPSAiLCB0cmFuc2l0aW9uT2Zmc2V0KCksICJcbiIpOwogICAgICAgICBk
YXRhTG9nKCJtYXhPZmZzZXQgPSAiLCBtYXhPZmZzZXQoKSwgIlxuIik7Ci0gICAgICAgIGRhdGFM
b2coIm1faW5saW5lQ2FwYWNpdHkgPSAiLCBtX2lubGluZUNhcGFjaXR5LCAiXG4iKTsKKyAgICAg
ICAgZGF0YUxvZygibV9pbmxpbmVDYXBhY2l0eSA9ICIsIGlubGluZUNhcGFjaXR5KCksICJcbiIp
OwogICAgICAgICBkYXRhTG9nKCJwcm9wZXJ0eVRhYmxlID0gIiwgUmF3UG9pbnRlcihwcm9wZXJ0
eVRhYmxlKSwgIlxuIik7Ci0gICAgICAgIGRhdGFMb2coIm51bWJlck9mU2xvdHNGb3JNYXhPZmZz
ZXQgPSAiLCBudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBtX2lubGluZUNh
cGFjaXR5KSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIm51bWJlck9mU2xvdHNGb3JNYXhPZmZz
ZXQgPSAiLCBudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBpbmxpbmVDYXBh
Y2l0eSgpKSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coInRvdGFsU2l6ZSA9ICIsIHRvdGFsU2l6
ZSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coImlubGluZU92ZXJmbG93QWNjb3JkaW5nVG9Ub3Rh
bFNpemUgPSAiLCBpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1RvVG90YWxTaXplLCAiXG4iKTsKICAg
ICAgICAgZGF0YUxvZygibnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvck1heE9mZnNldCA9ICIsIG51
bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCkpLCAiXG4iKTsKQEAg
LTM4OCw3ICs0NDUsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNl
dENvbnNpc3RlbmN5KFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibAogICAgICAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICB9OwogICAgIAotICAgIGlmIChudW1iZXJPZlNsb3Rz
Rm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBtX2lubGluZUNhcGFjaXR5KSAhPSB0b3RhbFNpemUp
CisgICAgaWYgKG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIGlubGluZUNh
cGFjaXR5KCkpICE9IHRvdGFsU2l6ZSkKICAgICAgICAgZmFpbCgibnVtYmVyT2ZTbG90c0Zvck1h
eE9mZnNldCBkb2Vzbid0IG1hdGNoIHRvdGFsU2l6ZSIpOwogICAgIGlmIChpbmxpbmVPdmVyZmxv
d0FjY29yZGluZ1RvVG90YWxTaXplICE9IG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JNYXhPZmZz
ZXQobWF4T2Zmc2V0KCkpKQogICAgICAgICBmYWlsKCJpbmxpbmVPdmVyZmxvd0FjY29yZGluZ1Rv
VG90YWxTaXplIGRvZXNuJ3QgbWF0Y2ggbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvck1heE9mZnNl
dCIpOwpAQCAtMzk4LDcgKzQ1NSw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsCiAKIEFMV0FZ
U19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdAog
ewotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxs
KCk7CisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IHByb3BlcnR5VGFibGVVbnNh
ZmVPck51bGwoKTsKIAogICAgIGlmICghcHJvcGVydHlUYWJsZSkgewogICAgICAgICBBU1NFUlQo
IWlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKQEAgLTQzOSw3ICs0OTYsNyBAQCBpbmxpbmUgUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZAogewogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVy
dHlUYWJsZSh2bSk7CiAKLSAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
aywgdm0uaGVhcCk7CisgICAgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2NrZXIoY2Vs
bExvY2soKSwgdm0uaGVhcCk7CiAKICAgICBzd2l0Y2ggKHNob3VsZFBpbikgewogICAgIGNhc2Ug
U2hvdWxkUGluOjpZZXM6CkBAIC00NjAsMTAgKzUxNyw5IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNl
dCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkCiAKICAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKIAotICAgIFByb3BlcnR5
T2Zmc2V0IG5ld09mZnNldCA9IHRhYmxlLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOwor
ICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHRhYmxlLT5uZXh0T2Zmc2V0KGlubGluZUNh
cGFjaXR5KCkpOwogCi0gICAgbV9wcm9wZXJ0eUhhc2ggPSBtX3Byb3BlcnR5SGFzaCBeIHJlcC0+
ZXhpc3RpbmdTeW1ib2xBd2FyZUhhc2goKTsKLSAgICBtX3NlZW5Qcm9wZXJ0aWVzLmFkZChiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihyZXApKTsKKyAgICBhZGRQcm9wZXJ0eUhhc2hBbmRTZWVuUHJv
cGVydHkocmVwLT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpLCByZXApOwogCiAgICAgYXV0byBy
ZXN1bHQgPSB0YWJsZS0+YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJp
YnV0ZXMpKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LnNlY29uZCk7CkBAIC00
ODIsNyArNTM4LDcgQEAgdGVtcGxhdGU8U3RydWN0dXJlOjpTaG91bGRQaW4gc2hvdWxkUGluLCB0
eXBlbmFtZSBGdW5jPgogaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAg
ICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOwotICAgIEdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICBHQ1Nh
ZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygpLCB2bS5oZWFwKTsKIAog
ICAgIHN3aXRjaCAoc2hvdWxkUGluKSB7CiAgICAgY2FzZSBTaG91bGRQaW46OlllczoKQEAgLTUz
Miw3ICs1ODgsNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydAogewogICAgIEFTU0VSVChpc1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQoaXNQaW5uZWRQcm9wZXJ0eVRhYmxl
KCkpOwotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOworICAgIEFTU0VSVChwcm9w
ZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkpOwogICAgIAogICAgIHJldHVybiByZW1vdmU8U2hvdWxk
UGluOjpZZXM+KHZtLCBwcm9wZXJ0eU5hbWUsIGZ1bmMpOwogfQpAQCAtNTUwLDE1ICs2MDYsNTkg
QEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6c2V0R2xvYmFsT2JqZWN0KFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUKIAogQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVy
ZTo6c2V0UHJvcGVydHlUYWJsZShWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQogeworI2lm
IENQVShBRERSRVNTNjQpCisgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxl
VW5zYWZlLnNldFBvaW50ZXIodGFibGUpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMs
IHRhYmxlKTsKKyNlbHNlCiAgICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLnNldE1heUJlTnVsbCh2
bSwgdGhpcywgdGFibGUpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1
cmU6OmNsZWFyUHJvcGVydHlUYWJsZSgpCit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX291
dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUuc2V0UG9pbnRlcihudWxscHRy
KTsKKyNlbHNlCisgICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CisjZW5kaWYKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6c2V0T3V0T2ZMaW5lVHlwZUZsYWdzKFR5
cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3Mgb3V0T2ZMaW5lVHlwZUZsYWdzKQoreworI2lmIENQ
VShBRERSRVNTNjQpCisgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3NBbmRQcm9wZXJ0eVRhYmxlVW5z
YWZlLnNldFR5cGUob3V0T2ZMaW5lVHlwZUZsYWdzKTsKKyNlbHNlCisgICAgbV9vdXRPZkxpbmVU
eXBlRmxhZ3MgPSBvdXRPZkxpbmVUeXBlRmxhZ3M7CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIFN0cnVjdHVyZTo6c2V0SW5saW5lQ2FwYWNpdHkodWludDhfdCBpbmxpbmVDYXBhY2l0
eSkKK3sKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgIG1faW5saW5lQ2FwYWNpdHlBbmRDYWNoZWRQ
cm90b3R5cGVDaGFpbk9yUmFyZURhdGEuc2V0VHlwZShpbmxpbmVDYXBhY2l0eSk7CisjZWxzZQor
ICAgIG1faW5saW5lQ2FwYWNpdHkgPSBpbmxpbmVDYXBhY2l0eTsKKyNlbmRpZgorfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpzZXRDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8pCit7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICBtX3RyYW5zaXRpb25PZmZzZXRB
bmRDbGFzc0luZm8uc2V0UG9pbnRlcihjbGFzc0luZm8pOworI2Vsc2UKKyAgICBtX2NsYXNzSW5m
byA9IGNsYXNzSW5mbzsKKyNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJl
OjpzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYg
KGhhc1JhcmVEYXRhKCkpCi0gICAgICAgIHJhcmVEYXRhKCktPnNldFByZXZpb3VzSUQodm0sIHN0
cnVjdHVyZSk7Ci0gICAgZWxzZQotICAgICAgICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5zZXQodm0s
IHRoaXMsIHN0cnVjdHVyZSk7CisgICAgbV9wcmV2aW91c0lEID0gc3RydWN0dXJlLT5pZCgpOwor
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVyZSk7Cit9CisKK2lubGluZSB2
b2lkIFN0cnVjdHVyZTo6Y2xlYXJQcmV2aW91c0lEKCkKK3sKKyAgICBtX3ByZXZpb3VzSUQgPSAw
OwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpzaG91bGRDb252ZXJ0VG9Qb2x5
UHJvdG8oY29uc3QgU3RydWN0dXJlKiBhLCBjb25zdCBTdHJ1Y3R1cmUqIGIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKaW5kZXgg
YjVhOThkYmU0YzliMzJiYWZmYTZmNDhjMmJjZTQ3MDZhMDExMDQyZC4uYTQwMjk0ZGQxNDEwY2Ex
ZGNkOTlmYmE5N2MxM2QyMWM1MWFiZWRkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcApAQCAtNDAsMTIgKzQwLDEyIEBAIGNv
bnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmVSYXJlRGF0YTo6c19pbmZvID0geyAiU3RydWN0dXJlUmFy
ZURhdGEiLCBudWxscHRyLCBudWxsCiAKIFN0cnVjdHVyZSogU3RydWN0dXJlUmFyZURhdGE6OmNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQogewotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oU3RydWN0dXJlUmFyZURhdGFUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CiB9CiAKLVN0cnVjdHVyZVJhcmVEYXRhKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2aW91cykKK1N0cnVjdHVyZVJhcmVEYXRhKiBTdHJ1
Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKQogewot
ICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFN0cnVjdHVyZVJhcmVEYXRhPih2bS5oZWFwKSkgU3RydWN0dXJlUmFyZURhdGEodm0sIHBy
ZXZpb3VzKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmVSYXJlRGF0YT4odm0uaGVhcCkpIFN0cnVjdHVyZVJhcmVE
YXRhKHZtLCBjaGFpbik7CiAgICAgcmFyZURhdGEtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBy
ZXR1cm4gcmFyZURhdGE7CiB9CkBAIC01NSwxMyArNTUsMTMgQEAgdm9pZCBTdHJ1Y3R1cmVSYXJl
RGF0YTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAgICAgc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFy
ZURhdGEqPihjZWxsKS0+U3RydWN0dXJlUmFyZURhdGE6On5TdHJ1Y3R1cmVSYXJlRGF0YSgpOwog
fQogCi1TdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJlUmFyZURhdGEoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHByZXZpb3VzKQorU3RydWN0dXJlUmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKFZNJiB2
bSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKQogICAgIDogSlNDZWxsKHZtLCB2bS5zdHJ1Y3R1cmVS
YXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fbWF4T2Zmc2V0KGludmFsaWRPZmZzZXQp
CiAgICAgLCBtX3RyYW5zaXRpb25PZmZzZXQoaW52YWxpZE9mZnNldCkKIHsKLSAgICBpZiAocHJl
dmlvdXMpCi0gICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91cyk7CisgICAg
aWYgKGNoYWluKQorICAgICAgICBtX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldCh2bSwgdGhpcywg
Y2hhaW4pOwogfQogCiB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgU3Ry
dWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJldmlvdXMpOworICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwogICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+b2JqZWN0VG9TdHJpbmdWYWx1ZSgpKTsKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3Ip
OwogICAgIGF1dG8qIGNhY2hlZE93bktleXMgPSB0aGlzT2JqZWN0LT5tX2NhY2hlZE93bktleXMu
dW52YWxpZGF0ZWRHZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVSYXJlRGF0YS5oCmluZGV4IDA3ZWQ5MDRkZTc4ZDdkNDg5NTYwYWU4ODRkYzliZjk4
MTRkZTEwZTIuLmZlOTAzYmI4Nzc4Yjk0NjNmZDkyZjMwMWJhNDM2NTQzYzYwNTI3ODQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaApA
QCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOwogY2xhc3MgU3RydWN0dXJlOworY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFz
cyBPYmplY3RUb1N0cmluZ0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludDsK
IGNsYXNzIE9iamVjdFRvU3RyaW5nQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogCkBAIC00
OSw3ICs1MCw3IEBAIGNsYXNzIFN0cnVjdHVyZVJhcmVEYXRhIGZpbmFsIDogcHVibGljIEpTQ2Vs
bCB7CiAgICAgICAgIHJldHVybiAmdm0uc3RydWN0dXJlUmFyZURhdGFTcGFjZTsKICAgICB9CiAK
LSAgICBzdGF0aWMgU3RydWN0dXJlUmFyZURhdGEqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOwor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmVSYXJlRGF0YSogY3JlYXRlKFZNJiwgU3RydWN0dXJlQ2hhaW4q
KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpAQCAtNTgsMTIgKzU5LDExIEBAIGNs
YXNzIFN0cnVjdHVyZVJhcmVEYXRhIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgcHJvdG90eXBlKTsKIAotICAgIFN0cnVjdHVyZSogcHJldmlvdXNJRCgpIGNvbnN0CisgICAg
U3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3ByZXZpb3VzLmdldCgpOworICAgICAgICByZXR1cm4gbV9jYWNoZWRQcm90
b3R5cGVDaGFpbi5nZXQoKTsKICAgICB9Ci0gICAgdm9pZCBzZXRQcmV2aW91c0lEKFZNJiwgU3Ry
dWN0dXJlKik7Ci0gICAgdm9pZCBjbGVhclByZXZpb3VzSUQoKTsKKyAgICB2b2lkIHNldENhY2hl
ZFByb3RvdHlwZUNoYWluKFZNJiwgU3RydWN0dXJlQ2hhaW4qKTsKIAogICAgIEpTU3RyaW5nKiBv
YmplY3RUb1N0cmluZ1ZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRPYmplY3RUb1N0cmluZ1Zh
bHVlKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUsIEpTU3Ry
aW5nKiB2YWx1ZSwgUHJvcGVydHlTbG90IHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7CkBAIC0xMDIs
OSArMTAyLDkgQEAgY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKIAogICAgIHZvaWQgY2xlYXJPYmplY3RUb1N0cmluZ1ZhbHVlKCk7CiAKLSAgICBTdHJ1Y3R1
cmVSYXJlRGF0YShWTSYsIFN0cnVjdHVyZSopOworICAgIFN0cnVjdHVyZVJhcmVEYXRhKFZNJiwg
U3RydWN0dXJlQ2hhaW4qKTsKIAotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJldmlv
dXM7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX2NhY2hlZFByb3RvdHlwZUNo
YWluOwogICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlOwog
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBzb21lIHN0b3J5IGZvciBjbGVhcmluZyB0aGVz
ZSBwcm9wZXJ0eSBuYW1lcyBjYWNoZXMgaW4gR0MuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjY1OQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaAppbmRleCBlMmZkNTA0
YWM2YmExOGY0ZGIyZDdhOTMxMDA3MzBjNTA5YTFmZGU2Li42ZTA2NTFkN2FiYzM2NjVkMWIxY2Fh
OGFiYjExOGNhN2Q2MmU3YmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaApAQCAtMzIsMTQgKzMyLDkgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRQ
cmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBTdHJ1
Y3R1cmVSYXJlRGF0YTo6c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4oVk0mIHZtLCBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4pCiB7Ci0gICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7
Ci19Ci0KLWlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpjbGVhclByZXZpb3VzSUQoKQot
ewotICAgIG1fcHJldmlvdXMuY2xlYXIoKTsKKyAgICBtX2NhY2hlZFByb3RvdHlwZUNoYWluLnNl
dCh2bSwgdGhpcywgY2hhaW4pOwogfQogCiBpbmxpbmUgSlNTdHJpbmcqIFN0cnVjdHVyZVJhcmVE
YXRhOjpvYmplY3RUb1N0cmluZ1ZhbHVlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKaW5kZXggZjQ4
OTI4Y2YzYjI5NTY2ZTIyNzBkODZmNjAyMzQzODVlYWJiODU4OS4uNmQxY2UwZDk5NDhkMjJlZDll
MWFkODdkNGVlMzYxN2M4OThjZGFiMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKQEAgLTM5LDggKzM5LDgg
QEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmlidXRlID0gMSA8
PCA2OyAvLyBVc2UgZm9yIHRyYW5zaXRpb24KIAogLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1
c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMuCiAv
LyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5
IHNob3VsZCBiZSAwLgotZW51bSBjbGFzcyBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gOiB1bnNpZ25l
ZCB7Ci0gICAgQWxsb2NhdGVVbmRlY2lkZWQsCitlbnVtIGNsYXNzIE5vblByb3BlcnR5VHJhbnNp
dGlvbiA6IHVpbnQ4X3QgeworICAgIEFsbG9jYXRlVW5kZWNpZGVkID0gMCwKICAgICBBbGxvY2F0
ZUludDMyLAogICAgIEFsbG9jYXRlRG91YmxlLAogICAgIEFsbG9jYXRlQ29udGlndW91cywKQEAg
LTUwLDE0ICs1MCwxNiBAQCBlbnVtIGNsYXNzIE5vblByb3BlcnR5VHJhbnNpdGlvbiA6IHVuc2ln
bmVkIHsKICAgICBBZGRJbmRleGVkQWNjZXNzb3JzLAogICAgIFByZXZlbnRFeHRlbnNpb25zLAog
ICAgIFNlYWwsCi0gICAgRnJlZXplCisgICAgRnJlZXplLAorICAgIExhc3RPZk5vblByb3BlcnR5
VHJhbnNpdGlvbiA9IEZyZWV6ZSwKIH07Ci11c2luZyBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1
dGVzID0gdWludDE2X3Q7Cit1c2luZyBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzID0gdWlu
dDhfdDsKIAotaW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eVRyYW5zaXRp
b24gdHJhbnNpdGlvbikKK2lubGluZSBjb25zdGV4cHIgdWludDhfdCB0b0F0dHJpYnV0ZXMoTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkPih0cmFuc2l0aW9uKSArIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGU7CiB9CitzdGF0
aWNfYXNzZXJ0KHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eVRyYW5zaXRpb246Okxhc3RPZk5vblBy
b3BlcnR5VHJhbnNpdGlvbikgPD0gVUlOVDhfTUFYKTsKIAogaW5saW5lIGJvb2wgY2hhbmdlc0lu
ZGV4aW5nVHlwZShOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKIHsKQEAgLTIzMSw3
ICsyMzMsNyBAQCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogCiBwdWJsaWM6CiAg
ICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKCkKLSAgICAgICAgOiBtX2RhdGEoVXNpbmdTaW5n
bGVTbG90RmxhZykKKyAgICAgICAgOiBtX2RhdGEoYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihVc2lu
Z1NpbmdsZVNsb3RGbGFnKSkKICAgICB7CiAgICAgfQogCkBAIC0yNTcsMTkgKzI1OSwxOSBAQCBj
bGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogCiAgICAgYm9vbCBpc1VzaW5nU2luZ2xl
U2xvdCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9kYXRhICYgVXNpbmdTaW5nbGVT
bG90RmxhZzsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fZGF0YS5n
ZXQoKSkgJiBVc2luZ1NpbmdsZVNsb3RGbGFnOwogICAgIH0KIAogICAgIFRyYW5zaXRpb25NYXAq
IG1hcCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzVXNpbmdTaW5nbGVTbG90KCkp
OwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFRyYW5zaXRpb25NYXAqPihtX2RhdGEpOwor
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFRyYW5zaXRpb25NYXAqPihtX2RhdGEuZ2V0KCkp
OwogICAgIH0KIAogICAgIFdlYWtJbXBsKiB3ZWFrSW1wbCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNsb3QoKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8V2Vha0ltcGwqPihtX2RhdGEgJiB+VXNpbmdTaW5nbGVTbG90RmxhZyk7CisgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8V2Vha0ltcGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2Rh
dGEuZ2V0KCkpICYgflVzaW5nU2luZ2xlU2xvdEZsYWcpOwogICAgIH0KIAogICAgIHZvaWQgc2V0
TWFwKFRyYW5zaXRpb25NYXAqIG1hcCkKQEAgLTI4MCw3ICsyODIsNyBAQCBjbGFzcyBTdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGUgewogICAgICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShpbXBs
KTsKIAogICAgICAgICAvLyBUaGlzIGltcGxpY2l0bHkgY2xlYXJzIHRoZSBmbGFnIHRoYXQgaW5k
aWNhdGVzIHdlJ3JlIHVzaW5nIGEgc2luZ2xlIHRyYW5zaXRpb24KLSAgICAgICAgbV9kYXRhID0g
Yml0d2lzZV9jYXN0PGludHB0cl90PihtYXApOworICAgICAgICBtX2RhdGEgPSBiaXR3aXNlX2Nh
c3Q8dWludDhfdCo+KG1hcCk7CiAKICAgICAgICAgQVNTRVJUKCFpc1VzaW5nU2luZ2xlU2xvdCgp
KTsKICAgICB9CkBAIC0yODgsNyArMjkwLDcgQEAgY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlIHsKICAgICBTdHJ1Y3R1cmUqIHNpbmdsZVRyYW5zaXRpb24oKSBjb25zdDsKICAgICB2b2lk
IHNldFNpbmdsZVRyYW5zaXRpb24oU3RydWN0dXJlKik7CiAKLSAgICBpbnRwdHJfdCBtX2RhdGE7
CisgICAgTmFrZWRQdHI8dWludDhfdD4gbV9kYXRhOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKaW5kZXggOWE3ZjQ5
YTE0MDUzYTA4MjdkYmFlMzUyZDI4ZjUwMzYwN2ZmNmNkNy4uOGI4NDZiYTU5YTUxM2Y4YWM0NWNj
ZDYwYjIyNzI1MDhlMWJiNzJhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNLmNwcApAQCAtMjgwNCw3ICsyODA0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU0RvbGxhclZNSGVscGVyOjpmdW5jdGlvbkdldFN0cnVjdHVyZVRyYW5zaXRpb25MaXMK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgVmVjdG9yPFN0
cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CiAKLSAgICBmb3IgKGF1dG8qIHN0cnVjdHVyZSA9IG9i
ai0+c3RydWN0dXJlKCk7IHN0cnVjdHVyZTsgc3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91
c0lEKCkpCisgICAgZm9yIChhdXRvKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSgpOyBzdHJ1
Y3R1cmU7IHN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlvdXNJRCh2bSkpCiAgICAgICAgIHN0
cnVjdHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7CiAKICAgICBKU0FycmF5KiByZXN1bHQgPSBKU0Fy
cmF5Ojp0cnlDcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpLCAwKTsKQEAgLTI4MTgs
OCArMjgxOCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNEb2xsYXJWTUhlbHBl
cjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzCiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3Qs
IEpTVmFsdWUoc3RydWN0dXJlLT5tYXhPZmZzZXQoKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Q
cm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc1N0
cmluZyh2bSwgU3RyaW5nKCpzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSkpKTsK
KyAgICAgICAgaWYgKGF1dG8qIHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSBzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25Qcm9wZXJ0eU5hbWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxP
YmplY3QsIGpzU3RyaW5nKHZtLCBTdHJpbmcoKnRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpKSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzTnVs
bCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAK
aW5kZXggMTZlY2RhYTYxZTg2ZWM4OGRlMDQ0OGUyOWY2NjU4NjA2NmVjODRhMS4uMmJmZjcwNDBh
YWE1NTZhZDA0ZWMzZWRkYjI5NGFkMzkyZjNlOWVhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTI3NSw3ICsy
NzUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlG
dW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogCiAgICAgICAgICAgICBzdGFja0xpbWl0
R1BSSXNDbG9iYmVyZWQgPSB0cnVlOwogICAgICAgICAgICAgaml0LmVtaXRMb2FkU3RydWN0dXJl
KHZtLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBzdGFja0xpbWl0R1BSKTsKLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6
OmNsYXNzSW5mb09mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuZW1pdExv
YWRDbGFzc0luZm9Gcm9tU3RydWN0dXJlKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwogCiAgICAg
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8V2ViQXNzZW1ibHlGdW5jdGlvbj46
OnZhbHVlLCAiV2UgZG8gbm90IGNoZWNrIGZvciBzdWJ0eXBlcyBiZWxvdyIpOwogICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
Pjo6dmFsdWUsICJXZSBkbyBub3QgY2hlY2sgZm9yIHN1YnR5cGVzIGJlbG93Iik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4OTZlYWU2YWUwYmRlN2NkZDQ2
OTY4OTBkNmVlZTAyMGIzYmNiY2M3Li4xYTYxMTQzM2QxY2Y0M2ZjNjEzMTA4N2ZlNDZmMmIxNTgw
NzZiYjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcx
MCw2ICs3MTAsNyBAQAogCQlFMzYwQzc2NTIxMjdCODVDMDBDOTBGMEUgLyogVW5leHBlY3RlZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmV4cGVjdGVkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNjg5NUNCMjNBNDQ1Q0QwMDhERDRDOCAvKiBQYWNrZWRS
ZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUzNjg5NUNDMjNBNDQ1RUUwMDhERDRDOCAvKiBQYWNrZWRSZWZQdHIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFja2VkUmVmUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUz
ODAyMERCMjQwMUMwOTMwMDM3Q0E5RSAvKiBDb21wYWN0UmVmUHRyVHVwbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29tcGFjdFJlZlB0clR1cGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzODg4ODZEMjBDOTA5NTEwMEU2MzJCQyAvKiBXb3JrZXJQb29sLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtlclBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMzg4ODg2RTIwQzkwOTUxMDBFNjMyQkMgLyogV29ya2VyUG9vbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrZXJQb29sLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzOEM0MTI0MUVCNEUwNEMwMDQyOTU3RCAvKiBDUFVUaW1lQ29j
b2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1BVVGltZUNvY29h
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1Myw2ICs5NTQsNyBAQAogCQkJ
CTBGNjZCMjgxMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCAqLywKIAkJCQkwRkM0RURF
NTE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQcmludGVyLmggKi8sCiAJCQkJRTNDRjc2OTAyMTE1
RDZCQTAwOTFERTQ4IC8qIENvbXBhY3RQb2ludGVyVHVwbGUuaCAqLywKKwkJCQlFMzgwMjBEQjI0
MDFDMDkzMDAzN0NBOUUgLyogQ29tcGFjdFJlZlB0clR1cGxlLmggKi8sCiAJCQkJMEY4RjJCOEYx
NzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLywKIAkJCQkwRjhGMkI5
MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJCQlBOEE0NzI3
MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5k
ZXggODRmOGJlZDkyNWVlODRmZjZjNGQ4ZDRiMGQ1ODAwMzY5NzJiY2Q0MS4uY2UwZGFiNjViOTg2
NTFjMGVjZDZkMzE0M2JjODQzODRjNzYxYTgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTMw
LDYgKzMwLDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIENsb2NrVHlwZS5oCiAgICAg
Q29tbWFQcmludGVyLmgKICAgICBDb21wYWN0UG9pbnRlclR1cGxlLmgKKyAgICBDb21wYWN0UmVm
UHRyVHVwbGUuaAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmgKICAgICBDb21waWxlci5oCiAgICAg
Q29tcGxldGlvbkhhbmRsZXIuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ29tcGFjdFBv
aW50ZXJUdXBsZS5oIGIvU291cmNlL1dURi93dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5oCmluZGV4
IGI4ZjIwMWVhMDk2NTg5YjkyZmY1MDZjNjRmMDk5YjhkOTVjYmJlMmYuLjQ1MDNmMDVjZjAyYTJl
Y2MyN2NlODJiYWU3YTM1MGQzODBlYWZmZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Nv
bXBhY3RQb2ludGVyVHVwbGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Db21wYWN0UG9pbnRlclR1
cGxlLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMSw1OCArMzIsNzAgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLS8vIFRoZSBnb2Fs
IG9mIHRoaXMgY2xhc3MgaXMgZm9sZGluZyBhIHBvaW50ZXIgYW5kIDEgYnl0ZSB2YWx1ZSBpbnRv
IDggYnl0ZXMgaW4gYm90aCAzMmJpdCBhbmQgNjRiaXQgYXJjaGl0ZWN0dXJlcy4KKy8vIFRoZSBn
b2FsIG9mIHRoaXMgY2xhc3MgaXMgZm9sZGluZyBhIHBvaW50ZXIgYW5kIDIgYnl0ZXMgdmFsdWUg
aW50byA4IGJ5dGVzIGluIGJvdGggMzJiaXQgYW5kIDY0Yml0IGFyY2hpdGVjdHVyZXMuCiAvLyAz
MmJpdCBhcmNoaXRlY3R1cmUganVzdCBoYXMgYSBwYWlyIG9mIGJ5dGUgYW5kIHBvaW50ZXIsIHdo
aWNoIHNob3VsZCBiZSA4IGJ5dGVzLgotLy8gSW4gNjRiaXQsIHdlIHVzZSB0aGUgdXBwZXIgNSBi
aXRzIGFuZCBsb3dlciAzIGJpdHMgKHplcm8gZHVlIHRvIGFsaWdubWVudCkgc2luY2UgdGhlc2Ug
Yml0cyBhcmUgc2FmZSB0byB1c2UgZXZlbgotLy8gd2l0aCA1LWxldmVsIHBhZ2UgdGFibGVzIHdo
ZXJlIHRoZSBlZmZlY3RpdmUgcG9pbnRlciB3aWR0aCBpcyA1N2JpdHMuCisvLyBXZSBhcmUgYXNz
dW1pbmcgNDhiaXQgcG9pbnRlcnMgaGVyZSwgd2hpY2ggaXMgYWxzbyBhc3N1bWVkIGluIEpTVmFs
dWUgYW55d2F5LgogdGVtcGxhdGU8dHlwZW5hbWUgUG9pbnRlclR5cGUsIHR5cGVuYW1lIFR5cGU+
CiBjbGFzcyBDb21wYWN0UG9pbnRlclR1cGxlIGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUeXBlKSA9PSAxLCAi
Iik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVHlwZSkgPD0gMiwgIiIpOwogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19wb2ludGVyPFBvaW50ZXJUeXBlPjo6dmFsdWUsICIiKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8VHlwZT46OnZhbHVlIHx8IHN0ZDo6aXNfZW51
bTxUeXBlPjo6dmFsdWUsICIiKTsKKyAgICB1c2luZyBVbnNpZ25lZFR5cGUgPSBzdGQ6Om1ha2Vf
dW5zaWduZWRfdDxzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VHlwZSwgYm9vbD4s
IHVpbnQ4X3QsIFR5cGU+PjsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihVbnNpZ25lZFR5cGUp
ID09IHNpemVvZihUeXBlKSk7CiAKICAgICBDb21wYWN0UG9pbnRlclR1cGxlKCkgPSBkZWZhdWx0
OwogCiAjaWYgQ1BVKEFERFJFU1M2NCkKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVp
bnQ2NF90IGVuY29kZVR5cGUodWludDhfdCB0eXBlKQotICAgIHsKLSAgICAgICAgLy8gRW5jb2Rl
IDhiaXQgdHlwZSBVVVVERERERCBpbnRvIDY0Yml0IGRhdGEgREREREQuLjU2Yml0Li5VVVUuCi0g
ICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHR5cGUpIDw8IDU5KSB8IChzdGF0
aWNfY2FzdDx1aW50NjRfdD4odHlwZSkgPj4gNSk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDhfdCBkZWNvZGVUeXBlKHVpbnQ2NF90IHZhbHVlKQorICAgIHN0YXRpY19hc3NlcnQo
V1RGX09TX0NPTlNUQU5UX0VGRkVDVElWRV9BRERSRVNTX1dJRFRIIDw9IDQ4KTsKKworI2lmIENQ
VShMSVRUTEVfRU5ESUFOKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUeXBlKCkKICAg
ICB7Ci0gICAgICAgIC8vIERlY29kZSA2NGJpdCBkYXRhIERERERELi41NmJpdC4uVVVVIGludG8g
OGJpdCB0eXBlIFVVVURERERELgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4o
KHZhbHVlID4+IDU5KSB8ICh2YWx1ZSA8PCA1KSk7CisgICAgICAgIHJldHVybiA0OCAvIDg7CiAg
ICAgfQorI2VuZGlmCiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IHR5cGVNYXNrID0g
ZW5jb2RlVHlwZShVSU5UOF9NQVgpOwotICAgIHN0YXRpY19hc3NlcnQoMHhGODAwMDAwMDAwMDAw
MDA3VUxMID09IHR5cGVNYXNrLCAiIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBw
b2ludGVyTWFzayA9IH50eXBlTWFzazsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IHBv
aW50ZXJNYXNrID0gKDFVTEwgPDwgNDgpIC0gMTsKIAogICAgIENvbXBhY3RQb2ludGVyVHVwbGUo
UG9pbnRlclR5cGUgcG9pbnRlciwgVHlwZSB0eXBlKQotICAgICAgICA6IG1fZGF0YShiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHBvaW50ZXIpIHwgZW5jb2RlVHlwZShzdGF0aWNfY2FzdDx1aW50OF90
Pih0eXBlKSkpCisgICAgICAgIDogbV9kYXRhKGVuY29kZShwb2ludGVyLCB0eXBlKSkKICAgICB7
Ci0gICAgICAgIEFTU0VSVCgoYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihwb2ludGVyKSAmIDBiMTEx
KSA9PSAweDApOworICAgICAgICBBU1NFUlQodGhpcy0+dHlwZSgpID09IHR5cGUpOworICAgICAg
ICBBU1NFUlQodGhpcy0+cG9pbnRlcigpID09IHBvaW50ZXIpOwogICAgIH0KIAogICAgIFBvaW50
ZXJUeXBlIHBvaW50ZXIoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UG9pbnRlclR5cGU+
KG1fZGF0YSAmIHBvaW50ZXJNYXNrKTsgfQogICAgIHZvaWQgc2V0UG9pbnRlcihQb2ludGVyVHlw
ZSBwb2ludGVyKQogICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChhbGlnbm9mKHR5cGVuYW1l
IHN0ZDo6cmVtb3ZlX3BvaW50ZXI8UG9pbnRlclR5cGU+Ojp0eXBlKSA+PSBhbGlnbm9mKHZvaWQq
KSwgIiIpOwotICAgICAgICBBU1NFUlQoKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4ocG9pbnRlcikg
JiAwYjExMSkgPT0gMHgwKTsKLSAgICAgICAgbV9kYXRhID0gQ29tcGFjdFBvaW50ZXJUdXBsZShw
b2ludGVyLCB0eXBlKCkpLm1fZGF0YTsKKyAgICAgICAgbV9kYXRhID0gZW5jb2RlKHBvaW50ZXIs
IHR5cGUoKSk7CiAgICAgfQogCi0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8VHlwZT4oZGVjb2RlVHlwZShtX2RhdGEpKTsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGRlY29kZVR5cGUobV9kYXRhKTsgfQogICAgIHZvaWQgc2V0VHlwZShUeXBlIHR5
cGUpCiAgICAgewotICAgICAgICBtX2RhdGEgPSBDb21wYWN0UG9pbnRlclR1cGxlKHBvaW50ZXIo
KSwgdHlwZSkubV9kYXRhOworICAgICAgICBtX2RhdGEgPSBlbmNvZGUocG9pbnRlcigpLCB0eXBl
KTsKICAgICB9CiAKKyAgICB1aW50NjRfdCBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9
CisKIHByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBlbmNvZGVUeXBlKFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3Rh
dGljX2Nhc3Q8VW5zaWduZWRUeXBlPih0eXBlKSkgPDwgNDg7CisgICAgfQorICAgIHN0YXRpYyBj
b25zdGV4cHIgVHlwZSBkZWNvZGVUeXBlKHVpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0YXRpY19jYXN0PFVuc2lnbmVkVHlwZT4odmFsdWUg
Pj4gNDgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDY0X3QgZW5jb2RlKFBvaW50ZXJUeXBl
IHBvaW50ZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHBvaW50ZXIpIHwgZW5jb2RlVHlwZSh0eXBlKTsKKyAgICB9CisKICAgICB1aW50
NjRfdCBtX2RhdGEgeyAwIH07CiAjZWxzZQogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvQ29tcGFjdFJlZlB0clR1cGxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9Db21wYWN0UmVmUHRy
VHVwbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iZjNkM2ZlNDRhMDRlN2NmMDM2OGE0Y2VhZjJhMTZmMjM2NWI3
NjdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvQ29tcGFjdFJlZlB0clR1cGxl
LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0NvbXBhY3RQb2ludGVyVHVw
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUeXBlPgorY2xhc3MgQ29tcGFjdFJlZlB0clR1cGxl
IGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDb21wYWN0UmVmUHRyVHVwbGUpOworcHVibGljOgorICAgIENvbXBhY3RSZWZQdHJU
dXBsZSgpID0gZGVmYXVsdDsKKyAgICB+Q29tcGFjdFJlZlB0clR1cGxlKCkKKyAgICB7CisgICAg
ICAgIGRlcmVmSWZOb3ROdWxsKG1fZGF0YS5wb2ludGVyKCkpOworICAgIH0KKworICAgIFQqIHBv
aW50ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5wb2ludGVyKCk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRQb2ludGVyKFQqIHBvaW50ZXIpCisgICAgeworICAgICAgICBy
ZWZJZk5vdE51bGwocG9pbnRlcik7CisgICAgICAgIGF1dG8qIG9sZCA9IG1fZGF0YS5wb2ludGVy
KCk7CisgICAgICAgIG1fZGF0YS5zZXRQb2ludGVyKHBvaW50ZXIpOworICAgICAgICBkZXJlZklm
Tm90TnVsbChvbGQpOworICAgIH0KKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS50eXBlKCk7IH0KKyAgICB2b2lkIHNldFR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAg
ICAgbV9kYXRhLnNldFR5cGUodHlwZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENvbXBhY3RQ
b2ludGVyVHVwbGU8VCosIFR5cGU+IG1fZGF0YTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgor
Cit1c2luZyBXVEY6OkNvbXBhY3RSZWZQdHJUdXBsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgK
aW5kZXggNmJiYmVmZTcwZmMxYzEzMDJmNDk1ZWMzZjZlMmE0NDEwMjVlNmQ2YS4uMDA0MzU2MzQx
Zjc0NzE5NjQ2ZjE1ODE0NTM2Zjc1MDdkNDEyZjM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBs
LmgKQEAgLTE4OSw4ICsxODksOCBAQCBjbGFzcyBTdHJpbmdJbXBsIDogcHJpdmF0ZSBTdHJpbmdJ
bXBsU2hhcGUgewogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBNYXhMZW5ndGggPSBT
dHJpbmdJbXBsU2hhcGU6Ok1heExlbmd0aDsKIAotICAgIC8vIFRoZSBib3R0b20gNiBiaXRzIGlu
IHRoZSBoYXNoIGFyZSBmbGFncy4KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVk
IHNfZmxhZ0NvdW50ID0gNjsKKyAgICAvLyBUaGUgYm90dG9tIDYgYml0cyBpbiB0aGUgaGFzaCBh
cmUgZmxhZ3MsIGJ1dCByZXNlcnZlIDggYml0cyBzaW5jZSBTdHJpbmdIYXNoIG9ubHkgaGFzIDI0
IGJpdHMgYW55d2F5LgorICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19mbGFn
Q291bnQgPSA4OwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWdu
ZWQgc19mbGFnTWFzayA9ICgxdSA8PCBzX2ZsYWdDb3VudCkgLSAxOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N5bWJv
bEltcGwuaAppbmRleCBlZDBmMTNlNTQ0ZjEwYzMxYjQxOWJlYWFhODI1MjM3NGE4NzBhYzczLi42
MzEwZGM1NzNjZjU3ZjBkNWE4Njg4NThiMjVkMDdmNjMwNjEwMzMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N5bWJvbEltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N5
bWJvbEltcGwuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBTeW1ib2xJbXBsIDogcHVibGljIFVu
aXF1ZWRTdHJpbmdJbXBsIHsKICAgICBzdGF0aWMgY29uc3RleHByIEZsYWdzIHNfZmxhZ0lzUmVn
aXN0ZXJlZCA9IDBiMDEwdTsKICAgICBzdGF0aWMgY29uc3RleHByIEZsYWdzIHNfZmxhZ0lzUHJp
dmF0ZSA9IDBiMTAwdTsKIAotICAgIHVuc2lnbmVkIGhhc2hGb3JTeW1ib2woKSBjb25zdCB7IHJl
dHVybiBtX2hhc2hGb3JTeW1ib2w7IH0KKyAgICB1bnNpZ25lZCBoYXNoRm9yU3ltYm9sKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNoRm9yU3ltYm9sU2hpZnRlZFdpdGhGbGFnQ291bnQgPj4gc19mbGFn
Q291bnQ7IH0KICAgICBib29sIGlzTnVsbFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3Mg
JiBzX2ZsYWdJc051bGxTeW1ib2w7IH0KICAgICBib29sIGlzUmVnaXN0ZXJlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmxhZ3MgJiBzX2ZsYWdJc1JlZ2lzdGVyZWQ7IH0KICAgICBib29sIGlzUHJpdmF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBzX2ZsYWdJc1ByaXZhdGU7IH0KQEAgLTYwLDcg
KzYwLDcgQEAgY2xhc3MgU3ltYm9sSW1wbCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5nSW1wbCB7CiAg
ICAgICAgIGNvbnN0ZXhwciBTdGF0aWNTeW1ib2xJbXBsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJz
KVtjaGFyYWN0ZXJDb3VudF0sIEZsYWdzIGZsYWdzID0gc19mbGFnRGVmYXVsdCkKICAgICAgICAg
ICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcsIGNoYXJh
Y3RlckNvdW50IC0gMSwgY2hhcmFjdGVycywKICAgICAgICAgICAgICAgICBzX2hhc2hGbGFnOEJp
dEJ1ZmZlciB8IHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0IHwgU3RyaW5nU3ltYm9sIHwgQnVmZmVy
SW50ZXJuYWwgfCAoU3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJp
dHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQpLCBDb25zdHJ1Y3RXaXRoQ29uc3RFeHByKQot
ICAgICAgICAgICAgLCBtX2hhc2hGb3JTeW1ib2woU3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJh
bEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQpCisgICAgICAg
ICAgICAsIG1faGFzaEZvclN5bWJvbFNoaWZ0ZWRXaXRoRmxhZ0NvdW50KFN0cmluZ0hhc2hlcjo6
Y29tcHV0ZUxpdGVyYWxIYXNoQW5kTWFza1RvcDhCaXRzKGNoYXJhY3RlcnMpIDw8IHNfZmxhZ0Nv
dW50KQogICAgICAgICAgICAgLCBtX2ZsYWdzKGZsYWdzKQogICAgICAgICB7CiAgICAgICAgIH0K
QEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgU3ltYm9sSW1wbCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5n
SW1wbCB7CiAgICAgICAgIGNvbnN0ZXhwciBTdGF0aWNTeW1ib2xJbXBsKGNvbnN0IGNoYXIxNl90
ICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRdLCBGbGFncyBmbGFncyA9IHNfZmxhZ0RlZmF1
bHQpCiAgICAgICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50RmxhZ0lzU3RhdGlj
U3RyaW5nLCBjaGFyYWN0ZXJDb3VudCAtIDEsIGNoYXJhY3RlcnMsCiAgICAgICAgICAgICAgICAg
c19oYXNoRmxhZ0RpZFJlcG9ydENvc3QgfCBTdHJpbmdTeW1ib2wgfCBCdWZmZXJJbnRlcm5hbCB8
IChTdHJpbmdIYXNoZXI6OmNvbXB1dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0
ZXJzKSA8PCBzX2ZsYWdDb3VudCksIENvbnN0cnVjdFdpdGhDb25zdEV4cHIpCi0gICAgICAgICAg
ICAsIG1faGFzaEZvclN5bWJvbChTdHJpbmdIYXNoZXI6OmNvbXB1dGVMaXRlcmFsSGFzaEFuZE1h
c2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCkKKyAgICAgICAgICAgICwgbV9o
YXNoRm9yU3ltYm9sU2hpZnRlZFdpdGhGbGFnQ291bnQoU3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0
ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQpCiAgICAg
ICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtODAsNyAr
ODAsNyBAQCBjbGFzcyBTeW1ib2xJbXBsIDogcHVibGljIFVuaXF1ZWRTdHJpbmdJbXBsIHsKICAg
ICAgICAgfQogCiAgICAgICAgIFN0cmluZ0ltcGwqIG1fb3duZXIgeyBudWxscHRyIH07IC8vIFdl
IGRvIG5vdCBtYWtlIFN0YXRpY1N5bWJvbEltcGwgQnVmZmVyU3Vic3RyaW5nLiBUaHVzIHdlIGNh
biBtYWtlIHRoaXMgbnVsbHB0ci4KLSAgICAgICAgdW5zaWduZWQgbV9oYXNoRm9yU3ltYm9sOwor
ICAgICAgICB1bnNpZ25lZCBtX2hhc2hGb3JTeW1ib2xTaGlmdGVkV2l0aEZsYWdDb3VudDsKICAg
ICAgICAgRmxhZ3MgbV9mbGFnczsKICAgICB9OwogCkBAIC05Miw3ICs5Miw3IEBAIGNsYXNzIFN5
bWJvbEltcGwgOiBwdWJsaWMgVW5pcXVlZFN0cmluZ0ltcGwgewogICAgIFN5bWJvbEltcGwoY29u
c3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUmVmPFN0cmluZ0ltcGw+JiYg
YmFzZSwgRmxhZ3MgZmxhZ3MgPSBzX2ZsYWdEZWZhdWx0KQogICAgICAgICA6IFVuaXF1ZWRTdHJp
bmdJbXBsKENyZWF0ZVN5bWJvbCwgY2hhcmFjdGVycywgbGVuZ3RoKQogICAgICAgICAsIG1fb3du
ZXIoJmJhc2UubGVha1JlZigpKQotICAgICAgICAsIG1faGFzaEZvclN5bWJvbChuZXh0SGFzaEZv
clN5bWJvbCgpKQorICAgICAgICAsIG1faGFzaEZvclN5bWJvbFNoaWZ0ZWRXaXRoRmxhZ0NvdW50
KG5leHRIYXNoRm9yU3ltYm9sKCkpCiAgICAgICAgICwgbV9mbGFncyhmbGFncykKICAgICB7CiAg
ICAgICAgIEFTU0VSVChTdHJpbmdJbXBsOjp0YWlsT2Zmc2V0PFN0cmluZ0ltcGwqPigpID09IE9C
SkVDVF9PRkZTRVRPRihTeW1ib2xJbXBsLCBtX293bmVyKSk7CkBAIC0xMDEsNyArMTAxLDcgQEAg
Y2xhc3MgU3ltYm9sSW1wbCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5nSW1wbCB7CiAgICAgU3ltYm9s
SW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBSZWY8U3RyaW5n
SW1wbD4mJiBiYXNlLCBGbGFncyBmbGFncyA9IHNfZmxhZ0RlZmF1bHQpCiAgICAgICAgIDogVW5p
cXVlZFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sLCBjaGFyYWN0ZXJzLCBsZW5ndGgpCiAgICAgICAg
ICwgbV9vd25lcigmYmFzZS5sZWFrUmVmKCkpCi0gICAgICAgICwgbV9oYXNoRm9yU3ltYm9sKG5l
eHRIYXNoRm9yU3ltYm9sKCkpCisgICAgICAgICwgbV9oYXNoRm9yU3ltYm9sU2hpZnRlZFdpdGhG
bGFnQ291bnQobmV4dEhhc2hGb3JTeW1ib2woKSkKICAgICAgICAgLCBtX2ZsYWdzKGZsYWdzKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKFN0cmluZ0ltcGw6OnRhaWxPZmZzZXQ8U3RyaW5nSW1wbCo+
KCkgPT0gT0JKRUNUX09GRlNFVE9GKFN5bWJvbEltcGwsIG1fb3duZXIpKTsKQEAgLTExMCw3ICsx
MTAsNyBAQCBjbGFzcyBTeW1ib2xJbXBsIDogcHVibGljIFVuaXF1ZWRTdHJpbmdJbXBsIHsKICAg
ICBTeW1ib2xJbXBsKEZsYWdzIGZsYWdzID0gc19mbGFnRGVmYXVsdCkKICAgICAgICAgOiBVbmlx
dWVkU3RyaW5nSW1wbChDcmVhdGVTeW1ib2wpCiAgICAgICAgICwgbV9vd25lcihTdHJpbmdJbXBs
OjplbXB0eSgpKQotICAgICAgICAsIG1faGFzaEZvclN5bWJvbChuZXh0SGFzaEZvclN5bWJvbCgp
KQorICAgICAgICAsIG1faGFzaEZvclN5bWJvbFNoaWZ0ZWRXaXRoRmxhZ0NvdW50KG5leHRIYXNo
Rm9yU3ltYm9sKCkpCiAgICAgICAgICwgbV9mbGFncyhmbGFncyB8IHNfZmxhZ0lzTnVsbFN5bWJv
bCkKICAgICB7CiAgICAgICAgIEFTU0VSVChTdHJpbmdJbXBsOjp0YWlsT2Zmc2V0PFN0cmluZ0lt
cGwqPigpID09IE9CSkVDVF9PRkZTRVRPRihTeW1ib2xJbXBsLCBtX293bmVyKSk7CkBAIC0xMTks
NyArMTE5LDcgQEAgY2xhc3MgU3ltYm9sSW1wbCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5nSW1wbCB7
CiAgICAgLy8gVGhlIHBvaW50ZXIgdG8gdGhlIG93bmVyIHN0cmluZyBzaG91bGQgYmUgaW1tZWRp
YXRlbHkgZm9sbG93aW5nIGFmdGVyIHRoZSBTdHJpbmdJbXBsIGxheW91dCwKICAgICAvLyBzaW5j
ZSB3ZSB3b3VsZCBsaWtlIHRvIGFsaWduIHRoZSBsYXlvdXQgb2YgU3ltYm9sSW1wbCB0byB0aGUg
b25lIG9mIEJ1ZmZlclN1YnN0cmluZyBTdHJpbmdJbXBsLgogICAgIFN0cmluZ0ltcGwqIG1fb3du
ZXI7Ci0gICAgdW5zaWduZWQgbV9oYXNoRm9yU3ltYm9sOworICAgIHVuc2lnbmVkIG1faGFzaEZv
clN5bWJvbFNoaWZ0ZWRXaXRoRmxhZ0NvdW50OwogICAgIEZsYWdzIG1fZmxhZ3MgeyBzX2ZsYWdE
ZWZhdWx0IH07CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoU3ltYm9sSW1wbCkgPT0gc2l6ZW9m
KFN5bWJvbEltcGw6OlN0YXRpY1N5bWJvbEltcGwpLCAiIik7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzdlNGRkOTg1MWQz
NDFkN2YzZjkzNzdmYjE0NmUzMTJkOTFhMzY4OC4uNjhhNDUyYTNkNjJkNDVjY2QxMjVmNDNhYTMy
YTk1M2YyMzQ5MDA1OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTAyLTIzICBZdXN1a2Ug
U3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gU2hyaW5rIFN0cnVj
dHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3
ODI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyB0ZXN0IGlzIGhhbGYtYnJva2VuIHNpbmNlIGl0IHJlbGllcyBvbiBIYXNoTWFwJ3Mgb3JkZXIg
aW1wbGljaXRseS4KKyAgICAgICAgV2UgY2hhbmdlZCBTeW1ib2xJbXBsJ3MgaGFzaCBjb2RlLCBz
byBpdCBtYWtlcyB0aGUgcmVzdWx0IGRpZmZlcmVudC4KKworICAgICAgICAqIGluc3BlY3Rvci9k
ZWJ1Z2dlci90YWlsLWRlbGV0ZWQtZnJhbWVzL3RhaWwtZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1
ZS1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDItMjEgIEphc29uIExhd3JlbmNlICA8bGF3cmVuY2Uu
akBhcHBsZS5jb20+CiAKICAgICAgICAgWyBpT1MgXSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL0luZGV4ZWREQi9rZXktZ2VuZXJhdG9ycy9yZWFkaW5nLWF1dG9pbmNyZW1lbnQtaW5k
ZXhlcy1jdXJzb3JzLmFueS5zZXJ2aWNld29ya2VyLmh0bWwgaXMgZmxha3kgZmFpbGluZy4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci90YWlsLWRlbGV0ZWQtZnJh
bWVzL3RhaWwtZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvdGFpbC1kZWxldGVkLWZyYW1lcy90YWlsLWRlbGV0ZWQt
ZnJhbWVzLXRoaXMtdmFsdWUtZXhwZWN0ZWQudHh0CmluZGV4IDIxMjVmYjUyOTcxY2VjZWFiN2Mw
ODAzNGYyZDUzNmM3YTJhNGI0ZTguLmUzNzQ0NjQ1MzdhYWI3ZDRhMGFiNWUyNGY0ZmM4YTcwZmY3
ZjViN2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci90YWlsLWRl
bGV0ZWQtZnJhbWVzL3RhaWwtZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1ZS1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3RhaWwtZGVsZXRlZC1mcmFtZXMv
dGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLWV4cGVjdGVkLnR4dApAQCAtMTQsNiArMTQs
NiBAQCBDQUxMIFNUQUNLOgogMzogW0ZdIHN0YXJ0QUJDCiAgIHRoaXM6IHVuZGVmaW5lZAogNDog
W1BdIEdsb2JhbCBDb2RlCi0gIHRoaXM6IGMgLSAKKyAgdGhpczogYSAtIAogUkVTVU1FRAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391488</attachid>
            <date>2020-02-23 03:28:38 -0800</date>
            <delta_ts>2020-02-23 18:18:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207827-20200223032837.patch</filename>
            <type>text/plain</type>
            <size>125660</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NDI3NDBmNDllZGMwZWQ3MmU3YzUzZjg3NzNiYzQ2NzUwNzM1NGYyLi5kZWM3MjU3ZDdkMDc4NDIz
NzI3NWMyYWI0ZDQ4MDhiMDBlOTFkMDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDMgQEAKKzIwMjAtMDItMjMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTaHJpbmsgU3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNocmlua3Mgc2l6ZW9mKFN0
cnVjdHVyZSkgZnJvbSAxMTIgdG8gOTYgKDE2IGJ5dGVzKSBpbiA2NCBiaXQgYXJjaGl0ZWN0dXJl
cy4KKyAgICAgICAgU3RydWN0dXJlIGlzIG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IGFsbG9j
YXRlZCBKU0NlbGwgaW4gSlNDLiBTbyBpdCBpcyB3b3J0aCBkb2luZworICAgICAgICBhbGwgdGhl
IHNvcnQgb2YgYml0IGhhY2tzIHRvIG1ha2UgaXQgY29tcGFjdCBhcyBtdWNoIGFzIHBvc3NpYmxl
LgorCisgICAgICAgICAgICAxLiBTdHJpbmdIYXNoZXIgaXMgYWx3YXlzIGdlbmVyYXRpbmcgMjQg
Yml0cyBoYXNoZXMgc28gZmFyLiBCeSBsZXZlcmFnaW5nIHRoaXMgZmFjdCwKKyAgICAgICAgICAg
ICAgIHdlIHN0b3JlIGhhc2ggY29kZSBpbiBTdHJ1Y3R1cmUgaW4gMyBieXRlcyAoMjQgYml0cykg
Zm9yIHByb3BlcnR5LWhhc2ggYW5kIHNlZW4tcHJvcGVydHktaGFzaC4KKyAgICAgICAgICAgIDIu
IFB1dCBvdXRPZkxpbmVUeXBlRmxhZ3MsIG1heE9mZnNldCBhbmQgdHJhbnNpdGlvbk9mZnNldCBp
bnRvIGhpZ2hlc3QgYml0cyBvZiBtX3Byb3BlcnR5VGFibGVVbnNhZmUsCisgICAgICAgICAgICAg
ICBtX2NhY2hlZFByb3RvdHlwZUNoYWluLCBtX2NsYXNzSW5mbywgYW5kIG1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZS4gRG8gbm90IHVzZSBQYWNrZWRQdHIgaGVyZSBzaW5jZQorICAgICAgICAgICAg
ICAgc29tZSBvZiB0aGVtIGFyZSBjb25jdXJyZW50bHkgYWNjZXNzZWQgYnkgR0MuCisgICAgICAg
ICAgICAzLiBQdXQgbV9pbmxpbmVDYXBhY2l0eSBpbnRvIGxvd2VyIDggYml0cyBvZiBtX3Byb3Bl
cnR5SGFzaC4KKyAgICAgICAgICAgIDQuIFJlbW92ZSBtX2xvY2ssIGFuZCB1c2UgU3RydWN0dXJl
OjpjZWxsTG9jaygpIGluc3RlYWQuCisgICAgICAgICAgICA1LiBSZW1vdmUgbV9jYWNoZWRQcm90
b3R5cGVDaGFpbiBjbGVhcmluZyBmcm9tIHRoZSBjb25jdXJyZW50IGNvbGxlY3RvciBzaW5jZSBp
dCBpcyBkZWFkIGNvZGUsIGl0IHdhcyBvbGQgY29kZS4KKyAgICAgICAgICAgICAgIFdlIGFyZSBz
ZXR0aW5nIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4gb25seSBpZiBTdHJ1Y3R1cmUgaXMgZm9yIEpT
T2JqZWN0LiBDbGVhcmluZyBoYXBwZW5zIG9ubHkgaWYgaXQgaXMgbm90CisgICAgICAgICAgICAg
ICBhIFN0cnVjdHVyZSBmb3IgSlNPYmplY3QuCisgICAgICAgICAgICA2LiBQcmV2aW91cyBTdHJ1
Y3R1cmUgaXMgaGVsZCBhcyBTdHJ1Y3R1cmVJRCBtX3ByZXZpb3VzLiBBbmQgbV9wcmV2aW91c09y
UmFyZURhdGEgYmVjb21lcyBtX2NhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YS4KKworICAg
ICAgICBNYW55IHBhaXJzIGFyZSB1c2luZyBDb21wYWN0UG9pbnRlclR1cGxlIHRvIG1ha2UgY29k
ZSBjbGVhbi4KKyAgICAgICAgQ29tYmluaW5nIGFsbCBvZiB0aGUgYWJvdmUgdGVjaG5pcXVlcyBh
bmQgZ2V0cyB1cyAxNiBieXRlcy4KKworICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpzdHJ1Y3R1cmUgY29uc3Qp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEtleXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlVGhpcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVQcm9taXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUludGVybmFsRmllbGRPYmplY3QpOgor
ICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVPYmplY3RLZXlzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUNyZWF0ZVByb21pc2UpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDaGVja1N1YkNsYXNzKToKKyAgICAg
ICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6ZW1pdExvYWRDbGFzc0luZm9Gcm9tU3RydWN0dXJlKToKKyAgICAgICAgKiBqaXQvSklUT3Bj
b2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAg
ICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
Ojp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBy
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkNsb25lZEFyZ3VtZW50
czo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRKU0xvY2su
aDoKKyAgICAgICAgKEpTQzo6Q29uY3VycmVudEpTTG9ja2VyQmFzZTo6Q29uY3VycmVudEpTTG9j
a2VyQmFzZSk6CisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGw6OkdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwpOgorICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXJJbXBsOjp+R0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbCk6CisgICAgICAg
IChKU0M6OkNvbmN1cnJlbnRKU0xvY2tlckltcGw6OkNvbmN1cnJlbnRKU0xvY2tlckltcGwpOgor
ICAgICAgICAoSlNDOjpHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXI6OkdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tl
cjo6fkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
bmN1cnJlbnRKU0xvY2tlcjo6Q29uY3VycmVudEpTTG9ja2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdENvbmN1cnJlbnRs
eSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnByZXBhcmVUb1B1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVHlwZS5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmNvbnRhaW5z
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQgY29u
c3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXph
dGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxl
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlSW1wbCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQ
cm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXRpb25TbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmbGF0
dGVuRGljdGlvbmFyeVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cGluKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5nKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpl
bnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
cnVsZU91dFVuc2VlblByb3BlcnR5SGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6c2VlblByb3BlcnRpZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Zm9y
RWFjaFByb3BlcnR5Q29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0cmFu
c2l0aXZlbHlUcmFuc2l0aW9uZWRGcm9tKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjYWNo
ZWRQcm90b3R5cGVDaGFpbiBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0Q2Fj
aGVkUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3RvdHlwZUNo
YWluIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2VtZW50
V2F0Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25z
aXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92
ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNl
dFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNsZWFyUHJvcGVydHlU
YWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0T3V0T2ZMaW5lVHlwZUZsYWdzKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRJbmxpbmVDYXBhY2l0eSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6c2V0Q2xhc3NJbmZvKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
ZXRQcmV2aW91c0lEKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjbGVhclByZXZpb3VzSUQp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlUmFyZURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRh
OjpTdHJ1Y3R1cmVSYXJlRGF0YSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6Cisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hlZFByb3RvdHlwZUNoYWluKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldFByZXZpb3VzSUQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2xlYXJQcmV2aW91c0lEKTogRGVsZXRlZC4KKyAg
ICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTUhl
bHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzdCk6CisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlG
dW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3cpOgorCiAyMDIwLTAyLTIwICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIHN1cHBvcnQgZm9yIGJ5dGVjb2Rl
IGNhY2hpbmcgbW9yZSByb2J1c3QgYWdhaW5zdCBmaWxlIGNvcnJ1cHRpb24uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNmMTJm
Mjc2NTBkNDhkNTAxNWI4ZGNjMTFlNTc4MjViMzVhZGI4MDIuLjI5YWVhZTUxZjM1MDI1YTA5YmVl
NDIwYzM2ZmNlN2I3MzUyNTk3NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMDItMjMgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBTaHJpbmsg
U3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDc4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIENvbXBhY3RQb2ludGVyVHVwbGUgdXNhYmxlIGZvciBzdG9yaW5nIDE2IGJpdHMgZGF0
YS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5o
OgorICAgICAgICAqIHd0Zi9Db21wYWN0UmVmUHRyVHVwbGUuaDogQWRkZWQuCisgICAgICAgICog
d3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N5bWJvbEltcGwuaDoK
KyAgICAgICAgKFdURjo6U3ltYm9sSW1wbDo6aGFzaEZvclN5bWJvbCBjb25zdCk6CisgICAgICAg
IChXVEY6OlN5bWJvbEltcGw6OlN5bWJvbEltcGwpOgorCiAyMDIwLTAyLTIxICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNTcwNzIpOiBN
b3Rpb25NYXJrIHwgTWFjIHwgLTEwJQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjY2Vzc0Nhc2UuY3BwCmluZGV4IDJhZjQ4MGE5Y2U3ZDgwMjVjZTU4ODNkOGFkZjljOTg0MjY5
YmE5NzUuLmRlZjY3NTI5MzlhZTU0OWQ4MTliNTZlODQwMzQ0MDg1OTgzYjU5ZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKQEAgLTExMCw3ICsx
MTAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKAog
ICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3Rv
dHlwZUFjY2Vzc0NoYWluKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0cnVjdHVyZSA9PSBu
ZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQob2xkU3RydWN0
dXJlID09IG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCh2bSkpOwogCiAgICAgLy8gU2tpcCBvcHRp
bWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZl
CiAgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KQEAgLTcwNSw3ICs3
MDUsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFRyYW5z
aXRpb246Ci0gICAgICAgIGlmICh2aXNpdG9yLnZtKCkuaGVhcC5pc01hcmtlZChtX3N0cnVjdHVy
ZS0+cHJldmlvdXNJRCgpKSkKKyAgICAgICAgaWYgKHZpc2l0b3Iudm0oKS5oZWFwLmlzTWFya2Vk
KG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKHZpc2l0b3Iudm0oKSkpKQogICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY2Nlc3NDYXNlLmgKaW5kZXggNzlkMzEwMTU1ZTkzYTU0NTNkMjg2MWM0MzIyN2JhM2Jh
YzE5ZjI3Ny4uYTc2Nzc2N2JmYzYwMzQ4ZGM3NTkzYTY4NGEzZDY0MDJkNTZmNzE1OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCkBAIC0xNTgsNyArMTU4
LDcgQEAgY2xhc3MgQWNjZXNzQ2FzZSB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKG1fdHlwZSA9PSBUcmFuc2l0aW9uKQotICAgICAgICAgICAg
cmV0dXJuIG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7CisgICAgICAgICAgICByZXR1cm4gbV9z
dHJ1Y3R1cmUtPnByZXZpb3VzSUQobV9zdHJ1Y3R1cmUtPnZtKCkpOwogICAgICAgICByZXR1cm4g
bV9zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogICAgIGJvb2wgZ3VhcmRlZEJ5U3RydWN0dXJlQ2hl
Y2soY29uc3QgU3RydWN0dXJlU3R1YkluZm8mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggNjQyYjE2MzU2ZjkwZTljMzg2
MDJlYmM1N2ZkOWUwNGEwZjQ1YjUyOC4uMTdiYTJiMmZmMzVhNGZhZjAxMWEzMjI5NzNlNzk2OWU3
YjQ3ZTU3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKQEAgLTk2MDUsNyArOTYwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDaGVja1N1YkNsYXNzKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzcGVjaWZpZWRHUFIg
PSBzcGVjaWZpZWQuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgYmFzZUdQUiwgb3RoZXJHUFIsIHNwZWNpZmllZEdQUik7Ci0gICAgICAgIG1faml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG90aGVyR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09m
ZnNldCgpKSwgb3RoZXJHUFIpOworICAgICAgICBtX2ppdC5lbWl0TG9hZENsYXNzSW5mb0Zyb21T
dHJ1Y3R1cmUob3RoZXJHUFIsIG90aGVyR1BSKTsKICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobm9kZS0+Y2xhc3NJbmZvKCkpLCBzcGVjaWZpZWRHUFIpOwog
CiAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CkBAIC0x
MjY5OCwxMCArMTI2OTgsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEtl
eXMoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBvYmplY3RH
UFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6cHJldmlvdXNP
clJhcmVEYXRhT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpvZmZzZXRP
ZkNhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YSgpKSwgc2NyYXRjaEdQUik7CisjaWYgQ1BV
KEFERFJFU1M2NCkKKyAgICAgICAgICAgIG1faml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoU3RydWN0dXJlOjpjYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGFNYXNrKSwg
c2NyYXRjaEdQUik7CisjZW5kaWYKIAogICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgc2NyYXRjaEdQUikpOwotICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFs
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2bSgpLnN0cnVjdHVy
ZVN0cnVjdHVyZS0+c3RydWN0dXJlSUQoKSkpKSk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoYml0d2lzZV9jYXN0PGludDMyX3Q+KHZtKCkuc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1
cmUtPnN0cnVjdHVyZUlEKCkpKSkpOwogCiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6b2Zmc2V0T2ZD
YWNoZWRPd25LZXlzKCkpLCBzY3JhdGNoR1BSKTsKIApAQCAtMTI4MzksNyArMTI4NDIsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlVGhpcyhOb2RlKiBub2RlKQogICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRHUFIsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yR1BS
LCBzdHJ1Y3R1cmVHUFIsIGJ1dHRlcmZseSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogCi0gICAg
bV9qaXQubG9hZDgoSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6
OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBpbmxpbmVDYXBhY2l0eUdQUik7CisgICAgbV9qaXQu
bG9hZDgoSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6Om9mZnNl
dE9mSW5saW5lQ2FwYWNpdHkoKSksIGlubGluZUNhcGFjaXR5R1BSKTsKICAgICBtX2ppdC5lbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBpbmxpbmVDYXBhY2l0eUdQUik7CiAg
ICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogCkBAIC0xMjg3Nyw4ICsxMjg4MCw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVQcm9taXNlKE5vZGUqIG5vZGUpCiAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCByYXJlRGF0YUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFy
ZURhdGFUYWcpKSk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJl
RGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZJbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUoKSArIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlR1BSKTsK
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpa
ZXJvLCBzdHJ1Y3R1cmVHUFIpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobm9kZS0+
aXNJbnRlcm5hbFByb21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkgOiBKU1Byb21p
c2U6OmluZm8oKSksIHNjcmF0Y2gxR1BSKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkpKTsK
KyAgICBtX2ppdC5lbWl0TG9hZENsYXNzSW5mb0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlR1BSLCBz
Y3JhdGNoMUdQUik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIFRydXN0ZWRJbW1QdHIobm9kZS0+aXNJbnRl
cm5hbFByb21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkgOiBKU1Byb21pc2U6Omlu
Zm8oKSkpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0
LmdyYXBoKCksIGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSkpKTsKIApAQCAtMTI5MjUsOCArMTI5MjgsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdChOb2RlKiBub2RlLCBPcGVyYXRp
b24gb3BlcgogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgcmFyZURhdGFHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
RnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mSW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlKCkgKyBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0
cnVjdHVyZUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKEND
YWxsSGVscGVyczo6WmVybywgc3RydWN0dXJlR1BSKSk7Ci0gICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKEpTQ2xhc3M6OmluZm8oKSksIHNjcmF0Y2gxR1BSKTsKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9P
ZmZzZXQoKSkpKTsKKyAgICBtX2ppdC5lbWl0TG9hZENsYXNzSW5mb0Zyb21TdHJ1Y3R1cmUoc3Ry
dWN0dXJlR1BSLCBzY3JhdGNoMUdQUik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIFRydXN0ZWRJbW1QdHIo
SlNDbGFzczo6aW5mbygpKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2JqZWN0KSwgc2NyYXRjaDFHUFIpOwogICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNj
cmF0Y2gxR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCmluZGV4IGIxMDhhYmZjY2I4OTU4
YTgzMDdjMGFhNzhjZDY3ZjIwMmQzYjhjNWMuLjIxOWE0ZjRhNDNkMzM3NzU4NGViNjM1NjMzYWI5
NGMyMjZiODhmNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCkBAIC0xMzksMTEgKzEzOSwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oU3RyaW5nSW1wbF9kYXRhLCBTdHJpbmdJ
bXBsOjpkYXRhT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2hhc2hBbmRGbGFncywg
U3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cmluZ0ltcGxfbGVuZ3Ro
LCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVy
ZV9jbGFzc0luZm8sIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhT
dHJ1Y3R1cmVfY2xhc3NJbmZvLCBTdHJ1Y3R1cmU6Om9mZnNldE9mQ2xhc3NJbmZvKCkpIFwKICAg
ICBtYWNybyhTdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2luZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rv
cnksIFN0cnVjdHVyZTo6aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpKSBcCi0g
ICAgbWFjcm8oU3RydWN0dXJlX2lubGluZUNhcGFjaXR5LCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFj
aXR5T2Zmc2V0KCkpIFwKLSAgICBtYWNybyhTdHJ1Y3R1cmVfcHJldmlvdXNPclJhcmVEYXRhLCBT
dHJ1Y3R1cmU6OnByZXZpb3VzT3JSYXJlRGF0YU9mZnNldCgpKSBcCisgICAgbWFjcm8oU3RydWN0
dXJlX2lubGluZUNhcGFjaXR5LCBTdHJ1Y3R1cmU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSkg
XAorICAgIG1hY3JvKFN0cnVjdHVyZV9jYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEsIFN0
cnVjdHVyZTo6b2Zmc2V0T2ZDYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEoKSkgXAogICAg
IG1hY3JvKFN0cnVjdHVyZV9wcm90b3R5cGUsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkp
IFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJl
SURPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZVJhcmVEYXRhX2NhY2hlZE93bktleXMs
IFN0cnVjdHVyZVJhcmVEYXRhOjpvZmZzZXRPZkNhY2hlZE93bktleXMoKSkgXApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDRkMzQyN2JjODJl
OGM5YjI0N2FjODcxYTAyMDAwMWJiMjM4MjlmMjYuLjJkZDU0ODQxZDRlMzFmNTY4MTE4ZmJkNWI4
NDU2MjQ0MDYyYWY1OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKQEAgLTYwOTEsMTcgKzYwOTEsMTcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
IAogICAgICAgICAgICAgICAgIExWYWx1ZSBvYmplY3QgPSBsb3dPYmplY3QobV9ub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUo
b2JqZWN0KTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgcHJldmlvdXNPclJhcmVEYXRhID0gbV9v
dXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX3ByZXZpb3VzT3JSYXJlRGF0
YSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdE51bGwocHJldmlvdXNP
clJhcmVEYXRhKSwgdW5zdXJlKG5vdE51bGxDYXNlKSwgdW5zdXJlKHNsb3dDYXNlKSk7CisgICAg
ICAgICAgICAgICAgTFZhbHVlIGNhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YSA9IG1fb3V0
LmJpdEFuZChtX291dC5jb25zdEludFB0cihTdHJ1Y3R1cmU6OmNhY2hlZFByb3RvdHlwZUNoYWlu
T3JSYXJlRGF0YU1hc2spLCBtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1
cmVfY2FjaGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhKSk7CisgICAgICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0Lm5vdE51bGwoY2FjaGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhKSwg
dW5zdXJlKG5vdE51bGxDYXNlKSwgdW5zdXJlKHNsb3dDYXNlKSk7CiAKICAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vdE51bGxDYXNlLCByYXJl
RGF0YUNhc2UpOwogICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAg
ICAgICAgbV9vdXQubm90RXF1YWwobV9vdXQubG9hZDMyKHByZXZpb3VzT3JSYXJlRGF0YSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBtX291dC5jb25zdEludDMyKG1fZ3JhcGgubV92bS5z
dHJ1Y3R1cmVTdHJ1Y3R1cmUtPnN0cnVjdHVyZUlEKCkpKSwKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQuZXF1YWwobV9vdXQubG9hZDMyKGNhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBtX291dC5jb25zdEludDMyKG1fZ3JhcGgubV92
bS5zdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZS0+c3RydWN0dXJlSUQoKSkpLAogICAgICAgICAg
ICAgICAgICAgICB1bnN1cmUocmFyZURhdGFDYXNlKSwgdW5zdXJlKHNsb3dDYXNlKSk7CiAKICAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhyYXJlRGF0YUNhc2UsIHVzZUNhY2hlQ2FzZSk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KFN0cnVjdHVy
ZVJhcmVEYXRhOjpjYWNoZWRPd25LZXlzU2VudGluZWwoKSkgPT0gMSk7Ci0gICAgICAgICAgICAg
ICAgTFZhbHVlIGNhY2hlZE93bktleXMgPSBtX291dC5sb2FkUHRyKHByZXZpb3VzT3JSYXJlRGF0
YSwgbV9oZWFwcy5TdHJ1Y3R1cmVSYXJlRGF0YV9jYWNoZWRPd25LZXlzKTsKKyAgICAgICAgICAg
ICAgICBMVmFsdWUgY2FjaGVkT3duS2V5cyA9IG1fb3V0LmxvYWRQdHIoY2FjaGVkUHJvdG90eXBl
Q2hhaW5PclJhcmVEYXRhLCBtX2hlYXBzLlN0cnVjdHVyZVJhcmVEYXRhX2NhY2hlZE93bktleXMp
OwogICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5iZWxvd09yRXF1YWwoY2FjaGVk
T3duS2V5cywgbV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmVS
YXJlRGF0YTo6Y2FjaGVkT3duS2V5c1NlbnRpbmVsKCkpKSksIHVuc3VyZShzbG93Q2FzZSksIHVu
c3VyZSh1c2VDYWNoZUNhc2UpKTsKIAogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHVz
ZUNhY2hlQ2FzZSwgc2xvd0J1dEFycmF5QnVmZmVyQ2FzZSk7CkBAIC02Njc1LDcgKzY2NzUsOCBA
QCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJv
NjQoc3RydWN0dXJlKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShoYXNTdHJ1Y3R1cmUpKTsK
IAogICAgICAgICBtX291dC5hcHBlbmRUbyhoYXNTdHJ1Y3R1cmUsIGNoZWNrR2xvYmFsT2JqZWN0
Q2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChtX291dC5sb2FkUHRyKHN0
cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIo
bV9ub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSA6
IEpTUHJvbWlzZTo6aW5mbygpKSksIHVzdWFsbHkoY2hlY2tHbG9iYWxPYmplY3RDYXNlKSwgcmFy
ZWx5KHNsb3dDYXNlKSk7CisgICAgICAgIExWYWx1ZSBjbGFzc0luZm8gPSBtX291dC5iaXRBbmQo
bV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX2NsYXNzSW5mbyksIG1f
b3V0LmNvbnN0SW50UHRyKFN0cnVjdHVyZTo6Y2xhc3NJbmZvTWFzaykpOworICAgICAgICBtX291
dC5icmFuY2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0cihtX25vZGUt
PmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9t
aXNlOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xv
d0Nhc2UpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0dsb2JhbE9iamVjdENhc2Us
IGZhc3RBbGxvY2F0aW9uQ2FzZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGRlcml2ZWRTdHJ1
Y3R1cmUgPSBtX291dC5hbmNob3Ioc3RydWN0dXJlKTsKQEAgLTY3MzAsNyArNjczMSw4IEBAIGNs
YXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChz
dHJ1Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOwogCiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmplY3RDYXNl
KTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIoc3RydWN0
dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pLCBtX291dC5jb25zdEludFB0cihKU0Ns
YXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVja0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xv
d0Nhc2UpKTsKKyAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmJpdEFuZChtX291dC5s
b2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29u
c3RJbnRQdHIoU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSk7CisgICAgICAgIG1fb3V0LmJyYW5j
aChtX291dC5lcXVhbChjbGFzc0luZm8sIG1fb3V0LmNvbnN0SW50UHRyKEpTQ2xhc3M6OmluZm8o
KSkpLCB1c3VhbGx5KGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSksIHJhcmVseShzbG93Q2FzZSkpOwog
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSwgZmFzdEFsbG9j
YXRpb25DYXNlKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1fb3V0LmxvYWRQ
dHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9nbG9iYWxPYmplY3QpLCB3ZWFrUG9pbnRl
cihnbG9iYWxPYmplY3QpKSwgdXN1YWxseShmYXN0QWxsb2NhdGlvbkNhc2UpLCByYXJlbHkoc2xv
d0Nhc2UpKTsKQEAgLTEzMjA4LDcgKzEzMjEwLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAK
ICAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKGNlbGwpOwotICAg
ICAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9IG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hl
YXBzLlN0cnVjdHVyZV9jbGFzc0luZm8pOworICAgICAgICAgICAgTFZhbHVlIGNsYXNzSW5mbyA9
IG1fb3V0LmJpdEFuZChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVf
Y2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIoU3RydWN0dXJlOjpjbGFzc0luZm9NYXNrKSk7
CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvdGhlckF0U3RhcnQgPSBtX291dC5hbmNob3Io
Y2xhc3NJbmZvKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDcyOWY1ODQ2MzdkMzkzNTU4
NjdjNGU2ZDE0MjNkNjY5YTY2YTIxNjUuLjRjYjZlZGQyZWJkOTJlNzRmZGI1ZTI0NWQwZGQyM2Q4
NzZhMTg3OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aApAQCAtMTUxNyw2ICsxNTE3LDE0IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBN
YWNyb0Fzc2VtYmxlciB7CiAgICAgCiAgICAgdm9pZCBlbWl0TG9hZFN0cnVjdHVyZShWTSYsIFJl
Z2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAK
KyAgICB2b2lkIGVtaXRMb2FkQ2xhc3NJbmZvRnJvbVN0cnVjdHVyZShSZWdpc3RlcklEIHN0cnVj
dHVyZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc3Ry
dWN0dXJlLCBTdHJ1Y3R1cmU6Om9mZnNldE9mQ2xhc3NJbmZvKCkpLCBkc3QpOworI2lmIENQVShB
RERSRVNTNjQpIC8vIE5vdCBVU0UoSlNWQUxVRTY0KS4gU3RydWN0dXJlOjptX2NsYXNzSW5mbydz
IGltcGxlbWVudGF0aW9uIGlzIGNoYW5nZWQgYnkgc2l6ZSBvZiBwb2ludGVyLgorICAgICAgICBh
bmRQdHIoVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KFN0cnVjdHVyZTo6Y2xhc3NJ
bmZvTWFzaykpLCBkc3QpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBlbWl0U3RvcmVTdHJ1
Y3R1cmVXaXRoVHlwZUluZm8oVHJ1c3RlZEltbVB0ciBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZGVz
dCwgUmVnaXN0ZXJJRCkKICAgICB7CiAgICAgICAgIGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBl
SW5mbygqdGhpcywgc3RydWN0dXJlLCBkZXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCmluZGV4IDdmMzU4YzEyMDNiZGVhZTkwZDQ0YTJjN2ZiODg5OTc4MDg5Y2E4
NWYuLmZkZTAwYmNjOGM5MDQ1OWM3NTM0NTA2MmE2MTFkYzFkZTQyOWNmZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtOTc5LDcgKzk3OSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcs
IEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1
dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICBsb2FkOChBZGRyZXNzKHN0cnVj
dHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7
CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6b2Zmc2V0T2ZJbmxp
bmVDYXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBjZDY2N2IyZTU4Nzgy
MGUzNzM1Y2QzODEzOTM2Zjk2YTk4Yzc5NjZhLi5iMTFmNjU1ZmNiNmY2NjA1NTI3OTljMTJhMTBj
Y2JmOTE5MGU4NjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7
CiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlh
YmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcs
IHNsb3dDYXNlcyk7Ci0gICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6
aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGxvYWQ4KEFkZHJlc3Mo
c3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0
Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0
Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgZW1pdFN0b3JlQ2VsbChi
eXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCmluZGV4IDkxODIwNDE1NTRiZGM3NmMxOTFjYjEzODVkMTNhOWM4MWZmZDQ1ZWIuLjA4Njk2
YjFmM2E0OGZjYWI2N2RmZGYxZDA4MTkyNWUzNGQ5MWI3NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcApAQCAtNjE3LDcgKzYxNyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrCiAgICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZt
KSAhPSBuZXdTdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwogCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
ID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+
cHJldmlvdXNJRCh2bSkgPT0gb2xkU3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
IW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwogICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMjI1NGZjYzQyOTYx
N2NlODM5N2QyNGU1NTBlMWFjZWM2N2I2MTQ0My4uYjkxMWVlMjc4MjYyNjZjNzNmNzZlMDk1NTQy
YWRjNjU5MjUwOGM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCkBAIC04NTUsNyArODU1LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3B1dF9ieV9pZCkKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSB2bS5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogYiA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKICAgICAg
ICAgICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0
eSkKLSAgICAgICAgICAgICAgICAgICAgYiA9IGItPnByZXZpb3VzSUQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYiA9IGItPnByZXZpb3VzSUQodm0pOwogCiAgICAgICAgICAgICAgICAgaWYgKFN0
cnVjdHVyZTo6c2hvdWxkQ29udmVydFRvUG9seVByb3RvKGEsIGIpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGEtPnJhcmVEYXRhKCktPnNoYXJlZFBvbHlQcm90b1dhdGNocG9pbnQoKS0+aW52YWxp
ZGF0ZSh2bSwgU3RyaW5nRmlyZURldGFpbCgiRGV0ZWN0ZWQgcG9seSBwcm90byBvcHBvcnR1bml0
eS4iKSk7CkBAIC04NzYsOSArODc2LDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF9ieV9pZCkKICAgICAgICAgaWYgKG5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpICYmIGJhc2VDZWxsID09IHNsb3QuYmFzZSgpKSB7CiAgICAgICAgICAgICBp
ZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewogICAgICAg
ICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2ssIHZtLmhlYXApOwotICAgICAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSAmJiBuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSA9PSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZSA9PSBuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5w
cmV2aW91c0lEKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkgJiYgbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKHZtKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSA9PSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZSA9PSBuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
dm0pKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFN0cnVjdHVyZSA9PSBuZXdTdHJ1Y3R1
cmUtPnByZXZpb3VzSUQodm0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQob2xk
U3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzYXdQb2x5UHJvdG8gPSBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCmlu
ZGV4IDk2YTM2MzVlNjgyNzM5M2VlODM2ZDgwNDc3NzI0YTI1ZDU0NmMyNjEuLjI0OWJhNWFhYzUx
ZTUwOTBjZjIzZjdmOWU4ZTllNDdiYzIxZWY0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcApAQCAtMTUzLDcgKzE1Myw3IEBAIFN0
cnVjdHVyZSogQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENsb25lZEFy
Z3VtZW50c1R5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBpbmRleGluZ1R5cGUpOwogICAg
IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKICAgICAgICAgdm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSksCi0gICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpT
TG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZz
ZXQpIHsKKyAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCA9PSBjbG9uZWRBcmd1bWVudHNMZW5ndGhQ
cm9wZXJ0eU9mZnNldCk7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnNldE1heE9mZnNldCh2bSwg
bmV3TWF4T2Zmc2V0KTsKICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25jdXJyZW50SlNMb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25jdXJyZW50SlNMb2NrLmgKaW5kZXggYWEyNzNiYWRiZWZhNzM3YTBlYWE1MzRm
YmViYTlmNTAxZmRiODYyNy4uMWQ0MDgwNzExNWFlMzY1ZDBmZmM0Mzg1ZGVlNTg1MWE0ZDBhOWQw
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpT
TG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKU0xv
Y2suaApAQCAtMzMsMTggKzMzLDE4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdXNpbmcgQ29uY3Vy
cmVudEpTTG9jayA9IExvY2s7Ci11c2luZyBDb25jdXJyZW50SlNMb2NrZXJJbXBsID0gTG9ja0hv
bGRlcjsKIAotc3RhdGljX2Fzc2VydChzaXplb2YoQ29uY3VycmVudEpTTG9jaykgPT0gMSwgIlJl
Z2FyZGxlc3Mgb2Ygc3RhdHVzIG9mIGNvbmN1cnJlbnQgSlMgZmxhZywgc2l6ZSBvZiBDb251cnJl
bnRKU0xvY2sgaXMgYWx3YXlzIG9uZSBieXRlLiIpOworc3RhdGljX2Fzc2VydChzaXplb2YoQ29u
Y3VycmVudEpTTG9jaykgPT0gMSwgIlJlZ2FyZGxlc3Mgb2Ygc3RhdHVzIG9mIGNvbmN1cnJlbnQg
SlMgZmxhZywgc2l6ZSBvZiBDb25jdXJyZW50SlNMb2NrIGlzIGFsd2F5cyBvbmUgYnl0ZS4iKTsK
IAordGVtcGxhdGU8dHlwZW5hbWUgTG9jaz4KIGNsYXNzIENvbmN1cnJlbnRKU0xvY2tlckJhc2Ug
OiBwdWJsaWMgQWJzdHJhY3RMb2NrZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmN1
cnJlbnRKU0xvY2tlckJhc2UpOwogcHVibGljOgotICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xv
Y2tlckJhc2UoQ29uY3VycmVudEpTTG9jayYgbG9ja2FibGUpCisgICAgZXhwbGljaXQgQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZShMb2NrJiBsb2NrYWJsZSkKICAgICAgICAgOiBtX2xvY2tlcigmbG9j
a2FibGUpCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBDb25jdXJyZW50SlNMb2NrZXJCYXNl
KENvbmN1cnJlbnRKU0xvY2sqIGxvY2thYmxlKQorICAgIGV4cGxpY2l0IENvbmN1cnJlbnRKU0xv
Y2tlckJhc2UoTG9jayogbG9ja2FibGUpCiAgICAgICAgIDogbV9sb2NrZXIobG9ja2FibGUpCiAg
ICAgewogICAgIH0KQEAgLTY0LDYzICs2NCw2NSBAQCBjbGFzcyBDb25jdXJyZW50SlNMb2NrZXJC
YXNlIDogcHVibGljIEFic3RyYWN0TG9ja2VyIHsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29u
Y3VycmVudEpTTG9ja2VySW1wbCBtX2xvY2tlcjsKKyAgICBMb2NrZXI8TG9jaz4gbV9sb2NrZXI7
CiB9OwogCi1jbGFzcyBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgOiBwdWJsaWMgQ29uY3VycmVu
dEpTTG9ja2VyQmFzZSB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrPgorY2xhc3MgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VySW1wbCA6IHB1YmxpYyBDb25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+
IHsKIHB1YmxpYzoKLSAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIoQ29uY3VycmVudEpTTG9j
ayYgbG9ja2FibGUsIEhlYXAmIGhlYXApCi0gICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFz
ZShsb2NrYWJsZSkKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXJJbXBsKExvY2smIGxvY2th
YmxlLCBIZWFwJiBoZWFwKQorICAgICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4o
bG9ja2FibGUpCiAgICAgICAgICwgbV9kZWZlckdDKGhlYXApCiAgICAgewogICAgIH0KIAotICAg
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlcihDb25jdXJyZW50SlNMb2NrKiBsb2NrYWJsZSwgSGVh
cCYgaGVhcCkKLSAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlKGxvY2thYmxlKQorICAg
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwoTG9jayogbG9ja2FibGUsIEhlYXAmIGhlYXAp
CisgICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPihsb2NrYWJsZSkKICAgICAg
ICAgLCBtX2RlZmVyR0MoaGVhcCkKICAgICB7CiAgICAgfQogCi0gICAgfkdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlcigpCisgICAgfkdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlckltcGwoKQogICAgIHsK
ICAgICAgICAgLy8gV2UgaGF2ZSB0byB1bmxvY2sgZWFybHkgZHVlIHRvIHRoZSBkZXN0cnVjdGlv
biBvcmRlciBvZiBiYXNlCiAgICAgICAgIC8vIHZzLiBkZXJpdmVkIGNsYXNzZXMuIElmIHdlIGRp
ZG4ndCwgdGhlbiB3ZSB3b3VsZCBkZXN0cm95IHRoZSAKICAgICAgICAgLy8gRGVmZXJHQyBvYmpl
Y3QgYmVmb3JlIHVubG9ja2luZyB0aGUgbG9jayB3aGljaCBjb3VsZCBjYXVzZSBhIEdDCiAgICAg
ICAgIC8vIGFuZCByZXN1bHRpbmcgZGVhZGxvY2suCi0gICAgICAgIHVubG9ja0Vhcmx5KCk7Cisg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz46OnVubG9ja0Vhcmx5KCk7CiAgICAg
fQogCiBwcml2YXRlOgogICAgIERlZmVyR0MgbV9kZWZlckdDOwogfTsKIAotY2xhc3MgQ29uY3Vy
cmVudEpTTG9ja2VyIDogcHVibGljIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgewordGVtcGxhdGU8
dHlwZW5hbWUgTG9jaz4KK2NsYXNzIENvbmN1cnJlbnRKU0xvY2tlckltcGwgOiBwdWJsaWMgQ29u
Y3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPiB7CiBwdWJsaWM6Ci0gICAgQ29uY3VycmVudEpTTG9j
a2VyKENvbmN1cnJlbnRKU0xvY2smIGxvY2thYmxlKQotICAgICAgICA6IENvbmN1cnJlbnRKU0xv
Y2tlckJhc2UobG9ja2FibGUpCisgICAgQ29uY3VycmVudEpTTG9ja2VySW1wbChMb2NrJiBsb2Nr
YWJsZSkKKyAgICAgICAgOiBDb25jdXJyZW50SlNMb2NrZXJCYXNlPExvY2s+KGxvY2thYmxlKQog
I2lmICFkZWZpbmVkKE5ERUJVRykKICAgICAgICAgLCBtX2Rpc2FsbG93R0Moc3RkOjppbl9wbGFj
ZSkKICNlbmRpZgogICAgIHsKICAgICB9CiAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIoQ29uY3Vy
cmVudEpTTG9jayogbG9ja2FibGUpCi0gICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShs
b2NrYWJsZSkKKyAgICBDb25jdXJyZW50SlNMb2NrZXJJbXBsKExvY2sqIGxvY2thYmxlKQorICAg
ICAgICA6IENvbmN1cnJlbnRKU0xvY2tlckJhc2U8TG9jaz4obG9ja2FibGUpCiAjaWYgIWRlZmlu
ZWQoTkRFQlVHKQogICAgICAgICAsIG1fZGlzYWxsb3dHQyhzdGQ6OmluX3BsYWNlKQogI2VuZGlm
CiAgICAgewogICAgIH0KIAotICAgIENvbmN1cnJlbnRKU0xvY2tlcihOb0xvY2tpbmdOZWNlc3Nh
cnlUYWcpCi0gICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZShOb0xvY2tpbmdOZWNlc3Nh
cnkpCisgICAgQ29uY3VycmVudEpTTG9ja2VySW1wbChOb0xvY2tpbmdOZWNlc3NhcnlUYWcpCisg
ICAgICAgIDogQ29uY3VycmVudEpTTG9ja2VyQmFzZTxMb2NrPihOb0xvY2tpbmdOZWNlc3Nhcnkp
CiAjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgICAgICAsIG1fZGlzYWxsb3dHQyhXVEY6Om51bGxv
cHQpCiAjZW5kaWYKICAgICB7CiAgICAgfQogICAgIAotICAgIENvbmN1cnJlbnRKU0xvY2tlcihp
bnQpID0gZGVsZXRlOworICAgIENvbmN1cnJlbnRKU0xvY2tlckltcGwoaW50KSA9IGRlbGV0ZTsK
IAogI2lmICFkZWZpbmVkKE5ERUJVRykKIHByaXZhdGU6CkBAIC0xMjgsNCArMTMwLDcgQEAgY2xh
c3MgQ29uY3VycmVudEpTTG9ja2VyIDogcHVibGljIENvbmN1cnJlbnRKU0xvY2tlckJhc2Ugewog
I2VuZGlmCiB9OwogCit1c2luZyBDb25jdXJyZW50SlNMb2NrZXIgPSBDb25jdXJyZW50SlNMb2Nr
ZXJJbXBsPENvbmN1cnJlbnRKU0xvY2s+OwordXNpbmcgR0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
ID0gR0NTYWZlQ29uY3VycmVudEpTTG9ja2VySW1wbDxDb25jdXJyZW50SlNMb2NrPjsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCmluZGV4
IDY2NWQwODg5Y2Y0NDYxYzNhYjBhMmFmNGIwN2M2YTU4YzkwNDIxYzQuLmQ1NjU2ZjhiZmRmZjYz
Mjk5MmFjMWRhNDUxZTM1YzFhNTQ4ZDQ2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJDYWxsRGF0YS5oIgogI2lu
Y2x1ZGUgIkNlbGxTdGF0ZS5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKICNpbmNs
dWRlICJDb25zdHJ1Y3REYXRhLmgiCiAjaW5jbHVkZSAiRW51bWVyYXRpb25Nb2RlLmgiCiAjaW5j
bHVkZSAiSGVhcC5oIgpAQCAtMjg4LDYgKzI4OSw5IEBAIGNsYXNzIEpTQ2VsbExvY2sgOiBwdWJs
aWMgSlNDZWxsIHsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKIH07
CiAKK3VzaW5nIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgPSBDb25jdXJyZW50SlNMb2NrZXJJbXBs
PEpTQ2VsbExvY2s+OwordXNpbmcgR0NTYWZlQ29uY3VycmVudEpTQ2VsbExvY2tlciA9IEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlckltcGw8SlNDZWxsTG9jaz47CisKIC8vIEZJWE1FOiBSZWZlciB0
byBTdWJzcGFjZSBieSByZWZlcmVuY2UuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2OTg4CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCmluZGV4IGFjZDI5ZGVkODEzNTFmYjI4NGIy
MTU5YWQ0N2E2MzFjMzQ5NGYxZGYuLjNhNTEyMWQ2OWRmYjRmYjJmYjlmODg1Y2E3ZmYzZmU1NWMw
NGRkODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKQEAg
LTIwMDUsNyArMjAwNSw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCog
Y2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVyCiAKICAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldDsKICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIG9mZnNldCA9IHN0cnVj
dHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBb
XSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQsIFByb3Bl
cnR5T2Zmc2V0KSB7IH0pOworICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdKGNvbnN0IEdDU2Fm
ZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQp
IHsgfSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJl
OjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBv
ZmZzZXQsICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKICAgICAgICAgICAgIGlmICh0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseSAmJiAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFz
dHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXNPYmplY3QpKSB7CkBAIC0zNzY2LDcgKzM3
NjYsNyBAQCB2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0VG9EaWN0aW9uYXJ5KFZNJiB2bSkKICAgICAg
ICAgdm0sIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlKHZtKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpKTsKIH0KIAotdm9pZCBKU09iamVj
dDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpT
TG9ja2VyJiwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNh
cGFjaXR5QWZ0ZXIpCit2b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmlu
Zyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyJiwgVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCiB7CiAgICAgLy8gVGhp
cyBjb3VsZCBpbnRlcmxlYXZlIHZpc2l0Q2hpbGRyZW4gYmVjYXVzZSBzb21lIG9sZCBzdHJ1Y3R1
cmUgY291bGQgaGF2ZSBiZWVuIGEgbm9uCiAgICAgLy8gZGljdGlvbmFyeSBzdHJ1Y3R1cmUuIFdl
IGhhdmUgdG8gYmUgY3JhenkgY2FyZWZ1bC4gQnV0LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBo
b2xkaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAppbmRleCBlYzYz
MDBlYTliOTcyY2U5YmEwZmFkODE4MjU3YWZiMjBkODJhMmVkLi42NTExNjBiZTBiMDE3ODcwY2U5
MDk2YmY5MmE1NWRjZjBlNmNkYmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgKQEAgLTgxNSw3ICs4MTUsNyBAQCBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0Nl
bGwgewogICAgIHsKICAgICAgICAgc3RydWN0dXJlKHZtKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1
Y3R1cmUodm0sIHRoaXMpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0
dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKKyAgICB2b2lkIHNoaWZ0
QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2Nr
ZXImLCBWTSYsIFN0cnVjdHVyZSosIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKIAog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdAogICAgIHsKQEAgLTEzMjks
NyArMTMyOSw3IEBAIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXRQcm90b3R5cGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogLy8gZmxhdHRlbiBhbiBvYmplY3QuCiBp
bmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0RGlyZWN0Q29uY3VycmVudGx5KFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmxvY2soKSk7CisgICAgQ29uY3VycmVudEpTQ2Vs
bExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5jZWxsTG9jaygpKTsKICAgICBpZiAoIXN0cnVjdHVy
ZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVy
biBnZXREaXJlY3Qob2Zmc2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3RJbmxpbmVzLmgKaW5kZXggYTY3MDAzNDdmNjk3NmU2MWIwNWRiMThmMmIwOTZhYWE3
OWUyZWJiMy4uOTVhNjcxMGMyZTM1Njg0MzZkNWNjYTI4Yzg2YjJkYzk0ZDhhODgwMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKQEAgLTIx
Niw3ICsyMTYsNyBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IEpTT2JqZWN0OjpwcmVw
YXJlVG9QdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYgdgogICAgIFByb3BlcnR5T2Zmc2V0
IHJlc3VsdDsKICAgICBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCiAg
ICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCi0gICAgICAgIFsmXSAoY29uc3Qg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0
eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKKyAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJy
ZW50SlNDZWxsTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBu
ZXdNYXhPZmZzZXQpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG5ld091dE9mTGluZUNhcGFjaXR5
ID0gU3RydWN0dXJlOjpvdXRPZkxpbmVDYXBhY2l0eShuZXdNYXhPZmZzZXQpOwogICAgICAgICAg
ICAgaWYgKG5ld091dE9mTGluZUNhcGFjaXR5ICE9IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CiAg
ICAgICAgICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxp
bmVTdG9yYWdlKHZtLCBvbGRPdXRPZkxpbmVDYXBhY2l0eSwgbmV3T3V0T2ZMaW5lQ2FwYWNpdHkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5jcHAKaW5kZXggYjAyYjM0N2Q2
YTUwMDQ1NTNiNTkyZWM2NGI0YzE0NGUzMDhkZDBjZi4uYTEzMzdjNmE0ZWYxMzFjYjgxN2M3Y2Zk
MmNjZmI5Y2IwNzg1NTRmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUu
Y3BwCkBAIC00NCw2ICs0NCw3IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBKU0M6OkpTVHlwZSB0eXBlKQogICAgIENBU0UoU3RyaW5nVHlwZSkKICAgICBDQVNFKFN5bWJv
bFR5cGUpCiAgICAgQ0FTRShCaWdJbnRUeXBlKQorICAgIENBU0UoU3RydWN0dXJlUmFyZURhdGFU
eXBlKQogICAgIENBU0UoQ3VzdG9tR2V0dGVyU2V0dGVyVHlwZSkKICAgICBDQVNFKEFQSVZhbHVl
V3JhcHBlclR5cGUpCiAgICAgQ0FTRShOYXRpdmVFeGVjdXRhYmxlVHlwZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKaW5kZXggMTQ3OTkyNWQ2ZjVmYWU2M2U1ZDc1N2VhMjMw
ZTJjZGI0ZWQ0ODI2Yy4uY2QyOTUzYzEwZjMzNmVlMDI3NjgyYTEwYzA2MTc2NzBhZDJhM2M0OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKQEAgLTI5LDYgKzI5LDcgQEAg
ZW51bSBKU1R5cGUgOiB1aW50OF90IHsKICAgICBTeW1ib2xUeXBlLAogICAgIEJpZ0ludFR5cGUs
CiAKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YVR5cGUsCiAgICAgR2V0dGVyU2V0dGVyVHlwZSwKICAg
ICBDdXN0b21HZXR0ZXJTZXR0ZXJUeXBlLAogICAgIEFQSVZhbHVlV3JhcHBlclR5cGUsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAppbmRleCBlZGE0NDZiZmJl
MjY3YWIwMWI4NTJlMTVmZGU5YzljMzBlNmY1OGU2Li5kZTM0YTI3N2JlYzFmYTZjNmY0N2IzNTlk
NWVmODgwOWViMTZiNTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgYm9vbCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6
OmNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIGF0dHJpYnUKIHsKICAg
ICBpZiAoaXNVc2luZ1NpbmdsZVNsb3QoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRp
b24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cmFuc2l0aW9uICYmIHRy
YW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+
dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlv
bi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbigpID09ICFpc0FkZGl0aW9uOworICAgICAg
ICByZXR1cm4gdHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlOYW1l
KCkgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9
PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24o
KSA9PSAhaXNBZGRpdGlvbjsKICAgICB9CiAgICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkocmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7
CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQKIHsKICAgICBp
ZiAoaXNVc2luZ1NpbmdsZVNsb3QoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24g
PSBzaW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAmJiB0cmFu
c2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRy
YW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24t
PmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0cmFuc2l0
aW9uIDogMDsKKyAgICAgICAgcmV0dXJuICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPnRyYW5z
aXRpb25Qcm9wZXJ0eU5hbWUoKSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlvbi0+aXNQcm9wZXJ0eURl
bGV0aW9uVHJhbnNpdGlvbigpID09ICFpc0FkZGl0aW9uKSA/IHRyYW5zaXRpb24gOiBudWxscHRy
OwogICAgIH0KICAgICByZXR1cm4gbWFwKCktPmdldChTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6
Okhhc2g6OktleShyZXAsIGF0dHJpYnV0ZXMsIGlzQWRkaXRpb24pKTsKIH0KQEAgLTEyMyw3ICsx
MjMsNyBAQCB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgfQogCiAgICAgLy8gQWRkIHRoZSBzdHJ1Y3R1cmUgdG8gdGhl
IG1hcC4KLSAgICBtYXAoKS0+c2V0KFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6SGFzaDo6S2V5
KHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSwgIXN0cnVjdHVyZS0+aXNQcm9wZXJ0eURlbGV0
aW9uVHJhbnNpdGlvbigpKSwgc3RydWN0dXJlKTsKKyAgICBtYXAoKS0+c2V0KFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZTo6SGFzaDo6S2V5KHN0cnVjdHVyZS0+dHJhbnNpdGlvblByb3BlcnR5TmFt
ZSgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSwgIXN0cnVjdHVy
ZS0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbigpKSwgc3RydWN0dXJlKTsKIH0KIAogdm9p
ZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFN0
cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+bV90
cmFuc2l0aW9uVGFibGUuc2l6ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAg
ICAgICAgKytudW1iZXJMZWFmOwotICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5wcmV2
aW91c0lEKCkpCisgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoc3Ry
dWN0dXJlLT52bSgpKSkKICAgICAgICAgICAgICAgICAgICAgKytudW1iZXJTaW5nbGV0b25zOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBTdHJ1Y3R1
cmU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVydHlU
YWJsZU9yTnVsbCgpKSB7CisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVj
dHVyZS0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpKSB7CiAgICAgICAgICAgICArK251bWJl
cldpdGhQcm9wZXJ0eU1hcHM7CiAgICAgICAgICAgICB0b3RhbFByb3BlcnR5TWFwc1NpemUgKz0g
dGFibGUtPnNpemVJbk1lbW9yeSgpOwogICAgICAgICB9CkBAIC0xNzQsMTUgKzE3NCwxMiBAQCB2
b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29u
c3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCiAgICAgOiBKU0Nl
bGwodm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fYmxvYih2bS5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCBpbmRleGluZ1R5cGUsIHR5cGVJ
bmZvKQotICAgICwgbV9vdXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8ub3V0T2ZMaW5lVHlwZUZs
YWdzKCkpCi0gICAgLCBtX2lubGluZUNhcGFjaXR5KGlubGluZUNhcGFjaXR5KQotICAgICwgbV9i
aXRGaWVsZCgwKQogICAgICwgbV9nbG9iYWxPYmplY3Qodm0sIHRoaXMsIGdsb2JhbE9iamVjdCwg
V3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5
cGUodm0sIHRoaXMsIHByb3RvdHlwZSkKLSAgICAsIG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKICAg
ICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQotICAgICwgbV9wcm9wZXJ0
eUhhc2goMCkKIHsKKyAgICBzZXRJbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBhY2l0eSk7CisgICAg
c2V0Q2xhc3NJbmZvKGNsYXNzSW5mbyk7CiAgICAgc2V0RGljdGlvbmFyeUtpbmQoTm9uZURpY3Rp
b25hcnlLaW5kKTsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUoZmFsc2UpOwogICAgIHNl
dEhhc0dldHRlclNldHRlclByb3BlcnRpZXMoY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJl
YWRvbmx5UHJvcGVydGllcygpKTsKQEAgLTIwMCwzMSArMTk3LDMwIEBAIFN0cnVjdHVyZTo6U3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUsIGNvCiAgICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbihmYWxzZSk7CiAg
ICAgc2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgICAgc2V0TWF4T2Zm
c2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKLSAKKyAgICBzZXRPdXRPZkxpbmVUeXBlRmxhZ3ModHlw
ZUluZm8ub3V0T2ZMaW5lVHlwZUZsYWdzKCkpOworCiAgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5
IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4oaW5saW5lQ2FwYWNpdHkpIDwgZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpOwogICAgIEFTU0VSVCghaGFzUmFyZURhdGEoKSk7Ci0gICAgQVNTRVJUKGhhc1JlYWRP
bmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSB8fCAhbV9jbGFzc0lu
Zm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VSVCho
YXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0
ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NFUlQoIXRoaXMtPnR5cGVJbmZvKCku
b3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBtX2NsYXNzSW5mby0+bWV0aG9kVGFibGUuZ2V0Q2Fs
bERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEpOworICAgIEFTU0VSVChoYXNSZWFkT25seU9y
R2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIXRoaXMtPmNsYXNzSW5m
bygpLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQo
aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICF0aGlzLT5jbGFzc0luZm8oKS0+aGFzU3Rh
dGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKCF0aGlzLT50eXBl
SW5mbygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgdGhpcy0+Y2xhc3NJbmZvKCktPm1ldGhv
ZFRhYmxlLmdldENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKIH0KIAogY29uc3Qg
Q2xhc3NJbmZvIFN0cnVjdHVyZTo6c19pbmZvID0geyAiU3RydWN0dXJlIiwgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShTdHJ1Y3R1cmUpIH07CiAKIFN0cnVj
dHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAgICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkK
LSAgICAsIG1faW5saW5lQ2FwYWNpdHkoMCkKLSAgICAsIG1fYml0RmllbGQoMCkKICAgICAsIG1f
cHJvdG90eXBlKHZtLCB0aGlzLCBqc051bGwoKSkKLSAgICAsIG1fY2xhc3NJbmZvKGluZm8oKSkK
ICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQotICAgICwgbV9wcm9w
ZXJ0eUhhc2goMCkKIHsKKyAgICBzZXRJbmxpbmVDYXBhY2l0eSgwKTsKKyAgICBzZXRDbGFzc0lu
Zm8oaW5mbygpKTsKICAgICBzZXREaWN0aW9uYXJ5S2luZChOb25lRGljdGlvbmFyeUtpbmQpOwog
ICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZShmYWxzZSk7Ci0gICAgc2V0SGFzR2V0dGVyU2V0
dGVyUHJvcGVydGllcyhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3Bl
cnRpZXMoKSk7CisgICAgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhjbGFzc0luZm8oKS0+
aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CiAgICAgc2V0SGFzQ3VzdG9t
R2V0dGVyU2V0dGVyUHJvcGVydGllcyhmYWxzZSk7Ci0gICAgc2V0SGFzUmVhZE9ubHlPckdldHRl
clNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0
dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNl
dHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhjbGFzc0luZm8oKS0+aGFzU3RhdGljU2V0dGVy
T3JSZWFkb25seVByb3BlcnRpZXMoKSk7CiAgICAgc2V0SGFzVW5kZXJzY29yZVByb3RvUHJvcGVy
dHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKGZhbHNlKTsKICAgICBzZXRJc1F1aWNrUHJvcGVydHlB
Y2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24odHJ1ZSk7CiAgICAgc2V0VHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcygwKTsKQEAgLTI0MCwyMyArMjM2LDI2IEBAIFN0cnVjdHVyZTo6U3RydWN0
dXJlKFZNJiB2bSkKICAKICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IFR5cGVJbmZvKENlbGxUeXBl
LCBTdHJ1Y3R1cmVGbGFncyk7CiAgICAgbV9ibG9iID0gU3RydWN0dXJlSURCbG9iKHZtLmhlYXAu
c3RydWN0dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQodGhpcyksIDAsIHR5cGVJbmZvKTsKLSAgICBt
X291dE9mTGluZVR5cGVGbGFncyA9IHR5cGVJbmZvLm91dE9mTGluZVR5cGVGbGFncygpOworICAg
IHNldE91dE9mTGluZVR5cGVGbGFncyh0eXBlSW5mby5vdXRPZkxpbmVUeXBlRmxhZ3MoKSk7CiAK
LSAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQ
cm90bygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRp
ZXMoKSk7Ci0gICAgQVNTRVJUKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB8fCAhbV9jbGFz
c0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwotICAgIEFTU0VS
VCghdGhpcy0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8IG1fY2xhc3NJbmZv
LT5tZXRob2RUYWJsZS5nZXRDYWxsRGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CisgICAg
QVNTRVJUKGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8o
KSB8fCAhY2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkp
OworICAgIEFTU0VSVChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgfHwgIWNsYXNzSW5mbygp
LT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKKyAgICBBU1NFUlQoIXRo
aXMtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0Q2FsbERhdGEoKSB8fCBjbGFzc0luZm8oKS0+bWV0
aG9kVGFibGUuZ2V0Q2FsbERhdGEgIT0gJkpTQ2VsbDo6Z2V0Q2FsbERhdGEpOwogfQogCiBTdHJ1
Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMsIERlZmVycmVkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKICAgICA6IEpTQ2VsbCh2
bSwgdm0uc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9pbmxpbmVDYXBhY2l0eShw
cmV2aW91cy0+bV9pbmxpbmVDYXBhY2l0eSkKLSAgICAsIG1fYml0RmllbGQoMCkKLSAgICAsIG1f
cHJvdG90eXBlKHZtLCB0aGlzLCBwcmV2aW91cy0+bV9wcm90b3R5cGUuZ2V0KCkpCi0gICAgLCBt
X2NsYXNzSW5mbyhwcmV2aW91cy0+bV9jbGFzc0luZm8pCi0gICAgLCBtX3RyYW5zaXRpb25XYXRj
aHBvaW50U2V0KElzV2F0Y2hlZCkKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICwgbV9wcm9wZXJ0
eUhhc2hBbmRTZWVuUHJvcGVydGllcyhwcmV2aW91cy0+bV9wcm9wZXJ0eUhhc2hBbmRTZWVuUHJv
cGVydGllcykKKyNlbHNlCiAgICAgLCBtX3Byb3BlcnR5SGFzaChwcmV2aW91cy0+bV9wcm9wZXJ0
eUhhc2gpCiAgICAgLCBtX3NlZW5Qcm9wZXJ0aWVzKHByZXZpb3VzLT5tX3NlZW5Qcm9wZXJ0aWVz
KQorI2VuZGlmCisgICAgLCBtX3Byb3RvdHlwZSh2bSwgdGhpcywgcHJldmlvdXMtPm1fcHJvdG90
eXBlLmdldCgpKQorICAgICwgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldChJc1dhdGNoZWQpCiB7
CisgICAgc2V0SW5saW5lQ2FwYWNpdHkocHJldmlvdXMtPmlubGluZUNhcGFjaXR5KCkpOworICAg
IHNldENsYXNzSW5mbyhwcmV2aW91cy0+Y2xhc3NJbmZvKCkpOwogICAgIHNldERpY3Rpb25hcnlL
aW5kKHByZXZpb3VzLT5kaWN0aW9uYXJ5S2luZCgpKTsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5
VGFibGUoZmFsc2UpOwogICAgIHNldEhhc0JlZW5GbGF0dGVuZWRCZWZvcmUocHJldmlvdXMtPmhh
c0JlZW5GbGF0dGVuZWRCZWZvcmUoKSk7CkBAIC0yNzcsNyArMjc2LDcgQEAgU3RydWN0dXJlOjpT
dHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRy
YW5zaXRpb25XYXQKICAKICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHByZXZpb3VzLT50eXBlSW5m
bygpOwogICAgIG1fYmxvYiA9IFN0cnVjdHVyZUlEQmxvYih2bS5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5hbGxvY2F0ZUlEKHRoaXMpLCBwcmV2aW91cy0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlz
dG9yeSgpLCB0eXBlSW5mbyk7Ci0gICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5v
dXRPZkxpbmVUeXBlRmxhZ3MoKTsKKyAgICBzZXRPdXRPZkxpbmVUeXBlRmxhZ3ModHlwZUluZm8u
b3V0T2ZMaW5lVHlwZUZsYWdzKCkpOwogCiAgICAgQVNTRVJUKCFwcmV2aW91cy0+dHlwZUluZm8o
KS5zdHJ1Y3R1cmVJc0ltbW9ydGFsKCkpOwogICAgIHNldFByZXZpb3VzSUQodm0sIHByZXZpb3Vz
KTsKQEAgLTI4OSw5ICsyODgsOSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVj
dHVyZSogcHJldmlvdXMsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdAogCiAgICAgaWYg
KHByZXZpb3VzLT5tX2dsb2JhbE9iamVjdCkKICAgICAgICAgbV9nbG9iYWxPYmplY3Quc2V0KHZt
LCB0aGlzLCBwcmV2aW91cy0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpOwotICAgIEFTU0VSVChoYXNS
ZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIW1fY2xh
c3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKLSAgICBBU1NF
UlQoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGlj
U2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgQVNTRVJUKCF0aGlzLT50eXBlSW5m
bygpLm92ZXJyaWRlc0dldENhbGxEYXRhKCkgfHwgbV9jbGFzc0luZm8tPm1ldGhvZFRhYmxlLmdl
dENhbGxEYXRhICE9ICZKU0NlbGw6OmdldENhbGxEYXRhKTsKKyAgICBBU1NFUlQoaGFzUmVhZE9u
bHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpIHx8ICFjbGFzc0luZm8o
KS0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7CisgICAgQVNTRVJUKGhh
c0dldHRlclNldHRlclByb3BlcnRpZXMoKSB8fCAhY2xhc3NJbmZvKCktPmhhc1N0YXRpY1NldHRl
ck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VSVCghdGhpcy0+dHlwZUluZm8oKS5v
dmVycmlkZXNHZXRDYWxsRGF0YSgpIHx8IGNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRDYWxs
RGF0YSAhPSAmSlNDZWxsOjpnZXRDYWxsRGF0YSk7CiB9CiAKIFN0cnVjdHVyZTo6flN0cnVjdHVy
ZSgpCkBAIC0zMTMsNyArMzEyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShQb2x5
UHJvdG9UYWcsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICB1bnNp
Z25lZCBvbGRPdXRPZkxpbmVDYXBhY2l0eSA9IHJlc3VsdC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsK
ICAgICByZXN1bHQtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCiAgICAgICAgIHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wb2x5UHJvdG9OYW1lKCksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLAotICAgICAgICBbJl0g
KGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
UHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIFsmXSAoY29uc3QgR0NTYWZl
Q29uY3VycmVudEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgUHJvcGVydHlP
ZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTdHJ1Y3R1
cmU6Om91dE9mTGluZUNhcGFjaXR5KG5ld01heE9mZnNldCkgPT0gb2xkT3V0T2ZMaW5lQ2FwYWNp
dHkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09IGtub3duUG9seVByb3Rv
T2Zmc2V0KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW5saW5lT2Zmc2V0KGtub3du
UG9seVByb3RvT2Zmc2V0KSk7CkBAIC0zMjksMTUgKzMyOCwxNSBAQCBib29sIFN0cnVjdHVyZTo6
aXNWYWxpZFByb3RvdHlwZShKU1ZhbHVlIHByb3RvdHlwZSkKICAgICByZXR1cm4gcHJvdG90eXBl
LmlzTnVsbCgpIHx8IChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBwcm90b3R5cGUuZ2V0T2JqZWN0
KCktPm1heUJlUHJvdG90eXBlKCkpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVy
ZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oVmVjdG9yPFN0cnVjdHVyZSosIDg+JiBzdHJ1Y3R1
cmVzLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUsIFByb3BlcnR5VGFibGUqJiB0YWJsZSkKK3ZvaWQg
U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWTSYgdm0s
IFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiYgc3RydWN0dXJlcywgU3RydWN0dXJlKiYgc3RydWN0dXJl
LCBQcm9wZXJ0eVRhYmxlKiYgdGFibGUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZXMuaXNFbXB0
eSgpKTsKLSAgICB0YWJsZSA9IDA7CisgICAgdGFibGUgPSBudWxscHRyOwogCi0gICAgZm9yIChz
dHJ1Y3R1cmUgPSB0aGlzOyBzdHJ1Y3R1cmU7IHN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlv
dXNJRCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLmxvY2soKTsKKyAgICBmb3IgKHN0
cnVjdHVyZSA9IHRoaXM7IHN0cnVjdHVyZTsgc3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91
c0lEKHZtKSkgeworICAgICAgICBzdHJ1Y3R1cmUtPmNlbGxMb2NrKCkubG9jaygpOwogICAgICAg
ICAKLSAgICAgICAgdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVPck51bGwoKTsKKyAg
ICAgICAgdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKTsKICAg
ICAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgICAgICAvLyBMZWF2ZSB0aGUgc3RydWN0dXJlIGxv
Y2tlZCwgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBkbyB0aGluZ3MgdG8gaXQgYXRvbWljYWxseQog
ICAgICAgICAgICAgLy8gYmVmb3JlIGl0IGxvc2VzIGl0cyBwcm9wZXJ0eSB0YWJsZS4KQEAgLTM0
NSw3ICszNDQsNyBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRl
cmlhbGl6YXRpb24oVmVjdG9yPFN0cnVjdHVyZSosIDg+JiBzdAogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBzdHJ1Y3R1cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOwotICAgICAgICBzdHJ1Y3R1
cmUtPm1fbG9jay51bmxvY2soKTsKKyAgICAgICAgc3RydWN0dXJlLT5jZWxsTG9jaygpLnVubG9j
aygpOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoIXN0cnVjdHVyZSk7CkBAIC0zNjMsMzQgKzM2
MiwzNSBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJs
ZShWTSYgdm0sIGJvb2wgc2V0UHJvcGVydHlUYWJsZQogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
OwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIAotICAgIGZpbmRTdHJ1Y3R1cmVzQW5k
TWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOworICAg
IGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHZtLCBzdHJ1Y3R1cmVzLCBz
dHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG51bWJlck9m
U2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOworICAgIHVu
c2lnbmVkIGNhcGFjaXR5ID0gbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwg
aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgIHRhYmxlID0gdGFi
bGUtPmNvcHkodm0sIGNhcGFjaXR5KTsKLSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2Nr
KCk7CisgICAgICAgIHN0cnVjdHVyZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICB9IGVsc2UK
ICAgICAgICAgdGFibGUgPSBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KTsKICAg
ICAKICAgICAvLyBNdXN0IGhvbGQgdGhlIGxvY2sgb24gdGhpcyBzdHJ1Y3R1cmUsIHNpbmNlIHdl
IHdpbGwgYmUgbW9kaWZ5aW5nIHRoaXMgc3RydWN0dXJlJ3MKICAgICAvLyBwcm9wZXJ0eSBtYXAu
IFdlIGRvbid0IHdhbnQgZ2V0Q29uY3VycmVudGx5KCkgdG8gc2VlIHRoZSBwcm9wZXJ0eSBtYXAg
aW4gYSBoYWxmLWJha2VkCiAgICAgLy8gc3RhdGUuCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxM
b2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhlYXApOwogICAgIGlmIChzZXRQcm9wZXJ0eVRh
YmxlKQogICAgICAgICB0aGlzLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAKICAgICBm
b3IgKHNpemVfdCBpID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKICAgICAgICAgc3RydWN0
dXJlID0gc3RydWN0dXJlc1tpXTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blByb3BlcnR5TmFtZSkKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHRyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUgPSBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUoKTsKKyAgICAgICAg
aWYgKCF0cmFuc2l0aW9uUHJvcGVydHlOYW1lKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkgewotICAg
ICAgICAgICAgYXV0byBpdGVtID0gdGFibGUtPmZpbmQoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Q
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICAgICAgYXV0byBpdGVtID0gdGFibGUtPmZpbmQo
dHJhbnNpdGlvblByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBBU1NFUlQoaXRlbS5maXJzdCk7
CiAgICAgICAgICAgICB0YWJsZS0+cmVtb3ZlKGl0ZW0pOwogICAgICAgICAgICAgdGFibGUtPmFk
ZERlbGV0ZWRPZmZzZXQoc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeShz
dHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlLT50cmFu
c2l0aW9uT2Zmc2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygp
KTsKKyAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeSh0cmFuc2l0aW9uUHJvcGVydHlOYW1l
LCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJv
cGVydHlBdHRyaWJ1dGVzKCkpOwogICAgICAgICBhdXRvIG5leHRPZmZzZXQgPSB0YWJsZS0+bmV4
dE9mZnNldChzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBBU1NFUlRfVU5V
U0VEKG5leHRPZmZzZXQsIG5leHRPZmZzZXQgPT0gc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0
KCkpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IHRhYmxlLT5hZGQoZW50cnkpOwpAQCAtNDI1LDcg
KzQyNSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4
aXN0aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqIHN0CiAgICAgICAgIHJldHVybiBleGlzdGlu
Z1RyYW5zaXRpb247CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQpAQCAtNDM2
LDcgKzQzNiw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0CiAKIFN0cnVjdHVyZSogU3RydWN0
dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewotICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2spOworICAgIENvbmN1cnJlbnRKU0NlbGxMb2Nr
ZXIgbG9ja2VyKHN0cnVjdHVyZS0+Y2VsbExvY2soKSk7CiAgICAgcmV0dXJuIGFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgdWlkLCBhdHRyaWJ1
dGVzLCBvZmZzZXQpOwogfQogCkBAIC00OTcsOCArNDk3LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm8KICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZt
LCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKLQotICAgIHRyYW5zaXRpb24tPm1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fY2FjaGVk
UHJvdG90eXBlQ2hhaW4uZ2V0KCkpOworICAgIHRyYW5zaXRpb24tPnNldENhY2hlZFByb3RvdHlw
ZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPmNhY2hlZFByb3RvdHlwZUNoYWluKCkpOwogICAgIAogICAg
IC8vIFdoaWxlIHdlIGFyZSBhZGRpbmcgdGhlIHByb3BlcnR5LCByZW1hdGVyaWFsaXppbmcgdGhl
IHByb3BlcnR5IHRhYmxlIGlzIHN1cGVyIHdlaXJkOiB3ZSBhbHJlYWR5CiAgICAgLy8gaGF2ZSBh
IG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSBhbmQgdHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRl
cyBidXQgdGhlIG1fdHJhbnNpdGlvbk9mZnNldCBpcyBzdGlsbCB3cm9uZy4gSWYgdGhlCkBAIC01
MTAsMTIgKzUwOSwxMiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFu
c2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBybwogICAgIC8vIGNhc2UgYWxs
IGlzIHdlbGwuICBJZiBpdCB3YXNuJ3QgZm9yIHRoZSBsb2NrLCB0aGUgR0Mgd291bGQgaGF2ZSBU
T0NUT1U6IGlmIGNvdWxkIHJlYWQKICAgICAvLyBwcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJh
bnNpdGlvbmluZyBiZWZvcmUgd2Ugc2V0IGl0IHRvIHRydWUsIGFuZCB0aGVuIGJsb3cgdGhlIHRh
YmxlIGF3YXkgYWZ0ZXIuCiAgICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KHRyYW5zaXRpb24tPm1fbG9jayk7CisgICAgICAgIENvbmN1cnJlbnRKU0NlbGxMb2NrZXIgbG9j
a2VyKHRyYW5zaXRpb24tPmNlbGxMb2NrKCkpOwogICAgICAgICB0cmFuc2l0aW9uLT5zZXRQcm90
ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyh0cnVlKTsKKyAgICAgICAgdHJhbnNp
dGlvbi0+c2V0VHJhbnNpdGlvblByb3BlcnR5TmFtZShsb2NrZXIsIHByb3BlcnR5TmFtZS51aWQo
KSk7CiAgICAgfQogCiAgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nTW9kZUluY2x1
ZGluZ0hpc3Rvcnkoc3RydWN0dXJlLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgJiB+
Q29weU9uV3JpdGUpOwotICAgIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9
IHByb3BlcnR5TmFtZS51aWQoKTsKICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVy
dHlBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwogICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFi
bGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsK
ICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkp
OwpAQCAtNTMwLDcgKzUyOSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0
eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvCiAKICAgICBjaGVj
a09mZnNldCh0cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIHRyYW5zaXRpb24tPmlubGlu
ZUNhcGFjaXR5KCkpOwogICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7CisgICAgICAgIEdDU2FmZUNvbmN1cnJl
bnRKU0NlbGxMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+Y2VsbExvY2soKSwgdm0uaGVhcCk7CiAg
ICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsK
ICAgICB9CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwpAQCAtNTc1
LDcgKzU3NCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5z
aXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKICAgICBBU1NFUlQoIVN0cnVjdHVy
ZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKHZtLCBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBkZWZlcnJlZCkpOwogCiAgICAgaW50IHRyYW5z
aXRpb25Db3VudCA9IDA7Ci0gICAgZm9yIChhdXRvKiBzID0gc3RydWN0dXJlOyBzICYmIHRyYW5z
aXRpb25Db3VudCA8PSBzX21heFRyYW5zaXRpb25MZW5ndGg7IHMgPSBzLT5wcmV2aW91c0lEKCkp
CisgICAgZm9yIChhdXRvKiBzID0gc3RydWN0dXJlOyBzICYmIHRyYW5zaXRpb25Db3VudCA8PSBz
X21heFRyYW5zaXRpb25MZW5ndGg7IHMgPSBzLT5wcmV2aW91c0lEKHZtKSkKICAgICAgICAgKyt0
cmFuc2l0aW9uQ291bnQ7CiAKICAgICBpZiAodHJhbnNpdGlvbkNvdW50ID4gc19tYXhUcmFuc2l0
aW9uTGVuZ3RoKSB7CkBAIC01ODcsMTYgKzU4NiwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
CiAgICAgfQogCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1
cmUsIGRlZmVycmVkKTsKLSAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLnNl
dE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNo
YWluLmdldCgpKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwg
c3RydWN0dXJlLT5jYWNoZWRQcm90b3R5cGVDaGFpbigpKTsKIAogICAgIC8vIFdoaWxlIHdlIGFy
ZSBkZWxldGluZyB0aGUgcHJvcGVydHksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0YWJsZSBp
cyBub3QgY2xlYXJlZC4KICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
dHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAgICAgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBsb2Nr
ZXIodHJhbnNpdGlvbi0+Y2VsbExvY2soKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3Rl
Y3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKHRydWUpOworICAgICAgICB0cmFuc2l0
aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGxvY2tlciwgcHJvcGVydHlOYW1lLnVpZCgp
KTsKICAgICB9CiAKICAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdNb2RlSW5jbHVk
aW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIH5D
b3B5T25Xcml0ZSk7Ci0gICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0g
cHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUodm0s
IHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAgICB0
cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOwogICAg
IHRyYW5zaXRpb24tPnNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24odHJ1ZSk7CkBAIC02
MTIsNyArNjExLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJh
bnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLAogCiAgICAgY2hlY2tPZmZzZXQo
dHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0
eSgpKTsKICAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3Ry
dWN0dXJlLT5tX2xvY2ssIHZtLmhlYXApOworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNDZWxs
TG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPmNlbGxMb2NrKCksIHZtLmhlYXApOwogICAgICAgICBz
dHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFkZCh2bSwgdHJhbnNpdGlvbik7CiAgICAgfQog
ICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKQEAgLTYzMCw3ICs2Mjks
NyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKUwogICAgIHRyYW5zaXRpb24tPm1fcHJvdG90eXBl
LnNldCh2bSwgdHJhbnNpdGlvbiwgcHJvdG90eXBlKTsKIAogICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgIHRy
YW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOwor
ICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0s
IHRhYmxlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4
T2Zmc2V0KCkpOwogICAgIAogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3ko
KTsKQEAgLTY0Myw3ICs2NDIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hh
bmdlVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcgogICAgICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKICAgICAgICAg
UHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlu
bmluZyh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5t
X2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJh
bnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJsZSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNl
dE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CiAgICAgICAgIAogICAgICAg
ICBzdHJ1Y3R1cmUgPSB0cmFuc2l0aW9uOwpAQCAtNjY1LDcgKzY2NCw3IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIERpY3RpCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1
Y3R1cmUsIGRlZmVycmVkKTsKIAogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0dXJl
LT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgIHRyYW5zaXRpb24tPnBpbiho
b2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgIHRyYW5zaXRpb24t
PnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5jZWxsTG9jaygpKSwgdm0sIHRhYmxlKTsKICAgICB0
cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOwogICAg
IHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlLaW5kKGtpbmQpOwogICAgIHRyYW5zaXRpb24tPnNl
dEhhc0JlZW5EaWN0aW9uYXJ5KHRydWUpOwpAQCAtNzAxLDEyICs3MDAsMTIgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKLSAgICAvLyBUaGlzIG11c3QgYWx3YXlzIHJl
dHVybiBhIHByb3BlcnR5IHRhYmxlLiBJdCBjYW4ndCByZXR1cm4gbnVsbC4KLSAgICBQcm9wZXJ0
eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgLy8gVGhpcyBmdW5j
dGlvbiBtdXN0IGFsd2F5cyByZXR1cm4gYSBwcm9wZXJ0eSB0YWJsZS4gSXQgY2FuJ3QgcmV0dXJu
IG51bGwuCisgICAgUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gcHJvcGVydHlUYWJsZVVuc2FmZU9y
TnVsbCgpOwogICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgaWYgKGlzUGlubmVkUHJvcGVydHlU
YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+Y29weSh2bSwgcmVzdWx0LT5zaXpl
KCkgKyAxKTsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAg
ICAgICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygpKTsKICAgICAgICAg
c2V0UHJvcGVydHlUYWJsZSh2bSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQpAQCAtNzQzLDEwICs3NDIsMTAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm8KICAgICAg
ICAgLy8gdGFibGUgZG9lc24ndCBrbm93IGhvdyB0byB0YWtlIGludG8gYWNjb3VudCBzdWNoIHdo
b2xlc2FsZSBlZGl0cy4KIAogICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+
cGluRm9yQ2FjaGluZyhob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOwor
ICAgICAgICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNoaW5nKGhvbGRMb2NrKHRyYW5zaXRpb24tPmNl
bGxMb2NrKCkpLCB2bSwgdGFibGUpOwogICAgICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQo
dm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOwogICAgICAgICAKLSAgICAgICAgdGFibGUgPSB0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIHRhYmxlID0gdHJhbnNp
dGlvbi0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVsbCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VCh0YWJsZSk7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqdGFibGUpIHsKICAgICAgICAg
ICAgIGlmIChzZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkpCkBA
IC03NjEsMTQgKzc2MCwxNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uU2xvdyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBObwogICAgIH0KICAgICAK
ICAgICBpZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktp
bmQpCi0gICAgICAgICYmICF0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCktPmlzRW1w
dHkoKSkKKyAgICAgICAgJiYgIXRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVVbnNhZmVPck51bGwo
KS0+aXNFbXB0eSgpKQogICAgICAgICB0cmFuc2l0aW9uLT5zZXRIYXNSZWFkT25seU9yR2V0dGVy
U2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKHRydWUpOwogICAgIAogICAgIGlmIChzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0g
dHJhbnNpdGlvbi0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7Ci0gICAgICAgIHRyYW5zaXRpb24t
PnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgICAgICB0
cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+Y2VsbExvY2soKSksIHZtLCB0YWJs
ZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzdHJ1Y3R1
cmUtPm1fbG9jayk7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soc3RydWN0dXJlLT5j
ZWxsTG9jaygpKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0s
IHRyYW5zaXRpb24pOwogICAgIH0KIApAQCAtODIwLDE0ICs4MTksMTQgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiB2bSwgSlNPYmplY3QqIG9i
amVjdCkKICAgICBBU1NFUlQoaXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChvYmplY3QtPnN0
cnVjdHVyZSh2bSkgPT0gdGhpcyk7CiAgICAgCi0gICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2Nr
ZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhlYXApOwogICAgIAogICAgIG9iamVjdC0+c2V0U3Ry
dWN0dXJlSUREaXJlY3RseShudWtlKGlkKCkpKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ID0gdGhpcy0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAg
ICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKKyAgICAgICAg
UHJvcGVydHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCk7CiAgICAg
ICAgIEFTU0VSVCh0YWJsZSk7CiAKICAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSB0YWJs
ZS0+c2l6ZSgpOwpAQCAtODQxLDE0ICs4NDAsMTQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICAg
ICAgYXV0byBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwogICAgICAgICBmb3IgKFByb3BlcnR5VGFi
bGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwg
KytpKSB7CiAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvYmplY3QtPmdldERpcmVjdChpdGVyLT5v
ZmZzZXQpOwotICAgICAgICAgICAgb2Zmc2V0ID0gaXRlci0+b2Zmc2V0ID0gb2Zmc2V0Rm9yUHJv
cGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICBvZmZzZXQgPSBp
dGVyLT5vZmZzZXQgPSBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBpbmxpbmVDYXBhY2l0eSgp
KTsKICAgICAgICAgfQogICAgICAgICBzZXRNYXhPZmZzZXQodm0sIG9mZnNldCk7CiAgICAgICAg
IEFTU0VSVCh0cmFuc2l0aW9uT2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNldCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBDb3BpZXMgaW4gb3VyIHZhbHVlcyB0byB0aGVpciBjb21wYWN0ZWQgbG9jYXRp
b25zLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgaSsr
KQotICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZvclByb3BlcnR5TnVt
YmVyKGksIG1faW5saW5lQ2FwYWNpdHkpLCB2YWx1ZXNbaV0pOworICAgICAgICAgICAgb2JqZWN0
LT5wdXREaXJlY3Qodm0sIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIGlubGluZUNhcGFjaXR5
KCkpLCB2YWx1ZXNbaV0pOwogCiAgICAgICAgIHRhYmxlLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7
CiAKQEAgLTg5NCwyNyArODkzLDMyIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGlj
dGlvbmFyeVN0cnVjdHVyZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIHRo
aXM7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW4oY29uc3QgQWJzdHJhY3RMb2NrZXImLCBWTSYg
dm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQordm9pZCBTdHJ1Y3R1cmU6OnBpbihjb25zdCBBYnN0
cmFjdExvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQogewogICAg
IHNldElzUGlubmVkUHJvcGVydHlUYWJsZSh0cnVlKTsKICAgICBzZXRQcm9wZXJ0eVRhYmxlKHZt
LCB0YWJsZSk7CiAgICAgY2xlYXJQcmV2aW91c0lEKCk7Ci0gICAgbV90cmFuc2l0aW9uUHJvcGVy
dHlOYW1lID0gbnVsbHB0cjsKKyAgICBzZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGxvY2tlciwg
bnVsbHB0cik7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5nKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKK3ZvaWQgU3RydWN0dXJl
OjpwaW5Gb3JDYWNoaW5nKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgUHJv
cGVydHlUYWJsZSogdGFibGUpCiB7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKHRydWUp
OwogICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKLSAgICBtX3RyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUgPSBudWxscHRyOworICAgIHNldFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUobG9ja2Vy
LCBudWxscHRyKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoVk0mIHZt
KQogewogICAgIEFTU0VSVCghaGFzUmFyZURhdGEoKSk7Ci0gICAgU3RydWN0dXJlUmFyZURhdGEq
IHJhcmVEYXRhID0gU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZSh2bSwgcHJldmlvdXNJRCgpKTsK
KyAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3Jl
YXRlKHZtLCBjYWNoZWRQcm90b3R5cGVDaGFpbigpKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOwotICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldCh2bSwgdGhpcywgcmFyZURhdGEpOwor
I2lmIENQVShBRERSRVNTNjQpCisgICAgbV9pbmxpbmVDYXBhY2l0eUFuZENhY2hlZFByb3RvdHlw
ZUNoYWluT3JSYXJlRGF0YS5zZXRQb2ludGVyKHJhcmVEYXRhKTsKKyAgICB2bS5oZWFwLndyaXRl
QmFycmllcih0aGlzLCByYXJlRGF0YSk7CisjZWxzZQorICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hh
aW5PclJhcmVEYXRhLnNldCh2bSwgdGhpcywgcmFyZURhdGEpOworI2VuZGlmCiAgICAgQVNTRVJU
KGhhc1JhcmVEYXRhKCkpOwogfQogCkBAIC05MjgsNyArOTMyLDcgQEAgV2F0Y2hwb2ludFNldCog
U3RydWN0dXJlOjplbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChWTSYgdm0s
IFByb3BlcnQKICAgICAKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCiAgICAgICAgIGFsbG9jYXRl
UmFyZURhdGEodm0pOwotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICBDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygpKTsKICAgICBTdHJ1Y3R1
cmVSYXJlRGF0YSogcmFyZURhdGEgPSB0aGlzLT5yYXJlRGF0YSgpOwogICAgIGlmICghcmFyZURh
dGEtPm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cykgewogICAgICAgICByYXJlRGF0YS0+bV9y
ZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzID0KQEAgLTk5OCw3ICsxMDAyLDcgQEAgUHJvcGVydHlN
YXBTdGF0aXN0aWNzRXhpdExvZ2dlcjo6flByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXIo
KQogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
ZyhWTSYgdm0pCiB7Ci0gICAgaWYgKFByb3BlcnR5VGFibGUqIHRhYmxlID0gcHJvcGVydHlUYWJs
ZU9yTnVsbCgpKQorICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVV
bnNhZmVPck51bGwoKSkKICAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAq
dGFibGUpOwogICAgIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IGZhbHNlOwogICAgIHJldHVybiBt
YXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0sIHNldFByb3BlcnR5VGFibGUpOwpAQCAtMTAzOCwx
NCArMTA0MiwxNCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYgogewogICAgIHJldHVybiBhZGQ8
U2hvdWxkUGluOjpObz4oCiAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCi0g
ICAgICAgIFt0aGlzLCAmdm1dIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9w
ZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIFt0aGlz
LCAmdm1dKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0NlbGxMb2NrZXImLCBQcm9wZXJ0eU9mZnNl
dCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CiAgICAgICAgICAgICBzZXRNYXhPZmZz
ZXQodm0sIG5ld01heE9mZnNldCk7CiAgICAgICAgIH0pOwogfQogCiBQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46Ok5vPih2bSwgcHJvcGVydHlOYW1lLCBbdGhpcywg
JnZtXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQsIFBy
b3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGlu
OjpObz4odm0sIHByb3BlcnR5TmFtZSwgW3RoaXMsICZ2bV0oY29uc3QgR0NTYWZlQ29uY3VycmVu
dEpTQ2VsbExvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZz
ZXQpIHsKICAgICAgICAgc2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQpOwogICAgIH0pOwog
fQpAQCAtMTExNiwyNSArMTEyMCwyMSBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKHRoaXNPYmplY3QtPm1fbG9jayk7CisgICAgQ29uY3VycmVudEpTQ2VsbExvY2tlciBs
b2NrZXIodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9nbG9iYWxPYmplY3QpOwotICAgIGlmICghdGhpc09iamVjdC0+aXNPYmpl
Y3QoKSkKLSAgICAgICAgdGhpc09iamVjdC0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5jbGVhcigp
OwotICAgIGVsc2UgewotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3Rv
dHlwZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4pOwotICAgIH0KLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3ByZXZp
b3VzT3JSYXJlRGF0YSk7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm90b3R5
cGUpOworICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQodGhpc09iamVjdC0+cHJldmlvdXNJ
RCh2aXNpdG9yLnZtKCkpKTsKKyAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXNPYmpl
Y3QtPmNhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YSgpKTsKIAogICAgIGlmICh0aGlzT2Jq
ZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSB8fCB0aGlzT2JqZWN0LT5wcm90ZWN0UHJvcGVy
dHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZygpKSB7CiAgICAgICAgIC8vIE5PVEU6IFRoaXMgY2Fu
IGludGVybGVhdmUgaW4gcGluKCksIGluIHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51bGwgcHJv
cGVydHkgdGFibGUuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4gdGhlIGJh
cnJpZXIgd2lsbCBmaXJlIGFuZCB3ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KLSAgICAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKKyAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh0aGlzT2JqZWN0LT5wcm9wZXJ0eVRhYmxlVW5zYWZl
T3JOdWxsKCkpOwogICAgIH0gZWxzZSBpZiAodmlzaXRvci5pc0FuYWx5emluZ0hlYXAoKSkKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsK
LSAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCi0gICAgICAg
IHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOworICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKHRoaXNPYmplY3QtPnByb3BlcnR5VGFibGVVbnNhZmVPck51
bGwoKSk7CisgICAgZWxzZSBpZiAodGhpc09iamVjdC0+cHJvcGVydHlUYWJsZVVuc2FmZU9yTnVs
bCgpKQorICAgICAgICB0aGlzT2JqZWN0LT5jbGVhclByb3BlcnR5VGFibGUoKTsKIH0KIAogYm9v
bCBTdHJ1Y3R1cmU6OmlzQ2hlYXBEdXJpbmdHQyhWTSYgdm0pCkBAIC0xMjkwLDcgKzEyOTAsNyBA
QCBib29sIFN0cnVjdHVyZTo6Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSkg
Y29uc3QKICAgICBpZiAoIXRoaXMtPmNhbkNhY2hlT3duS2V5cygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4gPSBtX2NhY2hlZFBy
b3RvdHlwZUNoYWluLmdldCgpOworICAgIFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiA9
IGNhY2hlZFByb3RvdHlwZUNoYWluKCk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZUNoYWluKTsKICAg
ICBTdHJ1Y3R1cmVJRCogY3VycmVudFN0cnVjdHVyZUlEID0gc3RydWN0dXJlQ2hhaW4tPmhlYWQo
KTsKICAgICB3aGlsZSAodHJ1ZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAppbmRleCA1MmNkM2M3MWQ5MjBmMmY4YTk3YjQ2MGI5MGUwZWM3MGQ1ZDcxMWFmLi45
NDgxMjY3NTdiN2QzYTZkY2M0YTZiZjdhYTUwZjVmNzU1Y2Q5MDQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUg
IlRpbnlCbG9vbUZpbHRlci5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlICJX
cml0ZUJhcnJpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBhY3RSZWZQdHJUdXBsZS5o
PgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTI1
OCw5ICsyNTksMTggQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgewogICAgICAgICByZXR1cm4gdHlwZUluZm8oKS5nZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZSgpOwogICAgIH0KKworICAgIFR5cGVJbmZvOjpPdXRPZkxpbmVUeXBlRmxhZ3Mgb3V0T2ZMaW5l
VHlwZUZsYWdzKCkgY29uc3QKKyAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgcmV0
dXJuIG1fb3V0T2ZMaW5lVHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS50eXBlKCk7Cisj
ZWxzZQorICAgICAgICByZXR1cm4gbV9vdXRPZkxpbmVUeXBlRmxhZ3M7CisjZW5kaWYKKyAgICB9
CiAgICAgCiAgICAgLy8gVHlwZSBhY2Nlc3NvcnMuCi0gICAgVHlwZUluZm8gdHlwZUluZm8oKSBj
b25zdCB7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9Cisg
ICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IHJldHVybiBtX2Jsb2IudHlwZUluZm8ob3V0
T2ZMaW5lVHlwZUZsYWdzKCkpOyB9CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQogCiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkg
JiBBbGxXcml0YWJsZUFycmF5VHlwZXM7IH0KQEAgLTMxNSwyNCArMzI1LDI0IEBAIGNsYXNzIFN0
cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIAogICAgIGJvb2wgaGFzUmFyZURh
dGEoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzUmFyZURhdGEobV9wcmV2aW91c09y
UmFyZURhdGEuZ2V0KCkpOworICAgICAgICByZXR1cm4gaXNSYXJlRGF0YShjYWNoZWRQcm90b3R5
cGVDaGFpbk9yUmFyZURhdGEoKSk7CiAgICAgfQogCiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHJh
cmVEYXRhKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09yUmFyZURh
dGEuZ2V0KCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEq
PihjYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEoKSk7CiAgICAgfQogCiAgICAgY29uc3Qg
U3RydWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VChoYXNSYXJlRGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFN0cnVj
dHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCkpOworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3RydWN0dXJlUmFyZURhdGEqPihjYWNoZWRQcm90b3R5cGVD
aGFpbk9yUmFyZURhdGEoKSk7CiAgICAgfQogCiAgICAgY29uc3QgU3RydWN0dXJlUmFyZURhdGEq
IHJhcmVEYXRhQ29uY3VycmVudGx5KCkgY29uc3QKICAgICB7Ci0gICAgICAgIEpTQ2VsbCogY2Vs
bCA9IG1fcHJldmlvdXNPclJhcmVEYXRhLmdldCgpOworICAgICAgICBKU0NlbGwqIGNlbGwgPSBj
YWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEoKTsKICAgICAgICAgaWYgKGlzUmFyZURhdGEo
Y2VsbCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEq
PihjZWxsKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zNDUsMjEgKzM1NSwyMSBAQCBj
bGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgcmV0dXJuIHJh
cmVEYXRhKCk7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSogcHJldmlvdXNJRCgpIGNvbnN0
CisgICAgU3RydWN0dXJlKiBwcmV2aW91c0lEKFZNJiB2bSkgY29uc3QKICAgICB7Ci0gICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICAgICAgLy8g
VGhpcyBpcyBzbyB3cml0dGVuIGJlY2F1c2UgaXQncyB1c2VkIGNvbmN1cnJlbnRseS4gV2Ugb25s
eSBsb2FkIGZyb20gbV9wcmV2aW91c09yUmFyZURhdGEKLSAgICAgICAgLy8gb25jZSwgYW5kIHRo
aXMgbG9hZCBpcyBndWFyYW50ZWVkIGF0b21pYy4KLSAgICAgICAgSlNDZWxsKiBjZWxsID0gbV9w
cmV2aW91c09yUmFyZURhdGEuZ2V0KCk7Ci0gICAgICAgIGlmIChpc1JhcmVEYXRhKGNlbGwpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCkt
PnByZXZpb3VzSUQoKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZSo+KGNl
bGwpOworICAgICAgICBpZiAoIW1fcHJldmlvdXNJRCkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1fcHJldmlvdXNJRCk7CiAgICAg
fQogICAgIGJvb2wgdHJhbnNpdGl2ZWx5VHJhbnNpdGlvbmVkRnJvbShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZVRvRmluZCk7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBtYXhPZmZzZXQoKSBjb25zdAogICAg
IHsKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgICAgICB1aW50MTZfdCBtYXhPZmZzZXQgPSBtX21h
eE9mZnNldEFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUudHlwZSgpOworI2Vsc2UKICAgICAgICAg
dWludDE2X3QgbWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXQ7CisjZW5kaWYKICAgICAgICAgaWYgKG1h
eE9mZnNldCA9PSBzaG9ydEludmFsaWRPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gaW52YWxp
ZE9mZnNldDsKICAgICAgICAgaWYgKG1heE9mZnNldCA9PSB1c2VSYXJlRGF0YUZsYWcpCkBAIC0z
NjksMjIgKzM3OSw0NSBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsK
IAogICAgIHZvaWQgc2V0TWF4T2Zmc2V0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ICAgIHsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQotICAgICAgICAgICAg
bV9tYXhPZmZzZXQgPSBzaG9ydEludmFsaWRPZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKG9mZnNl
dCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQpCi0gICAg
ICAgICAgICBtX21heE9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgZWxzZSBpZiAobV9tYXhPZmZz
ZXQgPT0gdXNlUmFyZURhdGFGbGFnKQorICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJl
YWQoKSAmJiAhVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkpOworICAgICAgICBhdXRvIGNvbW1pdCA9
IFsmXSh1aW50MTZfdCB2YWx1ZSkgeworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgICAgICBt
X21heE9mZnNldEFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuc2V0VHlwZSh2YWx1ZSk7CisjZWxz
ZQorICAgICAgICAgICAgbV9tYXhPZmZzZXQgPSB2YWx1ZTsKKyNlbmRpZgorICAgICAgICB9Owor
CisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAgY29t
bWl0KHNob3J0SW52YWxpZE9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydElu
dmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1pdChvZmZzZXQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgdWludDE2X3Qg
bWF4T2Zmc2V0ID0gbV9tYXhPZmZzZXRBbmRUcmFuc2l0aW9uUHJvcGVydHlOYW1lLnR5cGUoKTsK
KyNlbHNlCisgICAgICAgIHVpbnQxNl90IG1heE9mZnNldCA9IG1fbWF4T2Zmc2V0OworI2VuZGlm
CisgICAgICAgIGlmIChtYXhPZmZzZXQgPT0gdXNlUmFyZURhdGFGbGFnKSB7CiAgICAgICAgICAg
ICByYXJlRGF0YSgpLT5tX21heE9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBlbnN1cmVSYXJlRGF0YSh2bSktPm1fbWF4T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAg
ICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIG1fbWF4T2Zmc2V0ID0g
dXNlUmFyZURhdGFGbGFnOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAg
ICAgZW5zdXJlUmFyZURhdGEodm0pLT5tX21heE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgY29tbWl0KHVzZVJhcmVEYXRhRmxhZyk7CiAg
ICAgfQogCiAgICAgUHJvcGVydHlPZmZzZXQgdHJhbnNpdGlvbk9mZnNldCgpIGNvbnN0CiAgICAg
eworI2lmIENQVShBRERSRVNTNjQpCisgICAgICAgIHVpbnQxNl90IHRyYW5zaXRpb25PZmZzZXQg
PSBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8udHlwZSgpOworI2Vsc2UKICAgICAgICAg
dWludDE2X3QgdHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9mZnNldDsKKyNlbmRpZgog
ICAgICAgICBpZiAodHJhbnNpdGlvbk9mZnNldCA9PSBzaG9ydEludmFsaWRPZmZzZXQpCiAgICAg
ICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKICAgICAgICAgaWYgKHRyYW5zaXRpb25PZmZz
ZXQgPT0gdXNlUmFyZURhdGFGbGFnKQpAQCAtMzk0LDE3ICs0MjcsMzYgQEAgY2xhc3MgU3RydWN0
dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIHNldFRyYW5zaXRpb25PZmZz
ZXQoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICBpZiAob2Zm
c2V0ID09IGludmFsaWRPZmZzZXQpCi0gICAgICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSBz
aG9ydEludmFsaWRPZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRh
RmxhZyAmJiBvZmZzZXQgPCBzaG9ydEludmFsaWRPZmZzZXQpCi0gICAgICAgICAgICBtX3RyYW5z
aXRpb25PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIGVsc2UgaWYgKG1fdHJhbnNpdGlvbk9mZnNl
dCA9PSB1c2VSYXJlRGF0YUZsYWcpCisgICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVh
ZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CisgICAgICAgIGF1dG8gY29tbWl0ID0g
WyZdKHVpbnQxNl90IHZhbHVlKSB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgICAgIG1f
dHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mby5zZXRUeXBlKHZhbHVlKTsKKyNlbHNlCisgICAg
ICAgICAgICBtX3RyYW5zaXRpb25PZmZzZXQgPSB2YWx1ZTsKKyNlbmRpZgorICAgICAgICB9Owor
CisgICAgICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAgY29t
bWl0KHNob3J0SW52YWxpZE9mZnNldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG9mZnNldCA8IHVzZVJhcmVEYXRhRmxhZyAmJiBvZmZzZXQgPCBzaG9ydElu
dmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGNvbW1pdChvZmZzZXQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgdWludDE2X3Qg
dHJhbnNpdGlvbk9mZnNldCA9IG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNzSW5mby50eXBlKCk7
CisjZWxzZQorICAgICAgICB1aW50MTZfdCB0cmFuc2l0aW9uT2Zmc2V0ID0gbV90cmFuc2l0aW9u
T2Zmc2V0OworI2VuZGlmCisgICAgICAgIGlmICh0cmFuc2l0aW9uT2Zmc2V0ID09IHVzZVJhcmVE
YXRhRmxhZykgewogICAgICAgICAgICAgcmFyZURhdGEoKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0g
b2Zmc2V0OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGVuc3VyZVJhcmVEYXRhKHZtKS0+
bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKLSAgICAgICAgICAgIG1fdHJhbnNpdGlvbk9mZnNldCA9IHVzZVJhcmVEYXRhRmxh
ZzsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGVuc3VyZVJhcmVE
YXRhKHZtKS0+bV90cmFuc2l0aW9uT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOworICAgICAgICBjb21taXQodXNlUmFyZURhdGFGbGFnKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgdW5zaWduZWQgb3V0T2ZMaW5lQ2FwYWNpdHkoUHJvcGVydHlPZmZzZXQgbWF4
T2Zmc2V0KQpAQCAtNDQwLDE3ICs0OTIsMTggQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lU2l6ZShtYXhPZmZz
ZXQoKSk7CiAgICAgfQotICAgIGJvb2wgaGFzSW5saW5lU3RvcmFnZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gISFtX2lubGluZUNhcGFjaXR5OwotICAgIH0KKyAgICBib29sIGhhc0lu
bGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiAhIWlubGluZUNhcGFjaXR5KCk7IH0KICAgICB1
bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIGNvbnN0CiAgICAgeworI2lmIENQVShBRERSRVNTNjQp
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihtX2lubGluZUNhcGFjaXR5QW5k
Q2FjaGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhLnR5cGUoKSk7CisjZWxzZQogICAgICAgICBy
ZXR1cm4gbV9pbmxpbmVDYXBhY2l0eTsKKyNlbmRpZgogICAgIH0KICAgICB1bnNpZ25lZCBpbmxp
bmVTaXplKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4o
bWF4T2Zmc2V0KCkgKyAxLCBtX2lubGluZUNhcGFjaXR5KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWluPHVuc2lnbmVkPihtYXhPZmZzZXQoKSArIDEsIGlubGluZUNhcGFjaXR5KCkpOwogICAgIH0K
ICAgICB1bnNpZ25lZCB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpIGNvbnN0CiAgICAgewpAQCAtNDYy
LDEyICs1MTUsMTIgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgewogICAgICAgICByZXR1cm4gSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkKICAgICAgICAg
ICAgICYmIG9mZnNldCA8PSBtYXhPZmZzZXQoKQotICAgICAgICAgICAgJiYgKG9mZnNldCA8IG1f
aW5saW5lQ2FwYWNpdHkgfHwgb2Zmc2V0ID49IGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KTsKKyAgICAg
ICAgICAgICYmIChvZmZzZXQgPCBzdGF0aWNfY2FzdDxpbnQ+KGlubGluZUNhcGFjaXR5KCkpIHx8
IG9mZnNldCA+PSBmaXJzdE91dE9mTGluZU9mZnNldCk7CiAgICAgfQogCiAgICAgYm9vbCBoaWph
Y2tzSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzVHlwZWRW
aWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgICAgICByZXR1cm4g
aXNUeXBlZFZpZXcoY2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSBjb25zdApAQCAtNTM1LDcg
KzU4OCwxNCBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAg
IHZvaWQgc2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCosIFZNJiwgSlNTdHJp
bmcqIHZhbHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIAotICAgIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0luZm87IH0K
KyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0CisgICAgeworI2lmIENQVShB
RERSRVNTNjQpCisgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25PZmZzZXRBbmRDbGFzc0luZm8u
cG9pbnRlcigpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fY2xhc3NJbmZvOworI2VuZGlmCisg
ICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAgICAgewpA
QCAtNTUyLDI5ICs2MTIsMzkgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2Vs
bCB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2dsb2JhbE9i
amVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBjbGFzc0luZm9PZmZzZXQoKQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDbGFzc0luZm8oKQogICAgIHsKKyNpZiBDUFUo
QUREUkVTUzY0KQorICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV90
cmFuc2l0aW9uT2Zmc2V0QW5kQ2xhc3NJbmZvKTsKKyNlbHNlCiAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7CisjZW5kaWYKICAgICB9Ci0gICAg
ICAgIAorCiAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5
T2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJl
LCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5
T2Zmc2V0KCk7CiAgICAgfQotICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgcHJvcGVydHlUYWJs
ZVVuc2FmZU9mZnNldCgpCi0gICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cnVjdHVyZSwgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9CiAKLSAgICBzdGF0aWMgcHRy
ZGlmZl90IGlubGluZUNhcGFjaXR5T2Zmc2V0KCkKKyNpZiBDUFUoTElUVExFX0VORElBTikKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKQogICAgIHsKKyNpZiBD
UFUoQUREUkVTUzY0KQorICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwg
bV9pbmxpbmVDYXBhY2l0eUFuZENhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YSkgKyBDb21w
YWN0UG9pbnRlclR1cGxlPEpTQ2VsbCosIHVpbnQxNl90Pjo6b2Zmc2V0T2ZUeXBlKCk7CisjZWxz
ZQogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9pbmxpbmVDYXBh
Y2l0eSk7CisjZW5kaWYKKwogICAgIH0KKyNlbmRpZgogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBw
cmV2aW91c09yUmFyZURhdGFPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZD
YWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fcHJldmlvdXNPclJhcmVEYXRhKTsKKyNpZiBDUFUo
QUREUkVTUzY0KQorICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9p
bmxpbmVDYXBhY2l0eUFuZENhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJlRGF0YSk7CisjZWxzZQor
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9jYWNoZWRQcm90b3R5
cGVDaGFpbk9yUmFyZURhdGEpOworI2VuZGlmCiAgICAgfQogCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJik7CkBAIC02NTMsMTIgKzcyMywxMyBAQCBjbGFzcyBTdHJ1
Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAgICBzdGF0aWMgdm9pZCBkdW1w
Q29udGV4dEhlYWRlcihQcmludFN0cmVhbSYpOwogICAgIAotICAgIENvbmN1cnJlbnRKU0xvY2sm
IGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KLQotICAgIHVuc2lnbmVkIHByb3BlcnR5SGFzaCgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlIYXNoOyB9Ci0KICAgICBzdGF0aWMgYm9vbCBzaG91
bGRDb252ZXJ0VG9Qb2x5UHJvdG8oY29uc3QgU3RydWN0dXJlKiBhLCBjb25zdCBTdHJ1Y3R1cmUq
IGIpOwogCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWF4T2Zmc2V0QW5kVHJhbnNpdGlvblByb3Bl
cnR5TmFtZS5wb2ludGVyKCk7CisgICAgfQorCiAgICAgc3RydWN0IFByb3BlcnR5SGFzaEVudHJ5
IHsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRh
YmxlVmFsdWUqIHZhbHVlOwpAQCAtNjY4LDYgKzczOSwyMSBAQCBjbGFzcyBTdHJ1Y3R1cmUgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRl
OgorICAgIGJvb2wgcnVsZU91dFVuc2VlblByb3BlcnR5SGFzaChVbmlxdWVkU3RyaW5nSW1wbCop
IGNvbnN0OworI2lmIENQVShBRERSRVNTNjQpCisgICAgLy8gQXMgYSBwcm9wZXJ0eUhhc2gsIDY0
Yml0IGVudmlyb25tZW50IHVzZXMgMTZiaXQgcHJvcGVydHktaGFzaCArIHNlZW5Qcm9wZXJ0aWVz
IHNldC4KKyAgICB1aW50cHRyX3QgcHJvcGVydHlIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9wcm9w
ZXJ0eUhhc2hBbmRTZWVuUHJvcGVydGllcy5kYXRhKCk7IH0KKyNlbHNlCisgICAgdWludDMyX3Qg
cHJvcGVydHlIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eUhhc2g7IH0KKyNlbmRpZgor
ICAgIHVpbnRwdHJfdCBzZWVuUHJvcGVydGllcygpIGNvbnN0OworICAgIHZvaWQgYWRkUHJvcGVy
dHlIYXNoQW5kU2VlblByb3BlcnR5KHVuc2lnbmVkLCBVbmlxdWVkU3RyaW5nSW1wbCopOworCisg
ICAgdm9pZCBzZXRUcmFuc2l0aW9uUHJvcGVydHlOYW1lKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
VW5pcXVlZFN0cmluZ0ltcGwqIHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpCisgICAgeworICAgICAg
ICBtX21heE9mZnNldEFuZFRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuc2V0UG9pbnRlcih0cmFuc2l0
aW9uUHJvcGVydHlOYW1lKTsKKyAgICB9CisKICAgICB0eXBlZGVmIGVudW0geyAKICAgICAgICAg
Tm9uZURpY3Rpb25hcnlLaW5kID0gMCwKICAgICAgICAgQ2FjaGVkRGljdGlvbmFyeUtpbmQgPSAx
LApAQCAtNjg0LDYgKzc3MCw3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewogICAgIHtcCiAgICAgICAgIG1fYml0RmllbGQgJj0gfihzXyMjbG93ZXJOYW1lIyNNYXNr
IDw8IG9mZnNldCk7XAogICAgICAgICBtX2JpdEZpZWxkIHw9IChuZXdWYWx1ZSAmIHNfIyNsb3dl
ck5hbWUjI01hc2spIDw8IG9mZnNldDtcCisgICAgICAgIEFTU0VSVChuZXdWYWx1ZSA9PSBsb3dl
ck5hbWUoKSk7XAogICAgIH0KIAogICAgIERFRklORV9CSVRGSUVMRChEaWN0aW9uYXJ5S2luZCwg
ZGljdGlvbmFyeUtpbmQsIERpY3Rpb25hcnlLaW5kLCAyLCAwKTsKQEAgLTY5MSwxOCArNzc4LDE4
IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIERFRklORV9C
SVRGSUVMRChib29sLCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCBIYXNHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzLCAxLCAzKTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzUmVhZE9ubHlP
ckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywgSGFzUmVhZE9ubHlPckdldHRl
clNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywgMSwgNCk7CiAgICAgREVGSU5FX0JJVEZJ
RUxEKGJvb2wsIGlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbiwgSXNR
dWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uLCAxLCA1KTsKLSAgICBERUZJ
TkVfQklURklFTEQodW5zaWduZWQsIHRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIFRyYW5z
aXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIDE0LCA2KTsKLSAgICBERUZJTkVfQklURklFTEQoYm9v
bCwgZGlkUHJldmVudEV4dGVuc2lvbnMsIERpZFByZXZlbnRFeHRlbnNpb25zLCAxLCAyMCk7Ci0g
ICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFRyYW5zaXRpb24sIERpZFRyYW5zaXRpb24sIDEs
IDIxKTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgc3RhdGljUHJvcGVydGllc1JlaWZpZWQs
IFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkLCAxLCAyMik7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJv
b2wsIGhhc0JlZW5GbGF0dGVuZWRCZWZvcmUsIEhhc0JlZW5GbGF0dGVuZWRCZWZvcmUsIDEsIDIz
KTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVy
dGllcywgSGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcywgMSwgMjQpOwotICAgIERFRklO
RV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGllcywgRGlkV2F0Y2hJbnRl
cm5hbFByb3BlcnRpZXMsIDEsIDI1KTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgdHJhbnNp
dGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgVHJhbnNpdGlvbldhdGNocG9pbnRJc0xp
a2VseVRvQmVGaXJlZCwgMSwgMjYpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNCZWVu
RGljdGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnksIDEsIDI3KTsKLSAgICBERUZJTkVfQklURklF
TEQoYm9vbCwgcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcsIFByb3RlY3RQ
cm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCAxLCAyOCk7Ci0gICAgREVGSU5FX0JJVEZJ
RUxEKGJvb2wsIGhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90
bywgSGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvLCAxLCAy
OSk7Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRp
b24sIElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24sIDEsIDMwKTsKKyAgICBERUZJTkVfQklU
RklFTEQodW5zaWduZWQsIHRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMsIFRyYW5zaXRpb25Q
cm9wZXJ0eUF0dHJpYnV0ZXMsIDgsIDYpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRQ
cmV2ZW50RXh0ZW5zaW9ucywgRGlkUHJldmVudEV4dGVuc2lvbnMsIDEsIDE0KTsKKyAgICBERUZJ
TkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlkVHJhbnNpdGlvbiwgMSwgMTUpOwor
ICAgIERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCwgU3RhdGlj
UHJvcGVydGllc1JlaWZpZWQsIDEsIDE2KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFz
QmVlbkZsYXR0ZW5lZEJlZm9yZSwgSGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSwgMSwgMTcpOworICAg
IERFRklORV9CSVRGSUVMRChib29sLCBoYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCBI
YXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzLCAxLCAxOCk7CisgICAgREVGSU5FX0JJVEZJ
RUxEKGJvb2wsIGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCBEaWRXYXRjaEludGVybmFsUHJv
cGVydGllcywgMSwgMTkpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCB0cmFuc2l0aW9uV2F0
Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkLCBUcmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9C
ZUZpcmVkLCAxLCAyMCk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc0JlZW5EaWN0aW9u
YXJ5LCBIYXNCZWVuRGljdGlvbmFyeSwgMSwgMjEpOworICAgIERFRklORV9CSVRGSUVMRChib29s
LCBwcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZywgUHJvdGVjdFByb3BlcnR5
VGFibGVXaGlsZVRyYW5zaXRpb25pbmcsIDEsIDIyKTsKKyAgICBERUZJTkVfQklURklFTEQoYm9v
bCwgaGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvLCBIYXNV
bmRlcnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8sIDEsIDIzKTsKKyAg
ICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwgSXNQ
cm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwgMSwgMjQpOwogCiAgICAgc3RhdGljX2Fzc2VydChz
X2JpdFdpZHRoT2ZUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIDw9IHNpemVvZihUcmFuc2l0
aW9uUHJvcGVydHlBdHRyaWJ1dGVzKSAqIDgpOwogCkBAIC03MjEsNyArODA4LDcgQEAgY2xhc3Mg
U3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gYW5kIHRoZSBsaXN0IG9m
IHN0cnVjdHVyZXMgdGhhdCB3ZSB2aXNpdGVkIGJlZm9yZSB3ZSBnb3QgdG8gaXQuIElmIGl0IHJl
dHVybnMgYQogICAgIC8vIG5vbi1udWxsIHN0cnVjdHVyZSwgaXQgd2lsbCBhbHNvIGxvY2sgdGhl
IHN0cnVjdHVyZSB0aGF0IGl0IHJldHVybnM7IGl0IGlzIHlvdXIgam9iCiAgICAgLy8gdG8gdW5s
b2NrIGl0LgotICAgIHZvaWQgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24o
VmVjdG9yPFN0cnVjdHVyZSosIDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiwgUHJvcGVydHlU
YWJsZSomKTsKKyAgICB2b2lkIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9u
KFZNJiwgVmVjdG9yPFN0cnVjdHVyZSosIDg+JiBzdHJ1Y3R1cmVzLCBTdHJ1Y3R1cmUqJiwgUHJv
cGVydHlUYWJsZSomKTsKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlU
cmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGljdGlvbmFyeUtpbmQsIERlZmVycmVkU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwogCkBAIC03MzgsOSArODI1
LDkgQEAgY2xhc3MgU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gVGhp
cyBtYXkgZ3JhYiB0aGUgbG9jaywgb3Igbm90LiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhl
IFN0cnVjdHVyZSdzIGxvY2suCiAgICAgUHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVydHlUYWJs
ZUlmTm90RW1wdHkoVk0mIHZtKQogICAgIHsKLSAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJl
c3VsdCA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgaWYgKFByb3BlcnR5
VGFibGUqIHJlc3VsdCA9IHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIGlmICghcHJldmlvdXNJRCgpKQorICAgICAgICBpZiAo
IXByZXZpb3VzSUQodm0pKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0KQEAgLTc0OCwzOSArODM1
LDM3IEBAIGNsYXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIC8vIFRo
aXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwgd2hlbiBob2xkaW5nIHRo
ZSBTdHJ1Y3R1cmUncyBsb2NrLgogICAgIFByb3BlcnR5VGFibGUqIGVuc3VyZVByb3BlcnR5VGFi
bGUoVk0mIHZtKQogICAgIHsKLSAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1f
cHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJl
c3VsdCA9IHByb3BlcnR5VGFibGVVbnNhZmVPck51bGwoKSkKICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAg
IH0KICAgICAKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlT3JOdWxsKCkgY29uc3QK
KyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlVW5zYWZlT3JOdWxsKCkgY29uc3QKICAg
ICB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lVHlwZUZs
YWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5wb2ludGVyKCk7CisjZWxzZQogICAgICAgICByZXR1
cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOworI2VuZGlmCiAgICAgfQogICAgIAogICAg
IC8vIFRoaXMgd2lsbCBncmFiIHRoZSBsb2NrLiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhl
IFN0cnVjdHVyZSdzIGxvY2suCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlUYWJsZSog
bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gdHJ1
ZSk7CiAgICAgCiAgICAgdm9pZCBzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJs
ZSogdGFibGUpOworICAgIHZvaWQgY2xlYXJQcm9wZXJ0eVRhYmxlKCk7CiAgICAgCiAgICAgUHJv
cGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mKTsKICAgICBQ
cm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKIAogICAgIHZv
aWQgc2V0UHJldmlvdXNJRChWTSYsIFN0cnVjdHVyZSopOwotCi0gICAgdm9pZCBjbGVhclByZXZp
b3VzSUQoKQotICAgIHsKLSAgICAgICAgaWYgKGhhc1JhcmVEYXRhKCkpCi0gICAgICAgICAgICBy
YXJlRGF0YSgpLT5jbGVhclByZXZpb3VzSUQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9wcmV2aW91c09yUmFyZURhdGEuY2xlYXIoKTsKLSAgICB9CisgICAgdm9pZCBjbGVhclByZXZp
b3VzSUQoKTsKIAogICAgIGludCB0cmFuc2l0aW9uQ291bnRFc3RpbWF0ZSgpIGNvbnN0CiAgICAg
ewogICAgICAgICAvLyBTaW5jZSB0aGUgbnVtYmVyIG9mIHRyYW5zaXRpb25zIGlzIG9mdGVuIHRo
ZSBzYW1lIGFzIHRoZSBsYXN0IG9mZnNldCAoZXhjZXB0IGlmIHRoZXJlIGFyZSBkZWxldGVzKQog
ICAgICAgICAvLyB3ZSBrZWVwIHRoZSBzaXplIG9mIFN0cnVjdHVyZSBkb3duIGJ5IG5vdCBzdG9y
aW5nIGJvdGguCi0gICAgICAgIHJldHVybiBudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9m
ZnNldCgpLCBtX2lubGluZUNhcGFjaXR5KTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mU2xvdHNG
b3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIGlubGluZUNhcGFjaXR5KCkpOwogICAgIH0KIAogICAg
IGJvb2wgaXNWYWxpZChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90
b3R5cGVDaGFpbiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OwpAQCAtNzkxLDcgKzg3Niw3IEBAIGNs
YXNzIFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIAogICAgIGJvb2wgaXNS
YXJlRGF0YShKU0NlbGwqIGNlbGwpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gY2VsbCAm
JiBjZWxsLT5zdHJ1Y3R1cmVJRCgpICE9IHN0cnVjdHVyZUlEKCk7CisgICAgICAgIHJldHVybiBj
ZWxsICYmIGNlbGwtPnR5cGUoKSA9PSBTdHJ1Y3R1cmVSYXJlRGF0YVR5cGU7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRGV0YWlsc0Z1bmM+CkBAIC04MDIsNDggKzg4Nyw3OSBAQCBj
bGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAKICAgICB2b2lkIHN0
YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIFN0cnVjdHVyZUNoYWlu
KiBjYWNoZWRQcm90b3R5cGVDaGFpbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q2FjaGVkUHJvdG90
eXBlQ2hhaW4oVk0mLCBTdHJ1Y3R1cmVDaGFpbiopOworCisgICAgdm9pZCBzZXRPdXRPZkxpbmVU
eXBlRmxhZ3MoVHlwZUluZm86Ok91dE9mTGluZVR5cGVGbGFncyk7CisgICAgdm9pZCBzZXRDbGFz
c0luZm8oY29uc3QgQ2xhc3NJbmZvKik7CisgICAgdm9pZCBzZXRJbmxpbmVDYXBhY2l0eSh1aW50
OF90KTsKKworICAgIEpTQ2VsbCogY2FjaGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhKCkgY29u
c3QKKyAgICB7CisjaWYgQ1BVKEFERFJFU1M2NCkKKyAgICAgICAgcmV0dXJuIG1faW5saW5lQ2Fw
YWNpdHlBbmRDYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURhdGEucG9pbnRlcigpOworI2Vsc2UK
KyAgICAgICAgcmV0dXJuIG1fY2FjaGVkU3RydWN0dXJlQ2hhaW5PclJhcmVEYXRhLmdldCgpOwor
I2VuZGlmCisgICAgfQorCiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19tYXhUcmFuc2l0aW9u
TGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19tYXhUcmFuc2l0aW9uTGVu
Z3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAKICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIHBy
b3Blcmx5IGFsaWduZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgJ1N0cnVjdHVyZScKICAgICAv
LyBwYXJ0IG9mIHRoZSBvYmplY3QuCiAgICAgU3RydWN0dXJlSURCbG9iIG1fYmxvYjsKLSAgICBU
eXBlSW5mbzo6T3V0T2ZMaW5lVHlwZUZsYWdzIG1fb3V0T2ZMaW5lVHlwZUZsYWdzOwotCi0gICAg
dWludDhfdCBtX2lubGluZUNhcGFjaXR5OwotCi0gICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7
Ci0KLSAgICB1aW50MzJfdCBtX2JpdEZpZWxkOwotCi0gICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFs
T2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9wcm90
b3R5cGU7Ci0gICAgbXV0YWJsZSBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2FjaGVk
UHJvdG90eXBlQ2hhaW47Ci0KLSAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3ByZXZpb3VzT3JS
YXJlRGF0YTsKIAorICAgIC8vIFRoZSBwcm9wZXJ0eSB0YWJsZSBwb2ludGVyIHNob3VsZCBiZSBh
Y2Nlc3NlZCB0aHJvdWdoIGVuc3VyZVByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBtX3Byb3Bl
cnR5VGFibGVVbnNhZmUgZmllbGQgcGFydCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJl
YWQuCisgICAgLy8gRHVyaW5nIGEgSGVhcCBTbmFwc2hvdCBHQyB3ZSBhdm9pZCBjbGVhcmluZyB0
aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0byB1c2UuCisjaWYgQ1BVKEFERFJFU1M2NCkKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBjbGFzc0luZm9NYXNrID0gQ29tcGFj
dFBvaW50ZXJUdXBsZTxjb25zdCBDbGFzc0luZm8qLCB1aW50MTZfdD46OnBvaW50ZXJNYXNrOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IGNhY2hlZFByb3RvdHlwZUNoYWluT3JSYXJl
RGF0YU1hc2sgPSBDb21wYWN0UG9pbnRlclR1cGxlPEpTQ2VsbCosIHVpbnQxNl90Pjo6cG9pbnRl
ck1hc2s7Citwcml2YXRlOgorICAgIC8vIFN0cnVjdHVyZSBpcyBvbmUgb2YgdGhlIG1vc3QgZnJl
cXVlbnRseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmUuIE1vcmVvdmVyLCBTdHJ1Y3R1cmUgdGVu
ZHMgdG8gYmUgYWxpdmUgbG9uZyEKKyAgICAvLyBUaGlzIG1vdGl2YXRlcyBleHRyYSBjb21wbGlj
YXRlZCBoYWNrIHdoaWNoIG9wdGltaXplcyBzaXplb2YoU3RydWN0dXJlKS4KKyAgICAvLworICAg
IC8vIFdlIGNvbWJpbmUgMTZiaXQgZGF0YSBhbmQgNjRiaXQgcG9pbnRlciBpbnRvIG9uZSBwb2lu
dGVyLXNpemUgZmllbGQgdG8gKDEpIHNhdmUgbWVtb3J5IHdoaWxlICgyKSBub3QgbG9zaW5nIGF0
b21pYyBsb2FkL3N0b3JlLgorICAgIC8vIFRoZSBrZXkgaGVyZSBpcyBhbmFseXppbmcgZGF0YSBh
Y2Nlc3MgcGF0dGVybnMgY2FyZWZ1bGx5LiBUaGV5IGFyZSBjYXRlZ29yaWV6ZWQgaW50byB0aHJl
ZSB0eXBlcy4KKyAgICAvLyAgICAgMS4gSW1tdXRhYmxlQWZ0ZXJDb25zdHJ1Y3Rpb24KKyAgICAv
LyAgICAgMi4gTXV0YWJsZUZyb21BbnlUaHJlYWQKKyAgICAvLyAgICAgMy4gTXV0YWJsZUZyb21N
YWluVGhyZWFkCisgICAgLy8gIFdlIGFzc3VtZSB0aGF0IGxvYWRpbmcgaGFwcGVucyBmcm9tIGFu
eSB0aHJlYWRzLiBVbmRlciB0aGlzIGFzc3VtcHRpb24sIE11dGFibGVGcm9tQW55VGhyZWFkICsg
KE11dGFibGVGcm9tTWFpblRocmVhZCAvIE11dGFibGVGcm9tQW55VGhyZWFkKSBpcyB0aGUgcGFp
ciB3aGljaCBpcyByYWN5LgorICAgIC8vICBPdGhlciBwYWlycyB3b3JrcyB3ZWxsLiBXZSBjYXJl
ZnVsbHkgcHV0IGFzc2VydGlvbnMgdG8gc2V0dGVycywgYW5hbHl6ZSBhY2Nlc3MgcGF0dGVybnMg
YW5kIHBpY2sgYXBwcm9wcmlhdGUgcGFpcnMgaW4gU3RydWN0dXJlIGZpZWxkcy4KKyAgICBDb21w
YWN0UG9pbnRlclR1cGxlPFByb3BlcnR5VGFibGUqLCBUeXBlSW5mbzo6T3V0T2ZMaW5lVHlwZUZs
YWdzPiBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmU7IC8vIEltbXV0
YWJsZUFmdGVyQ29uc3RydWN0aW9uKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKSBhbmQgTXV0YWJsZUZy
b21BbnlUaHJlYWQobV9wcm9wZXJ0eVRhYmxlVW5zYWZlKS4KKyAgICBDb21wYWN0UmVmUHRyVHVw
bGU8VW5pcXVlZFN0cmluZ0ltcGwsIHVpbnQxNl90PiBtX21heE9mZnNldEFuZFRyYW5zaXRpb25Q
cm9wZXJ0eU5hbWU7IC8vIE11dGFibGVGcm9tTWFpblRocmVhZChtX21heE9mZnNldCkgYW5kIE11
dGFibGVGcm9tTWFpblRocmVhZChtX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpLgorICAgIENvbXBh
Y3RQb2ludGVyVHVwbGU8Y29uc3QgQ2xhc3NJbmZvKiwgdWludDE2X3Q+IG1fdHJhbnNpdGlvbk9m
ZnNldEFuZENsYXNzSW5mbzsgLy8gTXV0YWJsZUZyb21NYWluVGhyZWFkKG1fdHJhbnNpdGlvbk9m
ZnNldCkgYW5kIEltbXV0YWJsZUFmdGVyQ29uc3RydWN0aW9uKG1fY2xhc3NJbmZvKS4KKyAgICBD
b21wYWN0UG9pbnRlclR1cGxlPEpTQ2VsbCosIHVpbnQxNl90PiBtX2lubGluZUNhcGFjaXR5QW5k
Q2FjaGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhOyAvLyBJbW11dGFibGVBZnRlckNvbnN0cnVj
dGlvbihtX2lubGluZUNhcGFjaXR5KSBhbmQgTXV0YWJsZUZyb21NYWluVGhyZWFkKG1fY2FjaGVk
UHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhKS4KKyAgICBDb21wYWN0UG9pbnRlclR1cGxlPFVuaXF1
ZWRTdHJpbmdJbXBsKiwgdWludDE2X3Q+IG1fcHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRpZXM7
IC8vIE11dGFibGVGcm9tTWFpblRocmVhZChtX3Byb3BlcnR5SGFzaCkgYW5kIE11dGFibGVGcm9t
TWFpblRocmVhZChtX3NlZW5Qcm9wZXJ0aWVzKS4KKyNlbHNlCisgICAgVHlwZUluZm86Ok91dE9m
TGluZVR5cGVGbGFncyBtX291dE9mTGluZVR5cGVGbGFncyB7IDAgfTsKKyAgICB1aW50OF90IG1f
aW5saW5lQ2FwYWNpdHkgeyAwIH07CisgICAgdWludDMyX3QgbV9wcm9wZXJ0eUhhc2ggeyAwIH07
CisgICAgdWludDE2X3QgbV90cmFuc2l0aW9uT2Zmc2V0IHsgMCB9OworICAgIHVpbnQxNl90IG1f
bWF4T2Zmc2V0IHsgMCB9OworICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3Bl
cnR5VGFibGVVbnNhZmU7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxw
dHIgfTsKKyAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2NhY2hlZFByb3RvdHlwZUNoYWluT3JS
YXJlRGF0YTsKKyAgICB1aW50cHRyX3QgbV9zZWVuUHJvcGVydGllcyB7IDAgfTsKICAgICBSZWZQ
dHI8VW5pcXVlZFN0cmluZ0ltcGw+IG1fdHJhbnNpdGlvblByb3BlcnR5TmFtZTsKLQotICAgIGNv
bnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87CisjZW5kaWYKKyAgICBTdHJ1Y3R1cmVJRCBtX3By
ZXZpb3VzSUQgeyAwIH07CisgICAgdWludDMyX3QgbV9iaXRGaWVsZCB7IDAgfTsKIAogICAgIFN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKLQotICAgIC8vIFNob3Vs
ZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIGVuc3VyZVByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBp
dCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCi0gICAgLy8gRHVyaW5nIGEgSGVh
cCBTbmFwc2hvdCBHQyB3ZSBhdm9pZCBjbGVhcmluZyB0aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0
byB1c2UuCi0gICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVu
c2FmZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0Owor
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3Byb3RvdHlwZTsKIAogICAgIG11dGFibGUgSW5s
aW5lV2F0Y2hwb2ludFNldCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0OwogCiAgICAgQ09NUElM
RV9BU1NFUlQoZmlyc3RPdXRPZkxpbmVPZmZzZXQgPCAyNTYsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
X2ZpdHMpOwogCi0gICAgdWludDE2X3QgbV90cmFuc2l0aW9uT2Zmc2V0OwotICAgIHVpbnQxNl90
IG1fbWF4T2Zmc2V0OwotCi0gICAgdWludDMyX3QgbV9wcm9wZXJ0eUhhc2g7Ci0gICAgVGlueUJs
b29tRmlsdGVyIG1fc2VlblByb3BlcnRpZXM7Ci0KICAgICBmcmllbmQgY2xhc3MgVk1JbnNwZWN0
b3I7CiAgICAgZnJpZW5kIGNsYXNzIEpTRG9sbGFyVk1IZWxwZXI7CiB9OworI2lmIENQVShBRERS
RVNTNjQpCitzdGF0aWNfYXNzZXJ0KHNpemVvZihTdHJ1Y3R1cmUpIDw9IDk2LCAiRG8gbm90IGlu
Y3JlYXNlIHNpemVvZihTdHJ1Y3R1cmUpLCBpdCBpbW1lZGlhdGVseSBjYXVzZXMgbWVtb3J5IHJl
Z3Jlc3Npb24iKTsKKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAppbmRleCAwY2Q5OGQ1MmFj
YzdmNzE0YzA1YjE1M2UwODEzOWU0OTFjZDhjZjhjLi5kNTdmYjY4ZWY4OTBlYWM0NmVhNmRjY2Ji
YzAzMjhhYjIwOTZiZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oCkBAIC0xNDQsNyArMTQ0LDcgQEAgQUxXQVlTX0lOTElORSBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIHUKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0
cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAKLSAgICBpZiAobV9zZWVuUHJv
cGVydGllcy5ydWxlT3V0KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHByb3BlcnR5TmFtZS51aWQo
KSkpKQorICAgIGlmIChydWxlT3V0VW5zZWVuUHJvcGVydHlIYXNoKHByb3BlcnR5TmFtZS51aWQo
KSkpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCiAgICAgUHJvcGVydHlUYWJsZSog
cHJvcGVydHlUYWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKQEAgLTE1
OSwyOSArMTU5LDYwIEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpn
ZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1CiAgICAgcmV0dXJuIGVudHJ5
LT5vZmZzZXQ7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6cnVsZU91dFVuc2VlblByb3Bl
cnR5SGFzaChVbmlxdWVkU3RyaW5nSW1wbCogdWlkKSBjb25zdAoreworICAgIEFTU0VSVCh1aWQp
OworICAgIHVpbnRwdHJfdCBwb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odWlkKTsK
KyAgICBpZiAoKHNlZW5Qcm9wZXJ0aWVzKCkgJiBwb2ludGVyKSAhPSBwb2ludGVyKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSB1aW50cHRyX3Qg
U3RydWN0dXJlOjpzZWVuUHJvcGVydGllcygpIGNvbnN0Cit7CisjaWYgQ1BVKEFERFJFU1M2NCkK
KyAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9wcm9wZXJ0eUhhc2hBbmRTZWVu
UHJvcGVydGllcy5wb2ludGVyKCkpOworI2Vsc2UKKyAgICByZXR1cm4gbV9zZWVuUHJvcGVydGll
czsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5SGFzaEFu
ZFNlZW5Qcm9wZXJ0eSh1bnNpZ25lZCBoYXNoLCBVbmlxdWVkU3RyaW5nSW1wbCogcG9pbnRlcikK
K3sKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgIG1fcHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRp
ZXMuc2V0VHlwZShtX3Byb3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0aWVzLnR5cGUoKSBeIGhhc2gp
OworICAgIG1fcHJvcGVydHlIYXNoQW5kU2VlblByb3BlcnRpZXMuc2V0UG9pbnRlcihiaXR3aXNl
X2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3Byb3Bl
cnR5SGFzaEFuZFNlZW5Qcm9wZXJ0aWVzLnBvaW50ZXIoKSkgfCBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pihwb2ludGVyKSkpOworI2Vsc2UKKyAgICBtX3Byb3BlcnR5SGFzaCA9IG1fcHJvcGVydHlI
YXNoIF4gaGFzaDsKKyAgICBtX3NlZW5Qcm9wZXJ0aWVzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4ocG9pbnRlcikgfCBtX3NlZW5Qcm9wZXJ0aWVzOworI2VuZGlmCit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CiB2b2lkIFN0cnVjdHVyZTo6Zm9yRWFjaFByb3BlcnR5Q29uY3VycmVu
dGx5KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgVmVjdG9yPFN0cnVjdHVyZSosIDg+
IHN0cnVjdHVyZXM7CiAgICAgU3RydWN0dXJlKiB0YWJsZVN0cnVjdHVyZTsKICAgICBQcm9wZXJ0
eVRhYmxlKiB0YWJsZTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIAotICAgIGZpbmRT
dHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHRhYmxlU3RydWN0
dXJlLCB0YWJsZSk7CisgICAgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24o
dm0sIHN0cnVjdHVyZXMsIHRhYmxlU3RydWN0dXJlLCB0YWJsZSk7CiAKICAgICBIYXNoU2V0PFVu
aXF1ZWRTdHJpbmdJbXBsKj4gc2VlblByb3BlcnRpZXM7CiAKLSAgICBmb3IgKGF1dG8qIHN0cnVj
dHVyZSA6IHN0cnVjdHVyZXMpIHsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blByb3BlcnR5TmFtZSB8fCBzZWVuUHJvcGVydGllcy5jb250YWlucyhzdHJ1Y3R1cmUtPm1fdHJh
bnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSkpCisgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA6IHN0cnVjdHVyZXMpIHsKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHRyYW5zaXRpb25Q
cm9wZXJ0eU5hbWUgPSBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUoKTsKKyAgICAg
ICAgaWYgKCF0cmFuc2l0aW9uUHJvcGVydHlOYW1lIHx8IHNlZW5Qcm9wZXJ0aWVzLmNvbnRhaW5z
KHRyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgc2VlblByb3BlcnRpZXMuYWRkKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1l
LmdldCgpKTsKKyAgICAgICAgc2VlblByb3BlcnRpZXMuYWRkKHRyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUpOwogCiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRp
b24oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghZnVuY3RvcihQcm9w
ZXJ0eU1hcEVudHJ5KHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVy
dHlBdHRyaWJ1dGVzKCkpKSkgeworICAgICAgICBpZiAoIWZ1bmN0b3IoUHJvcGVydHlNYXBFbnRy
eSh0cmFuc2l0aW9uUHJvcGVydHlOYW1lLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwg
c3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkgewogICAgICAgICAg
ICAgaWYgKHRhYmxlKQotICAgICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5tX2xvY2sudW5s
b2NrKCk7CisgICAgICAgICAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPmNlbGxMb2NrKCkudW5sb2Nr
KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTIsMTEgKzIy
MywxMSBAQCB2b2lkIFN0cnVjdHVyZTo6Zm9yRWFjaFByb3BlcnR5Q29uY3VycmVudGx5KGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
ICAgIGlmICghZnVuY3RvcihlbnRyeSkpIHsKLSAgICAgICAgICAgICAgICB0YWJsZVN0cnVjdHVy
ZS0+bV9sb2NrLnVubG9jaygpOworICAgICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5jZWxs
TG9jaygpLnVubG9jaygpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICB0YWJsZVN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAg
ICAgICB0YWJsZVN0cnVjdHVyZS0+Y2VsbExvY2soKS51bmxvY2soKTsKICAgICB9CiB9CiAKQEAg
LTIzNSw3ICsyNjYsOCBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6Om1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplYwogCiBpbmxpbmUgYm9vbCBT
dHJ1Y3R1cmU6OnRyYW5zaXRpdmVseVRyYW5zaXRpb25lZEZyb20oU3RydWN0dXJlKiBzdHJ1Y3R1
cmVUb0ZpbmQpCiB7Ci0gICAgZm9yIChTdHJ1Y3R1cmUqIGN1cnJlbnQgPSB0aGlzOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+cHJldmlvdXNJRCgpKSB7CisgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKKyAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9IHRoaXM7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBjdXJyZW50LT5wcmV2aW91c0lEKHZtKSkgewogICAgICAgICBpZiAoY3VycmVudCA9PSBz
dHJ1Y3R1cmVUb0ZpbmQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zMDIs
MTUgKzMzNCw0MSBAQCBpbmxpbmUgSlNWYWx1ZSBTdHJ1Y3R1cmU6OnByb3RvdHlwZUZvckxvb2t1
cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbAogICAgIHJldHVybiBwcm90b3R5
cGVGb3JMb29rdXBQcmltaXRpdmVJbXBsKGdsb2JhbE9iamVjdCwgdGhpcyk7CiB9CiAKK2lubGlu
ZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpjYWNoZWRQcm90b3R5cGVDaGFpbigpIGNvbnN0
Cit7CisgICAgSlNDZWxsKiBjZWxsID0gY2FjaGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhKCk7
CisgICAgaWYgKGlzUmFyZURhdGEoY2VsbCkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8U3RydWN0
dXJlUmFyZURhdGEqPihjZWxsKS0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKTsKKyAgICByZXR1cm4g
anNDYXN0PFN0cnVjdHVyZUNoYWluKj4oY2VsbCk7Cit9CisKK2lubGluZSB2b2lkIFN0cnVjdHVy
ZTo6c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4oVk0mIHZtLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4p
Cit7CisgICAgQVNTRVJUKGlzT2JqZWN0KCkpOworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRo
cmVhZCgpICYmICFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSk7CisgICAgSlNDZWxsKiBjZWxsID0g
Y2FjaGVkUHJvdG90eXBlQ2hhaW5PclJhcmVEYXRhKCk7CisgICAgaWYgKGlzUmFyZURhdGEoY2Vs
bCkpIHsKKyAgICAgICAganNDYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCktPnNldENhY2hl
ZFByb3RvdHlwZUNoYWluKHZtLCBjaGFpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYg
Q1BVKEFERFJFU1M2NCkKKyAgICBtX2lubGluZUNhcGFjaXR5QW5kQ2FjaGVkUHJvdG90eXBlQ2hh
aW5PclJhcmVEYXRhLnNldFBvaW50ZXIoY2hhaW4pOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVy
KHRoaXMsIGNoYWluKTsKKyNlbHNlCisgICAgbV9jYWNoZWRQcm90b3R5cGVDaGFpbk9yUmFyZURh
dGEuc2V0KHZtLCB0aGlzLCBjaGFpbik7CisjZW5kaWYKK30KKwogaW5saW5lIFN0cnVjdHVyZUNo
YWluKiBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UpIGNvbnN0CiB7CisgICAgQVNTRVJUKHRoaXMtPmlz
T2JqZWN0KCkpOwogICAgIEFTU0VSVChiYXNlLT5zdHJ1Y3R1cmUodm0pID09IHRoaXMpOwogICAg
IC8vIFdlIGNhY2hlIG91ciBwcm90b3R5cGUgY2hhaW4gc28gb3VyIGNsaWVudHMgY2FuIHNoYXJl
IGl0LgotICAgIGlmICghaXNWYWxpZChnbG9iYWxPYmplY3QsIG1fY2FjaGVkUHJvdG90eXBlQ2hh
aW4uZ2V0KCksIGJhc2UpKSB7CisgICAgaWYgKCFpc1ZhbGlkKGdsb2JhbE9iamVjdCwgY2FjaGVk
UHJvdG90eXBlQ2hhaW4oKSwgYmFzZSkpIHsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBw
cm90b3R5cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0LCBiYXNlKTsKLSAgICAgICAgbV9jYWNoZWRQ
cm90b3R5cGVDaGFpbi5zZXQodm0sIHRoaXMsIFN0cnVjdHVyZUNoYWluOjpjcmVhdGUodm0sIHBy
b3RvdHlwZS5pc051bGwoKSA/IG51bGxwdHIgOiBhc09iamVjdChwcm90b3R5cGUpKSk7CisgICAg
ICAgIGNvbnN0X2Nhc3Q8U3RydWN0dXJlKj4odGhpcyktPnNldENhY2hlZFByb3RvdHlwZUNoYWlu
KHZtLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlKHZtLCBwcm90b3R5cGUuaXNOdWxsKCkgPyBudWxs
cHRyIDogYXNPYmplY3QocHJvdG90eXBlKSkpOwogICAgIH0KLSAgICByZXR1cm4gbV9jYWNoZWRQ
cm90b3R5cGVDaGFpbi5nZXQoKTsKKyAgICByZXR1cm4gY2FjaGVkUHJvdG90eXBlQ2hhaW4oKTsK
IH0KIAogaW5saW5lIFN0cnVjdHVyZUNoYWluKiBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlKSBjb25zdApAQCAtMzUw
LDcgKzQwOCw3IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6ZGlkUmVwbGFjZVByb3BlcnR5KFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKIAogaW5saW5lIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6
cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBDb25jdXJyZW50
SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygpKTsKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwpAQCAt
MzcxLDE2ICs0MjksMTYgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeShQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmwKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgCiAgICAgdW5zaWduZWQgdG90YWxTaXplID0gcHJvcGVydHlUYWJsZS0+cHJv
cGVydHlTdG9yYWdlU2l6ZSgpOwotICAgIHVuc2lnbmVkIGlubGluZU92ZXJmbG93QWNjb3JkaW5n
VG9Ub3RhbFNpemUgPSB0b3RhbFNpemUgPCBtX2lubGluZUNhcGFjaXR5ID8gMCA6IHRvdGFsU2l6
ZSAtIG1faW5saW5lQ2FwYWNpdHk7CisgICAgdW5zaWduZWQgaW5saW5lT3ZlcmZsb3dBY2NvcmRp
bmdUb1RvdGFsU2l6ZSA9IHRvdGFsU2l6ZSA8IGlubGluZUNhcGFjaXR5KCkgPyAwIDogdG90YWxT
aXplIC0gaW5saW5lQ2FwYWNpdHkoKTsKIAogICAgIGF1dG8gZmFpbCA9IFsmXSAoY29uc3QgY2hh
ciogZGVzY3JpcHRpb24pIHsKICAgICAgICAgZGF0YUxvZygiRGV0ZWN0ZWQgb2Zmc2V0IGluY29u
c2lzdGVuY3k6ICIsIGRlc2NyaXB0aW9uLCAiIVxuIik7CiAgICAgICAgIGRhdGFMb2coInRoaXMg
PSAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygidHJhbnNpdGlv
bk9mZnNldCA9ICIsIHRyYW5zaXRpb25PZmZzZXQoKSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2co
Im1heE9mZnNldCA9ICIsIG1heE9mZnNldCgpLCAiXG4iKTsKLSAgICAgICAgZGF0YUxvZygibV9p
bmxpbmVDYXBhY2l0eSA9ICIsIG1faW5saW5lQ2FwYWNpdHksICJcbiIpOworICAgICAgICBkYXRh
TG9nKCJtX2lubGluZUNhcGFjaXR5ID0gIiwgaW5saW5lQ2FwYWNpdHkoKSwgIlxuIik7CiAgICAg
ICAgIGRhdGFMb2coInByb3BlcnR5VGFibGUgPSAiLCBSYXdQb2ludGVyKHByb3BlcnR5VGFibGUp
LCAiXG4iKTsKLSAgICAgICAgZGF0YUxvZygibnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldCA9ICIs
IG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkp
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygibnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldCA9ICIs
IG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIGlubGluZUNhcGFjaXR5KCkp
LCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygidG90YWxTaXplID0gIiwgdG90YWxTaXplLCAiXG4i
KTsKICAgICAgICAgZGF0YUxvZygiaW5saW5lT3ZlcmZsb3dBY2NvcmRpbmdUb1RvdGFsU2l6ZSA9
ICIsIGlubGluZU92ZXJmbG93QWNjb3JkaW5nVG9Ub3RhbFNpemUsICJcbiIpOwogICAgICAgICBk
YXRhTG9nKCJudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTWF4T2Zmc2V0ID0gIiwgbnVtYmVyT2ZP
dXRPZkxpbmVTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSksICJcbiIpOwpAQCAtMzg4LDcg
KzQ0Niw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsCiAgICAgICAgIFVOUkVBQ0hBQkxFX0ZP
Ul9QTEFURk9STSgpOwogICAgIH07CiAgICAgCi0gICAgaWYgKG51bWJlck9mU2xvdHNGb3JNYXhP
ZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpICE9IHRvdGFsU2l6ZSkKKyAgICBp
ZiAobnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZzZXQoKSwgaW5saW5lQ2FwYWNpdHko
KSkgIT0gdG90YWxTaXplKQogICAgICAgICBmYWlsKCJudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0
IGRvZXNuJ3QgbWF0Y2ggdG90YWxTaXplIik7CiAgICAgaWYgKGlubGluZU92ZXJmbG93QWNjb3Jk
aW5nVG9Ub3RhbFNpemUgIT0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvck1heE9mZnNldChtYXhP
ZmZzZXQoKSkpCiAgICAgICAgIGZhaWwoImlubGluZU92ZXJmbG93QWNjb3JkaW5nVG9Ub3RhbFNp
emUgZG9lc24ndCBtYXRjaCBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTWF4T2Zmc2V0Iik7CkBA
IC0zOTgsNyArNDU2LDcgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeShQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmwKIAogQUxXQVlTX0lOTElO
RSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0CiB7Ci0gICAg
UHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKKyAg
ICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJsZVVuc2FmZU9yTnVs
bCgpOwogCiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKSB7CiAgICAgICAgIEFTU0VSVCghaXNQaW5u
ZWRQcm9wZXJ0eVRhYmxlKCkpOwpAQCAtNDM5LDcgKzQ5Nyw3IEBAIGlubGluZSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkCiB7CiAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxl
KHZtKTsKIAotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5o
ZWFwKTsKKyAgICBHQ1NhZmVDb25jdXJyZW50SlNDZWxsTG9ja2VyIGxvY2tlcihjZWxsTG9jaygp
LCB2bS5oZWFwKTsKIAogICAgIHN3aXRjaCAoc2hvdWxkUGluKSB7CiAgICAgY2FzZSBTaG91bGRQ
aW46OlllczoKQEAgLTQ2MCwxMCArNTE4LDkgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQKIAog
ICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwogCi0gICAgUHJvcGVydHlPZmZzZXQg
bmV3T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CisgICAgUHJv
cGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQoaW5saW5lQ2FwYWNpdHko
KSk7CiAKLSAgICBtX3Byb3BlcnR5SGFzaCA9IG1fcHJvcGVydHlIYXNoIF4gcmVwLT5leGlzdGlu
Z1N5bWJvbEF3YXJlSGFzaCgpOwotICAgIG1fc2VlblByb3BlcnRpZXMuYWRkKGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHJlcCkpOworICAgIGFkZFByb3BlcnR5SGFzaEFuZFNlZW5Qcm9wZXJ0eShy
ZXAtPmV4aXN0aW5nU3ltYm9sQXdhcmVIYXNoKCksIHJlcCk7CiAKICAgICBhdXRvIHJlc3VsdCA9
IHRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcykp
OwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuc2Vjb25kKTsKQEAgLTQ4Miw3ICs1
MzksNyBAQCB0ZW1wbGF0ZTxTdHJ1Y3R1cmU6OlNob3VsZFBpbiBzaG91bGRQaW4sIHR5cGVuYW1l
IEZ1bmM+CiBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIFByb3Bl
cnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7Ci0gICAgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0NlbGxMb2NrZXIgbG9ja2VyKGNlbGxMb2NrKCksIHZtLmhlYXApOwogCiAgICAgc3dp
dGNoIChzaG91bGRQaW4pIHsKICAgICBjYXNlIFNob3VsZFBpbjo6WWVzOgpAQCAtNTMyLDcgKzU4
OSw3IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0CiB7CiAgICAgQVNTRVJUKGlzVW5jYWNoZWFi
bGVEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSk7Ci0g
ICAgQVNTRVJUKHByb3BlcnR5VGFibGVPck51bGwoKSk7CisgICAgQVNTRVJUKHByb3BlcnR5VGFi
bGVVbnNhZmVPck51bGwoKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46Olll
cz4odm0sIHByb3BlcnR5TmFtZSwgZnVuYyk7CiB9CkBAIC01NTAsMTUgKzYwNyw1OSBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpzZXRHbG9iYWxPYmplY3QoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpzZXRQ
cm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7CisjaWYgQ1BVKEFE
RFJFU1M2NCkKKyAgICBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUu
c2V0UG9pbnRlcih0YWJsZSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgdGFibGUp
OworI2Vsc2UKICAgICBtX3Byb3BlcnR5VGFibGVVbnNhZmUuc2V0TWF5QmVOdWxsKHZtLCB0aGlz
LCB0YWJsZSk7CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6Y2xl
YXJQcm9wZXJ0eVRhYmxlKCkKK3sKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgIG1fb3V0T2ZMaW5l
VHlwZUZsYWdzQW5kUHJvcGVydHlUYWJsZVVuc2FmZS5zZXRQb2ludGVyKG51bGxwdHIpOworI2Vs
c2UKKyAgICBtX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKyNlbmRpZgorfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlOjpzZXRPdXRPZkxpbmVUeXBlRmxhZ3MoVHlwZUluZm86
Ok91dE9mTGluZVR5cGVGbGFncyBvdXRPZkxpbmVUeXBlRmxhZ3MpCit7CisjaWYgQ1BVKEFERFJF
U1M2NCkKKyAgICBtX291dE9mTGluZVR5cGVGbGFnc0FuZFByb3BlcnR5VGFibGVVbnNhZmUuc2V0
VHlwZShvdXRPZkxpbmVUeXBlRmxhZ3MpOworI2Vsc2UKKyAgICBtX291dE9mTGluZVR5cGVGbGFn
cyA9IG91dE9mTGluZVR5cGVGbGFnczsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
U3RydWN0dXJlOjpzZXRJbmxpbmVDYXBhY2l0eSh1aW50OF90IGlubGluZUNhcGFjaXR5KQorewor
I2lmIENQVShBRERSRVNTNjQpCisgICAgbV9pbmxpbmVDYXBhY2l0eUFuZENhY2hlZFByb3RvdHlw
ZUNoYWluT3JSYXJlRGF0YS5zZXRUeXBlKGlubGluZUNhcGFjaXR5KTsKKyNlbHNlCisgICAgbV9p
bmxpbmVDYXBhY2l0eSA9IGlubGluZUNhcGFjaXR5OworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBTdHJ1Y3R1cmU6OnNldENsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bykKK3sKKyNpZiBDUFUoQUREUkVTUzY0KQorICAgIG1fdHJhbnNpdGlvbk9mZnNldEFuZENsYXNz
SW5mby5zZXRQb2ludGVyKGNsYXNzSW5mbyk7CisjZWxzZQorICAgIG1fY2xhc3NJbmZvID0gY2xh
c3NJbmZvOworI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldFBy
ZXZpb3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoaGFzUmFy
ZURhdGEoKSkKLSAgICAgICAgcmFyZURhdGEoKS0+c2V0UHJldmlvdXNJRCh2bSwgc3RydWN0dXJl
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldCh2bSwgdGhpcywg
c3RydWN0dXJlKTsKKyAgICBtX3ByZXZpb3VzSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7CisgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKK30KKworaW5saW5lIHZvaWQgU3Ry
dWN0dXJlOjpjbGVhclByZXZpb3VzSUQoKQoreworICAgIG1fcHJldmlvdXNJRCA9IDA7CiB9CiAK
IEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OnNob3VsZENvbnZlcnRUb1BvbHlQcm90byhj
b25zdCBTdHJ1Y3R1cmUqIGEsIGNvbnN0IFN0cnVjdHVyZSogYikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAppbmRleCBiNWE5OGRi
ZTRjOWIzMmJhZmZhNmY0OGMyYmNlNDcwNmEwMTEwNDJkLi5hNDAyOTRkZDE0MTBjYTFkY2Q5OWZi
YTk3YzEzZDIxYzUxYWJlZGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCkBAIC00MCwxMiArNDAsMTIgQEAgY29uc3QgQ2xh
c3NJbmZvIFN0cnVjdHVyZVJhcmVEYXRhOjpzX2luZm8gPSB7ICJTdHJ1Y3R1cmVSYXJlRGF0YSIs
IG51bGxwdHIsIG51bGwKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiB7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhTdHJ1Y3R1cmVSYXJlRGF0YVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKIH0KIAotU3RydWN0dXJlUmFyZURhdGEqIFN0cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQorU3RydWN0dXJlUmFyZURhdGEqIFN0cnVjdHVyZVJh
cmVEYXRhOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pCiB7Ci0gICAgU3Ry
dWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3Ry
dWN0dXJlUmFyZURhdGE+KHZtLmhlYXApKSBTdHJ1Y3R1cmVSYXJlRGF0YSh2bSwgcHJldmlvdXMp
OworICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFN0cnVjdHVyZVJhcmVEYXRhPih2bS5oZWFwKSkgU3RydWN0dXJlUmFyZURhdGEodm0s
IGNoYWluKTsKICAgICByYXJlRGF0YS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBy
YXJlRGF0YTsKIH0KQEAgLTU1LDEzICs1NSwxMyBAQCB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpk
ZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+
KGNlbGwpLT5TdHJ1Y3R1cmVSYXJlRGF0YTo6flN0cnVjdHVyZVJhcmVEYXRhKCk7CiB9CiAKLVN0
cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYgdm0sIFN0cnVjdHVyZSogcHJl
dmlvdXMpCitTdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJlUmFyZURhdGEoVk0mIHZtLCBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4pCiAgICAgOiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVJhcmVEYXRh
U3RydWN0dXJlLmdldCgpKQogICAgICwgbV9tYXhPZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAs
IG1fdHJhbnNpdGlvbk9mZnNldChpbnZhbGlkT2Zmc2V0KQogewotICAgIGlmIChwcmV2aW91cykK
LSAgICAgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHByZXZpb3VzKTsKKyAgICBpZiAoY2hh
aW4pCisgICAgICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0KHZtLCB0aGlzLCBjaGFpbik7
CiB9CiAKIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBTdHJ1Y3R1cmVS
YXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9wcmV2aW91cyk7CisgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbik7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZCh0aGlzT2JqZWN0LT5vYmplY3RUb1N0cmluZ1ZhbHVlKCkpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcik7CiAgICAg
YXV0byogY2FjaGVkT3duS2V5cyA9IHRoaXNPYmplY3QtPm1fY2FjaGVkT3duS2V5cy51bnZhbGlk
YXRlZEdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmgKaW5kZXggMDdlZDkwNGRlNzhkN2Q0ODk1NjBhZTg4NGRjOWJmOTgxNGRlMTBl
Mi4uZmU5MDNiYjg3NzhiOTQ2M2ZkOTJmMzAxYmE0MzY1NDNjNjA1Mjc4NCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCkBAIC0zNSw2
ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CitjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKIGNsYXNzIE9iamVj
dFRvU3RyaW5nQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OwogY2xhc3Mg
T2JqZWN0VG9TdHJpbmdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CiAKQEAgLTQ5LDcgKzUw
LDcgQEAgY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAg
ICAgICAgcmV0dXJuICZ2bS5zdHJ1Y3R1cmVSYXJlRGF0YVNwYWNlOwogICAgIH0KIAotICAgIHN0
YXRpYyBTdHJ1Y3R1cmVSYXJlRGF0YSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3Rh
dGljIFN0cnVjdHVyZVJhcmVEYXRhKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmVDaGFpbiopOwogCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC01OCwxMiArNTksMTEgQEAgY2xhc3MgU3Ry
dWN0dXJlUmFyZURhdGEgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90
b3R5cGUpOwogCi0gICAgU3RydWN0dXJlKiBwcmV2aW91c0lEKCkgY29uc3QKKyAgICBTdHJ1Y3R1
cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4oKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fcHJldmlvdXMuZ2V0KCk7CisgICAgICAgIHJldHVybiBtX2NhY2hlZFByb3RvdHlwZUNo
YWluLmdldCgpOwogICAgIH0KLSAgICB2b2lkIHNldFByZXZpb3VzSUQoVk0mLCBTdHJ1Y3R1cmUq
KTsKLSAgICB2b2lkIGNsZWFyUHJldmlvdXNJRCgpOworICAgIHZvaWQgc2V0Q2FjaGVkUHJvdG90
eXBlQ2hhaW4oVk0mLCBTdHJ1Y3R1cmVDaGFpbiopOwogCiAgICAgSlNTdHJpbmcqIG9iamVjdFRv
U3RyaW5nVmFsdWUoKSBjb25zdDsKICAgICB2b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoSlNH
bG9iYWxPYmplY3QqLCBWTSYsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSwgSlNTdHJpbmcqIHZh
bHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKQEAgLTEwMiw5ICsxMDIs
OSBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAg
ICAgdm9pZCBjbGVhck9iamVjdFRvU3RyaW5nVmFsdWUoKTsKIAotICAgIFN0cnVjdHVyZVJhcmVE
YXRhKFZNJiwgU3RydWN0dXJlKik7CisgICAgU3RydWN0dXJlUmFyZURhdGEoVk0mLCBTdHJ1Y3R1
cmVDaGFpbiopOwogCi0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcmV2aW91czsKKyAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW47CiAg
ICAgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiBtX29iamVjdFRvU3RyaW5nVmFsdWU7CiAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBoYXZlIHNvbWUgc3RvcnkgZm9yIGNsZWFyaW5nIHRoZXNlIHByb3Bl
cnR5IG5hbWVzIGNhY2hlcyBpbiBHQy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkyNjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCmluZGV4IGUyZmQ1MDRhYzZiYTE4
ZjRkYjJkN2E5MzEwMDczMGM1MDlhMWZkZTYuLjk0YzQ5YThlNjEwMjRlYjc0MWMxZmFkODAzYTIz
MGI3N2ZlMjMxMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCkBAIC0zMiwxNCArMzIsOSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldFByZXZpb3Vz
SUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIFN0cnVjdHVyZVJh
cmVEYXRhOjpzZXRDYWNoZWRQcm90b3R5cGVDaGFpbihWTSYgdm0sIFN0cnVjdHVyZUNoYWluKiBj
aGFpbikKIHsKLSAgICBtX3ByZXZpb3VzLnNldCh2bSwgdGhpcywgc3RydWN0dXJlKTsKLX0KLQot
aW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmNsZWFyUHJldmlvdXNJRCgpCi17Ci0gICAg
bV9wcmV2aW91cy5jbGVhcigpOworICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0TWF5QmVO
dWxsKHZtLCB0aGlzLCBjaGFpbik7CiB9CiAKIGlubGluZSBKU1N0cmluZyogU3RydWN0dXJlUmFy
ZURhdGE6Om9iamVjdFRvU3RyaW5nVmFsdWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk0uY3BwCmluZGV4IDlhN2Y0OWExNDA1M2EwODI3ZGJhZTM1MmQyOGY1
MDM2MDdmZjZjZDcuLjhiODQ2YmE1OWE1MTNmOGFjNDVjY2Q2MGIyMjcyNTA4ZTFiYjcyYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTI4MDQsNyAr
MjgwNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNEb2xsYXJWTUhlbHBlcjo6
ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpOwogICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVz
OwogCi0gICAgZm9yIChhdXRvKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSgpOyBzdHJ1Y3R1
cmU7IHN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpKQorICAgIGZvciAoYXV0byog
c3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUoKTsgc3RydWN0dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmUtPnByZXZpb3VzSUQodm0pKQogICAgICAgICBzdHJ1Y3R1cmVzLmFwcGVuZChzdHJ1Y3R1
cmUpOwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihB
cnJheVdpdGhDb250aWd1b3VzKSwgMCk7CkBAIC0yODE4LDggKzI4MTgsOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3RydWN0dXJl
VHJhbnNpdGlvbkxpcwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKHN0cnVjdHVyZS0+bWF4
T2Zmc2V0KCkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKQotICAgICAgICAg
ICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwganNTdHJpbmcodm0sIFN0cmluZygqc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpKSk7CisgICAgICAgIGlmIChhdXRvKiB0cmFu
c2l0aW9uUHJvcGVydHlOYW1lID0gc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlOYW1lKCkp
CisgICAgICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc1N0cmluZyh2bSwgU3Ry
aW5nKCp0cmFuc2l0aW9uUHJvcGVydHlOYW1lKSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc051bGwoKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDE2ZWNkYWE2MWU4NmVjODhk
ZTA0NDhlMjlmNjY1ODYwNjZlYzg0YTEuLjJiZmY3MDQwYWFhNTU2YWQwNGVjM2VkZGIyOTRhZDM5
MmYzZTllYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC0yNzUsNyArMjc1LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9p
bnRTbG93KCkKIAogICAgICAgICAgICAgc3RhY2tMaW1pdEdQUklzQ2xvYmJlcmVkID0gdHJ1ZTsK
ICAgICAgICAgICAgIGppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSwgc2NyYXRjaEdQUiwgc2NyYXRj
aEdQUiwgc3RhY2tMaW1pdEdQUik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmVtaXRMb2FkQ2xhc3NJbmZvRnJvbVN0cnVjdHVy
ZShzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKIAogICAgICAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2ZpbmFsPFdlYkFzc2VtYmx5RnVuY3Rpb24+Ojp2YWx1ZSwgIldlIGRvIG5vdCBjaGVj
ayBmb3Igc3VidHlwZXMgYmVsb3ciKTsKICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19maW5hbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj46OnZhbHVlLCAiV2UgZG8gbm90IGNo
ZWNrIGZvciBzdWJ0eXBlcyBiZWxvdyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggODk2ZWFlNmFlMGJkZTdjZGQ0Njk2ODkwZDZlZWUwMjBiM2JjYmNjNy4u
MWE2MTE0MzNkMWNmNDNmYzYxMzEwODdmZTQ2ZjJiMTU4MDc2YmIxYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MTAsNiArNzEwLDcgQEAKIAkJRTM2MEM3
NjUyMTI3Qjg1QzAwQzkwRjBFIC8qIFVuZXhwZWN0ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVW5leHBlY3RlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MzY4OTVDQjIzQTQ0NUNEMDA4REQ0QzggLyogUGFja2VkUmVmLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
Y2tlZFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzY4OTVDQzIzQTQ0NUVF
MDA4REQ0QzggLyogUGFja2VkUmVmUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhY2tlZFJlZlB0ci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzgwMjBEQjI0MDFDMDkzMDAzN0NBOUUg
LyogQ29tcGFjdFJlZlB0clR1cGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RSZWZQdHJUdXBs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzg4ODg2RDIwQzkwOTUxMDBFNjMy
QkMgLyogV29ya2VyUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXb3JrZXJQb29sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4ODg4NkUy
MEM5MDk1MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV29ya2VyUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzhD
NDEyNDFFQjRFMDRDMDA0Mjk1N0QgLyogQ1BVVGltZUNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENQVVRpbWVDb2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC05NTMsNiArOTU0LDcgQEAKIAkJCQkwRjY2QjI4MTFEQzk3QkFCMDA0QTFE
M0YgLyogQ2xvY2tUeXBlLmggKi8sCiAJCQkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENv
bW1hUHJpbnRlci5oICovLAogCQkJCUUzQ0Y3NjkwMjExNUQ2QkEwMDkxREU0OCAvKiBDb21wYWN0
UG9pbnRlclR1cGxlLmggKi8sCisJCQkJRTM4MDIwREIyNDAxQzA5MzAwMzdDQTlFIC8qIENvbXBh
Y3RSZWZQdHJUdXBsZS5oICovLAogCQkJCTBGOEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5jcHAgKi8sCiAJCQkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENv
bXBpbGF0aW9uVGhyZWFkLmggKi8sCiAJCQkJQThBNDcyNzAxNTFBODI1QTAwNDEyM0ZGIC8qIENv
bXBpbGVyLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDg0ZjhiZWQ5MjVlZTg0ZmY2YzRk
OGQ0YjBkNTgwMDM2OTcyYmNkNDEuLmNlMGRhYjY1Yjk4NjUxYzBlY2Q2ZDMxNDNiYzg0Mzg0Yzc2
MWE4MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0zMCw2ICszMCw3IEBAIHNldChXVEZfUFVC
TElDX0hFQURFUlMKICAgICBDbG9ja1R5cGUuaAogICAgIENvbW1hUHJpbnRlci5oCiAgICAgQ29t
cGFjdFBvaW50ZXJUdXBsZS5oCisgICAgQ29tcGFjdFJlZlB0clR1cGxlLmgKICAgICBDb21waWxh
dGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIuaAogICAgIENvbXBsZXRpb25IYW5kbGVyLmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NvbXBhY3RQb2ludGVyVHVwbGUuaCBiL1NvdXJjZS9X
VEYvd3RmL0NvbXBhY3RQb2ludGVyVHVwbGUuaAppbmRleCBiOGYyMDFlYTA5NjU4OWI5MmZmNTA2
YzY0ZjA5OWI4ZDk1Y2JiZTJmLi40NTAzZjA1Y2YwMmEyZWNjMjdjZTgyYmFlN2EzNTBkMzgwZWFm
ZmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmgKKysr
IGIvU291cmNlL1dURi93dGYvQ29tcGFjdFBvaW50ZXJUdXBsZS5oCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNTggKzMyLDcwIEBA
CiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBUaGUgZ29hbCBvZiB0aGlzIGNsYXNzIGlzIGZvbGRp
bmcgYSBwb2ludGVyIGFuZCAxIGJ5dGUgdmFsdWUgaW50byA4IGJ5dGVzIGluIGJvdGggMzJiaXQg
YW5kIDY0Yml0IGFyY2hpdGVjdHVyZXMuCisvLyBUaGUgZ29hbCBvZiB0aGlzIGNsYXNzIGlzIGZv
bGRpbmcgYSBwb2ludGVyIGFuZCAyIGJ5dGVzIHZhbHVlIGludG8gOCBieXRlcyBpbiBib3RoIDMy
Yml0IGFuZCA2NGJpdCBhcmNoaXRlY3R1cmVzLgogLy8gMzJiaXQgYXJjaGl0ZWN0dXJlIGp1c3Qg
aGFzIGEgcGFpciBvZiBieXRlIGFuZCBwb2ludGVyLCB3aGljaCBzaG91bGQgYmUgOCBieXRlcy4K
LS8vIEluIDY0Yml0LCB3ZSB1c2UgdGhlIHVwcGVyIDUgYml0cyBhbmQgbG93ZXIgMyBiaXRzICh6
ZXJvIGR1ZSB0byBhbGlnbm1lbnQpIHNpbmNlIHRoZXNlIGJpdHMgYXJlIHNhZmUgdG8gdXNlIGV2
ZW4KLS8vIHdpdGggNS1sZXZlbCBwYWdlIHRhYmxlcyB3aGVyZSB0aGUgZWZmZWN0aXZlIHBvaW50
ZXIgd2lkdGggaXMgNTdiaXRzLgorLy8gV2UgYXJlIGFzc3VtaW5nIDQ4Yml0IHBvaW50ZXJzIGhl
cmUsIHdoaWNoIGlzIGFsc28gYXNzdW1lZCBpbiBKU1ZhbHVlIGFueXdheS4KIHRlbXBsYXRlPHR5
cGVuYW1lIFBvaW50ZXJUeXBlLCB0eXBlbmFtZSBUeXBlPgogY2xhc3MgQ29tcGFjdFBvaW50ZXJU
dXBsZSBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
c3RhdGljX2Fzc2VydChzaXplb2YoVHlwZSkgPT0gMSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKFR5cGUpIDw9IDIsICIiKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfcG9pbnRl
cjxQb2ludGVyVHlwZT46OnZhbHVlLCAiIik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2lu
dGVncmFsPFR5cGU+Ojp2YWx1ZSB8fCBzdGQ6OmlzX2VudW08VHlwZT46OnZhbHVlLCAiIik7Cisg
ICAgdXNpbmcgVW5zaWduZWRUeXBlID0gc3RkOjptYWtlX3Vuc2lnbmVkX3Q8c3RkOjpjb25kaXRp
b25hbF90PHN0ZDo6aXNfc2FtZV92PFR5cGUsIGJvb2w+LCB1aW50OF90LCBUeXBlPj47CisgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoVW5zaWduZWRUeXBlKSA9PSBzaXplb2YoVHlwZSkpOwogCiAg
ICAgQ29tcGFjdFBvaW50ZXJUdXBsZSgpID0gZGVmYXVsdDsKIAogI2lmIENQVShBRERSRVNTNjQp
CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBlbmNvZGVUeXBlKHVpbnQ4
X3QgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEVuY29kZSA4Yml0IHR5cGUgVVVVREREREQgaW50
byA2NGJpdCBkYXRhIERERERELi41NmJpdC4uVVVVLgotICAgICAgICByZXR1cm4gKHN0YXRpY19j
YXN0PHVpbnQ2NF90Pih0eXBlKSA8PCA1OSkgfCAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHR5cGUp
ID4+IDUpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgZGVjb2RlVHlwZSh1
aW50NjRfdCB2YWx1ZSkKKyAgICBzdGF0aWNfYXNzZXJ0KFdURl9PU19DT05TVEFOVF9FRkZFQ1RJ
VkVfQUREUkVTU19XSURUSCA8PSA0OCk7CisKKyNpZiBDUFUoTElUVExFX0VORElBTikKKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVHlwZSgpCiAgICAgewotICAgICAgICAvLyBEZWNvZGUg
NjRiaXQgZGF0YSBERERERC4uNTZiaXQuLlVVVSBpbnRvIDhiaXQgdHlwZSBVVVVERERERC4KLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCh2YWx1ZSA+PiA1OSkgfCAodmFsdWUg
PDwgNSkpOworICAgICAgICByZXR1cm4gNDggLyA4OwogICAgIH0KKyNlbmRpZgogCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50NjRfdCB0eXBlTWFzayA9IGVuY29kZVR5cGUoVUlOVDhfTUFYKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KDB4RjgwMDAwMDAwMDAwMDAwN1VMTCA9PSB0eXBlTWFzaywgIiIp
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgcG9pbnRlck1hc2sgPSB+dHlwZU1hc2s7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBwb2ludGVyTWFzayA9ICgxVUxMIDw8IDQ4
KSAtIDE7CiAKICAgICBDb21wYWN0UG9pbnRlclR1cGxlKFBvaW50ZXJUeXBlIHBvaW50ZXIsIFR5
cGUgdHlwZSkKLSAgICAgICAgOiBtX2RhdGEoYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihwb2ludGVy
KSB8IGVuY29kZVR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSkpKQorICAgICAgICA6IG1f
ZGF0YShlbmNvZGUocG9pbnRlciwgdHlwZSkpCiAgICAgewotICAgICAgICBBU1NFUlQoKGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4ocG9pbnRlcikgJiAwYjExMSkgPT0gMHgwKTsKKyAgICAgICAgQVNT
RVJUKHRoaXMtPnR5cGUoKSA9PSB0eXBlKTsKKyAgICAgICAgQVNTRVJUKHRoaXMtPnBvaW50ZXIo
KSA9PSBwb2ludGVyKTsKICAgICB9CiAKICAgICBQb2ludGVyVHlwZSBwb2ludGVyKCkgY29uc3Qg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFBvaW50ZXJUeXBlPihtX2RhdGEgJiBwb2ludGVyTWFzayk7
IH0KICAgICB2b2lkIHNldFBvaW50ZXIoUG9pbnRlclR5cGUgcG9pbnRlcikKICAgICB7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoYWxpZ25vZih0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPFBv
aW50ZXJUeXBlPjo6dHlwZSkgPj0gYWxpZ25vZih2b2lkKiksICIiKTsKLSAgICAgICAgQVNTRVJU
KChiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHBvaW50ZXIpICYgMGIxMTEpID09IDB4MCk7Ci0gICAg
ICAgIG1fZGF0YSA9IENvbXBhY3RQb2ludGVyVHVwbGUocG9pbnRlciwgdHlwZSgpKS5tX2RhdGE7
CisgICAgICAgIG1fZGF0YSA9IGVuY29kZShwb2ludGVyLCB0eXBlKCkpOwogICAgIH0KIAotICAg
IFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KGRlY29kZVR5cGUo
bV9kYXRhKSk7IH0KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBkZWNvZGVUeXBlKG1f
ZGF0YSk7IH0KICAgICB2b2lkIHNldFR5cGUoVHlwZSB0eXBlKQogICAgIHsKLSAgICAgICAgbV9k
YXRhID0gQ29tcGFjdFBvaW50ZXJUdXBsZShwb2ludGVyKCksIHR5cGUpLm1fZGF0YTsKKyAgICAg
ICAgbV9kYXRhID0gZW5jb2RlKHBvaW50ZXIoKSwgdHlwZSk7CiAgICAgfQogCisgICAgdWludDY0
X3QgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCiBwcml2YXRlOgorICAgIHN0YXRp
YyBjb25zdGV4cHIgdWludDY0X3QgZW5jb2RlVHlwZShUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PFVuc2lnbmVkVHlwZT4o
dHlwZSkpIDw8IDQ4OworICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIFR5cGUgZGVjb2RlVHlw
ZSh1aW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBl
PihzdGF0aWNfY2FzdDxVbnNpZ25lZFR5cGU+KHZhbHVlID4+IDQ4KSk7CisgICAgfQorCisgICAg
c3RhdGljIHVpbnQ2NF90IGVuY29kZShQb2ludGVyVHlwZSBwb2ludGVyLCBUeXBlIHR5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pihwb2ludGVyKSB8IGVu
Y29kZVR5cGUodHlwZSk7CisgICAgfQorCiAgICAgdWludDY0X3QgbV9kYXRhIHsgMCB9OwogI2Vs
c2UKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NvbXBhY3RSZWZQdHJUdXBs
ZS5oIGIvU291cmNlL1dURi93dGYvQ29tcGFjdFJlZlB0clR1cGxlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmYz
ZDNmZTQ0YTA0ZTdjZjAzNjhhNGNlYWYyYTE2ZjIzNjViNzY3ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0NvbXBhY3RSZWZQdHJUdXBsZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9Db21wYWN0UG9pbnRlclR1cGxlLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVHlwZT4KK2NsYXNzIENvbXBhY3RSZWZQdHJUdXBsZSBmaW5hbCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcGFjdFJlZlB0clR1
cGxlKTsKK3B1YmxpYzoKKyAgICBDb21wYWN0UmVmUHRyVHVwbGUoKSA9IGRlZmF1bHQ7CisgICAg
fkNvbXBhY3RSZWZQdHJUdXBsZSgpCisgICAgeworICAgICAgICBkZXJlZklmTm90TnVsbChtX2Rh
dGEucG9pbnRlcigpKTsKKyAgICB9CisKKyAgICBUKiBwb2ludGVyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2RhdGEucG9pbnRlcigpOworICAgIH0KKworICAgIHZvaWQgc2V0UG9p
bnRlcihUKiBwb2ludGVyKQorICAgIHsKKyAgICAgICAgcmVmSWZOb3ROdWxsKHBvaW50ZXIpOwor
ICAgICAgICBhdXRvKiBvbGQgPSBtX2RhdGEucG9pbnRlcigpOworICAgICAgICBtX2RhdGEuc2V0
UG9pbnRlcihwb2ludGVyKTsKKyAgICAgICAgZGVyZWZJZk5vdE51bGwob2xkKTsKKyAgICB9CisK
KyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEudHlwZSgpOyB9CisgICAgdm9p
ZCBzZXRUeXBlKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIG1fZGF0YS5zZXRUeXBlKHR5cGUp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDb21wYWN0UG9pbnRlclR1cGxlPFQqLCBUeXBlPiBt
X2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpDb21wYWN0UmVm
UHRyVHVwbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IDZiYmJlZmU3MGZjMWMxMzAy
ZjQ5NWVjM2Y2ZTJhNDQxMDI1ZTZkNmEuLjAwNDM1NjM0MWY3NDcxOTY0NmYxNTgxNDUzNmY3NTA3
ZDQxMmYzNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0xODksOCArMTg5LDggQEAg
Y2xhc3MgU3RyaW5nSW1wbCA6IHByaXZhdGUgU3RyaW5nSW1wbFNoYXBlIHsKIAogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgTWF4TGVuZ3RoID0gU3RyaW5nSW1wbFNoYXBlOjpNYXhMZW5n
dGg7CiAKLSAgICAvLyBUaGUgYm90dG9tIDYgYml0cyBpbiB0aGUgaGFzaCBhcmUgZmxhZ3MuCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDY7CisgICAg
Ly8gVGhlIGJvdHRvbSA2IGJpdHMgaW4gdGhlIGhhc2ggYXJlIGZsYWdzLCBidXQgcmVzZXJ2ZSA4
IGJpdHMgc2luY2UgU3RyaW5nSGFzaCBvbmx5IGhhcyAyNCBiaXRzIGFueXdheS4KKyAgICBzdGF0
aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ0NvdW50ID0gODsKIAogcHJpdmF0ZToK
ICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ01hc2sgPSAoMXUgPDwg
c19mbGFnQ291bnQpIC0gMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3ltYm9s
SW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmgKaW5kZXggZWQwZjEzZTU0
NGYxMGMzMWI0MTliZWFhYTgyNTIzNzRhODcwYWM3My4uNjMxMGRjNTczY2Y1N2YwZDVhODY4ODU4
YjI1ZDA3ZjYzMDYxMDMzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJ
bXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TeW1ib2xJbXBsLmgKQEAgLTQxLDcgKzQx
LDcgQEAgY2xhc3MgU3ltYm9sSW1wbCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5nSW1wbCB7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBGbGFncyBzX2ZsYWdJc1JlZ2lzdGVyZWQgPSAwYjAxMHU7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBGbGFncyBzX2ZsYWdJc1ByaXZhdGUgPSAwYjEwMHU7CiAKLSAgICB1
bnNpZ25lZCBoYXNoRm9yU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoRm9yU3ltYm9sOyB9
CisgICAgdW5zaWduZWQgaGFzaEZvclN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEZvclN5
bWJvbFNoaWZ0ZWRXaXRoRmxhZ0NvdW50ID4+IHNfZmxhZ0NvdW50OyB9CiAgICAgYm9vbCBpc051
bGxTeW1ib2woKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgc19mbGFnSXNOdWxsU3ltYm9sOyB9
CiAgICAgYm9vbCBpc1JlZ2lzdGVyZWQoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgc19mbGFn
SXNSZWdpc3RlcmVkOyB9CiAgICAgYm9vbCBpc1ByaXZhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zs
YWdzICYgc19mbGFnSXNQcml2YXRlOyB9CkBAIC02MCw3ICs2MCw3IEBAIGNsYXNzIFN5bWJvbElt
cGwgOiBwdWJsaWMgVW5pcXVlZFN0cmluZ0ltcGwgewogICAgICAgICBjb25zdGV4cHIgU3RhdGlj
U3ltYm9sSW1wbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRdLCBGbGFn
cyBmbGFncyA9IHNfZmxhZ0RlZmF1bHQpCiAgICAgICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShz
X3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nLCBjaGFyYWN0ZXJDb3VudCAtIDEsIGNoYXJhY3Rl
cnMsCiAgICAgICAgICAgICAgICAgc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBzX2hhc2hGbGFnRGlk
UmVwb3J0Q29zdCB8IFN0cmluZ1N5bWJvbCB8IEJ1ZmZlckludGVybmFsIHwgKFN0cmluZ0hhc2hl
cjo6Y29tcHV0ZUxpdGVyYWxIYXNoQW5kTWFza1RvcDhCaXRzKGNoYXJhY3RlcnMpIDw8IHNfZmxh
Z0NvdW50KSwgQ29uc3RydWN0V2l0aENvbnN0RXhwcikKLSAgICAgICAgICAgICwgbV9oYXNoRm9y
U3ltYm9sKFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUxpdGVyYWxIYXNoQW5kTWFza1RvcDhCaXRzKGNo
YXJhY3RlcnMpIDw8IHNfZmxhZ0NvdW50KQorICAgICAgICAgICAgLCBtX2hhc2hGb3JTeW1ib2xT
aGlmdGVkV2l0aEZsYWdDb3VudChTdHJpbmdIYXNoZXI6OmNvbXB1dGVMaXRlcmFsSGFzaEFuZE1h
c2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCkKICAgICAgICAgICAgICwgbV9m
bGFncyhmbGFncykKICAgICAgICAgewogICAgICAgICB9CkBAIC02OSw3ICs2OSw3IEBAIGNsYXNz
IFN5bWJvbEltcGwgOiBwdWJsaWMgVW5pcXVlZFN0cmluZ0ltcGwgewogICAgICAgICBjb25zdGV4
cHIgU3RhdGljU3ltYm9sSW1wbChjb25zdCBjaGFyMTZfdCAoJmNoYXJhY3RlcnMpW2NoYXJhY3Rl
ckNvdW50XSwgRmxhZ3MgZmxhZ3MgPSBzX2ZsYWdEZWZhdWx0KQogICAgICAgICAgICAgOiBTdHJp
bmdJbXBsU2hhcGUoc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZywgY2hhcmFjdGVyQ291bnQg
LSAxLCBjaGFyYWN0ZXJzLAogICAgICAgICAgICAgICAgIHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0
IHwgU3RyaW5nU3ltYm9sIHwgQnVmZmVySW50ZXJuYWwgfCAoU3RyaW5nSGFzaGVyOjpjb21wdXRl
TGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQpLCBD
b25zdHJ1Y3RXaXRoQ29uc3RFeHByKQotICAgICAgICAgICAgLCBtX2hhc2hGb3JTeW1ib2woU3Ry
aW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycykg
PDwgc19mbGFnQ291bnQpCisgICAgICAgICAgICAsIG1faGFzaEZvclN5bWJvbFNoaWZ0ZWRXaXRo
RmxhZ0NvdW50KFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUxpdGVyYWxIYXNoQW5kTWFza1RvcDhCaXRz
KGNoYXJhY3RlcnMpIDw8IHNfZmxhZ0NvdW50KQogICAgICAgICAgICAgLCBtX2ZsYWdzKGZsYWdz
KQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTgwLDcgKzgwLDcgQEAgY2xhc3MgU3ltYm9sSW1w
bCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5nSW1wbCB7CiAgICAgICAgIH0KIAogICAgICAgICBTdHJp
bmdJbXBsKiBtX293bmVyIHsgbnVsbHB0ciB9OyAvLyBXZSBkbyBub3QgbWFrZSBTdGF0aWNTeW1i
b2xJbXBsIEJ1ZmZlclN1YnN0cmluZy4gVGh1cyB3ZSBjYW4gbWFrZSB0aGlzIG51bGxwdHIuCi0g
ICAgICAgIHVuc2lnbmVkIG1faGFzaEZvclN5bWJvbDsKKyAgICAgICAgdW5zaWduZWQgbV9oYXNo
Rm9yU3ltYm9sU2hpZnRlZFdpdGhGbGFnQ291bnQ7CiAgICAgICAgIEZsYWdzIG1fZmxhZ3M7CiAg
ICAgfTsKIApAQCAtOTIsNyArOTIsNyBAQCBjbGFzcyBTeW1ib2xJbXBsIDogcHVibGljIFVuaXF1
ZWRTdHJpbmdJbXBsIHsKICAgICBTeW1ib2xJbXBsKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZW5ndGgsIFJlZjxTdHJpbmdJbXBsPiYmIGJhc2UsIEZsYWdzIGZsYWdzID0gc19m
bGFnRGVmYXVsdCkKICAgICAgICAgOiBVbmlxdWVkU3RyaW5nSW1wbChDcmVhdGVTeW1ib2wsIGNo
YXJhY3RlcnMsIGxlbmd0aCkKICAgICAgICAgLCBtX293bmVyKCZiYXNlLmxlYWtSZWYoKSkKLSAg
ICAgICAgLCBtX2hhc2hGb3JTeW1ib2wobmV4dEhhc2hGb3JTeW1ib2woKSkKKyAgICAgICAgLCBt
X2hhc2hGb3JTeW1ib2xTaGlmdGVkV2l0aEZsYWdDb3VudChuZXh0SGFzaEZvclN5bWJvbCgpKQog
ICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCiAgICAgewogICAgICAgICBBU1NFUlQoU3RyaW5nSW1w
bDo6dGFpbE9mZnNldDxTdHJpbmdJbXBsKj4oKSA9PSBPQkpFQ1RfT0ZGU0VUT0YoU3ltYm9sSW1w
bCwgbV9vd25lcikpOwpAQCAtMTAxLDcgKzEwMSw3IEBAIGNsYXNzIFN5bWJvbEltcGwgOiBwdWJs
aWMgVW5pcXVlZFN0cmluZ0ltcGwgewogICAgIFN5bWJvbEltcGwoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUmVmPFN0cmluZ0ltcGw+JiYgYmFzZSwgRmxhZ3MgZmxh
Z3MgPSBzX2ZsYWdEZWZhdWx0KQogICAgICAgICA6IFVuaXF1ZWRTdHJpbmdJbXBsKENyZWF0ZVN5
bWJvbCwgY2hhcmFjdGVycywgbGVuZ3RoKQogICAgICAgICAsIG1fb3duZXIoJmJhc2UubGVha1Jl
ZigpKQotICAgICAgICAsIG1faGFzaEZvclN5bWJvbChuZXh0SGFzaEZvclN5bWJvbCgpKQorICAg
ICAgICAsIG1faGFzaEZvclN5bWJvbFNoaWZ0ZWRXaXRoRmxhZ0NvdW50KG5leHRIYXNoRm9yU3lt
Ym9sKCkpCiAgICAgICAgICwgbV9mbGFncyhmbGFncykKICAgICB7CiAgICAgICAgIEFTU0VSVChT
dHJpbmdJbXBsOjp0YWlsT2Zmc2V0PFN0cmluZ0ltcGwqPigpID09IE9CSkVDVF9PRkZTRVRPRihT
eW1ib2xJbXBsLCBtX293bmVyKSk7CkBAIC0xMTAsNyArMTEwLDcgQEAgY2xhc3MgU3ltYm9sSW1w
bCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5nSW1wbCB7CiAgICAgU3ltYm9sSW1wbChGbGFncyBmbGFn
cyA9IHNfZmxhZ0RlZmF1bHQpCiAgICAgICAgIDogVW5pcXVlZFN0cmluZ0ltcGwoQ3JlYXRlU3lt
Ym9sKQogICAgICAgICAsIG1fb3duZXIoU3RyaW5nSW1wbDo6ZW1wdHkoKSkKLSAgICAgICAgLCBt
X2hhc2hGb3JTeW1ib2wobmV4dEhhc2hGb3JTeW1ib2woKSkKKyAgICAgICAgLCBtX2hhc2hGb3JT
eW1ib2xTaGlmdGVkV2l0aEZsYWdDb3VudChuZXh0SGFzaEZvclN5bWJvbCgpKQogICAgICAgICAs
IG1fZmxhZ3MoZmxhZ3MgfCBzX2ZsYWdJc051bGxTeW1ib2wpCiAgICAgewogICAgICAgICBBU1NF
UlQoU3RyaW5nSW1wbDo6dGFpbE9mZnNldDxTdHJpbmdJbXBsKj4oKSA9PSBPQkpFQ1RfT0ZGU0VU
T0YoU3ltYm9sSW1wbCwgbV9vd25lcikpOwpAQCAtMTE5LDcgKzExOSw3IEBAIGNsYXNzIFN5bWJv
bEltcGwgOiBwdWJsaWMgVW5pcXVlZFN0cmluZ0ltcGwgewogICAgIC8vIFRoZSBwb2ludGVyIHRv
IHRoZSBvd25lciBzdHJpbmcgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhZnRlciB0
aGUgU3RyaW5nSW1wbCBsYXlvdXQsCiAgICAgLy8gc2luY2Ugd2Ugd291bGQgbGlrZSB0byBhbGln
biB0aGUgbGF5b3V0IG9mIFN5bWJvbEltcGwgdG8gdGhlIG9uZSBvZiBCdWZmZXJTdWJzdHJpbmcg
U3RyaW5nSW1wbC4KICAgICBTdHJpbmdJbXBsKiBtX293bmVyOwotICAgIHVuc2lnbmVkIG1faGFz
aEZvclN5bWJvbDsKKyAgICB1bnNpZ25lZCBtX2hhc2hGb3JTeW1ib2xTaGlmdGVkV2l0aEZsYWdD
b3VudDsKICAgICBGbGFncyBtX2ZsYWdzIHsgc19mbGFnRGVmYXVsdCB9OwogfTsKIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKFN5bWJvbEltcGwpID09IHNpemVvZihTeW1ib2xJbXBsOjpTdGF0aWNTeW1i
b2xJbXBsKSwgIiIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDM3ZTRkZDk4NTFkMzQxZDdmM2Y5Mzc3ZmIxNDZlMzEyZDkx
YTM2ODguLjY4YTQ1MmEzZDYyZDQ1Y2NkMTI1ZjQzYWEzMmE5NTNmMjM0OTAwNTggMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAyMC0wMi0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgorCisgICAgICAgIFtKU0NdIFNocmluayBTdHJ1Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzgyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgdGVzdCBpcyBoYWxmLWJyb2tlbiBz
aW5jZSBpdCByZWxpZXMgb24gSGFzaE1hcCdzIG9yZGVyIGltcGxpY2l0bHkuCisgICAgICAgIFdl
IGNoYW5nZWQgU3ltYm9sSW1wbCdzIGhhc2ggY29kZSwgc28gaXQgbWFrZXMgdGhlIHJlc3VsdCBk
aWZmZXJlbnQuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvdGFpbC1kZWxldGVkLWZy
YW1lcy90YWlsLWRlbGV0ZWQtZnJhbWVzLXRoaXMtdmFsdWUtZXhwZWN0ZWQudHh0OgorCiAyMDIw
LTAyLTIxICBKYXNvbiBMYXdyZW5jZSAgPGxhd3JlbmNlLmpAYXBwbGUuY29tPgogCiAgICAgICAg
IFsgaU9TIF0gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIva2V5LWdl
bmVyYXRvcnMvcmVhZGluZy1hdXRvaW5jcmVtZW50LWluZGV4ZXMtY3Vyc29ycy5hbnkuc2Vydmlj
ZXdvcmtlci5odG1sIGlzIGZsYWt5IGZhaWxpbmcuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZGVidWdnZXIvdGFpbC1kZWxldGVkLWZyYW1lcy90YWlsLWRlbGV0ZWQtZnJhbWVz
LXRoaXMtdmFsdWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
L3RhaWwtZGVsZXRlZC1mcmFtZXMvdGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLWV4cGVj
dGVkLnR4dAppbmRleCAyMTI1ZmI1Mjk3MWNlY2VhYjdjMDgwMzRmMmQ1MzZjN2EyYTRiNGU4Li5l
Mzc0NDY0NTM3YWFiN2Q0YTBhYjVlMjRmNGZjOGE3MGZmN2Y1YjdjIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvdGFpbC1kZWxldGVkLWZyYW1lcy90YWlsLWRlbGV0
ZWQtZnJhbWVzLXRoaXMtdmFsdWUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci90YWlsLWRlbGV0ZWQtZnJhbWVzL3RhaWwtZGVsZXRlZC1mcmFtZXMtdGhp
cy12YWx1ZS1leHBlY3RlZC50eHQKQEAgLTE0LDYgKzE0LDYgQEAgQ0FMTCBTVEFDSzoKIDM6IFtG
XSBzdGFydEFCQwogICB0aGlzOiB1bmRlZmluZWQKIDQ6IFtQXSBHbG9iYWwgQ29kZQotICB0aGlz
OiBjIC0gCisgIHRoaXM6IGEgLSAKIFJFU1VNRUQKIAo=
</data>
<flag name="review"
          id="407016"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>