<?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>205544</bug_id>
          
          <creation_ts>2019-12-21 18:53:24 -0800</creation_ts>
          <short_desc>Replace uses of Box&lt;Identifier&gt; with a new CacheableIdentifier class.</short_desc>
          <delta_ts>2020-01-13 23:03:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1601120</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-21 18:53:24 -0800</bug_when>
    <thetext>The CacheableIdentifier is effectively a tagged union of a JSCell* or an Identifier.  The JSCell* in this case can be either a Symbol* or a JSString* that is backed by an atom string.  The VM runtime ensures that we&apos;ll never try to cache an identifier from a JSCell that is not one of these.  With this CacheableIdentifier, we no longer need to worry about avoiding a ref/deref of the underlying UniquedStringImpl from the compiler or GC thread.  Instead, we need to visit CacheableIdentifiers during GC scans to keep the JSCell in it alive, and that JSCell will, in turn, keep the underlying UniquedStringImpl alive.

&lt;rdar://problem/58041800&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601123</commentid>
    <comment_count>1</comment_count>
      <attachid>386308</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-21 19:07:48 -0800</bug_when>
    <thetext>Created attachment 386308
work in progress for EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601167</commentid>
    <comment_count>2</comment_count>
      <attachid>386318</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-22 09:57:03 -0800</bug_when>
    <thetext>Created attachment 386318
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601171</commentid>
    <comment_count>3</comment_count>
      <attachid>386318</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-22 10:45:44 -0800</bug_when>
    <thetext>Comment on attachment 386318
proposed patch.

Taking out of review while I research a few more things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601179</commentid>
    <comment_count>4</comment_count>
      <attachid>386318</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-22 12:36:01 -0800</bug_when>
    <thetext>Comment on attachment 386318
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:36
&gt; +           StructureStubInfo::propagateTransitions() is inappropriate for this because
&gt; +           it is only called after GC has finished.  As a result, it won&apos;t keep
&gt; +           the JSCell identifiers alive.

OK, I&apos;m pretty sure this statement is wrong.  I see that propagateTransitions() is called below Heap::runFixpointPhase().  However, empirically, after adding an AccessCase to the StructureStubInfo and barriering it, I see CodeBlock::visitChildren() called for the relevant codeBlock in the current GC cycle.  However, CodeBlock::propagateTransitions() for this codeBlock doesn&apos;t get called until the next GC cycle.  As a result, the JSCell identifiers in CacheableIdentifiers get swept before the next scan.  While the current solution of explicitly calling StructureStubInfo::visitChildren() via CodeBlock::visitChildren() works, I need to research why propagateTransition() doesn&apos;t get called till the next GC cycle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601186</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-22 14:55:00 -0800</bug_when>
    <thetext>Did you forget a write barrier?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601195</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-22 16:14:01 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #5)
&gt; Did you forget a write barrier?

StructureStubInfo::addAccessCase() takes care of the writeBarrier.  It is also meaningless to do the barrier before the AccessCase is added to the StructureStubInfo.

In my test, I also see CodeBlock::visitChildren() called after the barrier in StructureStubInfo::addAccessCase().  However, that doesn&apos;t necessarily lead to CodeBlock::propagateTransitions() being called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601202</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-22 20:52:24 -0800</bug_when>
    <thetext>OK, I&apos;ve found at least one example of why we can&apos;t rely on propagateTransition() to visit the CachedIdentifier.  Here&apos;s a scenario I&apos;ve recorded in time order:

1. StructureStubInfo 0x107140110 addAccessCase 0x1071d5e70 with a JSString identifier 0x1075fedd0.

2. StructureStubInfo 0x107140110 writeBarriers the owner codeBlock 0x1075bbac0.

3. CodeBlock 0x1075bbac0 gets optimized to DFG codeBlock 0x1075bb480.
   Optimized get#CFJvFA:[0x1075bb480-&gt;0x1075bbac0-&gt;0x1075db100, NoneFunctionCall, 14] using DFGMode with DFG into 1344 bytes in 8.964644 ms.

4. GC calls CodeBlock::visitChildren() on the barriered codeBlock 0x1075bbac0.

5. CodeBlock 0x1075bbac0 calls stronglyVisitStrongReferences() which appends m_ownerExecutable 0x1075db100.

6. GC calls FunctionExecutable::visitChildren() on ownerExecutable 0x1075db100, and appends m_codeBlockForCall 0x1075a4000 (a ExecutableToCodeBlockEdge).

7. GC calls ExecutableToCodeBlockEdge::visitChildren() on edge 0x1075a4000, which calls ExecutableToCodeBlockEdge::runConstraint(), which in turn calls codeBlock-&gt;propagateTransitions() on codeBlock 0x1075bb480.

Note: codeBlock 0x1075bb480 is the DFG codeBlock, not the baseline codeBlock that owns the StructureStubInfo.

When the StructureStubInfo barriers the owner CodeBlock, we can guarantee that its visitChildren() gets called, but there doesn&apos;t appear to be a guarantee that the owner CodeBlock&apos;s propagateTransitions() will get called.

Since the cell identifier in CachedIdentifiers are supposed to be strong references, we should just call a visitChildren() on the codeBlock&apos;s StructureStubInfos (which is what this patch does).  I&apos;ll update the ChangeLog with this new info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601203</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-22 20:54:50 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #7)
&gt; Since the cell identifier in CachedIdentifiers are supposed to be strong
&gt; references, we should just call a visitChildren() on the codeBlock&apos;s
&gt; StructureStubInfos (which is what this patch does).  I&apos;ll update the
&gt; ChangeLog with this new info.

By &quot;CachedIdentifiers&quot;, I meant CacheableIdentifiers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601204</commentid>
    <comment_count>9</comment_count>
      <attachid>386325</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-22 21:08:47 -0800</bug_when>
    <thetext>Created attachment 386325
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601319</commentid>
    <comment_count>10</comment_count>
      <attachid>386325</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-23 15:39:59 -0800</bug_when>
    <thetext>Comment on attachment 386325
proposed patch.

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

Can you ensure that we are emitting write-barrier when storing CacheableIdentifier?
Another question: If identifier is used by JIT code, do we keep cells live when (1) AccessCases are destroyed, while (2) JIT code is live on the stack? Do we need marking them in GCAwareJITStubRoutine?

&gt; Source/JavaScriptCore/ChangeLog:31
&gt; +        1. Add a visitChildren() method to StructureStubInfo, PolymorphicAccess, and

Use `visitAggregate` name instead of `visitChildren`. The difference is,

1. visitChildren is defined in JSCell. And it is a function of owner cell.
2. visitAggregate is defined in non JSCell, and owner of visited cells are not this struct: cells are owned by CodeBlock cell, not by StructureStubInfo.

&gt; Source/JavaScriptCore/ChangeLog:47
&gt; +        2. Also add visitChildren() to ModuleNamespaceData.

Ditto

&gt; Source/JavaScriptCore/runtime/CacheableIdentifier.cpp:34
&gt; +JS_EXPORT_PRIVATE void CacheableIdentifier::dump(PrintStream&amp; out) const

JS_EXPORT_PRIVATE in cpp is not necessary.

&gt; Source/JavaScriptCore/runtime/CacheableIdentifier.h:79
&gt; +    inline void visitChildren(SlotVisitor&amp;) const;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601903</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-30 12:11:28 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #10)
&gt; Comment on attachment 386325 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=386325&amp;action=review
&gt; 
&gt; Can you ensure that we are emitting write-barrier when storing
&gt; CacheableIdentifier?
&gt; Another question: If identifier is used by JIT code, do we keep cells live
&gt; when (1) AccessCases are destroyed, while (2) JIT code is live on the stack?
&gt; Do we need marking them in GCAwareJITStubRoutine?
In this case, won&apos;t the CodeBlock also be on the stack?

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:31
&gt; &gt; +        1. Add a visitChildren() method to StructureStubInfo, PolymorphicAccess, and
&gt; 
&gt; Use `visitAggregate` name instead of `visitChildren`. The difference is,
&gt; 
&gt; 1. visitChildren is defined in JSCell. And it is a function of owner cell.
&gt; 2. visitAggregate is defined in non JSCell, and owner of visited cells are
&gt; not this struct: cells are owned by CodeBlock cell, not by StructureStubInfo.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:47
&gt; &gt; +        2. Also add visitChildren() to ModuleNamespaceData.
&gt; 
&gt; Ditto
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/CacheableIdentifier.cpp:34
&gt; &gt; +JS_EXPORT_PRIVATE void CacheableIdentifier::dump(PrintStream&amp; out) const
&gt; 
&gt; JS_EXPORT_PRIVATE in cpp is not necessary.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/CacheableIdentifier.h:79
&gt; &gt; +    inline void visitChildren(SlotVisitor&amp;) const;
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601910</commentid>
    <comment_count>12</comment_count>
      <attachid>386325</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-30 12:26:08 -0800</bug_when>
    <thetext>Comment on attachment 386325
proposed patch.

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

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:62
&gt; +    , m_identifier(identifier)

you need a write barrier after this, right?

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:138
&gt; +        ASSERT(!identifier.isCell());

do these assertions really matter?

&gt; Source/JavaScriptCore/bytecode/GetByStatus.cpp:297
&gt; +                GetByIdVariant variant(trackIdentifiers == TrackIdentifiers::Yes ? access.identifier() : nullptr, StructureSet(structure), complexGetStatus.offset(),

can we just get rid of this TrackIdentifiers stuff now?

&gt; Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:70
&gt; +    m_getByIdSelfIdentifier = identifier;

do we still need this?

If so, I believe you need a write barrier here.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:5643
&gt; +                        addToGraph(CheckCell, OpInfo(frozen), property);

why? CheckIdent is better for strings. I think you should CheckCell for Symbol, since they&apos;re hash-consed.  And for string, you should CheckIdent.

You may have two JSString* with the same impl

&gt; Source/JavaScriptCore/runtime/CacheableIdentifierInlines.h:76
&gt; +    if (string-&gt;isRope())
&gt; +        return false;
&gt; +    return string-&gt;getValueImpl()-&gt;isAtom();

nit: The better abstraction is to call tryGetValueImpl() here and return false if it returns nullptr.

&gt; Source/JavaScriptCore/runtime/CacheableIdentifierInlines.h:116
&gt; +    return uid() == other.uid();

👍🏼</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601913</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-30 12:37:53 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #11)
&gt; (In reply to Yusuke Suzuki from comment #10)
&gt; &gt; Comment on attachment 386325 [details]
&gt; &gt; proposed patch.
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=386325&amp;action=review
&gt; &gt; 
&gt; &gt; Can you ensure that we are emitting write-barrier when storing
&gt; &gt; CacheableIdentifier?
&gt; &gt; Another question: If identifier is used by JIT code, do we keep cells live
&gt; &gt; when (1) AccessCases are destroyed, while (2) JIT code is live on the stack?
&gt; &gt; Do we need marking them in GCAwareJITStubRoutine?
&gt; In this case, won&apos;t the CodeBlock also be on the stack?
Yeah, my guess is we don&apos;t need to mark these as part of GCAwareJITStubRoutine since they&apos;re a normal GC reference (e.g, we&apos;ll always mark it), not a weak reference, like the other references inside AccessCase.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:31
&gt; &gt; &gt; +        1. Add a visitChildren() method to StructureStubInfo, PolymorphicAccess, and
&gt; &gt; 
&gt; &gt; Use `visitAggregate` name instead of `visitChildren`. The difference is,
&gt; &gt; 
&gt; &gt; 1. visitChildren is defined in JSCell. And it is a function of owner cell.
&gt; &gt; 2. visitAggregate is defined in non JSCell, and owner of visited cells are
&gt; &gt; not this struct: cells are owned by CodeBlock cell, not by StructureStubInfo.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:47
&gt; &gt; &gt; +        2. Also add visitChildren() to ModuleNamespaceData.
&gt; &gt; 
&gt; &gt; Ditto
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/CacheableIdentifier.cpp:34
&gt; &gt; &gt; +JS_EXPORT_PRIVATE void CacheableIdentifier::dump(PrintStream&amp; out) const
&gt; &gt; 
&gt; &gt; JS_EXPORT_PRIVATE in cpp is not necessary.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/CacheableIdentifier.h:79
&gt; &gt; &gt; +    inline void visitChildren(SlotVisitor&amp;) const;
&gt; &gt; 
&gt; &gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602052</commentid>
    <comment_count>14</comment_count>
      <attachid>386325</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-01-01 00:56:51 -0800</bug_when>
    <thetext>Comment on attachment 386325
proposed patch.

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/ChangeLog:31
&gt;&gt;&gt;&gt; +        1. Add a visitChildren() method to StructureStubInfo, PolymorphicAccess, and
&gt;&gt;&gt; 
&gt;&gt;&gt; Use `visitAggregate` name instead of `visitChildren`. The difference is,
&gt;&gt;&gt; 
&gt;&gt;&gt; 1. visitChildren is defined in JSCell. And it is a function of owner cell.
&gt;&gt;&gt; 2. visitAggregate is defined in non JSCell, and owner of visited cells are not this struct: cells are owned by CodeBlock cell, not by StructureStubInfo.
&gt;&gt; 
&gt;&gt; 
&gt; 
&gt; 

I&apos;ve renamed visitChildren() to visitAggregate().

&gt;&gt; Source/JavaScriptCore/ChangeLog:47
&gt;&gt; +        2. Also add visitChildren() to ModuleNamespaceData.
&gt; 
&gt; Ditto

Fixed.

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:62
&gt;&gt; +    , m_identifier(identifier)
&gt; 
&gt; you need a write barrier after this, right?

Nope.  It&apos;s meaningless to write barrier the owner CodeBlock here when this AccessCase has not yet been added to a StructureStubInfo that is reachable from the owner CodeBlock in a GC scan.  Doing so will at most cause the owner CodeBlock to be scanned by the GC, but it will not cause this AccessCase to be scanned by the GC.  StructureStubInfo::addAccessCase() already takes care of issuing the write barrier on the owner CodeBlock after the AccessCase has been added.  That is the right place for the write barrier.

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:138
&gt;&gt; +        ASSERT(!identifier.isCell());
&gt; 
&gt; do these assertions really matter?

It&apos;s just documentation that we should never expect to see the isCell() case on this path.

&gt;&gt; Source/JavaScriptCore/bytecode/GetByStatus.cpp:297
&gt;&gt; +                GetByIdVariant variant(trackIdentifiers == TrackIdentifiers::Yes ? access.identifier() : nullptr, StructureSet(structure), complexGetStatus.offset(),
&gt; 
&gt; can we just get rid of this TrackIdentifiers stuff now?

I see that this TrackIdentifiers was added in r252763.  It isn&apos;t totally clear to me that this wasn&apos;t for a reason other than just to avoid keeping the Box&lt;Identifier&gt; alive for GetById cases.  GetByIdVariant::overlaps() does check for the identifier being null, and we are forcing the identifier to be null here for GetById cases.

However, from reading through the code for GetByIdVariant::attemptToMerge() and the ChangeLog from r252763, I think it&apos;s safe to merge a GetById variant with a GetByVal variant if the GetByVal has the same identifier and offset.  Hence, there&apos;s no reason to force the identifier to null for the GetById case.  I&apos;ll go ahead and remove all the TrackIdentifiers.

&gt;&gt; Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:70
&gt;&gt; +    m_getByIdSelfIdentifier = identifier;
&gt; 
&gt; do we still need this?
&gt; 
&gt; If so, I believe you need a write barrier here.

It looks like the reason for capturing this identifier is entirely so that in computeForStubInfoWithoutExitSiteFeedback(), we can retrieve the identifier so that the GetByIdVariant can do its overlaps() test correctly.  I&apos;m not entirely sure but from my naive reading of the code, I think we still need this.  I&apos;ve added a write barrier here.

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:5643
&gt;&gt; +                        addToGraph(CheckCell, OpInfo(frozen), property);
&gt; 
&gt; why? CheckIdent is better for strings. I think you should CheckCell for Symbol, since they&apos;re hash-consed.  And for string, you should CheckIdent.
&gt; 
&gt; You may have two JSString* with the same impl

Good point.  Fixed to do CheckIdent for strings, and CheckCell for Symbol.  I still freeze the string if isCell().

&gt;&gt; Source/JavaScriptCore/runtime/CacheableIdentifier.cpp:34
&gt;&gt; +JS_EXPORT_PRIVATE void CacheableIdentifier::dump(PrintStream&amp; out) const
&gt; 
&gt; JS_EXPORT_PRIVATE in cpp is not necessary.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/CacheableIdentifier.h:79
&gt;&gt; +    inline void visitChildren(SlotVisitor&amp;) const;
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/CacheableIdentifierInlines.h:76
&gt;&gt; +    return string-&gt;getValueImpl()-&gt;isAtom();
&gt; 
&gt; nit: The better abstraction is to call tryGetValueImpl() here and return false if it returns nullptr.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602194</commentid>
    <comment_count>15</comment_count>
      <attachid>386616</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-01-02 12:09:42 -0800</bug_when>
    <thetext>Created attachment 386616
proposed patch.

Uploading new patch with all the feedback applied for EWS testing and for commenting.  Still need to think through Yusuke&apos;s questions about potential GC correctness issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602200</commentid>
    <comment_count>16</comment_count>
      <attachid>386616</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-02 12:34:07 -0800</bug_when>
    <thetext>Comment on attachment 386616
proposed patch.

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

&gt; Source/JavaScriptCore/jit/Repatch.cpp:203
&gt; +            // Deliberately use the Identifier (instead of JSCell*) form since
&gt; +            // we have an immortal Identifier in this case.
&gt; +            propertyName = vm.propertyNames-&gt;length;

Yeah, this works. But it only works for something that really is immortal, since CacheableIdentifier isn&apos;t a +1 ref. So it&apos;s slightly worrisome to do IMO since it might encourage a pattern which isn&apos;t always safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602294</commentid>
    <comment_count>17</comment_count>
      <attachid>386616</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-01-02 17:17:17 -0800</bug_when>
    <thetext>Comment on attachment 386616
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/jit/Repatch.cpp:203
&gt;&gt; +            propertyName = vm.propertyNames-&gt;length;
&gt; 
&gt; Yeah, this works. But it only works for something that really is immortal, since CacheableIdentifier isn&apos;t a +1 ref. So it&apos;s slightly worrisome to do IMO since it might encourage a pattern which isn&apos;t always safe.

I thought this was needed because StructureStubInfo doesn&apos;t have a PolymorphicAccess stub for CacheType::ArrayLength and CacheType::StringLength and hence, is unable to scan the cell in the AccessCase identifier.  However, it looks like I misread the code.  For both CacheType::ArrayLength and CacheType::StringLength, we don&apos;t add any AccessCases to the StructureStubInfo.  Hence, there is no AccessCase to scan.  I&apos;ll remove this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605443</commentid>
    <comment_count>18</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-01-10 17:51:58 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #15)
&gt; Created attachment 386616 [details]
&gt; proposed patch.
&gt; 
&gt; Uploading new patch with all the feedback applied for EWS testing and for
&gt; commenting.  Still need to think through Yusuke&apos;s questions about potential
&gt; GC correctness issues.

I&apos;ve considered Yusuke&apos;s GC questions and found and fixed some bugs in the patch.  Will upload a new shortly with more ChangeLog comments addressing Yusuke&apos;s concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605448</commentid>
    <comment_count>19</comment_count>
      <attachid>387410</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-01-10 18:03:11 -0800</bug_when>
    <thetext>Created attachment 387410
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605457</commentid>
    <comment_count>20</comment_count>
      <attachid>387410</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-10 18:43:27 -0800</bug_when>
    <thetext>Comment on attachment 387410
proposed patch.

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

r=me

Looks really good overall. Just two main comments where things are iffy

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        The introduction of the use of Box&lt;Identifier&gt; is to get around having to

&quot;is to get&quot; =&gt; &quot;was to get&quot;

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        This patch fixes this by replacing uses of Box&lt;Identifier&gt; with a

&quot;with a&quot; =&gt; &quot;with&quot;

&gt; Source/JavaScriptCore/ChangeLog:79
&gt; +        The GCSafeConcurrentJSLocker ensures that the CacheableIdentifier is will be

&quot;is will be&quot; =&gt; will be&quot;

That&apos;s just a lock. How does it ensure it&apos;ll be protected from GC? (I know the answer, that stronglyVisitStrongReferences holds the lock, but this sentence is slightly confusing because it doesn&apos;t indicate that.)

&gt; Source/JavaScriptCore/bytecode/GetterSetterAccessCase.h:2
&gt; + * Copyright (C) 2017-2019 Apple Inc. All rights reserved.

I think these should be 2020 (you have a few 2019)

&gt; Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:71
&gt; +    m_getByIdSelfIdentifier = identifier;
&gt; +    codeBlock-&gt;vm().heap.writeBarrier(codeBlock);

I wonder if somehow the compiler could enforce this. I guess it&apos;s difficult because we use them all over the compiler thread.

&gt; Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:239
&gt; +    if (ident.isCell())
&gt; +        keepAlive(ident.cell());

I&apos;m not sure what I&apos;m missing, but where did this keepAlive come from?

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:2032
&gt; +    if (baseValue.isCell() &amp;&amp; CacheableIdentifier::isCacheableIdentifierCell(subscript)) {

If we see a string that&apos;s not a cacheable identifier, should we bail on the IC (e.g, make it just go. to the slow path)?

&gt; Source/JavaScriptCore/runtime/CacheableIdentifier.h:89
&gt; +    static constexpr uintptr_t s_uidTag = 1;

nit: Might be worth a comment saying why we tag the UID instead of the cell, since it will be part of conservative GC this way, which is a nice property

&gt; Source/JavaScriptCore/runtime/VM.h:1208
&gt; +    HashMap&lt;const UniquedStringImpl*, RefPtr&lt;WatchpointSet&gt;&gt; m_impurePropertyWatchpointSets;

this looks wrong. You&apos;re no longer +1 reffing the string</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605458</commentid>
    <comment_count>21</comment_count>
      <attachid>387410</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-10 18:45:23 -0800</bug_when>
    <thetext>Comment on attachment 387410
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:239
&gt;&gt; +        keepAlive(ident.cell());
&gt; 
&gt; I&apos;m not sure what I&apos;m missing, but where did this keepAlive come from?

And if it&apos;s legit, why is it needed? Wouldn&apos;t writeBarrier make it visible?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605467</commentid>
    <comment_count>22</comment_count>
      <attachid>387410</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-01-10 19:15:54 -0800</bug_when>
    <thetext>Comment on attachment 387410
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/bytecode/GetterSetterAccessCase.h:2
&gt;&gt; + * Copyright (C) 2017-2019 Apple Inc. All rights reserved.
&gt; 
&gt; I think these should be 2020 (you have a few 2019)

Will fix.

&gt;&gt;&gt; Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:239
&gt;&gt;&gt; +        keepAlive(ident.cell());
&gt;&gt; 
&gt;&gt; I&apos;m not sure what I&apos;m missing, but where did this keepAlive come from?
&gt; 
&gt; And if it&apos;s legit, why is it needed? Wouldn&apos;t writeBarrier make it visible?

keepAlive() comes from HeapCell.h.  This just ensures that the compiler does not optimize away ident until after we barrier the codeBlock because the last use of ident is quite a ways above where we barrier the codeBlock.  That said, we only call this addAccessCase() in tryCacheGetBy() under the protection of GCSafeConcurrentJSLocker.  So, I think it&apos;s not strictly needed.  I can remove it.

&gt;&gt; Source/JavaScriptCore/jit/JITOperations.cpp:2032
&gt;&gt; +    if (baseValue.isCell() &amp;&amp; CacheableIdentifier::isCacheableIdentifierCell(subscript)) {
&gt; 
&gt; If we see a string that&apos;s not a cacheable identifier, should we bail on the IC (e.g, make it just go. to the slow path)?

This is testing for whether the subscript can be made into a CacheableIdentifier i.e symbol or string that is backed by an AtomStringImpl.  It is a refinement on the old isStringOrSymbol() test.  Not sure if we should bail on the IC.  I&apos;ll think about it.

&gt;&gt; Source/JavaScriptCore/runtime/CacheableIdentifier.h:89
&gt;&gt; +    static constexpr uintptr_t s_uidTag = 1;
&gt; 
&gt; nit: Might be worth a comment saying why we tag the UID instead of the cell, since it will be part of conservative GC this way, which is a nice property

Will add.

&gt;&gt; Source/JavaScriptCore/runtime/VM.h:1208
&gt;&gt; +    HashMap&lt;const UniquedStringImpl*, RefPtr&lt;WatchpointSet&gt;&gt; m_impurePropertyWatchpointSets;
&gt; 
&gt; this looks wrong. You&apos;re no longer +1 reffing the string

Will investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605482</commentid>
    <comment_count>23</comment_count>
      <attachid>387410</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-10 21:00:16 -0800</bug_when>
    <thetext>Comment on attachment 387410
proposed patch.

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

&gt;&gt;&gt; Source/JavaScriptCore/jit/JITOperations.cpp:2032
&gt;&gt;&gt; +    if (baseValue.isCell() &amp;&amp; CacheableIdentifier::isCacheableIdentifierCell(subscript)) {
&gt;&gt; 
&gt;&gt; If we see a string that&apos;s not a cacheable identifier, should we bail on the IC (e.g, make it just go. to the slow path)?
&gt; 
&gt; This is testing for whether the subscript can be made into a CacheableIdentifier i.e symbol or string that is backed by an AtomStringImpl.  It is a refinement on the old isStringOrSymbol() test.  Not sure if we should bail on the IC.  I&apos;ll think about it.

Right. That’s a good point. There’s one slight difference which is this might mutate a string into being an identifier. However, I don’t think it needs to change for this patch.

However, we should have it bail. If you look at the code in the LLInt, it sets profiling data so upper tiers bail if this condition would have failed. So it probably makes sense to be consistent here and have the upper tiers also bail.

I don’t think this patch needs to do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606091</commentid>
    <comment_count>24</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-01-13 15:32:11 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #22)
&gt; &gt;&gt; Source/JavaScriptCore/jit/JITOperations.cpp:2032
&gt; &gt;&gt; +    if (baseValue.isCell() &amp;&amp; CacheableIdentifier::isCacheableIdentifierCell(subscript)) {
&gt; &gt; 
&gt; &gt; If we see a string that&apos;s not a cacheable identifier, should we bail on the IC (e.g, make it just go. to the slow path)?
&gt; 
&gt; This is testing for whether the subscript can be made into a
&gt; CacheableIdentifier i.e symbol or string that is backed by an
&gt; AtomStringImpl.  It is a refinement on the old isStringOrSymbol() test.  Not
&gt; sure if we should bail on the IC.  I&apos;ll think about it.

The comment was wrong.  I&apos;ve re-written it.

&gt; &gt;&gt; Source/JavaScriptCore/runtime/VM.h:1208
&gt; &gt;&gt; +    HashMap&lt;const UniquedStringImpl*, RefPtr&lt;WatchpointSet&gt;&gt; m_impurePropertyWatchpointSets;
&gt; &gt; 
&gt; &gt; this looks wrong. You&apos;re no longer +1 reffing the string
&gt; 
&gt; Will investigate.

Fixed this by using RefPtr&lt; UniquedStringImpl&gt; instead of const UniquedStringImpl* as the HashMap key.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606105</commentid>
    <comment_count>25</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-01-13 15:56:51 -0800</bug_when>
    <thetext>Landed in r254464: &lt;http://trac.webkit.org/r254464&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606262</commentid>
    <comment_count>26</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-13 23:03:50 -0800</bug_when>
    <thetext>Follow up in:

https://trac.webkit.org/changeset/254496/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386308</attachid>
            <date>2019-12-21 19:07:48 -0800</date>
            <delta_ts>2019-12-22 09:57:03 -0800</delta_ts>
            <desc>work in progress for EWS testing.</desc>
            <filename>bug-205544.patch</filename>
            <type>text/plain</type>
            <size>105116</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjUzODY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBA
QAorMjAxOS0xMi0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVwbGFjZSB1c2VzIG9mIEJveDxJZGVudGlmaWVyPiB3aXRoIGEgbmV3IENhY2hlYWJsZUlkZW50
aWZpZXIgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDU1NDQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4MDQxODAwPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBDYWNoZWFibGVJZGVu
dGlmaWVyIGlzIGVmZmVjdGl2ZWx5IGEgdGFnZ2VkIHVuaW9uIG9mIGEgSlNDZWxsKiBvciBhbgor
ICAgICAgICBJZGVudGlmaWVyLiAgVGhlIEpTQ2VsbCogaW4gdGhpcyBjYXNlIGNhbiBiZSBlaXRo
ZXIgYSBTeW1ib2wqIG9yIGEgSlNTdHJpbmcqCisgICAgICAgIHRoYXQgaXMgYmFja2VkIGJ5IGFu
IGF0b20gc3RyaW5nLiAgVGhlIFZNIHJ1bnRpbWUgZW5zdXJlcyB0aGF0IHdlJ2xsIG5ldmVyCisg
ICAgICAgIHRyeSB0byBjYWNoZSBhbiBpZGVudGlmaWVyIGZyb20gYSBKU0NlbGwgdGhhdCBpcyBu
b3Qgb25lIG9mIHRoZXNlLiAgV2l0aAorICAgICAgICB0aGlzIENhY2hlYWJsZUlkZW50aWZpZXIs
IHdlIG5vIGxvbmdlciBuZWVkIHRvIHdvcnJ5IGFib3V0IGF2b2lkaW5nIGEKKyAgICAgICAgcmVm
L2RlcmVmIG9mIHRoZSB1bmRlcmx5aW5nIFVuaXF1ZWRTdHJpbmdJbXBsIGZyb20gdGhlIGNvbXBp
bGVyIG9yIEdDIHRocmVhZC4KKyAgICAgICAgSW5zdGVhZCwgd2UgbmVlZCB0byB2aXNpdCBDYWNo
ZWFibGVJZGVudGlmaWVycyBkdXJpbmcgR0Mgc2NhbnMgdG8ga2VlcCB0aGUKKyAgICAgICAgSlND
ZWxsIGluIGl0IGFsaXZlLCBhbmQgdGhhdCBKU0NlbGwgd2lsbCwgaW4gdHVybiwga2VlcCB0aGUg
dW5kZXJseWluZworICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCBhbGl2ZS4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpj
b21taXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0
ZVdpdGhHdWFyZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
Ojp1aWQgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppZGVudGlmaWVyIGNvbnN0
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAgICAgKiBieXRlY29k
ZS9HZXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpHZXRC
eUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJn
ZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcCk6CisgICAgICAg
IChKU0M6OkdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBi
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5oOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6
aWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpvdmVybGFw
cyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpH
ZXRCeVN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpjb21w
dXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayk6CisgICAgICAgIChKU0M6Okdl
dEJ5U3RhdHVzOjptYXJrSWZDaGVhcCk6CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpzaW5n
bGVJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeVN0YXR1cy5oOgor
ICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAo
SlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKToKKyAg
ICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKiBi
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5z
dGFuY2VPZkFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mQWNjZXNzQ2Fz
ZTo6SW5zdGFuY2VPZkFjY2Vzc0Nhc2UpOgorICAgICAgICAqIGJ5dGVjb2RlL0ludHJpbnNpY0dl
dHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3ND
YXNlOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6SW50cmluc2lj
R2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9JbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvTW9kdWxlTmFtZXNwYWNlQWNj
ZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6Ok1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6Ok1v
ZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpNb2R1bGVOYW1lc3BhY2VB
Y2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL01vZHVsZU5hbWVzcGFjZUFj
Y2Vzc0Nhc2UuaDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAg
KEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAgICAgICAqIGJ5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNz
Q2FzZS5jcHA6CisgICAgICAgIChKU0M6OlByb3h5YWJsZUFjY2Vzc0Nhc2U6OlByb3h5YWJsZUFj
Y2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUpOgor
ICAgICAgICAqIGJ5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuaDoKKyAgICAgICAgKiBieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJ
bmZvOjppbml0R2V0QnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6
YWRkQWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6Z2V0QnlJZFNlbGZJZGVudGlmaWVyKToKKyAgICAg
ICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSWRlbnRpZmllcnM6OmVuc3VyZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjphdCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlBZGQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkRlc2lyZWRJZGVudGlmaWVyczo6cHJvY2Vzc0NvZGVCbG9ja0lkZW50aWZpZXJzSWZOZWVk
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuaDoKKyAg
ICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6flBsYW4p
OgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNhbmNlbCk6CisgICAgICAgICogZGZnL0RGR1Bs
YW4uaDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjprZWVwQWxpdmVJZGVudGlmaWVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OldvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0pOgorICAgICAgICAoSlNDOjpERkc6
OldvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0
OjpyZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3Jr
bGlzdDo6ZGVsZXRlQ2FuY2VsbGVkUGxhbnNGb3JWTSk6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR1dvcmtsaXN0Lmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeSk6CisgICAg
ICAgIChKU0M6OnJlcGF0Y2hHZXRCeSk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlQXJyYXlHZXRC
eVZhbCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW5zdGFuY2VPZik6CisgICAgICAgICogaml0
L1JlcGF0Y2guaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjpDYWNoZWFibGVJZGVudGlmaWVyKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6aXNVaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWFibGVJZGVudGlmaWVyOjppc0NlbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWFi
bGVJZGVudGlmaWVyOjppc1N5bWJvbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlk
ZW50aWZpZXI6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlk
ZW50aWZpZXI6OkNhY2hlYWJsZUlkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmll
cjo6dWlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNo
ZWFibGVJZGVudGlmaWVyQ2VsbCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6
OmlzU3ltYm9sQ2VsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6
OmlzU3RyaW5nQ2VsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6
OnNldENlbGxCaXRzKToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6c2V0VWlk
Qml0cyk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjpvcGVyYXRvcj09IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6b3BlcmF0b3IhPSBjb25zdCk6Cisg
ICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVu
Y3Rpb25DYWxsQmFzZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAo
SlNDOjpKU1N0cmluZzo6Z2V0VmFsdWVJbXBsIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1ZN
LmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OlZNOjphZGRJbXB1cmVQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OlZNOjpyZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE5LTEyLTIwICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEpTU3RyaW5nIHZhbHVlcyBmcm9tIGxpdGVyYWxz
IGluIGEgc2luZ2xlIGNvbnNpc3RlbnQgc3R5bGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzg0LDYgKzc4NCw4IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBydW50aW1lL0J5dGVjb2RlQ2Fj
aGVFcnJvci5oCiAgICAgcnVudGltZS9DYWNoZVBheWxvYWQuaAogICAgIHJ1bnRpbWUvQ2FjaGVV
cGRhdGUuaAorICAgIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCisgICAgcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCiAgICAgcnVudGltZS9DYWNoZWRCeXRlY29kZS5o
CiAgICAgcnVudGltZS9DYWNoZWRUeXBlcy5oCiAgICAgcnVudGltZS9DYWdlZEJhcnJpZXJQdHIu
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjUzODEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03Mjcs
NiArNzI3LDcgQEAgcnVudGltZS9CeXRlY29kZUNhY2hlRXJyb3IuY3BwCiBydW50aW1lL0NhbGxE
YXRhLmNwcAogcnVudGltZS9DYWNoZVBheWxvYWQuY3BwCiBydW50aW1lL0NhY2hlVXBkYXRlLmNw
cAorcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmNwcAogcnVudGltZS9DYWNoZWRCeXRlY29k
ZS5jcHAKIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCiBydW50aW1lL0NhdGNoU2NvcGUuY3BwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUzODEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE5MTIsNiArMTkxMiw4IEBACiAJCUZFNzQ5N0U2MjA5MDAx
QjEwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFNzQ5N0U1MjA5MDAxQjAwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTdDNDE5
NjFCOTdGQzRCMDBGNEQ1OTggLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRURBNTBENDFCOTdGNDQy
MDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAgKi87IH07CiAJCUZFODBD
MTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5NjFENzc1QjI3MDA4NTEwQzAgLyogQ2F0
Y2hTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUZFOERFNTRCMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRThERTU0QTIzQUMx
REFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oICovOyB9OworCQlGRThERTU0RDIz
QUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRDMjNBQzFFODYwMDVD
OTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovOyB9OwogCQlGRTk5QjI0OTFD
MjRDM0QzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklU
TmVnR2VuZXJhdG9yLmggKi87IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVh
a3BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1
MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1p
dGl2ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNTE1NCw2ICs1MTU2LDkgQEAKIAkJRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNo
U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2F0Y2hTY29wZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTgwQzE5ODFENzc1RkI0MDA4NTEwQzAgLyog
Q2F0Y2hTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYXRj
aFNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU4MEMxOUExRDc3NjhG
RDAwODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOERFNTRBMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFi
bGVJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJs
ZUlkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU4REU1NEMyM0FD
MUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOERFNTRFMjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNo
ZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlYWJsZUlkZW50aWZp
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2
QjNGMDMgLyogVk1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZN
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTEx
MDA3M0U3QTYgLyogSklUU3ViR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpJVFN1YkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02OTkwLDYgKzY5OTUsOSBAQAogCQkJCTBGQjdGMzhDMTVF
RDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCiAJCQkJMTQzNTk1MjAyMkE1
MjFDQTAwRTgwODZEIC8qIEJ5dGVjb2RlQ2FjaGVFcnJvci5jcHAgKi8sCiAJCQkJMTQzNTk1MUYy
MkE1MjFDQTAwRTgwODZEIC8qIEJ5dGVjb2RlQ2FjaGVFcnJvci5oICovLAorCQkJCUZFOERFNTRF
MjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLywKKwkJCQlGRThE
RTU0QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oICovLAorCQkJCUZF
OERFNTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICov
LAogCQkJCTE0OEIxNDE5MjI1REQxRTkwMEQ2RTk5OCAvKiBDYWNoZWRCeXRlY29kZS5jcHAgKi8s
CiAJCQkJMTQ0Q0EzNEYyMjFGMDM3OTAwODE3Nzg5IC8qIENhY2hlZEJ5dGVjb2RlLmggKi8sCiAJ
CQkJMTREQUZBNDUyMUUzQjg3MTAwNEI2OEY3IC8qIENhY2hlZFR5cGVzLmNwcCAqLywKQEAgLTg4
MzYsNiArODg0NCw3IEBACiAJCQkJMEY1Q0Y5ODQxRTlENTM3NzAwQzE4NjkyIC8qIEFpckxvd2Vy
U3RhY2tBcmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQwRTRBNzFDNDk3Rjc0MDBBNTc3RkEg
LyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQwRTRBODFDNDk3Rjc0MDBBNTc3
RkEgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRThERTU0QjIz
QUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0MEU0QTkxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZVV0aWxzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkIzODc5MDFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09y
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlDQUJDOTFEQjU0QTdBMDAwOEU4M0IgLyogQWly
UGFkSW50ZXJmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjI3LDYgKzEwMjM2LDcgQEAK
IAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1QUUyQzQxREY0RjI4MDAwNjZFRkUxIC8qIFZNSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkU4REU1NEQyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTMwMjJENzFFNDI4NTcz
MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQzU3OTczMjMx
MDVCNTEwMEJDQTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFNkY1NkRFMUU2NEVBRDYwMEQxNzgwMSAvKiBWTVRyYXBzLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJl
dmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShKSVQp
CiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkRPTUpJ
VEdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtNTQsMTgg
KzU1LDE4IEBAIG5hbWVzcGFjZSBBY2Nlc3NDYXNlSW50ZXJuYWwgewogc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotQWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVf
cHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKK0FjY2Vzc0Nh
c2U6OkFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRp
dGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVB
Y2Nlc3NDaGFpbikKICAgICA6IG1fdHlwZSh0eXBlKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQog
ICAgICwgbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbihXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWlu
KSkKLSAgICAsIG1faWRlbnRpZmllcihCb3g8SWRlbnRpZmllcj46OmNyZWF0ZShpZGVudGlmaWVy
KSkKKyAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogewogICAgIG1fc3RydWN0dXJlLnNl
dE1heUJlTnVsbCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAgICAgbV9jb25kaXRpb25TZXQgPSBj
b25kaXRpb25TZXQ7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb25kaXRpb25TZXQuaXNWYWxpZCgp
KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNyZWF0ZShW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlx
dWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKK3N0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQ
cm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKIHsKICAgICBzd2l0Y2ggKHR5
cGUpIHsKICAgICBjYXNlIEluSGl0OgpAQCAtMTA0LDcgKzEwNSw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjoKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IEFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAorICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBz
dGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWlu
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0cnVjdHVyZSA9PSBuZXdTdHJ1Y3R1cmUtPnBy
ZXZpb3VzSUQoKSk7CkBAIC0xMjUsNyArMTI2LDcgQEAgQWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2Uo
KQogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVj
dHVyZVN0dWJJbmZvKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5cGUoKSkg
ewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKQEAgLTEzNCwxOCArMTM1LDIyIEBA
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjoKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKCFpZGVudGlmaWVyLmlzQ2Vs
bCgpKTsKICAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIFJlcGxh
Y2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby51LmJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6
OkluQnlJZFNlbGY6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50
SWRlbnRpZmllcik7CisgICAgICAgIEFTU0VSVCghaWRlbnRpZmllci5pc0NlbGwoKSk7CiAgICAg
ICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmll
ciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7
CisgICAgICAgIEFTU0VSVCghaWRlbnRpZmllci5pc0NlbGwoKSk7CiAgICAgICAgIHJldHVybiBB
Y2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgaWRl
bnRpZmllcik7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3RoOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOworICAgICAgICBB
U1NFUlQoIWlkZW50aWZpZXIuaXNDZWxsKCkpOwogICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6
Y3JlYXRlKHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoLCBpZGVudGlmaWVyKTsK
IAogICAgIGRlZmF1bHQ6CkBAIC0xODAsMTEgKzE4NSwxMSBAQCBWZWN0b3I8V2F0Y2hwb2ludFNl
dCosIDI+IEFjY2Vzc0Nhc2U6OmNvCiAgICAgVmVjdG9yPFdhdGNocG9pbnRTZXQqLCAyPiByZXN1
bHQ7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKIAotICAg
IGlmICghbV9pZGVudGlmaWVyLT5pc051bGwoKSkgeworICAgIGlmIChtX2lkZW50aWZpZXIpIHsK
ICAgICAgICAgaWYgKChzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpCiAgICAgICAgICAgICB8fCBtX2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgIHx8IChtX3BvbHlQcm90b0FjY2Vzc0NoYWlu
ICYmIG1fcG9seVByb3RvQWNjZXNzQ2hhaW4tPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHZtLmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJ
bXB1cmVQcm9wZXJ0eSgqbV9pZGVudGlmaWVyKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHZtLmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShtX2lkZW50aWZpZXIudWlk
KCkpKTsKICAgICB9CiAKICAgICBpZiAoYWRkaXRpb25hbFNldCgpKQpAQCAtNTUwLDcgKzU1NSw3
IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3MKICAgICAvLyBOb3Rl
IHRoYXQgaWYgQS0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSAmJiBCLT5ndWFyZGVkQnlTdHJ1
Y3R1cmVDaGVjaygpIHRoZW4KICAgICAvLyBBLT5jYW5SZXBsYWNlKEIpID09IEItPmNhblJlcGxh
Y2UoQSkuCiAKLSAgICBpZiAoKm1faWRlbnRpZmllciAhPSAqb3RoZXIubV9pZGVudGlmaWVyKQor
ICAgIGlmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgc3dpdGNoICh0eXBlKCkpIHsKQEAgLTY0OCw3ICs2NTMsNyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgCiAKICAgICBvdXQucHJp
bnQoY29tbWEsIG1fc3RhdGUpOwogCi0gICAgb3V0LnByaW50KGNvbW1hLCAiaWRlbnQgPSAnIiwg
Km1faWRlbnRpZmllciwgIiciKTsKKyAgICBvdXQucHJpbnQoY29tbWEsICJpZGVudCA9ICciLCBt
X2lkZW50aWZpZXIsICInIik7CiAgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKQogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJvZmZzZXQgPSAiLCBtX29mZnNldCk7CiAKQEAgLTcxMCw2
ICs3MTUsMTEgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3sKKyAgICBtX2lkZW50aWZpZXIudmlzaXRDaGlsZHJl
bih2aXNpdG9yKTsKK30KKwogdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAg
ICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBm
YWxsVGhyb3VnaCkKIHsKQEAgLTcyOCw3ICs3MzgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlV2l0aEd1YXJkKAogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsK
IAogICAgIGlmIChyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2goKSAmJiAhc3R1YkluZm8uaGFz
Q29uc3RhbnRJZGVudGlmaWVyKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lkZW50aWZp
ZXItPmlzTnVsbCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9pZGVudGlmaWVyKTsKICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKICAgICAgICAg
Ly8gbm9uLXJvcGUgc3RyaW5nIGNoZWNrIGRvbmUgaW5zaWRlIHBvbHltb3JwaGljIGFjY2Vzcy4K
IApAQCAtMTY2Niw3ICsxNjc2LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZQogICAgICAgICAgICAgLy8gRklYTUU6IFJldmlzaXQgSlNHbG9iYWxPYmplY3QuCiAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAz
MjA0CiAgICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlw
ZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlcikgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFtX2lkZW50aWZpZXItPmlzTnVsbCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX2lkZW50aWZpZXIpOwogICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUZvckN1c3RvbSksCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJKHJldmlzaW9u
IDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAor
I2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5s
aW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiUG9seVByb3RvQWNjZXNzQ2hhaW4uaCIKLSNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVk
ZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE0MCwxNCArMTQw
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
VHlwZT4obmV3IEFjY2Vzc0Nhc2VUeXBlKGFyZ3VtZW50cy4uLikpOwogICAgIH0KIAotICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25l
ciwgQWNjZXNzVHlwZSwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0ID0gaW52YWxp
ZE9mZnNldCwKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShW
TSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKICAgICAgICAgU3RydWN0dXJlKiA9IG51bGxwdHIs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0KCksIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gPSBudWxscHRy
KTsKIAogICAgIC8vIFRoaXMgY3JlYXRlIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBmb3IgdHJhbnNp
dGlvbnMuCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0m
LCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlPZmZzZXQsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVy
dHlPZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1
ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKICAgICAKLSAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhWTSYsIEpTQ2VsbCogb3du
ZXIsIGNvbnN0IElkZW50aWZpZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlND
ZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKIAog
ICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIFN0YXRl
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQpAQCAtMjMzLDkgKzIzMyw4IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBUeXBlZEFycmF5VHlwZSB0b1R5cGVkQXJyYXlUeXBlKEFjY2Vz
c1R5cGUpOwogCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aWRlbnRpZmllci0+aW1wbCgpOyB9Ci0gICAgQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXIudWlkKCk7IH0KKyAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAog
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koU3RydWN0dXJl
U3R1YkluZm8mKTsKQEAgLTI0NCw3ICsyNDMsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKIHBy
b3RlY3RlZDoKLSAgICBBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3ND
aGFpbj4pOworICAgIEFjY2Vzc0Nhc2UoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNz
Q2hhaW4+KTsKICAgICBBY2Nlc3NDYXNlKEFjY2Vzc0Nhc2UmJikgPSBkZWZhdWx0OwogICAgIEFj
Y2Vzc0Nhc2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpCiAgICAgICAgIDogbV90eXBlKG90aGVy
Lm1fdHlwZSkKQEAgLTI2OSw2ICsyNjgsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChjb25zdCBGdW5jdG9y
JikgY29uc3Q7CiAKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSBjb25zdDsK
ICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNp
dGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKIApAQCAtMzExLDcgKzMxMSw3IEBAIHByaXZhdGU6
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IG1fcG9seVByb3Rv
QWNjZXNzQ2hhaW47CiAKLSAgICBCb3g8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyOyAvLyBXZSB1
c2UgdGhpcyBpbmRpcmVjdGlvbiBzbyB0aGUgY29uY3VycmVudCBjb21waWxlciBjYW4gY29uY3Vy
cmVudGx5IHJlZiB0aGlzIEJveC4KKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmll
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjQyLDYgKzE2NDIsOCBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVy
CiAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAgZm9y
IChCeVZhbEluZm8qIGJ5VmFsSW5mbyA6IGppdERhdGEtPm1fYnlWYWxJbmZvcykKICAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKGJ5VmFsSW5mby0+Y2FjaGVkU3ltYm9sKTsKKyAgICAgICAgZm9y
IChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykKKyAg
ICAgICAgICAgIHN0dWJJbmZvLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogICAgIH0KICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFZhcmlhbnQuaCIKIAor
I2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2FsbExp
bmtTdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CkBAIC0zMyw3ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZFZhcmlh
bnQ6OkdldEJ5SWRWYXJpYW50KAotICAgIEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyLAorICAg
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cywKQEAgLTExMCw3ICsxMTEsNyBAQCBib29sIEdl
dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgaWYgKCEhbV9pZGVudGlmaWVy
ICE9ICEhb3RoZXIubV9pZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAobV9pZGVudGlmaWVyICYmICgqbV9pZGVudGlmaWVyICE9ICpvdGhlci5tX2lkZW50aWZpZXIp
KQorICAgIGlmIChtX2lkZW50aWZpZXIgJiYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50
aWZpZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9vZmZzZXQgIT0gb3Ro
ZXIubV9vZmZzZXQpCkBAIC0xNTgsNiArMTU5LDcgQEAgYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0
ZW1wdFRvTWVyZ2UoY29ucwogCiB2b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBtX2lkZW50aWZpZXIudmlzaXRDaGlsZHJlbih2aXNp
dG9yKTsKICAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIH0KIApAQCAt
MTgyLDcgKzE4NCw3IEBAIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG8K
IHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCI8Iik7Ci0gICAgb3V0
LnByaW50KCJpZD0nIiwgbV9pZGVudGlmaWVyID8gbV9pZGVudGlmaWVyLT5pbXBsKCkgOiBTdHJp
bmdJbXBsOjplbXB0eSgpLCAiJywgIik7CisgICAgb3V0LnByaW50KCJpZD0nIiwgbV9pZGVudGlm
aWVyLCAiJywgIik7CiAgICAgaWYgKCFpc1NldCgpKSB7CiAgICAgICAgIG91dC5wcmludCgiZW1w
dHk+Iik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKICNpbmNsdWRlICJPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCkBA
IC00NCw3ICs0NSw3IEBAIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBHZXRCeUlkVmFyaWFudCgKLSAgICAgICAgQm94PElk
ZW50aWZpZXI+LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgICAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAogICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+ID0gbnVsbHB0ciwKQEAgLTgyLDE0ICs4MywxNCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAotICAgIEJv
eDxJZGVudGlmaWVyPiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9
CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9p
ZGVudGlmaWVyOyB9CiAKICAgICBib29sIG92ZXJsYXBzKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBv
dGhlcikKICAgICB7CiAgICAgICAgIGlmICghIW1faWRlbnRpZmllciAhPSAhIW90aGVyLm1faWRl
bnRpZmllcikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAobV9pZGVudGlm
aWVyKSB7Ci0gICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyLT5pbXBsKCkgIT0gb3RoZXIubV9p
ZGVudGlmaWVyLT5pbXBsKCkpCisgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyICE9IG90aGVy
Lm1faWRlbnRpZmllcikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpLm92ZXJsYXBzKG90aGVyLnN0cnVjdHVyZVNl
dCgpKTsKQEAgLTEwNyw3ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIEpTRnVuY3Rpb24qIG1faW50
cmluc2ljRnVuY3Rpb247CiAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBtX2N1c3Rv
bUFjY2Vzc29yR2V0dGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxET01BdHRyaWJ1dGVBbm5vdGF0
aW9uPiBtX2RvbUF0dHJpYnV0ZTsKLSAgICBCb3g8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyOyAv
LyBXZSB1c2UgdGhpcyBpbmRpcmVjdGlvbiB0byBhbGxvdyByZWYvZGVyZWYgaW4gdGhlIGNvbmN1
cnJlbnQgY29tcGlsZXIuCisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkdldEJ5U3RhdHVzLmgiCiAKICNpbmNsdWRlICJCeXRl
Y29kZVN0cnVjdHMuaCIKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMuaCIKICNp
bmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCkBAIC0xMTMsNyArMTE0LDcgQEAgR2V0
QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGcm9tTExJbgogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0
U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycywgSWRlbnRpZmllcktl
ZXBBbGl2ZSYga2VlcEFsaXZlKQorR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3Io
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlmaWVycyB0cmFja0lkZW50aWZpZXJz
KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2Nr
KTsKIApAQCAtMTIxLDcgKzEyMiw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRl
Rm9yKENvZGUKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JT
dHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAotICAgICAgICBsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm8sIGNhbGxF
eGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMsIGtlZXBBbGl2ZSk7CisgICAgICAgIGxvY2tl
ciwgcHJvZmlsZWRCbG9jaywgbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5zdHVi
SW5mbywgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJZGVudGlmaWVycyk7CiAgICAgCiAgICAgaWYg
KGRpZEV4aXQpCiAgICAgICAgIHJldHVybiByZXN1bHQuc2xvd1ZlcnNpb24oKTsKQEAgLTEyOSw3
ICsxMzAsNiBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlCiAgICAg
VU5VU0VEX1BBUkFNKG1hcCk7CiAgICAgVU5VU0VEX1BBUkFNKGRpZEV4aXQpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsKLSAgICBVTlVTRURfUEFSQU0oa2VlcEFsaXZlKTsK
ICNlbmRpZgogCiAgICAgaWYgKCFyZXN1bHQpCkBAIC0xNjgsNyArMTY4LDcgQEAgR2V0QnlTdGF0
dXM6OkdldEJ5U3RhdHVzKGNvbnN0IE1vZHVsZU5hbQogfQogCiBHZXRCeVN0YXR1cyBHZXRCeVN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCi0gICAgY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRh
IGNhbGxFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycywgSWRl
bnRpZmllcktlZXBBbGl2ZSYga2VlcEFsaXZlKQorICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhLCBU
cmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMpCiB7CiAgICAgU3R1YkluZm9TdW1tYXJ5
IHN1bW1hcnkgPSBTdHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWFyeShzdHViSW5mbyk7CiAgICAgaWYg
KCFpc0lubGluZWFibGUoc3VtbWFyeSkpCkBAIC0xODYsOSArMTg2LDggQEAgR2V0QnlTdGF0dXMg
R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
CiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5
KSwgKnN0dWJJbmZvKTsKLSAgICAgICAgQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIgPSBzdHVi
SW5mby0+Z2V0QnlJZFNlbGZJZGVudGlmaWVyKCk7Ci0gICAgICAgIGtlZXBBbGl2ZShpZGVudGlm
aWVyKTsKLSAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXItPmltcGwo
KTsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmdl
dEJ5SWRTZWxmSWRlbnRpZmllcigpOworICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
aWRlbnRpZmllci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodWlkKTsKICAgICAgICAg
aWYgKHRyYWNrSWRlbnRpZmllcnMgPT0gVHJhY2tJZGVudGlmaWVyczo6Tm8pCiAgICAgICAgICAg
ICBpZGVudGlmaWVyID0gbnVsbHB0cjsKQEAgLTIxMiw3ICsyMTEsNiBAQCBHZXRCeVN0YXR1cyBH
ZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNl
JiBhY2Nlc3MgPSBsaXN0LT5hdCgwKTsKICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpNb2R1bGVOYW1lc3BhY2VMb2FkOgot
ICAgICAgICAgICAgICAgIGtlZXBBbGl2ZShhY2Nlc3MuaWRlbnRpZmllcigpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoYWNjZXNzLmFzPE1vZHVsZU5hbWVzcGFjZUFjY2Vz
c0Nhc2U+KCkpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTI5NiwxMiArMjk0LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JT
dHViSQogICAgICAgICAgICAgICAgIH0gfQogCiAgICAgICAgICAgICAgICAgQVNTRVJUKChBY2Nl
c3NDYXNlOjpNaXNzID09IGFjY2Vzcy50eXBlKCkgfHwgYWNjZXNzLmlzQ3VzdG9tKCkpID09IChh
Y2Nlc3Mub2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNldCkpOwotICAgICAgICAgICAgICAgIEJveDxJ
ZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgICAgICAgICAgICAgIGlmICh0cmFja0lkZW50aWZp
ZXJzID09IFRyYWNrSWRlbnRpZmllcnM6OlllcykgewotICAgICAgICAgICAgICAgICAgICBpZGVu
dGlmaWVyID0gYWNjZXNzLmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAgICAgICAga2VlcEFs
aXZlKGlkZW50aWZpZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBHZXRC
eUlkVmFyaWFudCB2YXJpYW50KGlkZW50aWZpZXIsIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBj
b21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLAorICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50
IHZhcmlhbnQodHJhY2tJZGVudGlmaWVycyA9PSBUcmFja0lkZW50aWZpZXJzOjpZZXMgPyBhY2Nl
c3MuaWRlbnRpZmllcigpIDogbnVsbHB0ciwgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBs
ZXhHZXRTdGF0dXMub2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0
dXMuY29uZGl0aW9uU2V0KCksIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpLAogICAgICAgICAgICAg
ICAgICAgICBpbnRyaW5zaWNGdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQWNj
ZXNzb3JHZXR0ZXIsCkBAIC0zMzYsNyArMzI5LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6
OmNvbXB1dGVGb3JTdHViSQogCiBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigK
ICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwK
LSAgICBJQ1N0YXR1c0NvbnRleHRTdGFjayYgaWNDb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgVHJhY2tJZGVudGlmaWVycyB0cmFja0lkZW50aWZpZXJzLCBJZGVudGlmaWVyS2Vl
cEFsaXZlJiBrZWVwQWxpdmUpCisgICAgSUNTdGF0dXNDb250ZXh0U3RhY2smIGljQ29udGV4dFN0
YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlm
aWVycykKIHsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKTsKICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0
U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShwcm9maWxlZEJs
b2NrLCBieXRlY29kZUluZGV4KTsKQEAgLTM1MSw3ICszNDQsNyBAQCBHZXRCeVN0YXR1cyBHZXRC
eVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAvLyBpbmxpbmVkIGFuZCBub3Qt
aW5saW5lZC4KICAgICAgICAgICAgICAgICBHZXRCeVN0YXR1cyBiYXNlbGluZVJlc3VsdCA9IGNv
bXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGJhc2VsaW5lTWFw
LCBieXRlY29kZUluZGV4LCBkaWRFeGl0LAotICAgICAgICAgICAgICAgICAgICBjYWxsRXhpdFNp
dGVEYXRhLCB0cmFja0lkZW50aWZpZXJzLCBrZWVwQWxpdmUpOworICAgICAgICAgICAgICAgICAg
ICBjYWxsRXhpdFNpdGVEYXRhLCB0cmFja0lkZW50aWZpZXJzKTsKICAgICAgICAgICAgICAgICBi
YXNlbGluZVJlc3VsdC5tZXJnZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBiYXNl
bGluZVJlc3VsdDsKICAgICAgICAgICAgIH0KQEAgLTM2NSw3ICszNTgsNyBAQCBHZXRCeVN0YXR1
cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm9wdGltaXplZENvZGVCbG9jay0+
bV9sb2NrKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm9XaXRo
b3V0RXhpdFNpdGVGZWVkYmFjaygKLSAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBjb250ZXh0
LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgY2FsbEV4aXRTaXRlRGF0YSwg
dHJhY2tJZGVudGlmaWVycywga2VlcEFsaXZlKTsKKyAgICAgICAgICAgICAgICAgICAgbG9ja2Vy
LCBjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2ssIHN0YXR1cy5zdHViSW5mbywgY2FsbEV4aXRT
aXRlRGF0YSwgdHJhY2tJZGVudGlmaWVycyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAocmVzdWx0LmlzU2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJsZXNzKHJlc3VsdCk7
CkBAIC0zNzUsNyArMzY4LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3Io
CiAgICAgICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5nZXRTdGF0dXMpOwogICAgIH0KICAg
ICAKLSAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2NrLCBiYXNlbGluZU1hcCwgYnl0
ZWNvZGVJbmRleCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJZGVudGlmaWVycywg
a2VlcEFsaXZlKTsKKyAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2NrLCBiYXNlbGlu
ZU1hcCwgYnl0ZWNvZGVJbmRleCwgZGlkRXhpdCwgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJZGVu
dGlmaWVycyk7CiB9CiAKIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKGNvbnN0
IFN0cnVjdHVyZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtNTE2LDYgKzUw
OSw4IEBAIHZvaWQgR2V0QnlTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmUKIAogdm9pZCBH
ZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgaWYg
KGlzTW9kdWxlTmFtZXNwYWNlKCkpCisgICAgICAgIG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9p
ZGVudGlmaWVyLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQubWFya0lmQ2hlYXAodmlz
aXRvcik7CiB9CkBAIC01MzUsMjggKzUzMCwyMiBAQCBib29sIEdldEJ5U3RhdHVzOjpmaW5hbGl6
ZShWTSYgdm0pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUJveDxJZGVudGlmaWVyPiBHZXRCeVN0
YXR1czo6c2luZ2xlSWRlbnRpZmllcigpIGNvbnN0CitDYWNoZWFibGVJZGVudGlmaWVyIEdldEJ5
U3RhdHVzOjpzaW5nbGVJZGVudGlmaWVyKCkgY29uc3QKIHsKLSAgICBpZiAoaXNNb2R1bGVOYW1l
c3BhY2UoKSkgewotICAgICAgICBCb3g8SWRlbnRpZmllcj4gcmVzdWx0ID0gbV9tb2R1bGVOYW1l
c3BhY2VEYXRhLT5tX2lkZW50aWZpZXI7Ci0gICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+
aXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9CisgICAgaWYgKGlzTW9kdWxlTmFtZXNwYWNlKCkpCisgICAgICAgIHJldHVy
biBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1faWRlbnRpZmllcjsKIAogICAgIGlmIChtX3Zhcmlh
bnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBCb3g8SWRlbnRp
Zmllcj4gcmVzdWx0ID0gbV92YXJpYW50cy5maXJzdCgpLmlkZW50aWZpZXIoKTsKKyAgICBDYWNo
ZWFibGVJZGVudGlmaWVyIHJlc3VsdCA9IG1fdmFyaWFudHMuZmlyc3QoKS5pZGVudGlmaWVyKCk7
CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChyZXN1
bHQtPmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBp
ID0gMTsgaSA8IG1fdmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQm94PElkZW50aWZp
ZXI+IHVpZCA9IG1fdmFyaWFudHNbaV0uaWRlbnRpZmllcigpOwotICAgICAgICBpZiAoIXVpZCkK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gbV92YXJpYW50c1tpXS5p
ZGVudGlmaWVyKCk7CisgICAgICAgIGlmICghaWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICBpZiAoKnVpZCAhPSAqcmVzdWx0KQorICAgICAgICBpZiAoaWRl
bnRpZmllciAhPSByZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBA
QAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKICNp
bmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNs
dWRlICJDb25jdXJyZW50SlNMb2NrLmgiCkBAIC05MSwxMyArOTIsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KIAotICAgIC8vIElmIHdlIHVzZSBhIEJveDxJZGVudGlmaWVyPiBpbiB0aGUgY29t
cGlsZXIgdGhyZWFkLCB3ZSBuZWVkIHRvIGtlZXAgdGhlCi0gICAgLy8gSWRlbnRpZmllciBhbGl2
ZSBhbmQgb25seSBkZXJlZiBpdCBpbiB0aGUgbXV0YXRvciB0aHJlYWQgbGF0ZXIuIFRoaXMKLSAg
ICAvLyBlbnN1cmVzIHRoYXQgdGhlIGNvbXBpbGVyIHRocmVhZCBkb2Vzbid0IHJhY2UgYWdhaW5z
dCB0aGUgbXV0YXRvciBpbgotICAgIC8vIGFkanVzdGluZyB0aGUgSWRlbnRpZmllcidzIHJlZkNv
dW50LgotICAgIHVzaW5nIElkZW50aWZpZXJLZWVwQWxpdmUgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQo
Qm94PElkZW50aWZpZXI+KT47Ci0KLSAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihD
b2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0
dXNDb250ZXh0U3RhY2smIGRmZ0NvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVHJhY2tJZGVudGlm
aWVycywgSWRlbnRpZmllcktlZXBBbGl2ZSYpOworICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21w
dXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFw
LCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgZGZnQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBUcmFj
a0lkZW50aWZpZXJzKTsKICAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihjb25zdCBT
dHJ1Y3R1cmVTZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogCiAgICAgU3RhdGUgc3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlOyB9CkBAIC0xMzUsNyArMTMwLDcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKLSAgICBCb3g8SWRlbnRpZmllcj4g
c2luZ2xlSWRlbnRpZmllcigpIGNvbnN0OworICAgIENhY2hlYWJsZUlkZW50aWZpZXIgc2luZ2xl
SWRlbnRpZmllcigpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIG1lcmdlKGNvbnN0
IEdldEJ5U3RhdHVzJik7CkBAIC0xNDMsMTYgKzEzOCwxNiBAQCBwcml2YXRlOgogI2lmIEVOQUJM
RShKSVQpCiAgICAgR2V0QnlTdGF0dXMoY29uc3QgTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZSYp
OwogICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNp
dGVGZWVkYmFjaygKLSAgICAgICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENhbGxMaW5rU3RhdHVzOjpFeGl0
U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMsIElkZW50aWZpZXJLZWVwQWxpdmUmKTsKKyAgICAg
ICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEsIFRyYWNrSWRl
bnRpZmllcnMpOwogI2VuZGlmCiAgICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGcm9tTExJ
bnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCwgVHJhY2tJZGVudGlmaWVycyk7Ci0gICAgc3Rh
dGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRl
Y29kZUluZGV4LCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSwgVHJhY2tJ
ZGVudGlmaWVycywgSWRlbnRpZmllcktlZXBBbGl2ZSYpOworICAgIHN0YXRpYyBHZXRCeVN0YXR1
cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgRXhp
dEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMpOwog
CiAgICAgc3RydWN0IE1vZHVsZU5hbWVzcGFjZURhdGEgewogICAgICAgICBKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCogbV9tb2R1bGVOYW1lc3BhY2VPYmplY3QgeyBudWxscHRyIH07CiAgICAgICAg
IEpTTW9kdWxlRW52aXJvbm1lbnQqIG1fbW9kdWxlRW52aXJvbm1lbnQgeyBudWxscHRyIH07CiAg
ICAgICAgIFNjb3BlT2Zmc2V0IG1fc2NvcGVPZmZzZXQgeyB9OwotICAgICAgICBCb3g8SWRlbnRp
Zmllcj4gbV9pZGVudGlmaWVyOworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRp
ZmllcjsKICAgICB9OwogCiAgICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAxPiBtX3ZhcmlhbnRz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vz
c0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxNSArNDIsMTQgQEAgbmFtZXNwYWNlIEdldHRlclNldHRlckFjY2Vzc0Nh
c2VJbnRlcm5hbAogc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAot
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZShWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94
eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNl
LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0No
YWluKQorR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29s
IHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBKU09iamVjdCogY3VzdG9t
U2xvdEJhc2UsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBl
QWNjZXNzQ2hhaW4pCiAgICAgOiBCYXNlKHZtLCBvd25lciwgYWNjZXNzVHlwZSwgaWRlbnRpZmll
ciwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHksIGFkZGl0aW9uYWxT
ZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKQogewogICAgIG1fY3VzdG9tU2xvdEJh
c2Uuc2V0TWF5QmVOdWxsKHZtLCBvd25lciwgY3VzdG9tU2xvdEJhc2UpOwogfQogCi0KIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCi0g
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCisgICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIENhY2hlYWJsZUlkZW50aWZp
ZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKICAgICBi
b29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLAog
ICAgIE9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZSwgc3RkOjp1
bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKIHsK
QEAgLTY5LDcgKzY4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRl
cgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90
b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPiBjdXN0b21TZXR0ZXIsCiAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTQsMTEgKzU0LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGVtaXRET01KSVRHZXR0ZXIoQWNj
ZXNzR2VuZXJhdGlvblN0YXRlJiwgY29uc3QgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqLCBHUFJSZWcg
YmFzZUZvckdldEdQUik7CiAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IGNyZWF0ZSgKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosCisgICAgICAgIFZNJiwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZz
ZXQsIFN0cnVjdHVyZSosCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21HZXR0ZXIsCiAgICAgICAgIEpTT2JqZWN0KiBjdXN0
b21TbG90QmFzZSwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4sIHN0ZDo6dW5pcXVl
X3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4pOwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1
Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlPZmZzZXQsCisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwK
ICAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9w
dHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+LAogICAgICAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+IGN1c3RvbVNldHRlciA9IG51bGxwdHIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9
IG51bGxwdHIpOwogCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IGN1c3RvbUFjY2Vzc29yKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21B
Y2Nlc3NvcjsgfQogCiBwcml2YXRlOgotICAgIEdldHRlclNldHRlckFjY2Vzc0Nhc2UoVk0mLCBK
U0NlbGwqLCBBY2Nlc3NUeXBlLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlPZmZzZXQsIFN0
cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgYm9vbCB2aWFQcm94
eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNl
LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKKyAgICBHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgSlNP
YmplY3QqIGN1c3RvbVNsb3RCYXNlLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hh
aW4+KTsKIAogICAgIEdldHRlclNldHRlckFjY2Vzc0Nhc2UoY29uc3QgR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFu
Y2VPZkFjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0YW5jZU9mQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mQWNjZXNzQ2FzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTksNyArNTksNyBAQCBJbnN0YW5jZU9mQWNjZXNzQ2FzZTo6fkluc3RhbmNl
T2ZBY2Nlc3NDCiBJbnN0YW5jZU9mQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkFjY2Vzc0Nhc2UoCiAg
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLAogICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQsIEpTT2JqZWN0KiBwcm90b3R5cGUpCi0gICAgOiBCYXNlKHZtLCBvd25lciwgYWNj
ZXNzVHlwZSwgSWRlbnRpZmllcigpLCBpbnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgbnVsbHB0cikKKyAgICA6IEJhc2Uodm0sIG93bmVyLCBhY2Nlc3NUeXBlLCBudWxscHRy
LCBpbnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbnVsbHB0cikKICAgICAs
IG1fcHJvdG90eXBlKHZtLCBvd25lciwgcHJvdG90eXBlKQogewogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJB
Y2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMy
LDEzICszMiwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotSW50cmluc2ljR2V0dGVyQWNjZXNz
Q2FzZTo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9s
eVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQorSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZTo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24sIHN0ZDo6dW5pcXVl
X3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiAgICAgOiBC
YXNlKHZtLCBvd25lciwgSW50cmluc2ljR2V0dGVyLCBpZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkKIHsKICAg
ICBtX2ludHJpbnNpY0Z1bmN0aW9uLnNldCh2bSwgb3duZXIsIGludHJpbnNpY0Z1bmN0aW9uKTsK
IH0KIAotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEludHJpbnNpY0dldHRlckFjY2Vzc0Nh
c2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIEpTRnVuY3Rpb24qIGlu
dHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHBy
b3RvdHlwZUFjY2Vzc0NoYWluKQorc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIENhY2hlYWJs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24sIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJv
dG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiB7CiAgICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPihuZXcgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZSh2bSwg
b3duZXIsIGlkZW50aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGludHJp
bnNpY0Z1bmN0aW9uLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50cmluc2lj
R2V0dGVyQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQyLDE0ICs0MiwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2FuRW1pdEludHJpbnNp
Y0dldHRlcihKU0Z1bmN0aW9uKiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBlbWl0SW50cmluc2lj
R2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYpOwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqLCBjb25zdCBJZGVudGlmaWVyJiwg
UHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiwgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24sIHN0ZDo6dW5pcXVlX3B0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4pOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZz
ZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgSlNGdW5j
dGlvbiogaW50cmluc2ljRnVuY3Rpb24sIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3ND
aGFpbj4pOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNsb25lKCkgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICB+SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZSgpOwogCiBwcml2YXRl
OgotICAgIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UoVk0mLCBKU0NlbGwqLCBjb25zdCBJZGVu
dGlmaWVyJiwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiwgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24sIHN0ZDo6dW5pcXVl
X3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4pOworICAgIEludHJpbnNpY0dldHRlckFjY2Vzc0Nh
c2UoVk0mLCBKU0NlbGwqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgU3Ry
dWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBKU0Z1bmN0aW9uKiBp
bnRyaW5zaWNGdW5jdGlvbiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPik7
CiAKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbV9pbnRyaW5zaWNGdW5jdGlvbjsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlTmFtZXNwYWNlQWNj
ZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L01vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3
IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNyw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1Nb2R1
bGVOYW1lc3BhY2VBY2Nlc3NDYXNlOjpNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgSlNNb2R1bGVFbnZpcm9ubWVudCog
bW9kdWxlRW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KQorTW9kdWxlTmFtZXNw
YWNlQWNjZXNzQ2FzZTo6TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxl
RW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KQogICAgIDogQmFzZSh2bSwgb3du
ZXIsIE1vZHVsZU5hbWVzcGFjZUxvYWQsIGlkZW50aWZpZXIsIGludmFsaWRPZmZzZXQsIG51bGxw
dHIsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksIG51bGxwdHIpCiAgICAgLCBtX3Njb3Bl
T2Zmc2V0KHNjb3BlT2Zmc2V0KQogewpAQCAtNDUsNyArNDYsNyBAQCBNb2R1bGVOYW1lc3BhY2VB
Y2Nlc3NDYXNlOjpNb2R1bGVOYW1lc3BhCiAgICAgbV9tb2R1bGVFbnZpcm9ubWVudC5zZXQodm0s
IG93bmVyLCBtb2R1bGVFbnZpcm9ubWVudCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0LCBKU01vZHVsZUVudmlyb25tZW50KiBtb2R1bGVFbnZp
cm9ubWVudCwgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQpCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBKU01vZHVsZU5hbWVzcGFjZU9i
amVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0LCBKU01vZHVsZUVudmlyb25tZW50KiBtb2R1bGVF
bnZpcm9ubWVudCwgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQpCiB7CiAgICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPihuZXcgTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZSh2bSwg
b3duZXIsIGlkZW50aWZpZXIsIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgbW9kdWxlRW52aXJvbm1l
bnQsIHNjb3BlT2Zmc2V0KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmgJKHJldmlzaW9u
IDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVOYW1lc3Bh
Y2VBY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3ICs0NCw3IEBAIHB1YmxpYzoKICAg
ICBKU01vZHVsZUVudmlyb25tZW50KiBtb2R1bGVFbnZpcm9ubWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fbW9kdWxlRW52aXJvbm1lbnQuZ2V0KCk7IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVPZmZzZXQ7IH0KIAotICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRl
bnRpZmllciYsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiwgSlNNb2R1bGVFbnZpcm9ubWVudCos
IFNjb3BlT2Zmc2V0KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNy
ZWF0ZShWTSYsIEpTQ2VsbCogb3duZXIsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0KiwgSlNNb2R1bGVFbnZpcm9ubWVudCosIFNjb3BlT2Zmc2V0KTsKIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlOwogCkBA
IC01Miw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB+TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZSgp
OwogCiBwcml2YXRlOgotICAgIE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UoVk0mLCBKU0NlbGwq
IG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqLCBKU01v
ZHVsZUVudmlyb25tZW50KiwgU2NvcGVPZmZzZXQpOworICAgIE1vZHVsZU5hbWVzcGFjZUFjY2Vz
c0Nhc2UoVk0mLCBKU0NlbGwqIG93bmVyLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqLCBTY29wZU9mZnNldCk7CiAKICAg
ICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNl
T2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU01vZHVsZUVudmlyb25tZW50PiBtX21vZHVsZUVu
dmlyb25tZW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNpbmNsdWRl
ICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZ1bGxDb2RlT3JpZ2luLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgpAQCAtMzUxLDYgKzM1MiwxMiBAQCBib29sIFBvbHltb3JwaGljQWNj
ZXNzOjpwcm9wYWdhdGVUcmFuc2l0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBQb2x5
bW9ycGhpY0FjY2Vzczo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCisgICAgICAgIGF0KGkpLnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKIHZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlz
KSwgIjpbIik7CkBAIC00ODAsNyArNDg3LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5
bW9ycGhpY0FjY2VzcwogICAgICAgICAmJiBzdHViSW5mby5hY2Nlc3NUeXBlID09IEFjY2Vzc1R5
cGU6Okluc3RhbmNlT2YpIHsKICAgICAgICAgd2hpbGUgKCFjYXNlcy5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICBtX2xpc3QuYXBwZW5kKGNhc2VzLnRha2VMYXN0KCkpOwotICAgICAgICBjYXNlcy5h
cHBlbmQoQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6Okluc3Rh
bmNlT2ZHZW5lcmljLCBJZGVudGlmaWVyKCkpKTsKKyAgICAgICAgY2FzZXMuYXBwZW5kKEFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mR2VuZXJp
YywgbnVsbHB0cikpOwogICAgICAgICBnZW5lcmF0ZWRGaW5hbENvZGUgPSB0cnVlOwogICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmgJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDYgKzE0
OSw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhdCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiAqbV9saXN0W2ldOyB9CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgb3BlcmF0b3Jb
XSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAqbV9saXN0W2ldOyB9CiAKKyAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwogICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxz
ZSB0aGVuIHdlIGFyZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVT
dHViSW5mby4KICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFibGVBY2Nlc3ND
YXNlLmNwcAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLVByb3h5YWJsZUFjY2Vzc0Nhc2U6OlByb3h5YWJsZUFjY2Vz
c0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsCitQcm94eWFibGVBY2Nlc3NDYXNlOjpQcm94eWFibGVBY2Nlc3NDYXNlKFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsCiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgc3RkOjp1bmlx
dWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKICAgICA6
IEJhc2Uodm0sIG93bmVyLCBhY2Nlc3NUeXBlLCBpZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkKICAgICAsIG1f
YWRkaXRpb25hbFNldChhZGRpdGlvbmFsU2V0KQpAQCAtMzgsNyArMzgsNyBAQCBQcm94eWFibGVB
Y2Nlc3NDYXNlOjpQcm94eWFibGVBY2Nlc3NDYXNlCiAgICAgbV92aWFQcm94eSA9IHZpYVByb3h5
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6
Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBi
b29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBzdGQ6OnVuaXF1ZV9w
dHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQorc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29sIHZpYVByb3h5LCBX
YXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQogewogICAgIEFTU0VSVCh0eXBlID09IExv
YWQgfHwgdHlwZSA9PSBNaXNzIHx8IHR5cGUgPT0gR2V0R2V0dGVyKTsKICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KG5ldyBQcm94eWFibGVBY2Nlc3NDYXNlKHZtLCBvd25l
ciwgdHlwZSwgaWRlbnRpZmllciwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlh
UHJveHksIGFkZGl0aW9uYWxTZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFibGVB
Y2Nlc3NDYXNlLmgJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBA
QCBwdWJsaWM6CiAKICAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9hZGRpdGlvbmFsU2V0LmdldCgpOyB9CiAKLSAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUs
IGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2Vs
bCosIEFjY2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1
Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpLAogICAgICAgICBib29sIHZpYVByb3h5ID0gZmFsc2UsIFdhdGNocG9p
bnRTZXQqIGFkZGl0aW9uYWxTZXQgPSBudWxscHRyLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+ID0gbnVsbHB0cik7CiAKICAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFt
JiwgQ29tbWFQcmludGVyJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC00Niw3ICs0Niw3IEBAIHB1Ymxp
YzoKICAgICB+UHJveHlhYmxlQWNjZXNzQ2FzZSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgUHJveHlh
YmxlQWNjZXNzQ2FzZShWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUsIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBzdGQ6
OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKKyAgICBQcm94eWFibGVBY2Nlc3ND
YXNlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVy
dHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwg
Ym9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgc3RkOjp1bmlxdWVf
cHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPik7CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdhdGNo
cG9pbnRTZXQ+IG1fYWRkaXRpb25hbFNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjUzODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVu
dGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCkBAIC02MiwxMSArNjMsMTEg
QEAgU3RydWN0dXJlU3R1YkluZm86On5TdHJ1Y3R1cmVTdHViSW5mbygpCiB7CiB9CiAKLXZvaWQg
U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0
R2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIpCiB7CiAgICAgQVNTRVJUKGhhc0NvbnN0YW50SWRlbnRpZmllcik7CiAgICAgc2V0Q2Fj
aGVUeXBlKENhY2hlVHlwZTo6R2V0QnlJZFNlbGYpOwotICAgIG1fZ2V0QnlJZFNlbGZJZGVudGlm
aWVyID0gQm94PElkZW50aWZpZXI+OjpjcmVhdGUoaWRlbnRpZmllcik7CisgICAgbV9nZXRCeUlk
U2VsZklkZW50aWZpZXIgPSBpZGVudGlmaWVyOwogICAgIAogICAgIHUuYnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS5zZXQoCiAgICAgICAgIGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBi
YXNlT2JqZWN0U3RydWN0dXJlKTsKQEAgLTEzOCw3ICsxMzksNyBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjphYm91dFRvRGllKCkKIH0KIAogQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1
cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKLSAgICBjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gYWNjZXNzQ2FzZSkKKyAgICBjb25zdCBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnQsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nl
c3NDYXNlKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIApAQCAtMTk0LDYgKzE5NSw3IEBA
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm8KICAgICAgICAgICAgIHUu
c3R1YiA9IGFjY2Vzcy5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIEFT
U0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpOwogICAgICAgICBSRUxFQVNFX0FT
U0VSVCghcmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpOwogICAgICAgICAKICAgICAgICAgLy8g
SWYgd2UgZGlkbid0IGJ1ZmZlciBhbnkgY2FzZXMgdGhlbiBiYWlsLiBJZiB0aGlzIG1hZGUgbm8g
Y2hhbmdlcyB0aGVuIHdlJ2xsIGp1c3QgdHJ5IGFnYWluCkBAIC0yNzksNiArMjgxLDI3IEBAIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KENvZGVCbG9jayoKICAgICBzZXRDYWNoZVR5cGUo
Q2FjaGVUeXBlOjpVbnNldCk7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgc3dpdGNoIChtX2NhY2hlVHlwZSkg
eworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlM
ZW5ndGg6CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0cmluZ0xlbmd0aDoKKyAgICBjYXNlIENhY2hl
VHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgICAg
IG1fZ2V0QnlJZFNlbGZJZGVudGlmaWVyLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgdS5zdHViLT52aXNp
dENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuOworfQorCiB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyNTM4
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCkBAIC03NCwx
OSArNzUsMjEgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGUpOwog
ICAgIH5TdHJ1Y3R1cmVTdHViSW5mbygpOwogCi0gICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoQ29k
ZUJsb2NrKiwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgSWRlbnRpZmllciYpOworICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKENvZGVCbG9jayos
IFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQsIENhY2hlYWJs
ZUlkZW50aWZpZXIpOwogICAgIHZvaWQgaW5pdEFycmF5TGVuZ3RoKCk7CiAgICAgdm9pZCBpbml0
U3RyaW5nTGVuZ3RoKCk7CiAgICAgdm9pZCBpbml0UHV0QnlJZFJlcGxhY2UoQ29kZUJsb2NrKiwg
U3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9p
ZCBpbml0SW5CeUlkU2VsZihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0KTsKIAotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgYWRkQWNj
ZXNzQ2FzZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCBjb25z
dCBJZGVudGlmaWVyJiwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KTsKKyAgICBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IGFkZEFjY2Vzc0Nhc2UoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyJiwgQ29kZUJsb2NrKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+KTsKIAogICAgIHZvaWQgcmVzZXQoQ29kZUJsb2NrKik7CiAKICAgICB2b2lkIGRl
cmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKwogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVy
ZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLAog
ICAgIC8vIGVpdGhlciBlbnRpcmVseSBvciBqdXN0IGVub3VnaCB0byBlbnN1cmUgdGhhdCB0aG9z
ZSBkZWFkIHBvaW50ZXJzIGRvbid0IGdldCB1c2VkIGFueW1vcmUuCiAgICAgdm9pZCB2aXNpdFdl
YWtSZWZlcmVuY2VzKENvZGVCbG9jayopOwpAQCAtMTcxLDcgKzE3NCw3IEBAIHB1YmxpYzoKIAog
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKIHByaXZhdGU6Ci0gICAgQm94PElkZW50aWZpZXI+
IG1fZ2V0QnlJZFNlbGZJZGVudGlmaWVyOworICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9nZXRC
eUlkU2VsZklkZW50aWZpZXI7CiBwdWJsaWM6CiAKICAgICB1bmlvbiB7CkBAIC0xODIsNyArMTg1
LDcgQEAgcHVibGljOgogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7
CiAKLSAgICBCb3g8SWRlbnRpZmllcj4gZ2V0QnlJZFNlbGZJZGVudGlmaWVyKCkKKyAgICBDYWNo
ZWFibGVJZGVudGlmaWVyIGdldEJ5SWRTZWxmSWRlbnRpZmllcigpCiAgICAgewogICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmKTsKICAg
ICAgICAgcmV0dXJuIG1fZ2V0QnlJZFNlbGZJZGVudGlmaWVyOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDI1Mzgx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgi
CiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZVVzZURl
Zi5oIgorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
Q2FsbExpbmtTdGF0dXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2tXaXRoSklUVHlwZS5oIgpAQCAtNDcxOSwxMyArNDcyMCwxMCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUdldEJ5SWQoY29uc3QgCiAgICAgZWxzZSBpZiAoT3A6Om9wY29kZUlEID09
IG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIHR5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
RGlyZWN0OwogICAgIAotICAgIEdldEJ5U3RhdHVzOjpJZGVudGlmaWVyS2VlcEFsaXZlIGtlZXBB
bGl2ZSA9IFsmXSAoQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIpIHsKLSAgICAgICAgbV9ncmFw
aC5tX3BsYW4ua2VlcEFsaXZlSWRlbnRpZmllcihXVEZNb3ZlKGlkZW50aWZpZXIpKTsKLSAgICB9
OwogICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3Io
CiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKLSAgICAgICAg
Y3VycmVudENvZGVPcmlnaW4oKSwgR2V0QnlTdGF0dXM6OlRyYWNrSWRlbnRpZmllcnM6Ok5vLCBr
ZWVwQWxpdmUpOworICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpLCBHZXRCeVN0YXR1czo6VHJh
Y2tJZGVudGlmaWVyczo6Tm8pOwogCiAgICAgaGFuZGxlR2V0QnlJZCgKICAgICAgICAgYnl0ZWNv
ZGUubV9kc3QsIHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5U3RhdHVz
LCB0eXBlLCBvcGNvZGVMZW5ndGgpOwpAQCAtNTYyNiwxMCArNTYyNCw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBn
ZXQoYnl0ZWNvZGUubV9iYXNlKTsKICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5
dGVjb2RlLm1fcHJvcGVydHkpOwogICAgICAgICAgICAgYm9vbCBzaG91bGRDb21waWxlQXNHZXRC
eUlkID0gZmFsc2U7Ci0gICAgICAgICAgICBHZXRCeVN0YXR1czo6SWRlbnRpZmllcktlZXBBbGl2
ZSBrZWVwQWxpdmUgPSBbJl0gKEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyKSB7Ci0gICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX3BsYW4ua2VlcEFsaXZlSWRlbnRpZmllcihXVEZNb3ZlKGlkZW50
aWZpZXIpKTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBHZXRCeVN0YXR1cyBnZXRCeVN0
YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFj
aywgY3VycmVudENvZGVPcmlnaW4oKSwgR2V0QnlTdGF0dXM6OlRyYWNrSWRlbnRpZmllcnM6Olll
cywga2VlcEFsaXZlKTsKKyAgICAgICAgICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0
QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBt
X2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLCBjdXJyZW50
Q29kZU9yaWdpbigpLCBHZXRCeVN0YXR1czo6VHJhY2tJZGVudGlmaWVyczo6WWVzKTsKIAogICAg
ICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IDA7CiAKQEAgLTU2NDAsMTAgKzU2
MzUsMTUgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBk
byBzb21ldGhpbmcgbGlrZSBNdWx0aUdldEJ5T2Zmc2V0IGluIGEgbXVsdGkgaWRlbnRpZmllciBt
b2RlLgogICAgICAgICAgICAgICAgIC8vIFRoYXQgd2F5LCB3ZSBjb3VsZCBib3RoIHN3aXRjaCBv
biBtdWx0aXBsZSBzdHJ1Y3R1cmVzIGFuZCBtdWx0aXBsZSBpZGVudGlmaWVycyAob3IgaW50IDMy
IHByb3BlcnRpZXMpLgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDQyMTYKLSAgICAgICAgICAgICAgICBpZiAoQm94PElkZW50aWZp
ZXI+IGltcGwgPSBnZXRCeVN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUo
aW1wbCk7CisgICAgICAgICAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciA9IGdldEJ5U3RhdHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUo
aWRlbnRpZmllci51aWQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlz
Q2VsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0g
bV9ncmFwaC5mcmVlemVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwogICAgICAgICAgICAg
ICAgICAgICBzaG91bGRDb21waWxlQXNHZXRCeUlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8oaW1wbC0+aW1wbCgpKSwgcHJvcGVydHkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAkocmV2aXNp
b24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRp
ZmllcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKQEAgLTU1LDcgKzU2LDcgQEAgdW5zaWduZWQgRGVzaXJlZElkZW50aWZp
ZXJzOjpudW1iZXJPZklkZQogICAgIHJldHVybiBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlm
aWVycygpICsgbV9hZGRlZElkZW50aWZpZXJzLnNpemUoKTsKIH0KIAotdm9pZCBEZXNpcmVkSWRl
bnRpZmllcnM6OnByb2Nlc3NDb2RlQmxvY2tJZGVudGlmaWVyc0lmTmVlZGVkKCkKK3Vuc2lnbmVk
IERlc2lyZWRJZGVudGlmaWVyczo6ZW5zdXJlKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXApCiB7CiAg
ICAgaWYgKCFtX2RpZFByb2Nlc3NJZGVudGlmaWVycykgewogICAgICAgICAvLyBEbyB0aGlzIG5v
dyBpbnN0ZWFkIG9mIHRoZSBjb25zdHJ1Y3RvciBzbyB0aGF0IHdlIGRvbid0IHBheSB0aGUgcHJp
Y2Ugb24gdGhlIG1haW4KQEAgLTY0LDExICs2NSw2IEBAIHZvaWQgRGVzaXJlZElkZW50aWZpZXJz
Ojpwcm9jZXNzQ29kZUJsb2MKICAgICAgICAgICAgIG1faWRlbnRpZmllck51bWJlckZvck5hbWUu
YWRkKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGluZGV4KS5pbXBsKCksIGluZGV4KTsKICAgICAg
ICAgbV9kaWRQcm9jZXNzSWRlbnRpZmllcnMgPSB0cnVlOwogICAgIH0KLX0KLQotdW5zaWduZWQg
RGVzaXJlZElkZW50aWZpZXJzOjplbnN1cmUoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCkKLXsKLSAg
ICBwcm9jZXNzQ29kZUJsb2NrSWRlbnRpZmllcnNJZk5lZWRlZCgpOwogCiAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX2lkZW50aWZpZXJOdW1iZXJGb3JOYW1lLmFkZChyZXAsIG51bWJlck9mSWRlbnRp
ZmllcnMoKSk7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKQEAgLTc5LDQ1ICs3NSwyMCBAQCB1bnNpZ25lZCBEZXNpcmVkSWRlbnRpZmllcnM6OmVuc3Vy
ZShVbmlxCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdW5zaWduZWQgRGVzaXJlZElkZW50aWZp
ZXJzOjplbnN1cmUoQm94PElkZW50aWZpZXI+IHJlcCkKLXsKLSAgICBwcm9jZXNzQ29kZUJsb2Nr
SWRlbnRpZmllcnNJZk5lZWRlZCgpOwotCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwgPSBy
ZXAtPmltcGwoKTsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faWRlbnRpZmllck51bWJlckZvck5h
bWUuYWRkKGltcGwsIG51bWJlck9mSWRlbnRpZmllcnMoKSk7Ci0gICAgdW5zaWduZWQgcmVzdWx0
ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgbV9hZGRlZElkZW50aWZpZXJzLmFwcGVuZChXVEZNb3ZlKHJlcCkpOwot
ICAgICAgICBBU1NFUlQoYXQocmVzdWx0KSA9PSBpbXBsKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQogVW5pcXVlZFN0cmluZ0ltcGwqIERlc2lyZWRJZGVudGlmaWVyczo6YXQodW5z
aWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHJlc3VsdDsKICAg
ICBpZiAoaW5kZXggPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpKQogICAgICAg
ICByZXN1bHQgPSBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpbmRleCkuaW1wbCgpOwotICAgIGVs
c2UgewotICAgICAgICBjb25zdCBhdXRvJiB2YXJpYW50ID0gbV9hZGRlZElkZW50aWZpZXJzW2lu
ZGV4IC0gbV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKV07Ci0gICAgICAgIGlmIChX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZWRTdHJpbmdJbXBsKj4odmFyaWFudCkpCi0gICAg
ICAgICAgICByZXN1bHQgPSBXVEY6OmdldDxVbmlxdWVkU3RyaW5nSW1wbCo+KHZhcmlhbnQpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBXVEY6OmdldDxCb3g8SWRlbnRpZmll
cj4+KHZhcmlhbnQpLT5pbXBsKCk7Ci0gICAgfQorICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0g
bV9hZGRlZElkZW50aWZpZXJzW2luZGV4IC0gbV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmll
cnMoKV07CiAgICAgQVNTRVJUKHJlc3VsdC0+aGFzQXRMZWFzdE9uZVJlZigpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCiB2b2lkIERlc2lyZWRJZGVudGlmaWVyczo6cmVhbGx5QWRkKFZNJiB2
bSwgQ29tbW9uRGF0YSogY29tbW9uRGF0YSkKIHsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcmlh
bnQgOiBtX2FkZGVkSWRlbnRpZmllcnMpIHsKLSAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHJl
cDsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlZFN0cmluZ0ltcGwq
Pih2YXJpYW50KSkKLSAgICAgICAgICAgIHJlcCA9IFdURjo6Z2V0PFVuaXF1ZWRTdHJpbmdJbXBs
Kj4odmFyaWFudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcCA9IFdURjo6Z2V0PEJv
eDxJZGVudGlmaWVyPj4odmFyaWFudCktPmltcGwoKTsKLQorICAgIGZvciAoYXV0byByZXAgOiBt
X2FkZGVkSWRlbnRpZmllcnMpIHsKICAgICAgICAgQVNTRVJUKHJlcC0+aGFzQXRMZWFzdE9uZVJl
ZigpKTsKICAgICAgICAgSWRlbnRpZmllciB1aWQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBy
ZXApOwogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRJZGVudGlmaWVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZElkZW50aWZpZXJzLmgJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VW5pcXVlZFN0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OSw3ICs0OCw2IEBA
IHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZklkZW50aWZpZXJzKCk7CiAgICAg
dW5zaWduZWQgZW5zdXJlKFVuaXF1ZWRTdHJpbmdJbXBsKik7Ci0gICAgdW5zaWduZWQgZW5zdXJl
KEJveDxJZGVudGlmaWVyPik7CiAgICAgCiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdDsKICAgICAKQEAgLTYxLDcgKzU5LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHByb2Nlc3NDb2RlQmxvY2tJZGVudGlmaWVyc0lmTmVlZGVkKCk7CiAKICAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOwotICAgIFZlY3RvcjxWYXJpYW50PFVuaXF1ZWRTdHJpbmdJbXBsKiwg
Qm94PElkZW50aWZpZXI+Pj4gbV9hZGRlZElkZW50aWZpZXJzOworICAgIFZlY3RvcjxVbmlxdWVk
U3RyaW5nSW1wbCo+IG1fYWRkZWRJZGVudGlmaWVyczsKICAgICBIYXNoTWFwPFVuaXF1ZWRTdHJp
bmdJbXBsKiwgdW5zaWduZWQ+IG1faWRlbnRpZmllck51bWJlckZvck5hbWU7CiAgICAgYm9vbCBt
X2RpZFByb2Nlc3NJZGVudGlmaWVyczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDYgQEAKICNpbmNsdWRl
ICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKICNp
bmNsdWRlICJWTUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKICNpZiBF
TkFCTEUoRlRMX0pJVCkKICNpbmNsdWRlICJGVExDYXBhYmlsaXRpZXMuaCIKQEAgLTE1NSw3ICsx
NTQsNiBAQCBQbGFuOjpQbGFuKENvZGVCbG9jayogcGFzc2VkQ29kZUJsb2NrLCBDCiAKIFBsYW46
On5QbGFuKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh1bm51a2VkVk0oKS0+Y3VycmVudFRocmVh
ZElzSG9sZGluZ0FQSUxvY2soKSk7CiB9CiAKIGJvb2wgUGxhbjo6Y29tcHV0ZUNvbXBpbGVUaW1l
cygpIGNvbnN0CkBAIC02OTYsMjIgKzY5NCw2IEBAIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKQogdm9pZCBQbGFuOjpjYW5jZWwoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1f
c3RhZ2UgIT0gQ2FuY2VsbGVkKTsKLQotICAgIC8vIFdoZW4gd2UgY2FuY2VsIGEgcGxhbiwgdGhl
cmUncyBhIGNoYW5jZSB0aGF0IHRoZSBjb21waWxlciB0aHJlYWQgbWF5IGhhdmUKLSAgICAvLyBh
bHJlYWR5IHJlZidlZCBpdCBhbmQgaXMgd29ya2luZyBvbiBpdC4gVGhpcyByZXN1bHRzIGluIGEg
cmFjZSB3aGVyZSB0aGUKLSAgICAvLyBjb21waWxlciB0aHJlYWQgbWF5IGhvbGQgdGhlIGxhc3Qg
cmVmZXJlbmNlIHRvIHRoZSBwbGFuLiBXZSByZXF1aXJlIHRoYXQKLSAgICAvLyB0aGUgcGxhbiBp
cyBvbmx5IGRlc3RydWN0ZWQgb24gdGhlIG11dGF0b3IgdGhyZWFkIGJlY2F1c2Ugd2UgcGlnZ3kg
YmFjawotICAgIC8vIG9uIHRoZSBwbGFuIHRvIGVuc3VyZSBjZXJ0YWluIG90aGVyIG9iamVjdHMg
YXJlIG9ubHkgZGVzdHJ1Y3RlZCBvbiB0aGUKLSAgICAvLyBtdXRhdG9yIHRocmVhZC4gRm9yIGV4
YW1wbGUsIHNlZSBQbGFuOjptX2lkZW50aWZpZXJzS2VwdEFsaXZlRm9yQ2xlYW5VcC4KLSAgICAv
LwotICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBwbGFuIGlzIGRlc3RydWN0ZWQgb24gdGhlIG11
dGF0b3IgYW5kIG5vdCB0aGUgY29tcGlsZXIKLSAgICAvLyB0aHJlYWQsIHRoZSBjb21waWxlciB0
aHJlYWQgd2lsbCBlbnF1ZXVlIGFueSBjYW5jZWxsZWQgcGxhbiBpdCBzZWVzIGluCi0gICAgLy8g
dGhlIHdvcmtsaXN0J3MgbV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbi4gVGhlIG11
dGF0b3Igd2lsbCBsYXRlcgotICAgIC8vIGRlbGV0ZSB0aGUgY2FuY2VsbGVkIHBsYW5zIGluIG1f
Y2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24uCi0gICAgLy8gSG93ZXZlciwgYSBtdXRh
dG9yIHNob3VsZCBvbmx5IGRlbGV0ZSBjYW5jZWxsZWQgcGxhbnMgdGhhdCBiZWxvbmcgdG8gaXRz
Ci0gICAgLy8gVk0uIEhlbmNlLCBhIGNhbmNlbGxlZCBwbGFuIG5lZWRzIHRvIGtlZXAgaXRzIG1f
dm0gcG9pbnRlciB0byBsZXQgdGhlCi0gICAgLy8gbXV0YXRvciBrbm93IHdoaWNoIFZNIGl0IGJl
bG9uZ3MgdG8uCi0gICAgLy8gUmVmOiBTZWUgV29ya2xpc3Q6OmRlbGV0ZUNhbmNlbGxlZFBsYW5z
Rm9yVk0oKS4KICAgICBBU1NFUlQobV92bSk7CiAKICAgICAvLyBOdWtlIHRoZSBWTSBwb2ludGVy
IHNvIHRoYXQgcG9pbnRlciBjb21wYXJpc29ucyBhZ2FpbnN0IGl0IHdpbGwgZmFpbC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNiBAQAogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxh
dGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVzZXMuaCIKLSNpbmNsdWRlIDx3dGYvQm94
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KIApAQCAtMTE3LDEyICsxMTYsNiBAQCBwdWJsaWM6CiAgICAgRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrKiBjYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2su
Z2V0KCk7IH0KICAgICB2b2lkIHNldENhbGxiYWNrKFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spIHsgbV9jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOyB9CiAK
LSAgICB2b2lkIGtlZXBBbGl2ZUlkZW50aWZpZXIoQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIp
Ci0gICAgewotICAgICAgICBpZiAoaWRlbnRpZmllcikKLSAgICAgICAgICAgIG1faWRlbnRpZmll
cnNLZXB0QWxpdmVGb3JDbGVhblVwLmFwcGVuZChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKLSAgICB9
Ci0KIHByaXZhdGU6CiAgICAgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCkgY29uc3Q7CiAgICAg
Ym9vbCByZXBvcnRDb21waWxlVGltZXMoKSBjb25zdDsKQEAgLTE4MSw3ICsxNzQsNiBAQCBwcml2
YXRlOgogICAgIFN0YWdlIG1fc3RhZ2U7CiAKICAgICBSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrPiBtX2NhbGxiYWNrOwotICAgIFZlY3RvcjxCb3g8SWRlbnRpZmllcj4sIDE2PiBt
X2lkZW50aWZpZXJzS2VwdEFsaXZlRm9yQ2xlYW5VcDsKIAogICAgIE1vbm90b25pY1RpbWUgbV90
aW1lQmVmb3JlRlRMOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuY3BwCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDEwICsxMDAsOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZGF0YS5tX3JpZ2h0VG9SdW4pOwog
ICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV93b3JrbGlzdC5tX2xv
Y2spOwotICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQp
IHsKLSAgICAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVz
dHJ1Y3Rpb24uYXBwZW5kKFdURk1vdmUobV9wbGFuKSk7CisgICAgICAgICAgICBpZiAobV9wbGFu
LT5zdGFnZSgpID09IFBsYW46OkNhbmNlbGxlZCkKICAgICAgICAgICAgICAgICByZXR1cm4gV29y
a1Jlc3VsdDo6Q29udGludWU7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3BsYW4tPm5v
dGlmeUNvbXBpbGluZygpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTI1LDEwICsxMjMsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIAogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcigqbV93b3JrbGlzdC5tX2xvY2spOwotICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3Rh
Z2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpIHsKLSAgICAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1f
Y2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24uYXBwZW5kKFdURk1vdmUobV9wbGFuKSk7
CisgICAgICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSgpID09IFBsYW46OkNhbmNlbGxlZCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7Ci0gICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fcGxhbi0+bm90aWZ5UmVhZHkoKTsKICAgICAg
ICAgICAgIApAQCAtMzA0LDQ3ICszMDAsMTAgQEAgdm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxs
UGxhbnNGb3JWTUFyZQogICAgIH0KIH0KIAotdm9pZCBXb3JrbGlzdDo6ZGVsZXRlQ2FuY2VsbGVk
UGxhbnNGb3JWTShMb2NrSG9sZGVyJiwgVk0mIHZtKQotewotICAgIFJFTEVBU0VfQVNTRVJUKHZt
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIEhhc2hTZXQ8UmVmUHRyPFBs
YW4+PiByZW1vdmVkUGxhbnM7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIHNjZW5hcmlvIGNhbiBv
Y2N1cjoKLSAgICAvLyAxLiBUaGUgREZHIHRocmVhZCBzdGFydGVkIGNvbXBpbGluZyBhIHBsYW4u
Ci0gICAgLy8gMi4gVGhlIEdDIHRocmVhZCBjYW5jZWxzIHRoZSBwbGFuLCBhbmQgYWRkcyBpdCB0
byBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLgotICAgIC8vIDMuIFRoZSBERkcg
dGhyZWFkIGZpbmlzaGVzIGNvbXBpbGluZywgYW5kIGRpc2NvdmVycyB0aGF0IHRoZSB0aHJlYWQg
aXMgY2FuY2VsbGVkLgotICAgIC8vICAgIFRvIGF2b2lkIGRlc3RydWN0aW5nIHRoZSBwbGFuIGlu
IHRoZSBERkcgdGhyZWFkLCBpdCBhZGRzIGl0IHRvCi0gICAgLy8gICAgbV9jYW5jZWxsZWRQbGFu
c1BlbmRpbmdEZXN0cnVjdGlvbi4KLSAgICAvLyA0LiBUaGUgYWJvdmUgb2NjdXJzIGJlZm9yZSB0
aGUgbXV0YXRvciBydW5zIGRlbGV0ZUNhbmNlbGxlZFBsYW5zRm9yVk0oKS4KLSAgICAvLwotICAg
IC8vIEhlbmNlLCB0aGUgc2FtZSBjYW5jZWxsZWQgcGxhbiBjYW4gYXBwZWFyIGluIG1fY2FuY2Vs
bGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24KLSAgICAvLyBtb3JlIHRoYW4gb25jZS4gVGhpcyBp
cyB3aHkgd2UgbmVlZCB0byBmaWx0ZXIgdGhlIGNhbmNlbGxlZCBwbGFucyB0aHJvdWdoCi0gICAg
Ly8gdGhlIHJlbW92ZWRQbGFucyBIYXNoU2V0IGJlZm9yZSB3ZSBkbyB0aGUgcmVmQ291bnQgY2hl
Y2sgYmVsb3cuCi0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2FuY2VsbGVkUGxhbnNQ
ZW5kaW5nRGVzdHJ1Y3Rpb24uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPFBsYW4+IHBs
YW4gPSBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uW2ldOwotICAgICAgICBpZiAo
cGxhbi0+dW5udWtlZFZNKCkgIT0gJnZtKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IG1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb25baS0tXSA9IG1fY2FuY2VsbGVkUGxh
bnNQZW5kaW5nRGVzdHJ1Y3Rpb24ubGFzdCgpOwotICAgICAgICBtX2NhbmNlbGxlZFBsYW5zUGVu
ZGluZ0Rlc3RydWN0aW9uLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgcmVtb3ZlZFBsYW5zLmFkZChX
VEZNb3ZlKHBsYW4pKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIXJlbW92ZWRQbGFucy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSByZW1vdmVkUGxhbnMudGFrZUFueSgp
OwotICAgICAgICBBU1NFUlQocGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpOwotICAg
ICAgICBpZiAocGxhbi0+cmVmQ291bnQoKSA+IDEpCi0gICAgICAgICAgICBtX2NhbmNlbGxlZFBs
YW5zUGVuZGluZ0Rlc3RydWN0aW9uLmFwcGVuZChXVEZNb3ZlKHBsYW4pKTsKLSAgICB9Ci19Ci0K
IHZvaWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0sIFZlY3RvcjxS
ZWZQdHI8UGxhbj4sIDg+JiBteVJlYWR5UGxhbnMpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgIEFTU0VSVCh2bS5j
dXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLQotICAgIGRlbGV0ZUNhbmNlbGxlZFBs
YW5zRm9yVk0obG9ja2VyLCB2bSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlYWR5
UGxhbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3JlYWR5
UGxhbnNbaV07CiAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKQEAgLTQ0Nyw4ICs0MDYs
NiBAQCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIEhhc2hTZXQ8Q29tcGlsYXRp
b25LZXk+IGRlYWRQbGFuS2V5czsKLSAgICAgICAgYm9vbCBpc0luTXV0YXRvciA9IHZtLmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCk7Ci0KICAgICAgICAgZm9yIChQbGFuTWFwOjppdGVy
YXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRl
cikgewogICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQpAQCAtNDYyLDEyICs0MTksOCBAQCB2b2lkIFdv
cmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAgICAgICAgICAgZGVhZFBsYW5LZXlz
LmFkZChwbGFuLT5rZXkoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFkZWFkUGxhbktleXMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmb3IgKEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+Ojpp
dGVyYXRvciBpdGVyID0gZGVhZFBsYW5LZXlzLmJlZ2luKCk7IGl0ZXIgIT0gZGVhZFBsYW5LZXlz
LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1f
cGxhbnMudGFrZSgqaXRlcik7Ci0gICAgICAgICAgICAgICAgcGxhbi0+Y2FuY2VsKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFpc0luTXV0YXRvcikKLSAgICAgICAgICAgICAgICAgICAgbV9jYW5j
ZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbi5hcHBlbmQoV1RGTW92ZShwbGFuKSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+OjppdGVy
YXRvciBpdGVyID0gZGVhZFBsYW5LZXlzLmJlZ2luKCk7IGl0ZXIgIT0gZGVhZFBsYW5LZXlzLmVu
ZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgbV9wbGFucy50YWtlKCppdGVyKS0+Y2FuY2Vs
KCk7CiAgICAgICAgICAgICBEZXF1ZTxSZWZQdHI8UGxhbj4+IG5ld1F1ZXVlOwogICAgICAgICAg
ICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxQ
bGFuPiBwbGFuID0gbV9xdWV1ZS50YWtlRmlyc3QoKTsKQEAgLTUwMyw5ICs0NTYsNiBAQCB2b2lk
IFdvcmtsaXN0OjpyZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvCiAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fbG9jayk7CiAgICAgSGFzaFNldDxDb21waWxhdGlvbktleT4gZGVhZFBsYW5LZXlzOwog
ICAgIFZlY3RvcjxSZWZQdHI8UGxhbj4+IGRlYWRQbGFuczsKLSAgICBBU1NFUlQodm0uY3VycmVu
dFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0KLSAgICBkZWxldGVDYW5jZWxsZWRQbGFuc0Zv
clZNKGxvY2tlciwgdm0pOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3BsYW5zKSB7CiAgICAg
ICAgIFBsYW4qIHBsYW4gPSBlbnRyeS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBsYW4tPnZt
KCkgIT0gJnZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAko
cmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IHZvaWQgdGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpOwogICAgIAogICAgIHZvaWQgcmVt
b3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgVmVjdG9yPFJlZlB0cjxQbGFuPiwgOD4mKTsKLSAg
ICB2b2lkIGRlbGV0ZUNhbmNlbGxlZFBsYW5zRm9yVk0oTG9ja0hvbGRlciYsIFZNJik7CiAKICAg
ICB2b2lkIGR1bXAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBQcmludFN0cmVhbSYpIGNvbnN0Owog
ICAgIApAQCAtMTE0LDcgKzExMyw2IEBAIHByaXZhdGU6CiAgICAgLy8gVXNlZCB0byBxdWlja2x5
IGZpbmQgd2hpY2ggcGxhbnMgaGF2ZSBiZWVuIGNvbXBpbGVkIGFuZCBhcmUgcmVhZHkgdG8KICAg
ICAvLyBiZSBjb21wbGV0ZWQuCiAgICAgVmVjdG9yPFJlZlB0cjxQbGFuPiwgMTY+IG1fcmVhZHlQ
bGFuczsKLSAgICBWZWN0b3I8UmVmUHRyPFBsYW4+LCA0PiBtX2NhbmNlbGxlZFBsYW5zUGVuZGlu
Z0Rlc3RydWN0aW9uOwogICAgIFJlZjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fcGxhbkVu
cXVldWVkOwogICAgIENvbmRpdGlvbiBtX3BsYW5Db21waWxlZDsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNTM4MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNs
dWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklu
bGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJERkdDb21w
aWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKQEAgLTIxMyw3ICsyMTQsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyCiAKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgaWYgKHN0dWJJbmZv
LT5jb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgYmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVs
bCgpKSAmJiAhc2xvdC5pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpICYmIChzbG90LmlzQ2FjaGVh
YmxlVmFsdWUoKSB8fCBzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc1Vuc2V0KCkp
KQotICAgICAgICByZXBhdGNoR2V0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1
ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgR2V0QnlLaW5kOjpUcnkpOworICAgICAgICByZXBh
dGNoR2V0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRl
bnRpZmllcihpZGVudCksIHNsb3QsICpzdHViSW5mbywgR2V0QnlLaW5kOjpUcnkpOwogCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShzbG90LmdldFB1cmVSZXN1bHQoKSk7CiB9CkBAIC0yNjks
NyArMjcwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIGlm
IChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZS5zdHJ1
Y3R1cmVPck51bGwoKSkpCi0gICAgICAgIHJlcGF0Y2hHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBHZXRCeUtpbmQ6OkRpcmVj
dCk7CisgICAgICAgIHJlcGF0Y2hHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZh
bHVlLCBDYWNoZWFibGVJZGVudGlmaWVyKGlkZW50KSwgc2xvdCwgKnN0dWJJbmZvLCBHZXRCeUtp
bmQ6OkRpcmVjdCk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShmb3VuZCA/IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBpZGVudCkgOiBqc1VuZGVm
aW5lZCgpKSk7CiB9CkBAIC0zMjksNyArMzMwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZQogICAgICAgICAKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVy
Q2FjaGluZyh2bSwgY29kZUJsb2NrLCBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCkpKQotICAg
ICAgICAgICAgcmVwYXRjaEdldEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUs
IGlkZW50LCBzbG90LCAqc3R1YkluZm8sIEdldEJ5S2luZDo6Tm9ybWFsKTsKKyAgICAgICAgICAg
IHJlcGF0Y2hHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBDYWNoZWFi
bGVJZGVudGlmaWVyKGlkZW50KSwgc2xvdCwgKnN0dWJJbmZvLCBHZXRCeUtpbmQ6Ok5vcm1hbCk7
CiAgICAgICAgIHJldHVybiBmb3VuZCA/IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBpZGVu
dCkgOiBqc1VuZGVmaW5lZCgpOwogICAgIH0pKTsKIH0KQEAgLTM4Niw3ICszODcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgIAogICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGlm
IChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZS5zdHJ1
Y3R1cmVPck51bGwoKSkpCi0gICAgICAgICAgICByZXBhdGNoR2V0QnkoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgR2V0QnlLaW5kOjpX
aXRoVGhpcyk7CisgICAgICAgICAgICByZXBhdGNoR2V0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllcihpZGVudCksIHNsb3QsICpzdHViSW5m
bywgR2V0QnlLaW5kOjpXaXRoVGhpcyk7CiAgICAgICAgIHJldHVybiBmb3VuZCA/IHNsb3QuZ2V0
VmFsdWUoZ2xvYmFsT2JqZWN0LCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpOwogICAgIH0pKTsKIH0K
QEAgLTIwMjgsNyArMjAyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2UKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChiYXNlVmFsdWUuaXNDZWxsKCkgJiYg
aXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpKSB7CisgICAgaWYgKGJhc2VWYWx1ZS5pc0NlbGwo
KSAmJiBDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHN1YnNj
cmlwdCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3Jp
cHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5
bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKQEAgLTIwMzcsNyArMjAzOCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGJhc2VWYWx1
ZS5jbGFzc0luZm9Pck51bGwodm0pLCBwcm9wZXJ0eU5hbWUsIGJhc2VWYWx1ZSA9PSBzbG90LnNs
b3RCYXNlKCkpKTsgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJ
bmZvLT5jb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgYmFzZVZhbHVlLnN0cnVjdHVyZU9y
TnVsbCgpLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVwYXRj
aEdldEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwg
c2xvdCwgKnN0dWJJbmZvLCBHZXRCeUtpbmQ6Ok5vcm1hbEJ5VmFsKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmVwYXRjaEdldEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIENh
Y2hlYWJsZUlkZW50aWZpZXIoc3Vic2NyaXB0LmFzQ2VsbCgpKSwgc2xvdCwgKnN0dWJJbmZvLCBH
ZXRCeUtpbmQ6Ok5vcm1hbEJ5VmFsKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQgPyBz
bG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgICAgICB9KSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQmluYXJ5U3dpdGNoLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVk
ZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVm
Zmxlci5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdTcGVjdWxh
dGl2ZUpJVC5oIgpAQCAtMTc4LDcgKzE3OSw3IEBAIGlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGFwcHIKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1z
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQorc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKQEAgLTE5Nyw2ICsx
OTgsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwogCiAgICAgICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CisgICAgICAgICAgICAvLyBE
ZWxpYmVyYXRlbHkgdXNlIHRoZSBJZGVudGlmaWVyIChpbnN0ZWFkIG9mIEpTQ2VsbCopIGZvcm0g
c2luY2UKKyAgICAgICAgICAgIC8vIHdlIGhhdmUgYW4gaW1tb3J0YWwgSWRlbnRpZmllciBpbiB0
aGlzIGNhc2UuCisgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGg7CiAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VDZWxsKSkgewogICAgICAgICAg
ICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAg
ICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlQ2VsbApAQCAtMjY4LDcg
KzI3Miw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKIAogICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwgc3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSk7CisgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0
Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3Bl
cnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBmdGxUaHVu
a0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlv
biwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZihjb2RlQmxvY2ssIHN0cnVjdHVyZSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKQEAgLTMxOSw3ICszMjMsNyBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjpjcmVh
dGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5z
bG90QmFzZVN0cnVjdHVyZShzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZSkgPT0gb2Zm
c2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNo
ZWFibGVDdXN0b20oKSB8fCBwcm90b3R5cGVBY2Nlc3NDaGFpbi0+c2xvdEJhc2VTdHJ1Y3R1cmUo
c3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IG9mZnNldCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1
c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2Vz
LgogICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRy
OwpAQCAtMzI4LDE2ICszMzIsMTYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
R2V0QnkoSgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4NTIxNQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNs
b3QuaXNVbnNldCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0
ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBj
b2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlkKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2xvdC5pc0NhY2hlYWJsZUN1c3Rv
bSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90
LnNsb3RCYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZS5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUu
dWlkKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9m
ZnNldCgpID09IG9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90
QmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1w
bCgpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZS51aWQoKSwgc2xvdC5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCkBAIC0zOTMsMTIgKzM5NywxMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OkdldEJ5QWRkQWNjZXNzQ2FzZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVs
bCh2bSksIHByb3BlcnR5TmFtZSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5QWRkQWNjZXNzQ2FzZSwgYmFzZVZhbHVlLmNsYXNz
SW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQo
KSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKIAogICAgICAgICByZXN1bHQgPSBz
dHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIFdU
Rk1vdmUobmV3Q2FzZSkpOwogCiAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUo
KSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwg
YmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIHByb3BlcnR5TmFtZSwgc2xvdC5zbG90QmFz
ZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVJl
cGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6
OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNl
VmFsdWUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
LmNvZGUoKSk7CiAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoc3R1
YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29k
ZSgpKSk7CkBAIC00MTAsNyArNDE0LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlR2V0QnkoSgogICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBP
bkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwogfQogCi12b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNl
VmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQordm9p
ZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIEdldEJ5S2luZCBraW5kKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKICAgICAKQEAgLTQ5NCw3ICs0OTgsNyBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVBcnJheUdlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgY29kZUJsb2NrLCBJ
ZGVudGlmaWVyKCksIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBl
LCBJZGVudGlmaWVyKCkpKTsKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2Fz
ZShsb2NrZXIsIGNvZGVCbG9jaywgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2Rl
QmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKIAogICAgICAgICBpZiAocmVzdWx0LmdlbmVy
YXRlZFNvbWVDb2RlKCkpIHsKICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBs
YWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkp
KTsKQEAgLTg4NCw3ICs4ODgsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJ
bnN0YW5jCiAgICAgICAgIAogICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZBZGRB
Y2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKICAgICAg
ICAgCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBjb2Rl
QmxvY2ssIElkZW50aWZpZXIoKSwgV1RGTW92ZShuZXdDYXNlKSk7CisgICAgICAgIHJlc3VsdCA9
IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBjb2RlQmxvY2ssIG51bGxwdHIsIFdURk1v
dmUobmV3Q2FzZSkpOwogICAgICAgICAKICAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21l
Q29kZSgpKSB7CiAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZSZXBsYWNl
V2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXIoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgIkNhbGxWYXJpYW50LmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgogCkBA
IC00MSw3ICs0Miw3IEBAIGVudW0gY2xhc3MgR2V0QnlLaW5kIHsKIH07CiAKIHZvaWQgcmVwYXRj
aEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2Us
IEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlcGF0Y2hHZXRCeShK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Cit2b2lk
IHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIENhY2hl
YWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwg
R2V0QnlLaW5kKTsKIHZvaWQgcmVwYXRjaFB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQgcmVwYXRjaElu
QnlJRChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRp
ZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwg
Ym9vbCB3YXNGb3VuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWFibGVJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50
aWZpZXIuaCIKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9iaXRzID8gdWlkKCkgOiBTdHJpbmdJbXBsOjplbXB0
eSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKK2NsYXNzIFVuaXF1
ZWRTdHJpbmdJbXBsOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpQcmludFN0
cmVhbTsKK3VzaW5nIFdURjo6VW5pcXVlZFN0cmluZ0ltcGw7CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBJZGVudGlmaWVyOworY2xhc3MgSlNDZWxsOworY2xhc3MgU2xvdFZpc2l0b3I7CisK
K2NsYXNzIENhY2hlYWJsZUlkZW50aWZpZXIgeworcHVibGljOgorICAgIENhY2hlYWJsZUlkZW50
aWZpZXIoKSA9IGRlZmF1bHQ7CisgICAgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIoY29uc3Qg
SWRlbnRpZmllciYpOworICAgIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyKEpTQ2VsbCogaWRl
bnRpZmllcik7CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyKGNvbnN0IENhY2hlYWJsZUlkZW50
aWZpZXImKSA9IGRlZmF1bHQ7CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllcihDYWNoZWFibGVJZGVu
dGlmaWVyJiYpID0gZGVmYXVsdDsKKworICAgIENhY2hlYWJsZUlkZW50aWZpZXIoc3RkOjpudWxs
cHRyX3QpCisgICAgICAgIDogbV9iaXRzKDApCisgICAgeyB9CisKKyAgICBib29sIGlzVWlkKCkg
Y29uc3QgeyByZXR1cm4gbV9iaXRzICYgc191aWRUYWc7IH0KKyAgICBib29sIGlzQ2VsbCgpIGNv
bnN0IHsgcmV0dXJuICFpc1VpZCgpOyB9CisKKyAgICBib29sIGlzU3ltYm9sKCkgY29uc3QgeyBy
ZXR1cm4gbV9iaXRzICYmIHVpZCgpLT5pc1N5bWJvbCgpOyB9CisKKyAgICBpbmxpbmUgSlNDZWxs
KiBjZWxsKCkgY29uc3Q7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0OworCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsgfQorCisg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllciYgb3BlcmF0b3I9KGNvbnN0IENhY2hlYWJsZUlkZW50aWZp
ZXImKSA9IGRlZmF1bHQ7CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciYgb3BlcmF0b3I9KENhY2hl
YWJsZUlkZW50aWZpZXImJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENhY2hlYWJsZUlkZW50aWZpZXImIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBJZGVudGlmaWVyJiBvdGhlcikgY29uc3Q7CisKKyAgICBzdGF0aWMgaW5saW5l
IGJvb2wgaXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChKU0NlbGwqKTsKKyAgICBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChKU1ZhbHVlKTsKKworICAgIGlubGlu
ZSB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSBjb25zdDsKKworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGlubGluZSBib29sIGlzU3ltYm9sQ2VsbCgpIGNvbnN0OworICAgIGlubGluZSBib29sIGlzU3Ry
aW5nQ2VsbCgpIGNvbnN0OworCisgICAgaW5saW5lIHZvaWQgc2V0Q2VsbEJpdHMoSlNDZWxsKik7
CisgICAgaW5saW5lIHZvaWQgc2V0VWlkQml0cyhVbmlxdWVkU3RyaW5nSW1wbCopOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc191aWRUYWcgPSAxOworICAgIHVpbnRwdHJfdCBt
X2JpdHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NlbGwu
aCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJpbmdJbXBs
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Q2Fj
aGVhYmxlSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAgIHNl
dFVpZEJpdHMoaWRlbnRpZmllci5pbXBsKCkpOworfQorCitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Q2FjaGVhYmxlSWRlbnRpZmllcihKU0NlbGwqIGlkZW50aWZpZXIpCit7CisgICAgc2V0
Q2VsbEJpdHMoaWRlbnRpZmllcik7Cit9CisKK2lubGluZSBKU0NlbGwqIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNlbGwoKSBjb25zdAoreworICAgIEFTU0VSVChpc0NlbGwoKSk7CisgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxKU0NlbGwqPihtX2JpdHMpOworfQorCitpbmxpbmUgVW5pcXVlZFN0cmlu
Z0ltcGwqIENhY2hlYWJsZUlkZW50aWZpZXI6OnVpZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Jp
dHMpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChpc1VpZCgpKQorICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4obV9iaXRzICYgfnNfdWlkVGFn
KTsKKyAgICBpZiAoaXNTeW1ib2xDZWxsKCkpCisgICAgICAgIHJldHVybiAmanNDYXN0PFN5bWJv
bCo+KGNlbGwoKSktPnVpZCgpOworICAgIEFTU0VSVChpc1N0cmluZ0NlbGwoKSk7CisgICAgSlNT
dHJpbmcqIHN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGNlbGwoKSk7CisgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0cmluZy0+Z2V0VmFsdWVJbXBsKCkpOwor
fQorCitpbmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZp
ZXJDZWxsKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoY2VsbC0+aXNTeW1ib2woKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFjZWxsLT5pc1N0cmluZygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGNlbGwp
OworICAgIGlmIChzdHJpbmctPmlzUm9wZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHN0cmluZy0+Z2V0VmFsdWVJbXBsKCktPmlzQXRvbSgpOworfQorCitpbmxpbmUgYm9v
bCBDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKEpTVmFsdWUg
dmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBpc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKHZhbHVlLmFzQ2VsbCgpKTsK
K30KKworaW5saW5lIGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNTeW1ib2xDZWxsKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaXNDZWxsKCkgJiYgY2VsbCgpLT5pc1N5bWJvbCgpOworfQorCitp
bmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlmaWVyOjppc1N0cmluZ0NlbGwoKSBjb25zdAorewor
ICAgIHJldHVybiBpc0NlbGwoKSAmJiBjZWxsKCktPmlzU3RyaW5nKCk7Cit9CisKK2lubGluZSB2
b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnNldENlbGxCaXRzKEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChpc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKGNlbGwpKTsKKyAgICBt
X2JpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKTsKK30KKworaW5saW5lIHZvaWQg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6c2V0VWlkQml0cyhVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQor
eworICAgIG1fYml0cyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVpZCkgfCBzX3VpZFRhZzsK
K30KKworaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3sKKyAgICBpZiAobV9iaXRzICYmIGlzQ2VsbCgpKQor
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7Cit9CisKKworaW5saW5l
IGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmllcjo6b3BlcmF0b3I9PShjb25zdCBDYWNoZWFibGVJZGVu
dGlmaWVyJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gdWlkKCkgPT0gb3RoZXIudWlkKCk7
Cit9CisKK2lubGluZSBib29sIENhY2hlYWJsZUlkZW50aWZpZXI6Om9wZXJhdG9yIT0oY29uc3Qg
Q2FjaGVhYmxlSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHVpZCgpICE9
IG90aGVyLnVpZCgpOworfQorCitpbmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlmaWVyOjpvcGVy
YXRvcj09KGNvbnN0IElkZW50aWZpZXImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiB1aWQo
KSA9PSBvdGhlci5pbXBsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHJl
dmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIFN0
cmluZyBmdW5jdGlvbkNhbGxCYXNlKGNvbnN0IFN0cgogICAgIGlmIChzb3VyY2VMZW5ndGggPCAy
IHx8IHNvdXJjZVRleHRbaWR4XSAhPSAnKScpIHsKICAgICAgICAgLy8gRm9yIGZ1bmN0aW9uIGNh
bGxzIHRoYXQgaGF2ZSBtYW55IG5ldyBsaW5lcyBpbiBiZXR3ZWVuIHRoZWlyIG9wZW4gcGFyZW50
aGVzaXMKICAgICAgICAgLy8gYW5kIHRoZWlyIGNsb3NpbmcgcGFyZW50aGVzaXMsIHRoZSB0ZXh0
IHJhbmdlIHBhc3NlZCBpbnRvIHRoZSBtZXNzYWdlIGFwcGVuZGVyIAotICAgICAgICAvLyB3aWxs
IG5vdCBpbmxjdWRlIHRoZSB0ZXh0IGluIGJldHdlZW4gdGhlc2UgcGFyZW50aGVzZXMsIGl0IHdp
bGwganVzdCBiZSB0aGUgZGVzaXJlZAorICAgICAgICAvLyB3aWxsIG5vdCBpbmNsdWRlIHRoZSB0
ZXh0IGluIGJldHdlZW4gdGhlc2UgcGFyZW50aGVzZXMsIGl0IHdpbGwganVzdCBiZSB0aGUgZGVz
aXJlZAogICAgICAgICAvLyB0ZXh0IHRoYXQgcHJlY2VkZXMgdGhlIHBhcmVudGhlc2VzLgogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNiArMTg5LDcg
QEAgcHVibGljOgogICAgIGlubGluZSBib29sIGVxdWFsKEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJp
bmcqIG90aGVyKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKEpTR2xvYmFsT2JqZWN0
KikgY29uc3Q7CiAgICAgaW5saW5lIGNvbnN0IFN0cmluZyYgdHJ5R2V0VmFsdWUoYm9vbCBhbGxv
Y2F0aW9uQWxsb3dlZCA9IHRydWUpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZ0ltcGwqIGdldFZh
bHVlSW1wbCgpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZ0ltcGwqIHRyeUdldFZhbHVlSW1wbCgp
IGNvbnN0OwogICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKQEAg
LTcwMyw2ICs3MDQsMTIgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU1N0cmluZzo6bGVuZ3Ro
KAogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RyaW5nSW1wbCo+KHBvaW50ZXIpLT5sZW5ndGgo
KTsKIH0KIAoraW5saW5lIGNvbnN0IFN0cmluZ0ltcGwqIEpTU3RyaW5nOjpnZXRWYWx1ZUltcGwo
KSBjb25zdAoreworICAgIEFTU0VSVCghaXNSb3BlKCkpOworICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8U3RyaW5nSW1wbCo+KG1fZmliZXIpOworfQorCiBpbmxpbmUgY29uc3QgU3RyaW5nSW1wbCog
SlNTdHJpbmc6OnRyeUdldFZhbHVlSW1wbCgpIGNvbnN0CiB7CiAgICAgdWludHB0cl90IHBvaW50
ZXIgPSBtX2ZpYmVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2
aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDk0LDIwICsxMDk0LDE1IEBAIHZvaWQgVk06OmR1bXBSZWdFeHBU
cmFjZSgpCiB9CiAjZW5kaWYKIAotV2F0Y2hwb2ludFNldCogVk06OmVuc3VyZVdhdGNocG9pbnRT
ZXRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCitXYXRj
aHBvaW50U2V0KiBWTTo6ZW5zdXJlV2F0Y2hwb2ludFNldEZvckltcHVyZVByb3BlcnR5KGNvbnN0
IFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBt
X2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHMuYWRkKHByb3BlcnR5TmFtZS5zdHJpbmcoKSwg
bnVsbHB0cik7CisgICAgYXV0byByZXN1bHQgPSBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNl
dHMuYWRkKHByb3BlcnR5TmFtZSwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KQogICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRSZWYobmV3IFdhdGNocG9p
bnRTZXQoSXNXYXRjaGVkKSk7CiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0
KCk7CiB9CiAKLXZvaWQgVk06OnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKLXsK
LSAgICBlbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lKS0+
YWRkKHdhdGNocG9pbnQpOwotfQotCi12b2lkIFZNOjphZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSkKK3ZvaWQgVk06OmFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFVu
aXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgaWYgKFJlZlB0cjxXYXRjaHBv
aW50U2V0PiB3YXRjaHBvaW50U2V0ID0gbV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzLnRh
a2UocHJvcGVydHlOYW1lKSkKICAgICAgICAgd2F0Y2hwb2ludFNldC0+ZmlyZUFsbCgqdGhpcywg
IkltcHVyZSBwcm9wZXJ0eSBhZGRlZCIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE0LDExICsxMDE0LDEwIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2hyaW5rRm9vdHByaW50V2hlbklkbGUoKTsKIAotICAgIFdhdGNocG9pbnRTZXQqIGVu
c3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJik7Ci0g
ICAgdm9pZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlm
aWVyJiwgV2F0Y2hwb2ludCopOworICAgIFdhdGNocG9pbnRTZXQqIGVuc3VyZVdhdGNocG9pbnRT
ZXRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIAogICAg
IC8vIEZJWE1FOiBVc2UgQXRvbVN0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCBJZGVudGlm
aWVyLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3Qg
U3RyaW5nJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShj
b25zdCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIAogICAgIElubGluZVdhdGNocG9pbnRTZXQm
IHByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpIHsgcmV0dXJuIG1fcHJpbWl0aXZlR2lnYWNhZ2VF
bmFibGVkOyB9CiAKQEAgLTExOTIsNyArMTE5MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3No
b3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nIHsgZmFsc2UgfTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRp
bkV4ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKLSAgICBIYXNoTWFwPFN0cmluZywg
UmVmUHRyPFdhdGNocG9pbnRTZXQ+PiBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHM7Cisg
ICAgSGFzaE1hcDxjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCosIFJlZlB0cjxXYXRjaHBvaW50U2V0
Pj4gbV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxU
eXBlUHJvZmlsZXI+IG1fdHlwZVByb2ZpbGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJv
ZmlsZXJMb2c+IG1fdHlwZVByb2ZpbGVyTG9nOwogICAgIHVuc2lnbmVkIG1fdHlwZVByb2ZpbGVy
RW5hYmxlZENvdW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTkt
MTItMjEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2Ug
dXNlcyBvZiBCb3g8SWRlbnRpZmllcj4gd2l0aCBhIG5ldyBDYWNoZWFibGVJZGVudGlmaWVyIGNs
YXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1
NTQ0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81ODA0MTgwMD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZEltcHVyZVByb3BlcnR5KToKKwogMjAxOS0xMi0xOSAg
RG91ZyBLZWxseSAgPGRvdWdrQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgVHJhY2tCYXNl
IHRvIHN0b3JlIG1fbWVkaWFFbGVtZW50IGFzIGEgV2Vha1B0cgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4
OCw3IEBAIEZyYW1lKiBsZXhpY2FsRnJhbWVGcm9tQ29tbW9uVk0oKQogCiB2b2lkIGFkZEltcHVy
ZVByb3BlcnR5KGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBjb21tb25W
TSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CisgICAgY29tbW9uVk0oKS5hZGRJ
bXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386318</attachid>
            <date>2019-12-22 09:57:03 -0800</date>
            <delta_ts>2019-12-22 21:08:47 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-205544.patch</filename>
            <type>text/plain</type>
            <size>105993</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTM4NzQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE5LTEyLTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQm94PElkZW50aWZpZXI+IHdpdGggYSBuZXcg
Q2FjaGVhYmxlSWRlbnRpZmllciBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNTU0NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTgwNDE4
MDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBz
dHJlc3MvcmFjeS1nYy1jbGVhbnVwLW9mLWlkZW50aWZpZXItYWZ0ZXItbXV0YXRvci1zdG9wcy1y
dW5uaW5nLmpzOiBBZGRlZC4KKwogMjAxOS0xMi0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEltcHJvdmUgb3VyIGJvdW5kIGZ1bmN0aW9uIGlt
cGxlbWVudGF0aW9uCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9yYWN5LWdjLWNsZWFudXAtb2YtaWRl
bnRpZmllci1hZnRlci1tdXRhdG9yLXN0b3BzLXJ1bm5pbmcuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy9zdHJlc3MvcmFjeS1nYy1jbGVhbnVwLW9mLWlkZW50aWZpZXItYWZ0ZXItbXV0YXRvci1z
dG9wcy1ydW5uaW5nLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3JhY3ktZ2Mt
Y2xlYW51cC1vZi1pZGVudGlmaWVyLWFmdGVyLW11dGF0b3Itc3RvcHMtcnVubmluZy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACisvL0AgcnVuRGVmYXVsdCgiLS1udW1iZXJPZkdD
TWFya2Vycz0xIiwgIi0tdXNlREZHSklUPWZhbHNlIiwgIi0tdXNlTExJbnQ9ZmFsc2UiKQorCitm
dW5jdGlvbiBmb28oKSB7CisgICAgZ2MoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAw
MDsgaSsrKSB7CisgICAgICAgIGNvbnN0IG8gPSB7IGY6IDQyIH07CisgICAgICAgIG9bU3ltYm9s
LnNwbGl0LmRlc2NyaXB0aW9uXTsKKyAgICB9Cit9CitmdW5jdGlvbiBiYXIoKSB7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAgbmV3IFVpbnQ4QXJyYXkoMjAwMDAw
KS5zdWJhcnJheSgpOworfQorCitmb28oKTsKK2JhcigpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTM4NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTY5IEBACisyMDE5LTEyLTIyICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQm94PElk
ZW50aWZpZXI+IHdpdGggYSBuZXcgQ2FjaGVhYmxlSWRlbnRpZmllciBjbGFzcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTU0NAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNTgwNDE4MDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgdXNlIG9mIEJveDxJZGVu
dGlmaWVyPiBpcyB0byBnZXQgYXJvdW5kIGhhdmluZyB0bworICAgICAgICByZWYvZGVyZWYgdGhl
IHVuZGVybHlpbmcgVW5pcWVkU3RyaW5nSW1wbCBpbiBJZGVudGlmaWVycyBmcm9tIHRoZSBjb21w
aWxlcgorICAgICAgICBhbmQgR0MgdGhyZWFkcy4gIEhvd2V2ZXIsIGl0IHByb3ZlcyB0byBiZSBk
aWZmaWN1bHQgdG8gY29udHJvbCB3aGVuIHRoZXNlCisgICAgICAgIEJveDxJZGVudGlmaWVyPnMg
Z2V0IGRlc3RydWN0ZWQsIGFuZCByZXF1aXJlcyB0aGF0IHdlIGZpbmQgYWxsIHRoZSBwbGFjZXMg
aW4KKyAgICAgICAgdGhlIGNvbXBpZXIgYW5kIEdDIHRocmVhZHMgd2hlcmUgdGhpcyBjYW4gaGFw
cGVuLCBhbmQgYXBwbHkga2VlcCBhbGl2ZSB0YWN0aWNzCisgICAgICAgIHRoZXJlIHRvIGRlZmVy
IGRlc3RydWN0aW9uIG9mIHRoZSBCb3g8SWRlbnRpZmllcj4gdG8gdGhlIG11dGF0b3IgdGhyZWFk
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBieSByZXBsYWNpbmcgdXNlcyBvZiBC
b3g8SWRlbnRpZmllcj4gd2l0aCBhCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIHdoaWNo
IGlzIGVmZmVjdGl2ZWx5IGEgdGFnZ2VkIHVuaW9uIG9mIGEgSlNDZWxsKiBvciBhCisgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKi4gIFRoZSBKU0NlbGwqLCBpbiB0aGlzIGNhc2UsIGNhbiBiZSBl
aXRoZXIgYSBTeW1ib2wqIG9yIGEKKyAgICAgICAgSlNTdHJpbmcqIHRoYXQgaXMgYmFja2VkIGJ5
IGFuIGF0b20gc3RyaW5nLiAgVGhlIFZNIHJ1bnRpbWUgZW5zdXJlcyB0aGF0IHdlJ2xsCisgICAg
ICAgIG5ldmVyIHRyeSB0byBjYWNoZSBhbiBpZGVudGlmaWVyIGZyb20gYSBKU0NlbGwgdGhhdCBp
cyBub3Qgb25lIG9mIHRoZXNlLiAgVGhpcworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGNh
biBiZSBkZXN0cnVjdGVkIGZyb20gdGhlIGNvbXBpbGVyIG9yIEdDIHRocmVhZC4gIFNpbmNlIGl0
CisgICAgICAgIGRvZXNuJ3QgaG9sZCBhIHJlZiBvZiB0aGUgdW5kZXJseWluZyBVbmlxdWVkU3Ry
aW5nSW1wbCwgaXQgd29uJ3QgdHJ5IHRvIGRlcmVmCisgICAgICAgIGl0IG9uIGRlc3RydWN0aW9u
LgorCisgICAgICAgIEluc3RlYWQsIHdlJ2xsIG5lZWQgdG8gdmlzaXQgQ2FjaGVhYmxlSWRlbnRp
ZmllcnMgZHVyaW5nIEdDIHNjYW5zIHRvIGtlZXAgdGhlCisgICAgICAgIEpTQ2VsbCBpbiBpdCBh
bGl2ZSwgYW5kIHRoYXQgSlNDZWxsIHdpbGwsIGluIHR1cm4sIGtlZXAgdGhlIHVuZGVybHlpbmcK
KyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwgYWxpdmUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
bHNvIGRvZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgMS4gQWRkIGEgdmlzaXRDaGlsZHJlbigp
IG1ldGhvZCB0byBTdHJ1Y3R1cmVTdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3MsIGFuZAorICAg
ICAgICAgICBBY2Nlc3NDYXNlIHRvIHZpc2l0IHRoZSBDYWNoZWFibGVJZGVudGlmaWVyJ3MgSlND
ZWxsIGlkZW50aWZpZXIuICBUaGlzCisgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4oKSBpcyBjYWxs
ZWQgZnJvbSBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKCkuCisKKyAg
ICAgICAgICAgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKCkgaXMgaW5h
cHByb3ByaWF0ZSBmb3IgdGhpcyBiZWNhdXNlCisgICAgICAgICAgIGl0IGlzIG9ubHkgY2FsbGVk
IGFmdGVyIEdDIGhhcyBmaW5pc2hlZC4gIEFzIGEgcmVzdWx0LCBpdCB3b24ndCBrZWVwCisgICAg
ICAgICAgIHRoZSBKU0NlbGwgaWRlbnRpZmllcnMgYWxpdmUuCisKKyAgICAgICAgICAgU3RydWN0
dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoKSBpcyBhbHNvIGluYXBwcm9wcmlhdGUg
Zm9yIHRoaXMKKyAgICAgICAgICAgYmVjYXVzZSBpdCBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbGwg
bWFya2luZyBpcyBkb25lLiAgSXQgaXMgYWxzbyBub3QgbWVhbnQKKyAgICAgICAgICAgdG8ga2Vl
cCBjZWxscyBhbGl2ZSBidXQgbWVyZWx5IGZvciBjbGVhcmluZyB3ZWFrIHJlZmVyZW5jZXMgdG8g
ZGVhZCBjZWxscy4KKworICAgICAgICAyLiBBbHNvIGFkZCB2aXNpdENoaWxkcmVuKCkgdG8gTW9k
dWxlTmFtZXNwYWNlRGF0YS4KKworICAgICAgICAzLiBSZW1vdmUgcHJldmlvdXNseSBhcHBsaWVk
IGtlZXAgYWxpdmUgdGFjdGljcyB0byB3b3JrIGFyb3VuZCBCb3g8SWRlbnRpZmllcj4KKyAgICAg
ICAgICAgZGVzdHJ1Y3Rpb24uICBUaGlzIGFsc28gcmV0b3JlcyB0aGUgYWxsb3dhbmNlIHRvIGRl
c3RydWN0IERGRzo6UGxhbnMgb24gYQorICAgICAgICAgICBjb21waWxlciB0aHJlYWQuCisKKyAg
ICAgICAgNC4gQWRkZWQgYSBKU1N0cmluZzpnZXRWYWx1ZUltcGwoKSBoZWxwZXIuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNl
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2Fz
ZTo6Y29tbWl0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwp
OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuaDoKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6dWlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6
R2V0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRv
TWVyZ2UpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXApOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAg
ICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3Zl
cmxhcHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6
Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgorICAgICAgICAoSlND
OjpHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXApOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6
c2luZ2xlSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMu
aDoKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSk6
CisgICAgICAgIChKU0M6OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSk6CisgICAgICAg
ICogYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L0luc3RhbmNlT2ZBY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6SW5zdGFuY2VPZkFjY2Vz
c0Nhc2U6Okluc3RhbmNlT2ZBY2Nlc3NDYXNlKToKKyAgICAgICAgKiBieXRlY29kZS9JbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50cmluc2ljR2V0dGVyQWNj
ZXNzQ2FzZTo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OkludHJp
bnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvSW50cmlu
c2ljR2V0dGVyQWNjZXNzQ2FzZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL01vZHVsZU5hbWVzcGFj
ZUFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNl
OjpNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6TW9kdWxlTmFtZXNw
YWNlQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Nb2R1bGVOYW1lc3Bh
Y2VBY2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6dmlzaXRDaGlsZHJlbik6CisgICAg
ICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3h5YWJsZUFj
Y2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpQcm94eWFibGVBY2Nlc3NDYXNlOjpQcm94eWFi
bGVBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6UHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRl
KToKKyAgICAgICAgKiBieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmFkZEFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmdldEJ5SWRTZWxmSWRlbnRpZmllcik6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVy
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjplbnN1cmUpOgor
ICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRJZGVudGlmaWVyczo6YXQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OkRlc2lyZWRJZGVudGlmaWVyczo6cmVhbGx5QWRkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpEZXNpcmVkSWRlbnRpZmllcnM6OnByb2Nlc3NDb2RlQmxvY2tJZGVudGlmaWVyc0lm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmg6
CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46On5Q
bGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjYW5jZWwpOgorICAgICAgICAqIGRmZy9E
RkdQbGFuLmg6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6a2VlcEFsaXZlSWRlbnRpZmllcik6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpXb3JrbGlzdDo6cmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6
REZHOjpXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3Jr
bGlzdDo6cmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6
V29ya2xpc3Q6OmRlbGV0ZUNhbmNlbGxlZFBsYW5zRm9yVk0pOiBEZWxldGVkLgorICAgICAgICAq
IGRmZy9ERkdXb3JrbGlzdC5oOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnkpOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUFycmF5
R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUluc3RhbmNlT2YpOgorICAgICAgICAq
IGppdC9SZXBhdGNoLmg6CisgICAgICAgICogcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmR1bXAgY29uc3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6Q2FjaGVhYmxlSWRlbnRpZmllcik6CisgICAg
ICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmlzVWlkIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVhYmxlSWRlbnRpZmllcjo6aXNTeW1ib2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWFi
bGVJZGVudGlmaWVyOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpDYWNoZWFi
bGVJZGVudGlmaWVyOjpDYWNoZWFibGVJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6Q2FjaGVh
YmxlSWRlbnRpZmllcjo6Y2VsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50
aWZpZXI6OnVpZCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6Omlz
Q2FjaGVhYmxlSWRlbnRpZmllckNlbGwpOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlm
aWVyOjppc1N5bWJvbENlbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlm
aWVyOjppc1N0cmluZ0NlbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlm
aWVyOjpzZXRDZWxsQml0cyk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OnNl
dFVpZEJpdHMpOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6b3BlcmF0b3I9PSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6Om9wZXJhdG9yIT0gY29uc3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6
OmZ1bmN0aW9uQ2FsbEJhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAg
ICAgKEpTQzo6SlNTdHJpbmc6OmdldFZhbHVlSW1wbCBjb25zdCk6CisgICAgICAgICogcnVudGlt
ZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjplbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpWTTo6YWRkSW1wdXJlUHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpWTTo6cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxOS0xMi0yMCAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBKU1N0cmluZyB2YWx1ZXMgZnJvbSBsaXRl
cmFscyBpbiBhIHNpbmdsZSBjb25zaXN0ZW50IHN0eWxlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTc4NCw2ICs3ODQsOCBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9CeXRlY29k
ZUNhY2hlRXJyb3IuaAogICAgIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmgKICAgICBydW50aW1lL0Nh
Y2hlVXBkYXRlLmgKKyAgICBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAorICAgIHJ1bnRp
bWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAogICAgIHJ1bnRpbWUvQ2FjaGVkQnl0ZWNv
ZGUuaAogICAgIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuaAogICAgIHJ1bnRpbWUvQ2FnZWRCYXJyaWVy
UHRyLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1MzgxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NzI3LDYgKzcyNyw3IEBAIHJ1bnRpbWUvQnl0ZWNvZGVDYWNoZUVycm9yLmNwcAogcnVudGltZS9D
YWxsRGF0YS5jcHAKIHJ1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAogcnVudGltZS9DYWNoZVVwZGF0
ZS5jcHAKK3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5jcHAKIHJ1bnRpbWUvQ2FjaGVkQnl0
ZWNvZGUuY3BwCiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcAogcnVudGltZS9DYXRjaFNjb3BlLmNw
cApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1MzgxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEyLDYgKzE5MTIsOCBAQAogCQlGRTc0OTdFNjIw
OTAwMUIxMDAwMzU2NUIgLyogSlNDUHRyVGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTc0OTdFNTIwOTAwMUIwMDAwMzU2NUIgLyogSlNDUHRyVGFn
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU3
QzQxOTYxQjk3RkM0QjAwRjRENTk4IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEQTUwRDQxQjk3
RjQ0MjAwOUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwICovOyB9OwogCQlG
RTgwQzE5NzFENzc1Q0REMDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8q
IENhdGNoU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlGRThERTU0QjIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4REU1NEEy
M0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCAqLzsgfTsKKwkJRkU4REU1
NEQyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRThERTU0QzIzQUMxRTg2
MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCAqLzsgfTsKIAkJRkU5OUIy
NDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8q
IEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyog
QnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUEwODYyMTE4MkI3QTA0MDBG
NkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQ
cmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTUxNTQsNiArNTE1Niw5IEBACiAJCUZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBD
YXRjaFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhdGNoU2NvcGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU4MEMxOTgxRDc3NUZCNDAwODUxMEMw
IC8qIENhdGNoU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2F0Y2hTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFODBDMTlBMUQ3
NzY4RkQwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRThERTU0QTIzQUMxREFEMDA1QzkxNDIgLyogQ2Fj
aGVhYmxlSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNo
ZWFibGVJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOERFNTRD
MjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRThERTU0RTIzQUMzQThFMDA1QzkxNDIgLyog
Q2FjaGVhYmxlSWRlbnRpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWFibGVJZGVu
dGlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdDRjY0
RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWTUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYxQkI5
QUUxMTAwNzNFN0E2IC8qIEpJVFN1YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKSVRTdWJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkU5OUIyNDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjk5MCw2ICs2OTk1LDkgQEAKIAkJCQkwRkI3RjM4
QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oICovLAogCQkJCTE0MzU5NTIw
MjJBNTIxQ0EwMEU4MDg2RCAvKiBCeXRlY29kZUNhY2hlRXJyb3IuY3BwICovLAogCQkJCTE0MzU5
NTFGMjJBNTIxQ0EwMEU4MDg2RCAvKiBCeXRlY29kZUNhY2hlRXJyb3IuaCAqLywKKwkJCQlGRThE
RTU0RTIzQUMzQThFMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5jcHAgKi8sCisJCQkJ
RkU4REU1NEEyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCAqLywKKwkJ
CQlGRThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMu
aCAqLywKIAkJCQkxNDhCMTQxOTIyNUREMUU5MDBENkU5OTggLyogQ2FjaGVkQnl0ZWNvZGUuY3Bw
ICovLAogCQkJCTE0NENBMzRGMjIxRjAzNzkwMDgxNzc4OSAvKiBDYWNoZWRCeXRlY29kZS5oICov
LAogCQkJCTE0REFGQTQ1MjFFM0I4NzEwMDRCNjhGNyAvKiBDYWNoZWRUeXBlcy5jcHAgKi8sCkBA
IC04ODM2LDYgKzg4NDQsNyBAQAogCQkJCTBGNUNGOTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJM
b3dlclN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MEU0QTcxQzQ5N0Y3NDAwQTU3
N0ZBIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MEU0QTgxQzQ5N0Y3NDAw
QTU3N0ZBIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU4REU1
NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNDBFNEE5MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxv
Y2tPcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5Q0FCQzkxREI1NEE3QTAwMDhFODNCIC8q
IEFpclBhZEludGVyZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDIyNyw2ICsxMDIzNiw3
IEBACiAJCQkJNjU4RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFNTkzMkE4MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUFFMkM0MURGNEYyODAwMDY2RUZFMSAvKiBWTUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOERFNTREMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzMDIyRDcxRTQy
ODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUM1Nzk3
MzIzMTA1QjUxMDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRTZGNTZERTFFNjRFQUQ2MDBEMTc4MDEgLyogVk1UcmFwcy5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
CShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUo
SklUKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRl
bnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJE
T01KSVRHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKQEAgLTU0
LDE4ICs1NSwxOCBAQCBuYW1lc3BhY2UgQWNjZXNzQ2FzZUludGVybmFsIHsKIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLUFjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2Uo
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5p
cXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCitBY2Nl
c3NDYXNlOjpBY2Nlc3NDYXNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBl
LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90
eXBlQWNjZXNzQ2hhaW4pCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKICAgICAsIG1fcG9seVByb3RvQWNjZXNzQ2hhaW4oV1RGTW92ZShwcm90b3R5cGVBY2Nlc3ND
aGFpbikpCi0gICAgLCBtX2lkZW50aWZpZXIoQm94PElkZW50aWZpZXI+OjpjcmVhdGUoaWRlbnRp
ZmllcikpCisgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKIHsKICAgICBtX3N0cnVjdHVy
ZS5zZXRNYXlCZU51bGwodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwogICAgIG1fY29uZGl0aW9uU2V0
ID0gY29uZGl0aW9uU2V0OwogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVh
dGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6
dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCitz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQ
b2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiB7CiAgICAgc3dpdGNo
ICh0eXBlKSB7CiAgICAgY2FzZSBJbkhpdDoKQEAgLTEwNCw3ICsxMDUsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKKyAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3ND
aGFpbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChvbGRTdHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJl
LT5wcmV2aW91c0lEKCkpOwpAQCAtMTI1LDcgKzEyNiw3IEBAIEFjY2Vzc0Nhc2U6On5BY2Nlc3ND
YXNlKCkKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmZyb21T
dHJ1Y3R1cmVTdHViSW5mbygKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKKyAgICBWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIHN3aXRjaCAoc3R1YkluZm8uY2FjaGVUeXBl
KCkpIHsKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CkBAIC0xMzQsMTggKzEzNSwy
MiBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6CiAKICAgICBjYXNl
IENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7CisgICAgICAgIEFTU0VSVCghaWRlbnRpZmllci5p
c0NlbGwoKSk7CiAgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBS
ZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8u
dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKIAogICAgIGNhc2UgQ2FjaGVU
eXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25z
dGFudElkZW50aWZpZXIpOworICAgICAgICBBU1NFUlQoIWlkZW50aWZpZXIuaXNDZWxsKCkpOwog
ICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50
aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby51LmJ5SWRTZWxmLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVu
Z3RoOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpOworICAgICAgICBBU1NFUlQoIWlkZW50aWZpZXIuaXNDZWxsKCkpOwogICAgICAgICByZXR1
cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgs
IGlkZW50aWZpZXIpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OlN0cmluZ0xlbmd0aDoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKKyAgICAg
ICAgQVNTRVJUKCFpZGVudGlmaWVyLmlzQ2VsbCgpKTsKICAgICAgICAgcmV0dXJuIEFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCwgaWRlbnRpZmll
cik7CiAKICAgICBkZWZhdWx0OgpAQCAtMTgwLDExICsxODUsMTEgQEAgVmVjdG9yPFdhdGNocG9p
bnRTZXQqLCAyPiBBY2Nlc3NDYXNlOjpjbwogICAgIFZlY3RvcjxXYXRjaHBvaW50U2V0KiwgMj4g
cmVzdWx0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7CiAK
LSAgICBpZiAoIW1faWRlbnRpZmllci0+aXNOdWxsKCkpIHsKKyAgICBpZiAobV9pZGVudGlmaWVy
KSB7CiAgICAgICAgIGlmICgoc3RydWN0dXJlICYmIHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpKQogICAgICAgICAgICAgfHwgbV9jb25kaXRpb25TZXQubmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICB8fCAobV9wb2x5UHJvdG9BY2Nlc3ND
aGFpbiAmJiBtX3BvbHlQcm90b0FjY2Vzc0NoYWluLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh2bS5lbnN1cmVXYXRjaHBvaW50U2V0
Rm9ySW1wdXJlUHJvcGVydHkoKm1faWRlbnRpZmllcikpOworICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCh2bS5lbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHkobV9pZGVudGlmaWVy
LnVpZCgpKSk7CiAgICAgfQogCiAgICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKQEAgLTU1MCw3ICs1
NTUsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzCiAgICAgLy8g
Tm90ZSB0aGF0IGlmIEEtPmd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgJiYgQi0+Z3VhcmRlZEJ5
U3RydWN0dXJlQ2hlY2soKSB0aGVuCiAgICAgLy8gQS0+Y2FuUmVwbGFjZShCKSA9PSBCLT5jYW5S
ZXBsYWNlKEEpLgogCi0gICAgaWYgKCptX2lkZW50aWZpZXIgIT0gKm90aGVyLm1faWRlbnRpZmll
cikKKyAgICBpZiAobV9pZGVudGlmaWVyICE9IG90aGVyLm1faWRlbnRpZmllcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAogICAgIHN3aXRjaCAodHlwZSgpKSB7CkBAIC02NDgsNyArNjUz
LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIAogCiAgICAgb3V0
LnByaW50KGNvbW1hLCBtX3N0YXRlKTsKIAotICAgIG91dC5wcmludChjb21tYSwgImlkZW50ID0g
JyIsICptX2lkZW50aWZpZXIsICInIik7CisgICAgb3V0LnByaW50KGNvbW1hLCAiaWRlbnQgPSAn
IiwgbV9pZGVudGlmaWVyLCAiJyIpOwogICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KSkK
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAib2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwogCkBAIC03
MTAsNiArNzE1LDExIEBAIGJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0Q2hp
bGRyZW4odmlzaXRvcik7Cit9CisKIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQo
CiAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCYgZmFsbFRocm91Z2gpCiB7CkBAIC03MjgsNyArNzM4LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRlLnNjcmF0Y2hH
UFI7CiAKICAgICBpZiAocmVxdWlyZXNJZGVudGlmaWVyTmFtZU1hdGNoKCkgJiYgIXN0dWJJbmZv
Lmhhc0NvbnN0YW50SWRlbnRpZmllcikgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9pZGVu
dGlmaWVyLT5pc051bGwoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faWRlbnRpZmllcik7
CiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRlLnUucHJvcGVydHlHUFI7CiAgICAg
ICAgIC8vIG5vbi1yb3BlIHN0cmluZyBjaGVjayBkb25lIGluc2lkZSBwb2x5bW9ycGhpYyBhY2Nl
c3MuCiAKQEAgLTE2NjYsNyArMTY3Niw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmUKICAgICAgICAgICAgIC8vIEZJWE1FOiBSZXZpc2l0IEpTR2xvYmFsT2JqZWN0
LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwMzIwNAogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBt
X3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbV9pZGVudGlmaWVyLT5pc051bGwoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9pZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVu
dHM8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KAogICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCiAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VGb3JDdXN0b20pLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCShyZXZp
c2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsMTAgQEAKIAogI2lmIEVOQUJMRShKSVQp
CiAKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlv
bklubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2lu
Y2x1ZGUgIlBvbHlQcm90b0FjY2Vzc0NoYWluLmgiCi0jaW5jbHVkZSA8d3RmL0JveC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNDAsMTQg
KzE0MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZVR5cGU+KG5ldyBBY2Nlc3NDYXNlVHlwZShhcmd1bWVudHMuLi4pKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCog
b3duZXIsIEFjY2Vzc1R5cGUsIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eU9mZnNldCA9IGlu
dmFsaWRPZmZzZXQsCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVh
dGUoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBQ
cm9wZXJ0eU9mZnNldCA9IGludmFsaWRPZmZzZXQsCiAgICAgICAgIFN0cnVjdHVyZSogPSBudWxs
cHRyLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCgpLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+ID0gbnVs
bHB0cik7CiAKICAgICAvLyBUaGlzIGNyZWF0ZSBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgZm9yIHRy
YW5zaXRpb25zLgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRl
KFZNJiwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LCBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCogb3duZXIsIENhY2hlYWJsZUlkZW50aWZpZXIsIFBy
b3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKICAgICAgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1
bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPik7CiAgICAgCi0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBmcm9tU3RydWN0dXJlU3R1YkluZm8oVk0mLCBKU0NlbGwq
IG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhWTSYs
IEpTQ2VsbCogb3duZXIsIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7
CiAKICAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBT
dGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KQEAgLTIzMyw5ICsyMzMsOCBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgVHlwZWRBcnJheVR5cGUgdG9UeXBlZEFycmF5VHlwZShB
Y2Nlc3NUeXBlKTsKIAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVy
biBtX2lkZW50aWZpZXItPmltcGwoKTsgfQotICAgIEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0KKyAgICBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyLnVpZCgpOyB9CisgICAgQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9
CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KFN0cnVj
dHVyZVN0dWJJbmZvJik7CkBAIC0yNDQsNyArMjQzLDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
CiBwcm90ZWN0ZWQ6Ci0gICAgQWNjZXNzQ2FzZShWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUsIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+KTsKKyAgICBBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0Fj
Y2Vzc0NoYWluPik7CiAgICAgQWNjZXNzQ2FzZShBY2Nlc3NDYXNlJiYpID0gZGVmYXVsdDsKICAg
ICBBY2Nlc3NDYXNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKQogICAgICAgICA6IG1fdHlwZShv
dGhlci5tX3R5cGUpCkBAIC0yNjksNiArMjY4LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yRWFjaERlcGVuZGVudENlbGwoY29uc3QgRnVu
Y3RvciYpIGNvbnN0OwogCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgY29u
c3Q7CiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKICAgICBib29sIHByb3BhZ2F0ZVRy
YW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKQEAgLTMxMSw3ICszMTEsNyBAQCBwcml2
YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBtX3BvbHlQ
cm90b0FjY2Vzc0NoYWluOwogCi0gICAgQm94PElkZW50aWZpZXI+IG1faWRlbnRpZmllcjsgLy8g
V2UgdXNlIHRoaXMgaW5kaXJlY3Rpb24gc28gdGhlIGNvbmN1cnJlbnQgY29tcGlsZXIgY2FuIGNv
bmN1cnJlbnRseSByZWYgdGhpcyBCb3guCisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50
aWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY0Miw2ICsxNjQyLDggQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdS
ZWZlcgogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAg
IGZvciAoQnlWYWxJbmZvKiBieVZhbEluZm8gOiBqaXREYXRhLT5tX2J5VmFsSW5mb3MpCiAgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZChieVZhbEluZm8tPmNhY2hlZFN5bWJvbCk7CisgICAgICAg
IGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3Mp
CisgICAgICAgICAgICBzdHViSW5mby0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKICAgICB9CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdldEJ5SWRWYXJpYW50Lmgi
CiAKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNh
bGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9M
aXN0RHVtcC5oPgpAQCAtMzMsNyArMzQsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRW
YXJpYW50OjpHZXRCeUlkVmFyaWFudCgKLSAgICBCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllciwK
KyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsCiAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMsCkBAIC0xMTAsNyArMTExLDcgQEAgYm9v
bCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogICAgIGlmICghIW1faWRlbnRp
ZmllciAhPSAhIW90aGVyLm1faWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKG1faWRlbnRpZmllciAmJiAoKm1faWRlbnRpZmllciAhPSAqb3RoZXIubV9pZGVudGlm
aWVyKSkKKyAgICBpZiAobV9pZGVudGlmaWVyICYmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9p
ZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fb2Zmc2V0ICE9
IG90aGVyLm1fb2Zmc2V0KQpAQCAtMTU4LDYgKzE1OSw3IEBAIGJvb2wgR2V0QnlJZFZhcmlhbnQ6
OmF0dGVtcHRUb01lcmdlKGNvbnMKIAogdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0Q2hpbGRyZW4o
dmlzaXRvcik7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAK
QEAgLTE4Miw3ICsxODQsNyBAQCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFt
JiBvCiB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQs
IER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIG91dC5wcmludCgiPCIpOwotICAg
IG91dC5wcmludCgiaWQ9JyIsIG1faWRlbnRpZmllciA/IG1faWRlbnRpZmllci0+aW1wbCgpIDog
U3RyaW5nSW1wbDo6ZW1wdHkoKSwgIicsICIpOworICAgIG91dC5wcmludCgiaWQ9JyIsIG1faWRl
bnRpZmllciwgIicsICIpOwogICAgIGlmICghaXNTZXQoKSkgewogICAgICAgICBvdXQucHJpbnQo
ImVtcHR5PiIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjUzODEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ2FjaGVh
YmxlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAi
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5o
IgpAQCAtNDQsNyArNDUsNyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgR2V0QnlJZFZhcmlhbnQoCi0gICAgICAgIEJv
eDxJZGVudGlmaWVyPiwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKICAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiA9IG51bGxwdHIsCkBAIC04MiwxNCArODMs
MTQgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZv
aWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAKLSAg
ICBCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmll
cjsgfQorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IG1faWRlbnRpZmllcjsgfQogCiAgICAgYm9vbCBvdmVybGFwcyhjb25zdCBHZXRCeUlkVmFyaWFu
dCYgb3RoZXIpCiAgICAgewogICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhlci5t
X2lkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKG1faWRl
bnRpZmllcikgewotICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllci0+aW1wbCgpICE9IG90aGVy
Lm1faWRlbnRpZmllci0+aW1wbCgpKQorICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllciAhPSBv
dGhlci5tX2lkZW50aWZpZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1
cmVTZXQoKSk7CkBAIC0xMDcsNyArMTA4LDcgQEAgcHJpdmF0ZToKICAgICBKU0Z1bmN0aW9uKiBt
X2ludHJpbnNpY0Z1bmN0aW9uOwogICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gbV9j
dXN0b21BY2Nlc3NvckdldHRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NQXR0cmlidXRlQW5u
b3RhdGlvbj4gbV9kb21BdHRyaWJ1dGU7Ci0gICAgQm94PElkZW50aWZpZXI+IG1faWRlbnRpZmll
cjsgLy8gV2UgdXNlIHRoaXMgaW5kaXJlY3Rpb24gdG8gYWxsb3cgcmVmL2RlcmVmIGluIHRoZSBj
b25jdXJyZW50IGNvbXBpbGVyLgorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVy
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgi
CiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgpAQCAtMTEzLDcgKzExNCw3IEBA
IEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW4KICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1HZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxs
RXhpdFNpdGVEYXRhLCBUcmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMsIElkZW50aWZp
ZXJLZWVwQWxpdmUmIGtlZXBBbGl2ZSkKK0dldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRl
Rm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhp
dFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlm
aWVycykKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1f
bG9jayk7CiAKQEAgLTEyMSw3ICsxMjIsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29t
cHV0ZUZvcihDb2RlCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICByZXN1bHQgPSBjb21wdXRl
Rm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjaygKLSAgICAgICAgbG9ja2VyLCBwcm9m
aWxlZEJsb2NrLCBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvLCBj
YWxsRXhpdFNpdGVEYXRhLCB0cmFja0lkZW50aWZpZXJzLCBrZWVwQWxpdmUpOworICAgICAgICBs
b2NrZXIsIHByb2ZpbGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSku
c3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMpOwogICAgIAogICAg
IGlmIChkaWRFeGl0KQogICAgICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7CkBAIC0x
MjksNyArMTMwLDYgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZQog
ICAgIFVOVVNFRF9QQVJBTShtYXApOwogICAgIFVOVVNFRF9QQVJBTShkaWRFeGl0KTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEV4aXRTaXRlRGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtlZXBBbGl2
ZSk7CiAjZW5kaWYKIAogICAgIGlmICghcmVzdWx0KQpAQCAtMTY4LDcgKzE2OCw3IEBAIEdldEJ5
U3RhdHVzOjpHZXRCeVN0YXR1cyhjb25zdCBNb2R1bGVOYW0KIH0KIAogR2V0QnlTdGF0dXMgR2V0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAotICAg
IGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRl
RGF0YSBjYWxsRXhpdFNpdGVEYXRhLCBUcmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMs
IElkZW50aWZpZXJLZWVwQWxpdmUmIGtlZXBBbGl2ZSkKKyAgICBjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0
YSwgVHJhY2tJZGVudGlmaWVycyB0cmFja0lkZW50aWZpZXJzKQogewogICAgIFN0dWJJbmZvU3Vt
bWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkoc3R1YkluZm8pOwogICAg
IGlmICghaXNJbmxpbmVhYmxlKHN1bW1hcnkpKQpAQCAtMTg2LDkgKzE4Niw4IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwog
ICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksICpzdHViSW5mbyk7Ci0gICAgICAgIEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyID0g
c3R1YkluZm8tPmdldEJ5SWRTZWxmSWRlbnRpZmllcigpOwotICAgICAgICBrZWVwQWxpdmUoaWRl
bnRpZmllcik7Ci0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLT5p
bXBsKCk7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZv
LT5nZXRCeUlkU2VsZklkZW50aWZpZXIoKTsKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7CiAgICAg
ICAgIGlmICh0cmFja0lkZW50aWZpZXJzID09IFRyYWNrSWRlbnRpZmllcnM6Ok5vKQogICAgICAg
ICAgICAgaWRlbnRpZmllciA9IG51bGxwdHI7CkBAIC0yMTIsNyArMjExLDYgQEAgR2V0QnlTdGF0
dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICAgICAgY29uc3QgQWNjZXNz
Q2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoMCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50
eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6TW9kdWxlTmFtZXNwYWNlTG9h
ZDoKLSAgICAgICAgICAgICAgICBrZWVwQWxpdmUoYWNjZXNzLmlkZW50aWZpZXIoKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKGFjY2Vzcy5hczxNb2R1bGVOYW1lc3BhY2VB
Y2Nlc3NDYXNlPigpKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0yOTYsMTIgKzI5NCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkkKICAgICAgICAgICAgICAgICB9IH0KIAogICAgICAgICAgICAgICAgIEFTU0VSVCgo
QWNjZXNzQ2FzZTo6TWlzcyA9PSBhY2Nlc3MudHlwZSgpIHx8IGFjY2Vzcy5pc0N1c3RvbSgpKSA9
PSAoYWNjZXNzLm9mZnNldCgpID09IGludmFsaWRPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBC
b3g8SWRlbnRpZmllcj4gaWRlbnRpZmllcjsKLSAgICAgICAgICAgICAgICBpZiAodHJhY2tJZGVu
dGlmaWVycyA9PSBUcmFja0lkZW50aWZpZXJzOjpZZXMpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWRlbnRpZmllciA9IGFjY2Vzcy5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGtl
ZXBBbGl2ZShpZGVudGlmaWVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQgdmFyaWFudChpZGVudGlmaWVyLCBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJl
KSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBHZXRCeUlkVmFy
aWFudCB2YXJpYW50KHRyYWNrSWRlbnRpZmllcnMgPT0gVHJhY2tJZGVudGlmaWVyczo6WWVzID8g
YWNjZXNzLmlkZW50aWZpZXIoKSA6IG51bGxwdHIsIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBj
b21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLAogICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0
U3RhdHVzLmNvbmRpdGlvblNldCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSwKICAgICAgICAg
ICAgICAgICAgICAgaW50cmluc2ljRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgIGN1c3Rv
bUFjY2Vzc29yR2V0dGVyLApAQCAtMzM2LDcgKzMyOSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkkKIAogR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVN
YXAsCi0gICAgSUNTdGF0dXNDb250ZXh0U3RhY2smIGljQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycywgSWRlbnRpZmll
cktlZXBBbGl2ZSYga2VlcEFsaXZlKQorICAgIElDU3RhdHVzQ29udGV4dFN0YWNrJiBpY0NvbnRl
eHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBUcmFja0lkZW50aWZpZXJzIHRyYWNrSWRl
bnRpZmllcnMpCiB7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KCk7CiAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxs
RXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEocHJvZmls
ZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CkBAIC0zNTEsNyArMzQ0LDcgQEAgR2V0QnlTdGF0dXMg
R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gaW5saW5lZCBhbmQg
bm90LWlubGluZWQuCiAgICAgICAgICAgICAgICAgR2V0QnlTdGF0dXMgYmFzZWxpbmVSZXN1bHQg
PSBjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBiYXNlbGlu
ZU1hcCwgYnl0ZWNvZGVJbmRleCwgZGlkRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgY2FsbEV4
aXRTaXRlRGF0YSwgdHJhY2tJZGVudGlmaWVycywga2VlcEFsaXZlKTsKKyAgICAgICAgICAgICAg
ICAgICAgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJZGVudGlmaWVycyk7CiAgICAgICAgICAgICAg
ICAgYmFzZWxpbmVSZXN1bHQubWVyZ2UocmVzdWx0KTsKICAgICAgICAgICAgICAgICByZXR1cm4g
YmFzZWxpbmVSZXN1bHQ7CiAgICAgICAgICAgICB9CkBAIC0zNjUsNyArMzU4LDcgQEAgR2V0QnlT
dGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxv
Y2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZv
V2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29u
dGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURh
dGEsIHRyYWNrSWRlbnRpZmllcnMsIGtlZXBBbGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIGNhbGxF
eGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKHJlc3VsdC5pc1NldCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhyZXN1
bHQpOwpAQCAtMzc1LDcgKzM2OCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICAgICAgcmV0dXJuIGJsZXNzKCpzdGF0dXMuZ2V0U3RhdHVzKTsKICAgICB9
CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGb3IocHJvZmlsZWRCbG9jaywgYmFzZWxpbmVNYXAs
IGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmll
cnMsIGtlZXBBbGl2ZSk7CisgICAgcmV0dXJuIGNvbXB1dGVGb3IocHJvZmlsZWRCbG9jaywgYmFz
ZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNr
SWRlbnRpZmllcnMpOwogfQogCiBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTUxNiw2
ICs1MDksOCBAQCB2b2lkIEdldEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlCiAKIHZv
aWQgR2V0QnlTdGF0dXM6Om1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogeworICAg
IGlmIChpc01vZHVsZU5hbWVzcGFjZSgpKQorICAgICAgICBtX21vZHVsZU5hbWVzcGFjZURhdGEt
Pm1faWRlbnRpZmllci52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogICAgIGZvciAoR2V0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFw
KHZpc2l0b3IpOwogfQpAQCAtNTM1LDI4ICs1MzAsMjIgQEAgYm9vbCBHZXRCeVN0YXR1czo6Zmlu
YWxpemUoVk0mIHZtKQogICAgIHJldHVybiB0cnVlOwogfQogCi1Cb3g8SWRlbnRpZmllcj4gR2V0
QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIoKSBjb25zdAorQ2FjaGVhYmxlSWRlbnRpZmllciBH
ZXRCeVN0YXR1czo6c2luZ2xlSWRlbnRpZmllcigpIGNvbnN0CiB7Ci0gICAgaWYgKGlzTW9kdWxl
TmFtZXNwYWNlKCkpIHsKLSAgICAgICAgQm94PElkZW50aWZpZXI+IHJlc3VsdCA9IG1fbW9kdWxl
TmFtZXNwYWNlRGF0YS0+bV9pZGVudGlmaWVyOwotICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1
bHQtPmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChpc01vZHVsZU5hbWVzcGFjZSgpKQorICAgICAgICBy
ZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXI7CiAKICAgICBpZiAobV92
YXJpYW50cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgQm94PElk
ZW50aWZpZXI+IHJlc3VsdCA9IG1fdmFyaWFudHMuZmlyc3QoKS5pZGVudGlmaWVyKCk7CisgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciByZXN1bHQgPSBtX3ZhcmlhbnRzLmZpcnN0KCkuaWRlbnRpZmll
cigpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAo
cmVzdWx0LT5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBtX3ZhcmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEJveDxJZGVu
dGlmaWVyPiB1aWQgPSBtX3ZhcmlhbnRzW2ldLmlkZW50aWZpZXIoKTsKLSAgICAgICAgaWYgKCF1
aWQpCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IG1fdmFyaWFudHNb
aV0uaWRlbnRpZmllcigpOworICAgICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKCp1aWQgIT0gKnJlc3VsdCkKKyAgICAgICAgaWYg
KGlkZW50aWZpZXIgIT0gcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlTdGF0dXMuaAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgi
CiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAj
aW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgpAQCAtOTEsMTMgKzkyLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICB9CiAKLSAgICAvLyBJZiB3ZSB1c2UgYSBCb3g8SWRlbnRpZmllcj4gaW4gdGhl
IGNvbXBpbGVyIHRocmVhZCwgd2UgbmVlZCB0byBrZWVwIHRoZQotICAgIC8vIElkZW50aWZpZXIg
YWxpdmUgYW5kIG9ubHkgZGVyZWYgaXQgaW4gdGhlIG11dGF0b3IgdGhyZWFkIGxhdGVyLiBUaGlz
Ci0gICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBjb21waWxlciB0aHJlYWQgZG9lc24ndCByYWNlIGFn
YWluc3QgdGhlIG11dGF0b3IgaW4KLSAgICAvLyBhZGp1c3RpbmcgdGhlIElkZW50aWZpZXIncyBy
ZWZDb3VudC4KLSAgICB1c2luZyBJZGVudGlmaWVyS2VlcEFsaXZlID0gc3RkOjpmdW5jdGlvbjx2
b2lkKEJveDxJZGVudGlmaWVyPik+OwotCi0gICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVG
b3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElD
U3RhdHVzQ29udGV4dFN0YWNrJiBkZmdDb250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFRyYWNrSWRl
bnRpZmllcnMsIElkZW50aWZpZXJLZWVwQWxpdmUmKTsKKyAgICBzdGF0aWMgR2V0QnlTdGF0dXMg
Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGlu
ZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGRmZ0NvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwg
VHJhY2tJZGVudGlmaWVycyk7CiAgICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGb3IoY29u
c3QgU3RydWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKIAogICAgIFN0YXRlIHN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQpAQCAtMTM1LDcgKzEzMCw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCi0gICAgQm94PElkZW50aWZp
ZXI+IHNpbmdsZUlkZW50aWZpZXIoKSBjb25zdDsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHNp
bmdsZUlkZW50aWZpZXIoKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBtZXJnZShj
b25zdCBHZXRCeVN0YXR1cyYpOwpAQCAtMTQzLDE2ICsxMzgsMTYgQEAgcHJpdmF0ZToKICNpZiBF
TkFCTEUoSklUKQogICAgIEdldEJ5U3RhdHVzKGNvbnN0IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nh
c2UmKTsKICAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4
aXRTaXRlRmVlZGJhY2soCi0gICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVC
bG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDYWxsTGlua1N0YXR1czo6
RXhpdFNpdGVEYXRhLCBUcmFja0lkZW50aWZpZXJzLCBJZGVudGlmaWVyS2VlcEFsaXZlJik7Cisg
ICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhLCBUcmFj
a0lkZW50aWZpZXJzKTsKICNlbmRpZgogICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRnJv
bUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIFRyYWNrSWRlbnRpZmllcnMpOwotICAg
IHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwg
Qnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEsIFRy
YWNrSWRlbnRpZmllcnMsIElkZW50aWZpZXJLZWVwQWxpdmUmKTsKKyAgICBzdGF0aWMgR2V0QnlT
dGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgs
IEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhLCBUcmFja0lkZW50aWZpZXJz
KTsKIAogICAgIHN0cnVjdCBNb2R1bGVOYW1lc3BhY2VEYXRhIHsKICAgICAgICAgSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QqIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0IHsgbnVsbHB0ciB9OwogICAg
ICAgICBKU01vZHVsZUVudmlyb25tZW50KiBtX21vZHVsZUVudmlyb25tZW50IHsgbnVsbHB0ciB9
OwogICAgICAgICBTY29wZU9mZnNldCBtX3Njb3BlT2Zmc2V0IHsgfTsKLSAgICAgICAgQm94PElk
ZW50aWZpZXI+IG1faWRlbnRpZmllcjsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lk
ZW50aWZpZXI7CiAgICAgfTsKIAogICAgIFZlY3RvcjxHZXRCeUlkVmFyaWFudCwgMT4gbV92YXJp
YW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsMTUgKzQyLDE0IEBAIG5hbWVzcGFjZSBHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlSW50ZXJuYWwKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9
CiAKLUdldHRlclNldHRlckFjY2Vzc0Nhc2U6OkdldHRlclNldHRlckFjY2Vzc0Nhc2UoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlh
UHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIEpTT2JqZWN0KiBjdXN0b21TbG90
QmFzZSwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nl
c3NDaGFpbikKK0dldHRlclNldHRlckFjY2Vzc0Nhc2U6OkdldHRlclNldHRlckFjY2Vzc0Nhc2Uo
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwg
Ym9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgSlNPYmplY3QqIGN1
c3RvbVNsb3RCYXNlLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3Rv
dHlwZUFjY2Vzc0NoYWluKQogICAgIDogQmFzZSh2bSwgb3duZXIsIGFjY2Vzc1R5cGUsIGlkZW50
aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBhZGRpdGlv
bmFsU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkKIHsKICAgICBtX2N1c3RvbVNs
b3RCYXNlLnNldE1heUJlTnVsbCh2bSwgb3duZXIsIGN1c3RvbVNsb3RCYXNlKTsKIH0KIAotCiBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRl
KAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAor
ICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAg
ICAgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFz
ZSwKICAgICBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUsIHN0
ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4p
CiB7CkBAIC02OSw3ICs2OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJT
ZXR0ZXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50
aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4sIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4gY3VzdG9tU2V0dGVyLAogICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSkK
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dHRlclNldHRlckFjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTU0LDExICs1NCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbWl0RE9NSklUR2V0dGVy
KEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYsIGNvbnN0IERPTUpJVDo6R2V0dGVyU2V0dGVyKiwgR1BS
UmVnIGJhc2VGb3JHZXRHUFIpOwogCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBjcmVhdGUoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAorICAgICAgICBWTSYs
IEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5
T2Zmc2V0LCBTdHJ1Y3R1cmUqLAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tR2V0dGVyLAogICAgICAgICBKU09iamVjdCog
Y3VzdG9tU2xvdEJhc2UsIE9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBzdGQ6OnVu
aXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwg
U3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LAorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZz
ZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlx
dWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiwKICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIgPSBudWxscHRyLCBKU09iamVjdCogY3VzdG9tU2xvdEJh
c2UgPSBudWxscHRyKTsKIApAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3Vz
dG9tQWNjZXNzb3I7IH0KIAogcHJpdmF0ZToKLSAgICBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKFZN
JiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0
LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wgdmlh
UHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIEpTT2JqZWN0KiBjdXN0b21TbG90
QmFzZSwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPik7CisgICAgR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZShWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50
aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQs
IEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vz
c0NoYWluPik7CiAKICAgICBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKGNvbnN0IEdldHRlclNldHRl
ckFjY2Vzc0Nhc2UmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
c3RhbmNlT2ZBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNTM4MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6On5JbnN0
YW5jZU9mQWNjZXNzQwogSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZBY2Nlc3NDYXNl
KAogICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LCBKU09iamVjdCogcHJvdG90eXBlKQotICAgIDogQmFzZSh2bSwgb3duZXIs
IGFjY2Vzc1R5cGUsIElkZW50aWZpZXIoKSwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIG51bGxwdHIpCisgICAgOiBCYXNlKHZtLCBvd25lciwgYWNjZXNzVHlwZSwgbnVs
bHB0ciwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG51bGxwdHIpCiAg
ICAgLCBtX3Byb3RvdHlwZSh2bSwgb3duZXIsIHByb3RvdHlwZSkKIHsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50cmluc2ljR2V0
dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUludHJpbnNpY0dldHRlckFj
Y2Vzc0Nhc2U6OkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwgc3RkOjp1bmlxdWVfcHRy
PFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKK0ludHJpbnNpY0dl
dHRlckFjY2Vzc0Nhc2U6OkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVu
aXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQogICAg
IDogQmFzZSh2bSwgb3duZXIsIEludHJpbnNpY0dldHRlciwgaWRlbnRpZmllciwgb2Zmc2V0LCBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpCiB7
CiAgICAgbV9pbnRyaW5zaWNGdW5jdGlvbi5zZXQodm0sIG93bmVyLCBpbnRyaW5zaWNGdW5jdGlv
bik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBJbnRyaW5zaWNHZXR0ZXJBY2Nl
c3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBKU0Z1bmN0aW9u
KiBpbnRyaW5zaWNGdW5jdGlvbiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWlu
PiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9s
eVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQogewogICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4obmV3IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2Uo
dm0sIG93bmVyLCBpZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBp
bnRyaW5zaWNGdW5jdGlvbiwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3ND
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludHJp
bnNpY0dldHRlckFjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MiwxNCArNDIsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNhbkVtaXRJbnRy
aW5zaWNHZXR0ZXIoSlNGdW5jdGlvbiosIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZW1pdEludHJp
bnNpY0dldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsKIAotICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8
UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5
T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIEpT
RnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+KTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgfkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UoKTsKIAogcHJp
dmF0ZToKLSAgICBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVu
aXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKKyAgICBJbnRyaW5zaWNHZXR0ZXJBY2Nl
c3NDYXNlKFZNJiwgSlNDZWxsKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQs
IFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgSlNGdW5jdGlv
biogaW50cmluc2ljRnVuY3Rpb24sIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFp
bj4pOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1faW50cmluc2ljRnVuY3Rpb247
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZU5hbWVzcGFj
ZUFjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Nb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjUzODEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIEpTTW9kdWxlRW52aXJvbm1l
bnQqIG1vZHVsZUVudmlyb25tZW50LCBTY29wZU9mZnNldCBzY29wZU9mZnNldCkKK01vZHVsZU5h
bWVzcGFjZUFjY2Vzc0Nhc2U6Ok1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIEpTTW9kdWxlRW52aXJvbm1lbnQqIG1v
ZHVsZUVudmlyb25tZW50LCBTY29wZU9mZnNldCBzY29wZU9mZnNldCkKICAgICA6IEJhc2Uodm0s
IG93bmVyLCBNb2R1bGVOYW1lc3BhY2VMb2FkLCBpZGVudGlmaWVyLCBpbnZhbGlkT2Zmc2V0LCBu
dWxscHRyLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLCBudWxscHRyKQogICAgICwgbV9z
Y29wZU9mZnNldChzY29wZU9mZnNldCkKIHsKQEAgLTQ1LDcgKzQ2LDcgQEAgTW9kdWxlTmFtZXNw
YWNlQWNjZXNzQ2FzZTo6TW9kdWxlTmFtZXNwYQogICAgIG1fbW9kdWxlRW52aXJvbm1lbnQuc2V0
KHZtLCBvd25lciwgbW9kdWxlRW52aXJvbm1lbnQpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxl
RW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KQorc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9k
dWxlRW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KQogewogICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4obmV3IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2Uo
dm0sIG93bmVyLCBpZGVudGlmaWVyLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIG1vZHVsZUVudmly
b25tZW50LCBzY29wZU9mZnNldCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL01vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oCShyZXZp
c2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlTmFt
ZXNwYWNlQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDQsNyBAQCBwdWJsaWM6
CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX21vZHVsZUVudmlyb25tZW50LmdldCgpOyB9CiAgICAgU2NvcGVPZmZzZXQgc2NvcGVP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlT2Zmc2V0OyB9CiAKLSAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0
IElkZW50aWZpZXImLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1l
bnQqLCBTY29wZU9mZnNldCk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVyLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqLCBTY29wZU9mZnNldCk7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZTsK
IApAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgfk1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nh
c2UoKTsKIAogcHJpdmF0ZToKLSAgICBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlKFZNJiwgSlND
ZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kiwg
SlNNb2R1bGVFbnZpcm9ubWVudCosIFNjb3BlT2Zmc2V0KTsKKyAgICBNb2R1bGVOYW1lc3BhY2VB
Y2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QqLCBKU01vZHVsZUVudmlyb25tZW50KiwgU2NvcGVPZmZzZXQpOwog
CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVz
cGFjZU9iamVjdDsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVFbnZpcm9ubWVudD4gbV9tb2R1
bGVFbnZpcm9ubWVudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCiAjaW5j
bHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGlu
ZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGdWxsQ29kZU9yaWdpbi5o
IgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTM1MSw2ICszNTIsMTIgQEAgYm9vbCBQb2x5bW9ycGhp
Y0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQg
UG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQorICAgICAgICBhdChp
KS52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQorCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIo
dGhpcyksICI6WyIpOwpAQCAtNDgwLDcgKzQ4Nyw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
UG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgJiYgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBBY2Nl
c3NUeXBlOjpJbnN0YW5jZU9mKSB7CiAgICAgICAgIHdoaWxlICghY2FzZXMuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgbV9saXN0LmFwcGVuZChjYXNlcy50YWtlTGFzdCgpKTsKLSAgICAgICAgY2Fz
ZXMuYXBwZW5kKEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJ
bnN0YW5jZU9mR2VuZXJpYywgSWRlbnRpZmllcigpKSk7CisgICAgICAgIGNhc2VzLmFwcGVuZChB
Y2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdl
bmVyaWMsIG51bGxwdHIpKTsKICAgICAgICAgZ2VuZXJhdGVkRmluYWxDb2RlID0gdHJ1ZTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSw2
ICsxNDksOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIG9wZXJh
dG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQogCisgICAgdm9p
ZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKICAgICAvLyBJZiB0aGlzIHJldHVybnMg
ZmFsc2UgdGhlbiB3ZSBhcmUgcmVxdWVzdGluZyBhIHJlc2V0IG9mIHRoZSBvd25pbmcgU3RydWN0
dXJlU3R1YkluZm8uCiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNj
ZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1Qcm94eWFibGVBY2Nlc3NDYXNlOjpQcm94eWFibGVB
Y2Nlc3NDYXNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVj
dHVyZSogc3RydWN0dXJlLAorUHJveHlhYmxlQWNjZXNzQ2FzZTo6UHJveHlhYmxlQWNjZXNzQ2Fz
ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLAogICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIHN0ZDo6
dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiAg
ICAgOiBCYXNlKHZtLCBvd25lciwgYWNjZXNzVHlwZSwgaWRlbnRpZmllciwgb2Zmc2V0LCBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpCiAgICAg
LCBtX2FkZGl0aW9uYWxTZXQoYWRkaXRpb25hbFNldCkKQEAgLTM4LDcgKzM4LDcgQEAgUHJveHlh
YmxlQWNjZXNzQ2FzZTo6UHJveHlhYmxlQWNjZXNzQ2FzZQogICAgIG1fdmlhUHJveHkgPSB2aWFQ
cm94eTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IFByb3h5YWJsZUFjY2Vzc0Nh
c2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgc3RkOjp1bmlx
dWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKK3N0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94
eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90
b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKIHsKICAgICBBU1NFUlQodHlwZSA9
PSBMb2FkIHx8IHR5cGUgPT0gTWlzcyB8fCB0eXBlID09IEdldEdldHRlcik7CiAgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPihuZXcgUHJveHlhYmxlQWNjZXNzQ2FzZSh2bSwg
b3duZXIsIHR5cGUsIGlkZW50aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQs
IHZpYVByb3h5LCBhZGRpdGlvbmFsU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlh
YmxlQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3
LDcgQEAgcHVibGljOgogCiAgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fYWRkaXRpb25hbFNldC5nZXQoKTsgfQogCi0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqLCBBY2Nlc3NU
eXBlLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
KCksCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBK
U0NlbGwqLCBBY2Nlc3NUeXBlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwg
U3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQoKSwKICAgICAgICAgYm9vbCB2aWFQcm94eSA9IGZhbHNlLCBXYXRj
aHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0ID0gbnVsbHB0ciwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQ
cm90b0FjY2Vzc0NoYWluPiA9IG51bGxwdHIpOwogCiAgICAgdm9pZCBkdW1wSW1wbChQcmludFN0
cmVhbSYsIENvbW1hUHJpbnRlciYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNDYsNyArNDYsNyBAQCBw
dWJsaWM6CiAgICAgflByb3h5YWJsZUFjY2Vzc0Nhc2UoKTsKIAogcHJvdGVjdGVkOgotICAgIFBy
b3h5YWJsZUFjY2Vzc0Nhc2UoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlLCBjb25zdCBJZGVudGlm
aWVyJiwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwg
c3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPik7CisgICAgUHJveHlhYmxlQWNj
ZXNzQ2FzZShWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIsIFBy
b3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIHN0ZDo6dW5p
cXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4pOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxX
YXRjaHBvaW50U2V0PiBtX2FkZGl0aW9uYWxTZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI1
MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCisjaW5jbHVkZSAiQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgpAQCAtNjIsMTEgKzYz
LDExIEBAIFN0cnVjdHVyZVN0dWJJbmZvOjp+U3RydWN0dXJlU3R1YkluZm8oKQogewogfQogCi12
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
aW5pdEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGJhc2VPYmpl
Y3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBp
ZGVudGlmaWVyKQogewogICAgIEFTU0VSVChoYXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNl
dENhY2hlVHlwZShDYWNoZVR5cGU6OkdldEJ5SWRTZWxmKTsKLSAgICBtX2dldEJ5SWRTZWxmSWRl
bnRpZmllciA9IEJveDxJZGVudGlmaWVyPjo6Y3JlYXRlKGlkZW50aWZpZXIpOworICAgIG1fZ2V0
QnlJZFNlbGZJZGVudGlmaWVyID0gaWRlbnRpZmllcjsKICAgICAKICAgICB1LmJ5SWRTZWxmLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuc2V0KAogICAgICAgICBjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9j
aywgYmFzZU9iamVjdFN0cnVjdHVyZSk7CkBAIC0xMzgsNyArMTM5LDcgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6YWJvdXRUb0RpZSgpCiB9CiAKIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3Ry
dWN0dXJlU3R1YkluZm86OmFkZEFjY2Vzc0Nhc2UoCi0gICAgY29uc3QgR0NTYWZlQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpCisgICAgY29u
c3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50LCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
YWNjZXNzQ2FzZSkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTE5NCw2ICsxOTUs
NyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgICAg
ICB1LnN0dWIgPSBhY2Nlc3MucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAg
ICBBU1NFUlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKTsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKTsKICAgICAgICAgCiAgICAgICAg
IC8vIElmIHdlIGRpZG4ndCBidWZmZXIgYW55IGNhc2VzIHRoZW4gYmFpbC4gSWYgdGhpcyBtYWRl
IG5vIGNoYW5nZXMgdGhlbiB3ZSdsbCBqdXN0IHRyeSBhZ2FpbgpAQCAtMjc5LDYgKzI4MSwyNyBA
QCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqCiAgICAgc2V0Q2FjaGVU
eXBlKENhY2hlVHlwZTo6VW5zZXQpOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHN3aXRjaCAobV9jYWNoZVR5
cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgY2FzZSBDYWNoZVR5cGU6OkFy
cmF5TGVuZ3RoOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHJpbmdMZW5ndGg6CisgICAgY2FzZSBD
YWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxm
OgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAg
ICAgICBtX2dldEJ5SWRTZWxmSWRlbnRpZmllci52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIHUuc3R1Yi0+
dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybjsKK30KKwogdm9pZCBT
dHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24g
MjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgpAQCAt
NzQsMTkgKzc1LDIxIEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nlc3NUeXBl
KTsKICAgICB+U3RydWN0dXJlU3R1YkluZm8oKTsKIAotICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxm
KENvZGVCbG9jayosIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQsIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB2b2lkIGluaXRHZXRCeUlkU2VsZihDb2RlQmxv
Y2sqLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LCBDYWNo
ZWFibGVJZGVudGlmaWVyKTsKICAgICB2b2lkIGluaXRBcnJheUxlbmd0aCgpOwogICAgIHZvaWQg
aW5pdFN0cmluZ0xlbmd0aCgpOwogICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9j
ayosIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQpOwogICAg
IHZvaWQgaW5pdEluQnlJZFNlbGYoQ29kZUJsb2NrKiwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCk7CiAKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IGFk
ZEFjY2Vzc0Nhc2UoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwg
Y29uc3QgSWRlbnRpZmllciYsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPik7CisgICAgQWNj
ZXNzR2VuZXJhdGlvblJlc3VsdCBhZGRBY2Nlc3NDYXNlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciYsIENvZGVCbG9jayosIENhY2hlYWJsZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPik7CiAKICAgICB2b2lkIHJlc2V0KENvZGVCbG9jayopOwogCiAgICAgdm9p
ZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayBy
ZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2Vs
ZiwKICAgICAvLyBlaXRoZXIgZW50aXJlbHkgb3IganVzdCBlbm91Z2ggdG8gZW5zdXJlIHRoYXQg
dGhvc2UgZGVhZCBwb2ludGVycyBkb24ndCBnZXQgdXNlZCBhbnltb3JlLgogICAgIHZvaWQgdmlz
aXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqKTsKQEAgLTE3MSw3ICsxNzQsNyBAQCBwdWJsaWM6
CiAKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiBwcml2YXRlOgotICAgIEJveDxJZGVudGlm
aWVyPiBtX2dldEJ5SWRTZWxmSWRlbnRpZmllcjsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1f
Z2V0QnlJZFNlbGZJZGVudGlmaWVyOwogcHVibGljOgogCiAgICAgdW5pb24gewpAQCAtMTgyLDcg
KzE4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAg
fSB1OwogCi0gICAgQm94PElkZW50aWZpZXI+IGdldEJ5SWRTZWxmSWRlbnRpZmllcigpCisgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBnZXRCeUlkU2VsZklkZW50aWZpZXIoKQogICAgIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZik7
CiAgICAgICAgIHJldHVybiBtX2dldEJ5SWRTZWxmSWRlbnRpZmllcjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAy
NTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1l
cy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVV
c2VEZWYuaCIKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1
ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
Q29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKQEAgLTQ3MTksMTMgKzQ3MjAsMTAgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKGNvbnN0IAogICAgIGVsc2UgaWYgKE9wOjpvcGNvZGVJ
RCA9PSBvcF9nZXRfYnlfaWRfZGlyZWN0KQogICAgICAgICB0eXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZERpcmVjdDsKICAgICAKLSAgICBHZXRCeVN0YXR1czo6SWRlbnRpZmllcktlZXBBbGl2ZSBr
ZWVwQWxpdmUgPSBbJl0gKEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyKSB7Ci0gICAgICAgIG1f
Z3JhcGgubV9wbGFuLmtlZXBBbGl2ZUlkZW50aWZpZXIoV1RGTW92ZShpZGVudGlmaWVyKSk7Ci0g
ICAgfTsKICAgICBHZXRCeVN0YXR1cyBnZXRCeVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAg
ICAgIGN1cnJlbnRDb2RlT3JpZ2luKCksIEdldEJ5U3RhdHVzOjpUcmFja0lkZW50aWZpZXJzOjpO
bywga2VlcEFsaXZlKTsKKyAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgR2V0QnlTdGF0dXM6
OlRyYWNrSWRlbnRpZmllcnM6Ok5vKTsKIAogICAgIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGJ5
dGVjb2RlLm1fZHN0LCBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeVN0
YXR1cywgdHlwZSwgb3Bjb2RlTGVuZ3RoKTsKQEAgLTU2MjYsMTAgKzU2MjQsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlKiBiYXNl
ID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CiAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdl
dChieXRlY29kZS5tX3Byb3BlcnR5KTsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29tcGlsZUFz
R2V0QnlJZCA9IGZhbHNlOwotICAgICAgICAgICAgR2V0QnlTdGF0dXM6OklkZW50aWZpZXJLZWVw
QWxpdmUga2VlcEFsaXZlID0gWyZdIChCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllcikgewotICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLmtlZXBBbGl2ZUlkZW50aWZpZXIoV1RGTW92ZShp
ZGVudGlmaWVyKSk7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgR2V0QnlTdGF0dXMgZ2V0
QnlTdGF0dXMgPSBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0
U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksIEdldEJ5U3RhdHVzOjpUcmFja0lkZW50aWZpZXJz
OjpZZXMsIGtlZXBBbGl2ZSk7CisgICAgICAgICAgICBHZXRCeVN0YXR1cyBnZXRCeVN0YXR1cyA9
IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
aywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywgY3Vy
cmVudENvZGVPcmlnaW4oKSwgR2V0QnlTdGF0dXM6OlRyYWNrSWRlbnRpZmllcnM6Olllcyk7CiAK
ICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSAwOwogCkBAIC01NjQwLDEw
ICs1NjM1LDE1IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIGJlIGFibGUg
dG8gZG8gc29tZXRoaW5nIGxpa2UgTXVsdGlHZXRCeU9mZnNldCBpbiBhIG11bHRpIGlkZW50aWZp
ZXIgbW9kZS4KICAgICAgICAgICAgICAgICAvLyBUaGF0IHdheSwgd2UgY291bGQgYm90aCBzd2l0
Y2ggb24gbXVsdGlwbGUgc3RydWN0dXJlcyBhbmQgbXVsdGlwbGUgaWRlbnRpZmllcnMgKG9yIGlu
dCAzMiBwcm9wZXJ0aWVzKS4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MjE2Ci0gICAgICAgICAgICAgICAgaWYgKEJveDxJZGVu
dGlmaWVyPiBpbXBsID0gZ2V0QnlTdGF0dXMuc2luZ2xlSWRlbnRpZmllcigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5z
dXJlKGltcGwpOworICAgICAgICAgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSBnZXRCeVN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5z
dXJlKGlkZW50aWZpZXIudWlkKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmll
ci5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3pl
biA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tDZWxsLCBPcEluZm8oZnJvemVuKSwgcHJvcGVy
dHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKICAgICAgICAg
ICAgICAgICAgICAgc2hvdWxkQ29tcGlsZUFzR2V0QnlJZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKGltcGwtPmltcGwoKSksIHByb3Bl
cnR5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAJKHJl
dmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElk
ZW50aWZpZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCkBAIC01NSw3ICs1Niw3IEBAIHVuc2lnbmVkIERlc2lyZWRJZGVu
dGlmaWVyczo6bnVtYmVyT2ZJZGUKICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm51bWJlck9mSWRl
bnRpZmllcnMoKSArIG1fYWRkZWRJZGVudGlmaWVycy5zaXplKCk7CiB9CiAKLXZvaWQgRGVzaXJl
ZElkZW50aWZpZXJzOjpwcm9jZXNzQ29kZUJsb2NrSWRlbnRpZmllcnNJZk5lZWRlZCgpCit1bnNp
Z25lZCBEZXNpcmVkSWRlbnRpZmllcnM6OmVuc3VyZShVbmlxdWVkU3RyaW5nSW1wbCogcmVwKQog
ewogICAgIGlmICghbV9kaWRQcm9jZXNzSWRlbnRpZmllcnMpIHsKICAgICAgICAgLy8gRG8gdGhp
cyBub3cgaW5zdGVhZCBvZiB0aGUgY29uc3RydWN0b3Igc28gdGhhdCB3ZSBkb24ndCBwYXkgdGhl
IHByaWNlIG9uIHRoZSBtYWluCkBAIC02NCwxMSArNjUsNiBAQCB2b2lkIERlc2lyZWRJZGVudGlm
aWVyczo6cHJvY2Vzc0NvZGVCbG9jCiAgICAgICAgICAgICBtX2lkZW50aWZpZXJOdW1iZXJGb3JO
YW1lLmFkZChtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpbmRleCkuaW1wbCgpLCBpbmRleCk7CiAg
ICAgICAgIG1fZGlkUHJvY2Vzc0lkZW50aWZpZXJzID0gdHJ1ZTsKICAgICB9Ci19Ci0KLXVuc2ln
bmVkIERlc2lyZWRJZGVudGlmaWVyczo6ZW5zdXJlKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXApCi17
Ci0gICAgcHJvY2Vzc0NvZGVCbG9ja0lkZW50aWZpZXJzSWZOZWVkZWQoKTsKIAogICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV9pZGVudGlmaWVyTnVtYmVyRm9yTmFtZS5hZGQocmVwLCBudW1iZXJPZklk
ZW50aWZpZXJzKCkpOwogICAgIHVuc2lnbmVkIHJlc3VsdCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CkBAIC03OSw0NSArNzUsMjAgQEAgdW5zaWduZWQgRGVzaXJlZElkZW50aWZpZXJzOjpl
bnN1cmUoVW5pcQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXVuc2lnbmVkIERlc2lyZWRJZGVu
dGlmaWVyczo6ZW5zdXJlKEJveDxJZGVudGlmaWVyPiByZXApCi17Ci0gICAgcHJvY2Vzc0NvZGVC
bG9ja0lkZW50aWZpZXJzSWZOZWVkZWQoKTsKLQotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBs
ID0gcmVwLT5pbXBsKCk7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2lkZW50aWZpZXJOdW1iZXJG
b3JOYW1lLmFkZChpbXBsLCBudW1iZXJPZklkZW50aWZpZXJzKCkpOwotICAgIHVuc2lnbmVkIHJl
c3VsdCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05l
d0VudHJ5KSB7Ci0gICAgICAgIG1fYWRkZWRJZGVudGlmaWVycy5hcHBlbmQoV1RGTW92ZShyZXAp
KTsKLSAgICAgICAgQVNTRVJUKGF0KHJlc3VsdCkgPT0gaW1wbCk7Ci0gICAgfQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KIFVuaXF1ZWRTdHJpbmdJbXBsKiBEZXNpcmVkSWRlbnRpZmllcnM6OmF0
KHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiByZXN1bHQ7
CiAgICAgaWYgKGluZGV4IDwgbV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSkKICAg
ICAgICAgcmVzdWx0ID0gbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaW5kZXgpLmltcGwoKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgY29uc3QgYXV0byYgdmFyaWFudCA9IG1fYWRkZWRJZGVudGlmaWVy
c1tpbmRleCAtIG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCldOwotICAgICAgICBp
ZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVkU3RyaW5nSW1wbCo+KHZhcmlhbnQpKQot
ICAgICAgICAgICAgcmVzdWx0ID0gV1RGOjpnZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPih2YXJpYW50
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gV1RGOjpnZXQ8Qm94PElkZW50
aWZpZXI+Pih2YXJpYW50KS0+aW1wbCgpOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJlc3Vs
dCA9IG1fYWRkZWRJZGVudGlmaWVyc1tpbmRleCAtIG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50
aWZpZXJzKCldOwogICAgIEFTU0VSVChyZXN1bHQtPmhhc0F0TGVhc3RPbmVSZWYoKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBEZXNpcmVkSWRlbnRpZmllcnM6OnJlYWxseUFkZChW
TSYgdm0sIENvbW1vbkRhdGEqIGNvbW1vbkRhdGEpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2
YXJpYW50IDogbV9hZGRlZElkZW50aWZpZXJzKSB7Ci0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiByZXA7Ci0gICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZWRTdHJpbmdJ
bXBsKj4odmFyaWFudCkpCi0gICAgICAgICAgICByZXAgPSBXVEY6OmdldDxVbmlxdWVkU3RyaW5n
SW1wbCo+KHZhcmlhbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXAgPSBXVEY6Omdl
dDxCb3g8SWRlbnRpZmllcj4+KHZhcmlhbnQpLT5pbXBsKCk7Ci0KKyAgICBmb3IgKGF1dG8gcmVw
IDogbV9hZGRlZElkZW50aWZpZXJzKSB7CiAgICAgICAgIEFTU0VSVChyZXAtPmhhc0F0TGVhc3RP
bmVSZWYoKSk7CiAgICAgICAgIElkZW50aWZpZXIgdWlkID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2
bSwgcmVwKTsKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkSWRlbnRpZmllcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1VuaXF1ZWRTdHJpbmdJbXBsLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDksNyArNDgs
NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZJZGVudGlmaWVycygpOwog
ICAgIHVuc2lnbmVkIGVuc3VyZShVbmlxdWVkU3RyaW5nSW1wbCopOwotICAgIHVuc2lnbmVkIGVu
c3VyZShCb3g8SWRlbnRpZmllcj4pOwogICAgIAogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBhdCh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAgICAgCkBAIC02MSw3ICs1OSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwcm9jZXNzQ29kZUJsb2NrSWRlbnRpZmllcnNJZk5lZWRlZCgpOwogCiAgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKLSAgICBWZWN0b3I8VmFyaWFudDxVbmlxdWVkU3RyaW5nSW1w
bCosIEJveDxJZGVudGlmaWVyPj4+IG1fYWRkZWRJZGVudGlmaWVyczsKKyAgICBWZWN0b3I8VW5p
cXVlZFN0cmluZ0ltcGwqPiBtX2FkZGVkSWRlbnRpZmllcnM7CiAgICAgSGFzaE1hcDxVbmlxdWVk
U3RyaW5nSW1wbCosIHVuc2lnbmVkPiBtX2lkZW50aWZpZXJOdW1iZXJGb3JOYW1lOwogICAgIGJv
b2wgbV9kaWRQcm9jZXNzSWRlbnRpZmllcnM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw2IEBACiAjaW5j
bHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgi
CiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiAj
aWYgRU5BQkxFKEZUTF9KSVQpCiAjaW5jbHVkZSAiRlRMQ2FwYWJpbGl0aWVzLmgiCkBAIC0xNTUs
NyArMTU0LDYgQEAgUGxhbjo6UGxhbihDb2RlQmxvY2sqIHBhc3NlZENvZGVCbG9jaywgQwogCiBQ
bGFuOjp+UGxhbigpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQodW5udWtlZFZNKCktPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogfQogCiBib29sIFBsYW46OmNvbXB1dGVDb21waWxl
VGltZXMoKSBjb25zdApAQCAtNjk2LDIyICs2OTQsNiBAQCBib29sIFBsYW46OmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKCkKIHZvaWQgUGxhbjo6Y2FuY2VsKCkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChtX3N0YWdlICE9IENhbmNlbGxlZCk7Ci0KLSAgICAvLyBXaGVuIHdlIGNhbmNlbCBhIHBsYW4s
IHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgY29tcGlsZXIgdGhyZWFkIG1heSBoYXZlCi0gICAg
Ly8gYWxyZWFkeSByZWYnZWQgaXQgYW5kIGlzIHdvcmtpbmcgb24gaXQuIFRoaXMgcmVzdWx0cyBp
biBhIHJhY2Ugd2hlcmUgdGhlCi0gICAgLy8gY29tcGlsZXIgdGhyZWFkIG1heSBob2xkIHRoZSBs
YXN0IHJlZmVyZW5jZSB0byB0aGUgcGxhbi4gV2UgcmVxdWlyZSB0aGF0Ci0gICAgLy8gdGhlIHBs
YW4gaXMgb25seSBkZXN0cnVjdGVkIG9uIHRoZSBtdXRhdG9yIHRocmVhZCBiZWNhdXNlIHdlIHBp
Z2d5IGJhY2sKLSAgICAvLyBvbiB0aGUgcGxhbiB0byBlbnN1cmUgY2VydGFpbiBvdGhlciBvYmpl
Y3RzIGFyZSBvbmx5IGRlc3RydWN0ZWQgb24gdGhlCi0gICAgLy8gbXV0YXRvciB0aHJlYWQuIEZv
ciBleGFtcGxlLCBzZWUgUGxhbjo6bV9pZGVudGlmaWVyc0tlcHRBbGl2ZUZvckNsZWFuVXAuCi0g
ICAgLy8KLSAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgcGxhbiBpcyBkZXN0cnVjdGVkIG9uIHRo
ZSBtdXRhdG9yIGFuZCBub3QgdGhlIGNvbXBpbGVyCi0gICAgLy8gdGhyZWFkLCB0aGUgY29tcGls
ZXIgdGhyZWFkIHdpbGwgZW5xdWV1ZSBhbnkgY2FuY2VsbGVkIHBsYW4gaXQgc2VlcyBpbgotICAg
IC8vIHRoZSB3b3JrbGlzdCdzIG1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24uIFRo
ZSBtdXRhdG9yIHdpbGwgbGF0ZXIKLSAgICAvLyBkZWxldGUgdGhlIGNhbmNlbGxlZCBwbGFucyBp
biBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLgotICAgIC8vIEhvd2V2ZXIsIGEg
bXV0YXRvciBzaG91bGQgb25seSBkZWxldGUgY2FuY2VsbGVkIHBsYW5zIHRoYXQgYmVsb25nIHRv
IGl0cwotICAgIC8vIFZNLiBIZW5jZSwgYSBjYW5jZWxsZWQgcGxhbiBuZWVkcyB0byBrZWVwIGl0
cyBtX3ZtIHBvaW50ZXIgdG8gbGV0IHRoZQotICAgIC8vIG11dGF0b3Iga25vdyB3aGljaCBWTSBp
dCBiZWxvbmdzIHRvLgotICAgIC8vIFJlZjogU2VlIFdvcmtsaXN0OjpkZWxldGVDYW5jZWxsZWRQ
bGFuc0ZvclZNKCkuCiAgICAgQVNTRVJUKG1fdm0pOwogCiAgICAgLy8gTnVrZSB0aGUgVk0gcG9p
bnRlciBzbyB0aGF0IHBvaW50ZXIgY29tcGFyaXNvbnMgYWdhaW5zdCBpdCB3aWxsIGZhaWwuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjUzODEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDYgQEAKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29t
cGlsYXRpb24uaCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCi0jaW5jbHVkZSA8d3Rm
L0JveC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+CiAKQEAgLTExNywxMiArMTE2LDYgQEAgcHVibGljOgogICAgIERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjayogY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2NhbGxi
YWNrLmdldCgpOyB9CiAgICAgdm9pZCBzZXRDYWxsYmFjayhSZWY8RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrPiYmIGNhbGxiYWNrKSB7IG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsg
fQogCi0gICAgdm9pZCBrZWVwQWxpdmVJZGVudGlmaWVyKEJveDxJZGVudGlmaWVyPiBpZGVudGlm
aWVyKQotICAgIHsKLSAgICAgICAgaWYgKGlkZW50aWZpZXIpCi0gICAgICAgICAgICBtX2lkZW50
aWZpZXJzS2VwdEFsaXZlRm9yQ2xlYW5VcC5hcHBlbmQoV1RGTW92ZShpZGVudGlmaWVyKSk7Ci0g
ICAgfQotCiBwcml2YXRlOgogICAgIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpIGNvbnN0Owog
ICAgIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCkgY29uc3Q7CkBAIC0xODEsNyArMTc0LDYgQEAg
cHJpdmF0ZToKICAgICBTdGFnZSBtX3N0YWdlOwogCiAgICAgUmVmUHRyPERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaz4gbV9jYWxsYmFjazsKLSAgICBWZWN0b3I8Qm94PElkZW50aWZpZXI+LCAx
Nj4gbV9pZGVudGlmaWVyc0tlcHRBbGl2ZUZvckNsZWFuVXA7CiAKICAgICBNb25vdG9uaWNUaW1l
IG1fdGltZUJlZm9yZUZUTDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAwLDggQEAg
cHJvdGVjdGVkOgogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2RhdGEubV9yaWdodFRvUnVu
KTsKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fd29ya2xpc3Qu
bV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2Vs
bGVkKSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrbGlzdC5tX2NhbmNlbGxlZFBsYW5zUGVuZGlu
Z0Rlc3RydWN0aW9uLmFwcGVuZChXVEZNb3ZlKG1fcGxhbikpOworICAgICAgICAgICAgaWYgKG1f
cGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9wbGFu
LT5ub3RpZnlDb21waWxpbmcoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEyNSwxMCArMTIz
LDggQEAgcHJvdGVjdGVkOgogICAgICAgICAKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIoKm1fd29ya2xpc3QubV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX3BsYW4t
PnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVkKSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrbGlz
dC5tX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLmFwcGVuZChXVEZNb3ZlKG1fcGxh
bikpOworICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwotICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3BsYW4tPm5vdGlmeVJlYWR5KCk7CiAg
ICAgICAgICAgICAKQEAgLTMwNCw0NyArMzAwLDEwIEBAIHZvaWQgV29ya2xpc3Q6OndhaXRVbnRp
bEFsbFBsYW5zRm9yVk1BcmUKICAgICB9CiB9CiAKLXZvaWQgV29ya2xpc3Q6OmRlbGV0ZUNhbmNl
bGxlZFBsYW5zRm9yVk0oTG9ja0hvbGRlciYsIFZNJiB2bSkKLXsKLSAgICBSRUxFQVNFX0FTU0VS
VCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBIYXNoU2V0PFJlZlB0
cjxQbGFuPj4gcmVtb3ZlZFBsYW5zOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBzY2VuYXJpbyBj
YW4gb2NjdXI6Ci0gICAgLy8gMS4gVGhlIERGRyB0aHJlYWQgc3RhcnRlZCBjb21waWxpbmcgYSBw
bGFuLgotICAgIC8vIDIuIFRoZSBHQyB0aHJlYWQgY2FuY2VscyB0aGUgcGxhbiwgYW5kIGFkZHMg
aXQgdG8gbV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbi4KLSAgICAvLyAzLiBUaGUg
REZHIHRocmVhZCBmaW5pc2hlcyBjb21waWxpbmcsIGFuZCBkaXNjb3ZlcnMgdGhhdCB0aGUgdGhy
ZWFkIGlzIGNhbmNlbGxlZC4KLSAgICAvLyAgICBUbyBhdm9pZCBkZXN0cnVjdGluZyB0aGUgcGxh
biBpbiB0aGUgREZHIHRocmVhZCwgaXQgYWRkcyBpdCB0bwotICAgIC8vICAgIG1fY2FuY2VsbGVk
UGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24uCi0gICAgLy8gNC4gVGhlIGFib3ZlIG9jY3VycyBiZWZv
cmUgdGhlIG11dGF0b3IgcnVucyBkZWxldGVDYW5jZWxsZWRQbGFuc0ZvclZNKCkuCi0gICAgLy8K
LSAgICAvLyBIZW5jZSwgdGhlIHNhbWUgY2FuY2VsbGVkIHBsYW4gY2FuIGFwcGVhciBpbiBtX2Nh
bmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uCi0gICAgLy8gbW9yZSB0aGFuIG9uY2UuIFRo
aXMgaXMgd2h5IHdlIG5lZWQgdG8gZmlsdGVyIHRoZSBjYW5jZWxsZWQgcGxhbnMgdGhyb3VnaAot
ICAgIC8vIHRoZSByZW1vdmVkUGxhbnMgSGFzaFNldCBiZWZvcmUgd2UgZG8gdGhlIHJlZkNvdW50
IGNoZWNrIGJlbG93LgotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NhbmNlbGxlZFBs
YW5zUGVuZGluZ0Rlc3RydWN0aW9uLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxQbGFu
PiBwbGFuID0gbV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbltpXTsKLSAgICAgICAg
aWYgKHBsYW4tPnVubnVrZWRWTSgpICE9ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uW2ktLV0gPSBtX2NhbmNlbGxl
ZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLmxhc3QoKTsKLSAgICAgICAgbV9jYW5jZWxsZWRQbGFu
c1BlbmRpbmdEZXN0cnVjdGlvbi5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIHJlbW92ZWRQbGFucy5h
ZGQoV1RGTW92ZShwbGFuKSk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFyZW1vdmVkUGxhbnMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gcmVtb3ZlZFBsYW5zLnRha2VB
bnkoKTsKLSAgICAgICAgQVNTRVJUKHBsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVkKTsK
LSAgICAgICAgaWYgKHBsYW4tPnJlZkNvdW50KCkgPiAxKQotICAgICAgICAgICAgbV9jYW5jZWxs
ZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbi5hcHBlbmQoV1RGTW92ZShwbGFuKSk7Ci0gICAgfQot
fQotCiB2b2lkIFdvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mIHZtLCBWZWN0
b3I8UmVmUHRyPFBsYW4+LCA4PiYgbXlSZWFkeVBsYW5zKQogewogICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBBU1NFUlQo
dm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0KLSAgICBkZWxldGVDYW5jZWxs
ZWRQbGFuc0ZvclZNKGxvY2tlciwgdm0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9y
ZWFkeVBsYW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9y
ZWFkeVBsYW5zW2ldOwogICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCkBAIC00NDcsOCAr
NDA2LDYgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICB7CiAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgICAgICBIYXNoU2V0PENvbXBp
bGF0aW9uS2V5PiBkZWFkUGxhbktleXM7Ci0gICAgICAgIGJvb2wgaXNJbk11dGF0b3IgPSB2bS5j
dXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpOwotCiAgICAgICAgIGZvciAoUGxhbk1hcDo6
aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyAr
K2l0ZXIpIHsKICAgICAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKQEAgLTQ2MiwxMiArNDE5LDggQEAgdm9p
ZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICAgICAgICAgIGRlYWRQbGFu
S2V5cy5hZGQocGxhbi0+a2V5KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZGVhZFBsYW5L
ZXlzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZm9yIChIYXNoU2V0PENvbXBpbGF0aW9uS2V5
Pjo6aXRlcmF0b3IgaXRlciA9IGRlYWRQbGFuS2V5cy5iZWdpbigpOyBpdGVyICE9IGRlYWRQbGFu
S2V5cy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4g
PSBtX3BsYW5zLnRha2UoKml0ZXIpOwotICAgICAgICAgICAgICAgIHBsYW4tPmNhbmNlbCgpOwot
ICAgICAgICAgICAgICAgIGlmICghaXNJbk11dGF0b3IpCi0gICAgICAgICAgICAgICAgICAgIG1f
Y2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24uYXBwZW5kKFdURk1vdmUocGxhbikpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChIYXNoU2V0PENvbXBpbGF0aW9uS2V5Pjo6
aXRlcmF0b3IgaXRlciA9IGRlYWRQbGFuS2V5cy5iZWdpbigpOyBpdGVyICE9IGRlYWRQbGFuS2V5
cy5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgICAgIG1fcGxhbnMudGFrZSgqaXRlciktPmNh
bmNlbCgpOwogICAgICAgICAgICAgRGVxdWU8UmVmUHRyPFBsYW4+PiBuZXdRdWV1ZTsKICAgICAg
ICAgICAgIHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBSZWZQ
dHI8UGxhbj4gcGxhbiA9IG1fcXVldWUudGFrZUZpcnN0KCk7CkBAIC01MDMsOSArNDU2LDYgQEAg
dm9pZCBXb3JrbGlzdDo6cmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNGbwogICAgIExvY2tIb2xkZXIg
bG9ja2VyKCptX2xvY2spOwogICAgIEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFuS2V5
czsKICAgICBWZWN0b3I8UmVmUHRyPFBsYW4+PiBkZWFkUGxhbnM7Ci0gICAgQVNTRVJUKHZtLmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotCi0gICAgZGVsZXRlQ2FuY2VsbGVkUGxh
bnNGb3JWTShsb2NrZXIsIHZtKTsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9wbGFucykgewog
ICAgICAgICBQbGFuKiBwbGFuID0gZW50cnkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFu
LT52bSgpICE9ICZ2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmgJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNiBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIHRocmVhZEZ1bmN0aW9uKHZvaWQqIGFyZ3VtZW50KTsKICAgICAKICAgICB2b2lk
IHJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYsIFZlY3RvcjxSZWZQdHI8UGxhbj4sIDg+Jik7
Ci0gICAgdm9pZCBkZWxldGVDYW5jZWxsZWRQbGFuc0ZvclZNKExvY2tIb2xkZXImLCBWTSYpOwog
CiAgICAgdm9pZCBkdW1wKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgUHJpbnRTdHJlYW0mKSBjb25z
dDsKICAgICAKQEAgLTExNCw3ICsxMTMsNiBAQCBwcml2YXRlOgogICAgIC8vIFVzZWQgdG8gcXVp
Y2tseSBmaW5kIHdoaWNoIHBsYW5zIGhhdmUgYmVlbiBjb21waWxlZCBhbmQgYXJlIHJlYWR5IHRv
CiAgICAgLy8gYmUgY29tcGxldGVkLgogICAgIFZlY3RvcjxSZWZQdHI8UGxhbj4sIDE2PiBtX3Jl
YWR5UGxhbnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxQbGFuPiwgND4gbV9jYW5jZWxsZWRQbGFuc1Bl
bmRpbmdEZXN0cnVjdGlvbjsKICAgICBSZWY8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3Bs
YW5FbnF1ZXVlZDsKICAgICBDb25kaXRpb24gbV9wbGFuQ29tcGlsZWQ7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjUzODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAj
aW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiREZH
Q29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCkBAIC0yMDI4LDcgKzIw
MjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIGlzU3RyaW5nT3JTeW1i
b2woc3Vic2NyaXB0KSkgeworICAgIGlmIChiYXNlVmFsdWUuaXNDZWxsKCkgJiYgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlL
ZXkoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CkBAIC0yMDM3LDcgKzIwMzgsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgICAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpPcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JO
dWxsKHZtKSwgcHJvcGVydHlOYW1lLCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7IAog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJD
YWNoaW5nKHZtLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSwgcHJvcGVy
dHlOYW1lLmltcGwoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hHZXRCeShnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsICpzdHViSW5m
bywgR2V0QnlLaW5kOjpOb3JtYWxCeVZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hH
ZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQuYXNDZWxs
KCksIHNsb3QsICpzdHViSW5mbywgR2V0QnlLaW5kOjpOb3JtYWxCeVZhbCk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZvdW5kID8gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSkgOiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgfSkpOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgogI2luY2x1ZGUgIkND
YWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKQEAgLTE3OCw3ICsxNzksNyBAQCBpbmxp
bmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByCiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
VmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQg
a2luZCkKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCByZXN1bHQ7CkBAIC0xOTcsNiArMTk4LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlR2V0QnkoSgogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2Fz
ZTsKIAogICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCkgeworICAgICAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IHVzZSB0aGUgSWRlbnRpZmllciAoaW5z
dGVhZCBvZiBKU0NlbGwqKSBmb3JtIHNpbmNlCisgICAgICAgICAgICAvLyB3ZSBoYXZlIGFuIGlt
bW9ydGFsIElkZW50aWZpZXIgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgcHJvcGVydHlOYW1l
ID0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoOwogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShi
YXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0g
Q2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkg
PT0gYmFzZUNlbGwKQEAgLTI2OCw3ICsyNzIsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVHZXRCeShKCiAKICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKHN0dWJJbmZvLCBz
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5l
cmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6
R2V0QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZSwgc2xv
dC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uc2xvd1BhdGhDYWxsTG9jYXRpb24sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rp
b24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYo
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7
CkBAIC0zMTksNyArMzIzLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnkoSgogICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5
UHJvdG9BY2Nlc3NDaGFpbjo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBw
cm90b3R5cGVBY2Nlc3NDaGFpbi0+c2xvdEJhc2VTdHJ1Y3R1cmUoc3RydWN0dXJlKS0+Z2V0KHZt
LCBwcm9wZXJ0eU5hbWUpID09IG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hh
aW4tPnNsb3RCYXNlU3RydWN0dXJlKHN0cnVjdHVyZSktPmdldCh2bSwgcHJvcGVydHlOYW1lLnVp
ZCgpKSA9PSBvZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgdXNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGluc3Rl
YWQgZm9yIGZhc3RlciBhY2Nlc3Nlcy4KICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlw
ZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKQEAgLTMyOCwxNiArMzMyLDE2IEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyMTUKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlz
cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCBjb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKSA9PSBvZmZzZXQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSwgc2xvdC5hdHRyaWJ1dGVzKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCksIHNsb3QuYXR0cmlidXRl
cygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQpAQCAtMzkzLDEyICszOTcsMTIgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUFkZEFjY2Vzc0Nhc2UsIGJh
c2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBwcm9wZXJ0eU5hbWUsIHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUFkZEFjY2Vz
c0Nhc2UsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7
CiAKICAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGNvZGVC
bG9jaywgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAogICAgICAgICBpZiAocmVz
dWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6
R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBwcm9w
ZXJ0eU5hbWUsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9P
ck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwogICAgICAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwpAQCAtNDEwLDcgKzQxNCw3IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICByZXR1cm4gcmVzdWx0LnNob3Vs
ZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKIH0KIAotdm9p
ZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBHZXRCeUtpbmQga2luZCkKK3ZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKIHsKICAgICBTdXBlclNh
bXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCkBAIC00OTQsNyArNDk4
LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlHZQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2Fz
ZShsb2NrZXIsIGNvZGVCbG9jaywgSWRlbnRpZmllcigpLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0s
IGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgSWRlbnRpZmllcigpKSk7CisgICAgICAgIHJlc3VsdCA9
IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBjb2RlQmxvY2ssIG51bGxwdHIsIEFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7CiAKICAg
ICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CiAgICAgICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OkdldEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JO
dWxsKHZtKSwgSWRlbnRpZmllcigpKSk7CkBAIC04ODQsNyArODg4LDcgQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5zdGFuYwogICAgICAgICAKICAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpJbnN0YW5jZU9mQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
SWRlbnRpZmllcigpKSk7CiAgICAgICAgIAotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRB
Y2Nlc3NDYXNlKGxvY2tlciwgY29kZUJsb2NrLCBJZGVudGlmaWVyKCksIFdURk1vdmUobmV3Q2Fz
ZSkpOworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgY29k
ZUJsb2NrLCBudWxscHRyLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewogICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpJbnN0YW5jZU9mUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJ
ZGVudGlmaWVyKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCShyZXZp
c2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1
ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgogI2lu
Y2x1ZGUgIlB1dEtpbmQuaCIKIApAQCAtNDEsNyArNDIsNyBAQCBlbnVtIGNsYXNzIEdldEJ5S2lu
ZCB7CiB9OwogCiB2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owotdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVl
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBHZXRCeUtpbmQpOwordm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU1ZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7CiB2b2lkIHJlcGF0Y2hQdXRCeUlEKEpT
R2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
S2luZCk7CiB2b2lkIHJlcGF0Y2hJbkJ5SUQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBK
U09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0
eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXBhdGNoSW5zdGFuY2VPZihKU0ds
b2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG90eXBl
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGJvb2wgd2FzRm91bmQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVu
dGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fYml0cyA/IHVp
ZCgpIDogU3RyaW5nSW1wbDo6ZW1wdHkoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJp
bnRTdHJlYW07CitjbGFzcyBVbmlxdWVkU3RyaW5nSW1wbDsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6UHJpbnRTdHJlYW07Cit1c2luZyBXVEY6OlVuaXF1ZWRTdHJpbmdJbXBs
OworCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSWRlbnRpZmllcjsKK2NsYXNzIEpTQ2VsbDsK
K2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyIHsKK3B1Ymxp
YzoKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkgPSBkZWZhdWx0OworICAgIGlubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImKTsKKyAgICBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllcihKU0NlbGwqIGlkZW50aWZpZXIpOworCisgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cihjb25zdCBDYWNoZWFibGVJZGVudGlmaWVyJikgPSBkZWZhdWx0OworICAgIENhY2hlYWJsZUlk
ZW50aWZpZXIoQ2FjaGVhYmxlSWRlbnRpZmllciYmKSA9IGRlZmF1bHQ7CisKKyAgICBDYWNoZWFi
bGVJZGVudGlmaWVyKHN0ZDo6bnVsbHB0cl90KQorICAgICAgICA6IG1fYml0cygwKQorICAgIHsg
fQorCisgICAgYm9vbCBpc1VpZCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyAmIHNfdWlkVGFnOyB9
CisgICAgYm9vbCBpc0NlbGwoKSBjb25zdCB7IHJldHVybiAhaXNVaWQoKTsgfQorCisgICAgYm9v
bCBpc1N5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyAmJiB1aWQoKS0+aXNTeW1ib2woKTsg
fQorCisgICAgaW5saW5lIEpTQ2VsbCogY2VsbCgpIGNvbnN0OworICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQoKSBjb25zdDsKKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBtX2JpdHM7IH0KKworICAgIENhY2hlYWJsZUlkZW50aWZpZXImIG9wZXJhdG9yPShj
b25zdCBDYWNoZWFibGVJZGVudGlmaWVyJikgPSBkZWZhdWx0OworICAgIENhY2hlYWJsZUlkZW50
aWZpZXImIG9wZXJhdG9yPShDYWNoZWFibGVJZGVudGlmaWVyJiYpID0gZGVmYXVsdDsKKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWNoZWFibGVJZGVudGlmaWVyJiBvdGhlcikgY29uc3Q7
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENhY2hlYWJsZUlkZW50aWZpZXImIG90aGVyKSBj
b25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0
OworCisgICAgc3RhdGljIGlubGluZSBib29sIGlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoSlND
ZWxsKik7CisgICAgc3RhdGljIGlubGluZSBib29sIGlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwo
SlNWYWx1ZSk7CisKKyAgICBpbmxpbmUgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikg
Y29uc3Q7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBpbmxpbmUgYm9vbCBpc1N5bWJvbENlbGwoKSBjb25zdDsK
KyAgICBpbmxpbmUgYm9vbCBpc1N0cmluZ0NlbGwoKSBjb25zdDsKKworICAgIGlubGluZSB2b2lk
IHNldENlbGxCaXRzKEpTQ2VsbCopOworICAgIGlubGluZSB2b2lkIHNldFVpZEJpdHMoVW5pcXVl
ZFN0cmluZ0ltcGwqKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHNfdWlkVGFn
ID0gMTsKKyAgICB1aW50cHRyX3QgbV9iaXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllci5o
IgorCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXI6OkNhY2hlYWJsZUlkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllcikKK3sKKyAgICBzZXRVaWRCaXRzKGlkZW50aWZpZXIuaW1wbCgpKTsKK30KKwor
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXI6OkNhY2hlYWJsZUlkZW50aWZpZXIoSlNDZWxsKiBp
ZGVudGlmaWVyKQoreworICAgIHNldENlbGxCaXRzKGlkZW50aWZpZXIpOworfQorCitpbmxpbmUg
SlNDZWxsKiBDYWNoZWFibGVJZGVudGlmaWVyOjpjZWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
aXNDZWxsKCkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9iaXRzKTsKK30K
KworaW5saW5lIFVuaXF1ZWRTdHJpbmdJbXBsKiBDYWNoZWFibGVJZGVudGlmaWVyOjp1aWQoKSBj
b25zdAoreworICAgIGlmICghbV9iaXRzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAoaXNVaWQoKSkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1w
bCo+KG1fYml0cyAmIH5zX3VpZFRhZyk7CisgICAgaWYgKGlzU3ltYm9sQ2VsbCgpKQorICAgICAg
ICByZXR1cm4gJmpzQ2FzdDxTeW1ib2wqPihjZWxsKCkpLT51aWQoKTsKKyAgICBBU1NFUlQoaXNT
dHJpbmdDZWxsKCkpOworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihj
ZWxsKCkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJp
bmctPmdldFZhbHVlSW1wbCgpKTsKK30KKworaW5saW5lIGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKGNl
bGwtPmlzU3ltYm9sKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghY2VsbC0+aXNT
dHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBq
c0Nhc3Q8SlNTdHJpbmcqPihjZWxsKTsKKyAgICBpZiAoc3RyaW5nLT5pc1JvcGUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdHJpbmctPmdldFZhbHVlSW1wbCgpLT5pc0F0
b20oKTsKK30KKworaW5saW5lIGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJ
ZGVudGlmaWVyQ2VsbChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNDZWxsKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXNDYWNoZWFibGVJZGVudGlmaWVy
Q2VsbCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK2lubGluZSBib29sIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmlzU3ltYm9sQ2VsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzQ2VsbCgpICYmIGNlbGwo
KS0+aXNTeW1ib2woKTsKK30KKworaW5saW5lIGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNT
dHJpbmdDZWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNDZWxsKCkgJiYgY2VsbCgpLT5pc1N0
cmluZygpOworfQorCitpbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjpzZXRDZWxsQml0
cyhKU0NlbGwqIGNlbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNDYWNoZWFibGVJZGVudGlm
aWVyQ2VsbChjZWxsKSk7CisgICAgbV9iaXRzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2Vs
bCk7Cit9CisKK2lubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnNldFVpZEJpdHMoVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBtX2JpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pih1aWQpIHwgc191aWRUYWc7Cit9CisKK2lubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZp
ZXI6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit7CisgICAgaWYg
KG1fYml0cyAmJiBpc0NlbGwoKSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChj
ZWxsKCkpOworfQorCisKK2lubGluZSBib29sIENhY2hlYWJsZUlkZW50aWZpZXI6Om9wZXJhdG9y
PT0oY29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHVpZCgpID09IG90aGVyLnVpZCgpOworfQorCitpbmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlm
aWVyOjpvcGVyYXRvciE9KGNvbnN0IENhY2hlYWJsZUlkZW50aWZpZXImIG90aGVyKSBjb25zdAor
eworICAgIHJldHVybiB1aWQoKSAhPSBvdGhlci51aWQoKTsKK30KKworaW5saW5lIGJvb2wgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6b3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiBvdGhlcikgY29u
c3QKK3sKKyAgICByZXR1cm4gdWlkKCkgPT0gb3RoZXIuaW1wbCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhl
bHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMw
LDcgKzEzMCw3IEBAIHN0YXRpYyBTdHJpbmcgZnVuY3Rpb25DYWxsQmFzZShjb25zdCBTdHIKICAg
ICBpZiAoc291cmNlTGVuZ3RoIDwgMiB8fCBzb3VyY2VUZXh0W2lkeF0gIT0gJyknKSB7CiAgICAg
ICAgIC8vIEZvciBmdW5jdGlvbiBjYWxscyB0aGF0IGhhdmUgbWFueSBuZXcgbGluZXMgaW4gYmV0
d2VlbiB0aGVpciBvcGVuIHBhcmVudGhlc2lzCiAgICAgICAgIC8vIGFuZCB0aGVpciBjbG9zaW5n
IHBhcmVudGhlc2lzLCB0aGUgdGV4dCByYW5nZSBwYXNzZWQgaW50byB0aGUgbWVzc2FnZSBhcHBl
bmRlciAKLSAgICAgICAgLy8gd2lsbCBub3QgaW5sY3VkZSB0aGUgdGV4dCBpbiBiZXR3ZWVuIHRo
ZXNlIHBhcmVudGhlc2VzLCBpdCB3aWxsIGp1c3QgYmUgdGhlIGRlc2lyZWQKKyAgICAgICAgLy8g
d2lsbCBub3QgaW5jbHVkZSB0aGUgdGV4dCBpbiBiZXR3ZWVuIHRoZXNlIHBhcmVudGhlc2VzLCBp
dCB3aWxsIGp1c3QgYmUgdGhlIGRlc2lyZWQKICAgICAgICAgLy8gdGV4dCB0aGF0IHByZWNlZGVz
IHRoZSBwYXJlbnRoZXNlcy4KICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjUzODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMTg5LDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgYm9vbCBlcXVhbChK
U0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiBvdGhlcikgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5n
JiB2YWx1ZShKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIGlubGluZSBjb25zdCBTdHJpbmcm
IHRyeUdldFZhbHVlKGJvb2wgYWxsb2NhdGlvbkFsbG93ZWQgPSB0cnVlKSBjb25zdDsKKyAgICBj
b25zdCBTdHJpbmdJbXBsKiBnZXRWYWx1ZUltcGwoKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmdJ
bXBsKiB0cnlHZXRWYWx1ZUltcGwoKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OwogCkBAIC03MDMsNiArNzA0LDEyIEBAIEFMV0FZU19JTkxJTkUgdW5z
aWduZWQgSlNTdHJpbmc6Omxlbmd0aCgKICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0cmluZ0lt
cGwqPihwb2ludGVyKS0+bGVuZ3RoKCk7CiB9CiAKK2lubGluZSBjb25zdCBTdHJpbmdJbXBsKiBK
U1N0cmluZzo6Z2V0VmFsdWVJbXBsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzUm9wZSgpKTsK
KyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0cmluZ0ltcGwqPihtX2ZpYmVyKTsKK30KKwogaW5s
aW5lIGNvbnN0IFN0cmluZ0ltcGwqIEpTU3RyaW5nOjp0cnlHZXRWYWx1ZUltcGwoKSBjb25zdAog
ewogICAgIHVpbnRwdHJfdCBwb2ludGVyID0gbV9maWJlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5NCwyMCArMTA5NCwxNSBA
QCB2b2lkIFZNOjpkdW1wUmVnRXhwVHJhY2UoKQogfQogI2VuZGlmCiAKLVdhdGNocG9pbnRTZXQq
IFZNOjplbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKQorV2F0Y2hwb2ludFNldCogVk06OmVuc3VyZVdhdGNocG9pbnRTZXRG
b3JJbXB1cmVQcm9wZXJ0eShjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1lKQog
ewotICAgIGF1dG8gcmVzdWx0ID0gbV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzLmFkZChw
cm9wZXJ0eU5hbWUuc3RyaW5nKCksIG51bGxwdHIpOworICAgIGF1dG8gcmVzdWx0ID0gbV9pbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzLmFkZChwcm9wZXJ0eU5hbWUsIG51bGxwdHIpOwogICAg
IGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpOwogICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCi12b2lkIFZNOjpyZWdpc3RlcldhdGNocG9p
bnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFdhdGNo
cG9pbnQqIHdhdGNocG9pbnQpCi17Ci0gICAgZW5zdXJlV2F0Y2hwb2ludFNldEZvckltcHVyZVBy
b3BlcnR5KHByb3BlcnR5TmFtZSktPmFkZCh3YXRjaHBvaW50KTsKLX0KLQotdm9pZCBWTTo6YWRk
SW1wdXJlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit2b2lkIFZNOjphZGRJ
bXB1cmVQcm9wZXJ0eShjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1lKQogewog
ICAgIGlmIChSZWZQdHI8V2F0Y2hwb2ludFNldD4gd2F0Y2hwb2ludFNldCA9IG1faW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50U2V0cy50YWtlKHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHdhdGNocG9p
bnRTZXQtPmZpcmVBbGwoKnRoaXMsICJJbXB1cmUgcHJvcGVydHkgYWRkZWQiKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTAxNCwxMSArMTAx
NCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNocmlua0Zvb3RwcmludFdoZW5JZGxlKCk7CiAK
LSAgICBXYXRjaHBvaW50U2V0KiBlbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHko
Y29uc3QgSWRlbnRpZmllciYpOwotICAgIHZvaWQgcmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJl
UHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYsIFdhdGNocG9pbnQqKTsKKyAgICBXYXRjaHBvaW50
U2V0KiBlbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgVW5pcXVlZFN0
cmluZ0ltcGwqKTsKICAgICAKICAgICAvLyBGSVhNRTogVXNlIEF0b21TdHJpbmcgb25jZSBpdCBn
b3QgbWVyZ2VkIHdpdGggSWRlbnRpZmllci4KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFk
ZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICAKICAg
ICBJbmxpbmVXYXRjaHBvaW50U2V0JiBwcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKSB7IHJldHVy
biBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZDsgfQogCkBAIC0xMTkyLDcgKzExOTEsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyB7IGZh
bHNlIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ1aWx0aW5FeGVjdXRhYmxlcz4gbV9idWlsdGluRXhlY3V0YWJsZXM7
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxXYXRjaHBvaW50U2V0Pj4gbV9pbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnRTZXRzOworICAgIEhhc2hNYXA8Y29uc3QgVW5pcXVlZFN0cmluZ0ltcGwq
LCBSZWZQdHI8V2F0Y2hwb2ludFNldD4+IG1faW1wdXJlUHJvcGVydHlXYXRjaHBvaW50U2V0czsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGVyPiBtX3R5cGVQcm9maWxlcjsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGVyTG9nPiBtX3R5cGVQcm9maWxlckxvZzsKICAgICB1
bnNpZ25lZCBtX3R5cGVQcm9maWxlckVuYWJsZWRDb3VudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI1MzgxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE5LTEyLTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQm94PElkZW50aWZpZXI+IHdpdGggYSBuZXcg
Q2FjaGVhYmxlSWRlbnRpZmllciBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNTU0NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTgwNDE4
MDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9Db21tb25WTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRJbXB1cmVQcm9w
ZXJ0eSk6CisKIDIwMTktMTItMTkgIERvdWcgS2VsbHkgIDxkb3Vna0BhcHBsZS5jb20+CiAKICAg
ICAgICAgVXBkYXRlIFRyYWNrQmFzZSB0byBzdG9yZSBtX21lZGlhRWxlbWVudCBhcyBhIFdlYWtQ
dHIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAJKHJldmlzaW9u
IDI1MzgxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBGcmFtZSogbGV4aWNhbEZyYW1lRnJvbUNvbW1v
blZNKCkKIAogdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUp
OworICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLmltcGwoKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386325</attachid>
            <date>2019-12-22 21:08:47 -0800</date>
            <delta_ts>2020-01-02 12:09:42 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-205544.patch</filename>
            <type>text/plain</type>
            <size>106602</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTM4NzQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE5LTEyLTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQm94PElkZW50aWZpZXI+IHdpdGggYSBuZXcg
Q2FjaGVhYmxlSWRlbnRpZmllciBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNTU0NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTgwNDE4
MDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBz
dHJlc3MvcmFjeS1nYy1jbGVhbnVwLW9mLWlkZW50aWZpZXItYWZ0ZXItbXV0YXRvci1zdG9wcy1y
dW5uaW5nLmpzOiBBZGRlZC4KKwogMjAxOS0xMi0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEltcHJvdmUgb3VyIGJvdW5kIGZ1bmN0aW9uIGlt
cGxlbWVudGF0aW9uCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9yYWN5LWdjLWNsZWFudXAtb2YtaWRl
bnRpZmllci1hZnRlci1tdXRhdG9yLXN0b3BzLXJ1bm5pbmcuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy9zdHJlc3MvcmFjeS1nYy1jbGVhbnVwLW9mLWlkZW50aWZpZXItYWZ0ZXItbXV0YXRvci1z
dG9wcy1ydW5uaW5nLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3JhY3ktZ2Mt
Y2xlYW51cC1vZi1pZGVudGlmaWVyLWFmdGVyLW11dGF0b3Itc3RvcHMtcnVubmluZy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACisvL0AgcnVuRGVmYXVsdCgiLS1udW1iZXJPZkdD
TWFya2Vycz0xIiwgIi0tdXNlREZHSklUPWZhbHNlIiwgIi0tdXNlTExJbnQ9ZmFsc2UiKQorCitm
dW5jdGlvbiBmb28oKSB7CisgICAgZ2MoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAw
MDsgaSsrKSB7CisgICAgICAgIGNvbnN0IG8gPSB7IGY6IDQyIH07CisgICAgICAgIG9bU3ltYm9s
LnNwbGl0LmRlc2NyaXB0aW9uXTsKKyAgICB9Cit9CitmdW5jdGlvbiBiYXIoKSB7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAgbmV3IFVpbnQ4QXJyYXkoMjAwMDAw
KS5zdWJhcnJheSgpOworfQorCitmb28oKTsKK2JhcigpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTM4NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc0IEBACisyMDE5LTEyLTIyICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQm94PElk
ZW50aWZpZXI+IHdpdGggYSBuZXcgQ2FjaGVhYmxlSWRlbnRpZmllciBjbGFzcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTU0NAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNTgwNDE4MDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgdXNlIG9mIEJveDxJZGVu
dGlmaWVyPiBpcyB0byBnZXQgYXJvdW5kIGhhdmluZyB0bworICAgICAgICByZWYvZGVyZWYgdGhl
IHVuZGVybHlpbmcgVW5pcWVkU3RyaW5nSW1wbCBpbiBJZGVudGlmaWVycyBmcm9tIHRoZSBjb21w
aWxlcgorICAgICAgICBhbmQgR0MgdGhyZWFkcy4gIEhvd2V2ZXIsIGl0IHByb3ZlcyB0byBiZSBk
aWZmaWN1bHQgdG8gY29udHJvbCB3aGVuIHRoZXNlCisgICAgICAgIEJveDxJZGVudGlmaWVyPnMg
Z2V0IGRlc3RydWN0ZWQsIGFuZCByZXF1aXJlcyB0aGF0IHdlIGZpbmQgYWxsIHRoZSBwbGFjZXMg
aW4KKyAgICAgICAgdGhlIGNvbXBpZXIgYW5kIEdDIHRocmVhZHMgd2hlcmUgdGhpcyBjYW4gaGFw
cGVuLCBhbmQgYXBwbHkga2VlcCBhbGl2ZSB0YWN0aWNzCisgICAgICAgIHRoZXJlIHRvIGRlZmVy
IGRlc3RydWN0aW9uIG9mIHRoZSBCb3g8SWRlbnRpZmllcj4gdG8gdGhlIG11dGF0b3IgdGhyZWFk
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBieSByZXBsYWNpbmcgdXNlcyBvZiBC
b3g8SWRlbnRpZmllcj4gd2l0aCBhCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIHdoaWNo
IGlzIGVmZmVjdGl2ZWx5IGEgdGFnZ2VkIHVuaW9uIG9mIGEgSlNDZWxsKiBvciBhCisgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKi4gIFRoZSBKU0NlbGwqLCBpbiB0aGlzIGNhc2UsIGNhbiBiZSBl
aXRoZXIgYSBTeW1ib2wqIG9yIGEKKyAgICAgICAgSlNTdHJpbmcqIHRoYXQgaXMgYmFja2VkIGJ5
IGFuIGF0b20gc3RyaW5nLiAgVGhlIFZNIHJ1bnRpbWUgZW5zdXJlcyB0aGF0IHdlJ2xsCisgICAg
ICAgIG5ldmVyIHRyeSB0byBjYWNoZSBhbiBpZGVudGlmaWVyIGZyb20gYSBKU0NlbGwgdGhhdCBp
cyBub3Qgb25lIG9mIHRoZXNlLiAgVGhpcworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGNh
biBiZSBkZXN0cnVjdGVkIGZyb20gdGhlIGNvbXBpbGVyIG9yIEdDIHRocmVhZC4gIFNpbmNlIGl0
CisgICAgICAgIGRvZXNuJ3QgaG9sZCBhIHJlZiBvZiB0aGUgdW5kZXJseWluZyBVbmlxdWVkU3Ry
aW5nSW1wbCwgaXQgd29uJ3QgdHJ5IHRvIGRlcmVmCisgICAgICAgIGl0IG9uIGRlc3RydWN0aW9u
LgorCisgICAgICAgIEluc3RlYWQsIHdlJ2xsIG5lZWQgdG8gdmlzaXQgQ2FjaGVhYmxlSWRlbnRp
ZmllcnMgZHVyaW5nIEdDIHNjYW5zIHRvIGtlZXAgdGhlCisgICAgICAgIEpTQ2VsbCBpbiBpdCBh
bGl2ZSwgYW5kIHRoYXQgSlNDZWxsIHdpbGwsIGluIHR1cm4sIGtlZXAgdGhlIHVuZGVybHlpbmcK
KyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwgYWxpdmUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
bHNvIGRvZXMgdGhlIGZvbGxvd2luZzoKKworICAgICAgICAxLiBBZGQgYSB2aXNpdENoaWxkcmVu
KCkgbWV0aG9kIHRvIFN0cnVjdHVyZVN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2VzcywgYW5kCisg
ICAgICAgICAgIEFjY2Vzc0Nhc2UgdG8gdmlzaXQgdGhlIENhY2hlYWJsZUlkZW50aWZpZXIncyBK
U0NlbGwgaWRlbnRpZmllci4gIFRoaXMKKyAgICAgICAgICAgdmlzaXRDaGlsZHJlbigpIGlzIGNh
bGxlZCBmcm9tIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoKS4KKwor
ICAgICAgICAgICBXaGVuIHdlIHdyaXRlIGJhcnJpZXIgYSBDb2RlQmxvY2ssIGl0IGd1YXJhbnRl
ZXMgdGhhdCBpdHMgdmlzaXRDaGlsZHJlbigpCisgICAgICAgICAgIG1ldGhvZHMgaXMgY2FsbGVk
LiAgSG93ZXZlciwgaXQgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgaXRzIHByb3BhZ2F0ZVRyYW5z
aXRpb25zKCkKKyAgICAgICAgICAgbWV0aG9kIHdpbGwgYmUgY2FsbGVkLiAgU2luY2UgdGhlIENh
Y2hlYWJsZUlkZW50aWZpZXIncyByZWZlcmVuY2UgdG8gYSBjZWxsCisgICAgICAgICAgIHNob3Vs
ZCBiZSBhIHN0cm9uZyByZWZlcmVuY2UsIHZpc2l0aW5nIGl0IHZpYSBhIFN0cnVjdHVyZVN0dWJJ
bmZvOjp2aXNpdENoaWxkcmVuKCkKKyAgICAgICAgICAgbWV0aG9kIGlzIHRoZSByaWdodCB0aGlu
ZyB0byBkby4KKyAgICAgICAgICAgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDU1NDQjYzcgZm9yIGFuIGV4YW1wbGUgb2Ygd2h5CisgICAgICAgICAgIHByb3Bh
Z2F0ZVRyYW5zaXRpb25zKCkgZG9lc24ndCBhbHdheXMgZG8gdGhlIGpvYi4KKworICAgICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcygpIGlzIGFsc28gaW5hcHBy
b3ByaWF0ZSBmb3IgdGhpcworICAgICAgICAgICBiZWNhdXNlIGl0IGlzIG9ubHkgY2FsbGVkIGFm
dGVyIGFsbCBtYXJraW5nIGlzIGRvbmUuICBJdCBpcyBhbHNvIG5vdCBtZWFudAorICAgICAgICAg
ICB0byBrZWVwIGNlbGxzIGFsaXZlIGJ1dCBtZXJlbHkgZm9yIGNsZWFyaW5nIHdlYWsgcmVmZXJl
bmNlcyB0byBkZWFkIGNlbGxzLgorCisgICAgICAgIDIuIEFsc28gYWRkIHZpc2l0Q2hpbGRyZW4o
KSB0byBNb2R1bGVOYW1lc3BhY2VEYXRhLgorCisgICAgICAgIDMuIFJlbW92ZSBwcmV2aW91c2x5
IGFwcGxpZWQga2VlcCBhbGl2ZSB0YWN0aWNzIHRvIHdvcmsgYXJvdW5kIEJveDxJZGVudGlmaWVy
PgorICAgICAgICAgICBkZXN0cnVjdGlvbi4gIFRoaXMgYWxzbyByZXRvcmVzIHRoZSBhbGxvd2Fu
Y2UgdG8gZGVzdHJ1Y3QgREZHOjpQbGFucyBvbiBhCisgICAgICAgICAgIGNvbXBpbGVyIHRocmVh
ZC4KKworICAgICAgICA0LiBBZGRlZCBhIEpTU3RyaW5nOmdldFZhbHVlSW1wbCgpIGhlbHBlci4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OkFj
Y2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpjb21taXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjYW5SZXBsYWNl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChKU0M6OkFjY2Vzc0Nhc2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVy
YXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oOgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjp1aWQgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppZGVu
dGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAg
ICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRW
YXJpYW50OjpHZXRCeUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0IGNvbnN0KToK
KyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oOgorICAgICAgICAoSlNDOjpHZXRC
eUlkVmFyaWFudDo6aWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJp
YW50OjpvdmVybGFwcyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgorICAg
ICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkdldEJ5
U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayk6CisgICAg
ICAgIChKU0M6OkdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcCk6CisgICAgICAgIChKU0M6OkdldEJ5
U3RhdHVzOjpzaW5nbGVJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9HZXRC
eVN0YXR1cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToK
KyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpJbnN0YW5j
ZU9mQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkFjY2Vzc0Nhc2UpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpT
Qzo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKiBieXRlY29k
ZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUvTW9kdWxl
TmFtZXNwYWNlQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6Ok1vZHVsZU5hbWVzcGFjZUFj
Y2Vzc0Nhc2U6Ok1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpNb2R1
bGVOYW1lc3BhY2VBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL01vZHVs
ZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHJv
eHlhYmxlQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OlByb3h5YWJsZUFjY2Vzc0Nhc2U6
OlByb3h5YWJsZUFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpQcm94eWFibGVBY2Nlc3NDYXNl
OjpjcmVhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuaDoKKyAg
ICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJ
bmZvOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6Z2V0QnlJZFNlbGZJZGVudGlm
aWVyKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZElk
ZW50aWZpZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSWRlbnRpZmllcnM6OmVu
c3VyZSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjphdCBjb25zdCk6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlBZGQpOgorICAg
ICAgICAoSlNDOjpERkc6OkRlc2lyZWRJZGVudGlmaWVyczo6cHJvY2Vzc0NvZGVCbG9ja0lkZW50
aWZpZXJzSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkSWRlbnRp
ZmllcnMuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6flBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNhbmNlbCk6CisgICAgICAg
ICogZGZnL0RGR1BsYW4uaDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjprZWVwQWxpdmVJZGVu
dGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OldvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0pOgorICAgICAg
ICAoSlNDOjpERkc6OldvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMpOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0OjpyZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKToKKyAgICAgICAgKEpT
Qzo6REZHOjpXb3JrbGlzdDo6ZGVsZXRlQ2FuY2VsbGVkUGxhbnNGb3JWTSk6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVH
ZXRCeSk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hHZXRCeSk6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlSW5zdGFuY2VPZik6Cisg
ICAgICAgICogaml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6ZHVt
cCBjb25zdCk6CisgICAgICAgICogcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjpDYWNoZWFibGVJZGVudGlmaWVy
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6aXNVaWQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjppc0NlbGwgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjppc1N5bWJvbCBjb25zdCk6CisgICAgICAgIChKU0M6
OkNhY2hlYWJsZUlkZW50aWZpZXI6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAqIHJ1
bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkNhY2hlYWJsZUlkZW50aWZpZXI6OkNhY2hlYWJsZUlkZW50aWZpZXIpOgorICAgICAgICAoSlND
OjpDYWNoZWFibGVJZGVudGlmaWVyOjpjZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVh
YmxlSWRlbnRpZmllcjo6dWlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRp
Zmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJs
ZUlkZW50aWZpZXI6OmlzU3ltYm9sQ2VsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJs
ZUlkZW50aWZpZXI6OmlzU3RyaW5nQ2VsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJs
ZUlkZW50aWZpZXI6OnNldENlbGxCaXRzKToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRp
Zmllcjo6c2V0VWlkQml0cyk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjpvcGVyYXRv
cj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6b3BlcmF0b3Ih
PSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAg
ICAgKEpTQzo6ZnVuY3Rpb25DYWxsQmFzZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5o
OgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0VmFsdWVJbXBsIGNvbnN0KToKKyAgICAgICAg
KiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmVuc3VyZVdhdGNocG9pbnRTZXRG
b3JJbXB1cmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlZNOjphZGRJbXB1cmVQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OlZNOjpyZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eSk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE5LTEyLTIwICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEpTU3RyaW5nIHZhbHVlcyBm
cm9tIGxpdGVyYWxzIGluIGEgc2luZ2xlIGNvbnNpc3RlbnQgc3R5bGUKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzg0LDYgKzc4NCw4
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBydW50aW1l
L0J5dGVjb2RlQ2FjaGVFcnJvci5oCiAgICAgcnVudGltZS9DYWNoZVBheWxvYWQuaAogICAgIHJ1
bnRpbWUvQ2FjaGVVcGRhdGUuaAorICAgIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCisg
ICAgcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCiAgICAgcnVudGltZS9DYWNo
ZWRCeXRlY29kZS5oCiAgICAgcnVudGltZS9DYWNoZWRUeXBlcy5oCiAgICAgcnVudGltZS9DYWdl
ZEJhcnJpZXJQdHIuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24g
MjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC03MjcsNiArNzI3LDcgQEAgcnVudGltZS9CeXRlY29kZUNhY2hlRXJyb3IuY3BwCiBy
dW50aW1lL0NhbGxEYXRhLmNwcAogcnVudGltZS9DYWNoZVBheWxvYWQuY3BwCiBydW50aW1lL0Nh
Y2hlVXBkYXRlLmNwcAorcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmNwcAogcnVudGltZS9D
YWNoZWRCeXRlY29kZS5jcHAKIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCiBydW50aW1lL0NhdGNo
U2NvcGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUz
ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE5MTIsNiArMTkxMiw4IEBACiAJCUZF
NzQ5N0U2MjA5MDAxQjEwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNzQ5N0U1MjA5MDAxQjAwMDAzNTY1QiAvKiBK
U0NQdHJUYWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRTdDNDE5NjFCOTdGQzRCMDBGNEQ1OTggLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRURB
NTBENDFCOTdGNDQyMDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAgKi87
IH07CiAJCUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5NjFENzc1QjI3MDA4
NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZFOERFNTRCMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RThERTU0QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oICovOyB9Owor
CQlGRThERTU0RDIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOERFNTRD
MjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oICovOyB9Owog
CQlGRTk5QjI0OTFDMjRDM0QzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTk5QjI0ODFDMjRCNkQzMDBD
ODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggKi87IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2
RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgy
QjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBE
ZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNTE1NCw2ICs1MTU2LDkgQEAKIAkJRkU4MEMxOTYxRDc3NUIyNzAwODUx
MEMwIC8qIENhdGNoU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2F0
Y2hTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTgwQzE5ODFENzc1RkI0
MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDYXRjaFNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU4
MEMxOUExRDc3NjhGRDAwODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOERFNTRBMjNBQzFEQUQwMDVDOTE0
MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXJJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOERFNTRFMjNBQzNBOEUwMDVD
OTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hl
YWJsZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTkwQkIz
QTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZNSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk4
QjVCNjFCQjlBRTExMDA3M0U3QTYgLyogSklUU3ViR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02OTkwLDYgKzY5OTUsOSBAQAogCQkJ
CTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCiAJCQkJ
MTQzNTk1MjAyMkE1MjFDQTAwRTgwODZEIC8qIEJ5dGVjb2RlQ2FjaGVFcnJvci5jcHAgKi8sCiAJ
CQkJMTQzNTk1MUYyMkE1MjFDQTAwRTgwODZEIC8qIEJ5dGVjb2RlQ2FjaGVFcnJvci5oICovLAor
CQkJCUZFOERFNTRFMjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAq
LywKKwkJCQlGRThERTU0QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5o
ICovLAorCQkJCUZFOERFNTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oICovLAogCQkJCTE0OEIxNDE5MjI1REQxRTkwMEQ2RTk5OCAvKiBDYWNoZWRCeXRl
Y29kZS5jcHAgKi8sCiAJCQkJMTQ0Q0EzNEYyMjFGMDM3OTAwODE3Nzg5IC8qIENhY2hlZEJ5dGVj
b2RlLmggKi8sCiAJCQkJMTREQUZBNDUyMUUzQjg3MTAwNEI2OEY3IC8qIENhY2hlZFR5cGVzLmNw
cCAqLywKQEAgLTg4MzYsNiArODg0NCw3IEBACiAJCQkJMEY1Q0Y5ODQxRTlENTM3NzAwQzE4Njky
IC8qIEFpckxvd2VyU3RhY2tBcmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQwRTRBNzFDNDk3
Rjc0MDBBNTc3RkEgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQwRTRBODFD
NDk3Rjc0MDBBNTc3RkEgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRThERTU0QjIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0MEU0QTkxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZVV0aWxz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIzODc5MDFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0
aW1pemVCbG9ja09yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlDQUJDOTFEQjU0QTdBMDAw
OEU4M0IgLyogQWlyUGFkSW50ZXJmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjI3LDYg
KzEwMjM2LDcgQEAKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29y
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50
cnlTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QUUyQzQxREY0RjI4MDAwNjZFRkUxIC8q
IFZNSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU4REU1NEQyM0FDMUU4NjAwNUM5MTQy
IC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTMw
MjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFQzU3OTczMjMxMDVCNTEwMEJDQTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZFNkY1NkRFMUU2NEVBRDYwMEQxNzgwMSAvKiBWTVRyYXBzLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lm
IEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogI2lu
Y2x1ZGUgIkRPTUpJVEdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5o
IgpAQCAtNTQsMTggKzU1LDE4IEBAIG5hbWVzcGFjZSBBY2Nlc3NDYXNlSW50ZXJuYWwgewogc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotQWNjZXNzQ2FzZTo6QWNj
ZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwg
c3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFp
bikKK0FjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlIHR5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWlu
PiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKICAgICA6IG1fdHlwZSh0eXBlKQogICAgICwgbV9vZmZz
ZXQob2Zmc2V0KQogICAgICwgbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbihXVEZNb3ZlKHByb3RvdHlw
ZUFjY2Vzc0NoYWluKSkKLSAgICAsIG1faWRlbnRpZmllcihCb3g8SWRlbnRpZmllcj46OmNyZWF0
ZShpZGVudGlmaWVyKSkKKyAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogewogICAgIG1f
c3RydWN0dXJlLnNldE1heUJlTnVsbCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAgICAgbV9jb25k
aXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb25kaXRpb25T
ZXQuaXNWYWxpZCgpKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nh
c2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3ND
aGFpbikKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlx
dWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKIHsKICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEluSGl0OgpAQCAtMTA0LDcgKzEwNSw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjoKIH0KIAogc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAorICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlw
ZUFjY2Vzc0NoYWluKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0cnVjdHVyZSA9PSBuZXdT
dHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7CkBAIC0xMjUsNyArMTI2LDcgQEAgQWNjZXNzQ2FzZTo6
fkFjY2Vzc0Nhc2UoKQogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2Fz
ZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
ICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgc3dpdGNoIChzdHViSW5mby5j
YWNoZVR5cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKQEAgLTEzNCwx
OCArMTM1LDIyIEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjoKIAog
ICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKCFpZGVu
dGlmaWVyLmlzQ2VsbCgpKTsKICAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwg
b3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBz
dHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAgY2Fz
ZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZv
Lmhhc0NvbnN0YW50SWRlbnRpZmllcik7CisgICAgICAgIEFTU0VSVCghaWRlbnRpZmllci5pc0Nl
bGwoKSk7CiAgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhp
dCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLnUuYnlJ
ZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6
QXJyYXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50
SWRlbnRpZmllcik7CisgICAgICAgIEFTU0VSVCghaWRlbnRpZmllci5pc0NlbGwoKSk7CiAgICAg
ICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBBY2Nlc3NDYXNlOjpBcnJh
eUxlbmd0aCwgaWRlbnRpZmllcik7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3Ro
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
OworICAgICAgICBBU1NFUlQoIWlkZW50aWZpZXIuaXNDZWxsKCkpOwogICAgICAgICByZXR1cm4g
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoLCBp
ZGVudGlmaWVyKTsKIAogICAgIGRlZmF1bHQ6CkBAIC0xODAsMTEgKzE4NSwxMSBAQCBWZWN0b3I8
V2F0Y2hwb2ludFNldCosIDI+IEFjY2Vzc0Nhc2U6OmNvCiAgICAgVmVjdG9yPFdhdGNocG9pbnRT
ZXQqLCAyPiByZXN1bHQ7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1
cmUoKTsKIAotICAgIGlmICghbV9pZGVudGlmaWVyLT5pc051bGwoKSkgeworICAgIGlmIChtX2lk
ZW50aWZpZXIpIHsKICAgICAgICAgaWYgKChzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCiAgICAgICAgICAgICB8fCBtX2NvbmRpdGlvblNldC5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgIHx8IChtX3BvbHlQcm90
b0FjY2Vzc0NoYWluICYmIG1fcG9seVByb3RvQWNjZXNzQ2hhaW4tPm5lZWRJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHZtLmVuc3VyZVdhdGNo
cG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eSgqbV9pZGVudGlmaWVyKSk7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHZtLmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShtX2lk
ZW50aWZpZXIudWlkKCkpKTsKICAgICB9CiAKICAgICBpZiAoYWRkaXRpb25hbFNldCgpKQpAQCAt
NTUwLDcgKzU1NSw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3MK
ICAgICAvLyBOb3RlIHRoYXQgaWYgQS0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSAmJiBCLT5n
dWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIHRoZW4KICAgICAvLyBBLT5jYW5SZXBsYWNlKEIpID09
IEItPmNhblJlcGxhY2UoQSkuCiAKLSAgICBpZiAoKm1faWRlbnRpZmllciAhPSAqb3RoZXIubV9p
ZGVudGlmaWVyKQorICAgIGlmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgc3dpdGNoICh0eXBlKCkpIHsKQEAgLTY0
OCw3ICs2NTMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgCiAK
ICAgICBvdXQucHJpbnQoY29tbWEsIG1fc3RhdGUpOwogCi0gICAgb3V0LnByaW50KGNvbW1hLCAi
aWRlbnQgPSAnIiwgKm1faWRlbnRpZmllciwgIiciKTsKKyAgICBvdXQucHJpbnQoY29tbWEsICJp
ZGVudCA9ICciLCBtX2lkZW50aWZpZXIsICInIik7CiAgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9v
ZmZzZXQpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJvZmZzZXQgPSAiLCBtX29mZnNldCk7
CiAKQEAgLTcxMCw2ICs3MTUsMTEgQEAgYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhTbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgQWNjZXNzQ2FzZTo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3sKKyAgICBtX2lkZW50aWZpZXIu
dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwogdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdp
dGhHdWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKQEAgLTcyOCw3ICs3MzgsNyBAQCB2b2lkIEFjY2Vz
c0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUu
c2NyYXRjaEdQUjsKIAogICAgIGlmIChyZXF1aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2goKSAmJiAh
c3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2lkZW50aWZpZXItPmlzTnVsbCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9pZGVu
dGlmaWVyKTsKICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQ
UjsKICAgICAgICAgLy8gbm9uLXJvcGUgc3RyaW5nIGNoZWNrIGRvbmUgaW5zaWRlIHBvbHltb3Jw
aGljIGFjY2Vzcy4KIApAQCAtMTY2Niw3ICsxNjc2LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgLy8gRklYTUU6IFJldmlzaXQgSlNHbG9i
YWxPYmplY3QuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAzMjA0CiAgICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0
dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlcikgewotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFtX2lkZW50aWZpZXItPmlzTnVsbCgpKTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX2lkZW50aWZpZXIpOwogICAgICAgICAgICAgICAgIGppdC5zZXR1
cEFyZ3VtZW50czxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oCiAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUZvckN1
c3RvbSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmgJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMCBAQAogCiAjaWYgRU5B
QkxFKEpJVCkKIAorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJK
U0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
LmgiCiAjaW5jbHVkZSAiUG9seVByb3RvQWNjZXNzQ2hhaW4uaCIKLSNpbmNsdWRlIDx3dGYvQm94
Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTE0MCwxNCArMTQwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlVHlwZT4obmV3IEFjY2Vzc0Nhc2VUeXBlKGFyZ3VtZW50cy4uLikpOwogICAg
IH0KIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zm
c2V0ID0gaW52YWxpZE9mZnNldCwKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50
aWZpZXIsIFByb3BlcnR5T2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKICAgICAgICAgU3RydWN0dXJl
KiA9IG51bGxwdHIsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0KCksIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFp
bj4gPSBudWxscHRyKTsKIAogICAgIC8vIFRoaXMgY3JlYXRlIG1ldGhvZCBzaG91bGQgYmUgdXNl
ZCBmb3IgdHJhbnNpdGlvbnMuCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlP
ZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKICAgICAKLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhWTSYs
IEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZnJvbVN0cnVjdHVyZVN0dWJJ
bmZvKFZNJiwgSlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1
YkluZm8mKTsKIAogICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQpAQCAtMjMzLDkg
KzIzMyw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBUeXBlZEFycmF5VHlwZSB0b1R5cGVkQXJy
YXlUeXBlKEFjY2Vzc1R5cGUpOwogCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faWRlbnRpZmllci0+aW1wbCgpOyB9Ci0gICAgQm94PElkZW50aWZpZXI+IGlk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLQorICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXIudWlkKCk7IH0KKyAg
ICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50
aWZpZXI7IH0KIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVu
Y3koU3RydWN0dXJlU3R1YkluZm8mKTsKQEAgLTI0NCw3ICsyNDMsNyBAQCBwdWJsaWM6CiAjZW5k
aWYKICAgICAKIHByb3RlY3RlZDoKLSAgICBBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUq
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4pOworICAgIEFjY2Vzc0Nhc2UoVk0mLCBKU0NlbGwqIG93bmVyLCBB
Y2Nlc3NUeXBlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJl
KiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8UG9s
eVByb3RvQWNjZXNzQ2hhaW4+KTsKICAgICBBY2Nlc3NDYXNlKEFjY2Vzc0Nhc2UmJikgPSBkZWZh
dWx0OwogICAgIEFjY2Vzc0Nhc2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpCiAgICAgICAgIDog
bV90eXBlKG90aGVyLm1fdHlwZSkKQEAgLTI2OSw2ICsyNjgsNyBAQCBwcml2YXRlOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChj
b25zdCBGdW5jdG9yJikgY29uc3Q7CiAKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKSBjb25zdDsKICAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogICAgIGJvb2wgcHJv
cGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKIApAQCAtMzExLDcgKzMxMSw3
IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
IG1fcG9seVByb3RvQWNjZXNzQ2hhaW47CiAKLSAgICBCb3g8SWRlbnRpZmllcj4gbV9pZGVudGlm
aWVyOyAvLyBXZSB1c2UgdGhpcyBpbmRpcmVjdGlvbiBzbyB0aGUgY29uY3VycmVudCBjb21waWxl
ciBjYW4gY29uY3VycmVudGx5IHJlZiB0aGlzIEJveC4KKyAgICBDYWNoZWFibGVJZGVudGlmaWVy
IG1faWRlbnRpZmllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI1MzgxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDkwLDggKzEwOTAsNiBAQCBzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNp
dGlvbihWTSYgdm0sCiAKIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBVTlVT
RURfUEFSQU0odmlzaXRvcik7Ci0KICAgICBWTSYgdm0gPSAqbV92bTsKIAogICAgIGlmIChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykgewpAQCAtMTY0Miw2ICsxNjQwLDgg
QEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogICAgIGlmIChhdXRv
KiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQnlWYWxJbmZvKiBi
eVZhbEluZm8gOiBqaXREYXRhLT5tX2J5VmFsSW5mb3MpCiAgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZChieVZhbEluZm8tPmNhY2hlZFN5bWJvbCk7CisgICAgICAgIGZvciAoU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpCisgICAgICAgICAgICBzdHVi
SW5mby0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKICAgICB9CiAjZW5kaWYKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCShy
ZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkdldEJ5SWRWYXJpYW50LmgiCiAKKyNpbmNsdWRlICJDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgpAQCAtMzMs
NyArMzQsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFy
aWFudCgKLSAgICBCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllciwKKyAgICBDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIsCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
Y2FsbExpbmtTdGF0dXMsCkBAIC0xMTAsNyArMTExLDcgQEAgYm9vbCBHZXRCeUlkVmFyaWFudDo6
YXR0ZW1wdFRvTWVyZ2UoY29ucwogICAgIGlmICghIW1faWRlbnRpZmllciAhPSAhIW90aGVyLm1f
aWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1faWRlbnRpZmll
ciAmJiAoKm1faWRlbnRpZmllciAhPSAqb3RoZXIubV9pZGVudGlmaWVyKSkKKyAgICBpZiAobV9p
ZGVudGlmaWVyICYmIChtX2lkZW50aWZpZXIgIT0gb3RoZXIubV9pZGVudGlmaWVyKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQpA
QCAtMTU4LDYgKzE1OSw3IEBAIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNv
bnMKIAogdm9pZCBHZXRCeUlkVmFyaWFudDo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiAgICAgbV9z
dHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CiAKQEAgLTE4Miw3ICsxODQsNyBA
QCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvCiB2b2lkIEdldEJ5SWRW
YXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAogewogICAgIG91dC5wcmludCgiPCIpOwotICAgIG91dC5wcmludCgiaWQ9JyIs
IG1faWRlbnRpZmllciA/IG1faWRlbnRpZmllci0+aW1wbCgpIDogU3RyaW5nSW1wbDo6ZW1wdHko
KSwgIicsICIpOworICAgIG91dC5wcmludCgiaWQ9JyIsIG1faWRlbnRpZmllciwgIicsICIpOwog
ICAgIGlmICghaXNTZXQoKSkgewogICAgICAgICBvdXQucHJpbnQoImVtcHR5PiIpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZh
cmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllci5oIgog
I2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgpAQCAtNDQsNyArNDUsNyBA
QCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgR2V0QnlJZFZhcmlhbnQoCi0gICAgICAgIEJveDxJZGVudGlmaWVyPiwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52
YWxpZE9mZnNldCwKICAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0g
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiA9IG51bGxwdHIsCkBAIC04MiwxNCArODMsMTQgQEAgcHVibGljOgogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAKLSAgICBCb3g8SWRlbnRpZmllcj4g
aWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIENhY2hlYWJs
ZUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQog
CiAgICAgYm9vbCBvdmVybGFwcyhjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiAgICAgewog
ICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhlci5tX2lkZW50aWZpZXIpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKG1faWRlbnRpZmllcikgewotICAgICAg
ICAgICAgaWYgKG1faWRlbnRpZmllci0+aW1wbCgpICE9IG90aGVyLm1faWRlbnRpZmllci0+aW1w
bCgpKQorICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZpZXIp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1Y3R1cmVTZXQoKSk7CkBAIC0xMDcs
NyArMTA4LDcgQEAgcHJpdmF0ZToKICAgICBKU0Z1bmN0aW9uKiBtX2ludHJpbnNpY0Z1bmN0aW9u
OwogICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gbV9jdXN0b21BY2Nlc3NvckdldHRl
cjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gbV9kb21BdHRy
aWJ1dGU7Ci0gICAgQm94PElkZW50aWZpZXI+IG1faWRlbnRpZmllcjsgLy8gV2UgdXNlIHRoaXMg
aW5kaXJlY3Rpb24gdG8gYWxsb3cgcmVmL2RlcmVmIGluIHRoZSBjb25jdXJyZW50IGNvbXBpbGVy
LgorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgi
CisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZS5oIgpAQCAtMTEzLDcgKzExNCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5
U3RhdHVzOjpjb21wdXRlRnJvbUxMSW4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1HZXRCeVN0
YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElD
U3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcgZGlk
RXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhLCBUcmFj
a0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMsIElkZW50aWZpZXJLZWVwQWxpdmUmIGtlZXBB
bGl2ZSkKK0dldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0
U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycykKIHsKICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAKQEAgLTEyMSw3
ICsxMjIsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlCiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0
RXhpdFNpdGVGZWVkYmFjaygKLSAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBtYXAuZ2V0
KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhLCB0
cmFja0lkZW50aWZpZXJzLCBrZWVwQWxpdmUpOworICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxv
Y2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm8sIGNhbGxFeGl0
U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMpOwogICAgIAogICAgIGlmIChkaWRFeGl0KQogICAg
ICAgICByZXR1cm4gcmVzdWx0LnNsb3dWZXJzaW9uKCk7CkBAIC0xMjksNyArMTMwLDYgQEAgR2V0
QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZQogICAgIFVOVVNFRF9QQVJBTSht
YXApOwogICAgIFVOVVNFRF9QQVJBTShkaWRFeGl0KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEV4
aXRTaXRlRGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtlZXBBbGl2ZSk7CiAjZW5kaWYKIAogICAg
IGlmICghcmVzdWx0KQpAQCAtMTY4LDcgKzE2OCw3IEBAIEdldEJ5U3RhdHVzOjpHZXRCeVN0YXR1
cyhjb25zdCBNb2R1bGVOYW0KIH0KIAogR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVG
b3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAotICAgIGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVE
YXRhLCBUcmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMsIElkZW50aWZpZXJLZWVwQWxp
dmUmIGtlZXBBbGl2ZSkKKyAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENhbGxM
aW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlmaWVy
cyB0cmFja0lkZW50aWZpZXJzKQogewogICAgIFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3Ry
dWN0dXJlU3R1YkluZm86OnN1bW1hcnkoc3R1YkluZm8pOwogICAgIGlmICghaXNJbmxpbmVhYmxl
KHN1bW1hcnkpKQpAQCAtMTg2LDkgKzE4Niw4IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpj
b21wdXRlRm9yU3R1YkkKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+
dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwogICAgICAgICBpZiAoc3RydWN0
dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAg
cmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7
Ci0gICAgICAgIEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyID0gc3R1YkluZm8tPmdldEJ5SWRT
ZWxmSWRlbnRpZmllcigpOwotICAgICAgICBrZWVwQWxpdmUoaWRlbnRpZmllcik7Ci0gICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLT5pbXBsKCk7CisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5nZXRCeUlkU2VsZklkZW50
aWZpZXIoKTsKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlk
KCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7CiAgICAgICAgIGlmICh0cmFja0lkZW50
aWZpZXJzID09IFRyYWNrSWRlbnRpZmllcnM6Ok5vKQogICAgICAgICAgICAgaWRlbnRpZmllciA9
IG51bGxwdHI7CkBAIC0yMTIsNyArMjExLDYgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSQogICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlz
dC0+YXQoMCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6TW9kdWxlTmFtZXNwYWNlTG9hZDoKLSAgICAgICAgICAgICAg
ICBrZWVwQWxpdmUoYWNjZXNzLmlkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEdldEJ5U3RhdHVzKGFjY2Vzcy5hczxNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlPigpKTsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTYsMTIgKzI5
NCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAg
ICAgICAgICB9IH0KIAogICAgICAgICAgICAgICAgIEFTU0VSVCgoQWNjZXNzQ2FzZTo6TWlzcyA9
PSBhY2Nlc3MudHlwZSgpIHx8IGFjY2Vzcy5pc0N1c3RvbSgpKSA9PSAoYWNjZXNzLm9mZnNldCgp
ID09IGludmFsaWRPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBCb3g8SWRlbnRpZmllcj4gaWRl
bnRpZmllcjsKLSAgICAgICAgICAgICAgICBpZiAodHJhY2tJZGVudGlmaWVycyA9PSBUcmFja0lk
ZW50aWZpZXJzOjpZZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGFjY2Vz
cy5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGtlZXBBbGl2ZShpZGVudGlmaWVy
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFy
aWFudChpZGVudGlmaWVyLCBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0YXR1
cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50KHRyYWNr
SWRlbnRpZmllcnMgPT0gVHJhY2tJZGVudGlmaWVyczo6WWVzID8gYWNjZXNzLmlkZW50aWZpZXIo
KSA6IG51bGxwdHIsIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9m
ZnNldCgpLAogICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNl
dCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSwKICAgICAgICAgICAgICAgICAgICAgaW50cmlu
c2ljRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0dGVyLApA
QCAtMzM2LDcgKzMyOSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1
YkkKIAogR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsCi0gICAgSUNTdGF0dXND
b250ZXh0U3RhY2smIGljQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFRyYWNr
SWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycywgSWRlbnRpZmllcktlZXBBbGl2ZSYga2VlcEFs
aXZlKQorICAgIElDU3RhdHVzQ29udGV4dFN0YWNrJiBpY0NvbnRleHRTdGFjaywgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBUcmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMpCiB7CiAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CiAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJ
bmRleCk7CkBAIC0zNTEsNyArMzQ0LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1
dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gaW5saW5lZCBhbmQgbm90LWlubGluZWQuCiAgICAg
ICAgICAgICAgICAgR2V0QnlTdGF0dXMgYmFzZWxpbmVSZXN1bHQgPSBjb21wdXRlRm9yKAogICAg
ICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBiYXNlbGluZU1hcCwgYnl0ZWNvZGVJbmRl
eCwgZGlkRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRlRGF0YSwgdHJhY2tJ
ZGVudGlmaWVycywga2VlcEFsaXZlKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbEV4aXRTaXRl
RGF0YSwgdHJhY2tJZGVudGlmaWVycyk7CiAgICAgICAgICAgICAgICAgYmFzZWxpbmVSZXN1bHQu
bWVyZ2UocmVzdWx0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVSZXN1bHQ7CiAg
ICAgICAgICAgICB9CkBAIC0zNjUsNyArMzU4LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb250ZXh0LT5vcHRpbWl6ZWRDb2RlQmxvY2stPm1fbG9jayk7CiAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVl
ZGJhY2soCi0gICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0aW1pemVkQ29k
ZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmll
cnMsIGtlZXBBbGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGxvY2tlciwgY29udGV4dC0+b3B0
aW1pemVkQ29kZUJsb2NrLCBzdGF0dXMuc3R1YkluZm8sIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNr
SWRlbnRpZmllcnMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1Nl
dCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBibGVzcyhyZXN1bHQpOwpAQCAtMzc1LDcgKzM2
OCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAg
cmV0dXJuIGJsZXNzKCpzdGF0dXMuZ2V0U3RhdHVzKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJu
IGNvbXB1dGVGb3IocHJvZmlsZWRCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRp
ZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMsIGtlZXBBbGl2ZSk7Cisg
ICAgcmV0dXJuIGNvbXB1dGVGb3IocHJvZmlsZWRCbG9jaywgYmFzZWxpbmVNYXAsIGJ5dGVjb2Rl
SW5kZXgsIGRpZEV4aXQsIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMpOwogfQog
CiBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihjb25zdCBTdHJ1Y3R1cmVTZXQm
IHNldCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTUxNiw2ICs1MDksOCBAQCB2b2lkIEdl
dEJ5U3RhdHVzOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlCiAKIHZvaWQgR2V0QnlTdGF0dXM6Om1h
cmtJZkNoZWFwKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIGlmIChpc01vZHVsZU5hbWVz
cGFjZSgpKQorICAgICAgICBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1faWRlbnRpZmllci52aXNp
dENoaWxkcmVuKHZpc2l0b3IpOwogICAgIGZvciAoR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBt
X3ZhcmlhbnRzKQogICAgICAgICB2YXJpYW50Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogfQpAQCAt
NTM1LDI4ICs1MzAsMjIgQEAgYm9vbCBHZXRCeVN0YXR1czo6ZmluYWxpemUoVk0mIHZtKQogICAg
IHJldHVybiB0cnVlOwogfQogCi1Cb3g8SWRlbnRpZmllcj4gR2V0QnlTdGF0dXM6OnNpbmdsZUlk
ZW50aWZpZXIoKSBjb25zdAorQ2FjaGVhYmxlSWRlbnRpZmllciBHZXRCeVN0YXR1czo6c2luZ2xl
SWRlbnRpZmllcigpIGNvbnN0CiB7Ci0gICAgaWYgKGlzTW9kdWxlTmFtZXNwYWNlKCkpIHsKLSAg
ICAgICAgQm94PElkZW50aWZpZXI+IHJlc3VsdCA9IG1fbW9kdWxlTmFtZXNwYWNlRGF0YS0+bV9p
ZGVudGlmaWVyOwotICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQor
ICAgIGlmIChpc01vZHVsZU5hbWVzcGFjZSgpKQorICAgICAgICByZXR1cm4gbV9tb2R1bGVOYW1l
c3BhY2VEYXRhLT5tX2lkZW50aWZpZXI7CiAKICAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgQm94PElkZW50aWZpZXI+IHJlc3VsdCA9
IG1fdmFyaWFudHMuZmlyc3QoKS5pZGVudGlmaWVyKCk7CisgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciByZXN1bHQgPSBtX3ZhcmlhbnRzLmZpcnN0KCkuaWRlbnRpZmllcigpOwogICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAocmVzdWx0LT5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBtX3Zh
cmlhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEJveDxJZGVudGlmaWVyPiB1aWQgPSBtX3Zh
cmlhbnRzW2ldLmlkZW50aWZpZXIoKTsKLSAgICAgICAgaWYgKCF1aWQpCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IG1fdmFyaWFudHNbaV0uaWRlbnRpZmllcigpOwor
ICAgICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgaWYgKCp1aWQgIT0gKnJlc3VsdCkKKyAgICAgICAgaWYgKGlkZW50aWZpZXIgIT0gcmVz
dWx0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiByZXN1
bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMu
aAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiQ2FsbExp
bmtTdGF0dXMuaCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVu
dEpTTG9jay5oIgpAQCAtOTEsMTMgKzkyLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAg
ICAvLyBJZiB3ZSB1c2UgYSBCb3g8SWRlbnRpZmllcj4gaW4gdGhlIGNvbXBpbGVyIHRocmVhZCwg
d2UgbmVlZCB0byBrZWVwIHRoZQotICAgIC8vIElkZW50aWZpZXIgYWxpdmUgYW5kIG9ubHkgZGVy
ZWYgaXQgaW4gdGhlIG11dGF0b3IgdGhyZWFkIGxhdGVyLiBUaGlzCi0gICAgLy8gZW5zdXJlcyB0
aGF0IHRoZSBjb21waWxlciB0aHJlYWQgZG9lc24ndCByYWNlIGFnYWluc3QgdGhlIG11dGF0b3Ig
aW4KLSAgICAvLyBhZGp1c3RpbmcgdGhlIElkZW50aWZpZXIncyByZWZDb3VudC4KLSAgICB1c2lu
ZyBJZGVudGlmaWVyS2VlcEFsaXZlID0gc3RkOjpmdW5jdGlvbjx2b2lkKEJveDxJZGVudGlmaWVy
Pik+OwotCi0gICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNl
bGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNr
JiBkZmdDb250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFRyYWNrSWRlbnRpZmllcnMsIElkZW50aWZp
ZXJLZWVwQWxpdmUmKTsKKyAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxv
Y2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250
ZXh0U3RhY2smIGRmZ0NvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVHJhY2tJZGVudGlmaWVycyk7
CiAgICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0Jiwg
VW5pcXVlZFN0cmluZ0ltcGwqKTsKIAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQpAQCAtMTM1LDcgKzEzMCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwogCi0gICAgQm94PElkZW50aWZpZXI+IHNpbmdsZUlkZW50aWZp
ZXIoKSBjb25zdDsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHNpbmdsZUlkZW50aWZpZXIoKSBj
b25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBtZXJnZShjb25zdCBHZXRCeVN0YXR1cyYp
OwpAQCAtMTQzLDE2ICsxMzgsMTYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSklUKQogICAgIEdl
dEJ5U3RhdHVzKGNvbnN0IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UmKTsKICAgICBzdGF0aWMg
R2V0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCi0g
ICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhLCBUcmFj
a0lkZW50aWZpZXJzLCBJZGVudGlmaWVyS2VlcEFsaXZlJik7CisgICAgICAgIGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhLCBUcmFja0lkZW50aWZpZXJzKTsKICNl
bmRpZgogICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayos
IEJ5dGVjb2RlSW5kZXgsIFRyYWNrSWRlbnRpZmllcnMpOwotICAgIHN0YXRpYyBHZXRCeVN0YXR1
cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgRXhp
dEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMsIElk
ZW50aWZpZXJLZWVwQWxpdmUmKTsKKyAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihD
b2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxsTGlu
a1N0YXR1czo6RXhpdFNpdGVEYXRhLCBUcmFja0lkZW50aWZpZXJzKTsKIAogICAgIHN0cnVjdCBN
b2R1bGVOYW1lc3BhY2VEYXRhIHsKICAgICAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1f
bW9kdWxlTmFtZXNwYWNlT2JqZWN0IHsgbnVsbHB0ciB9OwogICAgICAgICBKU01vZHVsZUVudmly
b25tZW50KiBtX21vZHVsZUVudmlyb25tZW50IHsgbnVsbHB0ciB9OwogICAgICAgICBTY29wZU9m
ZnNldCBtX3Njb3BlT2Zmc2V0IHsgfTsKLSAgICAgICAgQm94PElkZW50aWZpZXI+IG1faWRlbnRp
ZmllcjsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgfTsK
IAogICAgIFZlY3RvcjxHZXRCeUlkVmFyaWFudCwgMT4gbV92YXJpYW50czsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTUgKzQyLDE0IEBAIG5hbWVzcGFjZSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlSW50ZXJuYWwKIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLUdldHRlclNldHRlckFj
Y2Vzc0Nhc2U6OkdldHRlclNldHRlckFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRT
ZXQqIGFkZGl0aW9uYWxTZXQsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwgc3RkOjp1bmlxdWVf
cHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKK0dldHRlclNl
dHRlckFjY2Vzc0Nhc2U6OkdldHRlclNldHRlckFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwgV2F0
Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBzdGQ6
OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQog
ICAgIDogQmFzZSh2bSwgb3duZXIsIGFjY2Vzc1R5cGUsIGlkZW50aWZpZXIsIG9mZnNldCwgc3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBhZGRpdGlvbmFsU2V0LCBXVEZNb3ZlKHBy
b3RvdHlwZUFjY2Vzc0NoYWluKSkKIHsKICAgICBtX2N1c3RvbVNsb3RCYXNlLnNldE1heUJlTnVs
bCh2bSwgb3duZXIsIGN1c3RvbVNsb3RCYXNlKTsKIH0KIAotCiBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAorICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgYm9vbCB2aWFQcm94eSwg
V2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PiBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwKICAgICBPcHRpb25hbDxE
T01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiB7CkBAIC02OSw3ICs2OCw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXIKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LAorc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlw
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4g
cHJvdG90eXBlQWNjZXNzQ2hhaW4sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9t
U2V0dGVyLAogICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nh
c2UuaAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDExICs1NCwx
MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25T
dGF0ZSYsIGNvbnN0IERPTUpJVDo6R2V0dGVyU2V0dGVyKiwgR1BSUmVnIGJhc2VGb3JHZXRHUFIp
OwogCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoCi0gICAg
ICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgY29uc3QgSWRlbnRpZmllciYsIFBy
b3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFj
Y2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUq
LAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wgdmlhUHJv
eHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4gY3VzdG9tR2V0dGVyLAogICAgICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UsIE9w
dGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+KTsKIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
Y3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0
dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsCiAgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0Fj
Y2Vzc0NoYWluPiwKICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21T
ZXR0ZXIgPSBudWxscHRyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKIApA
QCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3I7IH0KIAog
cHJpdmF0ZToKLSAgICBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiwgQWNjZXNz
VHlwZSwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRT
ZXQqIGFkZGl0aW9uYWxTZXQsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwgc3RkOjp1bmlxdWVf
cHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPik7CisgICAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZShW
TSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5T2Zm
c2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wg
dmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIEpTT2JqZWN0KiBjdXN0b21T
bG90QmFzZSwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPik7CiAKICAgICBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKGNvbnN0IEdldHRlclNldHRlckFjY2Vzc0Nhc2UmKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZBY2Nlc3NDYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFu
Y2VPZkFjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5
LDcgKzU5LDcgQEAgSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6On5JbnN0YW5jZU9mQWNjZXNzQwogSW5z
dGFuY2VPZkFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZBY2Nlc3NDYXNlKAogICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
ICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBKU09i
amVjdCogcHJvdG90eXBlKQotICAgIDogQmFzZSh2bSwgb3duZXIsIGFjY2Vzc1R5cGUsIElkZW50
aWZpZXIoKSwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG51bGxwdHIp
CisgICAgOiBCYXNlKHZtLCBvd25lciwgYWNjZXNzVHlwZSwgbnVsbHB0ciwgaW52YWxpZE9mZnNl
dCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG51bGxwdHIpCiAgICAgLCBtX3Byb3RvdHlwZSh2
bSwgb3duZXIsIHByb3RvdHlwZSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxMyArMzIsMTMgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLUludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OkludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBKU0Z1bmN0
aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0No
YWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKK0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6Oklu
dHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQs
IEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQogICAgIDogQmFzZSh2bSwgb3duZXIs
IEludHJpbnNpY0dldHRlciwgaWRlbnRpZmllciwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpCiB7CiAgICAgbV9pbnRyaW5zaWNG
dW5jdGlvbi5zZXQodm0sIG93bmVyLCBpbnRyaW5zaWNGdW5jdGlvbik7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlv
biwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3ND
aGFpbikKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3ND
YXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBDYWNoZWFibGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIEpTRnVuY3Rpb24q
IGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
IHByb3RvdHlwZUFjY2Vzc0NoYWluKQogewogICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4obmV3IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCBpZGVudGlm
aWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBpbnRyaW5zaWNGdW5jdGlvbiwg
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nh
c2UuaAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxNCArNDIsMTQg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoSlNGdW5j
dGlvbiosIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZW1pdEludHJpbnNpY0dldHRlcihBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmKTsKIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0
LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIEpTRnVuY3Rp
b24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hh
aW4+KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYs
IEpTQ2VsbCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUq
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIEpTRnVuY3Rpb24qIGludHJpbnNp
Y0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgfkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UoKTsKIAogcHJpdmF0ZToKLSAgICBJbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3Bl
cnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYs
IEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+KTsKKyAgICBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKFZNJiwgSlNDZWxs
KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rp
b24sIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4pOwogCiAgICAgV3JpdGVC
YXJyaWVyPEpTRnVuY3Rpb24+IG1faW50cmluc2ljRnVuY3Rpb247CiB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVOYW1lc3Bh
Y2VBY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL01vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtp
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzcsNyArMzgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotTW9kdWxlTmFtZXNwYWNlQWNj
ZXNzQ2FzZTo6TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBt
b2R1bGVOYW1lc3BhY2VPYmplY3QsIEpTTW9kdWxlRW52aXJvbm1lbnQqIG1vZHVsZUVudmlyb25t
ZW50LCBTY29wZU9mZnNldCBzY29wZU9mZnNldCkKK01vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6
Ok1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVO
YW1lc3BhY2VPYmplY3QsIEpTTW9kdWxlRW52aXJvbm1lbnQqIG1vZHVsZUVudmlyb25tZW50LCBT
Y29wZU9mZnNldCBzY29wZU9mZnNldCkKICAgICA6IEJhc2Uodm0sIG93bmVyLCBNb2R1bGVOYW1l
c3BhY2VMb2FkLCBpZGVudGlmaWVyLCBpbnZhbGlkT2Zmc2V0LCBudWxscHRyLCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCgpLCBudWxscHRyKQogICAgICwgbV9zY29wZU9mZnNldChzY29wZU9m
ZnNldCkKIHsKQEAgLTQ1LDcgKzQ2LDcgQEAgTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6TW9k
dWxlTmFtZXNwYQogICAgIG1fbW9kdWxlRW52aXJvbm1lbnQuc2V0KHZtLCBvd25lciwgbW9kdWxl
RW52aXJvbm1lbnQpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gTW9kdWxlTmFt
ZXNwYWNlQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllciwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVz
cGFjZU9iamVjdCwgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQsIFNjb3Bl
T2Zmc2V0IHNjb3BlT2Zmc2V0KQorc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IE1vZHVsZU5h
bWVzcGFjZUFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIENhY2hlYWJs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5h
bWVzcGFjZU9iamVjdCwgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQsIFNj
b3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KQogewogICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4obmV3IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2Uodm0sIG93bmVyLCBpZGVudGlm
aWVyLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIG1vZHVsZUVudmlyb25tZW50LCBzY29wZU9mZnNl
dCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZU5hbWVz
cGFjZUFjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
NyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZp
cm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUVudmly
b25tZW50LmdldCgpOyB9CiAgICAgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX3Njb3BlT2Zmc2V0OyB9CiAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBKU01v
ZHVsZU5hbWVzcGFjZU9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqLCBTY29wZU9mZnNldCk7
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0Nl
bGwqIG93bmVyLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCos
IEpTTW9kdWxlRW52aXJvbm1lbnQqLCBTY29wZU9mZnNldCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNTIsNyArNTMsNyBA
QCBwdWJsaWM6CiAgICAgfk1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UoKTsKIAogcHJpdmF0ZToK
LSAgICBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiBvd25lciwgY29uc3Qg
SWRlbnRpZmllciYsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiwgSlNNb2R1bGVFbnZpcm9ubWVu
dCosIFNjb3BlT2Zmc2V0KTsKKyAgICBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlKFZNJiwgSlND
ZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qq
LCBKU01vZHVsZUVudmlyb25tZW50KiwgU2NvcGVPZmZzZXQpOwogCiAgICAgV3JpdGVCYXJyaWVy
PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKICAgICBX
cml0ZUJhcnJpZXI8SlNNb2R1bGVFbnZpcm9ubWVudD4gbV9tb2R1bGVFbnZpcm9ubWVudDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKICNpbmNsdWRlICJGdWxsQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkhlYXAu
aCIKQEAgLTM1MSw2ICszNTIsMTIgQEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRl
VHJhbnNpdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQorICAgICAgICBhdChpKS52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOworfQorCiB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6WyIpOwpAQCAt
NDgwLDcgKzQ4Nyw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MK
ICAgICAgICAgJiYgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9m
KSB7CiAgICAgICAgIHdoaWxlICghY2FzZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9saXN0
LmFwcGVuZChjYXNlcy50YWtlTGFzdCgpKTsKLSAgICAgICAgY2FzZXMuYXBwZW5kKEFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mR2VuZXJpYywg
SWRlbnRpZmllcigpKSk7CisgICAgICAgIGNhc2VzLmFwcGVuZChBY2Nlc3NDYXNlOjpjcmVhdGUo
dm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMsIG51bGxwdHIpKTsK
ICAgICAgICAgZ2VuZXJhdGVkRmluYWxDb2RlID0gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShy
ZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSw2ICsxNDksOCBAQCBwdWJsaWM6
CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1f
bGlzdFtpXTsgfQogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIG9wZXJhdG9yW10odW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQogCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CisKICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgdGhlbiB3ZSBhcmUg
cmVxdWVzdGluZyBhIHJlc2V0IG9mIHRoZSBvd25pbmcgU3RydWN0dXJlU3R1YkluZm8uCiAgICAg
Ym9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAJKHJldmlz
aW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFibGVB
Y2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1Qcm94eWFibGVBY2Nlc3NDYXNlOjpQcm94eWFibGVBY2Nlc3NDYXNlKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLAor
UHJveHlhYmxlQWNjZXNzQ2FzZTo6UHJveHlhYmxlQWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgIGNv
bnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlhUHJv
eHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJv
dG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiAgICAgOiBCYXNlKHZtLCBvd25l
ciwgYWNjZXNzVHlwZSwgaWRlbnRpZmllciwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNl
dCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpCiAgICAgLCBtX2FkZGl0aW9uYWxTZXQo
YWRkaXRpb25hbFNldCkKQEAgLTM4LDcgKzM4LDcgQEAgUHJveHlhYmxlQWNjZXNzQ2FzZTo6UHJv
eHlhYmxlQWNjZXNzQ2FzZQogICAgIG1fdmlhUHJveHkgPSB2aWFQcm94eTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwg
V2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0Fj
Y2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBB
Y2Nlc3NUeXBlIHR5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCog
YWRkaXRpb25hbFNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90
b3R5cGVBY2Nlc3NDaGFpbikKIHsKICAgICBBU1NFUlQodHlwZSA9PSBMb2FkIHx8IHR5cGUgPT0g
TWlzcyB8fCB0eXBlID09IEdldEdldHRlcik7CiAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPihuZXcgUHJveHlhYmxlQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIGlkZW50
aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBhZGRpdGlv
bmFsU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5oCShy
ZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlh
YmxlQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogCiAg
ICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fYWRkaXRpb25hbFNldC5nZXQoKTsgfQogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlLCBjb25zdCBJZGVudGlm
aWVyJiwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBl
LCBDYWNoZWFibGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQo
KSwKICAgICAgICAgYm9vbCB2aWFQcm94eSA9IGZhbHNlLCBXYXRjaHBvaW50U2V0KiBhZGRpdGlv
bmFsU2V0ID0gbnVsbHB0ciwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiA9
IG51bGxwdHIpOwogCiAgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYsIENvbW1hUHJpbnRl
ciYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgflByb3h5
YWJsZUFjY2Vzc0Nhc2UoKTsKIAogcHJvdGVjdGVkOgotICAgIFByb3h5YWJsZUFjY2Vzc0Nhc2Uo
Vk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlPZmZz
ZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgYm9vbCB2
aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgc3RkOjp1bmlxdWVfcHRyPFBv
bHlQcm90b0FjY2Vzc0NoYWluPik7CisgICAgUHJveHlhYmxlQWNjZXNzQ2FzZShWTSYsIEpTQ2Vs
bCosIEFjY2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1
Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wgdmlhUHJveHks
IFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9B
Y2Nlc3NDaGFpbj4pOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBtX2Fk
ZGl0aW9uYWxTZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgogCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgpAQCAtNjIsMTEgKzYzLDExIEBAIFN0cnVjdHVyZVN0
dWJJbmZvOjp+U3RydWN0dXJlU3R1YkluZm8oKQogewogfQogCi12b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjppbml0R2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogYmFz
ZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQogewogICAg
IEFTU0VSVChoYXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShDYWNoZVR5
cGU6OkdldEJ5SWRTZWxmKTsKLSAgICBtX2dldEJ5SWRTZWxmSWRlbnRpZmllciA9IEJveDxJZGVu
dGlmaWVyPjo6Y3JlYXRlKGlkZW50aWZpZXIpOworICAgIG1fZ2V0QnlJZFNlbGZJZGVudGlmaWVy
ID0gaWRlbnRpZmllcjsKICAgICAKICAgICB1LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
c2V0KAogICAgICAgICBjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgYmFzZU9iamVjdFN0cnVj
dHVyZSk7CkBAIC0xMzgsNyArMTM5LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWJvdXRU
b0RpZSgpCiB9CiAKIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm86OmFk
ZEFjY2Vzc0Nhc2UoCi0gICAgY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIs
IENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IGFjY2Vzc0Nhc2UpCisgICAgY29uc3QgR0NTYWZlQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50LCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gYWNjZXNzQ2FzZSkKIHsKICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTE5NCw2ICsxOTUsNyBAQCBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgICAgICB1LnN0dWIgPSBhY2Nlc3Mu
cmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBBU1NFUlQobV9jYWNoZVR5
cGUgPT0gQ2FjaGVUeXBlOjpTdHViKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdC5n
ZW5lcmF0ZWRTb21lQ29kZSgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBi
dWZmZXIgYW55IGNhc2VzIHRoZW4gYmFpbC4gSWYgdGhpcyBtYWRlIG5vIGNoYW5nZXMgdGhlbiB3
ZSdsbCBqdXN0IHRyeSBhZ2FpbgpAQCAtMjc5LDYgKzI4MSwyNyBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqCiAgICAgc2V0Q2FjaGVUeXBlKENhY2hlVHlwZTo6VW5z
ZXQpOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIHN3aXRjaCAobV9jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENh
Y2hlVHlwZTo6VW5zZXQ6CisgICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgorICAgIGNh
c2UgQ2FjaGVUeXBlOjpTdHJpbmdMZW5ndGg6CisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRS
ZXBsYWNlOgorICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgorICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgICAgICBtX2dldEJ5SWRTZWxm
SWRlbnRpZmllci52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIHUuc3R1Yi0+dmlzaXRDaGlsZHJlbih2aXNp
dG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybjsKK30KKwogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBWTSYgdm0g
PSBjb2RlQmxvY2stPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ2FjaGVh
YmxlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVP
cmlnaW4uaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgpAQCAtNzQsMTkgKzc1LDIxIEBAIHB1
YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICB+U3RydWN0dXJl
U3R1YkluZm8oKTsKIAotICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKENvZGVCbG9jayosIFN0cnVj
dHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IElkZW50aWZp
ZXImKTsKKyAgICB2b2lkIGluaXRHZXRCeUlkU2VsZihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqIGJh
c2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyKTsK
ICAgICB2b2lkIGluaXRBcnJheUxlbmd0aCgpOwogICAgIHZvaWQgaW5pdFN0cmluZ0xlbmd0aCgp
OwogICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZSogYmFz
ZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQpOwogICAgIHZvaWQgaW5pdEluQnlJZFNl
bGYoQ29kZUJsb2NrKiwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCk7CiAKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IGFkZEFjY2Vzc0Nhc2UoY29uc3Qg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYs
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPik7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCBhZGRBY2Nlc3NDYXNlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9j
ayosIENhY2hlYWJsZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPik7CiAK
ICAgICB2b2lkIHJlc2V0KENvZGVCbG9jayopOwogCiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZv
aWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
CisKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJl
IGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKICAgICAvLyBlaXRoZXIg
ZW50aXJlbHkgb3IganVzdCBlbm91Z2ggdG8gZW5zdXJlIHRoYXQgdGhvc2UgZGVhZCBwb2ludGVy
cyBkb24ndCBnZXQgdXNlZCBhbnltb3JlLgogICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhD
b2RlQmxvY2sqKTsKQEAgLTE3MSw3ICsxNzQsNyBAQCBwdWJsaWM6CiAKICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW47CiBwcml2YXRlOgotICAgIEJveDxJZGVudGlmaWVyPiBtX2dldEJ5SWRTZWxm
SWRlbnRpZmllcjsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1fZ2V0QnlJZFNlbGZJZGVudGlm
aWVyOwogcHVibGljOgogCiAgICAgdW5pb24gewpAQCAtMTgyLDcgKzE4NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1OwogCi0gICAgQm94PElk
ZW50aWZpZXI+IGdldEJ5SWRTZWxmSWRlbnRpZmllcigpCisgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBnZXRCeUlkU2VsZklkZW50aWZpZXIoKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZik7CiAgICAgICAgIHJldHVybiBt
X2dldEJ5SWRTZWxmSWRlbnRpZmllcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKKyNpbmNsdWRl
ICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5
cGUuaCIKQEAgLTQ3MTksMTMgKzQ3MjAsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VH
ZXRCeUlkKGNvbnN0IAogICAgIGVsc2UgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9nZXRfYnlfaWRf
ZGlyZWN0KQogICAgICAgICB0eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKICAgICAK
LSAgICBHZXRCeVN0YXR1czo6SWRlbnRpZmllcktlZXBBbGl2ZSBrZWVwQWxpdmUgPSBbJl0gKEJv
eDxJZGVudGlmaWVyPiBpZGVudGlmaWVyKSB7Ci0gICAgICAgIG1fZ3JhcGgubV9wbGFuLmtlZXBB
bGl2ZUlkZW50aWZpZXIoV1RGTW92ZShpZGVudGlmaWVyKSk7Ci0gICAgfTsKICAgICBHZXRCeVN0
YXR1cyBnZXRCeVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCi0gICAgICAgIGN1cnJlbnRDb2RlT3Jp
Z2luKCksIEdldEJ5U3RhdHVzOjpUcmFja0lkZW50aWZpZXJzOjpObywga2VlcEFsaXZlKTsKKyAg
ICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgR2V0QnlTdGF0dXM6OlRyYWNrSWRlbnRpZmllcnM6
Ok5vKTsKIAogICAgIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGJ5dGVjb2RlLm1fZHN0LCBwcmVk
aWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeVN0YXR1cywgdHlwZSwgb3Bjb2Rl
TGVuZ3RoKTsKQEAgLTU2MjYsMTAgKzU2MjQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1f
YmFzZSk7CiAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3Bl
cnR5KTsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29tcGlsZUFzR2V0QnlJZCA9IGZhbHNlOwot
ICAgICAgICAgICAgR2V0QnlTdGF0dXM6OklkZW50aWZpZXJLZWVwQWxpdmUga2VlcEFsaXZlID0g
WyZdIChCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllcikgewotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9wbGFuLmtlZXBBbGl2ZUlkZW50aWZpZXIoV1RGTW92ZShpZGVudGlmaWVyKSk7Ci0gICAg
ICAgICAgICB9OwotICAgICAgICAgICAgR2V0QnlTdGF0dXMgZ2V0QnlTdGF0dXMgPSBHZXRCeVN0
YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5s
aW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2Rl
T3JpZ2luKCksIEdldEJ5U3RhdHVzOjpUcmFja0lkZW50aWZpZXJzOjpZZXMsIGtlZXBBbGl2ZSk7
CisgICAgICAgICAgICBHZXRCeVN0YXR1cyBnZXRCeVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21w
dXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1Rv
cC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSwg
R2V0QnlTdGF0dXM6OlRyYWNrSWRlbnRpZmllcnM6Olllcyk7CiAKICAgICAgICAgICAgIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIgPSAwOwogCkBAIC01NjQwLDEwICs1NjM1LDE1IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gc29tZXRoaW5nIGxp
a2UgTXVsdGlHZXRCeU9mZnNldCBpbiBhIG11bHRpIGlkZW50aWZpZXIgbW9kZS4KICAgICAgICAg
ICAgICAgICAvLyBUaGF0IHdheSwgd2UgY291bGQgYm90aCBzd2l0Y2ggb24gbXVsdGlwbGUgc3Ry
dWN0dXJlcyBhbmQgbXVsdGlwbGUgaWRlbnRpZmllcnMgKG9yIGludCAzMiBwcm9wZXJ0aWVzKS4K
ICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA0MjE2Ci0gICAgICAgICAgICAgICAgaWYgKEJveDxJZGVudGlmaWVyPiBpbXBsID0gZ2V0
QnlTdGF0dXMuc2luZ2xlSWRlbnRpZmllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50
aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGltcGwpOworICAgICAg
ICAgICAgICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBnZXRCeVN0YXR1
cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICAgICAgICAgIGlkZW50
aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlk
KCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXpl
U3Ryb25nKGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tDZWxsLCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJ
ZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKICAgICAgICAgICAgICAgICAgICAgc2hvdWxk
Q29tcGlsZUFzR2V0QnlJZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tJZGVudCwgT3BJbmZvKGltcGwtPmltcGwoKSksIHByb3BlcnR5KTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNp
bmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CkBAIC01NSw3ICs1Niw3IEBAIHVuc2lnbmVkIERlc2lyZWRJZGVudGlmaWVyczo6bnVtYmVyT2ZJ
ZGUKICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSArIG1fYWRk
ZWRJZGVudGlmaWVycy5zaXplKCk7CiB9CiAKLXZvaWQgRGVzaXJlZElkZW50aWZpZXJzOjpwcm9j
ZXNzQ29kZUJsb2NrSWRlbnRpZmllcnNJZk5lZWRlZCgpCit1bnNpZ25lZCBEZXNpcmVkSWRlbnRp
ZmllcnM6OmVuc3VyZShVbmlxdWVkU3RyaW5nSW1wbCogcmVwKQogewogICAgIGlmICghbV9kaWRQ
cm9jZXNzSWRlbnRpZmllcnMpIHsKICAgICAgICAgLy8gRG8gdGhpcyBub3cgaW5zdGVhZCBvZiB0
aGUgY29uc3RydWN0b3Igc28gdGhhdCB3ZSBkb24ndCBwYXkgdGhlIHByaWNlIG9uIHRoZSBtYWlu
CkBAIC02NCwxMSArNjUsNiBAQCB2b2lkIERlc2lyZWRJZGVudGlmaWVyczo6cHJvY2Vzc0NvZGVC
bG9jCiAgICAgICAgICAgICBtX2lkZW50aWZpZXJOdW1iZXJGb3JOYW1lLmFkZChtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihpbmRleCkuaW1wbCgpLCBpbmRleCk7CiAgICAgICAgIG1fZGlkUHJvY2Vz
c0lkZW50aWZpZXJzID0gdHJ1ZTsKICAgICB9Ci19Ci0KLXVuc2lnbmVkIERlc2lyZWRJZGVudGlm
aWVyczo6ZW5zdXJlKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXApCi17Ci0gICAgcHJvY2Vzc0NvZGVC
bG9ja0lkZW50aWZpZXJzSWZOZWVkZWQoKTsKIAogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pZGVu
dGlmaWVyTnVtYmVyRm9yTmFtZS5hZGQocmVwLCBudW1iZXJPZklkZW50aWZpZXJzKCkpOwogICAg
IHVuc2lnbmVkIHJlc3VsdCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CkBAIC03OSw0NSAr
NzUsMjAgQEAgdW5zaWduZWQgRGVzaXJlZElkZW50aWZpZXJzOjplbnN1cmUoVW5pcQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXVuc2lnbmVkIERlc2lyZWRJZGVudGlmaWVyczo6ZW5zdXJlKEJv
eDxJZGVudGlmaWVyPiByZXApCi17Ci0gICAgcHJvY2Vzc0NvZGVCbG9ja0lkZW50aWZpZXJzSWZO
ZWVkZWQoKTsKLQotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsID0gcmVwLT5pbXBsKCk7Ci0g
ICAgYXV0byBhZGRSZXN1bHQgPSBtX2lkZW50aWZpZXJOdW1iZXJGb3JOYW1lLmFkZChpbXBsLCBu
dW1iZXJPZklkZW50aWZpZXJzKCkpOwotICAgIHVuc2lnbmVkIHJlc3VsdCA9IGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAg
IG1fYWRkZWRJZGVudGlmaWVycy5hcHBlbmQoV1RGTW92ZShyZXApKTsKLSAgICAgICAgQVNTRVJU
KGF0KHJlc3VsdCkgPT0gaW1wbCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIFVu
aXF1ZWRTdHJpbmdJbXBsKiBEZXNpcmVkSWRlbnRpZmllcnM6OmF0KHVuc2lnbmVkIGluZGV4KSBj
b25zdAogewogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiByZXN1bHQ7CiAgICAgaWYgKGluZGV4IDwg
bV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSkKICAgICAgICAgcmVzdWx0ID0gbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoaW5kZXgpLmltcGwoKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
Y29uc3QgYXV0byYgdmFyaWFudCA9IG1fYWRkZWRJZGVudGlmaWVyc1tpbmRleCAtIG1fY29kZUJs
b2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCldOwotICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxVbmlxdWVkU3RyaW5nSW1wbCo+KHZhcmlhbnQpKQotICAgICAgICAgICAgcmVzdWx0
ID0gV1RGOjpnZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPih2YXJpYW50KTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmVzdWx0ID0gV1RGOjpnZXQ8Qm94PElkZW50aWZpZXI+Pih2YXJpYW50KS0+
aW1wbCgpOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IG1fYWRkZWRJZGVudGlm
aWVyc1tpbmRleCAtIG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCldOwogICAgIEFT
U0VSVChyZXN1bHQtPmhhc0F0TGVhc3RPbmVSZWYoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogdm9pZCBEZXNpcmVkSWRlbnRpZmllcnM6OnJlYWxseUFkZChWTSYgdm0sIENvbW1vbkRhdGEq
IGNvbW1vbkRhdGEpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2YXJpYW50IDogbV9hZGRlZElk
ZW50aWZpZXJzKSB7Ci0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiByZXA7Ci0gICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZWRTdHJpbmdJbXBsKj4odmFyaWFudCkpCi0g
ICAgICAgICAgICByZXAgPSBXVEY6OmdldDxVbmlxdWVkU3RyaW5nSW1wbCo+KHZhcmlhbnQpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXAgPSBXVEY6OmdldDxCb3g8SWRlbnRpZmllcj4+
KHZhcmlhbnQpLT5pbXBsKCk7Ci0KKyAgICBmb3IgKGF1dG8gcmVwIDogbV9hZGRlZElkZW50aWZp
ZXJzKSB7CiAgICAgICAgIEFTU0VSVChyZXAtPmhhc0F0TGVhc3RPbmVSZWYoKSk7CiAgICAgICAg
IElkZW50aWZpZXIgdWlkID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcmVwKTsKICAgICAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVu
dGlmaWVycy5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRJZGVudGlmaWVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBA
CiAKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNp
bmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJpbmdJ
bXBsLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDksNyArNDgsNiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZJZGVudGlmaWVycygpOwogICAgIHVuc2lnbmVkIGVuc3Vy
ZShVbmlxdWVkU3RyaW5nSW1wbCopOwotICAgIHVuc2lnbmVkIGVuc3VyZShCb3g8SWRlbnRpZmll
cj4pOwogICAgIAogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBhdCh1bnNpZ25lZCBpbmRleCkgY29u
c3Q7CiAgICAgCkBAIC02MSw3ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcm9jZXNzQ29k
ZUJsb2NrSWRlbnRpZmllcnNJZk5lZWRlZCgpOwogCiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKLSAgICBWZWN0b3I8VmFyaWFudDxVbmlxdWVkU3RyaW5nSW1wbCosIEJveDxJZGVudGlmaWVy
Pj4+IG1fYWRkZWRJZGVudGlmaWVyczsKKyAgICBWZWN0b3I8VW5pcXVlZFN0cmluZ0ltcGwqPiBt
X2FkZGVkSWRlbnRpZmllcnM7CiAgICAgSGFzaE1hcDxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2ln
bmVkPiBtX2lkZW50aWZpZXJOdW1iZXJGb3JOYW1lOwogICAgIGJvb2wgbV9kaWRQcm9jZXNzSWRl
bnRpZmllcnM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShy
ZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw2IEBACiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRh
YmFzZS5oIgogI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAiVk1Jbmxp
bmVzLmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiAjaWYgRU5BQkxFKEZUTF9KSVQp
CiAjaW5jbHVkZSAiRlRMQ2FwYWJpbGl0aWVzLmgiCkBAIC0xNTUsNyArMTU0LDYgQEAgUGxhbjo6
UGxhbihDb2RlQmxvY2sqIHBhc3NlZENvZGVCbG9jaywgQwogCiBQbGFuOjp+UGxhbigpCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodW5udWtlZFZNKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElM
b2NrKCkpOwogfQogCiBib29sIFBsYW46OmNvbXB1dGVDb21waWxlVGltZXMoKSBjb25zdApAQCAt
Njk2LDIyICs2OTQsNiBAQCBib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKIHZv
aWQgUGxhbjo6Y2FuY2VsKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3N0YWdlICE9IENhbmNl
bGxlZCk7Ci0KLSAgICAvLyBXaGVuIHdlIGNhbmNlbCBhIHBsYW4sIHRoZXJlJ3MgYSBjaGFuY2Ug
dGhhdCB0aGUgY29tcGlsZXIgdGhyZWFkIG1heSBoYXZlCi0gICAgLy8gYWxyZWFkeSByZWYnZWQg
aXQgYW5kIGlzIHdvcmtpbmcgb24gaXQuIFRoaXMgcmVzdWx0cyBpbiBhIHJhY2Ugd2hlcmUgdGhl
Ci0gICAgLy8gY29tcGlsZXIgdGhyZWFkIG1heSBob2xkIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0
aGUgcGxhbi4gV2UgcmVxdWlyZSB0aGF0Ci0gICAgLy8gdGhlIHBsYW4gaXMgb25seSBkZXN0cnVj
dGVkIG9uIHRoZSBtdXRhdG9yIHRocmVhZCBiZWNhdXNlIHdlIHBpZ2d5IGJhY2sKLSAgICAvLyBv
biB0aGUgcGxhbiB0byBlbnN1cmUgY2VydGFpbiBvdGhlciBvYmplY3RzIGFyZSBvbmx5IGRlc3Ry
dWN0ZWQgb24gdGhlCi0gICAgLy8gbXV0YXRvciB0aHJlYWQuIEZvciBleGFtcGxlLCBzZWUgUGxh
bjo6bV9pZGVudGlmaWVyc0tlcHRBbGl2ZUZvckNsZWFuVXAuCi0gICAgLy8KLSAgICAvLyBUbyBl
bnN1cmUgdGhhdCB0aGUgcGxhbiBpcyBkZXN0cnVjdGVkIG9uIHRoZSBtdXRhdG9yIGFuZCBub3Qg
dGhlIGNvbXBpbGVyCi0gICAgLy8gdGhyZWFkLCB0aGUgY29tcGlsZXIgdGhyZWFkIHdpbGwgZW5x
dWV1ZSBhbnkgY2FuY2VsbGVkIHBsYW4gaXQgc2VlcyBpbgotICAgIC8vIHRoZSB3b3JrbGlzdCdz
IG1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24uIFRoZSBtdXRhdG9yIHdpbGwgbGF0
ZXIKLSAgICAvLyBkZWxldGUgdGhlIGNhbmNlbGxlZCBwbGFucyBpbiBtX2NhbmNlbGxlZFBsYW5z
UGVuZGluZ0Rlc3RydWN0aW9uLgotICAgIC8vIEhvd2V2ZXIsIGEgbXV0YXRvciBzaG91bGQgb25s
eSBkZWxldGUgY2FuY2VsbGVkIHBsYW5zIHRoYXQgYmVsb25nIHRvIGl0cwotICAgIC8vIFZNLiBI
ZW5jZSwgYSBjYW5jZWxsZWQgcGxhbiBuZWVkcyB0byBrZWVwIGl0cyBtX3ZtIHBvaW50ZXIgdG8g
bGV0IHRoZQotICAgIC8vIG11dGF0b3Iga25vdyB3aGljaCBWTSBpdCBiZWxvbmdzIHRvLgotICAg
IC8vIFJlZjogU2VlIFdvcmtsaXN0OjpkZWxldGVDYW5jZWxsZWRQbGFuc0ZvclZNKCkuCiAgICAg
QVNTRVJUKG1fdm0pOwogCiAgICAgLy8gTnVrZSB0aGUgVk0gcG9pbnRlciBzbyB0aGF0IHBvaW50
ZXIgY29tcGFyaXNvbnMgYWdhaW5zdCBpdCB3aWxsIGZhaWwuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNs
dWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24uaCIKICNpbmNs
dWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCi0jaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAK
QEAgLTExNywxMiArMTE2LDYgQEAgcHVibGljOgogICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjayogY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrLmdldCgpOyB9CiAgICAg
dm9pZCBzZXRDYWxsYmFjayhSZWY8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiYmIGNhbGxi
YWNrKSB7IG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsgfQogCi0gICAgdm9pZCBrZWVw
QWxpdmVJZGVudGlmaWVyKEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyKQotICAgIHsKLSAgICAg
ICAgaWYgKGlkZW50aWZpZXIpCi0gICAgICAgICAgICBtX2lkZW50aWZpZXJzS2VwdEFsaXZlRm9y
Q2xlYW5VcC5hcHBlbmQoV1RGTW92ZShpZGVudGlmaWVyKSk7Ci0gICAgfQotCiBwcml2YXRlOgog
ICAgIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpIGNvbnN0OwogICAgIGJvb2wgcmVwb3J0Q29t
cGlsZVRpbWVzKCkgY29uc3Q7CkBAIC0xODEsNyArMTc0LDYgQEAgcHJpdmF0ZToKICAgICBTdGFn
ZSBtX3N0YWdlOwogCiAgICAgUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gbV9j
YWxsYmFjazsKLSAgICBWZWN0b3I8Qm94PElkZW50aWZpZXI+LCAxNj4gbV9pZGVudGlmaWVyc0tl
cHRBbGl2ZUZvckNsZWFuVXA7CiAKICAgICBNb25vdG9uaWNUaW1lIG1fdGltZUJlZm9yZUZUTDsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2
aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAwLDggQEAgcHJvdGVjdGVkOgogICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2RhdGEubV9yaWdodFRvUnVuKTsKICAgICAgICAgewogICAg
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fd29ya2xpc3QubV9sb2NrKTsKLSAgICAgICAg
ICAgIGlmIChtX3BsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVkKSB7Ci0gICAgICAgICAg
ICAgICAgbV93b3JrbGlzdC5tX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLmFwcGVu
ZChXVEZNb3ZlKG1fcGxhbikpOworICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQ
bGFuOjpDYW5jZWxsZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRp
bnVlOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9wbGFuLT5ub3RpZnlDb21waWxpbmco
KTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEyNSwxMCArMTIzLDggQEAgcHJvdGVjdGVkOgog
ICAgICAgICAKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fd29y
a2xpc3QubV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlKCkgPT0gUGxhbjo6
Q2FuY2VsbGVkKSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrbGlzdC5tX2NhbmNlbGxlZFBsYW5z
UGVuZGluZ0Rlc3RydWN0aW9uLmFwcGVuZChXVEZNb3ZlKG1fcGxhbikpOworICAgICAgICAgICAg
aWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwotICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBtX3BsYW4tPm5vdGlmeVJlYWR5KCk7CiAgICAgICAgICAgICAKQEAgLTMw
NCw0NyArMzAwLDEwIEBAIHZvaWQgV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmUK
ICAgICB9CiB9CiAKLXZvaWQgV29ya2xpc3Q6OmRlbGV0ZUNhbmNlbGxlZFBsYW5zRm9yVk0oTG9j
a0hvbGRlciYsIFZNJiB2bSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFk
SXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBIYXNoU2V0PFJlZlB0cjxQbGFuPj4gcmVtb3ZlZFBs
YW5zOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBzY2VuYXJpbyBjYW4gb2NjdXI6Ci0gICAgLy8g
MS4gVGhlIERGRyB0aHJlYWQgc3RhcnRlZCBjb21waWxpbmcgYSBwbGFuLgotICAgIC8vIDIuIFRo
ZSBHQyB0aHJlYWQgY2FuY2VscyB0aGUgcGxhbiwgYW5kIGFkZHMgaXQgdG8gbV9jYW5jZWxsZWRQ
bGFuc1BlbmRpbmdEZXN0cnVjdGlvbi4KLSAgICAvLyAzLiBUaGUgREZHIHRocmVhZCBmaW5pc2hl
cyBjb21waWxpbmcsIGFuZCBkaXNjb3ZlcnMgdGhhdCB0aGUgdGhyZWFkIGlzIGNhbmNlbGxlZC4K
LSAgICAvLyAgICBUbyBhdm9pZCBkZXN0cnVjdGluZyB0aGUgcGxhbiBpbiB0aGUgREZHIHRocmVh
ZCwgaXQgYWRkcyBpdCB0bwotICAgIC8vICAgIG1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1
Y3Rpb24uCi0gICAgLy8gNC4gVGhlIGFib3ZlIG9jY3VycyBiZWZvcmUgdGhlIG11dGF0b3IgcnVu
cyBkZWxldGVDYW5jZWxsZWRQbGFuc0ZvclZNKCkuCi0gICAgLy8KLSAgICAvLyBIZW5jZSwgdGhl
IHNhbWUgY2FuY2VsbGVkIHBsYW4gY2FuIGFwcGVhciBpbiBtX2NhbmNlbGxlZFBsYW5zUGVuZGlu
Z0Rlc3RydWN0aW9uCi0gICAgLy8gbW9yZSB0aGFuIG9uY2UuIFRoaXMgaXMgd2h5IHdlIG5lZWQg
dG8gZmlsdGVyIHRoZSBjYW5jZWxsZWQgcGxhbnMgdGhyb3VnaAotICAgIC8vIHRoZSByZW1vdmVk
UGxhbnMgSGFzaFNldCBiZWZvcmUgd2UgZG8gdGhlIHJlZkNvdW50IGNoZWNrIGJlbG93LgotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0
aW9uLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9jYW5jZWxs
ZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbltpXTsKLSAgICAgICAgaWYgKHBsYW4tPnVubnVrZWRW
TSgpICE9ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX2NhbmNlbGxlZFBs
YW5zUGVuZGluZ0Rlc3RydWN0aW9uW2ktLV0gPSBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3Ry
dWN0aW9uLmxhc3QoKTsKLSAgICAgICAgbV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlv
bi5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIHJlbW92ZWRQbGFucy5hZGQoV1RGTW92ZShwbGFuKSk7
Ci0gICAgfQotCi0gICAgd2hpbGUgKCFyZW1vdmVkUGxhbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFJlZlB0cjxQbGFuPiBwbGFuID0gcmVtb3ZlZFBsYW5zLnRha2VBbnkoKTsKLSAgICAgICAgQVNT
RVJUKHBsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVkKTsKLSAgICAgICAgaWYgKHBsYW4t
PnJlZkNvdW50KCkgPiAxKQotICAgICAgICAgICAgbV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0
cnVjdGlvbi5hcHBlbmQoV1RGTW92ZShwbGFuKSk7Ci0gICAgfQotfQotCiB2b2lkIFdvcmtsaXN0
OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mIHZtLCBWZWN0b3I8UmVmUHRyPFBsYW4+LCA4
PiYgbXlSZWFkeVBsYW5zKQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBM
b2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElz
SG9sZGluZ0FQSUxvY2soKSk7Ci0KLSAgICBkZWxldGVDYW5jZWxsZWRQbGFuc0ZvclZNKGxvY2tl
ciwgdm0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWFkeVBsYW5zLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9yZWFkeVBsYW5zW2ldOwogICAg
ICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCkBAIC00NDcsOCArNDA2LDYgQEAgdm9pZCBXb3Jr
bGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKCptX2xvY2spOwogICAgICAgICBIYXNoU2V0PENvbXBpbGF0aW9uS2V5PiBkZWFkUGxh
bktleXM7Ci0gICAgICAgIGJvb2wgaXNJbk11dGF0b3IgPSB2bS5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpOwotCiAgICAgICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
cGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAg
ICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChwbGFu
LT52bSgpICE9ICZ2bSkKQEAgLTQ2MiwxMiArNDE5LDggQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3Zl
RGVhZFBsYW5zKFZNJiB2bSkKICAgICAgICAgICAgIGRlYWRQbGFuS2V5cy5hZGQocGxhbi0+a2V5
KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZGVhZFBsYW5LZXlzLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgZm9yIChIYXNoU2V0PENvbXBpbGF0aW9uS2V5Pjo6aXRlcmF0b3IgaXRlciA9
IGRlYWRQbGFuS2V5cy5iZWdpbigpOyBpdGVyICE9IGRlYWRQbGFuS2V5cy5lbmQoKTsgKytpdGVy
KSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3BsYW5zLnRha2UoKml0
ZXIpOwotICAgICAgICAgICAgICAgIHBsYW4tPmNhbmNlbCgpOwotICAgICAgICAgICAgICAgIGlm
ICghaXNJbk11dGF0b3IpCi0gICAgICAgICAgICAgICAgICAgIG1fY2FuY2VsbGVkUGxhbnNQZW5k
aW5nRGVzdHJ1Y3Rpb24uYXBwZW5kKFdURk1vdmUocGxhbikpOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZm9yIChIYXNoU2V0PENvbXBpbGF0aW9uS2V5Pjo6aXRlcmF0b3IgaXRlciA9IGRl
YWRQbGFuS2V5cy5iZWdpbigpOyBpdGVyICE9IGRlYWRQbGFuS2V5cy5lbmQoKTsgKytpdGVyKQor
ICAgICAgICAgICAgICAgIG1fcGxhbnMudGFrZSgqaXRlciktPmNhbmNlbCgpOwogICAgICAgICAg
ICAgRGVxdWU8UmVmUHRyPFBsYW4+PiBuZXdRdWV1ZTsKICAgICAgICAgICAgIHdoaWxlICghbV9x
dWV1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1f
cXVldWUudGFrZUZpcnN0KCk7CkBAIC01MDMsOSArNDU2LDYgQEAgdm9pZCBXb3JrbGlzdDo6cmVt
b3ZlTm9uQ29tcGlsaW5nUGxhbnNGbwogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwog
ICAgIEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFuS2V5czsKICAgICBWZWN0b3I8UmVm
UHRyPFBsYW4+PiBkZWFkUGxhbnM7Ci0gICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdBUElMb2NrKCkpOwotCi0gICAgZGVsZXRlQ2FuY2VsbGVkUGxhbnNGb3JWTShsb2NrZXIsIHZt
KTsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9wbGFucykgewogICAgICAgICBQbGFuKiBwbGFu
ID0gZW50cnkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDI1Mzgx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtOTMsNyArOTMsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHRocmVhZEZ1
bmN0aW9uKHZvaWQqIGFyZ3VtZW50KTsKICAgICAKICAgICB2b2lkIHJlbW92ZUFsbFJlYWR5UGxh
bnNGb3JWTShWTSYsIFZlY3RvcjxSZWZQdHI8UGxhbj4sIDg+Jik7Ci0gICAgdm9pZCBkZWxldGVD
YW5jZWxsZWRQbGFuc0ZvclZNKExvY2tIb2xkZXImLCBWTSYpOwogCiAgICAgdm9pZCBkdW1wKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKQEAgLTExNCw3
ICsxMTMsNiBAQCBwcml2YXRlOgogICAgIC8vIFVzZWQgdG8gcXVpY2tseSBmaW5kIHdoaWNoIHBs
YW5zIGhhdmUgYmVlbiBjb21waWxlZCBhbmQgYXJlIHJlYWR5IHRvCiAgICAgLy8gYmUgY29tcGxl
dGVkLgogICAgIFZlY3RvcjxSZWZQdHI8UGxhbj4sIDE2PiBtX3JlYWR5UGxhbnM7Ci0gICAgVmVj
dG9yPFJlZlB0cjxQbGFuPiwgND4gbV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbjsK
ICAgICBSZWY8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3BsYW5FbnF1ZXVlZDsKICAgICBD
b25kaXRpb24gbV9wbGFuQ29tcGlsZWQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiREZHQ29tcGlsYXRpb25Nb2RlLmgi
CiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCkBAIC0yMDI4LDcgKzIwMjksNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIGlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSkgewor
ICAgIGlmIChiYXNlVmFsdWUuaXNDZWxsKCkgJiYgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNo
ZWFibGVJZGVudGlmaWVyQ2VsbChzdWJzY3JpcHQpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKSB7CkBAIC0yMDM3LDcgKzIwMzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdlCiAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25H
ZXRCeVZhbE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgcHJvcGVydHlO
YW1lLCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7IAogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBjb2RlQmxv
Y2ssIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSwgcHJvcGVydHlOYW1lLmltcGwoKSkpCi0g
ICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
YmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsICpzdHViSW5mbywgR2V0QnlLaW5kOjpOb3Jt
YWxCeVZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hHZXRCeShnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQuYXNDZWxsKCksIHNsb3QsICpzdHViSW5m
bywgR2V0QnlLaW5kOjpOb3JtYWxCeVZhbCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5k
ID8gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkgOiBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICAgICAgfSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2lu
Y2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
U2h1ZmZsZXIuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHU3Bl
Y3VsYXRpdmVKSVQuaCIKQEAgLTE3OCw3ICsxNzksNyBAQCBpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBhcHByCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKK3N0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CkBAIC0xOTcs
NiArMTk4LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKIAogICAgICAgICBpZiAo
cHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgeworICAgICAgICAgICAg
Ly8gRGVsaWJlcmF0ZWx5IHVzZSB0aGUgSWRlbnRpZmllciAoaW5zdGVhZCBvZiBKU0NlbGwqKSBm
b3JtIHNpbmNlCisgICAgICAgICAgICAvLyB3ZSBoYXZlIGFuIGltbW9ydGFsIElkZW50aWZpZXIg
aW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoOwogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAog
ICAgICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKQEAgLTI2
OCw3ICsyNzIsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAK
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7
Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZSwgc2xvdC5zbG90QmFzZSgpID09IGJh
c2VWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2Vs
ZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBw
cm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgZnRs
VGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9j
YXRpb24sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CkBAIC0zMTksNyArMzIzLDcg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6
Y3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBwcm90b3R5cGVBY2Nlc3NDaGFp
bi0+c2xvdEJhc2VTdHJ1Y3R1cmUoc3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpID09
IG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0
dXJlKHN0cnVjdHVyZSktPmdldCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSA9PSBvZmZzZXQpOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V2UgdXNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGluc3RlYWQgZm9yIGZhc3RlciBhY2Nl
c3Nlcy4KICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVs
bHB0cjsKQEAgLTMyOCwxNiArMzMyLDE2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyMTUKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzbG90LmlzVW5zZXQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
c2xvdC5zbG90QmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lLnVpZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
Y29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24o
KS5vZmZzZXQoKSA9PSBvZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHNsb3Qu
c2xvdEJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1l
LmltcGwoKSwgc2xvdC5hdHRyaWJ1dGVzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWUudWlkKCksIHNsb3QuYXR0cmlidXRlcygpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuaXNWYWxpZCgpKQpAQCAtMzkzLDEyICszOTcsMTIgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpHZXRCeUFkZEFjY2Vzc0Nhc2UsIGJhc2VWYWx1ZS5jbGFzc0luZm9P
ck51bGwodm0pLCBwcm9wZXJ0eU5hbWUsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsK
KyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUFkZEFjY2Vzc0Nhc2UsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUu
dWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAKICAgICAgICAgcmVzdWx0
ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGNvZGVCbG9jaywgcHJvcGVydHlOYW1l
LCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAogICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVD
b2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1
bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBwcm9wZXJ0eU5hbWUsIHNsb3Quc2xv
dEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0
QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdC5jb2RlKCkpOwogICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1w
KHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0
LmNvZGUoKSkpOwpAQCAtNDEwLDcgKzQxNCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUdldEJ5KEoKICAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2
ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKIH0KIAotdm9pZCByZXBhdGNoR2V0QnkoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUg
YmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkK
K3ZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNh
bXBsZXJTY29wZShmYWxzZSk7CiAgICAgCkBAIC00OTQsNyArNDk4LDcgQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlHZQogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGNvZGVCbG9j
aywgSWRlbnRpZmllcigpLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNz
VHlwZSwgSWRlbnRpZmllcigpKSk7CisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vz
c0Nhc2UobG9ja2VyLCBjb2RlQmxvY2ssIG51bGxwdHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwg
Y29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7CiAKICAgICAgICAgaWYgKHJlc3VsdC5n
ZW5lcmF0ZWRTb21lQ29kZSgpKSB7CiAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5
UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmll
cigpKSk7CkBAIC04ODQsNyArODg4LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlSW5zdGFuYwogICAgICAgICAKICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9m
QWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcigpKSk7CiAg
ICAgICAgIAotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwg
Y29kZUJsb2NrLCBJZGVudGlmaWVyKCksIFdURk1vdmUobmV3Q2FzZSkpOworICAgICAgICByZXN1
bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgY29kZUJsb2NrLCBudWxscHRyLCBX
VEZNb3ZlKG5ld0Nhc2UpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVk
U29tZUNvZGUoKSkgewogICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9mUmVw
bGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCShyZXZpc2lvbiAyNTM4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50
aWZpZXIuaCIKICNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIK
IApAQCAtNDEsNyArNDIsNyBAQCBlbnVtIGNsYXNzIEdldEJ5S2luZCB7CiB9OwogCiB2b2lkIHJl
cGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBi
YXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXBhdGNoR2V0
QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwor
dm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIEdldEJ5S2luZCk7CiB2b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7CiB2b2lkIHJlcGF0
Y2hJbkJ5SUQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIGNvbnN0IElk
ZW50aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwogdm9pZCByZXBhdGNoSW5zdGFuY2VPZihKU0dsb2JhbE9iamVjdCosIENvZGVC
bG9jayosIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIGJvb2wgd2FzRm91bmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgor
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fYml0cyA/IHVpZCgpIDogU3RyaW5nSW1wbDo6
ZW1wdHkoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CitjbGFzcyBV
bmlxdWVkU3RyaW5nSW1wbDsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UHJp
bnRTdHJlYW07Cit1c2luZyBXVEY6OlVuaXF1ZWRTdHJpbmdJbXBsOworCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSWRlbnRpZmllcjsKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFNsb3RWaXNpdG9y
OworCitjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyIHsKK3B1YmxpYzoKKyAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyKCkgPSBkZWZhdWx0OworICAgIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyKGNv
bnN0IElkZW50aWZpZXImKTsKKyAgICBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllcihKU0NlbGwq
IGlkZW50aWZpZXIpOworCisgICAgQ2FjaGVhYmxlSWRlbnRpZmllcihjb25zdCBDYWNoZWFibGVJ
ZGVudGlmaWVyJikgPSBkZWZhdWx0OworICAgIENhY2hlYWJsZUlkZW50aWZpZXIoQ2FjaGVhYmxl
SWRlbnRpZmllciYmKSA9IGRlZmF1bHQ7CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyKHN0ZDo6
bnVsbHB0cl90KQorICAgICAgICA6IG1fYml0cygwKQorICAgIHsgfQorCisgICAgYm9vbCBpc1Vp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyAmIHNfdWlkVGFnOyB9CisgICAgYm9vbCBpc0NlbGwo
KSBjb25zdCB7IHJldHVybiAhaXNVaWQoKTsgfQorCisgICAgYm9vbCBpc1N5bWJvbCgpIGNvbnN0
IHsgcmV0dXJuIG1fYml0cyAmJiB1aWQoKS0+aXNTeW1ib2woKTsgfQorCisgICAgaW5saW5lIEpT
Q2VsbCogY2VsbCgpIGNvbnN0OworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdDsK
KworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0K
KworICAgIENhY2hlYWJsZUlkZW50aWZpZXImIG9wZXJhdG9yPShjb25zdCBDYWNoZWFibGVJZGVu
dGlmaWVyJikgPSBkZWZhdWx0OworICAgIENhY2hlYWJsZUlkZW50aWZpZXImIG9wZXJhdG9yPShD
YWNoZWFibGVJZGVudGlmaWVyJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDYWNoZWFibGVJZGVudGlmaWVyJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IENhY2hlYWJsZUlkZW50aWZpZXImIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0OworCisgICAgc3RhdGljIGlu
bGluZSBib29sIGlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoSlNDZWxsKik7CisgICAgc3RhdGlj
IGlubGluZSBib29sIGlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoSlNWYWx1ZSk7CisKKyAgICBp
bmxpbmUgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJikgY29uc3Q7CisKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBpbmxpbmUgYm9vbCBpc1N5bWJvbENlbGwoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBp
c1N0cmluZ0NlbGwoKSBjb25zdDsKKworICAgIGlubGluZSB2b2lkIHNldENlbGxCaXRzKEpTQ2Vs
bCopOworICAgIGlubGluZSB2b2lkIHNldFVpZEJpdHMoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHNfdWlkVGFnID0gMTsKKyAgICB1aW50cHRy
X3QgbV9iaXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxp
bmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAiSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
ZWxsLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVkU3RyaW5n
SW1wbC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXI6
OkNhY2hlYWJsZUlkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAg
ICBzZXRVaWRCaXRzKGlkZW50aWZpZXIuaW1wbCgpKTsKK30KKworaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXI6OkNhY2hlYWJsZUlkZW50aWZpZXIoSlNDZWxsKiBpZGVudGlmaWVyKQoreworICAg
IHNldENlbGxCaXRzKGlkZW50aWZpZXIpOworfQorCitpbmxpbmUgSlNDZWxsKiBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjZWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNDZWxsKCkpOworICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9iaXRzKTsKK30KKworaW5saW5lIFVuaXF1ZWRT
dHJpbmdJbXBsKiBDYWNoZWFibGVJZGVudGlmaWVyOjp1aWQoKSBjb25zdAoreworICAgIGlmICgh
bV9iaXRzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXNVaWQoKSkKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KG1fYml0cyAmIH5zX3Vp
ZFRhZyk7CisgICAgaWYgKGlzU3ltYm9sQ2VsbCgpKQorICAgICAgICByZXR1cm4gJmpzQ2FzdDxT
eW1ib2wqPihjZWxsKCkpLT51aWQoKTsKKyAgICBBU1NFUlQoaXNTdHJpbmdDZWxsKCkpOworICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihjZWxsKCkpOworICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJpbmctPmdldFZhbHVlSW1wbCgp
KTsKK30KKworaW5saW5lIGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVu
dGlmaWVyQ2VsbChKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKGNlbGwtPmlzU3ltYm9sKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghY2VsbC0+aXNTdHJpbmcoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihj
ZWxsKTsKKyAgICBpZiAoc3RyaW5nLT5pc1JvcGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBzdHJpbmctPmdldFZhbHVlSW1wbCgpLT5pc0F0b20oKTsKK30KKworaW5saW5l
IGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChKU1Zh
bHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gaXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbCh2YWx1ZS5hc0NlbGwo
KSk7Cit9CisKK2lubGluZSBib29sIENhY2hlYWJsZUlkZW50aWZpZXI6OmlzU3ltYm9sQ2VsbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzQ2VsbCgpICYmIGNlbGwoKS0+aXNTeW1ib2woKTsKK30K
KworaW5saW5lIGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNTdHJpbmdDZWxsKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaXNDZWxsKCkgJiYgY2VsbCgpLT5pc1N0cmluZygpOworfQorCitpbmxp
bmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjpzZXRDZWxsQml0cyhKU0NlbGwqIGNlbGwpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoaXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChjZWxsKSk7Cisg
ICAgbV9iaXRzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCk7Cit9CisKK2lubGluZSB2
b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnNldFVpZEJpdHMoVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKK3sKKyAgICBtX2JpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1aWQpIHwgc191aWRU
YWc7Cit9CisKK2lubGluZSB2b2lkIENhY2hlYWJsZUlkZW50aWZpZXI6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cit7CisgICAgaWYgKG1fYml0cyAmJiBpc0NlbGwo
KSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjZWxsKCkpOworfQorCisKK2lu
bGluZSBib29sIENhY2hlYWJsZUlkZW50aWZpZXI6Om9wZXJhdG9yPT0oY29uc3QgQ2FjaGVhYmxl
SWRlbnRpZmllciYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHVpZCgpID09IG90aGVyLnVp
ZCgpOworfQorCitpbmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlmaWVyOjpvcGVyYXRvciE9KGNv
bnN0IENhY2hlYWJsZUlkZW50aWZpZXImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiB1aWQo
KSAhPSBvdGhlci51aWQoKTsKK30KKworaW5saW5lIGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
b3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
dWlkKCkgPT0gb3RoZXIuaW1wbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
CShyZXZpc2lvbiAyNTM4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHN0YXRp
YyBTdHJpbmcgZnVuY3Rpb25DYWxsQmFzZShjb25zdCBTdHIKICAgICBpZiAoc291cmNlTGVuZ3Ro
IDwgMiB8fCBzb3VyY2VUZXh0W2lkeF0gIT0gJyknKSB7CiAgICAgICAgIC8vIEZvciBmdW5jdGlv
biBjYWxscyB0aGF0IGhhdmUgbWFueSBuZXcgbGluZXMgaW4gYmV0d2VlbiB0aGVpciBvcGVuIHBh
cmVudGhlc2lzCiAgICAgICAgIC8vIGFuZCB0aGVpciBjbG9zaW5nIHBhcmVudGhlc2lzLCB0aGUg
dGV4dCByYW5nZSBwYXNzZWQgaW50byB0aGUgbWVzc2FnZSBhcHBlbmRlciAKLSAgICAgICAgLy8g
d2lsbCBub3QgaW5sY3VkZSB0aGUgdGV4dCBpbiBiZXR3ZWVuIHRoZXNlIHBhcmVudGhlc2VzLCBp
dCB3aWxsIGp1c3QgYmUgdGhlIGRlc2lyZWQKKyAgICAgICAgLy8gd2lsbCBub3QgaW5jbHVkZSB0
aGUgdGV4dCBpbiBiZXR3ZWVuIHRoZXNlIHBhcmVudGhlc2VzLCBpdCB3aWxsIGp1c3QgYmUgdGhl
IGRlc2lyZWQKICAgICAgICAgLy8gdGV4dCB0aGF0IHByZWNlZGVzIHRoZSBwYXJlbnRoZXNlcy4K
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDYgKzE4
OSw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgYm9vbCBlcXVhbChKU0dsb2JhbE9iamVjdCosIEpT
U3RyaW5nKiBvdGhlcikgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZShKU0dsb2JhbE9i
amVjdCopIGNvbnN0OwogICAgIGlubGluZSBjb25zdCBTdHJpbmcmIHRyeUdldFZhbHVlKGJvb2wg
YWxsb2NhdGlvbkFsbG93ZWQgPSB0cnVlKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmdJbXBsKiBn
ZXRWYWx1ZUltcGwoKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmdJbXBsKiB0cnlHZXRWYWx1ZUlt
cGwoKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owog
CkBAIC03MDMsNiArNzA0LDEyIEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNTdHJpbmc6Omxl
bmd0aCgKICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0cmluZ0ltcGwqPihwb2ludGVyKS0+bGVu
Z3RoKCk7CiB9CiAKK2lubGluZSBjb25zdCBTdHJpbmdJbXBsKiBKU1N0cmluZzo6Z2V0VmFsdWVJ
bXBsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzUm9wZSgpKTsKKyAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PFN0cmluZ0ltcGwqPihtX2ZpYmVyKTsKK30KKwogaW5saW5lIGNvbnN0IFN0cmluZ0lt
cGwqIEpTU3RyaW5nOjp0cnlHZXRWYWx1ZUltcGwoKSBjb25zdAogewogICAgIHVpbnRwdHJfdCBw
b2ludGVyID0gbV9maWJlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA5NCwyMCArMTA5NCwxNSBAQCB2b2lkIFZNOjpkdW1wUmVn
RXhwVHJhY2UoKQogfQogI2VuZGlmCiAKLVdhdGNocG9pbnRTZXQqIFZNOjplbnN1cmVXYXRjaHBv
aW50U2V0Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQor
V2F0Y2hwb2ludFNldCogVk06OmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShj
b25zdCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1lKQogewotICAgIGF1dG8gcmVzdWx0
ID0gbV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzLmFkZChwcm9wZXJ0eU5hbWUuc3RyaW5n
KCksIG51bGxwdHIpOworICAgIGF1dG8gcmVzdWx0ID0gbV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnRTZXRzLmFkZChwcm9wZXJ0eU5hbWUsIG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkKICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UmVmKG5ldyBXYXRj
aHBvaW50U2V0KElzV2F0Y2hlZCkpOwogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmdldCgpOwogfQogCi12b2lkIFZNOjpyZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0
eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQp
Ci17Ci0gICAgZW5zdXJlV2F0Y2hwb2ludFNldEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFt
ZSktPmFkZCh3YXRjaHBvaW50KTsKLX0KLQotdm9pZCBWTTo6YWRkSW1wdXJlUHJvcGVydHkoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit2b2lkIFZNOjphZGRJbXB1cmVQcm9wZXJ0eShjb25z
dCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1lKQogewogICAgIGlmIChSZWZQdHI8V2F0
Y2hwb2ludFNldD4gd2F0Y2hwb2ludFNldCA9IG1faW1wdXJlUHJvcGVydHlXYXRjaHBvaW50U2V0
cy50YWtlKHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmZpcmVBbGwoKnRo
aXMsICJJbXB1cmUgcHJvcGVydHkgYWRkZWQiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkocmV2aXNpb24gMjUzODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTAxNCwxMSArMTAxNCwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNocmlua0Zvb3RwcmludFdoZW5JZGxlKCk7CiAKLSAgICBXYXRjaHBvaW50U2V0
KiBlbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYp
OwotICAgIHZvaWQgcmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRl
bnRpZmllciYsIFdhdGNocG9pbnQqKTsKKyAgICBXYXRjaHBvaW50U2V0KiBlbnN1cmVXYXRjaHBv
aW50U2V0Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICAK
ICAgICAvLyBGSVhNRTogVXNlIEF0b21TdHJpbmcgb25jZSBpdCBnb3QgbWVyZ2VkIHdpdGggSWRl
bnRpZmllci4KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNv
bnN0IFN0cmluZyYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVy
dHkoY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICAKICAgICBJbmxpbmVXYXRjaHBvaW50
U2V0JiBwcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKSB7IHJldHVybiBtX3ByaW1pdGl2ZUdpZ2Fj
YWdlRW5hYmxlZDsgfQogCkBAIC0xMTkyLDcgKzExOTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9zaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZyB7IGZhbHNlIH07CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ1
aWx0aW5FeGVjdXRhYmxlcz4gbV9idWlsdGluRXhlY3V0YWJsZXM7Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxXYXRjaHBvaW50U2V0Pj4gbV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRz
OworICAgIEhhc2hNYXA8Y29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqLCBSZWZQdHI8V2F0Y2hwb2lu
dFNldD4+IG1faW1wdXJlUHJvcGVydHlXYXRjaHBvaW50U2V0czsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8VHlwZVByb2ZpbGVyPiBtX3R5cGVQcm9maWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZVByb2ZpbGVyTG9nPiBtX3R5cGVQcm9maWxlckxvZzsKICAgICB1bnNpZ25lZCBtX3R5cGVQcm9m
aWxlckVuYWJsZWRDb3VudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDE5LTEyLTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBs
YWNlIHVzZXMgb2YgQm94PElkZW50aWZpZXI+IHdpdGggYSBuZXcgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNTU0NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTgwNDE4MDA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Db21tb25W
TS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRJbXB1cmVQcm9wZXJ0eSk6CisKIDIwMTktMTIt
MTkgIERvdWcgS2VsbHkgIDxkb3Vna0BhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIFRyYWNr
QmFzZSB0byBzdG9yZSBtX21lZGlhRWxlbWVudCBhcyBhIFdlYWtQdHIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAJKHJldmlzaW9uIDI1MzgxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgs
NyArODgsNyBAQCBGcmFtZSogbGV4aWNhbEZyYW1lRnJvbUNvbW1vblZNKCkKIAogdm9pZCBhZGRJ
bXB1cmVQcm9wZXJ0eShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgY29t
bW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOworICAgIGNvbW1vblZNKCku
YWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLmltcGwoKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386616</attachid>
            <date>2020-01-02 12:09:42 -0800</date>
            <delta_ts>2020-01-10 18:03:19 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-205544.patch</filename>
            <type>text/plain</type>
            <size>109469</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTM5NzUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIwLTAxLTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQm94PElkZW50aWZpZXI+IHdpdGggYSBuZXcg
Q2FjaGVhYmxlSWRlbnRpZmllciBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNTU0NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTgwNDE4
MDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBz
dHJlc3MvcmFjeS1nYy1jbGVhbnVwLW9mLWlkZW50aWZpZXItYWZ0ZXItbXV0YXRvci1zdG9wcy1y
dW5uaW5nLmpzOiBBZGRlZC4KKwogMjAxOS0xMi0yMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWls
bGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcvRlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQg
dG8gdGhlIG1pZGRsZSBvZiBhIGJ5dGVjb2RlCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9yYWN5LWdj
LWNsZWFudXAtb2YtaWRlbnRpZmllci1hZnRlci1tdXRhdG9yLXN0b3BzLXJ1bm5pbmcuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcmFjeS1nYy1jbGVhbnVwLW9mLWlkZW50aWZpZXIt
YWZ0ZXItbXV0YXRvci1zdG9wcy1ydW5uaW5nLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
c3RyZXNzL3JhY3ktZ2MtY2xlYW51cC1vZi1pZGVudGlmaWVyLWFmdGVyLW11dGF0b3Itc3RvcHMt
cnVubmluZy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACisvL0AgcnVuRGVmYXVs
dCgiLS1udW1iZXJPZkdDTWFya2Vycz0xIiwgIi0tdXNlREZHSklUPWZhbHNlIiwgIi0tdXNlTExJ
bnQ9ZmFsc2UiKQorCitmdW5jdGlvbiBmb28oKSB7CisgICAgZ2MoKTsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAgICAgIGNvbnN0IG8gPSB7IGY6IDQyIH07Cisg
ICAgICAgIG9bU3ltYm9sLnNwbGl0LmRlc2NyaXB0aW9uXTsKKyAgICB9Cit9CitmdW5jdGlvbiBi
YXIoKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAgbmV3IFVp
bnQ4QXJyYXkoMjAwMDAwKS5zdWJhcnJheSgpOworfQorCitmb28oKTsKK2JhcigpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTM5NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkwIEBACisyMDIw
LTAxLTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNl
IHVzZXMgb2YgQm94PElkZW50aWZpZXI+IHdpdGggYSBuZXcgQ2FjaGVhYmxlSWRlbnRpZmllciBj
bGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
NTU0NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTgwNDE4MDA+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGludHJvZHVjdGlvbiBvZiB0aGUg
dXNlIG9mIEJveDxJZGVudGlmaWVyPiBpcyB0byBnZXQgYXJvdW5kIGhhdmluZyB0bworICAgICAg
ICByZWYvZGVyZWYgdGhlIHVuZGVybHlpbmcgVW5pcWVkU3RyaW5nSW1wbCBpbiBJZGVudGlmaWVy
cyBmcm9tIHRoZSBjb21waWxlcgorICAgICAgICBhbmQgR0MgdGhyZWFkcy4gIEhvd2V2ZXIsIGl0
IHByb3ZlcyB0byBiZSBkaWZmaWN1bHQgdG8gY29udHJvbCB3aGVuIHRoZXNlCisgICAgICAgIEJv
eDxJZGVudGlmaWVyPnMgZ2V0IGRlc3RydWN0ZWQsIGFuZCByZXF1aXJlcyB0aGF0IHdlIGZpbmQg
YWxsIHRoZSBwbGFjZXMgaW4KKyAgICAgICAgdGhlIGNvbXBpZXIgYW5kIEdDIHRocmVhZHMgd2hl
cmUgdGhpcyBjYW4gaGFwcGVuLCBhbmQgYXBwbHkga2VlcCBhbGl2ZSB0YWN0aWNzCisgICAgICAg
IHRoZXJlIHRvIGRlZmVyIGRlc3RydWN0aW9uIG9mIHRoZSBCb3g8SWRlbnRpZmllcj4gdG8gdGhl
IG11dGF0b3IgdGhyZWFkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBieSByZXBs
YWNpbmcgdXNlcyBvZiBCb3g8SWRlbnRpZmllcj4gd2l0aCBhCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXIsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGEgdGFnZ2VkIHVuaW9uIG9mIGEgSlNDZWxs
KiBvciBhCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKi4gIFRoZSBKU0NlbGwqLCBpbiB0aGlz
IGNhc2UsIGNhbiBiZSBlaXRoZXIgYSBTeW1ib2wqIG9yIGEKKyAgICAgICAgSlNTdHJpbmcqIHRo
YXQgaXMgYmFja2VkIGJ5IGFuIGF0b20gc3RyaW5nLiAgVGhlIFZNIHJ1bnRpbWUgZW5zdXJlcyB0
aGF0IHdlJ2xsCisgICAgICAgIG5ldmVyIHRyeSB0byBjYWNoZSBhbiBpZGVudGlmaWVyIGZyb20g
YSBKU0NlbGwgdGhhdCBpcyBub3Qgb25lIG9mIHRoZXNlLiAgVGhpcworICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyIGNhbiBiZSBkZXN0cnVjdGVkIGZyb20gdGhlIGNvbXBpbGVyIG9yIEdDIHRo
cmVhZC4gIFNpbmNlIGl0CisgICAgICAgIGRvZXNuJ3QgaG9sZCBhIHJlZiBvZiB0aGUgdW5kZXJs
eWluZyBVbmlxdWVkU3RyaW5nSW1wbCwgaXQgd29uJ3QgdHJ5IHRvIGRlcmVmCisgICAgICAgIGl0
IG9uIGRlc3RydWN0aW9uLgorCisgICAgICAgIEluc3RlYWQsIHdlJ2xsIG5lZWQgdG8gdmlzaXQg
Q2FjaGVhYmxlSWRlbnRpZmllcnMgZHVyaW5nIEdDIHNjYW5zIHRvIGtlZXAgdGhlCisgICAgICAg
IEpTQ2VsbCBpbiBpdCBhbGl2ZSwgYW5kIHRoYXQgSlNDZWxsIHdpbGwsIGluIHR1cm4sIGtlZXAg
dGhlIHVuZGVybHlpbmcKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwgYWxpdmUuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhbHNvIGRvZXMgdGhlIGZvbGxvd2luZzoKKworICAgICAgICAxLiBBZGQg
YSB2aXNpdEFnZ3JlZ2F0ZSgpIG1ldGhvZCB0byBTdHJ1Y3R1cmVTdHViSW5mbywgUG9seW1vcnBo
aWNBY2Nlc3MsIGFuZAorICAgICAgICAgICBBY2Nlc3NDYXNlIHRvIHZpc2l0IHRoZSBDYWNoZWFi
bGVJZGVudGlmaWVyJ3MgSlNDZWxsIGlkZW50aWZpZXIuICBUaGlzCisgICAgICAgICAgIHZpc2l0
QWdncmVnYXRlKCkgaXMgY2FsbGVkIGZyb20gQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25n
UmVmZXJlbmNlcygpLgorCisgICAgICAgICAgIFdoZW4gd2Ugd3JpdGUgYmFycmllciBhIENvZGVC
bG9jaywgaXQgZ3VhcmFudGVlcyB0aGF0IGl0cyB2aXNpdEFnZ3JlZ2F0ZSgpCisgICAgICAgICAg
IG1ldGhvZHMgaXMgY2FsbGVkLiAgSG93ZXZlciwgaXQgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQg
aXRzIHByb3BhZ2F0ZVRyYW5zaXRpb25zKCkKKyAgICAgICAgICAgbWV0aG9kIHdpbGwgYmUgY2Fs
bGVkLiAgU2luY2UgdGhlIENhY2hlYWJsZUlkZW50aWZpZXIncyByZWZlcmVuY2UgdG8gYSBjZWxs
CisgICAgICAgICAgIHNob3VsZCBiZSBhIHN0cm9uZyByZWZlcmVuY2UsIHZpc2l0aW5nIGl0IHZp
YSBhIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZSgpCisgICAgICAgICAgIG1ldGhv
ZCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisgICAgICAgICAgIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NTQ0I2M3IGZvciBhbiBleGFtcGxlIG9mIHdo
eQorICAgICAgICAgICBwcm9wYWdhdGVUcmFuc2l0aW9ucygpIGRvZXNuJ3QgYWx3YXlzIGRvIHRo
ZSBqb2IuCisKKyAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5j
ZXMoKSBpcyBhbHNvIGluYXBwcm9wcmlhdGUgZm9yIHRoaXMKKyAgICAgICAgICAgYmVjYXVzZSBp
dCBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbGwgbWFya2luZyBpcyBkb25lLiAgSXQgaXMgYWxzbyBu
b3QgbWVhbnQKKyAgICAgICAgICAgdG8ga2VlcCBjZWxscyBhbGl2ZSBidXQgbWVyZWx5IGZvciBj
bGVhcmluZyB3ZWFrIHJlZmVyZW5jZXMgdG8gZGVhZCBjZWxscy4KKworICAgICAgICAyLiBBbHNv
IGFkZCB0byB2aXNpdEFnZ3JlZ2F0ZSgpIGZvciBNb2R1bGVOYW1lc3BhY2VEYXRhJ3MgbV9pZGVu
dGlmaWVyIGluCisgICAgICAgICAgIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcCgpLgorCisgICAg
ICAgIDMuIFJlbW92ZSBwcmV2aW91c2x5IGFwcGxpZWQga2VlcCBhbGl2ZSB0YWN0aWNzIHRvIHdv
cmsgYXJvdW5kIEJveDxJZGVudGlmaWVyPgorICAgICAgICAgICBkZXN0cnVjdGlvbi4gIFRoaXMg
YWxzbyByZXRvcmVzIHRoZSBhbGxvd2FuY2UgdG8gZGVzdHJ1Y3QgREZHOjpQbGFucyBvbiBhCisg
ICAgICAgICAgIGNvbXBpbGVyIHRocmVhZC4KKworICAgICAgICA0LiBBZGRlZCBhIEpTU3RyaW5n
OmdldFZhbHVlSW1wbCgpIGhlbHBlci4KKworICAgICAgICBGWUksIGhlcmUgYXJlIHRoZSByZWxl
dmFudCBtaWNyb2JlbmNobWFyayByZXN1bHRzIHdpdGggdGhpcyBwYXRjaCBhcHBsaWVkOgorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlICAgICAg
ICAgICAgICAgICAgICAgIG5ldworICAgICAgICBnZXQtYnktdmFsLXBvbHltb3JwaGljLWljLTkg
ICAgICAyMDYuODczMSstMy4zMDgyICAgICBeICAgIDE5MS4xOTE3Ky0yLjgwMTEgICAgICAgIF4g
ZGVmaW5pdGVseSAxLjA4MjB4IGZhc3RlcgorICAgICAgICBnZXQtYnktdmFsLXBvbHltb3JwaGlj
LWljLTggICAgICAxNTAuNjk0MystMC41NTI1ICAgICBeICAgIDEzNS41ODQ0Ky0zLjQ0NTIgICAg
ICAgIF4gZGVmaW5pdGVseSAxLjExMTR4IGZhc3RlcgorICAgICAgICBnZXQtYnktdmFsLXBvbHlt
b3JwaGljLWljLTMgICAgICAxNDcuOTYzMSstMy4wNDU3ICAgICBeICAgIDEzNy41NzM2Ky00Ljg1
NjggICAgICAgIF4gZGVmaW5pdGVseSAxLjA3NTV4IGZhc3RlcgorICAgICAgICBnZXQtYnktdmFs
LXBvbHltb3JwaGljLWljLTcgICAgICAxMDEuODQwNSstMi4yNTgxICAgICBeICAgICA5MC41ODU5
Ky0wLjY0NDUgICAgICAgIF4gZGVmaW5pdGVseSAxLjEyNDJ4IGZhc3RlcgorICAgICAgICBnZXQt
YnktdmFsLXBvbHltb3JwaGljLWljLTYgICAgIDE3ODUuODEyMSstNDIuNzAyNSAgICBeICAgIDEz
My43MzExKy00Ljk3MzUgICAgICAgIF4gZGVmaW5pdGVseSAxMy4zNTM4eCBmYXN0ZXIKKyAgICAg
ICAgZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy0yICAgICAgMjQ3LjQ0NjkrLTMuMDM3MCAgICAg
XiAgICAyMjEuNzMyNCstMi42OTcyICAgICAgICBeIGRlZmluaXRlbHkgMS4xMTYweCBmYXN0ZXIK
KyAgICAgICAgZ2V0LWJ5LXZhbC1wb2x5bW9ycGhpYy1pYy01ICAgICAgMzQzLjAzMzErLTcuNTQ0
MyAgICAgICAgICAzMjUuNzQ1NCstMTAuOTk5MSAgICAgICAgIG1pZ2h0IGJlIDEuMDUzMXggZmFz
dGVyCisgICAgICAgIGdldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtMSAgICAgIDIxMi4xNzQ3Ky00
LjI1MTUgICAgIF4gICAgMTk4Ljg3MDgrLTQuNDAyOSAgICAgICAgXiBkZWZpbml0ZWx5IDEuMDY2
OXggZmFzdGVyCisgICAgICAgIGdldC1ieS12YWwtcG9seW1vcnBoaWMtaWMtNCAgICAgMzUxOS40
MzgyKy0yMS4yMDQzICAgIF4gICAgMzQ5LjEzNTMrLTUuNzczMCAgICAgICAgXiBkZWZpbml0ZWx5
IDEwLjA4MDR4IGZhc3RlcgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6QWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyk6
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNvbW1pdCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhblJlcGxhY2UgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkdW1w
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dmlzaXRBZ2dyZWdhdGUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAg
IChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQWNj
ZXNzQ2FzZS5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp1aWQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjppZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5z
aXRpb25zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVm
ZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAg
ICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpH
ZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFy
aWFudDo6bWFya0lmQ2hlYXApOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6ZHVtcElu
Q29udGV4dCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaDoKKyAg
ICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpHZXRCeUlkVmFyaWFudDo6b3ZlcmxhcHMpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5
U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQp
OgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6
OkdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayk6
CisgICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcCk6CisgICAgICAgIChKU0M6
OkdldEJ5U3RhdHVzOjpzaW5nbGVJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9HZXRCeVN0YXR1cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nh
c2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3Jl
YXRlKToKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmg6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpJ
bnN0YW5jZU9mQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkFjY2Vzc0Nhc2UpOgorICAgICAgICAqIGJ5
dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKToKKyAgICAg
ICAgKEpTQzo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKiBi
eXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUv
TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6Ok1vZHVsZU5hbWVz
cGFjZUFjY2Vzc0Nhc2U6Ok1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlND
OjpNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAqIGJ5dGVjb2Rl
L01vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFn
Z3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToK
KyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpQcm94eWFibGVBY2Nl
c3NDYXNlOjpQcm94eWFibGVBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6UHJveHlhYmxlQWNj
ZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNl
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlU3R1YkluZm86OmFkZEFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpnZXRCeUlkU2Vs
ZklkZW50aWZpZXIpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlR2V0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdE
ZXNpcmVkSWRlbnRpZmllcnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRJZGVudGlm
aWVyczo6ZW5zdXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSWRlbnRpZmllcnM6OmF0
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSWRlbnRpZmllcnM6OnJlYWxseUFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjpwcm9jZXNzQ29kZUJs
b2NrSWRlbnRpZmllcnNJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Rlc2ly
ZWRJZGVudGlmaWVycy5oOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpQbGFuOjp+UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2FuY2VsKToK
KyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmtlZXBB
bGl2ZUlkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSk6
CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0pOgorICAg
ICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpkZWxldGVDYW5jZWxsZWRQbGFuc0ZvclZNKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUdldEJ5KToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEdldEJ5KToKKyAgICAgICAgKEpT
Qzo6dHJ5Q2FjaGVBcnJheUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVJbnN0YW5j
ZU9mKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlm
aWVyOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OkNhY2hlYWJsZUlk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjppc1VpZCBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2VsbCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmlzU3ltYm9sIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAg
ICAgICogcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6Q2FjaGVhYmxlSWRlbnRpZmllcik6CisgICAg
ICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmNlbGwgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWFibGVJZGVudGlmaWVyOjp1aWQgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWFi
bGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKToKKyAgICAgICAgKEpTQzo6
Q2FjaGVhYmxlSWRlbnRpZmllcjo6aXNTeW1ib2xDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FjaGVhYmxlSWRlbnRpZmllcjo6aXNTdHJpbmdDZWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FjaGVhYmxlSWRlbnRpZmllcjo6c2V0Q2VsbEJpdHMpOgorICAgICAgICAoSlNDOjpDYWNoZWFi
bGVJZGVudGlmaWVyOjpzZXRVaWRCaXRzKToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRp
Zmllcjo6dmlzaXRBZ2dyZWdhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVu
dGlmaWVyOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRp
Zmllcjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DYWxsQmFzZSk6CisgICAgICAgICogcnVu
dGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0VmFsdWVJbXBsIGNv
bnN0KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmVuc3Vy
ZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlZNOjphZGRJ
bXB1cmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlZNOjpyZWdpc3RlcldhdGNocG9pbnRGb3JJ
bXB1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDIw
LTAxLTAyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGlm
eSBTdHJpbmdCdWlsZGVyIEFQSS9hbGlnbiB3aXRoIG1ha2VTdHJpbmcgYnkgcmVtb3ZpbmcgYXBw
ZW5kRml4ZWQqIGZ1bmN0aW9ucyBhbmQgdXNpbmcgRm9ybWF0TnVtYmVyIHN0cnVjdCBpbnN0ZWFk
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNTM5NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTc4NSw2ICs3ODUsOCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBCiAgICAgcnVudGltZS9CeXRlY29kZUNhY2hlRXJyb3IuaAogICAgIHJ1bnRpbWUvQ2FjaGVQ
YXlsb2FkLmgKICAgICBydW50aW1lL0NhY2hlVXBkYXRlLmgKKyAgICBydW50aW1lL0NhY2hlYWJs
ZUlkZW50aWZpZXIuaAorICAgIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAog
ICAgIHJ1bnRpbWUvQ2FjaGVkQnl0ZWNvZGUuaAogICAgIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuaAog
ICAgIHJ1bnRpbWUvQ2FnZWRCYXJyaWVyUHRyLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzI3LDYgKzcyNyw3IEBAIHJ1bnRpbWUvQnl0ZWNvZGVD
YWNoZUVycm9yLmNwcAogcnVudGltZS9DYWxsRGF0YS5jcHAKIHJ1bnRpbWUvQ2FjaGVQYXlsb2Fk
LmNwcAogcnVudGltZS9DYWNoZVVwZGF0ZS5jcHAKK3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
ci5jcHAKIHJ1bnRpbWUvQ2FjaGVkQnl0ZWNvZGUuY3BwCiBydW50aW1lL0NhY2hlZFR5cGVzLmNw
cAogcnVudGltZS9DYXRjaFNjb3BlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOTE0LDYg
KzE5MTQsOCBAQAogCQlGRTc0OTdFNjIwOTAwMUIxMDAwMzU2NUIgLyogSlNDUHRyVGFnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTc0OTdFNTIwOTAw
MUIwMDAwMzU2NUIgLyogSlNDUHRyVGFnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU3QzQxOTYxQjk3RkM0QjAwRjRENTk4IC8qIFBpbmdQb25n
U3RhY2tPdmVyZmxvd1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVy
Zmxvd1Rlc3QuY3BwICovOyB9OwogCQlGRTgwQzE5NzFENzc1Q0REMDA4NTEwQzAgLyogQ2F0Y2hT
Y29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4
MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRThERTU0QjIzQUMxREFEMDA1QzkxNDIg
LyogQ2FjaGVhYmxlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU4REU1NEEyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50
aWZpZXIuaCAqLzsgfTsKKwkJRkU4REU1NEQyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllcklu
bGluZXMuaCAqLzsgfTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5
OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlGRUEw
ODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJy
ZWFrcG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3
QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUxNjEsNiArNTE2Myw5IEBACiAJCUZFODBD
MTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhdGNoU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkU4MEMxOTgxRDc3NUZCNDAwODUxMEMwIC8qIENhdGNoU2NvcGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2F0Y2hTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFODBDMTlBMUQ3NzY4RkQwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExv
Y2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlv
bkV2ZW50TG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRThERTU0
QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFOERFNTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVu
dGlmaWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRThE
RTU0RTIzQUMzQThFMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDYWNoZWFibGVJZGVudGlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkU5OEI1QjYxQkI5QUUxMTAwNzNFN0E2IC8qIEpJVFN1YkdlbmVyYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdWJHZW5lcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OUIyNDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJ
VE5lZ0dlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
SVROZWdHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjk5OSw2
ICs3MDA0LDkgQEAKIAkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5s
aW5lcy5oICovLAogCQkJCTE0MzU5NTIwMjJBNTIxQ0EwMEU4MDg2RCAvKiBCeXRlY29kZUNhY2hl
RXJyb3IuY3BwICovLAogCQkJCTE0MzU5NTFGMjJBNTIxQ0EwMEU4MDg2RCAvKiBCeXRlY29kZUNh
Y2hlRXJyb3IuaCAqLywKKwkJCQlGRThERTU0RTIzQUMzQThFMDA1QzkxNDIgLyogQ2FjaGVhYmxl
SWRlbnRpZmllci5jcHAgKi8sCisJCQkJRkU4REU1NEEyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hl
YWJsZUlkZW50aWZpZXIuaCAqLywKKwkJCQlGRThERTU0QzIzQUMxRTg2MDA1QzkxNDIgLyogQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaCAqLywKIAkJCQkxNDhCMTQxOTIyNUREMUU5MDBENkU5
OTggLyogQ2FjaGVkQnl0ZWNvZGUuY3BwICovLAogCQkJCTE0NENBMzRGMjIxRjAzNzkwMDgxNzc4
OSAvKiBDYWNoZWRCeXRlY29kZS5oICovLAogCQkJCTE0REFGQTQ1MjFFM0I4NzEwMDRCNjhGNyAv
KiBDYWNoZWRUeXBlcy5jcHAgKi8sCkBAIC04ODQ4LDYgKzg4NTYsNyBAQAogCQkJCTBGNUNGOTg0
MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0MEU0QTgxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkU4REU1NEIyM0FDMURBRDAwNUM5MTQyIC8qIENhY2hlYWJsZUlk
ZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDBFNEE5MUM0OTdGNzQwMEE1NzdGQSAv
KiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMzg3OTAxQkZCQzQ0RDAw
RTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
Q0FCQzkxREI1NEE3QTAwMDhFODNCIC8qIEFpclBhZEludGVyZmVyZW5jZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDI0MSw2ICsxMDI1MCw3IEBACiAJCQkJNjU4RDNBNTYxOTYzODI2ODAwM0M0NUQ2
IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNTkzMkE4MTgzQzVBMjYw
MEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUFFMkM0MURG
NEYyODAwMDY2RUZFMSAvKiBWTUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOERFNTRE
MjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRUM1Nzk3MzIzMTA1QjUxMDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTZGNTZERTFFNjRFQUQ2MDBEMTc4MDEgLyog
Vk1UcmFwcy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNTM5NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDYWxs
TGlua0luZm8uaCIKICNpbmNsdWRlICJET01KSVRHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJE
aXJlY3RBcmd1bWVudHMuaCIKQEAgLTU0LDE4ICs1NSwxOCBAQCBuYW1lc3BhY2UgQWNjZXNzQ2Fz
ZUludGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAK
LUFjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBl
IHR5cGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJv
dG90eXBlQWNjZXNzQ2hhaW4pCitBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiAgICAgOiBtX3R5cGUodHlw
ZSkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fcG9seVByb3RvQWNjZXNzQ2hhaW4o
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpCi0gICAgLCBtX2lkZW50aWZpZXIoQm94PElk
ZW50aWZpZXI+OjpjcmVhdGUoaWRlbnRpZmllcikpCisgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKIHsKICAgICBtX3N0cnVjdHVyZS5zZXRNYXlCZU51bGwodm0sIG93bmVyLCBzdHJ1Y3R1
cmUpOwogICAgIG1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIFJFTEVBU0VfQVNT
RVJUKG1fY29uZGl0aW9uU2V0LmlzVmFsaWQoKSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlIHR5cGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4g
cHJvdG90eXBlQWNjZXNzQ2hhaW4pCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNz
Q2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNj
ZXNzQ2hhaW4pCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBJbkhpdDoKQEAgLTEw
NCw3ICsxMDUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6CiB9
CiAKIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIENhY2hlYWJsZUlkZW50aWZp
ZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vz
c0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChvbGRT
dHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwpAQCAtMTI1LDcgKzEyNiw3
IEBAIEFjY2Vzc0Nhc2U6On5BY2Nlc3NDYXNlKCkKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbygKLSAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIENhY2hlYWJsZUlkZW50
aWZpZXIgaWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIHN3
aXRjaCAoc3R1YkluZm8uY2FjaGVUeXBlKCkpIHsKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6CkBAIC0xMzQsMTggKzEzNSwyMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
QWNjZXNzQ2FzZTo6CiAKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7CisgICAg
ICAgIEFTU0VSVCghaWRlbnRpZmllci5pc0NlbGwoKSk7CiAgICAgICAgIHJldHVybiBBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5
SWRTZWxmLm9mZnNldCwgc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdl
dCgpKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOworICAgICAgICBBU1NFUlQo
IWlkZW50aWZpZXIuaXNDZWxsKCkpOwogICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRl
KHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0
LCBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAg
Y2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOworICAgICAgICBBU1NFUlQoIWlkZW50aWZpZXIu
aXNDZWxsKCkpOwogICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwg
QWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIGlkZW50aWZpZXIpOwogCiAgICAgY2FzZSBDYWNoZVR5
cGU6OlN0cmluZ0xlbmd0aDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uaGFzQ29u
c3RhbnRJZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKCFpZGVudGlmaWVyLmlzQ2VsbCgpKTsK
ICAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6
OlN0cmluZ0xlbmd0aCwgaWRlbnRpZmllcik7CiAKICAgICBkZWZhdWx0OgpAQCAtMTgwLDExICsx
ODUsMTEgQEAgVmVjdG9yPFdhdGNocG9pbnRTZXQqLCAyPiBBY2Nlc3NDYXNlOjpjbwogICAgIFZl
Y3RvcjxXYXRjaHBvaW50U2V0KiwgMj4gcmVzdWx0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdGhpcy0+c3RydWN0dXJlKCk7CiAKLSAgICBpZiAoIW1faWRlbnRpZmllci0+aXNOdWxsKCkp
IHsKKyAgICBpZiAobV9pZGVudGlmaWVyKSB7CiAgICAgICAgIGlmICgoc3RydWN0dXJlICYmIHN0
cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICAgICAgfHwg
bV9jb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAg
ICB8fCAobV9wb2x5UHJvdG9BY2Nlc3NDaGFpbiAmJiBtX3BvbHlQcm90b0FjY2Vzc0NoYWluLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh2bS5lbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHkoKm1faWRlbnRpZmllcikp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh2bS5lbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1w
dXJlUHJvcGVydHkobV9pZGVudGlmaWVyLnVpZCgpKSk7CiAgICAgfQogCiAgICAgaWYgKGFkZGl0
aW9uYWxTZXQoKSkKQEAgLTU1MCw3ICs1NTUsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhblJlcGxh
Y2UoY29uc3QgQWNjZXNzCiAgICAgLy8gTm90ZSB0aGF0IGlmIEEtPmd1YXJkZWRCeVN0cnVjdHVy
ZUNoZWNrKCkgJiYgQi0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSB0aGVuCiAgICAgLy8gQS0+
Y2FuUmVwbGFjZShCKSA9PSBCLT5jYW5SZXBsYWNlKEEpLgogCi0gICAgaWYgKCptX2lkZW50aWZp
ZXIgIT0gKm90aGVyLm1faWRlbnRpZmllcikKKyAgICBpZiAobV9pZGVudGlmaWVyICE9IG90aGVy
Lm1faWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHN3aXRjaCAo
dHlwZSgpKSB7CkBAIC02NDgsNyArNjUzLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIAogCiAgICAgb3V0LnByaW50KGNvbW1hLCBtX3N0YXRlKTsKIAotICAgIG91
dC5wcmludChjb21tYSwgImlkZW50ID0gJyIsICptX2lkZW50aWZpZXIsICInIik7CisgICAgb3V0
LnByaW50KGNvbW1hLCAiaWRlbnQgPSAnIiwgbV9pZGVudGlmaWVyLCAiJyIpOwogICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAib2Zmc2V0
ID0gIiwgbV9vZmZzZXQpOwogCkBAIC03MTAsNiArNzE1LDExIEBAIGJvb2wgQWNjZXNzQ2FzZTo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIEFj
Y2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorewor
ICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKwogdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0
YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKQEAgLTcyOCw3ICs3
MzgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKIAogICAgIGlmIChyZXF1aXJlc0lkZW50aWZp
ZXJOYW1lTWF0Y2goKSAmJiAhc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lkZW50aWZpZXItPmlzTnVsbCgpKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9pZGVudGlmaWVyKTsKICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
c3RhdGUudS5wcm9wZXJ0eUdQUjsKICAgICAgICAgLy8gbm9uLXJvcGUgc3RyaW5nIGNoZWNrIGRv
bmUgaW5zaWRlIHBvbHltb3JwaGljIGFjY2Vzcy4KIApAQCAtMTY2Niw3ICsxNjc2LDcgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgLy8gRklY
TUU6IFJldmlzaXQgSlNHbG9iYWxPYmplY3QuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjA0CiAgICAgICAgICAgICBpZiAobV90eXBl
ID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlcikg
ewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lkZW50aWZpZXItPmlzTnVsbCgp
KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2lkZW50aWZpZXIpOwogICAgICAg
ICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
ZWxsVmFsdWUoYmFzZUZvckN1c3RvbSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmgJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsy
NywxMCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUG9seVByb3RvQWNjZXNzQ2hhaW4uaCIK
LSNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTE0MCwxNCArMTQwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlVHlwZT4obmV3IEFjY2Vzc0Nhc2VUeXBlKGFy
Z3VtZW50cy4uLikpOwogICAgIH0KIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5T2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUsIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0ID0gaW52YWxpZE9mZnNldCwK
ICAgICAgICAgU3RydWN0dXJlKiA9IG51bGxwdHIsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksIHN0ZDo6dW5pcXVlX3B0cjxQ
b2x5UHJvdG9BY2Nlc3NDaGFpbj4gPSBudWxscHRyKTsKIAogICAgIC8vIFRoaXMgY3JlYXRlIG1l
dGhvZCBzaG91bGQgYmUgdXNlZCBmb3IgdHJhbnNpdGlvbnMuCi0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVu
dGlmaWVyJiwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAorICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25l
ciwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
KTsKICAgICAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGZyb21TdHJ1
Y3R1cmVTdHViSW5mbyhWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKIAogICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZTsgfQpAQCAtMjMzLDkgKzIzMyw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBUeXBlZEFy
cmF5VHlwZSB0b1R5cGVkQXJyYXlUeXBlKEFjY2Vzc1R5cGUpOwogCi0gICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllci0+aW1wbCgpOyB9Ci0gICAg
Qm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7
IH0KLQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX2lkZW50
aWZpZXIudWlkKCk7IH0KKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2
b2lkIGNoZWNrQ29uc2lzdGVuY3koU3RydWN0dXJlU3R1YkluZm8mKTsKQEAgLTI0NCw3ICsyNDMs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKIHByb3RlY3RlZDoKLSAgICBBY2Nlc3NDYXNlKFZN
JiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5
T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0
ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4pOworICAgIEFjY2Vzc0Nhc2UoVk0m
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBQcm9wZXJ0
eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBz
dGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKICAgICBBY2Nlc3NDYXNlKEFj
Y2Vzc0Nhc2UmJikgPSBkZWZhdWx0OwogICAgIEFjY2Vzc0Nhc2UoY29uc3QgQWNjZXNzQ2FzZSYg
b3RoZXIpCiAgICAgICAgIDogbV90eXBlKG90aGVyLm1fdHlwZSkKQEAgLTI2OSw2ICsyNjgsNyBA
QCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JF
YWNoRGVwZW5kZW50Q2VsbChjb25zdCBGdW5jdG9yJikgY29uc3Q7CiAKKyAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJikgY29uc3Q7CiAgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBj
b25zdDsKICAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7
CiAKQEAgLTMxMSw3ICszMTEsNyBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBv
bHlQcm90b0FjY2Vzc0NoYWluPiBtX3BvbHlQcm90b0FjY2Vzc0NoYWluOwogCi0gICAgQm94PElk
ZW50aWZpZXI+IG1faWRlbnRpZmllcjsgLy8gV2UgdXNlIHRoaXMgaW5kaXJlY3Rpb24gc28gdGhl
IGNvbmN1cnJlbnQgY29tcGlsZXIgY2FuIGNvbmN1cnJlbnRseSByZWYgdGhpcyBCb3guCisgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAyNTM5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5OSw4ICsxMDk5LDYgQEAgQnl0ZWNvZGVJ
bmRleCBDb2RlQmxvY2s6OmJ5dGVjb2RlSW5kZXhGbwogCiB2b2lkIENvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotCiAgICAgVk0mIHZtID0gKm1f
dm07CiAKICAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspIHsK
QEAgLTE2NTEsNiArMTY0OSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25n
UmVmZXIKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAg
ICBmb3IgKEJ5VmFsSW5mbyogYnlWYWxJbmZvIDogaml0RGF0YS0+bV9ieVZhbEluZm9zKQogICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoYnlWYWxJbmZvLT5jYWNoZWRTeW1ib2wpOworICAgICAg
ICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9z
KQorICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIH0K
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZh
cmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFZhcmlhbnQu
aCIKIAorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
Q2FsbExpbmtTdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CkBAIC0zMyw3ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJ
ZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KAotICAgIEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVy
LAorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwKICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsCiAgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cywKQEAgLTExMCw3ICsxMTEsNyBAQCBi
b29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgaWYgKCEhbV9pZGVu
dGlmaWVyICE9ICEhb3RoZXIubV9pZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAobV9pZGVudGlmaWVyICYmICgqbV9pZGVudGlmaWVyICE9ICpvdGhlci5tX2lkZW50
aWZpZXIpKQorICAgIGlmIChtX2lkZW50aWZpZXIgJiYgKG1faWRlbnRpZmllciAhPSBvdGhlci5t
X2lkZW50aWZpZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9vZmZzZXQg
IT0gb3RoZXIubV9vZmZzZXQpCkBAIC0xNTgsNiArMTU5LDcgQEAgYm9vbCBHZXRCeUlkVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogCiB2b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVh
cChTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBtX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CiAgICAgbV9zdHJ1Y3R1cmVTZXQubWFya0lmQ2hlYXAodmlzaXRvcik7CiB9
CiAKQEAgLTE4Miw3ICsxODQsNyBAQCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3Ry
ZWFtJiBvCiB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIG91dC5wcmludCgiPCIpOwot
ICAgIG91dC5wcmludCgiaWQ9JyIsIG1faWRlbnRpZmllciA/IG1faWRlbnRpZmllci0+aW1wbCgp
IDogU3RyaW5nSW1wbDo6ZW1wdHkoKSwgIicsICIpOworICAgIG91dC5wcmludCgiaWQ9JyIsIG1f
aWRlbnRpZmllciwgIicsICIpOwogICAgIGlmICghaXNTZXQoKSkgewogICAgICAgICBvdXQucHJp
bnQoImVtcHR5PiIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjUzOTc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ2Fj
aGVhYmxlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVk
ZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNl
dC5oIgpAQCAtNDQsNyArNDUsNyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgR2V0QnlJZFZhcmlhbnQoCi0gICAgICAg
IEJveDxJZGVudGlmaWVyPiwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICAgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKICAgICAgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiA9IG51bGxwdHIsCkBAIC04MiwxNCAr
ODMsMTQgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAK
LSAgICBCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRp
ZmllcjsgfQorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1faWRlbnRpZmllcjsgfQogCiAgICAgYm9vbCBvdmVybGFwcyhjb25zdCBHZXRCeUlkVmFy
aWFudCYgb3RoZXIpCiAgICAgewogICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFvdGhl
ci5tX2lkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKG1f
aWRlbnRpZmllcikgewotICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllci0+aW1wbCgpICE9IG90
aGVyLm1faWRlbnRpZmllci0+aW1wbCgpKQorICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllciAh
PSBvdGhlci5tX2lkZW50aWZpZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5zdHJ1
Y3R1cmVTZXQoKSk7CkBAIC0xMDcsNyArMTA4LDcgQEAgcHJpdmF0ZToKICAgICBKU0Z1bmN0aW9u
KiBtX2ludHJpbnNpY0Z1bmN0aW9uOwogICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4g
bV9jdXN0b21BY2Nlc3NvckdldHRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NQXR0cmlidXRl
QW5ub3RhdGlvbj4gbV9kb21BdHRyaWJ1dGU7Ci0gICAgQm94PElkZW50aWZpZXI+IG1faWRlbnRp
ZmllcjsgLy8gV2UgdXNlIHRoaXMgaW5kaXJlY3Rpb24gdG8gYWxsb3cgcmVmL2RlcmVmIGluIHRo
ZSBjb25jdXJyZW50IGNvbXBpbGVyLgorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlm
aWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGlu
ZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVz
LmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgpAQCAtNTIsNyArNTMsNyBA
QCBib29sIEdldEJ5U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IEdlCiAgICAgcmV0dXJuIGFw
cGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKIH0KIAotR2V0QnlTdGF0
dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVu
dGlmaWVycykKK0dldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVC
bG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAg
IFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7CiAgICAgCkBAIC05MSw4ICs5Miw2IEBAIEdl
dEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW4KICAgICB9CiAgICAgfQogCi0g
ICAgQVNTRVJUX1VOVVNFRCh0cmFja0lkZW50aWZpZXJzLCB0cmFja0lkZW50aWZpZXJzID09IFRy
YWNrSWRlbnRpZmllcnM6Ok5vKTsgLy8gV2UgY291bGQgbWFrZSB0aGlzIHdvcmsgaW4gdGhlIGZ1
dHVyZSwgYnV0IG5vYm9keSBuZWVkcyBpdCByaWdodCBub3cuCi0KICAgICBpZiAoIXN0cnVjdHVy
ZUlEKQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwog
CkBAIC0xMTMsNyArMTEyLDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGcm9t
TExJbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpj
b21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1
czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJ
ZGVudGlmaWVycywgSWRlbnRpZmllcktlZXBBbGl2ZSYga2VlcEFsaXZlKQorR2V0QnlTdGF0dXMg
R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1
c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4aXQs
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKIHsKICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAKQEAgLTEy
MSw3ICsxMjAsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlCiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm9XaXRo
b3V0RXhpdFNpdGVGZWVkYmFjaygKLSAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBtYXAu
Z2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRh
LCB0cmFja0lkZW50aWZpZXJzLCBrZWVwQWxpdmUpOworICAgICAgICBsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm8sIGNhbGxF
eGl0U2l0ZURhdGEpOwogICAgIAogICAgIGlmIChkaWRFeGl0KQogICAgICAgICByZXR1cm4gcmVz
dWx0LnNsb3dWZXJzaW9uKCk7CkBAIC0xMjksMTEgKzEyOCwxMCBAQCBHZXRCeVN0YXR1cyBHZXRC
eVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlCiAgICAgVU5VU0VEX1BBUkFNKG1hcCk7CiAgICAgVU5V
U0VEX1BBUkFNKGRpZEV4aXQpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRhKTsK
LSAgICBVTlVTRURfUEFSQU0oa2VlcEFsaXZlKTsKICNlbmRpZgogCiAgICAgaWYgKCFyZXN1bHQp
Ci0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2Rl
SW5kZXgsIHRyYWNrSWRlbnRpZmllcnMpOworICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTElu
dChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtMTY4LDcgKzE2Niw3IEBAIEdldEJ5U3RhdHVzOjpHZXRCeVN0YXR1cyhjb25zdCBN
b2R1bGVOYW0KIH0KIAogR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5m
b1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAotICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhLCBUcmFj
a0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMsIElkZW50aWZpZXJLZWVwQWxpdmUmIGtlZXBB
bGl2ZSkKKyAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENhbGxMaW5rU3RhdHVz
OjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKIHsKICAgICBTdHViSW5mb1N1bW1hcnkg
c3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHN0dWJJbmZvKTsKICAgICBpZiAo
IWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKQEAgLTE4NiwxMiArMTg0LDkgQEAgR2V0QnlTdGF0dXMg
R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
CiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5
KSwgKnN0dWJJbmZvKTsKLSAgICAgICAgQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIgPSBzdHVi
SW5mby0+Z2V0QnlJZFNlbGZJZGVudGlmaWVyKCk7Ci0gICAgICAgIGtlZXBBbGl2ZShpZGVudGlm
aWVyKTsKLSAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXItPmltcGwo
KTsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmdl
dEJ5SWRTZWxmSWRlbnRpZmllcigpOworICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
aWRlbnRpZmllci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodWlkKTsKLSAgICAgICAg
aWYgKHRyYWNrSWRlbnRpZmllcnMgPT0gVHJhY2tJZGVudGlmaWVyczo6Tm8pCi0gICAgICAgICAg
ICBpZGVudGlmaWVyID0gbnVsbHB0cjsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudChX
VEZNb3ZlKGlkZW50aWZpZXIpKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAgICAg
ICAgdmFyaWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0
cmlidXRlcyk7CkBAIC0yMTIsNyArMjA3LDYgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSQogICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlz
dC0+YXQoMCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgQWNjZXNzQ2FzZTo6TW9kdWxlTmFtZXNwYWNlTG9hZDoKLSAgICAgICAgICAgICAg
ICBrZWVwQWxpdmUoYWNjZXNzLmlkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEdldEJ5U3RhdHVzKGFjY2Vzcy5hczxNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlPigpKTsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTYsMTIgKzI5
MCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAg
ICAgICAgICB9IH0KIAogICAgICAgICAgICAgICAgIEFTU0VSVCgoQWNjZXNzQ2FzZTo6TWlzcyA9
PSBhY2Nlc3MudHlwZSgpIHx8IGFjY2Vzcy5pc0N1c3RvbSgpKSA9PSAoYWNjZXNzLm9mZnNldCgp
ID09IGludmFsaWRPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBCb3g8SWRlbnRpZmllcj4gaWRl
bnRpZmllcjsKLSAgICAgICAgICAgICAgICBpZiAodHJhY2tJZGVudGlmaWVycyA9PSBUcmFja0lk
ZW50aWZpZXJzOjpZZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGFjY2Vz
cy5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGtlZXBBbGl2ZShpZGVudGlmaWVy
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFy
aWFudChpZGVudGlmaWVyLCBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0YXR1
cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50KGFjY2Vz
cy5pZGVudGlmaWVyKCksIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVz
Lm9mZnNldCgpLAogICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlv
blNldCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSwKICAgICAgICAgICAgICAgICAgICAgaW50
cmluc2ljRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0dGVy
LApAQCAtMzM2LDcgKzMyNSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9y
U3R1YkkKIAogR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsCi0gICAgSUNTdGF0
dXNDb250ZXh0U3RhY2smIGljQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFRy
YWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycywgSWRlbnRpZmllcktlZXBBbGl2ZSYga2Vl
cEFsaXZlKQorICAgIElDU3RhdHVzQ29udGV4dFN0YWNrJiBpY0NvbnRleHRTdGFjaywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQogewogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURh
dGEgY2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRh
KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwpAQCAtMzUxLDcgKzM0MCw3IEBAIEdldEJ5
U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIC8vIGlubGlu
ZWQgYW5kIG5vdC1pbmxpbmVkLgogICAgICAgICAgICAgICAgIEdldEJ5U3RhdHVzIGJhc2VsaW5l
UmVzdWx0ID0gY29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywg
YmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsCi0gICAgICAgICAgICAgICAgICAg
IGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMsIGtlZXBBbGl2ZSk7CisgICAgICAg
ICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOwogICAgICAgICAgICAgICAgIGJhc2VsaW5l
UmVzdWx0Lm1lcmdlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lUmVz
dWx0OwogICAgICAgICAgICAgfQpAQCAtMzY1LDcgKzM1NCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xvY2sp
OwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0
U2l0ZUZlZWRiYWNrKAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9wdGlt
aXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhLCB0cmFja0lk
ZW50aWZpZXJzLCBrZWVwQWxpdmUpOworICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIGNvbnRl
eHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRh
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKQEAgLTM3NSw3ICszNjQsNyBAQCBHZXRC
eVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIHJldHVybiBibGVz
cygqc3RhdHVzLmdldFN0YXR1cyk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBjb21wdXRlRm9y
KHByb2ZpbGVkQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LCBjYWxs
RXhpdFNpdGVEYXRhLCB0cmFja0lkZW50aWZpZXJzLCBrZWVwQWxpdmUpOworICAgIHJldHVybiBj
b21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRF
eGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKIH0KIAogR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNv
bXB1dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CkBAIC01MTYsNiArNTA1LDggQEAgdm9pZCBHZXRCeVN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZQogCiB2b2lkIEdldEJ5U3RhdHVzOjptYXJrSWZDaGVhcChTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKKyAgICBpZiAoaXNNb2R1bGVOYW1lc3BhY2UoKSkKKyAgICAgICAgbV9tb2R1bGVOYW1l
c3BhY2VEYXRhLT5tX2lkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgZm9y
IChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFyaWFudHMpCiAgICAgICAgIHZhcmlhbnQu
bWFya0lmQ2hlYXAodmlzaXRvcik7CiB9CkBAIC01MzUsMjggKzUyNiwyMiBAQCBib29sIEdldEJ5
U3RhdHVzOjpmaW5hbGl6ZShWTSYgdm0pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUJveDxJZGVu
dGlmaWVyPiBHZXRCeVN0YXR1czo6c2luZ2xlSWRlbnRpZmllcigpIGNvbnN0CitDYWNoZWFibGVJ
ZGVudGlmaWVyIEdldEJ5U3RhdHVzOjpzaW5nbGVJZGVudGlmaWVyKCkgY29uc3QKIHsKLSAgICBp
ZiAoaXNNb2R1bGVOYW1lc3BhY2UoKSkgewotICAgICAgICBCb3g8SWRlbnRpZmllcj4gcmVzdWx0
ID0gbV9tb2R1bGVOYW1lc3BhY2VEYXRhLT5tX2lkZW50aWZpZXI7Ci0gICAgICAgIGlmICghcmVz
dWx0IHx8IHJlc3VsdC0+aXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKGlzTW9kdWxlTmFtZXNwYWNlKCkp
CisgICAgICAgIHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1faWRlbnRpZmllcjsKIAog
ICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBCb3g8SWRlbnRpZmllcj4gcmVzdWx0ID0gbV92YXJpYW50cy5maXJzdCgpLmlkZW50aWZp
ZXIoKTsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHJlc3VsdCA9IG1fdmFyaWFudHMuZmlyc3Qo
KS5pZGVudGlmaWVyKCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGlmIChyZXN1bHQtPmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1fdmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgQm94PElkZW50aWZpZXI+IHVpZCA9IG1fdmFyaWFudHNbaV0uaWRlbnRpZmllcigpOwotICAg
ICAgICBpZiAoIXVpZCkKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0g
bV92YXJpYW50c1tpXS5pZGVudGlmaWVyKCk7CisgICAgICAgIGlmICghaWRlbnRpZmllcikKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZiAoKnVpZCAhPSAqcmVzdWx0KQor
ICAgICAgICBpZiAoaWRlbnRpZmllciAhPSByZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNTM5NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNhY2hlYWJsZUlk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkNvZGVP
cmlnaW4uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCkBAIC02NiwxMSArNjcsNiBA
QCBwdWJsaWM6CiAgICAgICAgIE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzICwKICAgICB9
OwogCi0gICAgZW51bSBjbGFzcyBUcmFja0lkZW50aWZpZXJzIDogdWludDhfdCB7Ci0gICAgICAg
IE5vLCAgLy8gVXNlZCBmb3IgZ2V0X2J5X2lkCi0gICAgICAgIFllcywgLy8gVXNlZCBmb3IgZ2V0
X2J5X3ZhbAotICAgIH07Ci0KICAgICBHZXRCeVN0YXR1cygpCiAgICAgICAgIDogbV9zdGF0ZShO
b0luZm9ybWF0aW9uKQogICAgIHsKQEAgLTkxLDEzICs4Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogCi0gICAgLy8gSWYgd2UgdXNlIGEgQm94PElkZW50aWZpZXI+IGluIHRoZSBjb21waWxl
ciB0aHJlYWQsIHdlIG5lZWQgdG8ga2VlcCB0aGUKLSAgICAvLyBJZGVudGlmaWVyIGFsaXZlIGFu
ZCBvbmx5IGRlcmVmIGl0IGluIHRoZSBtdXRhdG9yIHRocmVhZCBsYXRlci4gVGhpcwotICAgIC8v
IGVuc3VyZXMgdGhhdCB0aGUgY29tcGlsZXIgdGhyZWFkIGRvZXNuJ3QgcmFjZSBhZ2FpbnN0IHRo
ZSBtdXRhdG9yIGluCi0gICAgLy8gYWRqdXN0aW5nIHRoZSBJZGVudGlmaWVyJ3MgcmVmQ291bnQu
Ci0gICAgdXNpbmcgSWRlbnRpZmllcktlZXBBbGl2ZSA9IHN0ZDo6ZnVuY3Rpb248dm9pZChCb3g8
SWRlbnRpZmllcj4pPjsKLQotICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVC
bG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0Nv
bnRleHRTdGFjayYgZGZnQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBUcmFja0lkZW50aWZpZXJz
LCBJZGVudGlmaWVyS2VlcEFsaXZlJik7CisgICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVG
b3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElD
U3RhdHVzQ29udGV4dFN0YWNrJiBkZmdDb250ZXh0U3RhY2ssIENvZGVPcmlnaW4pOwogICAgIHN0
YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yKGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRT
dHJpbmdJbXBsKik7CiAKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7
IH0KQEAgLTEzNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKIAotICAgIEJveDxJZGVudGlmaWVyPiBzaW5nbGVJZGVudGlmaWVyKCkgY29u
c3Q7CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBzaW5nbGVJZGVudGlmaWVyKCkgY29uc3Q7CiAg
ICAgCiBwcml2YXRlOgogICAgIHZvaWQgbWVyZ2UoY29uc3QgR2V0QnlTdGF0dXMmKTsKQEAgLTE0
MywxNiArMTMzLDE2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEpJVCkKICAgICBHZXRCeVN0YXR1
cyhjb25zdCBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlJik7CiAgICAgc3RhdGljIEdldEJ5U3Rh
dHVzIGNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAotICAgICAgICBj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvKiwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSwgVHJhY2tJZGVudGlm
aWVycywgSWRlbnRpZmllcktlZXBBbGl2ZSYpOworICAgICAgICBjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ2Fs
bExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAjZW5kaWYKLSAgICBzdGF0aWMgR2V0QnlTdGF0
dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBUcmFja0lkZW50
aWZpZXJzKTsKLSAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJ
Q1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhp
dFNpdGVEYXRhLCBUcmFja0lkZW50aWZpZXJzLCBJZGVudGlmaWVyS2VlcEFsaXZlJik7CisgICAg
c3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJ
bmRleCk7CisgICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNT
dGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRT
aXRlRGF0YSk7CiAKICAgICBzdHJ1Y3QgTW9kdWxlTmFtZXNwYWNlRGF0YSB7CiAgICAgICAgIEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdCB7IG51bGxwdHIg
fTsKICAgICAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbV9tb2R1bGVFbnZpcm9ubWVudCB7IG51
bGxwdHIgfTsKICAgICAgICAgU2NvcGVPZmZzZXQgbV9zY29wZU9mZnNldCB7IH07Ci0gICAgICAg
IEJveDxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXI7CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOwogICAgIH07CiAKICAgICBWZWN0b3I8R2V0QnlJZFZhcmlhbnQsIDE+
IG1fdmFyaWFudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNTM5NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE1ICs0MiwxNCBAQCBuYW1lc3BhY2UgR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZUludGVybmFsCiBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogfQogCi1HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBi
b29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBKU09iamVjdCogY3Vz
dG9tU2xvdEJhc2UsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90
eXBlQWNjZXNzQ2hhaW4pCitHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIEpTT2Jq
ZWN0KiBjdXN0b21TbG90QmFzZSwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWlu
PiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKICAgICA6IEJhc2Uodm0sIG93bmVyLCBhY2Nlc3NUeXBl
LCBpZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCB2aWFQcm94eSwg
YWRkaXRpb25hbFNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpCiB7CiAgICAgbV9j
dXN0b21TbG90QmFzZS5zZXRNYXlCZU51bGwodm0sIG93bmVyLCBjdXN0b21TbG90QmFzZSk7CiB9
CiAKLQogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6
OmNyZWF0ZSgKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0LAogICAgIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tR2V0dGVyLCBKU09iamVjdCogY3VzdG9t
U2xvdEJhc2UsCiAgICAgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmli
dXRlLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vz
c0NoYWluKQogewpAQCAtNjksNyArNjgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
R2V0dGVyU2V0dGVyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKK3N0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9w
dHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+IGN1c3RvbVNldHRlciwKICAgICBKU09iamVjdCogY3VzdG9tU2xv
dEJhc2UpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01NCwxMSArNTQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZW1pdERPTUpJ
VEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmLCBjb25zdCBET01KSVQ6OkdldHRlclNldHRl
ciosIEdQUlJlZyBiYXNlRm9yR2V0R1BSKTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gY3JlYXRlKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUsIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKKyAgICAg
ICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBQ
cm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKICAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0
LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3RvbUdldHRlciwKICAgICAgICAgSlNP
YmplY3QqIGN1c3RvbVNsb3RCYXNlLCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiwg
c3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPik7CiAKLSAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eU9mZnNldCwKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCog
b3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0LAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0
ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4sCiAgICAgICAgIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyID0gbnVsbHB0ciwgSlNPYmplY3QqIGN1c3Rv
bVNsb3RCYXNlID0gbnVsbHB0cik7CiAKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tQWNjZXNzb3IoKSBjb25zdCB7IHJldHVy
biBtX2N1c3RvbUFjY2Vzc29yOyB9CiAKIHByaXZhdGU6Ci0gICAgR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZShWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUsIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBi
b29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBKU09iamVjdCogY3Vz
dG9tU2xvdEJhc2UsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4pOworICAg
IEdldHRlclNldHRlckFjY2Vzc0Nhc2UoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlv
bmFsU2V0LCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJv
dG9BY2Nlc3NDaGFpbj4pOwogCiAgICAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZShjb25zdCBHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0YW5jZU9mQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZBY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjUz
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZBY2Nlc3ND
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIEluc3RhbmNlT2ZBY2Nlc3NDYXNl
Ojp+SW5zdGFuY2VPZkFjY2Vzc0MKIEluc3RhbmNlT2ZBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mQWNj
ZXNzQ2FzZSgKICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCwgSlNPYmplY3QqIHByb3RvdHlwZSkKLSAgICA6IEJhc2Uodm0s
IG93bmVyLCBhY2Nlc3NUeXBlLCBJZGVudGlmaWVyKCksIGludmFsaWRPZmZzZXQsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBudWxscHRyKQorICAgIDogQmFzZSh2bSwgb3duZXIsIGFjY2Vzc1R5
cGUsIG51bGxwdHIsIGludmFsaWRPZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBudWxs
cHRyKQogICAgICwgbV9wcm90b3R5cGUodm0sIG93bmVyLCBwcm90b3R5cGUpCiB7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2Fz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludHJp
bnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNTM5NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzIsMTMgKzMyLDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1JbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmIGNvbmRpdGlvblNldCwgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24sIHN0ZDo6dW5p
cXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCitJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwg
c3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFp
bikKICAgICA6IEJhc2Uodm0sIG93bmVyLCBJbnRyaW5zaWNHZXR0ZXIsIGlkZW50aWZpZXIsIG9m
ZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hh
aW4pKQogewogICAgIG1faW50cmluc2ljRnVuY3Rpb24uc2V0KHZtLCBvd25lciwgaW50cmluc2lj
RnVuY3Rpb24pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gSW50cmluc2ljR2V0
dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgSlNG
dW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24sIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nl
c3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwgc3RkOjp1bmlxdWVf
cHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKIHsKICAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KG5ldyBJbnRyaW5zaWNHZXR0ZXJBY2Nl
c3NDYXNlKHZtLCBvd25lciwgaWRlbnRpZmllciwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgaW50cmluc2ljRnVuY3Rpb24sIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKSk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDIsMTQgKzQyLDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjYW5F
bWl0SW50cmluc2ljR2V0dGVyKEpTRnVuY3Rpb24qLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGVt
aXRJbnRyaW5zaWNHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CiAKLSAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCosIGNvbnN0IElk
ZW50aWZpZXImLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmLCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwgc3RkOjp1bmlx
dWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBQ
cm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQmLCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQ
cm90b0FjY2Vzc0NoYWluPik7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xv
bmUoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIH5JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKCk7
CiAKIHByaXZhdGU6Ci0gICAgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZShWTSYsIEpTQ2VsbCos
IGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwg
c3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPik7CisgICAgSW50cmluc2ljR2V0
dGVyQWNjZXNzQ2FzZShWTSYsIEpTQ2VsbCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5
T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIEpT
RnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+KTsKIAogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBtX2ludHJpbnNpY0Z1
bmN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVO
YW1lc3BhY2VBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI1Mzk3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVOYW1lc3BhY2VBY2Nl
c3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM4LDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLU1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6Ok1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nh
c2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0LCBKU01vZHVsZUVu
dmlyb25tZW50KiBtb2R1bGVFbnZpcm9ubWVudCwgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQpCitN
b2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlOjpNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlKFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0LCBKU01vZHVsZUVudmlyb25t
ZW50KiBtb2R1bGVFbnZpcm9ubWVudCwgU2NvcGVPZmZzZXQgc2NvcGVPZmZzZXQpCiAgICAgOiBC
YXNlKHZtLCBvd25lciwgTW9kdWxlTmFtZXNwYWNlTG9hZCwgaWRlbnRpZmllciwgaW52YWxpZE9m
ZnNldCwgbnVsbHB0ciwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwgbnVsbHB0cikKICAg
ICAsIG1fc2NvcGVPZmZzZXQoc2NvcGVPZmZzZXQpCiB7CkBAIC00NSw3ICs0Niw3IEBAIE1vZHVs
ZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6Ok1vZHVsZU5hbWVzcGEKICAgICBtX21vZHVsZUVudmlyb25t
ZW50LnNldCh2bSwgb3duZXIsIG1vZHVsZUVudmlyb25tZW50KTsKIH0KIAotc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIEpTTW9kdWxlRW52aXJvbm1lbnQq
IG1vZHVsZUVudmlyb25tZW50LCBTY29wZU9mZnNldCBzY29wZU9mZnNldCkKK3N0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIEpTTW9kdWxlRW52aXJvbm1l
bnQqIG1vZHVsZUVudmlyb25tZW50LCBTY29wZU9mZnNldCBzY29wZU9mZnNldCkKIHsKICAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KG5ldyBNb2R1bGVOYW1lc3BhY2VBY2Nl
c3NDYXNlKHZtLCBvd25lciwgaWRlbnRpZmllciwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0LCBtb2R1
bGVFbnZpcm9ubWVudCwgc2NvcGVPZmZzZXQpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Nb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2Uu
aAkocmV2aXNpb24gMjUzOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01v
ZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQ0LDcgQEAg
cHVibGljOgogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIG1vZHVsZUVudmlyb25tZW50KCkgY29u
c3QgeyByZXR1cm4gbV9tb2R1bGVFbnZpcm9ubWVudC5nZXQoKTsgfQogICAgIFNjb3BlT2Zmc2V0
IHNjb3BlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY29wZU9mZnNldDsgfQogCi0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVy
LCBjb25zdCBJZGVudGlmaWVyJiwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqLCBKU01vZHVsZUVu
dmlyb25tZW50KiwgU2NvcGVPZmZzZXQpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqLCBKU01vZHVsZUVudmlyb25tZW50KiwgU2NvcGVPZmZz
ZXQpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNsb25lKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKQEAgLTUyLDcgKzUzLDcgQEAgcHVibGljOgogICAgIH5Nb2R1bGVOYW1lc3BhY2VB
Y2Nlc3NDYXNlKCk7CiAKIHByaXZhdGU6Ci0gICAgTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZShW
TSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBKU01vZHVsZU5hbWVzcGFjZU9i
amVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqLCBTY29wZU9mZnNldCk7CisgICAgTW9kdWxlTmFt
ZXNwYWNlQWNjZXNzQ2FzZShWTSYsIEpTQ2VsbCogb3duZXIsIENhY2hlYWJsZUlkZW50aWZpZXIs
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiwgSlNNb2R1bGVFbnZpcm9ubWVudCosIFNjb3BlT2Zm
c2V0KTsKIAogICAgIFdyaXRlQmFycmllcjxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1
bGVOYW1lc3BhY2VPYmplY3Q7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlRW52aXJvbm1lbnQ+
IG1fbW9kdWxlRW52aXJvbm1lbnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI1Mzk3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5o
IgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRnVsbENvZGVP
cmlnaW4uaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0zNTEsNiArMzUyLDEyIEBAIGJvb2wgUG9s
eW1vcnBoaWNBY2Nlc3M6OnByb3BhZ2F0ZVRyYW5zaXQKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Cit2b2lkIFBvbHltb3JwaGljQWNjZXNzOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCisgICAg
ICAgIGF0KGkpLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCiB2b2lkIFBvbHltb3JwaGlj
QWNjZXNzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KFJh
d1BvaW50ZXIodGhpcyksICI6WyIpOwpAQCAtNDgwLDcgKzQ4Nyw3IEBAIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgJiYgc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mKSB7CiAgICAgICAgIHdoaWxlICghY2FzZXMuaXNF
bXB0eSgpKQogICAgICAgICAgICAgbV9saXN0LmFwcGVuZChjYXNlcy50YWtlTGFzdCgpKTsKLSAg
ICAgICAgY2FzZXMuYXBwZW5kKEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpJbnN0YW5jZU9mR2VuZXJpYywgSWRlbnRpZmllcigpKSk7CisgICAgICAgIGNhc2Vz
LmFwcGVuZChBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5z
dGFuY2VPZkdlbmVyaWMsIG51bGxwdHIpKTsKICAgICAgICAgZ2VuZXJhdGVkRmluYWxDb2RlID0g
dHJ1ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyNTM5NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE0OSw2ICsxNDksOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYXQodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQogICAgIGNvbnN0IEFjY2Vzc0Nh
c2UmIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1fbGlzdFtpXTsgfQog
CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOworCiAgICAgLy8gSWYgdGhp
cyByZXR1cm5zIGZhbHNlIHRoZW4gd2UgYXJlIHJlcXVlc3RpbmcgYSByZXNldCBvZiB0aGUgb3du
aW5nIFN0cnVjdHVyZVN0dWJJbmZvLgogICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNz
Q2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1By
b3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNTM5NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotUHJveHlhYmxlQWNjZXNzQ2FzZTo6
UHJveHlhYmxlQWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKK1Byb3h5YWJsZUFjY2Vzc0Nhc2U6OlByb3h5YWJs
ZUFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUs
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFs
U2V0LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vz
c0NoYWluKQogICAgIDogQmFzZSh2bSwgb3duZXIsIGFjY2Vzc1R5cGUsIGlkZW50aWZpZXIsIG9m
ZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hh
aW4pKQogICAgICwgbV9hZGRpdGlvbmFsU2V0KGFkZGl0aW9uYWxTZXQpCkBAIC0zOCw3ICszOCw3
IEBAIFByb3h5YWJsZUFjY2Vzc0Nhc2U6OlByb3h5YWJsZUFjY2Vzc0Nhc2UKICAgICBtX3ZpYVBy
b3h5ID0gdmlhUHJveHk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBQcm94eWFi
bGVBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5
cGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQs
IHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hh
aW4pCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIGJv
b2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIHN0ZDo6dW5pcXVlX3B0
cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiB7CiAgICAgQVNT
RVJUKHR5cGUgPT0gTG9hZCB8fCB0eXBlID09IE1pc3MgfHwgdHlwZSA9PSBHZXRHZXR0ZXIpOwog
ICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4obmV3IFByb3h5YWJsZUFjY2Vz
c0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBpZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LCB2aWFQcm94eSwgYWRkaXRpb25hbFNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nl
c3NDaGFpbikpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFi
bGVBY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjUzOTc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKIAogICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxT
ZXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2FkZGl0aW9uYWxTZXQuZ2V0KCk7IH0KIAot
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxs
KiwgQWNjZXNzVHlwZSwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1
cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCgpLAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3Jl
YXRlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVy
dHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCiAgICAgICAgIGJvb2wgdmlhUHJveHkgPSBm
YWxzZSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIsIHN0ZDo6dW5pcXVl
X3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gPSBudWxscHRyKTsKIAogICAgIHZvaWQgZHVtcElt
cGwoUHJpbnRTdHJlYW0mLCBDb21tYVByaW50ZXImKSBjb25zdCBvdmVycmlkZTsKQEAgLTQ2LDcg
KzQ2LDcgQEAgcHVibGljOgogICAgIH5Qcm94eWFibGVBY2Nlc3NDYXNlKCk7CiAKIHByb3RlY3Rl
ZDoKLSAgICBQcm94eWFibGVBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0
aW9uYWxTZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4pOworICAgIFBy
b3h5YWJsZUFjY2Vzc0Nhc2UoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0
LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKIAogcHJpdmF0ZToKICAg
ICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gbV9hZGRpdGlvbmFsU2V0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShy
ZXZpc2lvbiAyNTM5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAorI2luY2x1ZGUg
IkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKQEAg
LTYyLDExICs2MywxMiBAQCBTdHJ1Y3R1cmVTdHViSW5mbzo6flN0cnVjdHVyZVN0dWJJbmZvKCkK
IHsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3ZvaWQgU3RydWN0dXJl
U3R1YkluZm86OmluaXRHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
KiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaGFzQ29uc3RhbnRJZGVudGlmaWVy
KTsKICAgICBzZXRDYWNoZVR5cGUoQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZik7Ci0gICAgbV9nZXRC
eUlkU2VsZklkZW50aWZpZXIgPSBCb3g8SWRlbnRpZmllcj46OmNyZWF0ZShpZGVudGlmaWVyKTsK
KyAgICBtX2dldEJ5SWRTZWxmSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgY29kZUJsb2Nr
LT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CiAgICAgCiAgICAgdS5ieUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCgKICAgICAgICAgY29kZUJsb2NrLT52bSgpLCBjb2Rl
QmxvY2ssIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwpAQCAtMTM4LDcgKzE0MCw3IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OmFib3V0VG9EaWUoKQogfQogCiBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IFN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNlKAotICAgIGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nlc3NDYXNlKQorICAg
IGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudCwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IGFjY2Vzc0Nhc2UpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCkBAIC0xOTQsNiAr
MTk2LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAgICAg
ICAgICAgdS5zdHViID0gYWNjZXNzLnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1Yik7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSk7CiAgICAgICAgIAogICAg
ICAgICAvLyBJZiB3ZSBkaWRuJ3QgYnVmZmVyIGFueSBjYXNlcyB0aGVuIGJhaWwuIElmIHRoaXMg
bWFkZSBubyBjaGFuZ2VzIHRoZW4gd2UnbGwganVzdCB0cnkgYWdhaW4KQEAgLTIzMiw2ICsyMzUs
OCBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfSkoKTsKICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxv
Y2spOworICAgIGlmIChpZGVudC5pc0NlbGwoKSkKKyAgICAgICAga2VlcEFsaXZlKGlkZW50LmNl
bGwoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjc5LDYgKzI4NCwyNyBAQCB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqCiAgICAgc2V0Q2FjaGVUeXBlKENh
Y2hlVHlwZTo6VW5zZXQpOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7
CisgICAgY2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxl
bmd0aDoKKyAgICBjYXNlIENhY2hlVHlwZTo6U3RyaW5nTGVuZ3RoOgorICAgIGNhc2UgQ2FjaGVU
eXBlOjpQdXRCeUlkUmVwbGFjZToKKyAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICAgICAg
bV9nZXRCeUlkU2VsZklkZW50aWZpZXIudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKKyAgICAgICAgdS5zdHViLT52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybjsKK30KKwogdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjUz
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgpAQCAtNzQs
MTkgKzc1LDIxIEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyhBY2Nlc3NUeXBlKTsK
ICAgICB+U3RydWN0dXJlU3R1YkluZm8oKTsKIAotICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmKENv
ZGVCbG9jayosIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQs
IGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB2b2lkIGluaXRHZXRCeUlkU2VsZihDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LCBDYWNoZWFi
bGVJZGVudGlmaWVyKTsKICAgICB2b2lkIGluaXRBcnJheUxlbmd0aCgpOwogICAgIHZvaWQgaW5p
dFN0cmluZ0xlbmd0aCgpOwogICAgIHZvaWQgaW5pdFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayos
IFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQpOwogICAgIHZv
aWQgaW5pdEluQnlJZFNlbGYoQ29kZUJsb2NrKiwgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCk7CiAKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IGFkZEFj
Y2Vzc0Nhc2UoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgY29u
c3QgSWRlbnRpZmllciYsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPik7CisgICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCBhZGRBY2Nlc3NDYXNlKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciYsIENvZGVCbG9jayosIENhY2hlYWJsZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPik7CiAKICAgICB2b2lkIHJlc2V0KENvZGVCbG9jayopOwogCiAgICAgdm9pZCBk
ZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOworCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVm
ZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYs
CiAgICAgLy8gZWl0aGVyIGVudGlyZWx5IG9yIGp1c3QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRo
b3NlIGRlYWQgcG9pbnRlcnMgZG9uJ3QgZ2V0IHVzZWQgYW55bW9yZS4KICAgICB2b2lkIHZpc2l0
V2Vha1JlZmVyZW5jZXMoQ29kZUJsb2NrKik7CkBAIC0xNzEsNyArMTc0LDcgQEAgcHVibGljOgog
CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogcHJpdmF0ZToKLSAgICBCb3g8SWRlbnRpZmll
cj4gbV9nZXRCeUlkU2VsZklkZW50aWZpZXI7CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2dl
dEJ5SWRTZWxmSWRlbnRpZmllcjsKIHB1YmxpYzoKIAogICAgIHVuaW9uIHsKQEAgLTE4Miw3ICsx
ODUsNyBAQCBwdWJsaWM6CiAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0g
dTsKIAotICAgIEJveDxJZGVudGlmaWVyPiBnZXRCeUlkU2VsZklkZW50aWZpZXIoKQorICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgZ2V0QnlJZFNlbGZJZGVudGlmaWVyKCkKICAgICB7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6R2V0QnlJZFNlbGYpOwog
ICAgICAgICByZXR1cm4gbV9nZXRCeUlkU2VsZklkZW50aWZpZXI7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjUz
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMu
aCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlVXNl
RGVmLmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRl
ICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9ja1dpdGhKSVRUeXBlLmgiCkBAIC00NzczLDEzICs0Nzc0LDEwIEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlR2V0QnlJZChjb25zdCAKICAgICBlbHNlIGlmIChPcDo6b3Bjb2RlSUQg
PT0gb3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAgICAgICAgdHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3Q7CiAgICAgCi0gICAgR2V0QnlTdGF0dXM6OklkZW50aWZpZXJLZWVwQWxpdmUga2Vl
cEFsaXZlID0gWyZdIChCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllcikgewotICAgICAgICBtX2dy
YXBoLm1fcGxhbi5rZWVwQWxpdmVJZGVudGlmaWVyKFdURk1vdmUoaWRlbnRpZmllcikpOwotICAg
IH07CiAgICAgR2V0QnlTdGF0dXMgZ2V0QnlTdGF0dXMgPSBHZXRCeVN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLAotICAgICAg
ICBjdXJyZW50Q29kZU9yaWdpbigpLCBHZXRCeVN0YXR1czo6VHJhY2tJZGVudGlmaWVyczo6Tm8s
IGtlZXBBbGl2ZSk7CisgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogCiAgICAgaGFuZGxl
R2V0QnlJZCgKICAgICAgICAgYnl0ZWNvZGUubV9kc3QsIHByZWRpY3Rpb24sIGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIGdldEJ5U3RhdHVzLCB0eXBlLCBvcGNvZGVMZW5ndGgpOwpAQCAtNTY4MCwx
MCArNTY3OCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKICAgICAgICAgICAg
IE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogICAgICAgICAgICAg
Ym9vbCBzaG91bGRDb21waWxlQXNHZXRCeUlkID0gZmFsc2U7Ci0gICAgICAgICAgICBHZXRCeVN0
YXR1czo6SWRlbnRpZmllcktlZXBBbGl2ZSBrZWVwQWxpdmUgPSBbJl0gKEJveDxJZGVudGlmaWVy
PiBpZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4ua2VlcEFsaXZl
SWRlbnRpZmllcihXVEZNb3ZlKGlkZW50aWZpZXIpKTsKLSAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICBHZXRCeVN0YXR1cyBnZXRCeVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNl
bGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSwgR2V0QnlTdGF0
dXM6OlRyYWNrSWRlbnRpZmllcnM6Olllcywga2VlcEFsaXZlKTsKKyAgICAgICAgICAgIEdldEJ5
U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBt
X2ljQ29udGV4dFN0YWNrLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKIAogICAgICAgICAgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciA9IDA7CiAKQEAgLTU2OTQsMTAgKzU2ODksMTggQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyBzb21ldGhpbmcg
bGlrZSBNdWx0aUdldEJ5T2Zmc2V0IGluIGEgbXVsdGkgaWRlbnRpZmllciBtb2RlLgogICAgICAg
ICAgICAgICAgIC8vIFRoYXQgd2F5LCB3ZSBjb3VsZCBib3RoIHN3aXRjaCBvbiBtdWx0aXBsZSBz
dHJ1Y3R1cmVzIGFuZCBtdWx0aXBsZSBpZGVudGlmaWVycyAob3IgaW50IDMyIHByb3BlcnRpZXMp
LgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDQyMTYKLSAgICAgICAgICAgICAgICBpZiAoQm94PElkZW50aWZpZXI+IGltcGwgPSBn
ZXRCeVN0YXR1cy5zaW5nbGVJZGVudGlmaWVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWRl
bnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaW1wbCk7CisgICAg
ICAgICAgICAgICAgaWYgKENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IGdldEJ5U3Rh
dHVzLnNpbmdsZUlkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWRl
bnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoaWRlbnRpZmllci51
aWQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzQ2VsbCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVl
emVTdHJvbmcoaWRlbnRpZmllci5jZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlkZW50aWZpZXIuaXNTeW1ib2xDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhmcm96ZW4pLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVu
dCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQ29t
cGlsZUFzR2V0QnlJZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tJZGVudCwgT3BJbmZvKGltcGwtPmltcGwoKSksIHByb3BlcnR5KTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZElkZW50aWZpZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCB1bnNpZ25lZCBEZXNpcmVkSWRlbnRpZmllcnM6Om51
bWJlck9mSWRlCiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkg
KyBtX2FkZGVkSWRlbnRpZmllcnMuc2l6ZSgpOwogfQogCi12b2lkIERlc2lyZWRJZGVudGlmaWVy
czo6cHJvY2Vzc0NvZGVCbG9ja0lkZW50aWZpZXJzSWZOZWVkZWQoKQordW5zaWduZWQgRGVzaXJl
ZElkZW50aWZpZXJzOjplbnN1cmUoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCkKIHsKICAgICBpZiAo
IW1fZGlkUHJvY2Vzc0lkZW50aWZpZXJzKSB7CiAgICAgICAgIC8vIERvIHRoaXMgbm93IGluc3Rl
YWQgb2YgdGhlIGNvbnN0cnVjdG9yIHNvIHRoYXQgd2UgZG9uJ3QgcGF5IHRoZSBwcmljZSBvbiB0
aGUgbWFpbgpAQCAtNjQsMTEgKzY0LDYgQEAgdm9pZCBEZXNpcmVkSWRlbnRpZmllcnM6OnByb2Nl
c3NDb2RlQmxvYwogICAgICAgICAgICAgbV9pZGVudGlmaWVyTnVtYmVyRm9yTmFtZS5hZGQobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoaW5kZXgpLmltcGwoKSwgaW5kZXgpOwogICAgICAgICBtX2Rp
ZFByb2Nlc3NJZGVudGlmaWVycyA9IHRydWU7CiAgICAgfQotfQotCi11bnNpZ25lZCBEZXNpcmVk
SWRlbnRpZmllcnM6OmVuc3VyZShVbmlxdWVkU3RyaW5nSW1wbCogcmVwKQotewotICAgIHByb2Nl
c3NDb2RlQmxvY2tJZGVudGlmaWVyc0lmTmVlZGVkKCk7CiAKICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1faWRlbnRpZmllck51bWJlckZvck5hbWUuYWRkKHJlcCwgbnVtYmVyT2ZJZGVudGlmaWVycygp
KTsKICAgICB1bnNpZ25lZCByZXN1bHQgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwpAQCAt
NzksNDUgKzc0LDIwIEBAIHVuc2lnbmVkIERlc2lyZWRJZGVudGlmaWVyczo6ZW5zdXJlKFVuaXEK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi11bnNpZ25lZCBEZXNpcmVkSWRlbnRpZmllcnM6OmVu
c3VyZShCb3g8SWRlbnRpZmllcj4gcmVwKQotewotICAgIHByb2Nlc3NDb2RlQmxvY2tJZGVudGlm
aWVyc0lmTmVlZGVkKCk7Ci0KLSAgICBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCA9IHJlcC0+aW1w
bCgpOwotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pZGVudGlmaWVyTnVtYmVyRm9yTmFtZS5hZGQo
aW1wbCwgbnVtYmVyT2ZJZGVudGlmaWVycygpKTsKLSAgICB1bnNpZ25lZCByZXN1bHQgPSBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewot
ICAgICAgICBtX2FkZGVkSWRlbnRpZmllcnMuYXBwZW5kKFdURk1vdmUocmVwKSk7Ci0gICAgICAg
IEFTU0VSVChhdChyZXN1bHQpID09IGltcGwpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCiBVbmlxdWVkU3RyaW5nSW1wbCogRGVzaXJlZElkZW50aWZpZXJzOjphdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKIHsKICAgICBVbmlxdWVkU3RyaW5nSW1wbCogcmVzdWx0OwogICAgIGlmIChp
bmRleCA8IG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkpCiAgICAgICAgIHJlc3Vs
dCA9IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGluZGV4KS5pbXBsKCk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGNvbnN0IGF1dG8mIHZhcmlhbnQgPSBtX2FkZGVkSWRlbnRpZmllcnNbaW5kZXggLSBt
X2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpXTsKLSAgICAgICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8VW5pcXVlZFN0cmluZ0ltcGwqPih2YXJpYW50KSkKLSAgICAgICAgICAg
IHJlc3VsdCA9IFdURjo6Z2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4odmFyaWFudCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IFdURjo6Z2V0PEJveDxJZGVudGlmaWVyPj4odmFy
aWFudCktPmltcGwoKTsKLSAgICB9CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBtX2FkZGVk
SWRlbnRpZmllcnNbaW5kZXggLSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpXTsK
ICAgICBBU1NFUlQocmVzdWx0LT5oYXNBdExlYXN0T25lUmVmKCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIHZvaWQgRGVzaXJlZElkZW50aWZpZXJzOjpyZWFsbHlBZGQoVk0mIHZtLCBDb21t
b25EYXRhKiBjb21tb25EYXRhKQogewotICAgIGZvciAoY29uc3QgYXV0byYgdmFyaWFudCA6IG1f
YWRkZWRJZGVudGlmaWVycykgewotICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogcmVwOwotICAg
ICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVkU3RyaW5nSW1wbCo+KHZhcmlh
bnQpKQotICAgICAgICAgICAgcmVwID0gV1RGOjpnZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPih2YXJp
YW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVwID0gV1RGOjpnZXQ8Qm94PElkZW50
aWZpZXI+Pih2YXJpYW50KS0+aW1wbCgpOwotCisgICAgZm9yIChhdXRvIHJlcCA6IG1fYWRkZWRJ
ZGVudGlmaWVycykgewogICAgICAgICBBU1NFUlQocmVwLT5oYXNBdExlYXN0T25lUmVmKCkpOwog
ICAgICAgICBJZGVudGlmaWVyIHVpZCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHJlcCk7CiAg
ICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50
aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMjUzOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNiBAQAogCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVk
U3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ5LDcgKzQ4LDYgQEAgcHVibGlj
OgogICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mSWRlbnRpZmllcnMoKTsKICAgICB1bnNpZ25l
ZCBlbnN1cmUoVW5pcXVlZFN0cmluZ0ltcGwqKTsKLSAgICB1bnNpZ25lZCBlbnN1cmUoQm94PElk
ZW50aWZpZXI+KTsKICAgICAKICAgICBVbmlxdWVkU3RyaW5nSW1wbCogYXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0OwogICAgIApAQCAtNjEsNyArNTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJv
Y2Vzc0NvZGVCbG9ja0lkZW50aWZpZXJzSWZOZWVkZWQoKTsKIAogICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7Ci0gICAgVmVjdG9yPFZhcmlhbnQ8VW5pcXVlZFN0cmluZ0ltcGwqLCBCb3g8SWRl
bnRpZmllcj4+PiBtX2FkZGVkSWRlbnRpZmllcnM7CisgICAgVmVjdG9yPFVuaXF1ZWRTdHJpbmdJ
bXBsKj4gbV9hZGRlZElkZW50aWZpZXJzOwogICAgIEhhc2hNYXA8VW5pcXVlZFN0cmluZ0ltcGwq
LCB1bnNpZ25lZD4gbV9pZGVudGlmaWVyTnVtYmVyRm9yTmFtZTsKICAgICBib29sIG1fZGlkUHJv
Y2Vzc0lkZW50aWZpZXJzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAkocmV2aXNpb24gMjUzOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQAogI2luY2x1ZGUgIlByb2Zp
bGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJUcmFja2VkUmVmZXJlbmNlcy5oIgogI2luY2x1ZGUg
IlZNSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogI2lmIEVOQUJMRShG
VExfSklUKQogI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgpAQCAtMTU1LDcgKzE1NCw2IEBA
IFBsYW46OlBsYW4oQ29kZUJsb2NrKiBwYXNzZWRDb2RlQmxvY2ssIEMKIAogUGxhbjo6flBsYW4o
KQogewotICAgIFJFTEVBU0VfQVNTRVJUKHVubnVrZWRWTSgpLT5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpKTsKIH0KIAogYm9vbCBQbGFuOjpjb21wdXRlQ29tcGlsZVRpbWVzKCkgY29u
c3QKQEAgLTY5NiwyMiArNjk0LDYgQEAgYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdH
QygpCiB2b2lkIFBsYW46OmNhbmNlbCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9zdGFnZSAh
PSBDYW5jZWxsZWQpOwotCi0gICAgLy8gV2hlbiB3ZSBjYW5jZWwgYSBwbGFuLCB0aGVyZSdzIGEg
Y2hhbmNlIHRoYXQgdGhlIGNvbXBpbGVyIHRocmVhZCBtYXkgaGF2ZQotICAgIC8vIGFscmVhZHkg
cmVmJ2VkIGl0IGFuZCBpcyB3b3JraW5nIG9uIGl0LiBUaGlzIHJlc3VsdHMgaW4gYSByYWNlIHdo
ZXJlIHRoZQotICAgIC8vIGNvbXBpbGVyIHRocmVhZCBtYXkgaG9sZCB0aGUgbGFzdCByZWZlcmVu
Y2UgdG8gdGhlIHBsYW4uIFdlIHJlcXVpcmUgdGhhdAotICAgIC8vIHRoZSBwbGFuIGlzIG9ubHkg
ZGVzdHJ1Y3RlZCBvbiB0aGUgbXV0YXRvciB0aHJlYWQgYmVjYXVzZSB3ZSBwaWdneSBiYWNrCi0g
ICAgLy8gb24gdGhlIHBsYW4gdG8gZW5zdXJlIGNlcnRhaW4gb3RoZXIgb2JqZWN0cyBhcmUgb25s
eSBkZXN0cnVjdGVkIG9uIHRoZQotICAgIC8vIG11dGF0b3IgdGhyZWFkLiBGb3IgZXhhbXBsZSwg
c2VlIFBsYW46Om1faWRlbnRpZmllcnNLZXB0QWxpdmVGb3JDbGVhblVwLgotICAgIC8vCi0gICAg
Ly8gVG8gZW5zdXJlIHRoYXQgdGhlIHBsYW4gaXMgZGVzdHJ1Y3RlZCBvbiB0aGUgbXV0YXRvciBh
bmQgbm90IHRoZSBjb21waWxlcgotICAgIC8vIHRocmVhZCwgdGhlIGNvbXBpbGVyIHRocmVhZCB3
aWxsIGVucXVldWUgYW55IGNhbmNlbGxlZCBwbGFuIGl0IHNlZXMgaW4KLSAgICAvLyB0aGUgd29y
a2xpc3QncyBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLiBUaGUgbXV0YXRvciB3
aWxsIGxhdGVyCi0gICAgLy8gZGVsZXRlIHRoZSBjYW5jZWxsZWQgcGxhbnMgaW4gbV9jYW5jZWxs
ZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbi4KLSAgICAvLyBIb3dldmVyLCBhIG11dGF0b3Igc2hv
dWxkIG9ubHkgZGVsZXRlIGNhbmNlbGxlZCBwbGFucyB0aGF0IGJlbG9uZyB0byBpdHMKLSAgICAv
LyBWTS4gSGVuY2UsIGEgY2FuY2VsbGVkIHBsYW4gbmVlZHMgdG8ga2VlcCBpdHMgbV92bSBwb2lu
dGVyIHRvIGxldCB0aGUKLSAgICAvLyBtdXRhdG9yIGtub3cgd2hpY2ggVk0gaXQgYmVsb25ncyB0
by4KLSAgICAvLyBSZWY6IFNlZSBXb3JrbGlzdDo6ZGVsZXRlQ2FuY2VsbGVkUGxhbnNGb3JWTSgp
LgogICAgIEFTU0VSVChtX3ZtKTsKIAogICAgIC8vIE51a2UgdGhlIFZNIHBvaW50ZXIgc28gdGhh
dCBwb2ludGVyIGNvbXBhcmlzb25zIGFnYWluc3QgaXQgd2lsbCBmYWlsLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBA
CiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgi
CiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgotI2luY2x1ZGUgPHd0Zi9Cb3guaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgogCkBAIC0xMTcsMTIgKzExNiw2IEBAIHB1YmxpYzoKICAgICBEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2sqIGNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFjay5nZXQoKTsg
fQogICAgIHZvaWQgc2V0Q2FsbGJhY2soUmVmPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4m
JiBjYWxsYmFjaykgeyBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7IH0KIAotICAgIHZv
aWQga2VlcEFsaXZlSWRlbnRpZmllcihCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllcikKLSAgICB7
Ci0gICAgICAgIGlmIChpZGVudGlmaWVyKQotICAgICAgICAgICAgbV9pZGVudGlmaWVyc0tlcHRB
bGl2ZUZvckNsZWFuVXAuYXBwZW5kKFdURk1vdmUoaWRlbnRpZmllcikpOwotICAgIH0KLQogcHJp
dmF0ZToKICAgICBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKSBjb25zdDsKICAgICBib29sIHJl
cG9ydENvbXBpbGVUaW1lcygpIGNvbnN0OwpAQCAtMTgxLDcgKzE3NCw2IEBAIHByaXZhdGU6CiAg
ICAgU3RhZ2UgbV9zdGFnZTsKIAogICAgIFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s+IG1fY2FsbGJhY2s7Ci0gICAgVmVjdG9yPEJveDxJZGVudGlmaWVyPiwgMTY+IG1faWRlbnRp
ZmllcnNLZXB0QWxpdmVGb3JDbGVhblVwOwogCiAgICAgTW9ub3RvbmljVGltZSBtX3RpbWVCZWZv
cmVGVEw7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5j
cHAJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsMTAgKzEwMCw4IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kYXRhLm1fcmlnaHRUb1J1bik7CiAgICAgICAg
IHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX3dvcmtsaXN0Lm1fbG9jayk7Ci0g
ICAgICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSgpID09IFBsYW46OkNhbmNlbGxlZCkgewotICAg
ICAgICAgICAgICAgIG1fd29ya2xpc3QubV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlv
bi5hcHBlbmQoV1RGTW92ZShtX3BsYW4pKTsKKyAgICAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdl
KCkgPT0gUGxhbjo6Q2FuY2VsbGVkKQogICAgICAgICAgICAgICAgIHJldHVybiBXb3JrUmVzdWx0
OjpDb250aW51ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fcGxhbi0+bm90aWZ5Q29t
cGlsaW5nKCk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMjUsMTAgKzEyMyw4IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgCiAgICAgICAgIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KCptX3dvcmtsaXN0Lm1fbG9jayk7Ci0gICAgICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSgpID09
IFBsYW46OkNhbmNlbGxlZCkgewotICAgICAgICAgICAgICAgIG1fd29ya2xpc3QubV9jYW5jZWxs
ZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbi5hcHBlbmQoV1RGTW92ZShtX3BsYW4pKTsKKyAgICAg
ICAgICAgIGlmIChtX3BsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVkKQogICAgICAgICAg
ICAgICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKLSAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbV9wbGFuLT5ub3RpZnlSZWFkeSgpOwogICAgICAgICAgICAg
CkBAIC0zMDQsNDcgKzMwMCwxMCBAQCB2b2lkIFdvcmtsaXN0Ojp3YWl0VW50aWxBbGxQbGFuc0Zv
clZNQXJlCiAgICAgfQogfQogCi12b2lkIFdvcmtsaXN0OjpkZWxldGVDYW5jZWxsZWRQbGFuc0Zv
clZNKExvY2tIb2xkZXImLCBWTSYgdm0pCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVu
dFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgSGFzaFNldDxSZWZQdHI8UGxhbj4+IHJl
bW92ZWRQbGFuczsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgc2NlbmFyaW8gY2FuIG9jY3VyOgot
ICAgIC8vIDEuIFRoZSBERkcgdGhyZWFkIHN0YXJ0ZWQgY29tcGlsaW5nIGEgcGxhbi4KLSAgICAv
LyAyLiBUaGUgR0MgdGhyZWFkIGNhbmNlbHMgdGhlIHBsYW4sIGFuZCBhZGRzIGl0IHRvIG1fY2Fu
Y2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24uCi0gICAgLy8gMy4gVGhlIERGRyB0aHJlYWQg
ZmluaXNoZXMgY29tcGlsaW5nLCBhbmQgZGlzY292ZXJzIHRoYXQgdGhlIHRocmVhZCBpcyBjYW5j
ZWxsZWQuCi0gICAgLy8gICAgVG8gYXZvaWQgZGVzdHJ1Y3RpbmcgdGhlIHBsYW4gaW4gdGhlIERG
RyB0aHJlYWQsIGl0IGFkZHMgaXQgdG8KLSAgICAvLyAgICBtX2NhbmNlbGxlZFBsYW5zUGVuZGlu
Z0Rlc3RydWN0aW9uLgotICAgIC8vIDQuIFRoZSBhYm92ZSBvY2N1cnMgYmVmb3JlIHRoZSBtdXRh
dG9yIHJ1bnMgZGVsZXRlQ2FuY2VsbGVkUGxhbnNGb3JWTSgpLgotICAgIC8vCi0gICAgLy8gSGVu
Y2UsIHRoZSBzYW1lIGNhbmNlbGxlZCBwbGFuIGNhbiBhcHBlYXIgaW4gbV9jYW5jZWxsZWRQbGFu
c1BlbmRpbmdEZXN0cnVjdGlvbgotICAgIC8vIG1vcmUgdGhhbiBvbmNlLiBUaGlzIGlzIHdoeSB3
ZSBuZWVkIHRvIGZpbHRlciB0aGUgY2FuY2VsbGVkIHBsYW5zIHRocm91Z2gKLSAgICAvLyB0aGUg
cmVtb3ZlZFBsYW5zIEhhc2hTZXQgYmVmb3JlIHdlIGRvIHRoZSByZWZDb3VudCBjaGVjayBiZWxv
dy4KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdE
ZXN0cnVjdGlvbi5zaXplKCk7ICsraSkgewotICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1f
Y2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb25baV07Ci0gICAgICAgIGlmIChwbGFuLT51
bm51a2VkVk0oKSAhPSAmdm0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9jYW5j
ZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbltpLS1dID0gbV9jYW5jZWxsZWRQbGFuc1BlbmRp
bmdEZXN0cnVjdGlvbi5sYXN0KCk7Ci0gICAgICAgIG1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVz
dHJ1Y3Rpb24ucmVtb3ZlTGFzdCgpOwotICAgICAgICByZW1vdmVkUGxhbnMuYWRkKFdURk1vdmUo
cGxhbikpOwotICAgIH0KLQotICAgIHdoaWxlICghcmVtb3ZlZFBsYW5zLmlzRW1wdHkoKSkgewot
ICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IHJlbW92ZWRQbGFucy50YWtlQW55KCk7Ci0gICAg
ICAgIEFTU0VSVChwbGFuLT5zdGFnZSgpID09IFBsYW46OkNhbmNlbGxlZCk7Ci0gICAgICAgIGlm
IChwbGFuLT5yZWZDb3VudCgpID4gMSkKLSAgICAgICAgICAgIG1fY2FuY2VsbGVkUGxhbnNQZW5k
aW5nRGVzdHJ1Y3Rpb24uYXBwZW5kKFdURk1vdmUocGxhbikpOwotICAgIH0KLX0KLQogdm9pZCBX
b3JrbGlzdDo6cmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiB2bSwgVmVjdG9yPFJlZlB0cjxQ
bGFuPiwgOD4mIG15UmVhZHlQbGFucykKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgQVNTRVJUKHZtLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotCi0gICAgZGVsZXRlQ2FuY2VsbGVkUGxhbnNGb3JW
TShsb2NrZXIsIHZtKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVhZHlQbGFucy5z
aXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1fcmVhZHlQbGFuc1tp
XTsKICAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQpAQCAtNDQ3LDggKzQwNiw2IEBAIHZv
aWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgewogICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICAgICAgSGFzaFNldDxDb21waWxhdGlvbktleT4g
ZGVhZFBsYW5LZXlzOwotICAgICAgICBib29sIGlzSW5NdXRhdG9yID0gdm0uY3VycmVudFRocmVh
ZElzSG9sZGluZ0FQSUxvY2soKTsKLQogICAgICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CiAg
ICAgICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAocGxhbi0+dm0oKSAhPSAmdm0pCkBAIC00NjIsMTIgKzQxOSw4IEBAIHZvaWQgV29ya2xpc3Q6
OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgICAgICAgICBkZWFkUGxhbktleXMuYWRkKHBs
YW4tPmtleSgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWRlYWRQbGFuS2V5cy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGZvciAoSGFzaFNldDxDb21waWxhdGlvbktleT46Oml0ZXJhdG9y
IGl0ZXIgPSBkZWFkUGxhbktleXMuYmVnaW4oKTsgaXRlciAhPSBkZWFkUGxhbktleXMuZW5kKCk7
ICsraXRlcikgewotICAgICAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9wbGFucy50
YWtlKCppdGVyKTsKLSAgICAgICAgICAgICAgICBwbGFuLT5jYW5jZWwoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWlzSW5NdXRhdG9yKQotICAgICAgICAgICAgICAgICAgICBtX2NhbmNlbGxlZFBs
YW5zUGVuZGluZ0Rlc3RydWN0aW9uLmFwcGVuZChXVEZNb3ZlKHBsYW4pKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZvciAoSGFzaFNldDxDb21waWxhdGlvbktleT46Oml0ZXJhdG9yIGl0
ZXIgPSBkZWFkUGxhbktleXMuYmVnaW4oKTsgaXRlciAhPSBkZWFkUGxhbktleXMuZW5kKCk7ICsr
aXRlcikKKyAgICAgICAgICAgICAgICBtX3BsYW5zLnRha2UoKml0ZXIpLT5jYW5jZWwoKTsKICAg
ICAgICAgICAgIERlcXVlPFJlZlB0cjxQbGFuPj4gbmV3UXVldWU7CiAgICAgICAgICAgICB3aGls
ZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBs
YW4gPSBtX3F1ZXVlLnRha2VGaXJzdCgpOwpAQCAtNTAzLDkgKzQ1Niw2IEBAIHZvaWQgV29ya2xp
c3Q6OnJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm8KICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9s
b2NrKTsKICAgICBIYXNoU2V0PENvbXBpbGF0aW9uS2V5PiBkZWFkUGxhbktleXM7CiAgICAgVmVj
dG9yPFJlZlB0cjxQbGFuPj4gZGVhZFBsYW5zOwotICAgIEFTU0VSVCh2bS5jdXJyZW50VGhyZWFk
SXNIb2xkaW5nQVBJTG9jaygpKTsKLQotICAgIGRlbGV0ZUNhbmNlbGxlZFBsYW5zRm9yVk0obG9j
a2VyLCB2bSk7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcGxhbnMpIHsKICAgICAgICAgUGxh
biogcGxhbiA9IGVudHJ5LnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAm
dm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lv
biAyNTM5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB0
aHJlYWRGdW5jdGlvbih2b2lkKiBhcmd1bWVudCk7CiAgICAgCiAgICAgdm9pZCByZW1vdmVBbGxS
ZWFkeVBsYW5zRm9yVk0oVk0mLCBWZWN0b3I8UmVmUHRyPFBsYW4+LCA4PiYpOwotICAgIHZvaWQg
ZGVsZXRlQ2FuY2VsbGVkUGxhbnNGb3JWTShMb2NrSG9sZGVyJiwgVk0mKTsKIAogICAgIHZvaWQg
ZHVtcChjb25zdCBBYnN0cmFjdExvY2tlciYsIFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCkBA
IC0xMTQsNyArMTEzLDYgQEAgcHJpdmF0ZToKICAgICAvLyBVc2VkIHRvIHF1aWNrbHkgZmluZCB3
aGljaCBwbGFucyBoYXZlIGJlZW4gY29tcGlsZWQgYW5kIGFyZSByZWFkeSB0bwogICAgIC8vIGJl
IGNvbXBsZXRlZC4KICAgICBWZWN0b3I8UmVmUHRyPFBsYW4+LCAxNj4gbV9yZWFkeVBsYW5zOwot
ICAgIFZlY3RvcjxSZWZQdHI8UGxhbj4sIDQ+IG1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1
Y3Rpb247CiAgICAgUmVmPEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbj4gbV9wbGFuRW5xdWV1ZWQ7
CiAgICAgQ29uZGl0aW9uIG1fcGxhbkNvbXBpbGVkOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFy
cmF5Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRGR0NvbXBpbGF0aW9u
TW9kZS5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgpAQCAtMjAyOCw3ICsyMDI5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlw
dCkpIHsKKyAgICBpZiAoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIENhY2hlYWJsZUlkZW50aWZpZXI6
OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoc3Vic2NyaXB0KSkgewogICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9i
amVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJv
cGVydHlOYW1lKSkgewpAQCAtMjAzNyw3ICsyMDM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6T3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIHBy
b3BlcnR5TmFtZSwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2UoKSkpOyAKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwg
Y29kZUJsb2NrLCBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCksIHByb3BlcnR5TmFtZS5pbXBs
KCkpKQotICAgICAgICAgICAgICAgICAgICByZXBhdGNoR2V0QnkoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCAqc3R1YkluZm8sIEdldEJ5S2lu
ZDo6Tm9ybWFsQnlWYWwpOworICAgICAgICAgICAgICAgICAgICByZXBhdGNoR2V0QnkoZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LmFzQ2VsbCgpLCBzbG90LCAq
c3R1YkluZm8sIEdldEJ5S2luZDo6Tm9ybWFsQnlWYWwpOwogICAgICAgICAgICAgICAgIHJldHVy
biBmb3VuZCA/IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpIDoganNV
bmRlZmluZWQoKTsKICAgICAgICAgICAgIH0pKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNTM5NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMu
aCIKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNh
bGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkRGR1NwZWN1bGF0aXZlSklULmgiCkBAIC0xNzgsNyArMTc5LDcgQEAgaW5saW5lIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gYXBwcgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCitzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIENhY2hlYWJs
ZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwpA
QCAtMTk3LDYgKzE5OCw5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5
KEoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAKICAgICAg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAg
ICAgICAgIC8vIERlbGliZXJhdGVseSB1c2UgdGhlIElkZW50aWZpZXIgKGluc3RlYWQgb2YgSlND
ZWxsKikgZm9ybSBzaW5jZQorICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbiBpbW1vcnRhbCBJZGVu
dGlmaWVyIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aDsKICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6
VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxs
CkBAIC0yNjgsNyArMjcyLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnkoSgogCiAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlu
bGluZSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBh
dGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWUsIHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpH
ZXRCeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkp
OwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZv
clJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRo
Q2FsbExvY2F0aW9uLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsK
ICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGNvZGVCbG9jaywg
c3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMzE5LDcg
KzMyMyw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNz
Q2hhaW46OmNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNj
ZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHN0cnVjdHVyZSktPmdldCh2bSwgcHJvcGVydHlO
YW1lKSA9PSBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFz
ZVN0cnVjdHVyZShzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkgPT0gb2Zm
c2V0KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnN0ZWFkIGZvciBmYXN0
ZXIgYWNjZXNzZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IG51bGxwdHI7CkBAIC0zMjgsMTYgKzMzMiwxNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MjE1CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZS51aWQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZS51aWQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29u
ZGl0aW9uKCkub2Zmc2V0KCkgPT0gb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBzbG90LnNsb3RCYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZS5pbXBsKCksIHNsb3QuYXR0cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lLnVpZCgpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKQEAgLTM5MywxMiArMzk3LDEyIEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0g
ICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlBZGRBY2Nlc3NDYXNlLCBiYXNlVmFsdWUuY2xh
c3NJbmZvT3JOdWxsKHZtKSwgcHJvcGVydHlOYW1lLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSk7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlBZGRBY2Nlc3NDYXNlLCBiYXNl
VmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVy
dHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwogCiAgICAgICAg
IHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBjb2RlQmxvY2ssIHByb3Bl
cnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CiAKICAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0
ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5UmVwbGFj
ZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgcHJvcGVydHlOYW1lLCBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkdldEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwg
SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFz
ZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQuY29kZSgpKTsKICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1
YkFzSnVtcChzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KHJlc3VsdC5jb2RlKCkpKTsKQEAgLTQxMCw3ICs0MTQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3co
KSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQgcmVwYXRjaEdl
dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5k
IGtpbmQpCit2b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIENhY2hlYWJsZUlkZW50aWZp
ZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIApAQCAtNDk0LDcgKzQ5OCw3IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5R2UKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBj
b2RlQmxvY2ssIElkZW50aWZpZXIoKSwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ss
IGFjY2Vzc1R5cGUsIElkZW50aWZpZXIoKSkpOworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5h
ZGRBY2Nlc3NDYXNlKGxvY2tlciwgY29kZUJsb2NrLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOwogCiAgICAgICAgIGlmIChy
ZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewogICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElk
ZW50aWZpZXIoKSkpOwpAQCAtODg0LDcgKzg4OCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUluc3RhbmMKICAgICAgICAgCiAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5z
dGFuY2VPZkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXIo
KSkpOwogICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShs
b2NrZXIsIGNvZGVCbG9jaywgSWRlbnRpZmllcigpLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKyAgICAg
ICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGNvZGVCbG9jaywgbnVs
bHB0ciwgV1RGTW92ZShuZXdDYXNlKSk7CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0Lmdl
bmVyYXRlZFNvbWVDb2RlKCkpIHsKICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5zdGFu
Y2VPZlJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcigp
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMjUzOTc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJDYWNoZWFi
bGVJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKICNpbmNsdWRlICJQdXRL
aW5kLmgiCiAKQEAgLTQxLDcgKzQyLDcgQEAgZW51bSBjbGFzcyBHZXRCeUtpbmQgewogfTsKIAog
dm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpT
VmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVw
YXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlL
aW5kKTsKK3ZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNW
YWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJl
U3R1YkluZm8mLCBHZXRCeUtpbmQpOwogdm9pZCByZXBhdGNoUHV0QnlJRChKU0dsb2JhbE9iamVj
dCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogdm9p
ZCByZXBhdGNoSW5CeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBj
b25zdCBJZGVudGlmaWVyJiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3Qq
LCBDb2RlQmxvY2sqLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJl
U3R1YkluZm8mLCBib29sIHdhc0ZvdW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2Fj
aGVhYmxlSWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGlu
ZXMuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K3ZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludChtX2JpdHMgPyB1aWQoKSA6IFN0cmluZ0ltcGw6OmVtcHR5KCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKwor
bmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworY2xhc3MgVW5pcXVlZFN0cmlu
Z0ltcGw7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlByaW50U3RyZWFtOwor
dXNpbmcgV1RGOjpVbmlxdWVkU3RyaW5nSW1wbDsKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IElkZW50aWZpZXI7CitjbGFzcyBKU0NlbGw7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3Mg
Q2FjaGVhYmxlSWRlbnRpZmllciB7CitwdWJsaWM6CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigp
ID0gZGVmYXVsdDsKKyAgICBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllcihjb25zdCBJZGVudGlm
aWVyJik7CisgICAgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIoSlNDZWxsKiBpZGVudGlmaWVy
KTsKKworICAgIENhY2hlYWJsZUlkZW50aWZpZXIoY29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYp
ID0gZGVmYXVsdDsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyKENhY2hlYWJsZUlkZW50aWZpZXIm
JikgPSBkZWZhdWx0OworCisgICAgQ2FjaGVhYmxlSWRlbnRpZmllcihzdGQ6Om51bGxwdHJfdCkK
KyAgICAgICAgOiBtX2JpdHMoMCkKKyAgICB7IH0KKworICAgIGJvb2wgaXNVaWQoKSBjb25zdCB7
IHJldHVybiBtX2JpdHMgJiBzX3VpZFRhZzsgfQorICAgIGJvb2wgaXNDZWxsKCkgY29uc3QgeyBy
ZXR1cm4gIWlzVWlkKCk7IH0KKyAgICBpbmxpbmUgYm9vbCBpc1N5bWJvbENlbGwoKSBjb25zdDsK
KyAgICBpbmxpbmUgYm9vbCBpc1N0cmluZ0NlbGwoKSBjb25zdDsKKworICAgIGJvb2wgaXNTeW1i
b2woKSBjb25zdCB7IHJldHVybiBtX2JpdHMgJiYgdWlkKCktPmlzU3ltYm9sKCk7IH0KKworICAg
IGlubGluZSBKU0NlbGwqIGNlbGwoKSBjb25zdDsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KCkgY29uc3Q7CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
bV9iaXRzOyB9CisKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyJiBvcGVyYXRvcj0oY29uc3QgQ2Fj
aGVhYmxlSWRlbnRpZmllciYpID0gZGVmYXVsdDsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyJiBv
cGVyYXRvcj0oQ2FjaGVhYmxlSWRlbnRpZmllciYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0OworICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBDYWNoZWFibGVJZGVudGlmaWVyJiBvdGhlcikgY29uc3Q7Cisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElkZW50aWZpZXImIG90aGVyKSBjb25zdDsKKworICAg
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKEpTQ2VsbCopOwor
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKEpTVmFsdWUp
OworCisgICAgaW5saW5lIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsK
KworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGlubGluZSB2b2lkIHNldENlbGxCaXRzKEpTQ2VsbCopOworICAgIGlu
bGluZSB2b2lkIHNldFVpZEJpdHMoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgdWludHB0cl90IHNfdWlkVGFnID0gMTsKKyAgICB1aW50cHRyX3QgbV9iaXRzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgor
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5j
bHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXI6OkNhY2hlYWJsZUlk
ZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBzZXRVaWRCaXRz
KGlkZW50aWZpZXIuaW1wbCgpKTsKK30KKworaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXI6OkNh
Y2hlYWJsZUlkZW50aWZpZXIoSlNDZWxsKiBpZGVudGlmaWVyKQoreworICAgIHNldENlbGxCaXRz
KGlkZW50aWZpZXIpOworfQorCitpbmxpbmUgSlNDZWxsKiBDYWNoZWFibGVJZGVudGlmaWVyOjpj
ZWxsKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNDZWxsKCkpOworICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8SlNDZWxsKj4obV9iaXRzKTsKK30KKworaW5saW5lIFVuaXF1ZWRTdHJpbmdJbXBsKiBD
YWNoZWFibGVJZGVudGlmaWVyOjp1aWQoKSBjb25zdAoreworICAgIGlmICghbV9iaXRzKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXNVaWQoKSkKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KG1fYml0cyAmIH5zX3VpZFRhZyk7CisgICAg
aWYgKGlzU3ltYm9sQ2VsbCgpKQorICAgICAgICByZXR1cm4gJmpzQ2FzdDxTeW1ib2wqPihjZWxs
KCkpLT51aWQoKTsKKyAgICBBU1NFUlQoaXNTdHJpbmdDZWxsKCkpOworICAgIEpTU3RyaW5nKiBz
dHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihjZWxsKCkpOworICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJpbmctPmdldFZhbHVlSW1wbCgpKTsKK30KKworaW5s
aW5lIGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChK
U0NlbGwqIGNlbGwpCit7CisgICAgaWYgKGNlbGwtPmlzU3ltYm9sKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmICghY2VsbC0+aXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihjZWxsKTsKKyAgICBp
ZiAoY29uc3QgU3RyaW5nSW1wbCogaW1wbCA9IHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkpCisg
ICAgICAgIHJldHVybiBpbXBsLT5pc0F0b20oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lu
bGluZSBib29sIENhY2hlYWJsZUlkZW50aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwo
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIGlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwodmFsdWUuYXND
ZWxsKCkpOworfQorCitpbmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlmaWVyOjppc1N5bWJvbENl
bGwoKSBjb25zdAoreworICAgIHJldHVybiBpc0NlbGwoKSAmJiBjZWxsKCktPmlzU3ltYm9sKCk7
Cit9CisKK2lubGluZSBib29sIENhY2hlYWJsZUlkZW50aWZpZXI6OmlzU3RyaW5nQ2VsbCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGlzQ2VsbCgpICYmIGNlbGwoKS0+aXNTdHJpbmcoKTsKK30KKwor
aW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRlbnRpZmllcjo6c2V0Q2VsbEJpdHMoSlNDZWxsKiBjZWxs
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoY2VsbCkp
OworICAgIG1fYml0cyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNlbGwpOworfQorCitpbmxp
bmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjpzZXRVaWRCaXRzKFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCit7CisgICAgbV9iaXRzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odWlkKSB8IHNf
dWlkVGFnOworfQorCitpbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKK3sKKyAgICBpZiAobV9iaXRzICYmIGlz
Q2VsbCgpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7Cit9CisK
KworaW5saW5lIGJvb2wgQ2FjaGVhYmxlSWRlbnRpZmllcjo6b3BlcmF0b3I9PShjb25zdCBDYWNo
ZWFibGVJZGVudGlmaWVyJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gdWlkKCkgPT0gb3Ro
ZXIudWlkKCk7Cit9CisKK2lubGluZSBib29sIENhY2hlYWJsZUlkZW50aWZpZXI6Om9wZXJhdG9y
IT0oY29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHVpZCgpICE9IG90aGVyLnVpZCgpOworfQorCitpbmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlm
aWVyOjpvcGVyYXRvcj09KGNvbnN0IElkZW50aWZpZXImIG90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiB1aWQoKSA9PSBvdGhlci5pbXBsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHAJKHJldmlzaW9uIDI1Mzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAg
c3RhdGljIFN0cmluZyBmdW5jdGlvbkNhbGxCYXNlKGNvbnN0IFN0cgogICAgIGlmIChzb3VyY2VM
ZW5ndGggPCAyIHx8IHNvdXJjZVRleHRbaWR4XSAhPSAnKScpIHsKICAgICAgICAgLy8gRm9yIGZ1
bmN0aW9uIGNhbGxzIHRoYXQgaGF2ZSBtYW55IG5ldyBsaW5lcyBpbiBiZXR3ZWVuIHRoZWlyIG9w
ZW4gcGFyZW50aGVzaXMKICAgICAgICAgLy8gYW5kIHRoZWlyIGNsb3NpbmcgcGFyZW50aGVzaXMs
IHRoZSB0ZXh0IHJhbmdlIHBhc3NlZCBpbnRvIHRoZSBtZXNzYWdlIGFwcGVuZGVyIAotICAgICAg
ICAvLyB3aWxsIG5vdCBpbmxjdWRlIHRoZSB0ZXh0IGluIGJldHdlZW4gdGhlc2UgcGFyZW50aGVz
ZXMsIGl0IHdpbGwganVzdCBiZSB0aGUgZGVzaXJlZAorICAgICAgICAvLyB3aWxsIG5vdCBpbmNs
dWRlIHRoZSB0ZXh0IGluIGJldHdlZW4gdGhlc2UgcGFyZW50aGVzZXMsIGl0IHdpbGwganVzdCBi
ZSB0aGUgZGVzaXJlZAogICAgICAgICAvLyB0ZXh0IHRoYXQgcHJlY2VkZXMgdGhlIHBhcmVudGhl
c2VzLgogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyNTM5NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODks
NiArMTg5LDcgQEAgcHVibGljOgogICAgIGlubGluZSBib29sIGVxdWFsKEpTR2xvYmFsT2JqZWN0
KiwgSlNTdHJpbmcqIG90aGVyKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKEpTR2xv
YmFsT2JqZWN0KikgY29uc3Q7CiAgICAgaW5saW5lIGNvbnN0IFN0cmluZyYgdHJ5R2V0VmFsdWUo
Ym9vbCBhbGxvY2F0aW9uQWxsb3dlZCA9IHRydWUpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZ0lt
cGwqIGdldFZhbHVlSW1wbCgpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZ0ltcGwqIHRyeUdldFZh
bHVlSW1wbCgpIGNvbnN0OwogICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3Q7CiAKQEAgLTcwMyw2ICs3MDQsMTIgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU1N0cmlu
Zzo6bGVuZ3RoKAogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RyaW5nSW1wbCo+KHBvaW50ZXIp
LT5sZW5ndGgoKTsKIH0KIAoraW5saW5lIGNvbnN0IFN0cmluZ0ltcGwqIEpTU3RyaW5nOjpnZXRW
YWx1ZUltcGwoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNSb3BlKCkpOworICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8U3RyaW5nSW1wbCo+KG1fZmliZXIpOworfQorCiBpbmxpbmUgY29uc3QgU3Ry
aW5nSW1wbCogSlNTdHJpbmc6OnRyeUdldFZhbHVlSW1wbCgpIGNvbnN0CiB7CiAgICAgdWludHB0
cl90IHBvaW50ZXIgPSBtX2ZpYmVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkocmV2aXNpb24gMjUzOTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQwLDIwICsxMTQwLDE1IEBAIHZvaWQgVk06OmR1
bXBSZWdFeHBUcmFjZSgpCiB9CiAjZW5kaWYKIAotV2F0Y2hwb2ludFNldCogVk06OmVuc3VyZVdh
dGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpCitXYXRjaHBvaW50U2V0KiBWTTo6ZW5zdXJlV2F0Y2hwb2ludFNldEZvckltcHVyZVByb3Bl
cnR5KGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgYXV0byBy
ZXN1bHQgPSBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHMuYWRkKHByb3BlcnR5TmFtZS5z
dHJpbmcoKSwgbnVsbHB0cik7CisgICAgYXV0byByZXN1bHQgPSBtX2ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludFNldHMuYWRkKHByb3BlcnR5TmFtZSwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRSZWYobmV3
IFdhdGNocG9pbnRTZXQoSXNXYXRjaGVkKSk7CiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuZ2V0KCk7CiB9CiAKLXZvaWQgVk06OnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVBy
b3BlcnR5KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgV2F0Y2hwb2ludCogd2F0Y2hw
b2ludCkKLXsKLSAgICBlbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVy
dHlOYW1lKS0+YWRkKHdhdGNocG9pbnQpOwotfQotCi12b2lkIFZNOjphZGRJbXB1cmVQcm9wZXJ0
eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3ZvaWQgVk06OmFkZEltcHVyZVByb3BlcnR5
KGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgaWYgKFJlZlB0
cjxXYXRjaHBvaW50U2V0PiB3YXRjaHBvaW50U2V0ID0gbV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnRTZXRzLnRha2UocHJvcGVydHlOYW1lKSkKICAgICAgICAgd2F0Y2hwb2ludFNldC0+ZmlyZUFs
bCgqdGhpcywgIkltcHVyZSBwcm9wZXJ0eSBhZGRlZCIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAyNTM5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI4LDExICsxMDI4LDEwIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2hyaW5rRm9vdHByaW50V2hlbklkbGUoKTsKIAotICAgIFdhdGNocG9p
bnRTZXQqIGVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlm
aWVyJik7Ci0gICAgdm9pZCByZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25z
dCBJZGVudGlmaWVyJiwgV2F0Y2hwb2ludCopOworICAgIFdhdGNocG9pbnRTZXQqIGVuc3VyZVdh
dGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCopOwog
ICAgIAogICAgIC8vIEZJWE1FOiBVc2UgQXRvbVN0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0
aCBJZGVudGlmaWVyLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVy
dHkoY29uc3QgU3RyaW5nJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQ
cm9wZXJ0eShjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIAogICAgIElubGluZVdhdGNo
cG9pbnRTZXQmIHByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpIHsgcmV0dXJuIG1fcHJpbWl0aXZl
R2lnYWNhZ2VFbmFibGVkOyB9CiAKQEAgLTEyMDYsNyArMTIwNSw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3Nob3VsZEJ1aWxkUENUb0NvZGVPcmlnaW5NYXBwaW5nIHsgZmFsc2UgfTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKLSAgICBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPFdhdGNocG9pbnRTZXQ+PiBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dFNldHM7CisgICAgSGFzaE1hcDxjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCosIFJlZlB0cjxXYXRj
aHBvaW50U2V0Pj4gbV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUeXBlUHJvZmlsZXI+IG1fdHlwZVByb2ZpbGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlUHJvZmlsZXJMb2c+IG1fdHlwZVByb2ZpbGVyTG9nOwogICAgIHVuc2lnbmVkIG1fdHlw
ZVByb2ZpbGVyRW5hYmxlZENvdW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjUzOTc1KQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMjAtMDEtMDIgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IFJlcGxhY2UgdXNlcyBvZiBCb3g8SWRlbnRpZmllcj4gd2l0aCBhIG5ldyBDYWNoZWFibGVJZGVu
dGlmaWVyIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA1NTQ0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81ODA0MTgwMD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0Nv
bW1vblZNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZEltcHVyZVByb3BlcnR5KToKKwogMjAy
MC0wMS0wMiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgU2ltcGxp
ZnkgU3RyaW5nQnVpbGRlciBBUEkvYWxpZ24gd2l0aCBtYWtlU3RyaW5nIGJ5IHJlbW92aW5nIGFw
cGVuZEZpeGVkKiBmdW5jdGlvbnMgYW5kIHVzaW5nIEZvcm1hdE51bWJlciBzdHJ1Y3QgaW5zdGVh
ZApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkocmV2aXNpb24g
MjUzOTc1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIEZyYW1lKiBsZXhpY2FsRnJhbWVGcm9tQ29tbW9u
Vk0oKQogCiB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5
TmFtZSkKIHsKLSAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7
CisgICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUuaW1wbCgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387410</attachid>
            <date>2020-01-10 18:03:11 -0800</date>
            <delta_ts>2020-01-10 18:43:27 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-205544.patch</filename>
            <type>text/plain</type>
            <size>120790</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTQzODUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIwLTAxLTEwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQm94PElkZW50aWZpZXI+IHdpdGggYSBuZXcg
Q2FjaGVhYmxlSWRlbnRpZmllciBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNTU0NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTgwNDE4
MDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBz
dHJlc3MvcmFjeS1nYy1jbGVhbnVwLW9mLWlkZW50aWZpZXItYWZ0ZXItbXV0YXRvci1zdG9wcy1y
dW5uaW5nLmpzOiBBZGRlZC4KKwogMjAyMC0wMS0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlIGRvZXNuJ3Qg
bW9kZWwgcG9pbnRlcnMgdG8gYWxsb2NhdGlvbnMgaW4gY29udHJvbCBmbG93IHByb3Blcmx5Cklu
ZGV4OiBKU1Rlc3RzL3N0cmVzcy9yYWN5LWdjLWNsZWFudXAtb2YtaWRlbnRpZmllci1hZnRlci1t
dXRhdG9yLXN0b3BzLXJ1bm5pbmcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvcmFj
eS1nYy1jbGVhbnVwLW9mLWlkZW50aWZpZXItYWZ0ZXItbXV0YXRvci1zdG9wcy1ydW5uaW5nLmpz
CShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3JhY3ktZ2MtY2xlYW51cC1vZi1pZGVu
dGlmaWVyLWFmdGVyLW11dGF0b3Itc3RvcHMtcnVubmluZy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE2IEBACisvL0AgcnVuRGVmYXVsdCgiLS1udW1iZXJPZkdDTWFya2Vycz0xIiwgIi0t
dXNlREZHSklUPWZhbHNlIiwgIi0tdXNlTExJbnQ9ZmFsc2UiKQorCitmdW5jdGlvbiBmb28oKSB7
CisgICAgZ2MoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAg
ICAgIGNvbnN0IG8gPSB7IGY6IDQyIH07CisgICAgICAgIG9bU3ltYm9sLnNwbGl0LmRlc2NyaXB0
aW9uXTsKKyAgICB9Cit9CitmdW5jdGlvbiBiYXIoKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDA7IGkrKykKKyAgICAgICAgbmV3IFVpbnQ4QXJyYXkoMjAwMDAwKS5zdWJhcnJheSgpOwor
fQorCitmb28oKTsKK2JhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNTQzODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjk2IEBACisyMDIwLTAxLTEwICBNYXJrIExhbSAgPG1hcmsubGFtQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQm94PElkZW50aWZpZXI+IHdpdGgg
YSBuZXcgQ2FjaGVhYmxlSWRlbnRpZmllciBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTU0NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NTgwNDE4MDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgdXNlIG9mIEJveDxJZGVudGlmaWVyPiBpcyB0byBn
ZXQgYXJvdW5kIGhhdmluZyB0bworICAgICAgICByZWYvZGVyZWYgdGhlIHVuZGVybHlpbmcgVW5p
cWVkU3RyaW5nSW1wbCBpbiBJZGVudGlmaWVycyBmcm9tIHRoZSBjb21waWxlcgorICAgICAgICBh
bmQgR0MgdGhyZWFkcy4gIEhvd2V2ZXIsIGl0IHByb3ZlcyB0byBiZSBkaWZmaWN1bHQgdG8gY29u
dHJvbCB3aGVuIHRoZXNlCisgICAgICAgIEJveDxJZGVudGlmaWVyPnMgZ2V0IGRlc3RydWN0ZWQs
IGFuZCByZXF1aXJlcyB0aGF0IHdlIGZpbmQgYWxsIHRoZSBwbGFjZXMgaW4KKyAgICAgICAgdGhl
IGNvbXBpZXIgYW5kIEdDIHRocmVhZHMgd2hlcmUgdGhpcyBjYW4gaGFwcGVuLCBhbmQgYXBwbHkg
a2VlcCBhbGl2ZSB0YWN0aWNzCisgICAgICAgIHRoZXJlIHRvIGRlZmVyIGRlc3RydWN0aW9uIG9m
IHRoZSBCb3g8SWRlbnRpZmllcj4gdG8gdGhlIG11dGF0b3IgdGhyZWFkLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggZml4ZXMgdGhpcyBieSByZXBsYWNpbmcgdXNlcyBvZiBCb3g8SWRlbnRpZmllcj4g
d2l0aCBhCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5
IGEgdGFnZ2VkIHVuaW9uIG9mIGEgSlNDZWxsKiBvciBhCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKi4gIFRoZSBKU0NlbGwqLCBpbiB0aGlzIGNhc2UsIGNhbiBiZSBlaXRoZXIgYSBTeW1ib2wq
IG9yIGEKKyAgICAgICAgSlNTdHJpbmcqIHRoYXQgaXMgYmFja2VkIGJ5IGFuIGF0b20gc3RyaW5n
LiAgVGhlIFZNIHJ1bnRpbWUgZW5zdXJlcyB0aGF0IHdlJ2xsCisgICAgICAgIG5ldmVyIHRyeSB0
byBjYWNoZSBhbiBpZGVudGlmaWVyIGZyb20gYSBKU0NlbGwgdGhhdCBpcyBub3Qgb25lIG9mIHRo
ZXNlLiAgVGhpcworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGNhbiBiZSBkZXN0cnVjdGVk
IGZyb20gdGhlIGNvbXBpbGVyIG9yIEdDIHRocmVhZC4gIFNpbmNlIGl0CisgICAgICAgIGRvZXNu
J3QgaG9sZCBhIHJlZiBvZiB0aGUgdW5kZXJseWluZyBVbmlxdWVkU3RyaW5nSW1wbCwgaXQgd29u
J3QgdHJ5IHRvIGRlcmVmCisgICAgICAgIGl0IG9uIGRlc3RydWN0aW9uLgorCisgICAgICAgIElu
c3RlYWQsIHdlJ2xsIG5lZWQgdG8gdmlzaXQgQ2FjaGVhYmxlSWRlbnRpZmllcnMgZHVyaW5nIEdD
IHNjYW5zIHRvIGtlZXAgdGhlCisgICAgICAgIEpTQ2VsbCBpbiBpdCBhbGl2ZSwgYW5kIHRoYXQg
SlNDZWxsIHdpbGwsIGluIHR1cm4sIGtlZXAgdGhlIHVuZGVybHlpbmcKKyAgICAgICAgVW5pcXVl
ZFN0cmluZ0ltcGwgYWxpdmUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGRvZXMgdGhlIGZv
bGxvd2luZzoKKworICAgICAgICAxLiBBZGQgYSB2aXNpdEFnZ3JlZ2F0ZSgpIG1ldGhvZCB0byBT
dHJ1Y3R1cmVTdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3MsIGFuZAorICAgICAgICAgICBBY2Nl
c3NDYXNlIHRvIHZpc2l0IHRoZSBDYWNoZWFibGVJZGVudGlmaWVyJ3MgSlNDZWxsIGlkZW50aWZp
ZXIuICBUaGlzCisgICAgICAgICAgIHZpc2l0QWdncmVnYXRlKCkgaXMgY2FsbGVkIGZyb20gQ29k
ZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcygpLgorCisgICAgICAgICAgIFdo
ZW4gd2Ugd3JpdGUgYmFycmllciBhIENvZGVCbG9jaywgaXQgZ3VhcmFudGVlcyB0aGF0IGl0cyB2
aXNpdEFnZ3JlZ2F0ZSgpCisgICAgICAgICAgIG1ldGhvZHMgaXMgY2FsbGVkLiAgSG93ZXZlciwg
aXQgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgaXRzIHByb3BhZ2F0ZVRyYW5zaXRpb25zKCkKKyAg
ICAgICAgICAgbWV0aG9kIHdpbGwgYmUgY2FsbGVkLiAgU2luY2UgdGhlIENhY2hlYWJsZUlkZW50
aWZpZXIncyByZWZlcmVuY2UgdG8gYSBjZWxsCisgICAgICAgICAgIHNob3VsZCBiZSBhIHN0cm9u
ZyByZWZlcmVuY2UsIHZpc2l0aW5nIGl0IHZpYSBhIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFn
Z3JlZ2F0ZSgpCisgICAgICAgICAgIG1ldGhvZCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisg
ICAgICAgICAgIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1
NTQ0I2M3IGZvciBhbiBleGFtcGxlIG9mIHdoeQorICAgICAgICAgICBwcm9wYWdhdGVUcmFuc2l0
aW9ucygpIGRvZXNuJ3QgYWx3YXlzIGRvIHRoZSBqb2IuCisKKyAgICAgICAgICAgU3RydWN0dXJl
U3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoKSBpcyBhbHNvIGluYXBwcm9wcmlhdGUgZm9y
IHRoaXMKKyAgICAgICAgICAgYmVjYXVzZSBpdCBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbGwgbWFy
a2luZyBpcyBkb25lLiAgSXQgaXMgYWxzbyBub3QgbWVhbnQKKyAgICAgICAgICAgdG8ga2VlcCBj
ZWxscyBhbGl2ZSBidXQgbWVyZWx5IGZvciBjbGVhcmluZyB3ZWFrIHJlZmVyZW5jZXMgdG8gZGVh
ZCBjZWxscy4KKworICAgICAgICAyLiBBbHNvIGFkZCB0byB2aXNpdEFnZ3JlZ2F0ZSgpIGZvciBN
b2R1bGVOYW1lc3BhY2VEYXRhJ3MgbV9pZGVudGlmaWVyIGluCisgICAgICAgICAgIEdldEJ5U3Rh
dHVzOjptYXJrSWZDaGVhcCgpLgorCisgICAgICAgIDMuIFJlbW92ZSBwcmV2aW91c2x5IGFwcGxp
ZWQga2VlcCBhbGl2ZSB0YWN0aWNzIHRvIHdvcmsgYXJvdW5kIEJveDxJZGVudGlmaWVyPgorICAg
ICAgICAgICBkZXN0cnVjdGlvbi4gIFRoaXMgYWxzbyByZXRvcmVzIHRoZSBhbGxvd2FuY2UgdG8g
ZGVzdHJ1Y3QgREZHOjpQbGFucyBvbiBhCisgICAgICAgICAgIGNvbXBpbGVyIHRocmVhZC4KKwor
ICAgICAgICA0LiBBZGRlZCBhIEpTU3RyaW5nOmdldFZhbHVlSW1wbCgpIGhlbHBlci4KKworICAg
ICAgICA1LiBBZGRlZCBhIHdyaXRlIGJhcnJpZXIgaW4gREZHIGFuZCBGVEwgSklURmluYWxpemVy
J3MgZmluYWxpemVDb21tb24oKSB0byBlbnN1cmUKKyAgICAgICAgICAgdGhhdCBmcm96ZW4gdmFs
dWVzIGFyZSBzY2FubmVkIGJ5IHRoZSBHQy4KKworICAgICAgICAgICBEdXJpbmcgY29tcGlsYXRp
b24sIHRoZSBmcm96ZW4gdmFsdWVzIHdlcmUgcHJldmlvdXNseSBwcm90ZWN0ZWQgYnkgdGhlIFBs
YW4uCisgICAgICAgICAgIEFmdGVyIGZpbmFsaXphdGlvbiwgdGhleSBzaG91bGQgYmUgcHJvdGVj
dGVkIGJ5IHRoZSBDb2RlQmxvY2suICBIZW5jZSwgd2UKKyAgICAgICAgICAgc2hvdWxkIGJhcnJp
ZXIgdGhlIENvZGVCbG9jayBzaW5jZSB0aGUgbGFzdCBHQyBzY2FuIG9mIHRoZSBDb2RlQmxvY2sg
bWF5IGhhdmUKKyAgICAgICAgICAgaGFwcGVuZWQgYmVmb3JlIHRoZSBmcm96ZW4gdmFsdWVzIHdl
cmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBDb2RlQmxvY2suCisKKyAgICAgICAgR0MgY29uc2lkZXJh
dGlvbnM6CisgICAgICAgID09PT09PT09PT09PT09PT09PQorICAgICAgICBUaGUgZm9sbG93aW5n
IGFsc28gYWRkcmVzc2VzIFl1c3VrZSdzIGNvbmNlcm5zIGluIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU1NDQjYzEwLgorCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXIgaXMgb25seSBzdG9yZWQgYXMgZmllbGRzIGluIDQgY2xhc3Nlcy9zdHJ1Y3RzOgorCisg
ICAgICAgIDEuIEFjY2Vzc0Nhc2U6Om1faWRlbnRpZmllcgorICAgICAgICAyLiBHZXRCeUlkVmFy
aWFudDo6bV9pZGVudGlmaWVyCisgICAgICAgIDMuIE1vZHVsZU5hbWVzcGFjZURhdGE6Om1faWRl
bnRpZmllcgorICAgICAgICA0LiBTdHJ1Y3R1cmVTdHViSW5mbzo6bV9nZXRCeUlkU2VsZklkZW50
aWZpZXIKKworICAgICAgICBBY2Nlc3NDYXNlOjptX2lkZW50aWZpZXIKKyAgICAgICAgPT09PT09
PT09PT09PT09PT09PT09PT09CisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3ND
YXNlKCksIGZvciBHZXRCeSBvcGVyYXRpb25zIHRoYXQgY2FuIHVzZSBDYWNoZWFibGVJZGVudGlm
aWVycywKKyAgICAgICAgaXMgb25seSBjYWxsZWQgaW4gdHJ5Q2FjaGVHZXRCeSgpIHdpdGhpbiBh
IGJsb2NrIGd1YXJkZWQgYnkgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyLgorICAgICAgICBUaGUg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGVuc3VyZXMgdGhhdCB0aGUgQ2FjaGVhYmxlSWRlbnRp
ZmllciBpcyB3aWxsIGJlCisgICAgICAgIHByb3RlY3RlZCBmcm9tIHRoZSBHQyB1bnRpbCBTdHJ1
Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgpIGlzIGZpbmlzaGVkIGFkZGluZworICAgICAg
ICB0aGUgQWNjZXNzQ2FzZS4KKworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSgpIHdpbGwgYmFycmllciB0aGUgb3duZXIgQ29kZUJsb2NrIGF0IGl0cyBlbmQsCisgICAg
ICAgIGFuZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKCkgd2lsbCB2
aXNpdCB0aGUgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAgIHdoaWNoIGluIHR1cm4gdmlzaXRz
IHRoZSBBY2Nlc3NDYXNlLiAgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRlKCkgaGFz
CisgICAgICAgIGJlZW4gYWRkZWQgZm9yIHRoaXMgcHVycG9zZS4KKworICAgICAgICBHZXRCeUlk
VmFyaWFudDo6bV9pZGVudGlmaWVyCisgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KKyAgICAgICAgR2V0QnlJZFZhcmlhbnQgaXMgb25seSBzdG9yZWQgaW4gR2V0QnlTdGF0dXMu
ICBCb3RoIEdldEJ5SWRWYXJpYW50IGFuZCBHZXRCeVN0YXR1cworICAgICAgICBhcmUgb25seSBj
cmVhdGVkIGFuZCBoYW5kbGVkIGluIHRoZSBERkcvRlRMIGNvbXBpbGVyIHRocmVhZHMuICBXaGls
ZSB0aGUgY29tcGlsZXIKKyAgICAgICAgdGhyZWFkIGlzIHdvcmtpbmcgd2l0aCB0aGVtLCB0aGV5
IGFyZSBzYWZlIGZyb20gdGhlIEdDIGJlY2F1c2UgdGhlIEdDIHdvbid0IGNvbGxlY3QKKyAgICAg
ICAgb2JqZWN0cyB1bnRpbCB0aGUgY29tcGlsZXIgdGhyZWFkIGlzIGF0IGEgU2FmZVBvaW50Lgor
CisgICAgICAgIEF0IGNvbXBpbGVyIFNhZmVQb2ludHMsIGFueSBHZXRCeVN0YXR1cyB0aGF0IG5l
ZWRzIHRvIGJlIHBlcnNpc3RlZCBpcyBzdG9yZWQgaW4KKyAgICAgICAgREZHOjpQbGFuOjptX3Jl
Y29yZGVkU3RhdHVzZXMuICBUaGUgUGxhbiB3aWxsIHZpc2l0IHRoZSBtX3JlY29yZGVkU3RhdHVz
ZXMgaW4KKyAgICAgICAgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oKS4KKwor
ICAgICAgICBBdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLCBQbGFuOjptX3JlY29yZGVkU3RhdHVz
ZXMgaXMgdHJhbnNmZXJyZWQgb3ZlciB0byB0aGUgb3duZXIKKyAgICAgICAgQ29kZUJsb2NrJ3Mg
REZHOjpDb21tb25EYXRhIGluIFBsYW46OmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNr
KCkuCisgICAgICAgIFBsYW46OmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkgd2ls
bCBhbHNvIGJhcnJpZXIgdGhlIG93bmVyIENvZGVCbG9jayBhdAorICAgICAgICBpdHMgZW5kLgor
CisgICAgICAgIFRoZXJlYWZ0ZXIsIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVy
ZW5jZXMoKSB3aWxsIHZpc2l0IHRoZSByZWNvcmRlZFN0YXR1c2VzLgorCisgICAgICAgIE1vZHVs
ZU5hbWVzcGFjZURhdGE6Om1faWRlbnRpZmllcgorICAgICAgICA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKyAgICAgICAgTW9kdWxlTmFtZXNwYWNlRGF0YSBpcyBvbmx5IHN0b3Jl
ZCBpbiBhIEdldEJ5U3RhdHVzLCBhbmQgaXMgdGhlcmVmb3JlIHByb3RlY3RlZAorICAgICAgICBz
aW1pbGFybHkgYXMgdGhlIEdldEJ5SWRWYXJpYW50OjptX2lkZW50aWZpZXIgY2FzZSBhYm92ZS4K
KworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbzo6bV9nZXRCeUlkU2VsZklkZW50aWZpZXIKKyAg
ICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAg
IFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoKSBpcyBjYWxsZWQgZnJvbSBpbnNp
ZGUgdHJ5Q2FjaGVHZXRCeSgpIHVuZGVyCisgICAgICAgIHRoZSBwcm90ZWN0aW9uIG9mIEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlci4gIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYo
KQorICAgICAgICB3aWxsIGJhcnJpZXIgdGhlIG93bmVyIENvZGVCbG9jay4gIFdpdGggdGhhdCwg
bV9nZXRCeUlkU2VsZklkZW50aWZpZXIgd2lsbCBiZQorICAgICAgICB2aXNpdGVkIGJ5IFN0cnVj
dHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZSgpLgorCisgICAgICAgIERlc2lyZWRJZGVudGlm
aWVycworICAgICAgICA9PT09PT09PT09PT09PT09PT0KKyAgICAgICAgVGhlIGNvbXBpbGVyIHRo
cmVhZCBtYXkgYWxzbyBzdGFzaCBhIENhY2hlYWJsZUlkZW50aWZpZXIncyB1aWQgaW4gaXRzCisg
ICAgICAgIERlc2lyZWRJZGVudGlmaWVycy4gIE5vcm1hbGx5LCB0aGUgaWRlbnRpZmllcnMgc3Rh
c2hlZCBpbiBEZXNpcmVkSWRlbnRpZmllcnMgYXJlCisgICAgICAgIGZyb20gaWRlbnRpZmllcnMg
dGhhdCB0aGUgQ29kZUJsb2NrIGFscmVhZHkga25vd3MgYWJ1dCBhbmQgbWFuYWdlcyAoZS5nLiBm
cm9tCisgICAgICAgIEdldEJ5SWRzKS4gIEZvciB1aWRzIGZyb20gYSBjZWxsLWJhc2VkIENhY2hl
YWJsZUlkZW50aWZpZXIgdmFyaWFibGUgaXMgcGFzc2VkIHRvCisgICAgICAgIGEgR2V0QnlWYWws
IHdlIG5lZWQga2VwIHRoZSBjZWxsIGFsaXZlIGluIG9yZGVyIHRvIGtlZXAgdGhlIHVpZCBhbGl2
ZS4gIFRoaXMgaXMKKyAgICAgICAgYWNoaWV2ZWQgYnkgZnJlZXppbmcgdGhlIGNlbGwgd2l0aCBm
cmVlemVTdHJvbmcoKSBpbiB0aGUgb3BfZ2V0X2J5X3ZhbCBjYXNlIGluCisgICAgICAgIHRoZSBE
RkcgQnl0ZWNvZGVQYXJzZXIuCisKKyAgICAgICAgUmVzZXRpbmcgYSBTdHJ1Y3R1cmVTdHViSW5m
byB3aGlsZSBpdHMgSUMgY29kZSBpcyBzdGlsbCBleGVjdXRpbmcgb24gdGhlIHN0YWNrCisgICAg
ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICBUaGUgY29uY2VybiBpcyB0aGF0IElD
IGNvZGUgbWF5IGNhbGwgc2xvdyBwYXRoIC8gZ2V0dGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBpbiB0
dXJuOgorCisgICAgICAgIDEuIHJlc2V0IHRoZSBJQywgYW5kCisgICAgICAgIDIuIHJ1biB0aGUg
R0MuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgYSBwcm9ibGVtIGlmOgorCisgICAgICAgIDEuIHRo
ZXJlIGlzIGEgc2NlbmFyaW8gd2hlcmUgd2UgcmV0dXJuIGZyb20gdGhlIHNsb3cgcGF0aCAvIGdl
dHRlciBmdW5jdGlvbgorICAgICAgICAgICBhbmQgcnVuIElDIGNvZGUgdGhhdCB1c2VzIHRoZSBj
ZWxsIC8gdWlkIGZyb20gdGhlIENhY2hlYWJsZUlkZW50aWZpZXIuCisKKyAgICAgICAgICAgVGhp
cyBpcyBiZWNhdXNlIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBpcyB3aGF0IHZpc2l0cyB0aGUgdGhh
dCBjZWxsLCB3aGljaAorICAgICAgICAgICBpbiB0dXJuIGl0cyB1aWQgYWxpdmUuICBPbmNlIHRo
ZSBTdHJ1Y3R1cmVTdHViSW5mbyBpcyByZXNldCwgaXQgd2lsbCBubworICAgICAgICAgICBsb25n
ZXIgYmUgYXNzb2NpYXRlZCB3aXRoIGFueSBBY2Nlc3NDYXNlIG9yIHRoZSBtX2dldEJ5SWRTZWxm
SWRlbnRpZmllci4KKyAgICAgICAgICAgQXMgc3VjaCB0aGV5IHdpbGwgbm90IGJlIHZpc2l0ZWQs
IGFuZCB0aGUgQ2FjaGVhYmxlSWRlbnRpZmllciBtYXkgYmUgY29sbGVjdGVkCisgICAgICAgICAg
IGJ5IHRoZSBHQy4KKworICAgICAgICAgICBJbiBwcmFjdGljZSwgdGhlIGdlbmVyYXRlZCBJQyBj
b2RlIG5ldmVyIHVzZXMgdGhlIGNlbGwgLyB1aWQgYWZ0ZXIgaXQgY2FsbHMKKyAgICAgICAgICAg
YW55IHNsb3cgcGF0aCAvIGdldHRlciBmdW5jdGlvbi4gIEkndmUgdmVyaWZpZWQgdGhpcyBieSBh
dWRpdGluZyB0aGUgY29kZQorICAgICAgICAgICBnZW5lcmF0aW9uIGluIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoKSBhbmQgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUo
KS4KKyAgICAgICAgICAgSGVuY2UsIHRoZXJlJ3Mgbm8gaXNzdWUgd2l0aCB1c2luZyBhIGNvbGxl
Y3RlZCBjZWxsIC8gdWlkLgorCisgICAgICAgIDIuIHRoZXJlIGlzIGEgc2NlbmFyaW8gd2hlcmUg
YSBzbG93IHBhdGggLyBnZXR0ZXIgZnVuY3Rpb24gbWFrZXMgdXNlIG9mIHRoZSBjZWxsIC8gdWlk
CisgICAgICAgICAgIGZyb20gdGhlIENhY2hlYWJsZUlkZW50aWZpZXIgYnV0IGRvZXMgbm90IHBy
b3RlY3QgaXQuCisKKyAgICAgICAgICAgVGhlIG9ubHkgMiBzbG93IHBhdGggZnVuY3Rpb25zOgor
ICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKCkKKyAgICAgICAgICAgICAg
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUoKQorCisgICAgICAgICAgIG9wZXJhdGlvbkdldEJ5
VmFsR2VuZXJpYygpIGRvZXMgbm90IHVzZSBhbnkgQ2FjaGVhYmxlSWRlbnRpZmllciBmcm9tIHRo
ZSBTdHJ1Y3R1cmVTdHViSW5mby4KKworICAgICAgICAgICBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplKCkgbW9kaWZpZXMgdGhlIFN0cnVjdHVyZVN0dWJJbmZvIGluIHRyeUNhY2hlR2V0QnkoKQor
ICAgICAgICAgICB1bmRlciB0aGUgcHJvdGVjdGlvbiBvZiBhIEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciwgYW5kIGNhbiByZXNldCB0aGUKKyAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8uICBI
b3dldmVyLCBpdCBkb2VzIG5vdCB1c2UgYW55IENhY2hlYWJsZUlkZW50aWZpZXIgYWZ0ZXIKKyAg
ICAgICAgICAgdGhhdC4KKworICAgICAgICAgICBIZW5jZSwgdGhlcmUncyBhbHNvIG5vIEdDIGlz
c3VlIGhlcmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y29tbWl0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
Y2FuUmVwbGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmR1bXAgY29uc3Qp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp2aXNpdEFnZ3JlZ2F0ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNl
Lmg6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnVpZCBjb25zdCk6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6
OkdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRW
YXJpYW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojp2
aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250
ZXh0IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oOgorICAgICAg
ICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6aWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChKU0M6
OkdldEJ5SWRWYXJpYW50OjpvdmVybGFwcyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0
dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6Cisg
ICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6R2V0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAg
ICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6
R2V0QnlTdGF0dXM6OnNpbmdsZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0dldEJ5U3RhdHVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZS5jcHA6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OkdldHRlclNldHRl
ckFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVh
dGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9JbnN0YW5jZU9mQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6Oklu
c3RhbmNlT2ZBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mQWNjZXNzQ2FzZSk6CisgICAgICAgICogYnl0
ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkludHJp
bnNpY0dldHRlckFjY2Vzc0Nhc2U6OkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UpOgorICAgICAg
ICAoSlNDOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAqIGJ5
dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDoKKyAgICAgICAgKiBieXRlY29kZS9N
b2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6TW9kdWxlTmFtZXNw
YWNlQWNjZXNzQ2FzZTo6TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6
Ok1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6OmNyZWF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUv
TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdn
cmVnYXRlKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgor
ICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6CisgICAgICAgICogYnl0ZWNv
ZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OlByb3h5YWJsZUFjY2Vz
c0Nhc2U6OlByb3h5YWJsZUFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpQcm94eWFibGVBY2Nl
c3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2Uu
aDoKKyAgICAgICAgKiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVjb3JkZWRTdGF0dXNlczo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2Rl
L1JlY29yZGVkU3RhdHVzZXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgICog
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkluZm86OmdldEJ5SWRTZWxmSWRlbnRpZmllcik6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRC
eUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6RGVzaXJlZElkZW50aWZpZXJzOjplbnN1cmUpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2ly
ZWRJZGVudGlmaWVyczo6YXQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRJZGVu
dGlmaWVyczo6cmVhbGx5QWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSWRlbnRpZmll
cnM6OnByb2Nlc3NDb2RlQmxvY2tJZGVudGlmaWVyc0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmg6CisgICAgICAgICogZGZnL0RGR0pJVEZp
bmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUNv
bW1vbik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46On5QbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2FuY2VsKToKKyAgICAgICAg
KiBkZmcvREZHUGxhbi5oOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmtlZXBBbGl2ZUlkZW50
aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyk6CisgICAgICAgIChKU0M6OkRG
Rzo6V29ya2xpc3Q6OnJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0pOgorICAgICAgICAoSlND
OjpERkc6OldvcmtsaXN0OjpkZWxldGVDYW5jZWxsZWRQbGFuc0ZvclZNKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBkZmcvREZHV29ya2xpc3QuaDoKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVy
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKToK
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L1JlcGF0Y2gu
Y3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5KToKKyAgICAgICAgKEpTQzo6cmVwYXRj
aEdldEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVBcnJheUdldEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6dHJ5Q2FjaGVJbnN0YW5jZU9mKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlk
ZW50aWZpZXI6OkNhY2hlYWJsZUlkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJ
ZGVudGlmaWVyOjppc1VpZCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZp
ZXI6OmlzQ2VsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6Omlz
U3ltYm9sIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6b3BlcmF0
b3IgYm9vbCBjb25zdCk6CisgICAgICAgICogcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6Q2FjaGVh
YmxlSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmNlbGwg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjp1aWQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjppc0NhY2hlYWJsZUlkZW50aWZpZXJD
ZWxsKToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6aXNTeW1ib2xDZWxsIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6aXNTdHJpbmdDZWxsIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6c2V0Q2VsbEJpdHMpOgor
ICAgICAgICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjpzZXRVaWRCaXRzKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6dmlzaXRBZ2dyZWdhdGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWNoZWFibGVJZGVudGlmaWVyOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgICog
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DYWxs
QmFzZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpKU1N0
cmluZzo6Z2V0VmFsdWVJbXBsIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OlZNOjphZGRJbXB1cmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlZNOjpy
ZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9WTS5oOgorCiAyMDIwLTAxLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgogCiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UgZG9lc24ndCBtb2Rl
bCBwb2ludGVycyB0byBhbGxvY2F0aW9ucyBpbiBjb250cm9sIGZsb3cgcHJvcGVybHkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI1NDM4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzg1
LDYgKzc4NSw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAg
ICBydW50aW1lL0J5dGVjb2RlQ2FjaGVFcnJvci5oCiAgICAgcnVudGltZS9DYWNoZVBheWxvYWQu
aAogICAgIHJ1bnRpbWUvQ2FjaGVVcGRhdGUuaAorICAgIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
Zmllci5oCisgICAgcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCiAgICAgcnVu
dGltZS9DYWNoZWRCeXRlY29kZS5oCiAgICAgcnVudGltZS9DYWNoZWRUeXBlcy5oCiAgICAgcnVu
dGltZS9DYWdlZEJhcnJpZXJQdHIuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjU0Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC03MjksNiArNzI5LDcgQEAgcnVudGltZS9CeXRlY29kZUNhY2hlRXJy
b3IuY3BwCiBydW50aW1lL0NhbGxEYXRhLmNwcAogcnVudGltZS9DYWNoZVBheWxvYWQuY3BwCiBy
dW50aW1lL0NhY2hlVXBkYXRlLmNwcAorcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmNwcAog
cnVudGltZS9DYWNoZWRCeXRlY29kZS5jcHAKIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCiBydW50
aW1lL0NhdGNoU2NvcGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjU0Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE5MTUsNiArMTkxNSw4
IEBACiAJCUZFNzQ5N0U2MjA5MDAxQjEwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNzQ5N0U1MjA5MDAxQjAwMDAz
NTY1QiAvKiBKU0NQdHJUYWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRTdDNDE5NjFCOTdGQzRCMDBGNEQ1OTggLyogUGluZ1BvbmdTdGFja092
ZXJmbG93VGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRURBNTBENDFCOTdGNDQyMDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVz
dC5jcHAgKi87IH07CiAJCUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5NjFE
Nzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFOERFNTRCMjNBQzFEQUQwMDVDOTE0MiAvKiBDYWNo
ZWFibGVJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRThERTU0QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmllci5o
ICovOyB9OworCQlGRThERTU0RDIzQUMxRTg2MDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFOERFNTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5o
ICovOyB9OwogCQlGRTk5QjI0OTFDMjRDM0QzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTk5QjI0ODFD
MjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggKi87IH07CiAJCUZFQTA4NjIwMTgy
QjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2lu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZF
QTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2
RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTE3Miw2ICs1MTc0LDkgQEAKIAkJRkU4MEMxOTYxRDc3
NUIyNzAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2F0Y2hTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTgwQzE5
ODFENzc1RkI0MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDYXRjaFNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU4MEMxOUExRDc3NjhGRDAwODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uRXZlbnRM
b2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOERFNTRBMjNBQzFE
QUQwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkU4REU1NEMyM0FDMUU4NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlYWJsZUlkZW50
aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOERFNTRFMjNB
QzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhY2hlYWJsZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3QTYgLyogSklUU3ViR2VuZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2Vu
ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE5lZ0dl
bmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MDExLDYgKzcwMTYs
OSBAQAogCQkJCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmgg
Ki8sCiAJCQkJMTQzNTk1MjAyMkE1MjFDQTAwRTgwODZEIC8qIEJ5dGVjb2RlQ2FjaGVFcnJvci5j
cHAgKi8sCiAJCQkJMTQzNTk1MUYyMkE1MjFDQTAwRTgwODZEIC8qIEJ5dGVjb2RlQ2FjaGVFcnJv
ci5oICovLAorCQkJCUZFOERFNTRFMjNBQzNBOEUwMDVDOTE0MiAvKiBDYWNoZWFibGVJZGVudGlm
aWVyLmNwcCAqLywKKwkJCQlGRThERTU0QTIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRl
bnRpZmllci5oICovLAorCQkJCUZFOERFNTRDMjNBQzFFODYwMDVDOTE0MiAvKiBDYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oICovLAogCQkJCTE0OEIxNDE5MjI1REQxRTkwMEQ2RTk5OCAvKiBD
YWNoZWRCeXRlY29kZS5jcHAgKi8sCiAJCQkJMTQ0Q0EzNEYyMjFGMDM3OTAwODE3Nzg5IC8qIENh
Y2hlZEJ5dGVjb2RlLmggKi8sCiAJCQkJMTREQUZBNDUyMUUzQjg3MTAwNEI2OEY3IC8qIENhY2hl
ZFR5cGVzLmNwcCAqLywKQEAgLTg4NjksNiArODg3Nyw3IEBACiAJCQkJMEY1Q0Y5ODQxRTlENTM3
NzAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQw
RTRBNzFDNDk3Rjc0MDBBNTc3RkEgLyogQWlyT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQwRTRBODFDNDk3Rjc0MDBBNTc3RkEgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRThERTU0QjIzQUMxREFEMDA1QzkxNDIgLyogQ2FjaGVhYmxlSWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MEU0QTkxQzQ5N0Y3NDAwQTU3N0ZBIC8qIEFpck9w
Y29kZVV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIzODc5MDFCRkJDNDREMDBFM0FCMUUg
LyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlDQUJDOTFE
QjU0QTdBMDAwOEU4M0IgLyogQWlyUGFkSW50ZXJmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwMjYzLDYgKzEwMjcyLDcgQEAKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1F
bnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0ND
IC8qIFZNRW50cnlTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QUUyQzQxREY0RjI4MDAw
NjZFRkUxIC8qIFZNSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU4REU1NEQyM0FDMUU4
NjAwNUM5MTQyIC8qIENhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFQzU3OTczMjMxMDVCNTEwMEJDQTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFNkY1NkRFMUU2NEVBRDYwMEQxNzgwMSAvKiBWTVRyYXBz
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI1NDM4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNs
dWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5m
by5oIgogI2luY2x1ZGUgIkRPTUpJVEdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRpcmVjdEFy
Z3VtZW50cy5oIgpAQCAtNTYsMTggKzU3LDE4IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CiAKIERFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQWNj
ZXNzQ2FzZSk7CiAKLUFjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBBY2Nlc3NUeXBlIHR5cGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nl
c3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCitBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5p
cXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiAgICAg
OiBtX3R5cGUodHlwZSkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fcG9seVByb3Rv
QWNjZXNzQ2hhaW4oV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpCi0gICAgLCBtX2lkZW50
aWZpZXIoQm94PElkZW50aWZpZXI+OjpjcmVhdGUoaWRlbnRpZmllcikpCisgICAgLCBtX2lkZW50
aWZpZXIoaWRlbnRpZmllcikKIHsKICAgICBtX3N0cnVjdHVyZS5zZXRNYXlCZU51bGwodm0sIG93
bmVyLCBzdHJ1Y3R1cmUpOwogICAgIG1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAg
IFJFTEVBU0VfQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzVmFsaWQoKSk7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9B
Y2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSB0eXBlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4g
cHJvdG90eXBlQWNjZXNzQ2hhaW4pCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBJ
bkhpdDoKQEAgLTEwNiw3ICsxMDcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNj
ZXNzQ2FzZTo6CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpj
cmVhdGUoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCiAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPFBv
bHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChvbGRTdHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwpAQCAt
MTI3LDcgKzEyOCw3IEBAIEFjY2Vzc0Nhc2U6On5BY2Nlc3NDYXNlKCkKIH0KIAogc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbygKLSAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQogewogICAgIHN3aXRjaCAoc3R1YkluZm8uY2FjaGVUeXBlKCkpIHsKICAgICBjYXNlIENhY2hl
VHlwZTo6R2V0QnlJZFNlbGY6CkBAIC0xMzYsMTggKzEzNywyMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6CiAKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJl
cGxhY2U6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRp
Zmllcik7CisgICAgICAgIEFTU0VSVCghaWRlbnRpZmllci5pc0NlbGwoKSk7CiAgICAgICAgIHJl
dHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNlLCBpZGVudGlmaWVyLCBz
dHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOworICAg
ICAgICBBU1NFUlQoIWlkZW50aWZpZXIuaXNDZWxsKCkpOwogICAgICAgICByZXR1cm4gQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJ
ZFNlbGYub2Zmc2V0LCBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOworICAgICAgICBBU1NFUlQo
IWlkZW50aWZpZXIuaXNDZWxsKCkpOwogICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRl
KHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIGlkZW50aWZpZXIpOwogCiAgICAg
Y2FzZSBDYWNoZVR5cGU6OlN0cmluZ0xlbmd0aDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1
YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKCFpZGVudGlmaWVy
LmlzQ2VsbCgpKTsKICAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIs
IEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCwgaWRlbnRpZmllcik7CiAKICAgICBkZWZhdWx0OgpA
QCAtMTgyLDExICsxODcsMTEgQEAgVmVjdG9yPFdhdGNocG9pbnRTZXQqLCAyPiBBY2Nlc3NDYXNl
OjpjbwogICAgIFZlY3RvcjxXYXRjaHBvaW50U2V0KiwgMj4gcmVzdWx0OwogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7CiAKLSAgICBpZiAoIW1faWRlbnRpZmll
ci0+aXNOdWxsKCkpIHsKKyAgICBpZiAobV9pZGVudGlmaWVyKSB7CiAgICAgICAgIGlmICgoc3Ry
dWN0dXJlICYmIHN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAg
ICAgICAgICAgfHwgbV9jb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
CiAgICAgICAgICAgICB8fCAobV9wb2x5UHJvdG9BY2Nlc3NDaGFpbiAmJiBtX3BvbHlQcm90b0Fj
Y2Vzc0NoYWluLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpKQotICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh2bS5lbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHkoKm1f
aWRlbnRpZmllcikpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh2bS5lbnN1cmVXYXRjaHBv
aW50U2V0Rm9ySW1wdXJlUHJvcGVydHkobV9pZGVudGlmaWVyLnVpZCgpKSk7CiAgICAgfQogCiAg
ICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKQEAgLTU1Miw3ICs1NTcsNyBAQCBib29sIEFjY2Vzc0Nh
c2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzCiAgICAgLy8gTm90ZSB0aGF0IGlmIEEtPmd1YXJk
ZWRCeVN0cnVjdHVyZUNoZWNrKCkgJiYgQi0+Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSB0aGVu
CiAgICAgLy8gQS0+Y2FuUmVwbGFjZShCKSA9PSBCLT5jYW5SZXBsYWNlKEEpLgogCi0gICAgaWYg
KCptX2lkZW50aWZpZXIgIT0gKm90aGVyLm1faWRlbnRpZmllcikKKyAgICBpZiAobV9pZGVudGlm
aWVyICE9IG90aGVyLm1faWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIHN3aXRjaCAodHlwZSgpKSB7CkBAIC02NTAsNyArNjU1LDcgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIAogCiAgICAgb3V0LnByaW50KGNvbW1hLCBtX3N0YXRl
KTsKIAotICAgIG91dC5wcmludChjb21tYSwgImlkZW50ID0gJyIsICptX2lkZW50aWZpZXIsICIn
Iik7CisgICAgb3V0LnByaW50KGNvbW1hLCAiaWRlbnQgPSAnIiwgbV9pZGVudGlmaWVyLCAiJyIp
OwogICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KSkKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAib2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwogCkBAIC03MTIsNiArNzE3LDExIEBAIGJvb2wg
QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2wKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCit2b2lkIEFjY2Vzc0Nhc2U6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAoreworICAgIG1faWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30K
Kwogdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0
aW9uU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsK
QEAgLTczMCw3ICs3NDAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKIAogICAgIGlmIChyZXF1
aXJlc0lkZW50aWZpZXJOYW1lTWF0Y2goKSAmJiAhc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlm
aWVyKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lkZW50aWZpZXItPmlzTnVsbCgpKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9pZGVudGlmaWVyKTsKICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKICAgICAgICAgLy8gbm9uLXJvcGUgc3Ry
aW5nIGNoZWNrIGRvbmUgaW5zaWRlIHBvbHltb3JwaGljIGFjY2Vzcy4KIApAQCAtMTY2OCw3ICsx
Njc4LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAg
ICAgICAgLy8gRklYTUU6IFJldmlzaXQgSlNHbG9iYWxPYmplY3QuCiAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjA0CiAgICAgICAgICAg
ICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nl
c3NvckdldHRlcikgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lkZW50aWZp
ZXItPmlzTnVsbCgpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2lkZW50aWZp
ZXIpOwogICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUZvckN1c3RvbSksCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJKHJldmlzaW9uIDI1NDM4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDEwICsyNywxMCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkNhY2hl
YWJsZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5jbHVkZSAiUG9seVByb3RvQWNj
ZXNzQ2hhaW4uaCIKLSNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJp
bnRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE0MiwxNCArMTQyLDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlVHlwZT4obmV3IEFjY2Vz
c0Nhc2VUeXBlKGFyZ3VtZW50cy4uLikpOwogICAgIH0KIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCogb3du
ZXIsIEFjY2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0ID0gaW52
YWxpZE9mZnNldCwKICAgICAgICAgU3RydWN0dXJlKiA9IG51bGxwdHIsIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksIHN0ZDo6
dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gPSBudWxscHRyKTsKIAogICAgIC8vIFRo
aXMgY3JlYXRlIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBmb3IgdHJhbnNpdGlvbnMuCi0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVy
LCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwg
SlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+KTsKICAgICAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50
aWZpZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxsKiBvd25lciwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKIAogICAgIEFjY2Vzc1R5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQpAQCAtMjM1LDkgKzIzNSw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBUeXBlZEFycmF5VHlwZSB0b1R5cGVkQXJyYXlUeXBlKEFjY2Vzc1R5cGUpOwogCi0gICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllci0+aW1w
bCgpOyB9Ci0gICAgQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X2lkZW50aWZpZXI7IH0KLQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXIudWlkKCk7IH0KKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAogI2lmIEFTU0VSVF9FTkFC
TEVECiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KFN0cnVjdHVyZVN0dWJJbmZvJik7CkBAIC0y
NDYsNyArMjQ1LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgQWNj
ZXNzQ2FzZShWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKKyAgICBBY2Nl
c3NDYXNlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPik7CiAgICAgQWNj
ZXNzQ2FzZShBY2Nlc3NDYXNlJiYpID0gZGVmYXVsdDsKICAgICBBY2Nlc3NDYXNlKGNvbnN0IEFj
Y2Vzc0Nhc2UmIG90aGVyKQogICAgICAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCkBAIC0yNzEs
NiArMjcwLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAg
IHZvaWQgZm9yRWFjaERlcGVuZGVudENlbGwoY29uc3QgRnVuY3RvciYpIGNvbnN0OwogCisgICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpIGNvbnN0OwogICAgIGJvb2wgdmlzaXRX
ZWFrKFZNJikgY29uc3Q7CiAgICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRv
ciYpIGNvbnN0OwogCkBAIC0zMTMsNyArMzEzLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbjsKIAot
ICAgIEJveDxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXI7IC8vIFdlIHVzZSB0aGlzIGluZGlyZWN0
aW9uIHNvIHRoZSBjb25jdXJyZW50IGNvbXBpbGVyIGNhbiBjb25jdXJyZW50bHkgcmVmIHRoaXMg
Qm94LgorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjU0Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDEsOCArMTEwMSw2IEBA
IEJ5dGVjb2RlSW5kZXggQ29kZUJsb2NrOjpieXRlY29kZUluZGV4Rm8KIAogdm9pZCBDb2RlQmxv
Y2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKLQogICAgIFZN
JiB2bSA9ICptX3ZtOwogCiAgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rKSB7CkBAIC0xNjUzLDEyICsxNjUxLDE3IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmds
eVZpc2l0U3Ryb25nUmVmZXIKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQo
KSkgewogICAgICAgICBmb3IgKEJ5VmFsSW5mbyogYnlWYWxJbmZvIDogaml0RGF0YS0+bV9ieVZh
bEluZm9zKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoYnlWYWxJbmZvLT5jYWNoZWRTeW1i
b2wpOworICAgICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEt
Pm1fc3R1YkluZm9zKQorICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1v
biA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CisgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRT
dGF0dXNlcy52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICAgICAgdmlzaXRPU1JFeGl0VGFy
Z2V0cyhsb2NrZXIsIHZpc2l0b3IpOworICAgIH0KICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlz
aW9uIDI1NDM4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFy
aWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFZhcmlhbnQuaCIKIAorI2luY2x1ZGUgIkNhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CkBAIC0zMyw3ICsz
NCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogR2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50
KAotICAgIEJveDxJZGVudGlmaWVyPiBpZGVudGlmaWVyLAorICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgaWRlbnRpZmllciwKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LAogICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cywKQEAgLTExMCw3ICsxMTEsNyBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRl
bXB0VG9NZXJnZShjb25zCiAgICAgaWYgKCEhbV9pZGVudGlmaWVyICE9ICEhb3RoZXIubV9pZGVu
dGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9pZGVudGlmaWVyICYm
ICgqbV9pZGVudGlmaWVyICE9ICpvdGhlci5tX2lkZW50aWZpZXIpKQorICAgIGlmIChtX2lkZW50
aWZpZXIgJiYgKG1faWRlbnRpZmllciAhPSBvdGhlci5tX2lkZW50aWZpZXIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCkBAIC0x
NTYsNiArMTU3LDExIEBAIGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHZXRCeUlkVmFyaWFudDo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgbV9pZGVudGlmaWVyLnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOworfQorCiB2b2lkIEdldEJ5SWRWYXJpYW50OjptYXJrSWZDaGVhcChTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBtX3N0cnVjdHVyZVNldC5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKQEAgLTE4Miw3ICsxODgsNyBAQCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wKFByaW50
U3RyZWFtJiBvCiB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAgIG91dC5wcmludCgiPCIp
OwotICAgIG91dC5wcmludCgiaWQ9JyIsIG1faWRlbnRpZmllciA/IG1faWRlbnRpZmllci0+aW1w
bCgpIDogU3RyaW5nSW1wbDo6ZW1wdHkoKSwgIicsICIpOworICAgIG91dC5wcmludCgiaWQ9JyIs
IG1faWRlbnRpZmllciwgIicsICIpOwogICAgIGlmICghaXNTZXQoKSkgewogICAgICAgICBvdXQu
cHJpbnQoImVtcHR5PiIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMjU0Mzg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAi
Q2FjaGVhYmxlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5j
bHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU9m
ZnNldC5oIgpAQCAtNDQsNyArNDUsNyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFudCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgR2V0QnlJZFZhcmlhbnQoCi0gICAg
ICAgIEJveDxJZGVudGlmaWVyPiwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICAg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKICAgICAgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiA9IG51bGxwdHIsCkBAIC03Niwy
MCArNzcsMjEgQEAgcHVibGljOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NZXJnZShjb25zdCBHZXRC
eUlkVmFyaWFudCYgb3RoZXIpOwogICAgIAorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKICAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBm
aW5hbGl6ZShWTSYpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CiAKLSAgICBCb3g8SWRlbnRpZmllcj4gaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnRpZmllcjsgfQorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1faWRlbnRpZmllcjsgfQogCiAgICAgYm9vbCBvdmVybGFwcyhjb25zdCBHZXRCeUlk
VmFyaWFudCYgb3RoZXIpCiAgICAgewogICAgICAgICBpZiAoISFtX2lkZW50aWZpZXIgIT0gISFv
dGhlci5tX2lkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYg
KG1faWRlbnRpZmllcikgewotICAgICAgICAgICAgaWYgKG1faWRlbnRpZmllci0+aW1wbCgpICE9
IG90aGVyLm1faWRlbnRpZmllci0+aW1wbCgpKQorICAgICAgICAgICAgaWYgKG1faWRlbnRpZmll
ciAhPSBvdGhlci5tX2lkZW50aWZpZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKS5vdmVybGFwcyhvdGhlci5z
dHJ1Y3R1cmVTZXQoKSk7CkBAIC0xMDcsNyArMTA5LDcgQEAgcHJpdmF0ZToKICAgICBKU0Z1bmN0
aW9uKiBtX2ludHJpbnNpY0Z1bmN0aW9uOwogICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4gbV9jdXN0b21BY2Nlc3NvckdldHRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NQXR0cmli
dXRlQW5ub3RhdGlvbj4gbV9kb21BdHRyaWJ1dGU7Ci0gICAgQm94PElkZW50aWZpZXI+IG1faWRl
bnRpZmllcjsgLy8gV2UgdXNlIHRoaXMgaW5kaXJlY3Rpb24gdG8gYWxsb3cgcmVmL2RlcmVmIGlu
IHRoZSBjb25jdXJyZW50IGNvbXBpbGVyLgorICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVu
dGlmaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI1NDM4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogCiAjaW5j
bHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklu
bGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0U3Rh
dHVzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgpAQCAtNTIsNyArNTMs
NyBAQCBib29sIEdldEJ5U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IEdlCiAgICAgcmV0dXJu
IGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKIH0KIAotR2V0QnlT
dGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJ
ZGVudGlmaWVycykKK0dldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENv
ZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewog
ICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7CiAgICAgCkBAIC05MSw4ICs5Miw2IEBA
IEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW4KICAgICB9CiAgICAgfQog
Ci0gICAgQVNTRVJUX1VOVVNFRCh0cmFja0lkZW50aWZpZXJzLCB0cmFja0lkZW50aWZpZXJzID09
IFRyYWNrSWRlbnRpZmllcnM6Ok5vKTsgLy8gV2UgY291bGQgbWFrZSB0aGlzIHdvcmsgaW4gdGhl
IGZ1dHVyZSwgYnV0IG5vYm9keSBuZWVkcyBpdCByaWdodCBub3cuCi0KICAgICBpZiAoIXN0cnVj
dHVyZUlEKQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2Up
OwogCkBAIC0xMTMsNyArMTEyLDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVG
cm9tTExJbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdldEJ5U3RhdHVzIEdldEJ5U3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0
YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMgdHJh
Y2tJZGVudGlmaWVycywgSWRlbnRpZmllcktlZXBBbGl2ZSYga2VlcEFsaXZlKQorR2V0QnlTdGF0
dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0
YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnIGRpZEV4
aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKIHsKICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAKQEAg
LTEyMSw3ICsxMjAsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2Rl
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm9X
aXRob3V0RXhpdFNpdGVGZWVkYmFjaygKLSAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBt
YXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVE
YXRhLCB0cmFja0lkZW50aWZpZXJzLCBrZWVwQWxpdmUpOworICAgICAgICBsb2NrZXIsIHByb2Zp
bGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuc3R1YkluZm8sIGNh
bGxFeGl0U2l0ZURhdGEpOwogICAgIAogICAgIGlmIChkaWRFeGl0KQogICAgICAgICByZXR1cm4g
cmVzdWx0LnNsb3dWZXJzaW9uKCk7CkBAIC0xMjksMTEgKzEyOCwxMCBAQCBHZXRCeVN0YXR1cyBH
ZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihDb2RlCiAgICAgVU5VU0VEX1BBUkFNKG1hcCk7CiAgICAg
VU5VU0VEX1BBUkFNKGRpZEV4aXQpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRXhpdFNpdGVEYXRh
KTsKLSAgICBVTlVTRURfUEFSQU0oa2VlcEFsaXZlKTsKICNlbmRpZgogCiAgICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVj
b2RlSW5kZXgsIHRyYWNrSWRlbnRpZmllcnMpOworICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21M
TEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKICAgICAKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtMTY4LDcgKzE2Niw3IEBAIEdldEJ5U3RhdHVzOjpHZXRCeVN0YXR1cyhjb25z
dCBNb2R1bGVOYW0KIH0KIAogR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAotICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhLCBU
cmFja0lkZW50aWZpZXJzIHRyYWNrSWRlbnRpZmllcnMsIElkZW50aWZpZXJLZWVwQWxpdmUmIGtl
ZXBBbGl2ZSkKKyAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENhbGxMaW5rU3Rh
dHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKIHsKICAgICBTdHViSW5mb1N1bW1h
cnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYXJ5KHN0dWJJbmZvKTsKICAgICBp
ZiAoIWlzSW5saW5lYWJsZShzdW1tYXJ5KSkKQEAgLTE4NiwxMiArMTg0LDkgQEAgR2V0QnlTdGF0
dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5
KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSwgKnN0dWJJbmZvKTsKLSAgICAgICAgQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIgPSBz
dHViSW5mby0+Z2V0QnlJZFNlbGZJZGVudGlmaWVyKCk7Ci0gICAgICAgIGtlZXBBbGl2ZShpZGVu
dGlmaWVyKTsKLSAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXItPmlt
cGwoKTsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8t
PmdldEJ5SWRTZWxmSWRlbnRpZmllcigpOworICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
ID0gaWRlbnRpZmllci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodWlkKTsKLSAgICAg
ICAgaWYgKHRyYWNrSWRlbnRpZmllcnMgPT0gVHJhY2tJZGVudGlmaWVyczo6Tm8pCi0gICAgICAg
ICAgICBpZGVudGlmaWVyID0gbnVsbHB0cjsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFu
dChXVEZNb3ZlKGlkZW50aWZpZXIpKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAg
ICAgICAgdmFyaWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwg
YXR0cmlidXRlcyk7CkBAIC0yMTIsNyArMjA3LDYgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6
OmNvbXB1dGVGb3JTdHViSQogICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0g
bGlzdC0+YXQoMCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKICAgICAg
ICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6TW9kdWxlTmFtZXNwYWNlTG9hZDoKLSAgICAgICAgICAg
ICAgICBrZWVwQWxpdmUoYWNjZXNzLmlkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdldEJ5U3RhdHVzKGFjY2Vzcy5hczxNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlPigpKTsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTYsMTIg
KzI5MCw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAg
ICAgICAgICAgICB9IH0KIAogICAgICAgICAgICAgICAgIEFTU0VSVCgoQWNjZXNzQ2FzZTo6TWlz
cyA9PSBhY2Nlc3MudHlwZSgpIHx8IGFjY2Vzcy5pc0N1c3RvbSgpKSA9PSAoYWNjZXNzLm9mZnNl
dCgpID09IGludmFsaWRPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBCb3g8SWRlbnRpZmllcj4g
aWRlbnRpZmllcjsKLSAgICAgICAgICAgICAgICBpZiAodHJhY2tJZGVudGlmaWVycyA9PSBUcmFj
a0lkZW50aWZpZXJzOjpZZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGFj
Y2Vzcy5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGtlZXBBbGl2ZShpZGVudGlm
aWVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQg
dmFyaWFudChpZGVudGlmaWVyLCBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0
YXR1cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50KGFj
Y2Vzcy5pZGVudGlmaWVyKCksIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3Rh
dHVzLm9mZnNldCgpLAogICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRp
dGlvblNldCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSwKICAgICAgICAgICAgICAgICAgICAg
aW50cmluc2ljRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0
dGVyLApAQCAtMzM2LDcgKzMyNSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkkKIAogR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsCi0gICAgSUNT
dGF0dXNDb250ZXh0U3RhY2smIGljQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IFRyYWNrSWRlbnRpZmllcnMgdHJhY2tJZGVudGlmaWVycywgSWRlbnRpZmllcktlZXBBbGl2ZSYg
a2VlcEFsaXZlKQorICAgIElDU3RhdHVzQ29udGV4dFN0YWNrJiBpY0NvbnRleHRTdGFjaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9
IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVE
YXRhKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwpAQCAtMzUxLDcgKzM0MCw3IEBAIEdl
dEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIC8vIGlu
bGluZWQgYW5kIG5vdC1pbmxpbmVkLgogICAgICAgICAgICAgICAgIEdldEJ5U3RhdHVzIGJhc2Vs
aW5lUmVzdWx0ID0gY29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9j
aywgYmFzZWxpbmVNYXAsIGJ5dGVjb2RlSW5kZXgsIGRpZEV4aXQsCi0gICAgICAgICAgICAgICAg
ICAgIGNhbGxFeGl0U2l0ZURhdGEsIHRyYWNrSWRlbnRpZmllcnMsIGtlZXBBbGl2ZSk7CisgICAg
ICAgICAgICAgICAgICAgIGNhbGxFeGl0U2l0ZURhdGEpOwogICAgICAgICAgICAgICAgIGJhc2Vs
aW5lUmVzdWx0Lm1lcmdlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5l
UmVzdWx0OwogICAgICAgICAgICAgfQpAQCAtMzY1LDcgKzM1NCw3IEBAIEdldEJ5U3RhdHVzIEdl
dEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29udGV4dC0+b3B0aW1pemVkQ29kZUJsb2NrLT5tX2xv
Y2spOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRF
eGl0U2l0ZUZlZWRiYWNrKAotICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIGNvbnRleHQtPm9w
dGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVEYXRhLCB0cmFj
a0lkZW50aWZpZXJzLCBrZWVwQWxpdmUpOworICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIGNv
bnRleHQtPm9wdGltaXplZENvZGVCbG9jaywgc3RhdHVzLnN0dWJJbmZvLCBjYWxsRXhpdFNpdGVE
YXRhKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gYmxlc3MocmVzdWx0KTsKQEAgLTM3NSw3ICszNjQsNyBAQCBH
ZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIHJldHVybiBi
bGVzcygqc3RhdHVzLmdldFN0YXR1cyk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBjb21wdXRl
Rm9yKHByb2ZpbGVkQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBkaWRFeGl0LCBj
YWxsRXhpdFNpdGVEYXRhLCB0cmFja0lkZW50aWZpZXJzLCBrZWVwQWxpdmUpOworICAgIHJldHVy
biBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGJhc2VsaW5lTWFwLCBieXRlY29kZUluZGV4LCBk
aWRFeGl0LCBjYWxsRXhpdFNpdGVEYXRhKTsKIH0KIAogR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6
OmNvbXB1dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCkBAIC01MTQsNiArNTAzLDE0IEBAIHZvaWQgR2V0QnlTdGF0dXM6OmZpbHRlcihjb25zdCBT
dHJ1Y3R1cmUKICAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247CiB9CiAKK3ZvaWQgR2V0
QnlTdGF0dXM6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlm
IChpc01vZHVsZU5hbWVzcGFjZSgpKQorICAgICAgICBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1f
aWRlbnRpZmllci52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBmb3IgKEdldEJ5SWRWYXJp
YW50JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmFyaWFudC52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKK30KKwogdm9pZCBHZXRCeVN0YXR1czo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgZm9yIChHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA6IG1fdmFy
aWFudHMpCkBAIC01MzUsMjggKzUzMiwyMiBAQCBib29sIEdldEJ5U3RhdHVzOjpmaW5hbGl6ZShW
TSYgdm0pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUJveDxJZGVudGlmaWVyPiBHZXRCeVN0YXR1
czo6c2luZ2xlSWRlbnRpZmllcigpIGNvbnN0CitDYWNoZWFibGVJZGVudGlmaWVyIEdldEJ5U3Rh
dHVzOjpzaW5nbGVJZGVudGlmaWVyKCkgY29uc3QKIHsKLSAgICBpZiAoaXNNb2R1bGVOYW1lc3Bh
Y2UoKSkgewotICAgICAgICBCb3g8SWRlbnRpZmllcj4gcmVzdWx0ID0gbV9tb2R1bGVOYW1lc3Bh
Y2VEYXRhLT5tX2lkZW50aWZpZXI7Ci0gICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+aXNO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9CisgICAgaWYgKGlzTW9kdWxlTmFtZXNwYWNlKCkpCisgICAgICAgIHJldHVybiBt
X21vZHVsZU5hbWVzcGFjZURhdGEtPm1faWRlbnRpZmllcjsKIAogICAgIGlmIChtX3ZhcmlhbnRz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBCb3g8SWRlbnRpZmll
cj4gcmVzdWx0ID0gbV92YXJpYW50cy5maXJzdCgpLmlkZW50aWZpZXIoKTsKKyAgICBDYWNoZWFi
bGVJZGVudGlmaWVyIHJlc3VsdCA9IG1fdmFyaWFudHMuZmlyc3QoKS5pZGVudGlmaWVyKCk7CiAg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChyZXN1bHQt
PmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBpID0g
MTsgaSA8IG1fdmFyaWFudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQm94PElkZW50aWZpZXI+
IHVpZCA9IG1fdmFyaWFudHNbaV0uaWRlbnRpZmllcigpOwotICAgICAgICBpZiAoIXVpZCkKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gbV92YXJpYW50c1tpXS5pZGVu
dGlmaWVyKCk7CisgICAgICAgIGlmICghaWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICBpZiAoKnVpZCAhPSAqcmVzdWx0KQorICAgICAgICBpZiAoaWRlbnRp
ZmllciAhPSByZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
cmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeVN0YXR1cy5oCShyZXZpc2lvbiAyNTQzODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKICNpbmNs
dWRlICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRl
ICJDb25jdXJyZW50SlNMb2NrLmgiCkBAIC02NiwxMSArNjcsNiBAQCBwdWJsaWM6CiAgICAgICAg
IE9ic2VydmVkU2xvd1BhdGhBbmRNYWtlc0NhbGxzICwKICAgICB9OwogCi0gICAgZW51bSBjbGFz
cyBUcmFja0lkZW50aWZpZXJzIDogdWludDhfdCB7Ci0gICAgICAgIE5vLCAgLy8gVXNlZCBmb3Ig
Z2V0X2J5X2lkCi0gICAgICAgIFllcywgLy8gVXNlZCBmb3IgZ2V0X2J5X3ZhbAotICAgIH07Ci0K
ICAgICBHZXRCeVN0YXR1cygpCiAgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQogICAg
IHsKQEAgLTkxLDEzICs4Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgLy8gSWYg
d2UgdXNlIGEgQm94PElkZW50aWZpZXI+IGluIHRoZSBjb21waWxlciB0aHJlYWQsIHdlIG5lZWQg
dG8ga2VlcCB0aGUKLSAgICAvLyBJZGVudGlmaWVyIGFsaXZlIGFuZCBvbmx5IGRlcmVmIGl0IGlu
IHRoZSBtdXRhdG9yIHRocmVhZCBsYXRlci4gVGhpcwotICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUg
Y29tcGlsZXIgdGhyZWFkIGRvZXNuJ3QgcmFjZSBhZ2FpbnN0IHRoZSBtdXRhdG9yIGluCi0gICAg
Ly8gYWRqdXN0aW5nIHRoZSBJZGVudGlmaWVyJ3MgcmVmQ291bnQuCi0gICAgdXNpbmcgSWRlbnRp
ZmllcktlZXBBbGl2ZSA9IHN0ZDo6ZnVuY3Rpb248dm9pZChCb3g8SWRlbnRpZmllcj4pPjsKLQot
ICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9j
aywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgZGZnQ29u
dGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBUcmFja0lkZW50aWZpZXJzLCBJZGVudGlmaWVyS2VlcEFs
aXZlJik7CisgICAgc3RhdGljIEdldEJ5U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNl
bGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNr
JiBkZmdDb250ZXh0U3RhY2ssIENvZGVPcmlnaW4pOwogICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBj
b21wdXRlRm9yKGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAKICAg
ICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KQEAgLTEyOCw2ICsxMTgs
NyBAQCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQo
KSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZURhdGEtPm1fbW9kdWxlRW52aXJvbm1l
bnQ7IH0KICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
dWxlTmFtZXNwYWNlRGF0YS0+bV9zY29wZU9mZnNldDsgfQogICAgIAorICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIG1hcmtJZkNoZWFwKFNsb3RWaXNpdG9y
Jik7CiAgICAgYm9vbCBmaW5hbGl6ZShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGdldHMg
dG8gbGl2ZS4KIApAQCAtMTM1LDcgKzEyNiw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwogCi0gICAgQm94PElkZW50aWZpZXI+IHNpbmdsZUlkZW50aWZp
ZXIoKSBjb25zdDsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyIHNpbmdsZUlkZW50aWZpZXIoKSBj
b25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBtZXJnZShjb25zdCBHZXRCeVN0YXR1cyYp
OwpAQCAtMTQzLDE2ICsxMzQsMTYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSklUKQogICAgIEdl
dEJ5U3RhdHVzKGNvbnN0IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UmKTsKICAgICBzdGF0aWMg
R2V0QnlTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCi0g
ICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhLCBUcmFj
a0lkZW50aWZpZXJzLCBJZGVudGlmaWVyS2VlcEFsaXZlJik7CisgICAgICAgIGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8qLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKICNlbmRpZgotICAgIHN0YXRpYyBH
ZXRCeVN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIFRy
YWNrSWRlbnRpZmllcnMpOwotICAgIHN0YXRpYyBHZXRCeVN0YXR1cyBjb21wdXRlRm9yKENvZGVC
bG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgRXhpdEZsYWcsIENhbGxMaW5rU3Rh
dHVzOjpFeGl0U2l0ZURhdGEsIFRyYWNrSWRlbnRpZmllcnMsIElkZW50aWZpZXJLZWVwQWxpdmUm
KTsKKyAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBC
eXRlY29kZUluZGV4KTsKKyAgICBzdGF0aWMgR2V0QnlTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxv
Y2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1
czo6RXhpdFNpdGVEYXRhKTsKIAogICAgIHN0cnVjdCBNb2R1bGVOYW1lc3BhY2VEYXRhIHsKICAg
ICAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0IHsg
bnVsbHB0ciB9OwogICAgICAgICBKU01vZHVsZUVudmlyb25tZW50KiBtX21vZHVsZUVudmlyb25t
ZW50IHsgbnVsbHB0ciB9OwogICAgICAgICBTY29wZU9mZnNldCBtX3Njb3BlT2Zmc2V0IHsgfTsK
LSAgICAgICAgQm94PElkZW50aWZpZXI+IG1faWRlbnRpZmllcjsKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgfTsKIAogICAgIFZlY3RvcjxHZXRCeUlkVmFy
aWFudCwgMT4gbV92YXJpYW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI1
NDM4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTUgKzQyLDE0IEBAIG5hbWVzcGFjZSBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlSW50ZXJuYWwKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CiB9CiAKLUdldHRlclNldHRlckFjY2Vzc0Nhc2U6OkdldHRlclNldHRlckFj
Y2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIEpTT2Jq
ZWN0KiBjdXN0b21TbG90QmFzZSwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWlu
PiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKK0dldHRlclNldHRlckFjY2Vzc0Nhc2U6OkdldHRlclNl
dHRlckFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNl
dCwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQogICAgIDogQmFzZSh2bSwgb3duZXIsIGFj
Y2Vzc1R5cGUsIGlkZW50aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZp
YVByb3h5LCBhZGRpdGlvbmFsU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkKIHsK
ICAgICBtX2N1c3RvbVNsb3RCYXNlLnNldE1heUJlTnVsbCh2bSwgb3duZXIsIGN1c3RvbVNsb3RC
YXNlKTsKIH0KIAotCiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZTo6Y3JlYXRlKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0
eXBlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0LAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBl
LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsCiAgICAgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25h
bFNldCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0
KiBjdXN0b21TbG90QmFzZSwKICAgICBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBk
b21BdHRyaWJ1dGUsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90
eXBlQWNjZXNzQ2hhaW4pCiB7CkBAIC02OSw3ICs2OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBHZXR0ZXJTZXR0ZXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAog
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6
dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4sIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyLAogICAgIEpTT2JqZWN0KiBj
dXN0b21TbG90QmFzZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjU0Mzg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDExICs1NCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBl
bWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYsIGNvbnN0IERPTUpJVDo6R2V0
dGVyU2V0dGVyKiwgR1BSUmVnIGJhc2VGb3JHZXRHUFIpOwogCiAgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUq
LAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIENhY2hlYWJsZUlkZW50
aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAogICAgICAgICBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0
aW9uYWxTZXQsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tR2V0dGVyLAogICAg
ICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UsIE9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90
YXRpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKIAotICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25l
ciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zm
c2V0LAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgUHJvcGVydHlPZmZzZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0Jiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiwKICAgICAgICAgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIgPSBudWxscHRyLCBKU09iamVj
dCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKIApAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6
CiAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21BY2Nlc3NvcigpIGNvbnN0
IHsgcmV0dXJuIG1fY3VzdG9tQWNjZXNzb3I7IH0KIAogcHJpdmF0ZToKLSAgICBHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIEpTT2Jq
ZWN0KiBjdXN0b21TbG90QmFzZSwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWlu
Pik7CisgICAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZShWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUs
IENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQq
IGFkZGl0aW9uYWxTZXQsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwgc3RkOjp1bmlxdWVfcHRy
PFBvbHlQcm90b0FjY2Vzc0NoYWluPik7CiAKICAgICBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKGNv
bnN0IEdldHRlclNldHRlckFjY2Vzc0Nhc2UmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuY3BwCShyZXZp
c2lvbiAyNTQzODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VP
ZkFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgSW5zdGFuY2VPZkFj
Y2Vzc0Nhc2U6On5JbnN0YW5jZU9mQWNjZXNzQwogSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6Okluc3Rh
bmNlT2ZBY2Nlc3NDYXNlKAogICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBKU09iamVjdCogcHJvdG90eXBlKQotICAgIDog
QmFzZSh2bSwgb3duZXIsIGFjY2Vzc1R5cGUsIElkZW50aWZpZXIoKSwgaW52YWxpZE9mZnNldCwg
c3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG51bGxwdHIpCisgICAgOiBCYXNlKHZtLCBvd25lciwg
YWNjZXNzVHlwZSwgbnVsbHB0ciwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25T
ZXQsIG51bGxwdHIpCiAgICAgLCBtX3Byb3RvdHlwZSh2bSwgb3duZXIsIHByb3RvdHlwZSkKIHsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJB
Y2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI1NDM4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUlu
dHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwg
c3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFp
bikKK0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2Uo
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1
bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFj
Y2Vzc0NoYWluKQogICAgIDogQmFzZSh2bSwgb3duZXIsIEludHJpbnNpY0dldHRlciwgaWRlbnRp
Zmllciwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVB
Y2Nlc3NDaGFpbikpCiB7CiAgICAgbV9pbnRyaW5zaWNGdW5jdGlvbi5zZXQodm0sIG93bmVyLCBp
bnRyaW5zaWNGdW5jdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0LCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQ
cm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKK3N0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6
OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQog
ewogICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4obmV3IEludHJpbnNpY0dl
dHRlckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCBpZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0LCBpbnRyaW5zaWNGdW5jdGlvbiwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3ND
aGFpbikpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjU0Mzg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MiwxNCArNDIsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBi
b29sIGNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoSlNGdW5jdGlvbiosIFN0cnVjdHVyZSopOwogICAg
IHZvaWQgZW1pdEludHJpbnNpY0dldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsKIAotICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBz
dGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCosIENhY2hlYWJsZUlkZW50
aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLCBzdGQ6OnVuaXF1ZV9w
dHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgfkludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2UoKTsKIAogcHJpdmF0ZToKLSAgICBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKFZNJiwg
SlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1
bmN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKKyAgICBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
UHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiwgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24sIHN0ZDo6dW5pcXVlX3B0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4pOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1faW50
cmluc2ljRnVuY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L01vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmNwcAkocmV2aXNp
b24gMjU0Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZU5hbWVz
cGFjZUFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzgsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6TW9kdWxlTmFtZXNwYWNl
QWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIEpT
TW9kdWxlRW52aXJvbm1lbnQqIG1vZHVsZUVudmlyb25tZW50LCBTY29wZU9mZnNldCBzY29wZU9m
ZnNldCkKK01vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6Ok1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nh
c2UoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIs
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIEpTTW9kdWxl
RW52aXJvbm1lbnQqIG1vZHVsZUVudmlyb25tZW50LCBTY29wZU9mZnNldCBzY29wZU9mZnNldCkK
ICAgICA6IEJhc2Uodm0sIG93bmVyLCBNb2R1bGVOYW1lc3BhY2VMb2FkLCBpZGVudGlmaWVyLCBp
bnZhbGlkT2Zmc2V0LCBudWxscHRyLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLCBudWxs
cHRyKQogICAgICwgbV9zY29wZU9mZnNldChzY29wZU9mZnNldCkKIHsKQEAgLTQ1LDcgKzQ2LDcg
QEAgTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6TW9kdWxlTmFtZXNwYQogICAgIG1fbW9kdWxl
RW52aXJvbm1lbnQuc2V0KHZtLCBvd25lciwgbW9kdWxlRW52aXJvbm1lbnQpOwogfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6Y3JlYXRl
KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgSlNNb2R1bGVFbnZp
cm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KQorc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6OmNyZWF0
ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCwgSlNNb2R1bGVF
bnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0KQog
ewogICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4obmV3IE1vZHVsZU5hbWVz
cGFjZUFjY2Vzc0Nhc2Uodm0sIG93bmVyLCBpZGVudGlmaWVyLCBtb2R1bGVOYW1lc3BhY2VPYmpl
Y3QsIG1vZHVsZUVudmlyb25tZW50LCBzY29wZU9mZnNldCkpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlTmFtZXNwYWNlQWNj
ZXNzQ2FzZS5oCShyZXZpc2lvbiAyNTQzODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5l
LnRlYUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNyAr
NDQsNyBAQCBwdWJsaWM6CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1l
bnQoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUVudmlyb25tZW50LmdldCgpOyB9CiAgICAgU2Nv
cGVPZmZzZXQgc2NvcGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlT2Zmc2V0OyB9CiAK
LSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2Vs
bCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCosIEpT
TW9kdWxlRW52aXJvbm1lbnQqLCBTY29wZU9mZnNldCk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVyLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCosIEpTTW9kdWxlRW52aXJvbm1lbnQqLCBT
Y29wZU9mZnNldCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBj
b25zdCBvdmVycmlkZTsKIApAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgfk1vZHVsZU5h
bWVzcGFjZUFjY2Vzc0Nhc2UoKTsKIAogcHJpdmF0ZToKLSAgICBNb2R1bGVOYW1lc3BhY2VBY2Nl
c3NDYXNlKFZNJiwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYsIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0KiwgSlNNb2R1bGVFbnZpcm9ubWVudCosIFNjb3BlT2Zmc2V0KTsKKyAgICBN
b2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiBvd25lciwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqLCBKU01vZHVsZUVudmlyb25tZW50Kiwg
U2NvcGVPZmZzZXQpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVFbnZp
cm9ubWVudD4gbV9tb2R1bGVFbnZpcm9ubWVudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjU0
Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQmluYXJ5
U3dpdGNoLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJG
dWxsQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTM1Miw2ICszNTMsMTIgQEAg
Ym9vbCBQb2x5bW9ycGhpY0FjY2Vzczo6cHJvcGFnYXRlVHJhbnNpdAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKK3ZvaWQgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsr
aSkKKyAgICAgICAgYXQoaSkudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9CisKIHZvaWQgUG9s
eW1vcnBoaWNBY2Nlc3M6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQu
cHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjpbIik7CkBAIC00NzIsNyArNDc5LDYgQEAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogICAgIHN0YXRlLnByZXNlcnZlZFJl
dXNlZFJlZ2lzdGVyU3RhdGUgPQogICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdp
c3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tT
cGFjZTo6Tm9FeHRyYVNwYWNlKTsKIAotICAgIAogICAgIGJvb2wgZ2VuZXJhdGVkRmluYWxDb2Rl
ID0gZmFsc2U7CiAKICAgICAvLyBJZiB0aGUgcmVzdWx0aW5nIHNldCBvZiBjYXNlcyBpcyBzbyBi
aWcgdGhhdCB3ZSB3b3VsZCBzdG9wIGNhY2hpbmcgYW5kIHRoaXMgaXMgSW5zdGFuY2VPZiwKQEAg
LTQ4MSw3ICs0ODcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNz
CiAgICAgICAgICYmIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6SW5zdGFuY2VP
ZikgewogICAgICAgICB3aGlsZSAoIWNhc2VzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fbGlz
dC5hcHBlbmQoY2FzZXMudGFrZUxhc3QoKSk7Ci0gICAgICAgIGNhc2VzLmFwcGVuZChBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMs
IElkZW50aWZpZXIoKSkpOworICAgICAgICBjYXNlcy5hcHBlbmQoQWNjZXNzQ2FzZTo6Y3JlYXRl
KHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZHZW5lcmljLCBudWxscHRyKSk7
CiAgICAgICAgIGdlbmVyYXRlZEZpbmFsQ29kZSA9IHRydWU7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAko
cmV2aXNpb24gMjU0Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNiArMTUxLDggQEAgcHVibGlj
OgogICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuICpt
X2xpc3RbaV07IH0KICAgICBjb25zdCBBY2Nlc3NDYXNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuICptX2xpc3RbaV07IH0KIAorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKKwogICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSB0aGVuIHdlIGFy
ZSByZXF1ZXN0aW5nIGEgcmVzZXQgb2YgdGhlIG93bmluZyBTdHJ1Y3R1cmVTdHViSW5mby4KICAg
ICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjU0Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJs
ZUFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLVByb3h5YWJsZUFjY2Vzc0Nhc2U6OlByb3h5YWJsZUFjY2Vzc0Nhc2UoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
CitQcm94eWFibGVBY2Nlc3NDYXNlOjpQcm94eWFibGVBY2Nlc3NDYXNlKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQ
cm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQ
cm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKICAgICA6IEJhc2Uodm0sIG93
bmVyLCBhY2Nlc3NUeXBlLCBpZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkKICAgICAsIG1fYWRkaXRpb25hbFNl
dChhZGRpdGlvbmFsU2V0KQpAQCAtMzgsNyArMzgsNyBAQCBQcm94eWFibGVBY2Nlc3NDYXNlOjpQ
cm94eWFibGVBY2Nlc3NDYXNlCiAgICAgbV92aWFQcm94eSA9IHZpYVByb3h5OwogfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29sIHZpYVByb3h5
LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQorc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEFjY2Vzc1R5cGUgdHlwZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0
KiBhZGRpdGlvbmFsU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHBy
b3RvdHlwZUFjY2Vzc0NoYWluKQogewogICAgIEFTU0VSVCh0eXBlID09IExvYWQgfHwgdHlwZSA9
PSBNaXNzIHx8IHR5cGUgPT0gR2V0R2V0dGVyKTsKICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+KG5ldyBQcm94eWFibGVBY2Nlc3NDYXNlKHZtLCBvd25lciwgdHlwZSwgaWRl
bnRpZmllciwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHksIGFkZGl0
aW9uYWxTZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmgJ
KHJldmlzaW9uIDI1NDM4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94
eWFibGVBY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAK
ICAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9hZGRpdGlvbmFsU2V0LmdldCgpOyB9CiAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUsIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5
cGUsIENhY2hlYWJsZUlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCgpLAogICAgICAgICBib29sIHZpYVByb3h5ID0gZmFsc2UsIFdhdGNocG9pbnRTZXQqIGFkZGl0
aW9uYWxTZXQgPSBudWxscHRyLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
ID0gbnVsbHB0cik7CiAKICAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJiwgQ29tbWFQcmlu
dGVyJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB+UHJv
eHlhYmxlQWNjZXNzQ2FzZSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgUHJveHlhYmxlQWNjZXNzQ2Fz
ZShWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUsIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eU9m
ZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29s
IHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8
UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKKyAgICBQcm94eWFibGVBY2Nlc3NDYXNlKFZNJiwgSlND
ZWxsKiwgQWNjZXNzVHlwZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIFN0
cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgYm9vbCB2aWFQcm94
eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90
b0FjY2Vzc0NoYWluPik7CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1f
YWRkaXRpb25hbFNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNv
cmRlZFN0YXR1c2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAJKHJldmlzaW9uIDI1NDM4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNiArNzUsMTIgQEAgSW5CeUlkU3RhdHVzKiBSZWNvcmRlZFN0YXR1c2VzOjphZGRJ
bkJ5SQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgUmVjb3JkZWRTdGF0dXNlczo6dmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAgIGZvciAoYXV0byYg
cGFpciA6IGdldHMpCisgICAgICAgIHBhaXIuc2Vjb25kLT52aXNpdEFnZ3JlZ2F0ZShzbG90Vmlz
aXRvcik7Cit9CisKIHZvaWQgUmVjb3JkZWRTdGF0dXNlczo6bWFya0lmQ2hlYXAoU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yKQogewogICAgIGZvciAoYXV0byYgcGFpciA6IGdldHMpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmgJ
KHJldmlzaW9uIDI1NDM4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWNv
cmRlZFN0YXR1c2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDggQEAgc3RydWN0IFJl
Y29yZGVkU3RhdHVzZXMgewogICAgIFB1dEJ5SWRTdGF0dXMqIGFkZFB1dEJ5SWRTdGF0dXMoY29u
c3QgQ29kZU9yaWdpbiYsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmKTsKICAgICBJbkJ5SWRTdGF0dXMq
IGFkZEluQnlJZFN0YXR1cyhjb25zdCBDb2RlT3JpZ2luJiwgY29uc3QgSW5CeUlkU3RhdHVzJik7
CiAgICAgCi0gICAgdm9pZCBtYXJrSWZDaGVhcChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpOwor
ICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtJZkNo
ZWFwKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgdm9pZCBmaW5hbGl6ZVdpdGhvdXREZWxldGlu
ZyhWTSYpOwogICAgIHZvaWQgZmluYWxpemUoVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24g
MjU0Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKKyNpbmNsdWRlICJDYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCkBAIC02MiwxMSAr
NjMsMTIgQEAgU3RydWN0dXJlU3R1YkluZm86On5TdHJ1Y3R1cmVTdHViSW5mbygpCiB7CiB9CiAK
LXZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0R2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogYmFzZU9i
amVjdFN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKGhhc0NvbnN0YW50SWRlbnRpZmllcik7CiAgICAg
c2V0Q2FjaGVUeXBlKENhY2hlVHlwZTo6R2V0QnlJZFNlbGYpOwotICAgIG1fZ2V0QnlJZFNlbGZJ
ZGVudGlmaWVyID0gQm94PElkZW50aWZpZXI+OjpjcmVhdGUoaWRlbnRpZmllcik7CisgICAgbV9n
ZXRCeUlkU2VsZklkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIGNvZGVCbG9jay0+dm0oKS5o
ZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwogICAgIAogICAgIHUuYnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS5zZXQoCiAgICAgICAgIGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBi
YXNlT2JqZWN0U3RydWN0dXJlKTsKQEAgLTEzOCw3ICsxNDAsNyBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjphYm91dFRvRGllKCkKIH0KIAogQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1
cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKLSAgICBjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gYWNjZXNzQ2FzZSkKKyAgICBjb25zdCBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnQsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nl
c3NDYXNlKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIApAQCAtMTk0LDYgKzE5Niw3IEBA
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm8KICAgICAgICAgICAgIHUu
c3R1YiA9IGFjY2Vzcy5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIEFT
U0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpOwogICAgICAgICBSRUxFQVNFX0FT
U0VSVCghcmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpOwogICAgICAgICAKICAgICAgICAgLy8g
SWYgd2UgZGlkbid0IGJ1ZmZlciBhbnkgY2FzZXMgdGhlbiBiYWlsLiBJZiB0aGlzIG1hZGUgbm8g
Y2hhbmdlcyB0aGVuIHdlJ2xsIGp1c3QgdHJ5IGFnYWluCkBAIC0yMzIsNiArMjM1LDggQEAgQWNj
ZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0pKCk7CiAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAg
ICBpZiAoaWRlbnQuaXNDZWxsKCkpCisgICAgICAgIGtlZXBBbGl2ZShpZGVudC5jZWxsKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI3OSw2ICsyODQsMjcgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJsb2NrKgogICAgIHNldENhY2hlVHlwZShDYWNoZVR5cGU6
OlVuc2V0KTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgc3dpdGNoIChtX2NhY2hlVHlwZSkgeworICAgIGNh
c2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6Cisg
ICAgY2FzZSBDYWNoZVR5cGU6OlN0cmluZ0xlbmd0aDoKKyAgICBjYXNlIENhY2hlVHlwZTo6UHV0
QnlJZFJlcGxhY2U6CisgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CisgICAgICAgIG1fZ2V0QnlJ
ZFNlbGZJZGVudGlmaWVyLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgIHUuc3R1Yi0+dmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm47Cit9CisKIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
Vk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI1NDM4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
IkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKQEAgLTc0LDE5ICs3NSwy
MSBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkluZm8oQWNjZXNzVHlwZSk7CiAgICAgflN0
cnVjdHVyZVN0dWJJbmZvKCk7CiAKLSAgICB2b2lkIGluaXRHZXRCeUlkU2VsZihDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBJ
ZGVudGlmaWVyJik7CisgICAgdm9pZCBpbml0R2V0QnlJZFNlbGYoQ29kZUJsb2NrKiwgU3RydWN0
dXJlKiBiYXNlT2JqZWN0U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcik7CiAgICAgdm9pZCBpbml0QXJyYXlMZW5ndGgoKTsKICAgICB2b2lkIGluaXRTdHJpbmdM
ZW5ndGgoKTsKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGluaXRJ
bkJ5SWRTZWxmKENvZGVCbG9jayosIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQpOwogCi0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBhZGRBY2Nlc3NDYXNl
KGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIGNvbnN0IElkZW50
aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4pOworICAgIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgYWRkQWNjZXNzQ2FzZShjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBD
b2RlQmxvY2sqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4pOwogCiAgICAgdm9pZCByZXNldChDb2RlQmxvY2sqKTsKIAogICAgIHZvaWQgZGVyZWYoKTsK
ICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKKwogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMg
dGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLAogICAgIC8v
IGVpdGhlciBlbnRpcmVseSBvciBqdXN0IGVub3VnaCB0byBlbnN1cmUgdGhhdCB0aG9zZSBkZWFk
IHBvaW50ZXJzIGRvbid0IGdldCB1c2VkIGFueW1vcmUuCiAgICAgdm9pZCB2aXNpdFdlYWtSZWZl
cmVuY2VzKENvZGVCbG9jayopOwpAQCAtMTcxLDcgKzE3NCw3IEBAIHB1YmxpYzoKIAogICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbjsKIHByaXZhdGU6Ci0gICAgQm94PElkZW50aWZpZXI+IG1fZ2V0
QnlJZFNlbGZJZGVudGlmaWVyOworICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9nZXRCeUlkU2Vs
ZklkZW50aWZpZXI7CiBwdWJsaWM6CiAKICAgICB1bmlvbiB7CkBAIC0xODIsNyArMTg1LDcgQEAg
cHVibGljOgogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7CiAKLSAg
ICBCb3g8SWRlbnRpZmllcj4gZ2V0QnlJZFNlbGZJZGVudGlmaWVyKCkKKyAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyIGdldEJ5SWRTZWxmSWRlbnRpZmllcigpCiAgICAgewogICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmKTsKICAgICAgICAg
cmV0dXJuIG1fZ2V0QnlJZFNlbGZJZGVudGlmaWVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDI1NDM4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5j
bHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgor
I2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2FsbExp
bmtTdGF0dXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQmxvY2tX
aXRoSklUVHlwZS5oIgpAQCAtNDgzMSwxMyArNDgzMiwxMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUdldEJ5SWQoY29uc3QgCiAgICAgZWxzZSBpZiAoT3A6Om9wY29kZUlEID09IG9wX2dl
dF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIHR5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0
OwogICAgIAotICAgIEdldEJ5U3RhdHVzOjpJZGVudGlmaWVyS2VlcEFsaXZlIGtlZXBBbGl2ZSA9
IFsmXSAoQm94PElkZW50aWZpZXI+IGlkZW50aWZpZXIpIHsKLSAgICAgICAgbV9ncmFwaC5tX3Bs
YW4ua2VlcEFsaXZlSWRlbnRpZmllcihXVEZNb3ZlKGlkZW50aWZpZXIpKTsKLSAgICB9OwogICAg
IEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKLSAgICAgICAgY3VycmVu
dENvZGVPcmlnaW4oKSwgR2V0QnlTdGF0dXM6OlRyYWNrSWRlbnRpZmllcnM6Ok5vLCBrZWVwQWxp
dmUpOworICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKIAogICAgIGhhbmRsZUdldEJ5SWQo
CiAgICAgICAgIGJ5dGVjb2RlLm1fZHN0LCBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVt
YmVyLCBnZXRCeVN0YXR1cywgdHlwZSwgb3Bjb2RlTGVuZ3RoKTsKQEAgLTU3MzgsMTAgKzU3MzYs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CiAgICAgICAgICAgICBOb2RlKiBw
cm9wZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKICAgICAgICAgICAgIGJvb2wgc2hv
dWxkQ29tcGlsZUFzR2V0QnlJZCA9IGZhbHNlOwotICAgICAgICAgICAgR2V0QnlTdGF0dXM6Oklk
ZW50aWZpZXJLZWVwQWxpdmUga2VlcEFsaXZlID0gWyZdIChCb3g8SWRlbnRpZmllcj4gaWRlbnRp
ZmllcikgewotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLmtlZXBBbGl2ZUlkZW50aWZp
ZXIoV1RGTW92ZShpZGVudGlmaWVyKSk7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgR2V0
QnlTdGF0dXMgZ2V0QnlTdGF0dXMgPSBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAs
IG1faWNDb250ZXh0U3RhY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksIEdldEJ5U3RhdHVzOjpUcmFj
a0lkZW50aWZpZXJzOjpZZXMsIGtlZXBBbGl2ZSk7CisgICAgICAgICAgICBHZXRCeVN0YXR1cyBn
ZXRCeVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jaywgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRl
eHRTdGFjaywgY3VycmVudENvZGVPcmlnaW4oKSk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIgPSAwOwogCkBAIC01NzUyLDEwICs1NzQ3LDE4IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gc29tZXRoaW5nIGxpa2UgTXVs
dGlHZXRCeU9mZnNldCBpbiBhIG11bHRpIGlkZW50aWZpZXIgbW9kZS4KICAgICAgICAgICAgICAg
ICAvLyBUaGF0IHdheSwgd2UgY291bGQgYm90aCBzd2l0Y2ggb24gbXVsdGlwbGUgc3RydWN0dXJl
cyBhbmQgbXVsdGlwbGUgaWRlbnRpZmllcnMgKG9yIGludCAzMiBwcm9wZXJ0aWVzKS4KICAgICAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0
MjE2Ci0gICAgICAgICAgICAgICAgaWYgKEJveDxJZGVudGlmaWVyPiBpbXBsID0gZ2V0QnlTdGF0
dXMuc2luZ2xlSWRlbnRpZmllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJO
dW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGltcGwpOworICAgICAgICAgICAg
ICAgIGlmIChDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBnZXRCeVN0YXR1cy5zaW5n
bGVJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJO
dW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKGlkZW50aWZpZXIudWlkKCkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc0NlbGwoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25n
KGlkZW50aWZpZXIuY2VsbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlm
aWVyLmlzU3ltYm9sQ2VsbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tDZWxsLCBPcEluZm8oZnJvemVuKSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQsIE9wSW5m
byh1aWQpLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENvbXBpbGVBc0dl
dEJ5SWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRlbnQs
IE9wSW5mbyhpbXBsLT5pbXBsKCkpLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJ
ZGVudGlmaWVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwCShyZXZpc2lvbiAyNTQzODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgdW5zaWduZWQgRGVzaXJlZElkZW50aWZpZXJzOjpudW1iZXJPZklk
ZQogICAgIHJldHVybiBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpICsgbV9hZGRl
ZElkZW50aWZpZXJzLnNpemUoKTsKIH0KIAotdm9pZCBEZXNpcmVkSWRlbnRpZmllcnM6OnByb2Nl
c3NDb2RlQmxvY2tJZGVudGlmaWVyc0lmTmVlZGVkKCkKK3Vuc2lnbmVkIERlc2lyZWRJZGVudGlm
aWVyczo6ZW5zdXJlKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXApCiB7CiAgICAgaWYgKCFtX2RpZFBy
b2Nlc3NJZGVudGlmaWVycykgewogICAgICAgICAvLyBEbyB0aGlzIG5vdyBpbnN0ZWFkIG9mIHRo
ZSBjb25zdHJ1Y3RvciBzbyB0aGF0IHdlIGRvbid0IHBheSB0aGUgcHJpY2Ugb24gdGhlIG1haW4K
QEAgLTY0LDExICs2NCw2IEBAIHZvaWQgRGVzaXJlZElkZW50aWZpZXJzOjpwcm9jZXNzQ29kZUJs
b2MKICAgICAgICAgICAgIG1faWRlbnRpZmllck51bWJlckZvck5hbWUuYWRkKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGluZGV4KS5pbXBsKCksIGluZGV4KTsKICAgICAgICAgbV9kaWRQcm9jZXNz
SWRlbnRpZmllcnMgPSB0cnVlOwogICAgIH0KLX0KLQotdW5zaWduZWQgRGVzaXJlZElkZW50aWZp
ZXJzOjplbnN1cmUoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCkKLXsKLSAgICBwcm9jZXNzQ29kZUJs
b2NrSWRlbnRpZmllcnNJZk5lZWRlZCgpOwogCiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2lkZW50
aWZpZXJOdW1iZXJGb3JOYW1lLmFkZChyZXAsIG51bWJlck9mSWRlbnRpZmllcnMoKSk7CiAgICAg
dW5zaWduZWQgcmVzdWx0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKQEAgLTc5LDQ1ICs3
NCwyMCBAQCB1bnNpZ25lZCBEZXNpcmVkSWRlbnRpZmllcnM6OmVuc3VyZShVbmlxCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotdW5zaWduZWQgRGVzaXJlZElkZW50aWZpZXJzOjplbnN1cmUoQm94
PElkZW50aWZpZXI+IHJlcCkKLXsKLSAgICBwcm9jZXNzQ29kZUJsb2NrSWRlbnRpZmllcnNJZk5l
ZWRlZCgpOwotCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwgPSByZXAtPmltcGwoKTsKLSAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1faWRlbnRpZmllck51bWJlckZvck5hbWUuYWRkKGltcGwsIG51
bWJlck9mSWRlbnRpZmllcnMoKSk7Ci0gICAgdW5zaWduZWQgcmVzdWx0ID0gYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAg
bV9hZGRlZElkZW50aWZpZXJzLmFwcGVuZChXVEZNb3ZlKHJlcCkpOwotICAgICAgICBBU1NFUlQo
YXQocmVzdWx0KSA9PSBpbXBsKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogVW5p
cXVlZFN0cmluZ0ltcGwqIERlc2lyZWRJZGVudGlmaWVyczo6YXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0CiB7CiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHJlc3VsdDsKICAgICBpZiAoaW5kZXggPCBt
X2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpKQogICAgICAgICByZXN1bHQgPSBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihpbmRleCkuaW1wbCgpOwotICAgIGVsc2UgewotICAgICAgICBj
b25zdCBhdXRvJiB2YXJpYW50ID0gbV9hZGRlZElkZW50aWZpZXJzW2luZGV4IC0gbV9jb2RlQmxv
Y2stPm51bWJlck9mSWRlbnRpZmllcnMoKV07Ci0gICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFVuaXF1ZWRTdHJpbmdJbXBsKj4odmFyaWFudCkpCi0gICAgICAgICAgICByZXN1bHQg
PSBXVEY6OmdldDxVbmlxdWVkU3RyaW5nSW1wbCo+KHZhcmlhbnQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByZXN1bHQgPSBXVEY6OmdldDxCb3g8SWRlbnRpZmllcj4+KHZhcmlhbnQpLT5p
bXBsKCk7Ci0gICAgfQorICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gbV9hZGRlZElkZW50aWZp
ZXJzW2luZGV4IC0gbV9jb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKV07CiAgICAgQVNT
RVJUKHJlc3VsdC0+aGFzQXRMZWFzdE9uZVJlZigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB2b2lkIERlc2lyZWRJZGVudGlmaWVyczo6cmVhbGx5QWRkKFZNJiB2bSwgQ29tbW9uRGF0YSog
Y29tbW9uRGF0YSkKIHsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcmlhbnQgOiBtX2FkZGVkSWRl
bnRpZmllcnMpIHsKLSAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHJlcDsKLSAgICAgICAgaWYg
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlZFN0cmluZ0ltcGwqPih2YXJpYW50KSkKLSAg
ICAgICAgICAgIHJlcCA9IFdURjo6Z2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4odmFyaWFudCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcCA9IFdURjo6Z2V0PEJveDxJZGVudGlmaWVyPj4o
dmFyaWFudCktPmltcGwoKTsKLQorICAgIGZvciAoYXV0byByZXAgOiBtX2FkZGVkSWRlbnRpZmll
cnMpIHsKICAgICAgICAgQVNTRVJUKHJlcC0+aGFzQXRMZWFzdE9uZVJlZigpKTsKICAgICAgICAg
SWRlbnRpZmllciB1aWQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCByZXApOwogICAgICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50
aWZpZXJzLmgJKHJldmlzaW9uIDI1NDM4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZElkZW50aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAK
IAogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVlZFN0cmluZ0lt
cGwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OSw3ICs0OCw2IEBAIHB1YmxpYzoKICAgICAK
ICAgICB1bnNpZ25lZCBudW1iZXJPZklkZW50aWZpZXJzKCk7CiAgICAgdW5zaWduZWQgZW5zdXJl
KFVuaXF1ZWRTdHJpbmdJbXBsKik7Ci0gICAgdW5zaWduZWQgZW5zdXJlKEJveDxJZGVudGlmaWVy
Pik7CiAgICAgCiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25z
dDsKICAgICAKQEAgLTYxLDcgKzU5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHByb2Nlc3NDb2Rl
QmxvY2tJZGVudGlmaWVyc0lmTmVlZGVkKCk7CiAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OwotICAgIFZlY3RvcjxWYXJpYW50PFVuaXF1ZWRTdHJpbmdJbXBsKiwgQm94PElkZW50aWZpZXI+
Pj4gbV9hZGRlZElkZW50aWZpZXJzOworICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IG1f
YWRkZWRJZGVudGlmaWVyczsKICAgICBIYXNoTWFwPFVuaXF1ZWRTdHJpbmdJbXBsKiwgdW5zaWdu
ZWQ+IG1faWRlbnRpZmllck51bWJlckZvck5hbWU7CiAgICAgYm9vbCBtX2RpZFByb2Nlc3NJZGVu
dGlmaWVyczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFs
aXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRG
aW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAyNTQzODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDIyICs4MSwyOCBA
QCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAKIHZvaWQgSklURmluYWxp
emVyOjpmaW5hbGl6ZUNvbW1vbigpCiB7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX3Bs
YW4uY29kZUJsb2NrKCk7CisKICAgICAvLyBTb21lIEpJVCBmaW5hbGl6ZXJzIG1heSBoYXZlIGFk
ZGVkIG1vcmUgY29uc3RhbnRzLiBTaHJpbmstdG8tZml0IHRob3NlIHRoaW5ncyBub3cuCiAgICAg
ewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fcGxhbi5jb2RlQmxvY2soKS0+
bV9sb2NrKTsKLSAgICAgICAgbV9wbGFuLmNvZGVCbG9jaygpLT5jb25zdGFudHMoKS5zaHJpbmtU
b0ZpdCgpOwotICAgICAgICBtX3BsYW4uY29kZUJsb2NrKCktPmNvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbigpLnNocmlua1RvRml0KCk7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50
cygpLnNocmlua1RvRml0KCk7CisgICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQoKTsKICAgICB9CiAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKLSAgICBtX2ppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAobV9wbGFuLmNvZGVCbG9j
aygpKTsKKyAgICBtX2ppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKICNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAogICAgIGlmIChVTkxJS0VMWShtX3BsYW4uY29tcGls
YXRpb24oKSkpCi0gICAgICAgIG1fcGxhbi52bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFk
ZENvbXBpbGF0aW9uKG1fcGxhbi5jb2RlQmxvY2soKSwgKm1fcGxhbi5jb21waWxhdGlvbigpKTsK
KyAgICAgICAgbV9wbGFuLnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRp
b24oY29kZUJsb2NrLCAqbV9wbGFuLmNvbXBpbGF0aW9uKCkpOwogCiAgICAgaWYgKCFtX3BsYW4u
d2lsbFRyeVRvVGllclVwKCkpCi0gICAgICAgIG1fcGxhbi5jb2RlQmxvY2soKS0+YmFzZWxpbmVW
ZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gPSB0cnVlOwor
CisgICAgLy8gVGhlIGNvZGVCbG9jayBpcyBub3cgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgbWFu
eSB0aGluZ3MgYWxpdmUgKGUuZy4gZnJvemVuIHZhbHVlcykKKyAgICAvLyB0aGF0IHdlcmUgcHJl
dmlvdXNseSBrZXB0IGFsaXZlIGJ5IHRoZSBwbGFuLgorICAgIG1fcGxhbi52bSgpLT5oZWFwLndy
aXRlQmFycmllcihjb2RlQmxvY2spOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDI1NDM4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc5LDcgKzc5LDYgQEAKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICNpbmNsdWRlICJGVExD
YXBhYmlsaXRpZXMuaCIKQEAgLTE1NSw3ICsxNTQsNiBAQCBQbGFuOjpQbGFuKENvZGVCbG9jayog
cGFzc2VkQ29kZUJsb2NrLCBDCiAKIFBsYW46On5QbGFuKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VS
VCh1bm51a2VkVk0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiB9CiAKIGJv
b2wgUGxhbjo6Y29tcHV0ZUNvbXBpbGVUaW1lcygpIGNvbnN0CkBAIC02NTcsNiArNjU1LDcgQEAg
dm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbgogICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2YWx1ZS52YWx1ZSgpKTsKICAgICB9CiAKKyAgICBtX3Jl
Y29yZGVkU3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgbV9yZWNvcmRlZFN0
YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZChtX2NvZGVCbG9jayk7CkBAIC02OTYsMjIgKzY5NSw2IEBAIGJvb2wgUGxhbjo6aXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoKQogdm9pZCBQbGFuOjpjYW5jZWwoKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKG1fc3RhZ2UgIT0gQ2FuY2VsbGVkKTsKLQotICAgIC8vIFdoZW4gd2UgY2FuY2VsIGEg
cGxhbiwgdGhlcmUncyBhIGNoYW5jZSB0aGF0IHRoZSBjb21waWxlciB0aHJlYWQgbWF5IGhhdmUK
LSAgICAvLyBhbHJlYWR5IHJlZidlZCBpdCBhbmQgaXMgd29ya2luZyBvbiBpdC4gVGhpcyByZXN1
bHRzIGluIGEgcmFjZSB3aGVyZSB0aGUKLSAgICAvLyBjb21waWxlciB0aHJlYWQgbWF5IGhvbGQg
dGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwbGFuLiBXZSByZXF1aXJlIHRoYXQKLSAgICAvLyB0
aGUgcGxhbiBpcyBvbmx5IGRlc3RydWN0ZWQgb24gdGhlIG11dGF0b3IgdGhyZWFkIGJlY2F1c2Ug
d2UgcGlnZ3kgYmFjawotICAgIC8vIG9uIHRoZSBwbGFuIHRvIGVuc3VyZSBjZXJ0YWluIG90aGVy
IG9iamVjdHMgYXJlIG9ubHkgZGVzdHJ1Y3RlZCBvbiB0aGUKLSAgICAvLyBtdXRhdG9yIHRocmVh
ZC4gRm9yIGV4YW1wbGUsIHNlZSBQbGFuOjptX2lkZW50aWZpZXJzS2VwdEFsaXZlRm9yQ2xlYW5V
cC4KLSAgICAvLwotICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBwbGFuIGlzIGRlc3RydWN0ZWQg
b24gdGhlIG11dGF0b3IgYW5kIG5vdCB0aGUgY29tcGlsZXIKLSAgICAvLyB0aHJlYWQsIHRoZSBj
b21waWxlciB0aHJlYWQgd2lsbCBlbnF1ZXVlIGFueSBjYW5jZWxsZWQgcGxhbiBpdCBzZWVzIGlu
Ci0gICAgLy8gdGhlIHdvcmtsaXN0J3MgbV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlv
bi4gVGhlIG11dGF0b3Igd2lsbCBsYXRlcgotICAgIC8vIGRlbGV0ZSB0aGUgY2FuY2VsbGVkIHBs
YW5zIGluIG1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24uCi0gICAgLy8gSG93ZXZl
ciwgYSBtdXRhdG9yIHNob3VsZCBvbmx5IGRlbGV0ZSBjYW5jZWxsZWQgcGxhbnMgdGhhdCBiZWxv
bmcgdG8gaXRzCi0gICAgLy8gVk0uIEhlbmNlLCBhIGNhbmNlbGxlZCBwbGFuIG5lZWRzIHRvIGtl
ZXAgaXRzIG1fdm0gcG9pbnRlciB0byBsZXQgdGhlCi0gICAgLy8gbXV0YXRvciBrbm93IHdoaWNo
IFZNIGl0IGJlbG9uZ3MgdG8uCi0gICAgLy8gUmVmOiBTZWUgV29ya2xpc3Q6OmRlbGV0ZUNhbmNl
bGxlZFBsYW5zRm9yVk0oKS4KICAgICBBU1NFUlQobV92bSk7CiAKICAgICAvLyBOdWtlIHRoZSBW
TSBwb2ludGVyIHNvIHRoYXQgcG9pbnRlciBjb21wYXJpc29ucyBhZ2FpbnN0IGl0IHdpbGwgZmFp
bC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyNTQzODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJvZmls
ZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVzZXMuaCIKLSNpbmNsdWRl
IDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KIApAQCAtMTE3LDEyICsxMTYsNiBAQCBwdWJsaWM6CiAgICAg
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKiBjYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGJhY2suZ2V0KCk7IH0KICAgICB2b2lkIHNldENhbGxiYWNrKFJlZjxEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spIHsgbV9jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spOyB9CiAKLSAgICB2b2lkIGtlZXBBbGl2ZUlkZW50aWZpZXIoQm94PElkZW50aWZpZXI+IGlk
ZW50aWZpZXIpCi0gICAgewotICAgICAgICBpZiAoaWRlbnRpZmllcikKLSAgICAgICAgICAgIG1f
aWRlbnRpZmllcnNLZXB0QWxpdmVGb3JDbGVhblVwLmFwcGVuZChXVEZNb3ZlKGlkZW50aWZpZXIp
KTsKLSAgICB9Ci0KIHByaXZhdGU6CiAgICAgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCkgY29u
c3Q7CiAgICAgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKSBjb25zdDsKQEAgLTE4MSw3ICsxNzQs
NiBAQCBwcml2YXRlOgogICAgIFN0YWdlIG1fc3RhZ2U7CiAKICAgICBSZWZQdHI8RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrOwotICAgIFZlY3RvcjxCb3g8SWRlbnRpZmll
cj4sIDE2PiBtX2lkZW50aWZpZXJzS2VwdEFsaXZlRm9yQ2xlYW5VcDsKIAogICAgIE1vbm90b25p
Y1RpbWUgbV90aW1lQmVmb3JlRlRMOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyNTQzODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDEwICsxMDAs
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZGF0YS5tX3JpZ2h0
VG9SdW4pOwogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV93b3Jr
bGlzdC5tX2xvY2spOwotICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpD
YW5jZWxsZWQpIHsKLSAgICAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fY2FuY2VsbGVkUGxhbnNQ
ZW5kaW5nRGVzdHJ1Y3Rpb24uYXBwZW5kKFdURk1vdmUobV9wbGFuKSk7CisgICAgICAgICAgICBp
ZiAobV9wbGFuLT5zdGFnZSgpID09IFBsYW46OkNhbmNlbGxlZCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBt
X3BsYW4tPm5vdGlmeUNvbXBpbGluZygpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTI1LDEw
ICsxMjMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIAogICAgICAgICB7CiAgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcigqbV93b3JrbGlzdC5tX2xvY2spOwotICAgICAgICAgICAgaWYgKG1f
cGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpIHsKLSAgICAgICAgICAgICAgICBtX3dv
cmtsaXN0Lm1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24uYXBwZW5kKFdURk1vdmUo
bV9wbGFuKSk7CisgICAgICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSgpID09IFBsYW46OkNhbmNl
bGxlZCkKICAgICAgICAgICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7Ci0gICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fcGxhbi0+bm90aWZ5UmVhZHko
KTsKICAgICAgICAgICAgIApAQCAtMzA0LDQ3ICszMDAsMTAgQEAgdm9pZCBXb3JrbGlzdDo6d2Fp
dFVudGlsQWxsUGxhbnNGb3JWTUFyZQogICAgIH0KIH0KIAotdm9pZCBXb3JrbGlzdDo6ZGVsZXRl
Q2FuY2VsbGVkUGxhbnNGb3JWTShMb2NrSG9sZGVyJiwgVk0mIHZtKQotewotICAgIFJFTEVBU0Vf
QVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIEhhc2hTZXQ8
UmVmUHRyPFBsYW4+PiByZW1vdmVkUGxhbnM7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIHNjZW5h
cmlvIGNhbiBvY2N1cjoKLSAgICAvLyAxLiBUaGUgREZHIHRocmVhZCBzdGFydGVkIGNvbXBpbGlu
ZyBhIHBsYW4uCi0gICAgLy8gMi4gVGhlIEdDIHRocmVhZCBjYW5jZWxzIHRoZSBwbGFuLCBhbmQg
YWRkcyBpdCB0byBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLgotICAgIC8vIDMu
IFRoZSBERkcgdGhyZWFkIGZpbmlzaGVzIGNvbXBpbGluZywgYW5kIGRpc2NvdmVycyB0aGF0IHRo
ZSB0aHJlYWQgaXMgY2FuY2VsbGVkLgotICAgIC8vICAgIFRvIGF2b2lkIGRlc3RydWN0aW5nIHRo
ZSBwbGFuIGluIHRoZSBERkcgdGhyZWFkLCBpdCBhZGRzIGl0IHRvCi0gICAgLy8gICAgbV9jYW5j
ZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbi4KLSAgICAvLyA0LiBUaGUgYWJvdmUgb2NjdXJz
IGJlZm9yZSB0aGUgbXV0YXRvciBydW5zIGRlbGV0ZUNhbmNlbGxlZFBsYW5zRm9yVk0oKS4KLSAg
ICAvLwotICAgIC8vIEhlbmNlLCB0aGUgc2FtZSBjYW5jZWxsZWQgcGxhbiBjYW4gYXBwZWFyIGlu
IG1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24KLSAgICAvLyBtb3JlIHRoYW4gb25j
ZS4gVGhpcyBpcyB3aHkgd2UgbmVlZCB0byBmaWx0ZXIgdGhlIGNhbmNlbGxlZCBwbGFucyB0aHJv
dWdoCi0gICAgLy8gdGhlIHJlbW92ZWRQbGFucyBIYXNoU2V0IGJlZm9yZSB3ZSBkbyB0aGUgcmVm
Q291bnQgY2hlY2sgYmVsb3cuCi0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2FuY2Vs
bGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRy
PFBsYW4+IHBsYW4gPSBtX2NhbmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uW2ldOwotICAg
ICAgICBpZiAocGxhbi0+dW5udWtlZFZNKCkgIT0gJnZtKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIG1fY2FuY2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb25baS0tXSA9IG1fY2Fu
Y2VsbGVkUGxhbnNQZW5kaW5nRGVzdHJ1Y3Rpb24ubGFzdCgpOwotICAgICAgICBtX2NhbmNlbGxl
ZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgcmVtb3ZlZFBs
YW5zLmFkZChXVEZNb3ZlKHBsYW4pKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIXJlbW92ZWRQbGFu
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSByZW1vdmVkUGxhbnMu
dGFrZUFueSgpOwotICAgICAgICBBU1NFUlQocGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxs
ZWQpOwotICAgICAgICBpZiAocGxhbi0+cmVmQ291bnQoKSA+IDEpCi0gICAgICAgICAgICBtX2Nh
bmNlbGxlZFBsYW5zUGVuZGluZ0Rlc3RydWN0aW9uLmFwcGVuZChXVEZNb3ZlKHBsYW4pKTsKLSAg
ICB9Ci19Ci0KIHZvaWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0s
IFZlY3RvcjxSZWZQdHI8UGxhbj4sIDg+JiBteVJlYWR5UGxhbnMpCiB7CiAgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgIEFT
U0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLQotICAgIGRlbGV0ZUNh
bmNlbGxlZFBsYW5zRm9yVk0obG9ja2VyLCB2bSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4g
PSBtX3JlYWR5UGxhbnNbaV07CiAgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKQEAgLTQ0
Nyw4ICs0MDYsNiBAQCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAg
IHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIEhhc2hTZXQ8
Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFuS2V5czsKLSAgICAgICAgYm9vbCBpc0luTXV0YXRvciA9
IHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCk7Ci0KICAgICAgICAgZm9yIChQbGFu
TWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5k
KCk7ICsraXRlcikgewogICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OwogICAgICAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQpAQCAtNDYyLDEyICs0MTksOCBA
QCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAgICAgICAgICAgZGVh
ZFBsYW5LZXlzLmFkZChwbGFuLT5rZXkoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFkZWFk
UGxhbktleXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmb3IgKEhhc2hTZXQ8Q29tcGlsYXRp
b25LZXk+OjppdGVyYXRvciBpdGVyID0gZGVhZFBsYW5LZXlzLmJlZ2luKCk7IGl0ZXIgIT0gZGVh
ZFBsYW5LZXlzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8UGxhbj4g
cGxhbiA9IG1fcGxhbnMudGFrZSgqaXRlcik7Ci0gICAgICAgICAgICAgICAgcGxhbi0+Y2FuY2Vs
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0luTXV0YXRvcikKLSAgICAgICAgICAgICAgICAg
ICAgbV9jYW5jZWxsZWRQbGFuc1BlbmRpbmdEZXN0cnVjdGlvbi5hcHBlbmQoV1RGTW92ZShwbGFu
KSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEhhc2hTZXQ8Q29tcGlsYXRpb25L
ZXk+OjppdGVyYXRvciBpdGVyID0gZGVhZFBsYW5LZXlzLmJlZ2luKCk7IGl0ZXIgIT0gZGVhZFBs
YW5LZXlzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgbV9wbGFucy50YWtlKCppdGVy
KS0+Y2FuY2VsKCk7CiAgICAgICAgICAgICBEZXF1ZTxSZWZQdHI8UGxhbj4+IG5ld1F1ZXVlOwog
ICAgICAgICAgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAg
IFJlZlB0cjxQbGFuPiBwbGFuID0gbV9xdWV1ZS50YWtlRmlyc3QoKTsKQEAgLTUwMyw5ICs0NTYs
NiBAQCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvCiAgICAgTG9ja0hv
bGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgSGFzaFNldDxDb21waWxhdGlvbktleT4gZGVhZFBs
YW5LZXlzOwogICAgIFZlY3RvcjxSZWZQdHI8UGxhbj4+IGRlYWRQbGFuczsKLSAgICBBU1NFUlQo
dm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0KLSAgICBkZWxldGVDYW5jZWxs
ZWRQbGFuc0ZvclZNKGxvY2tlciwgdm0pOwogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3BsYW5z
KSB7CiAgICAgICAgIFBsYW4qIHBsYW4gPSBlbnRyeS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYg
KHBsYW4tPnZtKCkgIT0gJnZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuaAkocmV2aXNpb24gMjU0Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw2IEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIHZvaWQgdGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpOwogICAgIAogICAg
IHZvaWQgcmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgVmVjdG9yPFJlZlB0cjxQbGFuPiwg
OD4mKTsKLSAgICB2b2lkIGRlbGV0ZUNhbmNlbGxlZFBsYW5zRm9yVk0oTG9ja0hvbGRlciYsIFZN
Jik7CiAKICAgICB2b2lkIGR1bXAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBQcmludFN0cmVhbSYp
IGNvbnN0OwogICAgIApAQCAtMTE0LDcgKzExMyw2IEBAIHByaXZhdGU6CiAgICAgLy8gVXNlZCB0
byBxdWlja2x5IGZpbmQgd2hpY2ggcGxhbnMgaGF2ZSBiZWVuIGNvbXBpbGVkIGFuZCBhcmUgcmVh
ZHkgdG8KICAgICAvLyBiZSBjb21wbGV0ZWQuCiAgICAgVmVjdG9yPFJlZlB0cjxQbGFuPiwgMTY+
IG1fcmVhZHlQbGFuczsKLSAgICBWZWN0b3I8UmVmUHRyPFBsYW4+LCA0PiBtX2NhbmNlbGxlZFBs
YW5zUGVuZGluZ0Rlc3RydWN0aW9uOwogICAgIFJlZjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+
IG1fcGxhbkVucXVldWVkOwogICAgIENvbmRpdGlvbiBtX3BsYW5Db21waWxlZDsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNp
b24gMjU0Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwyNCArNzEsMjkgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6
OmZpbmFsaXplRnVuY3Rpb24oKQogCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24o
KQogeworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9wbGFuLmNvZGVCbG9jaygpOwogICAg
IGJvb2wgZHVtcERpc2Fzc2VtYmx5ID0gc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9u
czo6YXN5bmNEaXNhc3NlbWJseSgpOwotICAgIAorCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IGIzQ29kZVJlZiA9CiAgICAgICAgIEZJTkFMSVpFX0NPREVfSUYoZHVt
cERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAg
ICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9wbGFuLmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQpKS5kYXRhKCkpOworICAgICAgICAg
ICAgIkZUTCBCMyBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShj
b2RlQmxvY2ssIEpJVFR5cGU6OkZUTEpJVCkpLmRhdGEoKSk7CiAKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYXJpdHlDaGVja0NvZGVSZWYgPSBlbnRyeXBvaW50TGlu
a0J1ZmZlcgogICAgICAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVtcERpc2Fzc2VtYmx5LCAqZW50
cnlwb2ludExpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICAgICAiRlRMIGVudHJ5
cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJp
bmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExK
SVQpKS5kYXRhKCksIGZ1bmN0aW9uKQorICAgICAgICAgICAgIkZUTCBlbnRyeXBvaW50IHRodW5r
IGZvciAlcyB3aXRoIEIzIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9j
a1dpdGhKSVRUeXBlKGNvZGVCbG9jaywgSklUVHlwZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlv
bikKICAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYuY29kZSgpKTsKIAogICAgIGppdENvZGUtPmlu
aXRpYWxpemVCM0NvZGUoYjNDb2RlUmVmKTsKICAgICBqaXRDb2RlLT5pbml0aWFsaXplQXJpdHlD
aGVja0VudHJ5cG9pbnQoYXJpdHlDaGVja0NvZGVSZWYpOwogCi0gICAgbV9wbGFuLmNvZGVCbG9j
aygpLT5zZXRKSVRDb2RlKCpqaXRDb2RlKTsKKyAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoKmpp
dENvZGUpOwogCiAgICAgaWYgKFVOTElLRUxZKG1fcGxhbi5jb21waWxhdGlvbigpKSkKLSAgICAg
ICAgbV9wbGFuLnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9w
bGFuLmNvZGVCbG9jaygpLCAqbV9wbGFuLmNvbXBpbGF0aW9uKCkpOworICAgICAgICBtX3BsYW4u
dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihjb2RlQmxvY2ssICpt
X3BsYW4uY29tcGlsYXRpb24oKSk7CisKKyAgICAvLyBUaGUgY29kZUJsb2NrIGlzIG5vdyByZXNw
b25zaWJsZSBmb3Iga2VlcGluZyBtYW55IHRoaW5ncyBhbGl2ZSAoZS5nLiBmcm96ZW4gdmFsdWVz
KQorICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IGtlcHQgYWxpdmUgYnkgdGhlIHBsYW4uCisg
ICAgbV9wbGFuLnZtKCktPmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMjU0Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgorI2lu
Y2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xv
d1BhdGhzLmgiCiAjaW5jbHVkZSAiREZHQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiREZH
RHJpdmVyLmgiCkBAIC0yMDI4LDcgKzIwMjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkdlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlz
Q2VsbCgpICYmIGlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSkgeworICAgIGlmIChiYXNlVmFs
dWUuaXNDZWxsKCkgJiYgQ2FjaGVhYmxlSWRlbnRpZmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVy
Q2VsbChzdWJzY3JpcHQpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1l
ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChzdWJz
Y3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CkBAIC0yMDM3
LDcgKzIwMzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAg
ICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgcHJvcGVydHlOYW1lLCBiYXNlVmFsdWUg
PT0gc2xvdC5zbG90QmFzZSgpKSk7IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBjb2RlQmxvY2ssIGJhc2VWYWx1ZS5z
dHJ1Y3R1cmVPck51bGwoKSwgcHJvcGVydHlOYW1lLmltcGwoKSkpCi0gICAgICAgICAgICAgICAg
ICAgIHJlcGF0Y2hHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QsICpzdHViSW5mbywgR2V0QnlLaW5kOjpOb3JtYWxCeVZhbCk7CisgICAg
ICAgICAgICAgICAgICAgIHJlcGF0Y2hHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZVZhbHVlLCBzdWJzY3JpcHQuYXNDZWxsKCksIHNsb3QsICpzdHViSW5mbywgR2V0QnlLaW5kOjpO
b3JtYWxCeVZhbCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kID8gc2xvdC5nZXRWYWx1
ZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkgOiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAg
ICAgfSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAJKHJldmlzaW9uIDI1NDM4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkJpbmFy
eVN3aXRjaC5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNp
bmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIK
QEAgLTE3OCw3ICsxNzksNyBAQCBpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBh
cHByCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBHZXRCeUtpbmQga2luZCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CkBAIC0yNjgsNyArMjY5LDcgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogCiAgICAgICAgICAgICAgICAg
Ym9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9w
ZXJ0eUFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAg
ICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBwcm9wZXJ0eU5hbWUsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgp
KSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uLCBhcHByb3ByaWF0
ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8uaW5pdEdldEJ5SWRTZWxmKGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMzE5LDcgKzMyMCw3IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Rv
dHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OmNyZWF0ZShnbG9iYWxPYmpl
Y3QsIGJhc2VDZWxsLCBzbG90KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90
eXBlQWNjZXNzQ2hhaW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0
dXJlKHN0cnVjdHVyZSktPmdldCh2bSwgcHJvcGVydHlOYW1lKSA9PSBvZmZzZXQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
IHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZShzdHJ1Y3R1cmUpLT5n
ZXQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkgPT0gb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBpbnN0ZWFkIGZvciBmYXN0ZXIgYWNjZXNzZXMuCiAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CkBAIC0zMjgsMTYg
KzMyOSwxNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg1MjE1CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUuaW1w
bCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkgPT0gb2Zm
c2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBl
UHJvcGVydHlIaXRDdXN0b20oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBj
b2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCksIHNsb3QuYXR0
cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1l
LnVpZCgpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKQEAg
LTM5MywxMiArMzk0LDEyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5
KEoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIExPR19JQygoSUNFdmVudDo6
R2V0QnlBZGRBY2Nlc3NDYXNlLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgcHJvcGVy
dHlOYW1lLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgIExPR19JQygo
SUNFdmVudDo6R2V0QnlBZGRBY2Nlc3NDYXNlLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZt
KSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90
QmFzZSgpID09IGJhc2VWYWx1ZSkpOwogCiAgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFj
Y2Vzc0Nhc2UobG9ja2VyLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNl
KSk7CiAKICAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xh
c3NJbmZvT3JOdWxsKHZtKSwgcHJvcGVydHlOYW1lLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSk7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5UmVwbGFjZVdpdGhKdW1w
LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwg
cHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKICAg
ICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKQEAgLTQx
MCw3ICs0MTEsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAg
ICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRy
eUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCit2b2lkIHJlcGF0Y2hHZXRC
eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNW
YWx1ZSBiYXNlVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5k
IGtpbmQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OwogICAgIApAQCAtNDk0LDcgKzQ5NSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZUFycmF5R2UKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdCA9
IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBjb2RlQmxvY2ssIElkZW50aWZpZXIoKSwg
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIElkZW50aWZpZXIo
KSkpOworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgY29k
ZUJsb2NrLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNz
VHlwZSwgbnVsbHB0cikpOwogCiAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUo
KSkgewogICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwg
YmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOwpAQCAtODg0LDcg
Kzg4NSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluc3RhbmMKICAgICAg
ICAgCiAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5zdGFuY2VPZkFkZEFjY2Vzc0Nhc2UsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXIoKSkpOwogICAgICAgICAKLSAgICAgICAg
cmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGNvZGVCbG9jaywgSWRlbnRp
ZmllcigpLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRk
QWNjZXNzQ2FzZShsb2NrZXIsIGNvZGVCbG9jaywgbnVsbHB0ciwgV1RGTW92ZShuZXdDYXNlKSk7
CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKICAg
ICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5zdGFuY2VPZlJlcGxhY2VXaXRoSnVtcCwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcigpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMjU0Mzg1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lm
IEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgiCiAjaW5jbHVk
ZSAiQ2FsbFZhcmlhbnQuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAKQEAgLTQxLDcgKzQyLDcg
QEAgZW51bSBjbGFzcyBHZXRCeUtpbmQgewogfTsKIAogdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZh
bChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRl
eCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKK3ZvaWQgcmVwYXRjaEdldEJ5
KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwog
dm9pZCByZXBhdGNoUHV0QnlJRChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUs
IFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogdm9pZCByZXBhdGNoSW5CeUlEKEpTR2xvYmFs
T2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgYm9vbCB3
YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQg
cmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIHZh
bHVlLCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1YkluZm8mLCBib29sIHdhc0ZvdW5k
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllci5oIgorCisj
aW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2JpdHMg
PyB1aWQoKSA6IFN0cmluZ0ltcGw6OmVtcHR5KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNz
IFByaW50U3RyZWFtOworY2xhc3MgVW5pcXVlZFN0cmluZ0ltcGw7CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCit1c2luZyBXVEY6OlByaW50U3RyZWFtOwordXNpbmcgV1RGOjpVbmlxdWVkU3RyaW5n
SW1wbDsKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIElkZW50aWZpZXI7CitjbGFzcyBKU0Nl
bGw7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllciB7Citw
dWJsaWM6CisgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKKyAgICBpbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJik7CisgICAgaW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIoSlNDZWxsKiBpZGVudGlmaWVyKTsKKworICAgIENhY2hlYWJsZUlkZW50
aWZpZXIoY29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYpID0gZGVmYXVsdDsKKyAgICBDYWNoZWFi
bGVJZGVudGlmaWVyKENhY2hlYWJsZUlkZW50aWZpZXImJikgPSBkZWZhdWx0OworCisgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcihzdGQ6Om51bGxwdHJfdCkKKyAgICAgICAgOiBtX2JpdHMoMCkKKyAg
ICB7IH0KKworICAgIGJvb2wgaXNVaWQoKSBjb25zdCB7IHJldHVybiBtX2JpdHMgJiBzX3VpZFRh
ZzsgfQorICAgIGJvb2wgaXNDZWxsKCkgY29uc3QgeyByZXR1cm4gIWlzVWlkKCk7IH0KKyAgICBp
bmxpbmUgYm9vbCBpc1N5bWJvbENlbGwoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc1N0cmlu
Z0NlbGwoKSBjb25zdDsKKworICAgIGJvb2wgaXNTeW1ib2woKSBjb25zdCB7IHJldHVybiBtX2Jp
dHMgJiYgdWlkKCktPmlzU3ltYm9sKCk7IH0KKworICAgIGlubGluZSBKU0NlbGwqIGNlbGwoKSBj
b25zdDsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3Q7CisKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CisKKyAgICBDYWNoZWFi
bGVJZGVudGlmaWVyJiBvcGVyYXRvcj0oY29uc3QgQ2FjaGVhYmxlSWRlbnRpZmllciYpID0gZGVm
YXVsdDsKKyAgICBDYWNoZWFibGVJZGVudGlmaWVyJiBvcGVyYXRvcj0oQ2FjaGVhYmxlSWRlbnRp
ZmllciYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FjaGVhYmxl
SWRlbnRpZmllciYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDYWNo
ZWFibGVJZGVudGlmaWVyJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IElkZW50aWZpZXImIG90aGVyKSBjb25zdDsKKworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Nh
Y2hlYWJsZUlkZW50aWZpZXJDZWxsKEpTQ2VsbCopOworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c0NhY2hlYWJsZUlkZW50aWZpZXJDZWxsKEpTVmFsdWUpOworCisgICAgaW5saW5lIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKSBjb25zdDsKKworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGlubGluZSB2
b2lkIHNldENlbGxCaXRzKEpTQ2VsbCopOworICAgIGlubGluZSB2b2lkIHNldFVpZEJpdHMoVW5p
cXVlZFN0cmluZ0ltcGwqKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHNfdWlk
VGFnID0gMTsKKyAgICB1aW50cHRyX3QgbV9iaXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmll
ci5oIgorCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXI6OkNhY2hlYWJsZUlkZW50aWZpZXIoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllcikKK3sKKyAgICBzZXRVaWRCaXRzKGlkZW50aWZpZXIuaW1wbCgpKTsKK30K
KworaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXI6OkNhY2hlYWJsZUlkZW50aWZpZXIoSlNDZWxs
KiBpZGVudGlmaWVyKQoreworICAgIHNldENlbGxCaXRzKGlkZW50aWZpZXIpOworfQorCitpbmxp
bmUgSlNDZWxsKiBDYWNoZWFibGVJZGVudGlmaWVyOjpjZWxsKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoaXNDZWxsKCkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9iaXRzKTsK
K30KKworaW5saW5lIFVuaXF1ZWRTdHJpbmdJbXBsKiBDYWNoZWFibGVJZGVudGlmaWVyOjp1aWQo
KSBjb25zdAoreworICAgIGlmICghbV9iaXRzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBpZiAoaXNVaWQoKSkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5n
SW1wbCo+KG1fYml0cyAmIH5zX3VpZFRhZyk7CisgICAgaWYgKGlzU3ltYm9sQ2VsbCgpKQorICAg
ICAgICByZXR1cm4gJmpzQ2FzdDxTeW1ib2wqPihjZWxsKCkpLT51aWQoKTsKKyAgICBBU1NFUlQo
aXNTdHJpbmdDZWxsKCkpOworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcq
PihjZWxsKCkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihz
dHJpbmctPmdldFZhbHVlSW1wbCgpKTsKK30KKworaW5saW5lIGJvb2wgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6aXNDYWNoZWFibGVJZGVudGlmaWVyQ2VsbChKU0NlbGwqIGNlbGwpCit7CisgICAgaWYg
KGNlbGwtPmlzU3ltYm9sKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghY2VsbC0+
aXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTU3RyaW5nKiBzdHJpbmcg
PSBqc0Nhc3Q8SlNTdHJpbmcqPihjZWxsKTsKKyAgICBpZiAoY29uc3QgU3RyaW5nSW1wbCogaW1w
bCA9IHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkpCisgICAgICAgIHJldHVybiBpbXBsLT5pc0F0
b20oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIENhY2hlYWJsZUlkZW50
aWZpZXI6OmlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBp
ZiAoIXZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGlz
Q2FjaGVhYmxlSWRlbnRpZmllckNlbGwodmFsdWUuYXNDZWxsKCkpOworfQorCitpbmxpbmUgYm9v
bCBDYWNoZWFibGVJZGVudGlmaWVyOjppc1N5bWJvbENlbGwoKSBjb25zdAoreworICAgIHJldHVy
biBpc0NlbGwoKSAmJiBjZWxsKCktPmlzU3ltYm9sKCk7Cit9CisKK2lubGluZSBib29sIENhY2hl
YWJsZUlkZW50aWZpZXI6OmlzU3RyaW5nQ2VsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzQ2Vs
bCgpICYmIGNlbGwoKS0+aXNTdHJpbmcoKTsKK30KKworaW5saW5lIHZvaWQgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6c2V0Q2VsbEJpdHMoSlNDZWxsKiBjZWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGlzQ2FjaGVhYmxlSWRlbnRpZmllckNlbGwoY2VsbCkpOworICAgIG1fYml0cyA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KGNlbGwpOworfQorCitpbmxpbmUgdm9pZCBDYWNoZWFibGVJZGVudGlm
aWVyOjpzZXRVaWRCaXRzKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgbV9iaXRzID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odWlkKSB8IHNfdWlkVGFnOworfQorCitpbmxpbmUgdm9p
ZCBDYWNoZWFibGVJZGVudGlmaWVyOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRv
cikgY29uc3QKK3sKKyAgICBpZiAobV9iaXRzICYmIGlzQ2VsbCgpKQorICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGNlbGwoKSk7Cit9CisKKworaW5saW5lIGJvb2wgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6b3BlcmF0b3I9PShjb25zdCBDYWNoZWFibGVJZGVudGlmaWVyJiBvdGhlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gdWlkKCkgPT0gb3RoZXIudWlkKCk7Cit9CisKK2lubGluZSBi
b29sIENhY2hlYWJsZUlkZW50aWZpZXI6Om9wZXJhdG9yIT0oY29uc3QgQ2FjaGVhYmxlSWRlbnRp
ZmllciYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHVpZCgpICE9IG90aGVyLnVpZCgpOwor
fQorCitpbmxpbmUgYm9vbCBDYWNoZWFibGVJZGVudGlmaWVyOjpvcGVyYXRvcj09KGNvbnN0IElk
ZW50aWZpZXImIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiB1aWQoKSA9PSBvdGhlci5pbXBs
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDI1NDM4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIFN0cmluZyBmdW5jdGlvbkNh
bGxCYXNlKGNvbnN0IFN0cgogICAgIGlmIChzb3VyY2VMZW5ndGggPCAyIHx8IHNvdXJjZVRleHRb
aWR4XSAhPSAnKScpIHsKICAgICAgICAgLy8gRm9yIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaGF2ZSBt
YW55IG5ldyBsaW5lcyBpbiBiZXR3ZWVuIHRoZWlyIG9wZW4gcGFyZW50aGVzaXMKICAgICAgICAg
Ly8gYW5kIHRoZWlyIGNsb3NpbmcgcGFyZW50aGVzaXMsIHRoZSB0ZXh0IHJhbmdlIHBhc3NlZCBp
bnRvIHRoZSBtZXNzYWdlIGFwcGVuZGVyIAotICAgICAgICAvLyB3aWxsIG5vdCBpbmxjdWRlIHRo
ZSB0ZXh0IGluIGJldHdlZW4gdGhlc2UgcGFyZW50aGVzZXMsIGl0IHdpbGwganVzdCBiZSB0aGUg
ZGVzaXJlZAorICAgICAgICAvLyB3aWxsIG5vdCBpbmNsdWRlIHRoZSB0ZXh0IGluIGJldHdlZW4g
dGhlc2UgcGFyZW50aGVzZXMsIGl0IHdpbGwganVzdCBiZSB0aGUgZGVzaXJlZAogICAgICAgICAv
LyB0ZXh0IHRoYXQgcHJlY2VkZXMgdGhlIHBhcmVudGhlc2VzLgogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5oCShyZXZpc2lvbiAyNTQzODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNiArMTg5LDcgQEAgcHVibGljOgogICAg
IGlubGluZSBib29sIGVxdWFsKEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqIG90aGVyKSBjb25z
dDsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAg
aW5saW5lIGNvbnN0IFN0cmluZyYgdHJ5R2V0VmFsdWUoYm9vbCBhbGxvY2F0aW9uQWxsb3dlZCA9
IHRydWUpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZ0ltcGwqIGdldFZhbHVlSW1wbCgpIGNvbnN0
OwogICAgIGNvbnN0IFN0cmluZ0ltcGwqIHRyeUdldFZhbHVlSW1wbCgpIGNvbnN0OwogICAgIEFM
V0FZU19JTkxJTkUgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKQEAgLTcwMyw2ICs3MDQsMTIg
QEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU1N0cmluZzo6bGVuZ3RoKAogICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8U3RyaW5nSW1wbCo+KHBvaW50ZXIpLT5sZW5ndGgoKTsKIH0KIAoraW5saW5l
IGNvbnN0IFN0cmluZ0ltcGwqIEpTU3RyaW5nOjpnZXRWYWx1ZUltcGwoKSBjb25zdAoreworICAg
IEFTU0VSVCghaXNSb3BlKCkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RyaW5nSW1wbCo+
KG1fZmliZXIpOworfQorCiBpbmxpbmUgY29uc3QgU3RyaW5nSW1wbCogSlNTdHJpbmc6OnRyeUdl
dFZhbHVlSW1wbCgpIGNvbnN0CiB7CiAgICAgdWludHB0cl90IHBvaW50ZXIgPSBtX2ZpYmVyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjU0Mzg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTQ5LDIwICsxMTQ5LDE1IEBAIHZvaWQgVk06OmR1bXBSZWdFeHBUcmFjZSgpCiB9CiAjZW5k
aWYKIAotV2F0Y2hwb2ludFNldCogVk06OmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9w
ZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCitXYXRjaHBvaW50U2V0KiBWTTo6
ZW5zdXJlV2F0Y2hwb2ludFNldEZvckltcHVyZVByb3BlcnR5KGNvbnN0IFVuaXF1ZWRTdHJpbmdJ
bXBsKiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludFNldHMuYWRkKHByb3BlcnR5TmFtZS5zdHJpbmcoKSwgbnVsbHB0cik7CisgICAg
YXV0byByZXN1bHQgPSBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHMuYWRkKHByb3BlcnR5
TmFtZSwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSXNXYXRjaGVk
KSk7CiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLXZvaWQg
Vk06OnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKLXsKLSAgICBlbnN1cmVXYXRj
aHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lKS0+YWRkKHdhdGNocG9pbnQp
OwotfQotCi12b2lkIFZNOjphZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5
TmFtZSkKK3ZvaWQgVk06OmFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBs
KiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgaWYgKFJlZlB0cjxXYXRjaHBvaW50U2V0PiB3YXRjaHBv
aW50U2V0ID0gbV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzLnRha2UocHJvcGVydHlOYW1l
KSkKICAgICAgICAgd2F0Y2hwb2ludFNldC0+ZmlyZUFsbCgqdGhpcywgIkltcHVyZSBwcm9wZXJ0
eSBhZGRlZCIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAy
NTQzODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDI4LDExICsxMDI4LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2hyaW5rRm9v
dHByaW50V2hlbklkbGUoKTsKIAotICAgIFdhdGNocG9pbnRTZXQqIGVuc3VyZVdhdGNocG9pbnRT
ZXRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgdm9pZCByZWdpc3Rl
cldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiwgV2F0Y2hwb2lu
dCopOworICAgIFdhdGNocG9pbnRTZXQqIGVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9w
ZXJ0eShjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIAogICAgIC8vIEZJWE1FOiBVc2Ug
QXRvbVN0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCBJZGVudGlmaWVyLgotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgU3RyaW5nJik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBVbmlxdWVkU3Ry
aW5nSW1wbCopOwogICAgIAogICAgIElubGluZVdhdGNocG9pbnRTZXQmIHByaW1pdGl2ZUdpZ2Fj
YWdlRW5hYmxlZCgpIHsgcmV0dXJuIG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOyB9CiAKQEAg
LTEyMDYsNyArMTIwNSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZEJ1aWxkUENUb0Nv
ZGVPcmlnaW5NYXBwaW5nIHsgZmFsc2UgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29kZUNhY2hl
PiBtX2NvZGVDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBt
X2J1aWx0aW5FeGVjdXRhYmxlczsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdhdGNocG9p
bnRTZXQ+PiBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHM7CisgICAgSGFzaE1hcDxjb25z
dCBVbmlxdWVkU3RyaW5nSW1wbCosIFJlZlB0cjxXYXRjaHBvaW50U2V0Pj4gbV9pbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnRTZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXI+IG1f
dHlwZVByb2ZpbGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXJMb2c+IG1fdHlw
ZVByb2ZpbGVyTG9nOwogICAgIHVuc2lnbmVkIG1fdHlwZVByb2ZpbGVyRW5hYmxlZENvdW50OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU0Mzg1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDEtMTAgIE1hcmsgTGFt
ICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgdXNlcyBvZiBCb3g8SWRl
bnRpZmllcj4gd2l0aCBhIG5ldyBDYWNoZWFibGVJZGVudGlmaWVyIGNsYXNzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NTQ0CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81ODA0MTgwMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmFkZEltcHVyZVByb3BlcnR5KToKKwogMjAyMC0wMS0xMCAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRyb2R1Y2UgRU5BQkxFX01FVEFf
VklFV1BPUlQgYW5kIHVzZSBpdCBpbiBzb21lIFdLMiBjb2RlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCShyZXZpc2lvbiAyNTQzODUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4
LDcgQEAgRnJhbWUqIGxleGljYWxGcmFtZUZyb21Db21tb25WTSgpCiAKIHZvaWQgYWRkSW1wdXJl
UHJvcGVydHkoY29uc3QgQXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIGNvbW1vblZN
KCkuYWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKKyAgICBjb21tb25WTSgpLmFkZElt
cHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZS5pbXBsKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>
<flag name="review"
          id="403213"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>