<?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>235192</bug_id>
          
          <creation_ts>2022-01-13 11:12:37 -0800</creation_ts>
          <short_desc>Update ARM64EHash</short_desc>
          <delta_ts>2022-01-19 17:41:27 -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>
          <dependson>235201</dependson>
    
    <dependson>235241</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1830640</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-13 11:12:37 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830920</commentid>
    <comment_count>1</comment_count>
      <attachid>449175</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-14 08:29:42 -0800</bug_when>
    <thetext>Created attachment 449175
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830941</commentid>
    <comment_count>2</comment_count>
      <attachid>449179</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-14 10:00:51 -0800</bug_when>
    <thetext>Created attachment 449179
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830985</commentid>
    <comment_count>3</comment_count>
      <attachid>449179</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-14 11:37:29 -0800</bug_when>
    <thetext>Comment on attachment 449179
patch

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

Some comments for now.  Will continue reviewing on new patch.

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:231
&gt; +                if (shouldSign) {

`constexpr (shouldSign)`?

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:269
&gt; +            if (shouldSign)

constexpr (shouldSign)

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:276
&gt; +            if (shouldSign)

Ditto.

&gt; Source/WTF/wtf/Bitmap.h:398
&gt; +                if constexpr (std::is_same_v&lt;bool, decltype(func(base + j))&gt;) {

I suggest moving JSC&apos;s IterationStatus to WTF, and checking if this returns that instead of a bool.  That way, we can check for Continue or Done instead of true / false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831003</commentid>
    <comment_count>4</comment_count>
      <attachid>449198</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-14 12:14:45 -0800</bug_when>
    <thetext>Created attachment 449198
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831006</commentid>
    <comment_count>5</comment_count>
      <attachid>449201</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-14 12:18:43 -0800</bug_when>
    <thetext>Created attachment 449201
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831015</commentid>
    <comment_count>6</comment_count>
      <attachid>449206</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-14 12:27:21 -0800</bug_when>
    <thetext>Created attachment 449206
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831080</commentid>
    <comment_count>7</comment_count>
      <attachid>449179</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-14 14:21:15 -0800</bug_when>
    <thetext>Comment on attachment 449179
patch

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

Posting my comments so far while I think about this patch some more.

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:211
&gt; +        ARM64EHash(void*)

Let&apos;s remove the diversifier arg altogether.  This reduces to ARM64EHash() = default;

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:228
&gt;          ALWAYS_INLINE uint32_t update(uint32_t instruction, uint32_t index, void* diversifier)

Let&apos;s remove the diversifier arg altogether.

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:234
&gt; +                    setUpdatedHash(0, 0, diversifier);

Let&apos;s remove the unused diversifier arg.

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:239
&gt;              uint32_t currentHash = this-&gt;currentHash(index, diversifier);

Let&apos;s not pass a diversifier anymore since we don&apos;t need it.

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:267
&gt; +        ALWAYS_INLINE uint32_t currentHash(uint32_t index, void*)

Let&apos;s remove the 2nd arg (the diversifier) altogether since it is completely unused.

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:274
&gt; +        ALWAYS_INLINE void setUpdatedHash(uint32_t value, uint32_t index, void*)

Let&apos;s remove the unused diversifier arg altogether.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:40
&gt; +    WriteToJITRegionScope()

ALWAYS_INLINE

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:45
&gt; +    ~WriteToJITRegionScope()

ALWAYS_INLINE

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:51
&gt; +struct ValidateAtomicityScope {

How about call this `ValidateHasEnteredLockedRegion` or just `ValidateHasEntered` instead.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:56
&gt; +        uint32_t validateAtomicity = m_metadata-&gt;assertNotReentrant.exchange(1, std::memory_order_seq_cst);
&gt; +        RELEASE_ASSERT(!validateAtomicity);

Let&apos;s rename `assertNotReentrant` to `hasEnteredLockedRegion`, or just `hasEntered` if you prefer it shorter.
Let&apos;s rename &apos;validateAtomicity` to `previouslyHasEnteredLockedRegion`.

Instead of using a passed in metadata, can we fetch/compute this metadata pointer from the jscConfig instead.  That will guarantee the integrity of the metadata pointer.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:62
&gt; +        uint32_t validateAtomicity = m_metadata-&gt;assertNotReentrant.exchange(0, std::memory_order_seq_cst);
&gt; +        RELEASE_ASSERT(validateAtomicity == 1);

Ditto.  The RELEASE_ASSERT can not become `RELEASE_ASSERT(previouslyHasEnteredLockedRegion)`.

Same: instead of using a cached metadata pointer, can we fetch/compute this metadata pointer from the jscConfig instead.  That will guarantee the integrity of the metadata pointer.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:87
&gt; +static void initializePage(const WriteToJITRegionScope&amp;, SecureARM64EHashPins::Page* page)
&gt; +{
&gt; +    new (page) SecureARM64EHashPins::Page;
&gt; +    for (unsigned i = 0; i &lt; SecureARM64EHashPins::numEntriesPerPage; ++i) {
&gt; +        auto&amp; entry = page-&gt;entry(i);
&gt; +        entry.pin = 0;
&gt; +        entry.key = 0;
&gt; +    }
&gt; +}

You could have moved this into the SecureARM64EHashPins::Page constructor.  This is more C++ idiomatic then using an external initializer.  And instead of a for loop, you have the SecureARM64EHashPins::Page constructor just do a memset over that regions (maybe faster?).

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:91
&gt; +    RELEASE_ASSERT(!m_memory);

Let&apos;s change this to: RELEASE_ASSERT(!g_jscConfig.arm64eHashPins.m_memory);

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:93
&gt; +    m_memory = bitwise_cast&lt;char*&gt;(allocateInExecutableMemory(sizeof(Metadata) + Page::allocationSize())) + sizeof(Metadata);

Do we need a compilerFence() after this to make sure it doesn&apos;t get moved inside the writeScope?

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:99
&gt; +        initializePage(writeScope, firstPage());

If you moved the initializePage() code into the SecureARM64EHashPins::Page constructor, you can change this to:
    new (firstPage()) SecureARM64EHashPins::Page(writeScope);

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:107
&gt; +    auto* metadata = this-&gt;metadata();

Remove this.  See below for details.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:114
&gt; +    size_t newEntry;

nit: should call this newEntryIndex to be consistent with terminology above: preexistingEntryIndex vs preexistingEntry.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:118
&gt; +        size_t baseIndex = 0;

Remove this.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:121
&gt; +            size_t bit = page.findClearBit();

nit: /findClearBit/findFirstEmpty/ and /bit/index/

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:124
&gt; +                newEntry = baseIndex + bit;

newEntry = Page::globalIndex(index);

See comment in SecureARM64EHashPins::findEntry below.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:129
&gt; +            baseIndex += numEntriesPerPage;

Remove this.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:139
&gt; +                ValidateAtomicityScope validateAtomicity(metadata);

No longer need to pass metadata to the scope.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:157
&gt; +        ValidateAtomicityScope validateAtomicity(metadata);

No longer need to pass metadata to the scope.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:159
&gt; +        RELEASE_ASSERT(isJITPC(metadata));

Don&apos;t need this.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:161
&gt; +        pin = metadata-&gt;nextPin.exchangeAdd(1, std::memory_order_seq_cst);

Let&apos;s make the metadata() method a static method that computes the metadata pointer from jscConfig instead of the `this` pointer.  You can just &quot;fetch&quot; metadata here (instead of up above):
     pin = metadata().nextPin.exchangeAdd(...

The metadata should be a singleton, and using a static method expresses that idiom.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:164
&gt; +        newEntryPage-&gt;setIsInUse(newEntry);

Make sure to use the page local index here.  Maybe can have a Page::localIndex() that does the inverse mapping of Page::globalndex().

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:169
&gt; +            newEntryPage-&gt;entry(newEntry) = *preexistingEntry;

Make sure to use the page local index here.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:52
&gt; +        static_assert(!(mask &amp; numEntriesPerPage));

I think we can make a strong assert here:

1. Add this (based on existing code) to MathExtras.h:

template&lt;typename IntType, typename = std::enable_if_t&lt;std::is_integral&lt;IntType&gt;::value&gt;&gt;&gt;
inline bool isPowerOf2(IntType v)
{
    return hasOneBitSet(v);
}

2. use isPowerOf2 in your assert.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:57
&gt; +            return entries[index &amp; mask];

I suggest adding a baseIndex field to Page.  With that you can:
1. get rid of the use of mask everywhere in Page&apos;s code.
2. SecureARM64EHashPins::forEachEntry() can now with tracking baseIndex and adding it to index only to be masked back out.
3. SecureARM64EHashPins::findEntry() will just set `result.index = page.baseIndex + index;`

This should speed up findEntry at the cost of a bit more memory usage.  If you want to avoid the incremental memory usage, you can convert the next field into a 32-bit nextOffset.  The next page can be computed as:
     bitwise_cast&lt;uint32_t*&gt;(this) + nextOffset.

That will give you 32-bits for the baseIndex.  If you like, you can also store a right shifted baseIndex such that SecureARM64EHashPins::findEntry() will just set:
    result.index = (page.baseIndex &lt;&lt; baseIndexShift) + index;

That will give more use a much higher 38-bit index range.  I think 32-bit should be plenty already.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:62
&gt; +            isInUseMap.set(index &amp; mask);

Remove the `&amp; mask`.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:67
&gt; +            isInUseMap.set(index &amp; mask, false);

Remove the `&amp; mask`.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:72
&gt; +            return isInUseMap.get(index &amp; mask);

Remove the `&amp; mask`.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:75
&gt; +        size_t findClearBit()

nit: Let&apos;s call this findFirstEmpty.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:81
&gt; +        void forEachSetBit(Function function)

nit: Let&apos;s call this forEachEntry.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:95
&gt; +        Atomic&lt;uint32_t&gt; assertNotReentrant { 0 };

Let&apos;s call this `hasEnteredLockedRegion`.  `assertNotReentrant` is a verb and doesn&apos;t quite convey what this field means.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:110
&gt; +    inline Metadata* metadata() { return bitwise_cast&lt;Metadata*&gt;(bitwise_cast&lt;char*&gt;(m_memory) - sizeof(Metadata)); }

nit: could have expressed this as: bitwise_cast&lt;MetaData*&gt;(m_memory) - 1;

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPinsInlines.h:63
&gt; +        page.forEachSetBit([&amp;] (size_t bitIndex) {

Let&apos;s change this to: page.forEachEntry([&amp;] (size_t index) {

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPinsInlines.h:64
&gt; +            size_t index = baseIndex + bitIndex;

remove this.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPinsInlines.h:70
&gt; +        baseIndex += numEntriesPerPage;

remove this.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPinsInlines.h:91
&gt; +            result.index = index;

Change this to:
    result.index = Page::globalndex(index);
where:
    size_t Page::globalndex(size_t index) { return this-&gt;baseIndex &lt;&lt; baseIndexShift + index; }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831088</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-14 14:31:59 -0800</bug_when>
    <thetext>&gt;&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:57
&gt;&gt; +            return entries[index &amp; mask];
&gt;
&gt;I suggest adding a baseIndex field to Page.  With that you can:
&gt;1. get rid of the use of mask everywhere in Page&apos;s code.
&gt;2. SecureARM64EHashPins::forEachEntry() can now with tracking baseIndex and adding it to index only to be masked back out.

I meant to say &quot;can now do away with tracking baseIndex ...&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831135</commentid>
    <comment_count>9</comment_count>
      <attachid>449236</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-14 17:45:54 -0800</bug_when>
    <thetext>Created attachment 449236
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831143</commentid>
    <comment_count>10</comment_count>
      <attachid>449179</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-14 18:59:58 -0800</bug_when>
    <thetext>Comment on attachment 449179
patch

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

&gt;&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:51
&gt;&gt; +struct ValidateAtomicityScope {
&gt; 
&gt; How about call this `ValidateHasEnteredLockedRegion` or just `ValidateHasEntered` instead.

This isn&apos;t quite right. I&apos;m going with &quot;ValidateNonReentrancyScope&quot; since there are multiple per locked region.

&gt;&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:57
&gt;&gt; +            return entries[index &amp; mask];
&gt; 
&gt; I suggest adding a baseIndex field to Page.  With that you can:
&gt; 1. get rid of the use of mask everywhere in Page&apos;s code.
&gt; 2. SecureARM64EHashPins::forEachEntry() can now with tracking baseIndex and adding it to index only to be masked back out.
&gt; 3. SecureARM64EHashPins::findEntry() will just set `result.index = page.baseIndex + index;`
&gt; 
&gt; This should speed up findEntry at the cost of a bit more memory usage.  If you want to avoid the incremental memory usage, you can convert the next field into a 32-bit nextOffset.  The next page can be computed as:
&gt;      bitwise_cast&lt;uint32_t*&gt;(this) + nextOffset.
&gt; 
&gt; That will give you 32-bits for the baseIndex.  If you like, you can also store a right shifted baseIndex such that SecureARM64EHashPins::findEntry() will just set:
&gt;     result.index = (page.baseIndex &lt;&lt; baseIndexShift) + index;
&gt; 
&gt; That will give more use a much higher 38-bit index range.  I think 32-bit should be plenty already.

Spoke with Mark, not doing this. Instead we&apos;ll just add a fastEntry function we use inside forEachEntry

&gt;&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:81
&gt;&gt; +        void forEachSetBit(Function function)
&gt; 
&gt; nit: Let&apos;s call this forEachEntry.

It&apos;s vending a bit, forEachSetBit makes more sense as a name IMO</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831297</commentid>
    <comment_count>11</comment_count>
      <attachid>449236</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-16 07:51:40 -0800</bug_when>
    <thetext>Comment on attachment 449236
patch

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

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:207
&gt; +    template &lt;bool shouldSign&gt;

Perfect place for our “named enum instead of boolean” technique. ARM64Hash&lt;true&gt; is obscure where ARM64Hash&lt;Sign&gt; and ARM64Hash&lt;DoNotSign&gt; would be clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831312</commentid>
    <comment_count>12</comment_count>
      <attachid>449236</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-16 11:26:08 -0800</bug_when>
    <thetext>Comment on attachment 449236
patch

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

&gt;&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:207
&gt;&gt; +    template &lt;bool shouldSign&gt;
&gt; 
&gt; Perfect place for our “named enum instead of boolean” technique. ARM64Hash&lt;true&gt; is obscure where ARM64Hash&lt;Sign&gt; and ARM64Hash&lt;DoNotSign&gt; would be clear.

Good point. I can fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831848</commentid>
    <comment_count>13</comment_count>
      <attachid>449236</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-18 15:01:55 -0800</bug_when>
    <thetext>Comment on attachment 449236
patch

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

r=me with comments.

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:211
&gt; +        ARM64EHash()

nit: you can just express this is as `ARM64EHash() = default;`

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:76
&gt; +    return memory;

Let&apos;s return the tagged memory instead, and untag it just before use.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:79
&gt; +SecureARM64EHashPins::Page::Page()

Let&apos;s make this ALWAYS_INLINE.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:88
&gt; +static void initializePage(const WriteToJITRegionScope&amp;, SecureARM64EHashPins::Page* page)

Make ALWAYS_INLINE.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:116
&gt; +bool SecureARM64EHashPins::allocatePinForCurrentThreadImpl(const AbstractLocker&amp;)

nit: maybe make the hashPinsLock a static field and make this method WTF_GUARDED_BY_LOCK by the static lock?

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:141
&gt; +    auto findResult = findEntry();

Let&apos;s rename findEntry() to findFirstEntry().  It&apos;ll document better what we&apos;re actually aiming to do here.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:195
&gt; +            initializePage(writeScope, nextPage);

Let&apos;s init nextPage by untagging the return value of allocateInExecutableMemory() here just before we use it.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:234
&gt; +    // like data structure. The in use pin (top of the stack) will always be at the lowest
&gt; +    // page and lowest index in the bit vector. So when we deallocate the current top of the

&quot;the lowest page and lowest index in the bit vector&quot; reads like it&apos;s always in entry 0.  How about adding a qualifier: &quot;the lowest page and lowest index in the bit vector for that thread key.&quot;?

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:238
&gt; +    // Addition also maintains this invariant by always placing the newest entry for

/Addition/Allocation/

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:39
&gt; +    JS_EXPORT_PRIVATE uint64_t pinForCurrentThread();

This `JS_EXPORT_PRIVATE` is deceptive since this is an ALWAYS_INLINE function.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:63
&gt; +        inline Entry&amp; fastEntryUnchecked(size_t index)

ALWAYS_INLINE.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:69
&gt; +        void setIsInUse(size_t index)

ALWAYS_INLINE.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:74
&gt; +        void clearIsInUse(size_t index)

ALWAYS_INLINE.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:79
&gt; +        bool isInUse(size_t index)

ALWAYS_INLINE.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:90
&gt; +        void forEachSetBit(Function function)

ALWAYS_INLINE?

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.h:105
&gt; +        Atomic&lt;uint64_t&gt; nextPin { 1 };
&gt; +        Atomic&lt;uint32_t&gt; assertNotReentrant { 0 };

Can you static_assert that nextPin comes before assertNotReentrant?  I think part of our algorithm relies on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831851</commentid>
    <comment_count>14</comment_count>
      <attachid>449236</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-18 15:23:47 -0800</bug_when>
    <thetext>Comment on attachment 449236
patch

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

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:154
&gt; +        uint64_t nextPin = metadata-&gt;nextPin.exchangeAdd(1, std::memory_order_seq_cst);
&gt; +        RELEASE_ASSERT(nextPin);

I also suggest that we PACGA nextPin with &amp;metadata and store the result in the unused 32-bit in Metadata.  We should recompute the PACGA result here and validate it against the copy stored in Metadata before using nextPin.  After this, we compute the PACGA result for the next nextPin and store that in the Metadata.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832089</commentid>
    <comment_count>15</comment_count>
      <attachid>449496</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-19 10:56:26 -0800</bug_when>
    <thetext>Created attachment 449496
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832104</commentid>
    <comment_count>16</comment_count>
      <attachid>449500</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-19 11:23:47 -0800</bug_when>
    <thetext>Created attachment 449500
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832239</commentid>
    <comment_count>17</comment_count>
      <attachid>449500</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-19 14:42:29 -0800</bug_when>
    <thetext>Comment on attachment 449500
patch for landing

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

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        * CMakeLists.txt:

Your ChangeLog file list need to be updated.  It&apos;s missing files.

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:225
&gt; +        ALWAYS_INLINE void prepareForEmittingInstructions()

nit: maybe it&apos;d be better to call this something like `allocatePinForCurrentThreadAndInitializeHash` to reflect that it&apos;s the complement of `deallocatePinForCurrentThread`.  We certainly use it that way.

&gt; Source/JavaScriptCore/assembler/SecureARM64EHashPins.cpp:212
&gt; +    auto clear = [&amp;] (Entry&amp; entry) {

/[&amp;]/[]/.  No need to capture anything here.

&gt; Source/WTF/ChangeLog:9
&gt; +        * wtf/Bitmap.h:
&gt; +        (WTF::WordType&gt;::forEachSetBit const):

Your ChangeLog file list need to be updated.  It&apos;s missing files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832244</commentid>
    <comment_count>18</comment_count>
      <attachid>449500</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-19 15:00:57 -0800</bug_when>
    <thetext>Comment on attachment 449500
patch for landing

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

&gt; Source/WTF/wtf/Bitmap.h:79
&gt;      void forEachSetBit(const Func&amp;) const;

Should this be ALWAYS_INLINE?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832254</commentid>
    <comment_count>19</comment_count>
      <attachid>449523</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-01-19 15:18:00 -0800</bug_when>
    <thetext>Created attachment 449523
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832301</commentid>
    <comment_count>20</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-19 17:40:41 -0800</bug_when>
    <thetext>Committed r288261 (246205@main): &lt;https://commits.webkit.org/246205@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 449523.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832302</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-19 17:41:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/87801650&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449175</attachid>
            <date>2022-01-14 08:29:42 -0800</date>
            <delta_ts>2022-01-14 10:00:51 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>33675</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MDE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDIyLTAxLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBBUk02NEVIYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNo
OjpBUk02NEVIYXNoKToKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6fkFSTTY0RUhhc2gpOgor
ICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpkZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCk6
CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAgICAgIChKU0M6OkFSTTY0
RUhhc2g6OnBpbik6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OmN1cnJlbnRIYXNoKToKKyAg
ICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6c2V0VXBkYXRlZEhhc2gpOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXI6OmFybTY0ZUhhc2gpOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpi
aXRzRm9yRGl2ZXJzaWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29k
ZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFsbG9jYXRlKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V3Jp
dGVUb0pJVFJlZ2lvblNjb3BlOjpXcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpXcml0ZVRvSklUUmVnaW9uU2NvcGU6On5Xcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAg
ICAoSlNDOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlKToK
KyAgICAgICAgKEpTQzo6VmFsaWRhdGVBdG9taWNpdHlTY29wZTo6flZhbGlkYXRlQXRvbWljaXR5
U2NvcGUpOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUluRXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgIChKU0M6OmluaXRpYWxpemVQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmluaXRpYWxpemVBdFN0YXJ0dXApOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVI
YXNoUGluczo6YWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2Vj
dXJlQVJNNjRFSGFzaFBpbnM6OmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjptZXRhZGF0YSk6CisgICAgICAgIChKU0M6OlNlY3Vy
ZUFSTTY0RUhhc2hQaW5zOjpmaXJzdFBhZ2UpOgorICAgICAgICAqIGFzc2VtYmxlci9TZWN1cmVB
Uk02NEVIYXNoUGluc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0
RUhhc2hQaW5zOjprZXlGb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJN
NjRFSGFzaFBpbnM6OmZvckVhY2hQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmZvckVhY2hFbnRyeSk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5z
OjpmaW5kRW50cnkpOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGluczo6cGluRm9y
Q3VycmVudFRocmVhZCk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0NDb25m
aWcuaDoKKwogMjAyMi0wMS0xMyAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW1JJU0NWNjRdIHJpc2N2NjQgYmFja2VuZCBzaG91bGQgbG93ZXIgb2ZmbGlu
ZWFzbSBpbnN0cnVjdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBhc3NlbWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCiAg
ICAgYXNzZW1ibGVyL1JJU0NWNjRSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxlci9SZWdpc3Rlcklu
Zm8uaAorICAgIGFzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCiAgICAgYXNzZW1ibGVy
L1g4NkFzc2VtYmxlci5oCiAgICAgYXNzZW1ibGVyL1g4NlJlZ2lzdGVycy5oCiAgICAgYXNzZW1i
bGVyL1g4Nl82NFJlZ2lzdGVycy5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgYXNzZW1ibGVyL1BlcmZMb2cuY3BwCiBhc3Nl
bWJsZXIvUHJpbnRlci5jcHAKIGFzc2VtYmxlci9Qcm9iZUNvbnRleHQuY3BwCiBhc3NlbWJsZXIv
UHJvYmVTdGFjay5jcHAKK2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5jcHAKIAogYjMv
YWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwCiBiMy9h
aXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtODk1LDYgKzg5NSw4IEBACiAJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURC
QSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDNTU1NjYyMjRD
MkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzU1NTY1MjI0QzJBRTcwMDk5RjVD
QyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmggKi87IH07CiAJCTUyQzk1MkI3MTlBMjg5
ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmls
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1
MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0FFQzc0Mjc5MEI4RjYw
MEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyQ0FFQzc2Mjc5MEI5MDEwMEREQkFBRiAvKiBT
ZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0FFQzcyMjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02
NEVIYXNoUGluc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4QTUgLyogRm91bmRhdGlvbi5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJ
CTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4
MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk1MkNE
MEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVz
dGRmZy5jcHAgKi87IH07CkBAIC0zNzg5LDYgKzM3OTEsOSBAQAogCQk1MkM1NTU2NTIyNEMyQUU3
MDA5OUY1Q0MgLyogREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHVmFsdWVSZXBSZWR1Y3Rp
b25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkM5NTJCNjE5QTI4OTg1
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVQcm9maWxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkM5NTJCODE5QTI4QTFDMDA2OUIzODYg
LyogVHlwZVByb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVQcm9maWxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQ0FFQzcyMjc5MEI4RjYwMEREQkFBRiAv
KiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJlQVJN
NjRFSGFzaFBpbnNJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQ0FF
QzczMjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGlucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTZWN1cmVBUk02NEVIYXNoUGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUyQ0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGlu
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZWN1cmVBUk02NEVIYXNoUGlucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MkNEMEY2NDIyNDJGNTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1h
Y2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEEx
OEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
dGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRmZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlDODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBmb28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC04ODAyLDYgKzg4MDcsOSBAQAogCQkJCUZFMTBBQUU5MUY0NEQ1MTAwMDlERURD
NSAvKiBQcm9iZVN0YWNrLmNwcCAqLywKIAkJCQlGRTEwQUFFQTFGNDRENTEyMDA5REVEQzUgLyog
UHJvYmVTdGFjay5oICovLAogCQkJCTk2ODhDQjE0MEVEMTJCNEUwMDFENjQ5OSAvKiBSZWdpc3Rl
ckluZm8uaCAqLywKKwkJCQk1MkNBRUM3MzI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRF
SGFzaFBpbnMuY3BwICovLAorCQkJCTUyQ0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVB
Uk02NEVIYXNoUGlucy5oICovLAorCQkJCTUyQ0FFQzcyMjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1
cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCAqLywKIAkJCQlGRTUzM0NBMDFGMjE3QzMxMDAxNkEx
RkUgLyogdGVzdG1hc20uY3BwICovLAogCQkJCTk2ODhDQjE0MEVEMTJCNEUwMDFENjQ5MiAvKiBY
ODZfNjRSZWdpc3RlcnMuaCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OUYgLyogWDg2
QXNzZW1ibGVyLmggKi8sCkBAIC0xMDAxOSw2ICsxMDAyNyw3IEBACiAJCQkJMEZCRTBGNzMxNkMx
REIwNTAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3RDg5Q0Y2MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QTE0RUY5MEE5MDBDNzI1MzIgLyogREZH
Q1NFUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyQ0FFQzc1Mjc5MEI4RkIwMEREQkFBRiAv
KiBTZWN1cmVBUk02NEVIYXNoUGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkM3NzMxNkUx
MkY3NDAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0JGQTVE
MDIxRTg1M0ExMDA5QzBFQkEgLyogREZHRGVzaXJlZEdsb2JhbFByb3BlcnR5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjhGMkI5QTE3MkYwNTAxMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZp
ZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTExMTc5LDYgKzExMTg4LDcgQEAKIAkJCQlFMzNCQkUw
OTI1QkZBMDQxMDA1MzY5MEYgLyogV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEyNUJGQTczQjAwRUZFMzAzIC8qIFdhc21TdHJl
YW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkNBRUM3NjI3OTBCOTAxMDBEREJBQUYg
LyogU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVD
MzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEQwMUJGNTI2REVFRjUzMDBDQUUwRDAgLyogV2FzbVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTI1MEQyRDIxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1
ZmZlci5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAK
ICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSklUQ29tcGlsYXRp
b25FZmZvcnQuaCIKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCIKICNp
bmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgpAQCAtMjAzLDE1ICsyMDQsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsK
IAogI2lmIENQVShBUk02NEUpCisgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkU2lnbj4KICAgICBj
bGFzcyBBUk02NEVIYXNoIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQVJNNjRFSGFz
aCk7CiAgICAgcHVibGljOgotICAgICAgICBBUk02NEVIYXNoKHZvaWQqIGRpdmVyc2lmaWVyKQor
ICAgICAgICBBUk02NEVIYXNoKHZvaWQqKQogICAgICAgICB7Ci0gICAgICAgICAgICBzZXRVcGRh
dGVkSGFzaCgwLCAwLCBkaXZlcnNpZmllcik7CisgICAgICAgIH0KKworICAgICAgICB+QVJNNjRF
SGFzaCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhy
ZWFkKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50
VGhyZWFkKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1faW5pdGlhbGl6ZWRQaW4pIHsK
KyAgICAgICAgICAgICAgICBnX2pzY0NvbmZpZy5hcm02NGVIYXNoUGlucy5kZWFsbG9jYXRlUGlu
Rm9yQ3VycmVudFRocmVhZCgpOworICAgICAgICAgICAgICAgIG1faW5pdGlhbGl6ZWRQaW4gPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEFMV0FZU19JTkxJTkUg
dWludDMyX3QgdXBkYXRlKHVpbnQzMl90IGluc3RydWN0aW9uLCB1aW50MzJfdCBpbmRleCwgdm9p
ZCogZGl2ZXJzaWZpZXIpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShpbmRl
eCA9PSAwKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTaWduKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1faW5pdGlhbGl6ZWRQaW4gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBn
X2pzY0NvbmZpZy5hcm02NGVIYXNoUGlucy5hbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsK
KyAgICAgICAgICAgICAgICAgICAgc2V0VXBkYXRlZEhhc2goMCwgMCwgZGl2ZXJzaWZpZXIpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2hhc2ggPSAwOwor
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50SGFzaCA9IHRoaXMt
PmN1cnJlbnRIYXNoKGluZGV4LCBkaXZlcnNpZmllcik7CiAgICAgICAgICAgICB1aW50NjRfdCBu
ZXh0SW5kZXggPSBpbmRleCArIDE7CiAgICAgICAgICAgICB1aW50MzJfdCBvdXRwdXQgPSBuZXh0
VmFsdWUoaW5zdHJ1Y3Rpb24sIG5leHRJbmRleCwgY3VycmVudEhhc2gpOwpAQCAtMjM1LDI5ICsy
NTksMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gKGEgPj4gMzkpIF4g
KGIgPj4gMjMpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgdWlu
dDMyX3QgYml0c0ZvckRpdmVyc2lmaWVyKHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBzdGF0
aWMgQUxXQVlTX0lOTElORSB1aW50MzJfdCBwaW4oKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZGl2ZXJzaWZpZXIpOworICAgICAgICAgICAg
cmV0dXJuIGdfanNjQ29uZmlnLmFybTY0ZUhhc2hQaW5zLnBpbkZvckN1cnJlbnRUaHJlYWQoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgY3VycmVudEhhc2go
dWludDMyX3QgaW5kZXgsIHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBTFdBWVNfSU5MSU5F
IHVpbnQzMl90IGN1cnJlbnRIYXNoKHVpbnQzMl90IGluZGV4LCB2b2lkKikKICAgICAgICAgewot
ICAgICAgICAgICAgYm9vbCBoYXNoRmllbGRJc1RhZ2dlZCA9IGluZGV4ID09IDA7Ci0gICAgICAg
ICAgICBpZiAoaGFzaEZpZWxkSXNUYWdnZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVudGFn
SW50KG1faGFzaCwgbWFrZURpdmVyc2lmaWVyKGluaXRpYWxpemF0aW9uTmFtZXNwYWNlLCBpbmRl
eCwgYml0c0ZvckRpdmVyc2lmaWVyKGRpdmVyc2lmaWVyKSkpOworICAgICAgICAgICAgaWYgKHNo
b3VsZFNpZ24pCisgICAgICAgICAgICAgICAgcmV0dXJuIHVudGFnSW50KG1faGFzaCwgbWFrZURp
dmVyc2lmaWVyKGluaXRpYWxpemF0aW9uTmFtZXNwYWNlLCBpbmRleCwgcGluKCkpKTsKICAgICAg
ICAgICAgIHJldHVybiBtX2hhc2g7CiAgICAgICAgIH0KIAotICAgICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0VXBkYXRlZEhhc2godWludDMyX3QgdmFsdWUsIHVpbnQzMl90IGluZGV4LCB2b2lk
KiBkaXZlcnNpZmllcikKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFVwZGF0ZWRIYXNo
KHVpbnQzMl90IHZhbHVlLCB1aW50MzJfdCBpbmRleCwgdm9pZCopCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGJvb2wgc2hvdWxkVGFnSGFzaEZpZWxkID0gaW5kZXggPT0gMDsKLSAgICAgICAgICAg
IGlmIChzaG91bGRUYWdIYXNoRmllbGQpCi0gICAgICAgICAgICAgICAgbV9oYXNoID0gdGFnSW50
KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSksIG1ha2VEaXZlcnNpZmllcihpbml0aWFsaXph
dGlvbk5hbWVzcGFjZSwgaW5kZXgsIGJpdHNGb3JEaXZlcnNpZmllcihkaXZlcnNpZmllcikpKTsK
KyAgICAgICAgICAgIGlmIChzaG91bGRTaWduKQorICAgICAgICAgICAgICAgIG1faGFzaCA9IHRh
Z0ludChzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpLCBtYWtlRGl2ZXJzaWZpZXIoaW5pdGlh
bGl6YXRpb25OYW1lc3BhY2UsIGluZGV4LCBwaW4oKSkpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG1faGFzaCA9IHZhbHVlOworICAgICAgICAgICAgICAgIG1faGFzaCA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICB1aW50NjRf
dCBtX2hhc2g7CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZFBpbiB7IGZhbHNlIH07CiAgICAg
fTsKICNlbmRpZiAvLyBDUFUoQVJNNjRFKQogCkBAIC00MDksNiArNDMyLDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLmJ1
ZmZlcigpOyB9CiAjZW5kaWYKIAorI2lmIENQVShBUk02NEUpCisgICAgICAgIEFSTTY0RUhhc2g8
dHJ1ZT4mIGFybTY0ZUhhc2goKSB7IHJldHVybiBtX2hhc2g7IH0KKyNlbmRpZgorCiAgICAgcHJv
dGVjdGVkOgogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+CiAgICAgICAg
IHZvaWQgcHV0SW50ZWdyYWwoSW50ZWdyYWxUeXBlIHZhbHVlKQpAQCAtNDU5LDcgKzQ4Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBc3NlbWJsZXJEYXRhIG1fc3RvcmFnZTsKICAgICAg
ICAgdW5zaWduZWQgbV9pbmRleDsKICNpZiBDUFUoQVJNNjRFKQotICAgICAgICBBUk02NEVIYXNo
IG1faGFzaDsKKyAgICAgICAgQVJNNjRFSGFzaDx0cnVlPiBtX2hhc2g7CiAgICAgICAgIEFzc2Vt
YmxlckRhdGEgbV9oYXNoZXM7CiAjZW5kaWYKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyODgwMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFu
ZExpbmtDb2RlKAogICAgIHVpbnQ4X3QqIGluRGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4o
bV9hc3NlbWJsZXJTdG9yYWdlLmJ1ZmZlcigpKTsKICNpZiBDUFUoQVJNNjRFKQogICAgIHZvaWQq
IGJ1ZmZlclB0ciA9ICZtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5idWZmZXIoKTsKLSAgICBB
Uk02NEVIYXNoIHZlcmlmeVVuY29tcGFjdGVkSGFzaCB7IGJ1ZmZlclB0ciB9OworICAgIEFSTTY0
RUhhc2g8ZmFsc2U+IHZlcmlmeVVuY29tcGFjdGVkSGFzaCB7IGJ1ZmZlclB0ciB9OwogICAgIG1f
YXNzZW1ibGVySGFzaGVzU3RvcmFnZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZl
cigpLnJlbGVhc2VBc3NlbWJsZXJIYXNoZXMoKTsKICAgICB1aW50MzJfdCogaW5IYXNoZXMgPSBi
aXR3aXNlX2Nhc3Q8dWludDMyX3QqPihtX2Fzc2VtYmxlckhhc2hlc1N0b3JhZ2UuYnVmZmVyKCkp
OwogI2VuZGlmCkBAIC00MzgsNiArNDM4LDEwIEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUo
TWFjcm9Bc3NlbWJsZXIKICAgICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fz
c2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIH0KIAorI2lmIENQVShBUk02NEUpCisgICAgbWFjcm9B
c3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkuYXJtNjRlSGFzaCgpLmRlYWxsb2NhdGVQaW5G
b3JDdXJyZW50VGhyZWFkKCk7CisjZW5kaWYKKwogICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4
ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZv
cnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFS
TTY0RUhhc2hQaW5zLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGlucy5oIgor
CisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkZhc3RKSVRQZXJt
aXNzaW9ucy5oIgorI2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisKK3N0cnVjdCBXcml0
ZVRvSklUUmVnaW9uU2NvcGUgeworICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSgpCisgICAgewor
ICAgICAgICB0aHJlYWRTZWxmUmVzdHJpY3RSV1hUb1JXKCk7CisgICAgfQorCisgICAgfldyaXRl
VG9KSVRSZWdpb25TY29wZSgpCisgICAgeworICAgICAgICB0aHJlYWRTZWxmUmVzdHJpY3RSV1hU
b1JYKCk7CisgICAgfQorfTsKKworc3RydWN0IFZhbGlkYXRlQXRvbWljaXR5U2NvcGUgeworICAg
IFZhbGlkYXRlQXRvbWljaXR5U2NvcGUoU2VjdXJlQVJNNjRFSGFzaFBpbnM6Ok1ldGFkYXRhKiBt
ZXRhZGF0YSkKKyAgICAgICAgOiBtX21ldGFkYXRhKG1ldGFkYXRhKQorICAgIHsKKyAgICAgICAg
dWludDMyX3QgdmFsaWRhdGVBdG9taWNpdHkgPSBtX21ldGFkYXRhLT5hc3NlcnROb3RSZWVudHJh
bnQuZXhjaGFuZ2UoMSwgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCF2YWxpZGF0ZUF0b21pY2l0eSk7CisgICAgfQorCisgICAgflZhbGlkYXRlQXRv
bWljaXR5U2NvcGUoKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdmFsaWRhdGVBdG9taWNpdHkg
PSBtX21ldGFkYXRhLT5hc3NlcnROb3RSZWVudHJhbnQuZXhjaGFuZ2UoMCwgc3RkOjptZW1vcnlf
b3JkZXJfc2VxX2NzdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZhbGlkYXRlQXRvbWljaXR5
ID09IDEpOworICAgIH0KKyAgICBTZWN1cmVBUk02NEVIYXNoUGluczo6TWV0YWRhdGEqIG1fbWV0
YWRhdGE7Cit9OworCisvLyBUaGlzIGNsYXNzIGlzIGFsbG9jYXRlZCBvbmNlIHBlciBwcm9jZXNz
LCBzbyBzdGF0aWMgbG9jayBpcyBvay4KK3N0YXRpYyBMb2NrIGhhc2hQaW5zTG9jazsKKworQUxX
QVlTX0lOTElORSBzdGF0aWMgdm9pZCogYWxsb2NhdGVJbkV4ZWN1dGFibGVNZW1vcnkoc2l6ZV90
IHNpemUpCit7CisgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoc2l6ZSwgSklUQ29tcGlsYXRpb25NdXN0
U3VjY2VlZCkubGVha1JlZigpOworICAgIFJFTEVBU0VfQVNTRVJUKGhhbmRsZSk7CisgICAgdm9p
ZCogbWVtb3J5ID0gYml0d2lzZV9jYXN0PGNoYXIqPihoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQ
dHIoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhtZW1vcnkpICYmIGlzSklUUEMoYml0
d2lzZV9jYXN0PGNoYXIqPihtZW1vcnkpICsgc2l6ZSAtIDEpKTsKKyAgICByZXR1cm4gbWVtb3J5
OworfQorCitzdGF0aWMgdm9pZCBpbml0aWFsaXplUGFnZShjb25zdCBXcml0ZVRvSklUUmVnaW9u
U2NvcGUmLCBTZWN1cmVBUk02NEVIYXNoUGluczo6UGFnZSogcGFnZSkKK3sKKyAgICBuZXcgKHBh
Z2UpIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpQYWdlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBTZWN1cmVBUk02NEVIYXNoUGluczo6bnVtRW50cmllc1BlclBhZ2U7ICsraSkgeworICAg
ICAgICBhdXRvJiBlbnRyeSA9IHBhZ2UtPmVudHJ5KGkpOworICAgICAgICBlbnRyeS5waW4gPSAw
OworICAgICAgICBlbnRyeS5rZXkgPSAwOworICAgIH0KK30KKwordm9pZCBTZWN1cmVBUk02NEVI
YXNoUGluczo6aW5pdGlhbGl6ZUF0U3RhcnR1cCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1f
bWVtb3J5KTsKKworICAgIG1fbWVtb3J5ID0gYml0d2lzZV9jYXN0PGNoYXIqPihhbGxvY2F0ZUlu
RXhlY3V0YWJsZU1lbW9yeShzaXplb2YoTWV0YWRhdGEpICsgUGFnZTo6YWxsb2NhdGlvblNpemUo
KSkpICsgc2l6ZW9mKE1ldGFkYXRhKTsKKworICAgIHsKKyAgICAgICAgV3JpdGVUb0pJVFJlZ2lv
blNjb3BlIHdyaXRlU2NvcGU7CisKKyAgICAgICAgbmV3IChtZXRhZGF0YSgpKSBNZXRhZGF0YTsg
CisgICAgICAgIGluaXRpYWxpemVQYWdlKHdyaXRlU2NvcGUsIGZpcnN0UGFnZSgpKTsKKyAgICB9
Cit9CisKK3VpbnQ2NF90IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjphbGxvY2F0ZVBpbkZvckN1cnJl
bnRUaHJlYWQoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBoYXNoUGluc0xvY2sgfTsKKworICAg
IGF1dG8qIG1ldGFkYXRhID0gdGhpcy0+bWV0YWRhdGEoKTsKKworICAgIGF1dG8gZmluZFJlc3Vs
dCA9IGZpbmRFbnRyeSgpOworICAgIEVudHJ5KiBwcmVleGlzdGluZ0VudHJ5ID0gZmluZFJlc3Vs
dC5lbnRyeTsKKyAgICBzaXplX3QgcHJlZXhpc3RpbmdFbnRyeUluZGV4ID0gZmluZFJlc3VsdC5p
bmRleDsKKyAgICBQYWdlKiBwcmVleGlzdGluZ0VudHJ5UGFnZSA9IGZpbmRSZXN1bHQucGFnZTsK
KworICAgIHNpemVfdCBuZXdFbnRyeTsKKyAgICBQYWdlKiBuZXdFbnRyeVBhZ2U7CisgICAgewor
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIHNpemVfdCBiYXNlSW5kZXggPSAw
OworICAgICAgICBQYWdlKiBsYXN0UGFnZSA9IG51bGxwdHI7CisgICAgICAgIGZvckVhY2hQYWdl
KFsmXSAoUGFnZSYgcGFnZSkgeworICAgICAgICAgICAgc2l6ZV90IGJpdCA9IHBhZ2UuZmluZENs
ZWFyQml0KCk7CisgICAgICAgICAgICBpZiAoYml0IDwgbnVtRW50cmllc1BlclBhZ2UpIHsKKyAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbmV3RW50cnkgPSBi
YXNlSW5kZXggKyBiaXQ7CisgICAgICAgICAgICAgICAgbmV3RW50cnlQYWdlID0gJnBhZ2U7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBiYXNlSW5kZXggKz0gbnVtRW50cmllc1BlclBhZ2U7CisgICAgICAgICAgICBsYXN0UGFnZSA9
ICZwYWdlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworCisgICAgICAg
IGlmIChVTkxJS0VMWSghZm91bmQpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbGFz
dFBhZ2UtPm5leHQpOworICAgICAgICAgICAgUGFnZSogbmV4dFBhZ2UgPSBiaXR3aXNlX2Nhc3Q8
UGFnZSo+KGFsbG9jYXRlSW5FeGVjdXRhYmxlTWVtb3J5KFBhZ2U6OmFsbG9jYXRpb25TaXplKCkp
KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBXcml0ZVRvSklUUmVnaW9uU2NvcGUg
d3JpdGVTY29wZTsKKyAgICAgICAgICAgICAgICBWYWxpZGF0ZUF0b21pY2l0eVNjb3BlIHZhbGlk
YXRlQXRvbWljaXR5KG1ldGFkYXRhKTsKKyAgICAgICAgICAgICAgICBpbml0aWFsaXplUGFnZSh3
cml0ZVNjb3BlLCBuZXh0UGFnZSk7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgcmVh
ZCBmcm9tIGNvbmN1cnJlbnRseS4gTWFrZSBzdXJlIGl0J3MgaW4gYSBnb29kIHN0YXRlIGZvciB0
aGF0IHRvIGhhcHBlbi4KKyAgICAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwor
ICAgICAgICAgICAgICAgIGxhc3RQYWdlLT5uZXh0ID0gbmV4dFBhZ2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBuZXdFbnRyeVBhZ2UgPSBuZXh0UGFnZTsKKyAgICAgICAgICAgIHNpemVf
dCBiaXQgPSBuZXh0UGFnZS0+ZmluZENsZWFyQml0KCk7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChiaXQgPT0gMCk7CisgICAgICAgICAgICBuZXdFbnRyeSA9IGJhc2VJbmRleCArIGJpdDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHVpbnQ2NF90IHBpbjsKKyAgICB7CisgICAgICAgIFdU
Rjo6Y29tcGlsZXJGZW5jZSgpOworCisgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0
ZVNjb3BlOworICAgICAgICBWYWxpZGF0ZUF0b21pY2l0eVNjb3BlIHZhbGlkYXRlQXRvbWljaXR5
KG1ldGFkYXRhKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0pJVFBDKG1ldGFkYXRhKSk7
CisKKyAgICAgICAgcGluID0gbWV0YWRhdGEtPm5leHRQaW4uZXhjaGFuZ2VBZGQoMSwgc3RkOjpt
ZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBpbik7CisKKyAg
ICAgICAgbmV3RW50cnlQYWdlLT5zZXRJc0luVXNlKG5ld0VudHJ5KTsKKworICAgICAgICBpZiAo
cHJlZXhpc3RpbmdFbnRyeSAmJiBwcmVleGlzdGluZ0VudHJ5SW5kZXggPCBuZXdFbnRyeSkgewor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJlZXhpc3RpbmdFbnRyeVBhZ2UtPmlzSW5Vc2Uo
cHJlZXhpc3RpbmdFbnRyeUluZGV4KSk7CisKKyAgICAgICAgICAgIG5ld0VudHJ5UGFnZS0+ZW50
cnkobmV3RW50cnkpID0gKnByZWV4aXN0aW5nRW50cnk7CisgICAgICAgICAgICBuZXdFbnRyeSA9
IHByZWV4aXN0aW5nRW50cnlJbmRleDsKKyAgICAgICAgICAgIG5ld0VudHJ5UGFnZSA9IHByZWV4
aXN0aW5nRW50cnlQYWdlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnkgPSBuZXdF
bnRyeVBhZ2UtPmVudHJ5KG5ld0VudHJ5KTsKKyAgICAgICAgZW50cnkucGluID0gcGluOworICAg
ICAgICBlbnRyeS5rZXkgPSBrZXlGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgfQorCisgICAgcmV0
dXJuIHBpbjsKK30KKwordm9pZCBTZWN1cmVBUk02NEVIYXNoUGluczo6ZGVhbGxvY2F0ZVBpbkZv
ckN1cnJlbnRUaHJlYWQoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBoYXNoUGluc0xvY2sgfTsK
KyAgICBhdXRvKiBtZXRhZGF0YSA9IHRoaXMtPm1ldGFkYXRhKCk7CisKKyAgICBhdXRvIGNsZWFy
ID0gWyZdIChFbnRyeSYgZW50cnkpIHsKKyAgICAgICAgZW50cnkucGluID0gMDsKKyAgICAgICAg
ZW50cnkua2V5ID0gMDsKKyAgICB9OworCisgICAgUGFnZSogcmVtb3ZhbFBhZ2U7CisgICAgc2l6
ZV90IHJlbW92YWxJbmRleDsKKyAgICB7CisgICAgICAgIGF1dG8gZmluZFJlc3VsdCA9IGZpbmRF
bnRyeSgpOworICAgICAgICBFbnRyeSYgZW50cnkgPSAqZmluZFJlc3VsdC5lbnRyeTsKKyAgICAg
ICAgcmVtb3ZhbEluZGV4ID0gZmluZFJlc3VsdC5pbmRleDsKKyAgICAgICAgcmVtb3ZhbFBhZ2Ug
PSBmaW5kUmVzdWx0LnBhZ2U7CisKKyAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRl
U2NvcGU7CisgICAgICAgIFZhbGlkYXRlQXRvbWljaXR5U2NvcGUgdmFsaWRhdGVBdG9taWNpdHko
bWV0YWRhdGEpOworCisgICAgICAgIGNsZWFyKGVudHJ5KTsKKyAgICAgICAgcmVtb3ZhbFBhZ2Ut
PmNsZWFySXNJblVzZShyZW1vdmFsSW5kZXgpOworICAgIH0KKworICAgIC8vIFRoaXMgaW1wbGVt
ZW50YXRpb24gYWxsb3dzIHJlY3Vyc2l2ZSB1c2VzIG9mIHRoZSBNYWNyb0Fzc2VtYmxlciwgZm9y
bWluZyBhIHN0YWNrCisgICAgLy8gbGlrZSBkYXRhIHN0cnVjdHVyZS4gVGhlIGluIHVzZSBwaW4g
KHRvcCBvZiB0aGUgc3RhY2spIHdpbGwgYWx3YXlzIGJlIGF0IHRoZSBsb3dlc3QKKyAgICAvLyBw
YWdlIGFuZCBsb3dlc3QgaW5kZXggaW4gdGhlIGJpdCB2ZWN0b3IuIFNvIHdoZW4gd2UgZGVhbGxv
Y2F0ZSB0aGUgY3VycmVudCB0b3Agb2YgdGhlCisgICAgLy8gc3RhY2ssIHdlIG5lZWQgdG8gZmlu
ZCB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgc3RhY2ssIGFuZCBlbnN1cmUgaXQncyBhdCB0aGUgbG93
ZXN0IGluZGV4LgorICAgIC8vIFNvIGlmIHRoZXJlIGFyZSBvdGhlciBlbnRyaWVzIGZvciB0aGlz
IGN1cnJlbnQgdGhyZWFkLCB3ZSBmaW5kIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdAorICAgIC8v
IHBpbiAobmV4dCB0b3Agb2Ygc3RhY2sgdmFsdWUpLCBhbmQgcmVwbGFjZSBpdCBhdCB0aGUgaW5k
ZXggd2Ugd2VyZSB1c2luZyBiZWZvcmUuCisgICAgLy8gQWRkaXRpb24gYWxzbyBtYWludGFpbnMg
dGhpcyBpbnZhcmlhbnQgYnkgYWx3YXlzIHBsYWNpbmcgdGhlIG5ld2VzdCBlbnRyeSBmb3IKKyAg
ICAvLyB0aGUgY3VycmVudCB0aHJlYWQgYXQgdGhlIGxvd2VzdCBpbmRleC4KKyAgICB7CisgICAg
ICAgIHVpbnQ2NF90IGtleSA9IGtleUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOworICAgICAgICB1aW50NjRfdCBtYXhQaW4gPSAwOworICAgICAgICBzaXpl
X3QgbWF4SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworICAgICAg
ICBQYWdlKiBtYXhQYWdlID0gbnVsbHB0cjsKKworICAgICAgICBmb3JFYWNoRW50cnkoWyZdIChQ
YWdlJiBwYWdlLCBFbnRyeSYgZW50cnksIHNpemVfdCBpbmRleCkgeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZW50cnkucGluKTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5rZXkgPT0ga2V5
ICYmIGVudHJ5LnBpbiA+IG1heFBpbikgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBtYXhQaW4gPSBlbnRyeS5waW47CisgICAgICAgICAgICAgICAgbWF4
SW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBtYXhQYWdlID0gJnBhZ2U7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKworICAgICAg
ICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlbW92YWxJbmRleCA8
IG1heEluZGV4KTsKKworICAgICAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2Nv
cGU7CisgICAgICAgICAgICBWYWxpZGF0ZUF0b21pY2l0eVNjb3BlIHZhbGlkYXRlQXRvbWljaXR5
KG1ldGFkYXRhKTsKKworICAgICAgICAgICAgcmVtb3ZhbFBhZ2UtPmVudHJ5KHJlbW92YWxJbmRl
eCkgPSBtYXhQYWdlLT5lbnRyeShtYXhJbmRleCk7CisgICAgICAgICAgICBjbGVhcihtYXhQYWdl
LT5lbnRyeShtYXhJbmRleCkpOworICAgICAgICAgICAgbWF4UGFnZS0+Y2xlYXJJc0luVXNlKG1h
eEluZGV4KTsKKyAgICAgICAgICAgIHJlbW92YWxQYWdlLT5zZXRJc0luVXNlKHJlbW92YWxJbmRl
eCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNlbmRpZiAvLyBDUFUoQVJNNjRFKSAmJiBFTkFC
TEUoSklUKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNo
UGlucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBDUFUoQVJN
NjRFKSAmJiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgU2VjdXJlQVJNNjRFSGFzaFBpbnMgeworcHVibGljOgorICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUF0U3RhcnR1cCgpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHVpbnQ2NF90IGFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGVhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB1aW50NjRfdCBwaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1FbnRyaWVzUGVyUGFnZSA9IDY0OworCisgICAg
c3RydWN0IEVudHJ5IHsKKyAgICAgICAgdWludDY0X3QgcGluOworICAgICAgICB1aW50NjRfdCBr
ZXk7CisgICAgfTsKKworICAgIHN0cnVjdCBhbGlnbmFzKGFsaWdub2YoRW50cnkpKSBQYWdlIHsK
KyAgICAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSgpIHsgcmV0dXJuIHNpemVvZihQ
YWdlKSArIG51bUVudHJpZXNQZXJQYWdlICogc2l6ZW9mKEVudHJ5KTsgfQorCisgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1hc2sgPSBudW1FbnRyaWVzUGVyUGFnZSAtIDE7CisgICAg
ICAgIHN0YXRpY19hc3NlcnQoIShtYXNrICYgbnVtRW50cmllc1BlclBhZ2UpKTsKKworICAgICAg
ICBpbmxpbmUgRW50cnkmIGVudHJ5KHNpemVfdCBpbmRleCkKKyAgICAgICAgeyAKKyAgICAgICAg
ICAgIEVudHJ5KiBlbnRyaWVzID0gYml0d2lzZV9jYXN0PEVudHJ5Kj4oYml0d2lzZV9jYXN0PGNo
YXIqPih0aGlzKSArIHNpemVvZihQYWdlKSk7CisgICAgICAgICAgICByZXR1cm4gZW50cmllc1tp
bmRleCAmIG1hc2tdOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldElzSW5V
c2Uoc2l6ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBpc0luVXNlTWFwLnNldChp
bmRleCAmIG1hc2spOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVhcklzSW5Vc2Uoc2l6
ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBpc0luVXNlTWFwLnNldChpbmRleCAm
IG1hc2ssIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNJblVzZShzaXplX3Qg
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0luVXNlTWFwLmdldChpbmRl
eCAmIG1hc2spOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGZpbmRDbGVhckJpdCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0luVXNlTWFwLmZpbmRCaXQoMCwgZmFsc2Up
OworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAg
ICAgICB2b2lkIGZvckVhY2hTZXRCaXQoRnVuY3Rpb24gZnVuY3Rpb24pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlzSW5Vc2VNYXAuZm9yRWFjaFNldEJpdChmdW5jdGlvbik7CisgICAgICAgIH0K
KworICAgICAgICBQYWdlKiBuZXh0IHsgbnVsbHB0ciB9OworICAgIHByaXZhdGU6CisgICAgICAg
IEJpdG1hcDxudW1FbnRyaWVzUGVyUGFnZT4gaXNJblVzZU1hcDsKKyAgICB9OworCisgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoUGFnZSkgJSBhbGlnbm9mKEVudHJ5KSA9PSAwKTsKKworICAgIHN0
cnVjdCBhbGlnbmFzKGFsaWdub2YoUGFnZSkpIE1ldGFkYXRhIHsKKyAgICAgICAgQXRvbWljPHVp
bnQ2NF90PiBuZXh0UGluIHsgMSB9OworICAgICAgICBBdG9taWM8dWludDMyX3Q+IGFzc2VydE5v
dFJlZW50cmFudCB7IDAgfTsKKyAgICB9OworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoTWV0
YWRhdGEpICUgYWxpZ25vZihQYWdlKSA9PSAwKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdWlu
dDY0X3Qga2V5Rm9yQ3VycmVudFRocmVhZCgpOworCisgICAgc3RydWN0IEZpbmRSZXN1bHQgewor
ICAgICAgICBFbnRyeSogZW50cnkgeyBudWxscHRyIH07CisgICAgICAgIHNpemVfdCBpbmRleCB7
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsKKyAgICAgICAgUGFnZSogcGFn
ZSB7IG51bGxwdHIgfTsKKyAgICB9OworICAgIEZpbmRSZXN1bHQgZmluZEVudHJ5KCk7CisKKyAg
ICBpbmxpbmUgTWV0YWRhdGEqIG1ldGFkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PE1ldGFk
YXRhKj4oYml0d2lzZV9jYXN0PGNoYXIqPihtX21lbW9yeSkgLSBzaXplb2YoTWV0YWRhdGEpKTsg
fQorICAgIGlubGluZSBQYWdlKiBmaXJzdFBhZ2UoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UGFn
ZSo+KG1fbWVtb3J5KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAg
IHZvaWQgZm9yRWFjaFBhZ2UoRnVuY3Rpb24pOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0aW9uPgorICAgIHZvaWQgZm9yRWFjaEVudHJ5KEZ1bmN0aW9uKTsKKworICAgIHZvaWQqIG1f
bWVtb3J5IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5l
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2Vj
dXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCisKKyNpZiBDUFUoQVJN
NjRFKSAmJiBFTkFCTEUoSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworQUxXQVlTX0lOTElORSB1
aW50NjRfdCBTZWN1cmVBUk02NEVIYXNoUGluczo6a2V5Rm9yQ3VycmVudFRocmVhZCgpCit7Cisg
ICAgdWludDY0X3QgcmVzdWx0OworICAgIGFzbSAoCisgICAgICAgICJtcnMgJXhbcmVzdWx0XSwg
VFBJRFJST19FTDAiCisgICAgICAgIDogW3Jlc3VsdF0gIj1yIiAocmVzdWx0KQorICAgICAgICA6
CisgICAgICAgIDoKKyAgICApOworICAgIHJldHVybiByZXN1bHQgKyAxOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CitBTFdBWVNfSU5MSU5FIHZvaWQgU2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmZvckVhY2hQYWdlKEZ1bmN0aW9uIGZ1bmN0aW9uKQoreworICAgIGZvciAoUGFnZSog
cGFnZSA9IGZpcnN0UGFnZSgpOyBwYWdlOyBwYWdlID0gcGFnZS0+bmV4dCkgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChpc0pJVFBDKHBhZ2UpKTsKKyAgICAgICAgYm9vbCBzaG91bGRDb250aW51
ZSA9IGZ1bmN0aW9uKCpwYWdlKTsKKyAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4K
K0FMV0FZU19JTkxJTkUgdm9pZCBTZWN1cmVBUk02NEVIYXNoUGluczo6Zm9yRWFjaEVudHJ5KEZ1
bmN0aW9uIGZ1bmN0aW9uKQoreworICAgIHNpemVfdCBiYXNlSW5kZXggPSAwOworICAgIGZvckVh
Y2hQYWdlKFsmXSAoUGFnZSYgcGFnZSkgeworICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0g
dHJ1ZTsKKyAgICAgICAgcGFnZS5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IGJpdEluZGV4KSB7
CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBiYXNlSW5kZXggKyBiaXRJbmRleDsKKyAgICAg
ICAgICAgIEVudHJ5JiBlbnRyeSA9IHBhZ2UuZW50cnkoaW5kZXgpOworICAgICAgICAgICAgQVNT
RVJUKGlzSklUUEMoJmVudHJ5KSk7CisgICAgICAgICAgICBzaG91bGRDb250aW51ZSAmPSBmdW5j
dGlvbihwYWdlLCBlbnRyeSwgaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIHNob3VsZENvbnRp
bnVlOworICAgICAgICB9KTsKKyAgICAgICAgYmFzZUluZGV4ICs9IG51bUVudHJpZXNQZXJQYWdl
OworICAgICAgICByZXR1cm4gc2hvdWxkQ29udGludWU7CisgICAgfSk7Cit9CisKK0FMV0FZU19J
TkxJTkUgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OkZpbmRSZXN1bHQgU2VjdXJlQVJNNjRFSGFzaFBp
bnM6OmZpbmRFbnRyeSgpCit7CisgICAgdWludDY0X3Qga2V5ID0ga2V5Rm9yQ3VycmVudFRocmVh
ZCgpOworICAgIC8vIFdlIGNhbiBjYWxsIHRoaXMgY29uY3VycmVudGx5IHRvIHRoZSBiaXQgdmVj
dG9yIGJlaW5nIG1vZGlmaWVkCisgICAgLy8gc2luY2Ugd2UgZWl0aGVyIGNhbGwgdGhpcyB3aGVu
IHdlJ3JlIGxvY2tlZCwgb3Igd2UgY2FsbCBpdCB3aGVuCisgICAgLy8gd2Uga25vdyB0aGUgZW50
cnkgYWxyZWFkeSBleGlzdHMuIFdoZW4gdGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzLAorICAgIC8v
IHdlIGtub3cgdGhhdCB0aGUgYml0IGNhbid0IGdldCBmbGlwcGVkIHNwdXJpb3VzbHkgZHVyaW5n
IGNvbmN1cnJlbnQKKyAgICAvLyBtb2RpZmljYXRpb24sIHNvIHdlJ3JlIGd1YXJhbnRlZWQgdG8g
ZmluZCB0aGUgdmFsdWUuIFdlIG1pZ2h0IHNlZQorICAgIC8vIGFuIGVudHJ5IGFzIGl0J3MgYmVp
bmcgd3JpdHRlbiB0bywgYnV0IHRoYXQncyBhbHNvIGZpbmUsIHNpbmNlIGl0CisgICAgLy8gd29u
J3QgaGF2ZSBvdXIgc2FtZSBrZXkuIEl0J2xsIGVpdGhlciBiZSB6ZXJvLCBvciBhIGRpZmZlcmVu
dCBrZXkuCisKKyAgICBGaW5kUmVzdWx0IHJlc3VsdDsKKyAgICBmb3JFYWNoRW50cnkoWyZdIChQ
YWdlJiBwYWdlLCBFbnRyeSYgZW50cnksIHNpemVfdCBpbmRleCkgeworICAgICAgICBpZiAoZW50
cnkua2V5ID09IGtleSkgeworICAgICAgICAgICAgcmVzdWx0LmVudHJ5ID0gJmVudHJ5OworICAg
ICAgICAgICAgcmVzdWx0LnBhZ2UgPSAmcGFnZTsKKyAgICAgICAgICAgIHJlc3VsdC5pbmRleCA9
IGluZGV4OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQUxXQVlTX0lO
TElORSB1aW50NjRfdCBTZWN1cmVBUk02NEVIYXNoUGluczo6cGluRm9yQ3VycmVudFRocmVhZCgp
Cit7CisgICAgcmV0dXJuIGZpbmRFbnRyeSgpLmVudHJ5LT5waW47Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuY3BwCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAg
QEAgdm9pZCBpbml0aWFsaXplKCkKICAgICAgICAgICAgIGlmICghZ19qc2NDb25maWcudm0uY2Fu
VXNlSklUKSB7CiAgICAgICAgICAgICAgICAgT3B0aW9uczo6dXNlSklUKCkgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisgICAgICAg
ICAgICAgICAgZ19qc2NDb25maWcuYXJtNjRlSGFzaFBpbnMuaW5pdGlhbGl6ZUF0U3RhcnR1cCgp
OworI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgT3B0aW9uczo6Zmlu
YWxpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5o
CShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ND
b25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkdhdGUu
aCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJPcHRpb25zTGlzdC5oIgorI2luY2x1
ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCiAjaW5jbHVkZSA8d3RmL1dURkNvbmZpZy5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk5LDYgKzEwMCwxMCBAQCBzdHJ1Y3QgQ29uZmlnIHsKICNp
ZiBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORykKICAgICBXVEY6OlB0clRh
Z0xvb2t1cCBwdHJUYWdMb29rdXBSZWNvcmQ7CiAjZW5kaWYKKworI2lmIENQVShBUk02NEUpICYm
IEVOQUJMRShKSVQpCisgICAgU2VjdXJlQVJNNjRFSGFzaFBpbnMgYXJtNjRlSGFzaFBpbnM7Cisj
ZW5kaWYKIH07CiAKICNpZiBFTkFCTEUoVU5JRklFRF9BTkRfRlJFRVpBQkxFX0NPTkZJR19SRUNP
UkQpCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wMS0xNCAgU2FhbSBCYXJhdGkgIDxz
YmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQVJNNjRFSGFzaAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MTkyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6Cisg
ICAgICAgIChXVEY6OldvcmRUeXBlPjo6Zm9yRWFjaFNldEJpdCBjb25zdCk6CisKIDIwMjItMDEt
MTMgIEVsbGlvdHQgV2lsbGlhbXMgIDxlbXdAYXBwbGUuY29tPgogCiAgICAgICAgIFtYQ0J1aWxk
XSBBZGQgInByb2R1Y3QgZGVwZW5kZW5jaWVzIiB3aGljaCBpbmZsdWVuY2Ugd29ya3NwYWNlIGJ1
aWxkIG9yZGVyCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL1dURi93
dGYvQml0bWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDExIEBAIHB1YmxpYzoKICAg
ICAKICAgICBib29sIHN1YnN1bWVzKGNvbnN0IEJpdG1hcCYpIGNvbnN0OwogICAgIAorICAgIC8v
IElmIHRoZSBsYW1iZGEgcmV0dXJucyBhIGJvb2xlYW4sIGl0IGNhbiBiZSB1c2VkIHRvIHN0b3Ag
dGhlIGl0ZXJhdGlvbgorICAgIC8vIGVhcmx5LiBSZXR1cm4gdHJ1ZSB0byBjb250aW51ZSwgZmFs
c2UgdG8gc3RvcC4KKyAgICAvLworICAgIC8vIFRoZSBsYW1iZGEgY2FuIGFsc28gcmV0dXJuIHZv
aWQsIGluIHdoaWNoIGNhc2UsIHdlJ2xsIGl0ZXJhdGUgZXZlcnkgc2V0CisgICAgLy8gYml0Lgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2V0Qml0KGNvbnN0
IEZ1bmMmKSBjb25zdDsKICAgICAKQEAgLTM4OSw4ICszOTQsMTQgQEAgaW5saW5lIHZvaWQgQml0
bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IHNpemVfdCBiYXNlID0gaSAqIHdvcmRTaXplOwogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsg
aiA8IHdvcmRTaXplOyArK2opIHsKLSAgICAgICAgICAgIGlmICh3b3JkICYgMSkKLSAgICAgICAg
ICAgICAgICBmdW5jKGJhc2UgKyBqKTsKKyAgICAgICAgICAgIGlmICh3b3JkICYgMSkgeworICAg
ICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8Ym9vbCwgZGVjbHR5cGUo
ZnVuYyhiYXNlICsgaikpPikgeworICAgICAgICAgICAgICAgICAgICBib29sIHNob3VsZENvbnRp
bnVlID0gZnVuYyhiYXNlICsgaik7CisgICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ29u
dGludWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZ1bmMoYmFzZSArIGopOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgd29yZCA+Pj0gMTsKICAgICAgICAgfQogICAgIH0K
</data>
<flag name="commit-queue"
          id="475184"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449179</attachid>
            <date>2022-01-14 10:00:51 -0800</date>
            <delta_ts>2022-01-14 12:14:45 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>33720</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MDE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDIyLTAxLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBBUk02NEVIYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNo
OjpBUk02NEVIYXNoKToKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6fkFSTTY0RUhhc2gpOgor
ICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpkZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCk6
CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAgICAgIChKU0M6OkFSTTY0
RUhhc2g6OnBpbik6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OmN1cnJlbnRIYXNoKToKKyAg
ICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6c2V0VXBkYXRlZEhhc2gpOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXI6OmFybTY0ZUhhc2gpOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpi
aXRzRm9yRGl2ZXJzaWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29k
ZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFsbG9jYXRlKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V3Jp
dGVUb0pJVFJlZ2lvblNjb3BlOjpXcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpXcml0ZVRvSklUUmVnaW9uU2NvcGU6On5Xcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAg
ICAoSlNDOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlKToK
KyAgICAgICAgKEpTQzo6VmFsaWRhdGVBdG9taWNpdHlTY29wZTo6flZhbGlkYXRlQXRvbWljaXR5
U2NvcGUpOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUluRXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgIChKU0M6OmluaXRpYWxpemVQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmluaXRpYWxpemVBdFN0YXJ0dXApOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVI
YXNoUGluczo6YWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2Vj
dXJlQVJNNjRFSGFzaFBpbnM6OmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjptZXRhZGF0YSk6CisgICAgICAgIChKU0M6OlNlY3Vy
ZUFSTTY0RUhhc2hQaW5zOjpmaXJzdFBhZ2UpOgorICAgICAgICAqIGFzc2VtYmxlci9TZWN1cmVB
Uk02NEVIYXNoUGluc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0
RUhhc2hQaW5zOjprZXlGb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJN
NjRFSGFzaFBpbnM6OmZvckVhY2hQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmZvckVhY2hFbnRyeSk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5z
OjpmaW5kRW50cnkpOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGluczo6cGluRm9y
Q3VycmVudFRocmVhZCk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0NDb25m
aWcuaDoKKwogMjAyMi0wMS0xMyAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW1JJU0NWNjRdIHJpc2N2NjQgYmFja2VuZCBzaG91bGQgbG93ZXIgb2ZmbGlu
ZWFzbSBpbnN0cnVjdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBhc3NlbWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCiAg
ICAgYXNzZW1ibGVyL1JJU0NWNjRSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxlci9SZWdpc3Rlcklu
Zm8uaAorICAgIGFzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCisgICAgYXNzZW1ibGVy
L1NlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCiAgICAgYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCiAgICAgYXNzZW1ibGVyL1g4NlJlZ2lzdGVycy5oCiAgICAgYXNzZW1ibGVyL1g4Nl82NFJl
Z2lzdGVycy5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODgw
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDYgKzYxLDcgQEAgYXNzZW1ibGVyL1BlcmZMb2cuY3BwCiBhc3NlbWJsZXIvUHJpbnRl
ci5jcHAKIGFzc2VtYmxlci9Qcm9iZUNvbnRleHQuY3BwCiBhc3NlbWJsZXIvUHJvYmVTdGFjay5j
cHAKK2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5jcHAKIAogYjMvYWlyL0FpckFsbG9j
YXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwCiBiMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtODk1LDYgKzg5NSw4IEBACiAJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1l
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJD
MDYxMUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUND
IC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1
ZVJlcFJlZHVjdGlvblBoYXNlLmggKi87IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAv
KiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkNBRUM3NTI3OTBC
OEZCMDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBT
ZWN1cmVBUk02NEVIYXNoUGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTUyQ0FFQzc2Mjc5MEI5MDEwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVI
YXNoUGluc0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQ0FFQzcyMjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2
QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0
MkY1NjkwMDRBMThBNSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5
NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFD
MDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87
IH07CkBAIC0zNzg5LDYgKzM3OTEsOSBAQAogCQk1MkM1NTU2NTIyNEMyQUU3MDA5OUY1Q0MgLyog
REZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYWx1ZVJlcFJl
ZHVjdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyog
VHlwZVByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVQcm9maWxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkM5NTJCODE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2Zp
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUyQ0FFQzcyMjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02
NEVIYXNoUGluc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJlQVJNNjRFSGFzaFBpbnNJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQ0FFQzczMjc5MEI4RjYw
MEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
ZWN1cmVBUk02NEVIYXNoUGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUy
Q0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGlucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTZWN1cmVBUk02NEVIYXNoUGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MkNEMEY2NDIyNDJGNTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRh
YmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJV
SUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3Rk
ZmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7
IHBhdGggPSBkZmcvdGVzdGRmZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
RDEzMDhGMjIxQ0UwM0EwMDlDODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBmb28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04
ODAyLDYgKzg4MDcsOSBAQAogCQkJCUZFMTBBQUU5MUY0NEQ1MTAwMDlERURDNSAvKiBQcm9iZVN0
YWNrLmNwcCAqLywKIAkJCQlGRTEwQUFFQTFGNDRENTEyMDA5REVEQzUgLyogUHJvYmVTdGFjay5o
ICovLAogCQkJCTk2ODhDQjE0MEVEMTJCNEUwMDFENjQ5OSAvKiBSZWdpc3RlckluZm8uaCAqLywK
KwkJCQk1MkNBRUM3MzI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3Bw
ICovLAorCQkJCTUyQ0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGlu
cy5oICovLAorCQkJCTUyQ0FFQzcyMjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNo
UGluc0lubGluZXMuaCAqLywKIAkJCQlGRTUzM0NBMDFGMjE3QzMxMDAxNkExRkUgLyogdGVzdG1h
c20uY3BwICovLAogCQkJCTk2ODhDQjE0MEVEMTJCNEUwMDFENjQ5MiAvKiBYODZfNjRSZWdpc3Rl
cnMuaCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OUYgLyogWDg2QXNzZW1ibGVyLmgg
Ki8sCkBAIC0xMDAxOSw2ICsxMDAyNyw3IEBACiAJCQkJMEZCRTBGNzMxNkMxREIwNTAwODJDNUU4
IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y2
MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZGQzk1QTE0RUY5MEE5MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCBp
biBIZWFkZXJzICovLAorCQkJCTUyQ0FFQzc1Mjc5MEI4RkIwMEREQkFBRiAvKiBTZWN1cmVBUk02
NEVIYXNoUGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2
IC8qIERGR0RDRVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0JGQTVEMDIxRTg1M0ExMDA5
QzBFQkEgLyogREZHRGVzaXJlZEdsb2JhbFByb3BlcnR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjhGMkI5QTE3MkYwNTAxMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTExMTc5LDYgKzExMTg4LDcgQEAKIAkJCQlFMzNCQkUwOTI1QkZBMDQxMDA1
MzY5MEYgLyogV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0Ew
NTMxQTIxMzQyQjY4MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTNDNzNBOTEyNUJGQTczQjAwRUZFMzAzIC8qIFdhc21TdHJlYW1pbmdQbGFuLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MkNBRUM3NjI3OTBCOTAxMDBEREJBQUYgLyogU2VjdXJlQVJN
NjRFSGFzaFBpbnNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkx
MDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEQwMUJGNTI2REVF
RjUzMDBDQUUwRDAgLyogV2FzbVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThE
QTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZp
c2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJF
eGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25FZmZvcnQuaCIK
KyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCIKICNpbmNsdWRlICJzdGRp
bnQuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpA
QCAtMjAzLDE1ICsyMDQsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIENQVShB
Uk02NEUpCisgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkU2lnbj4KICAgICBjbGFzcyBBUk02NEVI
YXNoIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQVJNNjRFSGFzaCk7CiAgICAgcHVi
bGljOgotICAgICAgICBBUk02NEVIYXNoKHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBUk02
NEVIYXNoKHZvaWQqKQogICAgICAgICB7Ci0gICAgICAgICAgICBzZXRVcGRhdGVkSGFzaCgwLCAw
LCBkaXZlcnNpZmllcik7CisgICAgICAgIH0KKworICAgICAgICB+QVJNNjRFSGFzaCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1faW5pdGlhbGl6ZWRQaW4pIHsKKyAgICAgICAgICAg
ICAgICBnX2pzY0NvbmZpZy5hcm02NGVIYXNoUGlucy5kZWFsbG9jYXRlUGluRm9yQ3VycmVudFRo
cmVhZCgpOworICAgICAgICAgICAgICAgIG1faW5pdGlhbGl6ZWRQaW4gPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgdXBk
YXRlKHVpbnQzMl90IGluc3RydWN0aW9uLCB1aW50MzJfdCBpbmRleCwgdm9pZCogZGl2ZXJzaWZp
ZXIpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShpbmRleCA9PSAwKSkgewor
ICAgICAgICAgICAgICAgIGlmIChzaG91bGRTaWduKSB7CisgICAgICAgICAgICAgICAgICAgIG1f
aW5pdGlhbGl6ZWRQaW4gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBnX2pzY0NvbmZpZy5h
cm02NGVIYXNoUGlucy5hbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2V0VXBkYXRlZEhhc2goMCwgMCwgZGl2ZXJzaWZpZXIpOworICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2hhc2ggPSAwOworICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50SGFzaCA9IHRoaXMtPmN1cnJlbnRIYXNo
KGluZGV4LCBkaXZlcnNpZmllcik7CiAgICAgICAgICAgICB1aW50NjRfdCBuZXh0SW5kZXggPSBp
bmRleCArIDE7CiAgICAgICAgICAgICB1aW50MzJfdCBvdXRwdXQgPSBuZXh0VmFsdWUoaW5zdHJ1
Y3Rpb24sIG5leHRJbmRleCwgY3VycmVudEhhc2gpOwpAQCAtMjM1LDI5ICsyNTksMjggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gKGEgPj4gMzkpIF4gKGIgPj4gMjMpOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgdWludDMyX3QgYml0c0Zv
ckRpdmVyc2lmaWVyKHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lO
TElORSB1aW50MzJfdCBwaW4oKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oZGl2ZXJzaWZpZXIpOworICAgICAgICAgICAgcmV0dXJuIGdfanNj
Q29uZmlnLmFybTY0ZUhhc2hQaW5zLnBpbkZvckN1cnJlbnRUaHJlYWQoKTsKICAgICAgICAgfQog
Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgY3VycmVudEhhc2godWludDMyX3QgaW5k
ZXgsIHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGN1
cnJlbnRIYXNoKHVpbnQzMl90IGluZGV4LCB2b2lkKikKICAgICAgICAgewotICAgICAgICAgICAg
Ym9vbCBoYXNoRmllbGRJc1RhZ2dlZCA9IGluZGV4ID09IDA7Ci0gICAgICAgICAgICBpZiAoaGFz
aEZpZWxkSXNUYWdnZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVudGFnSW50KG1faGFzaCwg
bWFrZURpdmVyc2lmaWVyKGluaXRpYWxpemF0aW9uTmFtZXNwYWNlLCBpbmRleCwgYml0c0ZvckRp
dmVyc2lmaWVyKGRpdmVyc2lmaWVyKSkpOworICAgICAgICAgICAgaWYgKHNob3VsZFNpZ24pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHVudGFnSW50KG1faGFzaCwgbWFrZURpdmVyc2lmaWVyKGlu
aXRpYWxpemF0aW9uTmFtZXNwYWNlLCBpbmRleCwgcGluKCkpKTsKICAgICAgICAgICAgIHJldHVy
biBtX2hhc2g7CiAgICAgICAgIH0KIAotICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VXBk
YXRlZEhhc2godWludDMyX3QgdmFsdWUsIHVpbnQzMl90IGluZGV4LCB2b2lkKiBkaXZlcnNpZmll
cikKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFVwZGF0ZWRIYXNoKHVpbnQzMl90IHZh
bHVlLCB1aW50MzJfdCBpbmRleCwgdm9pZCopCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wg
c2hvdWxkVGFnSGFzaEZpZWxkID0gaW5kZXggPT0gMDsKLSAgICAgICAgICAgIGlmIChzaG91bGRU
YWdIYXNoRmllbGQpCi0gICAgICAgICAgICAgICAgbV9oYXNoID0gdGFnSW50KHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih2YWx1ZSksIG1ha2VEaXZlcnNpZmllcihpbml0aWFsaXphdGlvbk5hbWVzcGFj
ZSwgaW5kZXgsIGJpdHNGb3JEaXZlcnNpZmllcihkaXZlcnNpZmllcikpKTsKKyAgICAgICAgICAg
IGlmIChzaG91bGRTaWduKQorICAgICAgICAgICAgICAgIG1faGFzaCA9IHRhZ0ludChzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odmFsdWUpLCBtYWtlRGl2ZXJzaWZpZXIoaW5pdGlhbGl6YXRpb25OYW1l
c3BhY2UsIGluZGV4LCBwaW4oKSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1faGFzaCA9IHZhbHVlOworICAgICAgICAgICAgICAgIG1faGFzaCA9IHN0YXRpY19jYXN0PHVp
bnQ2NF90Pih2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICB1aW50NjRfdCBtX2hhc2g7Cisg
ICAgICAgIGJvb2wgbV9pbml0aWFsaXplZFBpbiB7IGZhbHNlIH07CiAgICAgfTsKICNlbmRpZiAv
LyBDUFUoQVJNNjRFKQogCkBAIC00MDksNiArNDMyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLmJ1ZmZlcigpOyB9CiAj
ZW5kaWYKIAorI2lmIENQVShBUk02NEUpCisgICAgICAgIEFSTTY0RUhhc2g8dHJ1ZT4mIGFybTY0
ZUhhc2goKSB7IHJldHVybiBtX2hhc2g7IH0KKyNlbmRpZgorCiAgICAgcHJvdGVjdGVkOgogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+CiAgICAgICAgIHZvaWQgcHV0SW50
ZWdyYWwoSW50ZWdyYWxUeXBlIHZhbHVlKQpAQCAtNDU5LDcgKzQ4Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBBc3NlbWJsZXJEYXRhIG1fc3RvcmFnZTsKICAgICAgICAgdW5zaWduZWQg
bV9pbmRleDsKICNpZiBDUFUoQVJNNjRFKQotICAgICAgICBBUk02NEVIYXNoIG1faGFzaDsKKyAg
ICAgICAgQVJNNjRFSGFzaDx0cnVlPiBtX2hhc2g7CiAgICAgICAgIEFzc2VtYmxlckRhdGEgbV9o
YXNoZXM7CiAjZW5kaWYKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjIsNyArMjIyLDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAog
ICAgIHVpbnQ4X3QqIGluRGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4obV9hc3NlbWJsZXJT
dG9yYWdlLmJ1ZmZlcigpKTsKICNpZiBDUFUoQVJNNjRFKQogICAgIHZvaWQqIGJ1ZmZlclB0ciA9
ICZtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5idWZmZXIoKTsKLSAgICBBUk02NEVIYXNoIHZl
cmlmeVVuY29tcGFjdGVkSGFzaCB7IGJ1ZmZlclB0ciB9OworICAgIEFSTTY0RUhhc2g8ZmFsc2U+
IHZlcmlmeVVuY29tcGFjdGVkSGFzaCB7IGJ1ZmZlclB0ciB9OwogICAgIG1fYXNzZW1ibGVySGFz
aGVzU3RvcmFnZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZlcigpLnJlbGVhc2VB
c3NlbWJsZXJIYXNoZXMoKTsKICAgICB1aW50MzJfdCogaW5IYXNoZXMgPSBiaXR3aXNlX2Nhc3Q8
dWludDMyX3QqPihtX2Fzc2VtYmxlckhhc2hlc1N0b3JhZ2UuYnVmZmVyKCkpOwogI2VuZGlmCkBA
IC00MzgsNiArNDM4LDEwIEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJs
ZXIKICAgICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2Rl
U2l6ZSgpOwogICAgIH0KIAorI2lmIENQVShBUk02NEUpCisgICAgbWFjcm9Bc3NlbWJsZXIubV9h
c3NlbWJsZXIuYnVmZmVyKCkuYXJtNjRlSGFzaCgpLmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhy
ZWFkKCk7CisjZW5kaWYKKwogICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlm
ICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5z
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Nl
Y3VyZUFSTTY0RUhhc2hQaW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGlucy5oIgorCisjaW5jbHVkZSAi
RXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkZhc3RKSVRQZXJtaXNzaW9ucy5oIgor
I2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9D
b25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
I2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisKK3N0cnVjdCBXcml0ZVRvSklUUmVnaW9u
U2NvcGUgeworICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSgpCisgICAgeworICAgICAgICB0aHJl
YWRTZWxmUmVzdHJpY3RSV1hUb1JXKCk7CisgICAgfQorCisgICAgfldyaXRlVG9KSVRSZWdpb25T
Y29wZSgpCisgICAgeworICAgICAgICB0aHJlYWRTZWxmUmVzdHJpY3RSV1hUb1JYKCk7CisgICAg
fQorfTsKKworc3RydWN0IFZhbGlkYXRlQXRvbWljaXR5U2NvcGUgeworICAgIFZhbGlkYXRlQXRv
bWljaXR5U2NvcGUoU2VjdXJlQVJNNjRFSGFzaFBpbnM6Ok1ldGFkYXRhKiBtZXRhZGF0YSkKKyAg
ICAgICAgOiBtX21ldGFkYXRhKG1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdmFs
aWRhdGVBdG9taWNpdHkgPSBtX21ldGFkYXRhLT5hc3NlcnROb3RSZWVudHJhbnQuZXhjaGFuZ2Uo
MSwgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2
YWxpZGF0ZUF0b21pY2l0eSk7CisgICAgfQorCisgICAgflZhbGlkYXRlQXRvbWljaXR5U2NvcGUo
KQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdmFsaWRhdGVBdG9taWNpdHkgPSBtX21ldGFkYXRh
LT5hc3NlcnROb3RSZWVudHJhbnQuZXhjaGFuZ2UoMCwgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2Nz
dCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZhbGlkYXRlQXRvbWljaXR5ID09IDEpOworICAg
IH0KKyAgICBTZWN1cmVBUk02NEVIYXNoUGluczo6TWV0YWRhdGEqIG1fbWV0YWRhdGE7Cit9Owor
CisvLyBUaGlzIGNsYXNzIGlzIGFsbG9jYXRlZCBvbmNlIHBlciBwcm9jZXNzLCBzbyBzdGF0aWMg
bG9jayBpcyBvay4KK3N0YXRpYyBMb2NrIGhhc2hQaW5zTG9jazsKKworQUxXQVlTX0lOTElORSBz
dGF0aWMgdm9pZCogYWxsb2NhdGVJbkV4ZWN1dGFibGVNZW1vcnkoc2l6ZV90IHNpemUpCit7Cisg
ICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6
c2luZ2xldG9uKCkuYWxsb2NhdGUoc2l6ZSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkubGVh
a1JlZigpOworICAgIFJFTEVBU0VfQVNTRVJUKGhhbmRsZSk7CisgICAgdm9pZCogbWVtb3J5ID0g
Yml0d2lzZV9jYXN0PGNoYXIqPihoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQdHIoKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhtZW1vcnkpICYmIGlzSklUUEMoYml0d2lzZV9jYXN0PGNo
YXIqPihtZW1vcnkpICsgc2l6ZSAtIDEpKTsKKyAgICByZXR1cm4gbWVtb3J5OworfQorCitzdGF0
aWMgdm9pZCBpbml0aWFsaXplUGFnZShjb25zdCBXcml0ZVRvSklUUmVnaW9uU2NvcGUmLCBTZWN1
cmVBUk02NEVIYXNoUGluczo6UGFnZSogcGFnZSkKK3sKKyAgICBuZXcgKHBhZ2UpIFNlY3VyZUFS
TTY0RUhhc2hQaW5zOjpQYWdlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBTZWN1cmVB
Uk02NEVIYXNoUGluczo6bnVtRW50cmllc1BlclBhZ2U7ICsraSkgeworICAgICAgICBhdXRvJiBl
bnRyeSA9IHBhZ2UtPmVudHJ5KGkpOworICAgICAgICBlbnRyeS5waW4gPSAwOworICAgICAgICBl
bnRyeS5rZXkgPSAwOworICAgIH0KK30KKwordm9pZCBTZWN1cmVBUk02NEVIYXNoUGluczo6aW5p
dGlhbGl6ZUF0U3RhcnR1cCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWVtb3J5KTsKKwor
ICAgIG1fbWVtb3J5ID0gYml0d2lzZV9jYXN0PGNoYXIqPihhbGxvY2F0ZUluRXhlY3V0YWJsZU1l
bW9yeShzaXplb2YoTWV0YWRhdGEpICsgUGFnZTo6YWxsb2NhdGlvblNpemUoKSkpICsgc2l6ZW9m
KE1ldGFkYXRhKTsKKworICAgIHsKKyAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRl
U2NvcGU7CisKKyAgICAgICAgbmV3IChtZXRhZGF0YSgpKSBNZXRhZGF0YTsgCisgICAgICAgIGlu
aXRpYWxpemVQYWdlKHdyaXRlU2NvcGUsIGZpcnN0UGFnZSgpKTsKKyAgICB9Cit9CisKK3VpbnQ2
NF90IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjphbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKQor
eworICAgIExvY2tlciBsb2NrZXIgeyBoYXNoUGluc0xvY2sgfTsKKworICAgIGF1dG8qIG1ldGFk
YXRhID0gdGhpcy0+bWV0YWRhdGEoKTsKKworICAgIGF1dG8gZmluZFJlc3VsdCA9IGZpbmRFbnRy
eSgpOworICAgIEVudHJ5KiBwcmVleGlzdGluZ0VudHJ5ID0gZmluZFJlc3VsdC5lbnRyeTsKKyAg
ICBzaXplX3QgcHJlZXhpc3RpbmdFbnRyeUluZGV4ID0gZmluZFJlc3VsdC5pbmRleDsKKyAgICBQ
YWdlKiBwcmVleGlzdGluZ0VudHJ5UGFnZSA9IGZpbmRSZXN1bHQucGFnZTsKKworICAgIHNpemVf
dCBuZXdFbnRyeTsKKyAgICBQYWdlKiBuZXdFbnRyeVBhZ2U7CisgICAgeworICAgICAgICBib29s
IGZvdW5kID0gZmFsc2U7CisgICAgICAgIHNpemVfdCBiYXNlSW5kZXggPSAwOworICAgICAgICBQ
YWdlKiBsYXN0UGFnZSA9IG51bGxwdHI7CisgICAgICAgIGZvckVhY2hQYWdlKFsmXSAoUGFnZSYg
cGFnZSkgeworICAgICAgICAgICAgc2l6ZV90IGJpdCA9IHBhZ2UuZmluZENsZWFyQml0KCk7Cisg
ICAgICAgICAgICBpZiAoYml0IDwgbnVtRW50cmllc1BlclBhZ2UpIHsKKyAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbmV3RW50cnkgPSBiYXNlSW5kZXggKyBi
aXQ7CisgICAgICAgICAgICAgICAgbmV3RW50cnlQYWdlID0gJnBhZ2U7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBiYXNlSW5kZXgg
Kz0gbnVtRW50cmllc1BlclBhZ2U7CisgICAgICAgICAgICBsYXN0UGFnZSA9ICZwYWdlOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChVTkxJS0VM
WSghZm91bmQpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbGFzdFBhZ2UtPm5leHQp
OworICAgICAgICAgICAgUGFnZSogbmV4dFBhZ2UgPSBiaXR3aXNlX2Nhc3Q8UGFnZSo+KGFsbG9j
YXRlSW5FeGVjdXRhYmxlTWVtb3J5KFBhZ2U6OmFsbG9jYXRpb25TaXplKCkpKTsKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBXcml0ZVRvSklUUmVnaW9uU2NvcGUgd3JpdGVTY29wZTsK
KyAgICAgICAgICAgICAgICBWYWxpZGF0ZUF0b21pY2l0eVNjb3BlIHZhbGlkYXRlQXRvbWljaXR5
KG1ldGFkYXRhKTsKKyAgICAgICAgICAgICAgICBpbml0aWFsaXplUGFnZSh3cml0ZVNjb3BlLCBu
ZXh0UGFnZSk7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgcmVhZCBmcm9tIGNvbmN1
cnJlbnRseS4gTWFrZSBzdXJlIGl0J3MgaW4gYSBnb29kIHN0YXRlIGZvciB0aGF0IHRvIGhhcHBl
bi4KKyAgICAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAg
ICAgIGxhc3RQYWdlLT5uZXh0ID0gbmV4dFBhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBuZXdFbnRyeVBhZ2UgPSBuZXh0UGFnZTsKKyAgICAgICAgICAgIHNpemVfdCBiaXQgPSBuZXh0
UGFnZS0+ZmluZENsZWFyQml0KCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChiaXQgPT0g
MCk7CisgICAgICAgICAgICBuZXdFbnRyeSA9IGJhc2VJbmRleCArIGJpdDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHVpbnQ2NF90IHBpbjsKKyAgICB7CisgICAgICAgIFdURjo6Y29tcGlsZXJG
ZW5jZSgpOworCisgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNjb3BlOworICAg
ICAgICBWYWxpZGF0ZUF0b21pY2l0eVNjb3BlIHZhbGlkYXRlQXRvbWljaXR5KG1ldGFkYXRhKTsK
KworICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0pJVFBDKG1ldGFkYXRhKSk7CisKKyAgICAgICAg
cGluID0gbWV0YWRhdGEtPm5leHRQaW4uZXhjaGFuZ2VBZGQoMSwgc3RkOjptZW1vcnlfb3JkZXJf
c2VxX2NzdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBpbik7CisKKyAgICAgICAgbmV3RW50
cnlQYWdlLT5zZXRJc0luVXNlKG5ld0VudHJ5KTsKKworICAgICAgICBpZiAocHJlZXhpc3RpbmdF
bnRyeSAmJiBwcmVleGlzdGluZ0VudHJ5SW5kZXggPCBuZXdFbnRyeSkgeworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocHJlZXhpc3RpbmdFbnRyeVBhZ2UtPmlzSW5Vc2UocHJlZXhpc3RpbmdF
bnRyeUluZGV4KSk7CisKKyAgICAgICAgICAgIG5ld0VudHJ5UGFnZS0+ZW50cnkobmV3RW50cnkp
ID0gKnByZWV4aXN0aW5nRW50cnk7CisgICAgICAgICAgICBuZXdFbnRyeSA9IHByZWV4aXN0aW5n
RW50cnlJbmRleDsKKyAgICAgICAgICAgIG5ld0VudHJ5UGFnZSA9IHByZWV4aXN0aW5nRW50cnlQ
YWdlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnkgPSBuZXdFbnRyeVBhZ2UtPmVu
dHJ5KG5ld0VudHJ5KTsKKyAgICAgICAgZW50cnkucGluID0gcGluOworICAgICAgICBlbnRyeS5r
ZXkgPSBrZXlGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgfQorCisgICAgcmV0dXJuIHBpbjsKK30K
Kwordm9pZCBTZWN1cmVBUk02NEVIYXNoUGluczo6ZGVhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJl
YWQoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBoYXNoUGluc0xvY2sgfTsKKyAgICBhdXRvKiBt
ZXRhZGF0YSA9IHRoaXMtPm1ldGFkYXRhKCk7CisKKyAgICBhdXRvIGNsZWFyID0gWyZdIChFbnRy
eSYgZW50cnkpIHsKKyAgICAgICAgZW50cnkucGluID0gMDsKKyAgICAgICAgZW50cnkua2V5ID0g
MDsKKyAgICB9OworCisgICAgUGFnZSogcmVtb3ZhbFBhZ2U7CisgICAgc2l6ZV90IHJlbW92YWxJ
bmRleDsKKyAgICB7CisgICAgICAgIGF1dG8gZmluZFJlc3VsdCA9IGZpbmRFbnRyeSgpOworICAg
ICAgICBFbnRyeSYgZW50cnkgPSAqZmluZFJlc3VsdC5lbnRyeTsKKyAgICAgICAgcmVtb3ZhbElu
ZGV4ID0gZmluZFJlc3VsdC5pbmRleDsKKyAgICAgICAgcmVtb3ZhbFBhZ2UgPSBmaW5kUmVzdWx0
LnBhZ2U7CisKKyAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2NvcGU7CisgICAg
ICAgIFZhbGlkYXRlQXRvbWljaXR5U2NvcGUgdmFsaWRhdGVBdG9taWNpdHkobWV0YWRhdGEpOwor
CisgICAgICAgIGNsZWFyKGVudHJ5KTsKKyAgICAgICAgcmVtb3ZhbFBhZ2UtPmNsZWFySXNJblVz
ZShyZW1vdmFsSW5kZXgpOworICAgIH0KKworICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gYWxs
b3dzIHJlY3Vyc2l2ZSB1c2VzIG9mIHRoZSBNYWNyb0Fzc2VtYmxlciwgZm9ybWluZyBhIHN0YWNr
CisgICAgLy8gbGlrZSBkYXRhIHN0cnVjdHVyZS4gVGhlIGluIHVzZSBwaW4gKHRvcCBvZiB0aGUg
c3RhY2spIHdpbGwgYWx3YXlzIGJlIGF0IHRoZSBsb3dlc3QKKyAgICAvLyBwYWdlIGFuZCBsb3dl
c3QgaW5kZXggaW4gdGhlIGJpdCB2ZWN0b3IuIFNvIHdoZW4gd2UgZGVhbGxvY2F0ZSB0aGUgY3Vy
cmVudCB0b3Agb2YgdGhlCisgICAgLy8gc3RhY2ssIHdlIG5lZWQgdG8gZmluZCB0aGUgbmV4dCBl
bnRyeSBpbiB0aGUgc3RhY2ssIGFuZCBlbnN1cmUgaXQncyBhdCB0aGUgbG93ZXN0IGluZGV4Lgor
ICAgIC8vIFNvIGlmIHRoZXJlIGFyZSBvdGhlciBlbnRyaWVzIGZvciB0aGlzIGN1cnJlbnQgdGhy
ZWFkLCB3ZSBmaW5kIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdAorICAgIC8vIHBpbiAobmV4dCB0
b3Agb2Ygc3RhY2sgdmFsdWUpLCBhbmQgcmVwbGFjZSBpdCBhdCB0aGUgaW5kZXggd2Ugd2VyZSB1
c2luZyBiZWZvcmUuCisgICAgLy8gQWRkaXRpb24gYWxzbyBtYWludGFpbnMgdGhpcyBpbnZhcmlh
bnQgYnkgYWx3YXlzIHBsYWNpbmcgdGhlIG5ld2VzdCBlbnRyeSBmb3IKKyAgICAvLyB0aGUgY3Vy
cmVudCB0aHJlYWQgYXQgdGhlIGxvd2VzdCBpbmRleC4KKyAgICB7CisgICAgICAgIHVpbnQ2NF90
IGtleSA9IGtleUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OworICAgICAgICB1aW50NjRfdCBtYXhQaW4gPSAwOworICAgICAgICBzaXplX3QgbWF4SW5kZXgg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworICAgICAgICBQYWdlKiBtYXhQ
YWdlID0gbnVsbHB0cjsKKworICAgICAgICBmb3JFYWNoRW50cnkoWyZdIChQYWdlJiBwYWdlLCBF
bnRyeSYgZW50cnksIHNpemVfdCBpbmRleCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZW50cnkucGluKTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5rZXkgPT0ga2V5ICYmIGVudHJ5LnBp
biA+IG1heFBpbikgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBtYXhQaW4gPSBlbnRyeS5waW47CisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBpbmRl
eDsKKyAgICAgICAgICAgICAgICBtYXhQYWdlID0gJnBhZ2U7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoZm91bmQp
IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlbW92YWxJbmRleCA8IG1heEluZGV4KTsK
KworICAgICAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2NvcGU7CisgICAgICAg
ICAgICBWYWxpZGF0ZUF0b21pY2l0eVNjb3BlIHZhbGlkYXRlQXRvbWljaXR5KG1ldGFkYXRhKTsK
KworICAgICAgICAgICAgcmVtb3ZhbFBhZ2UtPmVudHJ5KHJlbW92YWxJbmRleCkgPSBtYXhQYWdl
LT5lbnRyeShtYXhJbmRleCk7CisgICAgICAgICAgICBjbGVhcihtYXhQYWdlLT5lbnRyeShtYXhJ
bmRleCkpOworICAgICAgICAgICAgbWF4UGFnZS0+Y2xlYXJJc0luVXNlKG1heEluZGV4KTsKKyAg
ICAgICAgICAgIHJlbW92YWxQYWdlLT5zZXRJc0luVXNlKHJlbW92YWxJbmRleCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKKyNlbmRpZiAvLyBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoSklUKQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
U2VjdXJlQVJNNjRFSGFzaFBpbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBDUFUoQVJNNjRFKSAmJiBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgU2VjdXJlQVJNNjRFSGFzaFBpbnMgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgaW5pdGlhbGl6ZUF0U3RhcnR1cCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHVp
bnQ2NF90IGFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZGVhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB1aW50NjRfdCBwaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBudW1FbnRyaWVzUGVyUGFnZSA9IDY0OworCisgICAgc3RydWN0IEVudHJ5
IHsKKyAgICAgICAgdWludDY0X3QgcGluOworICAgICAgICB1aW50NjRfdCBrZXk7CisgICAgfTsK
KworICAgIHN0cnVjdCBhbGlnbmFzKGFsaWdub2YoRW50cnkpKSBQYWdlIHsKKyAgICAgICAgc3Rh
dGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSgpIHsgcmV0dXJuIHNpemVvZihQYWdlKSArIG51bUVu
dHJpZXNQZXJQYWdlICogc2l6ZW9mKEVudHJ5KTsgfQorCisgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG1hc2sgPSBudW1FbnRyaWVzUGVyUGFnZSAtIDE7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoIShtYXNrICYgbnVtRW50cmllc1BlclBhZ2UpKTsKKworICAgICAgICBpbmxpbmUgRW50
cnkmIGVudHJ5KHNpemVfdCBpbmRleCkKKyAgICAgICAgeyAKKyAgICAgICAgICAgIEVudHJ5KiBl
bnRyaWVzID0gYml0d2lzZV9jYXN0PEVudHJ5Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAr
IHNpemVvZihQYWdlKSk7CisgICAgICAgICAgICByZXR1cm4gZW50cmllc1tpbmRleCAmIG1hc2td
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldElzSW5Vc2Uoc2l6ZV90IGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBpc0luVXNlTWFwLnNldChpbmRleCAmIG1hc2sp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVhcklzSW5Vc2Uoc2l6ZV90IGluZGV4KQor
ICAgICAgICB7CisgICAgICAgICAgICBpc0luVXNlTWFwLnNldChpbmRleCAmIG1hc2ssIGZhbHNl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNJblVzZShzaXplX3QgaW5kZXgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc0luVXNlTWFwLmdldChpbmRleCAmIG1hc2spOwor
ICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGZpbmRDbGVhckJpdCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0luVXNlTWFwLmZpbmRCaXQoMCwgZmFsc2UpOworICAgICAgICB9
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgICAgICB2b2lkIGZv
ckVhY2hTZXRCaXQoRnVuY3Rpb24gZnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlz
SW5Vc2VNYXAuZm9yRWFjaFNldEJpdChmdW5jdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBQ
YWdlKiBuZXh0IHsgbnVsbHB0ciB9OworICAgIHByaXZhdGU6CisgICAgICAgIEJpdG1hcDxudW1F
bnRyaWVzUGVyUGFnZT4gaXNJblVzZU1hcDsKKyAgICB9OworCisgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoUGFnZSkgJSBhbGlnbm9mKEVudHJ5KSA9PSAwKTsKKworICAgIHN0cnVjdCBhbGlnbmFz
KGFsaWdub2YoUGFnZSkpIE1ldGFkYXRhIHsKKyAgICAgICAgQXRvbWljPHVpbnQ2NF90PiBuZXh0
UGluIHsgMSB9OworICAgICAgICBBdG9taWM8dWludDMyX3Q+IGFzc2VydE5vdFJlZW50cmFudCB7
IDAgfTsKKyAgICB9OworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoTWV0YWRhdGEpICUgYWxp
Z25vZihQYWdlKSA9PSAwKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDY0X3Qga2V5Rm9y
Q3VycmVudFRocmVhZCgpOworCisgICAgc3RydWN0IEZpbmRSZXN1bHQgeworICAgICAgICBFbnRy
eSogZW50cnkgeyBudWxscHRyIH07CisgICAgICAgIHNpemVfdCBpbmRleCB7IHN0ZDo6bnVtZXJp
Y19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsKKyAgICAgICAgUGFnZSogcGFnZSB7IG51bGxwdHIg
fTsKKyAgICB9OworICAgIEZpbmRSZXN1bHQgZmluZEVudHJ5KCk7CisKKyAgICBpbmxpbmUgTWV0
YWRhdGEqIG1ldGFkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PE1ldGFkYXRhKj4oYml0d2lz
ZV9jYXN0PGNoYXIqPihtX21lbW9yeSkgLSBzaXplb2YoTWV0YWRhdGEpKTsgfQorICAgIGlubGlu
ZSBQYWdlKiBmaXJzdFBhZ2UoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UGFnZSo+KG1fbWVtb3J5
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgZm9yRWFj
aFBhZ2UoRnVuY3Rpb24pOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAg
IHZvaWQgZm9yRWFjaEVudHJ5KEZ1bmN0aW9uKTsKKworICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVs
bHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDUFUoQVJNNjRF
KSAmJiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9T
ZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFz
aFBpbnNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCisKKyNpZiBDUFUoQVJNNjRFKSAmJiBFTkFC
TEUoSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworQUxXQVlTX0lOTElORSB1aW50NjRfdCBTZWN1
cmVBUk02NEVIYXNoUGluczo6a2V5Rm9yQ3VycmVudFRocmVhZCgpCit7CisgICAgdWludDY0X3Qg
cmVzdWx0OworICAgIGFzbSAoCisgICAgICAgICJtcnMgJXhbcmVzdWx0XSwgVFBJRFJST19FTDAi
CisgICAgICAgIDogW3Jlc3VsdF0gIj1yIiAocmVzdWx0KQorICAgICAgICA6CisgICAgICAgIDoK
KyAgICApOworICAgIHJldHVybiByZXN1bHQgKyAxOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rpb24+CitBTFdBWVNfSU5MSU5FIHZvaWQgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmZvckVh
Y2hQYWdlKEZ1bmN0aW9uIGZ1bmN0aW9uKQoreworICAgIGZvciAoUGFnZSogcGFnZSA9IGZpcnN0
UGFnZSgpOyBwYWdlOyBwYWdlID0gcGFnZS0+bmV4dCkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VChpc0pJVFBDKHBhZ2UpKTsKKyAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IGZ1bmN0aW9u
KCpwYWdlKTsKKyAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBTZWN1cmVBUk02NEVIYXNoUGluczo6Zm9yRWFjaEVudHJ5KEZ1bmN0aW9uIGZ1bmN0
aW9uKQoreworICAgIHNpemVfdCBiYXNlSW5kZXggPSAwOworICAgIGZvckVhY2hQYWdlKFsmXSAo
UGFnZSYgcGFnZSkgeworICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKKyAgICAg
ICAgcGFnZS5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IGJpdEluZGV4KSB7CisgICAgICAgICAg
ICBzaXplX3QgaW5kZXggPSBiYXNlSW5kZXggKyBiaXRJbmRleDsKKyAgICAgICAgICAgIEVudHJ5
JiBlbnRyeSA9IHBhZ2UuZW50cnkoaW5kZXgpOworICAgICAgICAgICAgQVNTRVJUKGlzSklUUEMo
JmVudHJ5KSk7CisgICAgICAgICAgICBzaG91bGRDb250aW51ZSAmPSBmdW5jdGlvbihwYWdlLCBl
bnRyeSwgaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIHNob3VsZENvbnRpbnVlOworICAgICAg
ICB9KTsKKyAgICAgICAgYmFzZUluZGV4ICs9IG51bUVudHJpZXNQZXJQYWdlOworICAgICAgICBy
ZXR1cm4gc2hvdWxkQ29udGludWU7CisgICAgfSk7Cit9CisKK0FMV0FZU19JTkxJTkUgU2VjdXJl
QVJNNjRFSGFzaFBpbnM6OkZpbmRSZXN1bHQgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmZpbmRFbnRy
eSgpCit7CisgICAgdWludDY0X3Qga2V5ID0ga2V5Rm9yQ3VycmVudFRocmVhZCgpOworICAgIC8v
IFdlIGNhbiBjYWxsIHRoaXMgY29uY3VycmVudGx5IHRvIHRoZSBiaXQgdmVjdG9yIGJlaW5nIG1v
ZGlmaWVkCisgICAgLy8gc2luY2Ugd2UgZWl0aGVyIGNhbGwgdGhpcyB3aGVuIHdlJ3JlIGxvY2tl
ZCwgb3Igd2UgY2FsbCBpdCB3aGVuCisgICAgLy8gd2Uga25vdyB0aGUgZW50cnkgYWxyZWFkeSBl
eGlzdHMuIFdoZW4gdGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzLAorICAgIC8vIHdlIGtub3cgdGhh
dCB0aGUgYml0IGNhbid0IGdldCBmbGlwcGVkIHNwdXJpb3VzbHkgZHVyaW5nIGNvbmN1cnJlbnQK
KyAgICAvLyBtb2RpZmljYXRpb24sIHNvIHdlJ3JlIGd1YXJhbnRlZWQgdG8gZmluZCB0aGUgdmFs
dWUuIFdlIG1pZ2h0IHNlZQorICAgIC8vIGFuIGVudHJ5IGFzIGl0J3MgYmVpbmcgd3JpdHRlbiB0
bywgYnV0IHRoYXQncyBhbHNvIGZpbmUsIHNpbmNlIGl0CisgICAgLy8gd29uJ3QgaGF2ZSBvdXIg
c2FtZSBrZXkuIEl0J2xsIGVpdGhlciBiZSB6ZXJvLCBvciBhIGRpZmZlcmVudCBrZXkuCisKKyAg
ICBGaW5kUmVzdWx0IHJlc3VsdDsKKyAgICBmb3JFYWNoRW50cnkoWyZdIChQYWdlJiBwYWdlLCBF
bnRyeSYgZW50cnksIHNpemVfdCBpbmRleCkgeworICAgICAgICBpZiAoZW50cnkua2V5ID09IGtl
eSkgeworICAgICAgICAgICAgcmVzdWx0LmVudHJ5ID0gJmVudHJ5OworICAgICAgICAgICAgcmVz
dWx0LnBhZ2UgPSAmcGFnZTsKKyAgICAgICAgICAgIHJlc3VsdC5pbmRleCA9IGluZGV4OworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQUxXQVlTX0lOTElORSB1aW50NjRf
dCBTZWN1cmVBUk02NEVIYXNoUGluczo6cGluRm9yQ3VycmVudFRocmVhZCgpCit7CisgICAgcmV0
dXJuIGZpbmRFbnRyeSgpLmVudHJ5LT5waW47Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCShyZXZp
c2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXpl
VGhyZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgdm9pZCBpbml0
aWFsaXplKCkKICAgICAgICAgICAgIGlmICghZ19qc2NDb25maWcudm0uY2FuVXNlSklUKSB7CiAg
ICAgICAgICAgICAgICAgT3B0aW9uczo6dXNlSklUKCkgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCk7CisgICAgICAgICAgICB9IGVs
c2UgeworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisgICAgICAgICAgICAgICAgZ19q
c2NDb25maWcuYXJtNjRlSGFzaFBpbnMuaW5pdGlhbGl6ZUF0U3RhcnR1cCgpOworI2VuZGlmCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgT3B0aW9uczo6ZmluYWxpemUoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCShyZXZpc2lvbiAy
ODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NDb25maWcuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkdhdGUuaCIKICNpbmNsdWRl
ICJPcGNvZGUuaCIKICNpbmNsdWRlICJPcHRpb25zTGlzdC5oIgorI2luY2x1ZGUgIlNlY3VyZUFS
TTY0RUhhc2hQaW5zLmgiCiAjaW5jbHVkZSA8d3RmL1dURkNvbmZpZy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTk5LDYgKzEwMCwxMCBAQCBzdHJ1Y3QgQ29uZmlnIHsKICNpZiBDUFUoQVJNNjRF
KSAmJiBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORykKICAgICBXVEY6OlB0clRhZ0xvb2t1cCBwdHJU
YWdMb29rdXBSZWNvcmQ7CiAjZW5kaWYKKworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQp
CisgICAgU2VjdXJlQVJNNjRFSGFzaFBpbnMgYXJtNjRlSGFzaFBpbnM7CisjZW5kaWYKIH07CiAK
ICNpZiBFTkFCTEUoVU5JRklFRF9BTkRfRlJFRVpBQkxFX0NPTkZJR19SRUNPUkQpCkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAyMi0wMS0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgQVJNNjRFSGFzaAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAgIChXVEY6
OldvcmRUeXBlPjo6Zm9yRWFjaFNldEJpdCBjb25zdCk6CisKIDIwMjItMDEtMTMgIEVsbGlvdHQg
V2lsbGlhbXMgIDxlbXdAYXBwbGUuY29tPgogCiAgICAgICAgIFtYQ0J1aWxkXSBBZGQgInByb2R1
Y3QgZGVwZW5kZW5jaWVzIiB3aGljaCBpbmZsdWVuY2Ugd29ya3NwYWNlIGJ1aWxkIG9yZGVyCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9CaXRtYXAuaAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBib29s
IHN1YnN1bWVzKGNvbnN0IEJpdG1hcCYpIGNvbnN0OwogICAgIAorICAgIC8vIElmIHRoZSBsYW1i
ZGEgcmV0dXJucyBhIGJvb2xlYW4sIGl0IGNhbiBiZSB1c2VkIHRvIHN0b3AgdGhlIGl0ZXJhdGlv
bgorICAgIC8vIGVhcmx5LiBSZXR1cm4gdHJ1ZSB0byBjb250aW51ZSwgZmFsc2UgdG8gc3RvcC4K
KyAgICAvLworICAgIC8vIFRoZSBsYW1iZGEgY2FuIGFsc28gcmV0dXJuIHZvaWQsIGluIHdoaWNo
IGNhc2UsIHdlJ2xsIGl0ZXJhdGUgZXZlcnkgc2V0CisgICAgLy8gYml0LgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2V0Qml0KGNvbnN0IEZ1bmMmKSBjb25z
dDsKICAgICAKQEAgLTM4OSw4ICszOTQsMTQgQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNp
emUsIFdvcmRUeXBlPgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHNpemVfdCBiYXNl
ID0gaSAqIHdvcmRTaXplOwogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdvcmRTaXpl
OyArK2opIHsKLSAgICAgICAgICAgIGlmICh3b3JkICYgMSkKLSAgICAgICAgICAgICAgICBmdW5j
KGJhc2UgKyBqKTsKKyAgICAgICAgICAgIGlmICh3b3JkICYgMSkgeworICAgICAgICAgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8Ym9vbCwgZGVjbHR5cGUoZnVuYyhiYXNlICsg
aikpPikgeworICAgICAgICAgICAgICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0gZnVuYyhi
YXNlICsgaik7CisgICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIGZ1bmMoYmFzZSArIGopOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgd29yZCA+Pj0gMTsKICAgICAgICAgfQogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449198</attachid>
            <date>2022-01-14 12:14:45 -0800</date>
            <delta_ts>2022-01-14 12:18:43 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>45697</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MDE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDIyLTAxLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBBUk02NEVIYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNo
OjpBUk02NEVIYXNoKToKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6fkFSTTY0RUhhc2gpOgor
ICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpkZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCk6
CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAgICAgIChKU0M6OkFSTTY0
RUhhc2g6OnBpbik6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OmN1cnJlbnRIYXNoKToKKyAg
ICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6c2V0VXBkYXRlZEhhc2gpOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXI6OmFybTY0ZUhhc2gpOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpi
aXRzRm9yRGl2ZXJzaWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29k
ZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFsbG9jYXRlKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V3Jp
dGVUb0pJVFJlZ2lvblNjb3BlOjpXcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpXcml0ZVRvSklUUmVnaW9uU2NvcGU6On5Xcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAg
ICAoSlNDOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlKToK
KyAgICAgICAgKEpTQzo6VmFsaWRhdGVBdG9taWNpdHlTY29wZTo6flZhbGlkYXRlQXRvbWljaXR5
U2NvcGUpOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUluRXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgIChKU0M6OmluaXRpYWxpemVQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmluaXRpYWxpemVBdFN0YXJ0dXApOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVI
YXNoUGluczo6YWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2Vj
dXJlQVJNNjRFSGFzaFBpbnM6OmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjptZXRhZGF0YSk6CisgICAgICAgIChKU0M6OlNlY3Vy
ZUFSTTY0RUhhc2hQaW5zOjpmaXJzdFBhZ2UpOgorICAgICAgICAqIGFzc2VtYmxlci9TZWN1cmVB
Uk02NEVIYXNoUGluc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0
RUhhc2hQaW5zOjprZXlGb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJN
NjRFSGFzaFBpbnM6OmZvckVhY2hQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmZvckVhY2hFbnRyeSk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5z
OjpmaW5kRW50cnkpOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGluczo6cGluRm9y
Q3VycmVudFRocmVhZCk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0NDb25m
aWcuaDoKKwogMjAyMi0wMS0xMyAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW1JJU0NWNjRdIHJpc2N2NjQgYmFja2VuZCBzaG91bGQgbG93ZXIgb2ZmbGlu
ZWFzbSBpbnN0cnVjdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBhc3NlbWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCiAg
ICAgYXNzZW1ibGVyL1JJU0NWNjRSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxlci9SZWdpc3Rlcklu
Zm8uaAorICAgIGFzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCisgICAgYXNzZW1ibGVy
L1NlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCiAgICAgYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCiAgICAgYXNzZW1ibGVyL1g4NlJlZ2lzdGVycy5oCiAgICAgYXNzZW1ibGVyL1g4Nl82NFJl
Z2lzdGVycy5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODgw
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDYgKzYxLDcgQEAgYXNzZW1ibGVyL1BlcmZMb2cuY3BwCiBhc3NlbWJsZXIvUHJpbnRl
ci5jcHAKIGFzc2VtYmxlci9Qcm9iZUNvbnRleHQuY3BwCiBhc3NlbWJsZXIvUHJvYmVTdGFjay5j
cHAKK2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5jcHAKIAogYjMvYWlyL0FpckFsbG9j
YXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwCiBiMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtODk1LDYgKzg5NSw4IEBACiAJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1l
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJD
MDYxMUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUND
IC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1
ZVJlcFJlZHVjdGlvblBoYXNlLmggKi87IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAv
KiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkNBRUM3NTI3OTBC
OEZCMDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBT
ZWN1cmVBUk02NEVIYXNoUGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTUyQ0FFQzc2Mjc5MEI5MDEwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVI
YXNoUGluc0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQ0FFQzcyMjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2
QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0
MkY1NjkwMDRBMThBNSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5
NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFD
MDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87
IH07CkBAIC0yMDgzLDcgKzIwODUsNiBAQAogCQlGRTQ4QkQ0NDIzMjQ1RTkzMDBGMTM2RDAgLyog
SlNDQ29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTQ4QkQ0MjIzMjQ1RTg3MDBGMTM2RDAgLyogSlNDQ29uZmlnLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU0OEU2MzgxRUIxMThEMjAwNUQ3
QTk2IC8qIE9iamVjdEluaXRpYWxpemF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNDhFNjM2MUVCMTE4OEYwMDVEN0E5NiAvKiBPYmpl
Y3RJbml0aWFsaXphdGlvblNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRkU0QkZGMkMxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3Zl
cnJpZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTRCRkYyQTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCAqLzsgfTsKLQkJ
RkU0RDU1QjgxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0RDU1QjcxQUU3MTZDQTAwNTJF
NDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNv
dXJjZUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFNTA2ODY0MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTUzM0NBNTFGMjE3
REIzMDAxNkExRkUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCUZFNTMzQ0E2MUYyMTdEQjMwMDE2QTFGRSAv
KiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrICovOyB9OwpAQCAtMzc4OSw2ICszNzkwLDkgQEAKIAkJNTJDNTU1NjUy
MjRDMkFFNzAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVw
UmVkdWN0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYx
OUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJv
ZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmls
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkNBRUM3MjI3OTBCOEY2MDBE
REJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNl
Y3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MkNBRUM3MzI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MkNBRUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRF
SGFzaFBpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDRDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3Rk
ZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21w
aWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3Rk
Zmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3
MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0gZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTYyNyw3ICs1NjMxLDYgQEAKIAkJRkU0OEU2MzcxRUIxMThBRDAw
NUQ3QTk2IC8qIE9iamVjdEluaXRpYWxpemF0aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEJGRjI5MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5j
dGlvbk92ZXJyaWRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
dW5jdGlvbk92ZXJyaWRlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEJG
RjJBMUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbk92ZXJyaWRlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGRTRENTVCNzFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvblN0YXR1cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUwNjg2NDFBRTI0NjM5MDAwOURBQjcgLyog
RGVmZXJyZWRTb3VyY2VEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERl
ZmVycmVkU291cmNlRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUwNjg2
NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVtcC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTMzQ0EwMUYyMTdDMzEwMDE2QTFGRSAvKiB0ZXN0bWFz
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB0ZXN0bWFzbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC03ODE1LDcgKzc4MTgsNiBAQAogCQkJCUEzOENBNTlCMjZERDg0REUwMEM4
RDg0QyAvKiBJU084NjAxLmNwcCAqLywKIAkJCQlBMzhDQTU5QzI2REQ4NERFMDBDOEQ4NEMgLyog
SVNPODYwMS5oICovLAogCQkJCThCOUY2RDU1MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25L
aW5kLmggKi8sCi0JCQkJRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1
cy5oICovLAogCQkJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlv
bnMuY3BwICovLAogCQkJCTcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJh
dGlvbnMuaCAqLywKIAkJCQk3MERDM0UwNzFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90
b3R5cGUuY3BwICovLApAQCAtODgwMiw2ICs4ODA0LDkgQEAKIAkJCQlGRTEwQUFFOTFGNDRENTEw
MDA5REVEQzUgLyogUHJvYmVTdGFjay5jcHAgKi8sCiAJCQkJRkUxMEFBRUExRjQ0RDUxMjAwOURF
REM1IC8qIFByb2JlU3RhY2suaCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTkgLyog
UmVnaXN0ZXJJbmZvLmggKi8sCisJCQkJNTJDQUVDNzMyNzkwQjhGNjAwRERCQUFGIC8qIFNlY3Vy
ZUFSTTY0RUhhc2hQaW5zLmNwcCAqLywKKwkJCQk1MkNBRUM3NDI3OTBCOEY2MDBEREJBQUYgLyog
U2VjdXJlQVJNNjRFSGFzaFBpbnMuaCAqLywKKwkJCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYg
LyogU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmggKi8sCiAJCQkJRkU1MzNDQTAxRjIxN0Mz
MTAwMTZBMUZFIC8qIHRlc3RtYXNtLmNwcCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0
OTIgLyogWDg2XzY0UmVnaXN0ZXJzLmggKi8sCiAJCQkJOTY4OENCMTQwRUQxMkI0RTAwMUQ2NDlG
IC8qIFg4NkFzc2VtYmxlci5oICovLApAQCAtMTAwMTksNiArMTAwMjQsNyBAQAogCQkJCTBGQkUw
RjczMTZDMURCMDUwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0Q4OUNGNjE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJl
YWtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUExNEVGOTBBOTAwQzcyNTMy
IC8qIERGR0NTRVBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkNBRUM3NTI3OTBCOEZCMDBE
REJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZD
NzczMTZFMTJGNzQwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTNCRkE1RDAyMUU4NTNBMTAwOUMwRUJBIC8qIERGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0eS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY4RjJCOUExNzJGMDUwMTAwN0RCREE1IC8qIERGR0Rlc2lyZWRJ
ZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDQ3Niw3ICsxMDQ4Miw2IEBACiAJCQkJ
MEY1RTBGRTcyMDg2QUQ0ODAwOTdGMERFIC8qIElzb1N1YnNwYWNlUGVyVk0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCOUY2RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1M0Q0MUVDOTIzQzAwODFBMDBBRTk4NEIgLyogSXRlcmF0aW9uTW9k
ZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTRENTVCODFBRTcxNkNBMDA1MkU0NTkg
LyogSXRlcmF0aW9uU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDExM0Q0QzFBOERCMDkz
MDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MERD
M0UwQTFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDEzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTExMTc5LDYgKzExMTg0LDcgQEAKIAkJCQlFMzNCQkUwOTI1QkZBMDQxMDA1MzY5
MEYgLyogV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0EwNTMx
QTIxMzQyQjY4MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTNDNzNBOTEyNUJGQTczQjAwRUZFMzAzIC8qIFdhc21TdHJlYW1pbmdQbGFuLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MkNBRUM3NjI3OTBCOTAxMDBEREJBQUYgLyogU2VjdXJlQVJNNjRF
SGFzaFBpbnNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAw
QkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEQwMUJGNTI2REVFRjUz
MDBDQUUwRDAgLyogV2FzbVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThEQTA1
QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lv
biAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFeGVj
dXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25FZmZvcnQuaCIKKyNp
bmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCIKICNpbmNsdWRlICJzdGRpbnQu
aCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAt
MjAzLDE1ICsyMDQsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIENQVShBUk02
NEUpCisgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkU2lnbj4KICAgICBjbGFzcyBBUk02NEVIYXNo
IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQVJNNjRFSGFzaCk7CiAgICAgcHVibGlj
OgotICAgICAgICBBUk02NEVIYXNoKHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBUk02NEVI
YXNoKHZvaWQqKQogICAgICAgICB7Ci0gICAgICAgICAgICBzZXRVcGRhdGVkSGFzaCgwLCAwLCBk
aXZlcnNpZmllcik7CisgICAgICAgIH0KKworICAgICAgICB+QVJNNjRFSGFzaCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1faW5pdGlhbGl6ZWRQaW4pIHsKKyAgICAgICAgICAgICAg
ICBnX2pzY0NvbmZpZy5hcm02NGVIYXNoUGlucy5kZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVh
ZCgpOworICAgICAgICAgICAgICAgIG1faW5pdGlhbGl6ZWRQaW4gPSBmYWxzZTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgdXBkYXRl
KHVpbnQzMl90IGluc3RydWN0aW9uLCB1aW50MzJfdCBpbmRleCwgdm9pZCogZGl2ZXJzaWZpZXIp
CiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShpbmRleCA9PSAwKSkgeworICAg
ICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2hvdWxkU2lnbikgeworICAgICAgICAgICAgICAg
ICAgICBtX2luaXRpYWxpemVkUGluID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZ19qc2ND
b25maWcuYXJtNjRlSGFzaFBpbnMuYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisgICAg
ICAgICAgICAgICAgICAgIHNldFVwZGF0ZWRIYXNoKDAsIDAsIGRpdmVyc2lmaWVyKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9oYXNoID0gMDsKKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgdWludDMyX3QgY3VycmVudEhhc2ggPSB0aGlzLT5jdXJy
ZW50SGFzaChpbmRleCwgZGl2ZXJzaWZpZXIpOwogICAgICAgICAgICAgdWludDY0X3QgbmV4dElu
ZGV4ID0gaW5kZXggKyAxOwogICAgICAgICAgICAgdWludDMyX3Qgb3V0cHV0ID0gbmV4dFZhbHVl
KGluc3RydWN0aW9uLCBuZXh0SW5kZXgsIGN1cnJlbnRIYXNoKTsKQEAgLTIzNSwyOSArMjU5LDI4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIChhID4+IDM5KSBeIChiID4+
IDIzKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQzMl90
IGJpdHNGb3JEaXZlcnNpZmllcih2b2lkKiBkaXZlcnNpZmllcikKKyAgICAgICAgc3RhdGljIEFM
V0FZU19JTkxJTkUgdWludDMyX3QgcGluKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGRpdmVyc2lmaWVyKTsKKyAgICAgICAgICAgIHJldHVy
biBnX2pzY0NvbmZpZy5hcm02NGVIYXNoUGlucy5waW5Gb3JDdXJyZW50VGhyZWFkKCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGN1cnJlbnRIYXNoKHVpbnQz
Ml90IGluZGV4LCB2b2lkKiBkaXZlcnNpZmllcikKKyAgICAgICAgQUxXQVlTX0lOTElORSB1aW50
MzJfdCBjdXJyZW50SGFzaCh1aW50MzJfdCBpbmRleCwgdm9pZCopCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGJvb2wgaGFzaEZpZWxkSXNUYWdnZWQgPSBpbmRleCA9PSAwOwotICAgICAgICAgICAg
aWYgKGhhc2hGaWVsZElzVGFnZ2VkKQotICAgICAgICAgICAgICAgIHJldHVybiB1bnRhZ0ludCht
X2hhc2gsIG1ha2VEaXZlcnNpZmllcihpbml0aWFsaXphdGlvbk5hbWVzcGFjZSwgaW5kZXgsIGJp
dHNGb3JEaXZlcnNpZmllcihkaXZlcnNpZmllcikpKTsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhw
ciAoc2hvdWxkU2lnbikKKyAgICAgICAgICAgICAgICByZXR1cm4gdW50YWdJbnQobV9oYXNoLCBt
YWtlRGl2ZXJzaWZpZXIoaW5pdGlhbGl6YXRpb25OYW1lc3BhY2UsIGluZGV4LCBwaW4oKSkpOwog
ICAgICAgICAgICAgcmV0dXJuIG1faGFzaDsKICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXRVcGRhdGVkSGFzaCh1aW50MzJfdCB2YWx1ZSwgdWludDMyX3QgaW5kZXgs
IHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VXBkYXRl
ZEhhc2godWludDMyX3QgdmFsdWUsIHVpbnQzMl90IGluZGV4LCB2b2lkKikKICAgICAgICAgewot
ICAgICAgICAgICAgYm9vbCBzaG91bGRUYWdIYXNoRmllbGQgPSBpbmRleCA9PSAwOwotICAgICAg
ICAgICAgaWYgKHNob3VsZFRhZ0hhc2hGaWVsZCkKLSAgICAgICAgICAgICAgICBtX2hhc2ggPSB0
YWdJbnQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSwgbWFrZURpdmVyc2lmaWVyKGluaXRp
YWxpemF0aW9uTmFtZXNwYWNlLCBpbmRleCwgYml0c0ZvckRpdmVyc2lmaWVyKGRpdmVyc2lmaWVy
KSkpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzaG91bGRTaWduKQorICAgICAgICAgICAg
ICAgIG1faGFzaCA9IHRhZ0ludChzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpLCBtYWtlRGl2
ZXJzaWZpZXIoaW5pdGlhbGl6YXRpb25OYW1lc3BhY2UsIGluZGV4LCBwaW4oKSkpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faGFzaCA9IHZhbHVlOworICAgICAgICAgICAg
ICAgIG1faGFzaCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CiAgICAgICAgIH0KIAog
ICAgICAgICB1aW50NjRfdCBtX2hhc2g7CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZFBpbiB7
IGZhbHNlIH07CiAgICAgfTsKICNlbmRpZiAvLyBDUFUoQVJNNjRFKQogCkBAIC00MDksNiArNDMy
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9zdG9yYWdlLmJ1ZmZlcigpOyB9CiAjZW5kaWYKIAorI2lmIENQVShBUk02NEUpCisgICAg
ICAgIEFSTTY0RUhhc2g8dHJ1ZT4mIGFybTY0ZUhhc2goKSB7IHJldHVybiBtX2hhc2g7IH0KKyNl
bmRpZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3Jh
bFR5cGU+CiAgICAgICAgIHZvaWQgcHV0SW50ZWdyYWwoSW50ZWdyYWxUeXBlIHZhbHVlKQpAQCAt
NDU5LDcgKzQ4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBc3NlbWJsZXJEYXRhIG1f
c3RvcmFnZTsKICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKICNpZiBDUFUoQVJNNjRFKQotICAg
ICAgICBBUk02NEVIYXNoIG1faGFzaDsKKyAgICAgICAgQVJNNjRFSGFzaDx0cnVlPiBtX2hhc2g7
CiAgICAgICAgIEFzc2VtYmxlckRhdGEgbV9oYXNoZXM7CiAjZW5kaWYKICAgICB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZp
c2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBMaW5rQnVmZmVy
Ojpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogICAgIHVpbnQ4X3QqIGluRGF0YSA9IGJpdHdpc2Vf
Y2FzdDx1aW50OF90Kj4obV9hc3NlbWJsZXJTdG9yYWdlLmJ1ZmZlcigpKTsKICNpZiBDUFUoQVJN
NjRFKQogICAgIHZvaWQqIGJ1ZmZlclB0ciA9ICZtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5i
dWZmZXIoKTsKLSAgICBBUk02NEVIYXNoIHZlcmlmeVVuY29tcGFjdGVkSGFzaCB7IGJ1ZmZlclB0
ciB9OworICAgIEFSTTY0RUhhc2g8ZmFsc2U+IHZlcmlmeVVuY29tcGFjdGVkSGFzaCB7IGJ1ZmZl
clB0ciB9OwogICAgIG1fYXNzZW1ibGVySGFzaGVzU3RvcmFnZSA9IG1hY3JvQXNzZW1ibGVyLm1f
YXNzZW1ibGVyLmJ1ZmZlcigpLnJlbGVhc2VBc3NlbWJsZXJIYXNoZXMoKTsKICAgICB1aW50MzJf
dCogaW5IYXNoZXMgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3QqPihtX2Fzc2VtYmxlckhhc2hlc1N0
b3JhZ2UuYnVmZmVyKCkpOwogI2VuZGlmCkBAIC00MzgsNiArNDM4LDEwIEBAIHZvaWQgTGlua0J1
ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXIKICAgICAgICAgaW5pdGlhbFNpemUgPSBtYWNy
b0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIH0KIAorI2lmIENQVShBUk02
NEUpCisgICAgbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkuYXJtNjRlSGFzaCgp
LmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisjZW5kaWYKKwogICAgIG1fZXhlY3V0
YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGlu
aXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFS
TTY0RUhhc2hQaW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWN1cmVBUk02
NEVIYXNoUGlucy5oIgorCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1
ZGUgIkZhc3RKSVRQZXJtaXNzaW9ucy5oIgorI2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5z
SW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9j
ay5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQp
CisKK3N0cnVjdCBXcml0ZVRvSklUUmVnaW9uU2NvcGUgeworICAgIFdyaXRlVG9KSVRSZWdpb25T
Y29wZSgpCisgICAgeworICAgICAgICB0aHJlYWRTZWxmUmVzdHJpY3RSV1hUb1JXKCk7CisgICAg
fQorCisgICAgfldyaXRlVG9KSVRSZWdpb25TY29wZSgpCisgICAgeworICAgICAgICB0aHJlYWRT
ZWxmUmVzdHJpY3RSV1hUb1JYKCk7CisgICAgfQorfTsKKworc3RydWN0IFZhbGlkYXRlQXRvbWlj
aXR5U2NvcGUgeworICAgIFZhbGlkYXRlQXRvbWljaXR5U2NvcGUoU2VjdXJlQVJNNjRFSGFzaFBp
bnM6Ok1ldGFkYXRhKiBtZXRhZGF0YSkKKyAgICAgICAgOiBtX21ldGFkYXRhKG1ldGFkYXRhKQor
ICAgIHsKKyAgICAgICAgdWludDMyX3QgdmFsaWRhdGVBdG9taWNpdHkgPSBtX21ldGFkYXRhLT5h
c3NlcnROb3RSZWVudHJhbnQuZXhjaGFuZ2UoMSwgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2YWxpZGF0ZUF0b21pY2l0eSk7CisgICAgfQorCisg
ICAgflZhbGlkYXRlQXRvbWljaXR5U2NvcGUoKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdmFs
aWRhdGVBdG9taWNpdHkgPSBtX21ldGFkYXRhLT5hc3NlcnROb3RSZWVudHJhbnQuZXhjaGFuZ2Uo
MCwgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZh
bGlkYXRlQXRvbWljaXR5ID09IDEpOworICAgIH0KKyAgICBTZWN1cmVBUk02NEVIYXNoUGluczo6
TWV0YWRhdGEqIG1fbWV0YWRhdGE7Cit9OworCisvLyBUaGlzIGNsYXNzIGlzIGFsbG9jYXRlZCBv
bmNlIHBlciBwcm9jZXNzLCBzbyBzdGF0aWMgbG9jayBpcyBvay4KK3N0YXRpYyBMb2NrIGhhc2hQ
aW5zTG9jazsKKworQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCogYWxsb2NhdGVJbkV4ZWN1dGFi
bGVNZW1vcnkoc2l6ZV90IHNpemUpCit7CisgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFu
ZGxlID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoc2l6ZSwgSklU
Q29tcGlsYXRpb25NdXN0U3VjY2VlZCkubGVha1JlZigpOworICAgIFJFTEVBU0VfQVNTRVJUKGhh
bmRsZSk7CisgICAgdm9pZCogbWVtb3J5ID0gYml0d2lzZV9jYXN0PGNoYXIqPihoYW5kbGUtPnN0
YXJ0KCkudW50YWdnZWRQdHIoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhtZW1vcnkp
ICYmIGlzSklUUEMoYml0d2lzZV9jYXN0PGNoYXIqPihtZW1vcnkpICsgc2l6ZSAtIDEpKTsKKyAg
ICByZXR1cm4gbWVtb3J5OworfQorCitzdGF0aWMgdm9pZCBpbml0aWFsaXplUGFnZShjb25zdCBX
cml0ZVRvSklUUmVnaW9uU2NvcGUmLCBTZWN1cmVBUk02NEVIYXNoUGluczo6UGFnZSogcGFnZSkK
K3sKKyAgICBuZXcgKHBhZ2UpIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpQYWdlOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBTZWN1cmVBUk02NEVIYXNoUGluczo6bnVtRW50cmllc1BlclBh
Z2U7ICsraSkgeworICAgICAgICBhdXRvJiBlbnRyeSA9IHBhZ2UtPmVudHJ5KGkpOworICAgICAg
ICBlbnRyeS5waW4gPSAwOworICAgICAgICBlbnRyeS5rZXkgPSAwOworICAgIH0KK30KKwordm9p
ZCBTZWN1cmVBUk02NEVIYXNoUGluczo6aW5pdGlhbGl6ZUF0U3RhcnR1cCgpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoIW1fbWVtb3J5KTsKKworICAgIG1fbWVtb3J5ID0gYml0d2lzZV9jYXN0PGNo
YXIqPihhbGxvY2F0ZUluRXhlY3V0YWJsZU1lbW9yeShzaXplb2YoTWV0YWRhdGEpICsgUGFnZTo6
YWxsb2NhdGlvblNpemUoKSkpICsgc2l6ZW9mKE1ldGFkYXRhKTsKKworICAgIHsKKyAgICAgICAg
V3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2NvcGU7CisKKyAgICAgICAgbmV3IChtZXRhZGF0
YSgpKSBNZXRhZGF0YTsgCisgICAgICAgIGluaXRpYWxpemVQYWdlKHdyaXRlU2NvcGUsIGZpcnN0
UGFnZSgpKTsKKyAgICB9Cit9CisKK3VpbnQ2NF90IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjphbGxv
Y2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBoYXNoUGlu
c0xvY2sgfTsKKworICAgIGF1dG8qIG1ldGFkYXRhID0gdGhpcy0+bWV0YWRhdGEoKTsKKworICAg
IGF1dG8gZmluZFJlc3VsdCA9IGZpbmRFbnRyeSgpOworICAgIEVudHJ5KiBwcmVleGlzdGluZ0Vu
dHJ5ID0gZmluZFJlc3VsdC5lbnRyeTsKKyAgICBzaXplX3QgcHJlZXhpc3RpbmdFbnRyeUluZGV4
ID0gZmluZFJlc3VsdC5pbmRleDsKKyAgICBQYWdlKiBwcmVleGlzdGluZ0VudHJ5UGFnZSA9IGZp
bmRSZXN1bHQucGFnZTsKKworICAgIHNpemVfdCBuZXdFbnRyeTsKKyAgICBQYWdlKiBuZXdFbnRy
eVBhZ2U7CisgICAgeworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIHNpemVf
dCBiYXNlSW5kZXggPSAwOworICAgICAgICBQYWdlKiBsYXN0UGFnZSA9IG51bGxwdHI7CisgICAg
ICAgIGZvckVhY2hQYWdlKFsmXSAoUGFnZSYgcGFnZSkgeworICAgICAgICAgICAgc2l6ZV90IGJp
dCA9IHBhZ2UuZmluZENsZWFyQml0KCk7CisgICAgICAgICAgICBpZiAoYml0IDwgbnVtRW50cmll
c1BlclBhZ2UpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgbmV3RW50cnkgPSBiYXNlSW5kZXggKyBiaXQ7CisgICAgICAgICAgICAgICAgbmV3RW50cnlQ
YWdlID0gJnBhZ2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9u
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYmFzZUluZGV4ICs9IG51bUVudHJpZXNQ
ZXJQYWdlOworICAgICAgICAgICAgbGFzdFBhZ2UgPSAmcGFnZTsKKyAgICAgICAgICAgIHJldHVy
biBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKKworICAgICAgICBpZiAo
VU5MSUtFTFkoIWZvdW5kKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxhc3RQYWdl
LT5uZXh0KTsKKyAgICAgICAgICAgIFBhZ2UqIG5leHRQYWdlID0gYml0d2lzZV9jYXN0PFBhZ2Uq
PihhbGxvY2F0ZUluRXhlY3V0YWJsZU1lbW9yeShQYWdlOjphbGxvY2F0aW9uU2l6ZSgpKSk7Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRl
U2NvcGU7CisgICAgICAgICAgICAgICAgVmFsaWRhdGVBdG9taWNpdHlTY29wZSB2YWxpZGF0ZUF0
b21pY2l0eShtZXRhZGF0YSk7CisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVBhZ2Uod3JpdGVT
Y29wZSwgbmV4dFBhZ2UpOworICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIGJlIHJlYWQgZnJv
bSBjb25jdXJyZW50bHkuIE1ha2Ugc3VyZSBpdCdzIGluIGEgZ29vZCBzdGF0ZSBmb3IgdGhhdCB0
byBoYXBwZW4uCisgICAgICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAg
ICAgICAgICAgICBsYXN0UGFnZS0+bmV4dCA9IG5leHRQYWdlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbmV3RW50cnlQYWdlID0gbmV4dFBhZ2U7CisgICAgICAgICAgICBzaXplX3QgYml0
ID0gbmV4dFBhZ2UtPmZpbmRDbGVhckJpdCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Yml0ID09IDApOworICAgICAgICAgICAgbmV3RW50cnkgPSBiYXNlSW5kZXggKyBiaXQ7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB1aW50NjRfdCBwaW47CisgICAgeworICAgICAgICBXVEY6OmNv
bXBpbGVyRmVuY2UoKTsKKworICAgICAgICBXcml0ZVRvSklUUmVnaW9uU2NvcGUgd3JpdGVTY29w
ZTsKKyAgICAgICAgVmFsaWRhdGVBdG9taWNpdHlTY29wZSB2YWxpZGF0ZUF0b21pY2l0eShtZXRh
ZGF0YSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhtZXRhZGF0YSkpOworCisg
ICAgICAgIHBpbiA9IG1ldGFkYXRhLT5uZXh0UGluLmV4Y2hhbmdlQWRkKDEsIHN0ZDo6bWVtb3J5
X29yZGVyX3NlcV9jc3QpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChwaW4pOworCisgICAgICAg
IG5ld0VudHJ5UGFnZS0+c2V0SXNJblVzZShuZXdFbnRyeSk7CisKKyAgICAgICAgaWYgKHByZWV4
aXN0aW5nRW50cnkgJiYgcHJlZXhpc3RpbmdFbnRyeUluZGV4IDwgbmV3RW50cnkpIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHByZWV4aXN0aW5nRW50cnlQYWdlLT5pc0luVXNlKHByZWV4
aXN0aW5nRW50cnlJbmRleCkpOworCisgICAgICAgICAgICBuZXdFbnRyeVBhZ2UtPmVudHJ5KG5l
d0VudHJ5KSA9ICpwcmVleGlzdGluZ0VudHJ5OworICAgICAgICAgICAgbmV3RW50cnkgPSBwcmVl
eGlzdGluZ0VudHJ5SW5kZXg7CisgICAgICAgICAgICBuZXdFbnRyeVBhZ2UgPSBwcmVleGlzdGlu
Z0VudHJ5UGFnZTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5ID0gbmV3RW50cnlQ
YWdlLT5lbnRyeShuZXdFbnRyeSk7CisgICAgICAgIGVudHJ5LnBpbiA9IHBpbjsKKyAgICAgICAg
ZW50cnkua2V5ID0ga2V5Rm9yQ3VycmVudFRocmVhZCgpOworICAgIH0KKworICAgIHJldHVybiBw
aW47Cit9CisKK3ZvaWQgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmRlYWxsb2NhdGVQaW5Gb3JDdXJy
ZW50VGhyZWFkKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGFzaFBpbnNMb2NrIH07CisgICAg
YXV0byogbWV0YWRhdGEgPSB0aGlzLT5tZXRhZGF0YSgpOworCisgICAgYXV0byBjbGVhciA9IFsm
XSAoRW50cnkmIGVudHJ5KSB7CisgICAgICAgIGVudHJ5LnBpbiA9IDA7CisgICAgICAgIGVudHJ5
LmtleSA9IDA7CisgICAgfTsKKworICAgIFBhZ2UqIHJlbW92YWxQYWdlOworICAgIHNpemVfdCBy
ZW1vdmFsSW5kZXg7CisgICAgeworICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBmaW5kRW50cnko
KTsKKyAgICAgICAgRW50cnkmIGVudHJ5ID0gKmZpbmRSZXN1bHQuZW50cnk7CisgICAgICAgIHJl
bW92YWxJbmRleCA9IGZpbmRSZXN1bHQuaW5kZXg7CisgICAgICAgIHJlbW92YWxQYWdlID0gZmlu
ZFJlc3VsdC5wYWdlOworCisgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNjb3Bl
OworICAgICAgICBWYWxpZGF0ZUF0b21pY2l0eVNjb3BlIHZhbGlkYXRlQXRvbWljaXR5KG1ldGFk
YXRhKTsKKworICAgICAgICBjbGVhcihlbnRyeSk7CisgICAgICAgIHJlbW92YWxQYWdlLT5jbGVh
cklzSW5Vc2UocmVtb3ZhbEluZGV4KTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGltcGxlbWVudGF0
aW9uIGFsbG93cyByZWN1cnNpdmUgdXNlcyBvZiB0aGUgTWFjcm9Bc3NlbWJsZXIsIGZvcm1pbmcg
YSBzdGFjaworICAgIC8vIGxpa2UgZGF0YSBzdHJ1Y3R1cmUuIFRoZSBpbiB1c2UgcGluICh0b3Ag
b2YgdGhlIHN0YWNrKSB3aWxsIGFsd2F5cyBiZSBhdCB0aGUgbG93ZXN0CisgICAgLy8gcGFnZSBh
bmQgbG93ZXN0IGluZGV4IGluIHRoZSBiaXQgdmVjdG9yLiBTbyB3aGVuIHdlIGRlYWxsb2NhdGUg
dGhlIGN1cnJlbnQgdG9wIG9mIHRoZQorICAgIC8vIHN0YWNrLCB3ZSBuZWVkIHRvIGZpbmQgdGhl
IG5leHQgZW50cnkgaW4gdGhlIHN0YWNrLCBhbmQgZW5zdXJlIGl0J3MgYXQgdGhlIGxvd2VzdCBp
bmRleC4KKyAgICAvLyBTbyBpZiB0aGVyZSBhcmUgb3RoZXIgZW50cmllcyBmb3IgdGhpcyBjdXJy
ZW50IHRocmVhZCwgd2UgZmluZCB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QKKyAgICAvLyBwaW4g
KG5leHQgdG9wIG9mIHN0YWNrIHZhbHVlKSwgYW5kIHJlcGxhY2UgaXQgYXQgdGhlIGluZGV4IHdl
IHdlcmUgdXNpbmcgYmVmb3JlLgorICAgIC8vIEFkZGl0aW9uIGFsc28gbWFpbnRhaW5zIHRoaXMg
aW52YXJpYW50IGJ5IGFsd2F5cyBwbGFjaW5nIHRoZSBuZXdlc3QgZW50cnkgZm9yCisgICAgLy8g
dGhlIGN1cnJlbnQgdGhyZWFkIGF0IHRoZSBsb3dlc3QgaW5kZXguCisgICAgeworICAgICAgICB1
aW50NjRfdCBrZXkgPSBrZXlGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKKyAgICAgICAgdWludDY0X3QgbWF4UGluID0gMDsKKyAgICAgICAgc2l6ZV90IG1h
eEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKKyAgICAgICAgUGFn
ZSogbWF4UGFnZSA9IG51bGxwdHI7CisKKyAgICAgICAgZm9yRWFjaEVudHJ5KFsmXSAoUGFnZSYg
cGFnZSwgRW50cnkmIGVudHJ5LCBzaXplX3QgaW5kZXgpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGVudHJ5LnBpbik7CisgICAgICAgICAgICBpZiAoZW50cnkua2V5ID09IGtleSAmJiBl
bnRyeS5waW4gPiBtYXhQaW4pIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgbWF4UGluID0gZW50cnkucGluOworICAgICAgICAgICAgICAgIG1heEluZGV4
ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgbWF4UGFnZSA9ICZwYWdlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZW1vdmFsSW5kZXggPCBtYXhJbmRleCk7CisKKyAgICAgICAgICAgIFdyaXRlVG9KSVRSZWdp
b25TY29wZSB3cml0ZVNjb3BlOworICAgICAgICAgICAgVmFsaWRhdGVBdG9taWNpdHlTY29wZSB2
YWxpZGF0ZUF0b21pY2l0eShtZXRhZGF0YSk7CisKKyAgICAgICAgICAgIHJlbW92YWxQYWdlLT5l
bnRyeShyZW1vdmFsSW5kZXgpID0gbWF4UGFnZS0+ZW50cnkobWF4SW5kZXgpOworICAgICAgICAg
ICAgY2xlYXIobWF4UGFnZS0+ZW50cnkobWF4SW5kZXgpKTsKKyAgICAgICAgICAgIG1heFBhZ2Ut
PmNsZWFySXNJblVzZShtYXhJbmRleCk7CisgICAgICAgICAgICByZW1vdmFsUGFnZS0+c2V0SXNJ
blVzZShyZW1vdmFsSW5kZXgpOworICAgICAgICB9CisgICAgfQorfQorCisjZW5kaWYgLy8gQ1BV
KEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNo
UGlucy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
U2VjdXJlQVJNNjRFSGFzaFBpbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgPHd0Zi9CaXRt
YXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNlY3VyZUFSTTY0RUhhc2hQaW5zIHsK
K3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVBdFN0YXJ0dXAo
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB1aW50NjRfdCBhbGxvY2F0ZVBpbkZvckN1cnJlbnRU
aHJlYWQoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRlYWxsb2NhdGVQaW5Gb3JDdXJy
ZW50VGhyZWFkKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdWludDY0X3QgcGluRm9yQ3VycmVu
dFRocmVhZCgpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtRW50cmllc1BlclBh
Z2UgPSA2NDsKKworICAgIHN0cnVjdCBFbnRyeSB7CisgICAgICAgIHVpbnQ2NF90IHBpbjsKKyAg
ICAgICAgdWludDY0X3Qga2V5OworICAgIH07CisKKyAgICBzdHJ1Y3QgYWxpZ25hcyhhbGlnbm9m
KEVudHJ5KSkgUGFnZSB7CisgICAgICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoKSB7
IHJldHVybiBzaXplb2YoUGFnZSkgKyBudW1FbnRyaWVzUGVyUGFnZSAqIHNpemVvZihFbnRyeSk7
IH0KKworICAgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXNrID0gbnVtRW50cmllc1Bl
clBhZ2UgLSAxOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEobWFzayAmIG51bUVudHJpZXNQZXJQ
YWdlKSk7CisKKyAgICAgICAgaW5saW5lIEVudHJ5JiBlbnRyeShzaXplX3QgaW5kZXgpCisgICAg
ICAgIHsgCisgICAgICAgICAgICBFbnRyeSogZW50cmllcyA9IGJpdHdpc2VfY2FzdDxFbnRyeSo+
KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBzaXplb2YoUGFnZSkpOworICAgICAgICAgICAg
cmV0dXJuIGVudHJpZXNbaW5kZXggJiBtYXNrXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBzZXRJc0luVXNlKHNpemVfdCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAg
aXNJblVzZU1hcC5zZXQoaW5kZXggJiBtYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
Y2xlYXJJc0luVXNlKHNpemVfdCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaXNJblVz
ZU1hcC5zZXQoaW5kZXggJiBtYXNrLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IGlzSW5Vc2Uoc2l6ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJ
blVzZU1hcC5nZXQoaW5kZXggJiBtYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBm
aW5kQ2xlYXJCaXQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJblVzZU1hcC5m
aW5kQml0KDAsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KKyAgICAgICAgdm9pZCBmb3JFYWNoU2V0Qml0KEZ1bmN0aW9uIGZ1bmN0aW9u
KQorICAgICAgICB7CisgICAgICAgICAgICBpc0luVXNlTWFwLmZvckVhY2hTZXRCaXQoZnVuY3Rp
b24pOworICAgICAgICB9CisKKyAgICAgICAgUGFnZSogbmV4dCB7IG51bGxwdHIgfTsKKyAgICBw
cml2YXRlOgorICAgICAgICBCaXRtYXA8bnVtRW50cmllc1BlclBhZ2U+IGlzSW5Vc2VNYXA7Cisg
ICAgfTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFBhZ2UpICUgYWxpZ25vZihFbnRyeSkg
PT0gMCk7CisKKyAgICBzdHJ1Y3QgYWxpZ25hcyhhbGlnbm9mKFBhZ2UpKSBNZXRhZGF0YSB7Cisg
ICAgICAgIEF0b21pYzx1aW50NjRfdD4gbmV4dFBpbiB7IDEgfTsKKyAgICAgICAgQXRvbWljPHVp
bnQzMl90PiBhc3NlcnROb3RSZWVudHJhbnQgeyAwIH07CisgICAgfTsKKworICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKE1ldGFkYXRhKSAlIGFsaWdub2YoUGFnZSkgPT0gMCk7CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIHVpbnQ2NF90IGtleUZvckN1cnJlbnRUaHJlYWQoKTsKKworICAgIHN0cnVj
dCBGaW5kUmVzdWx0IHsKKyAgICAgICAgRW50cnkqIGVudHJ5IHsgbnVsbHB0ciB9OworICAgICAg
ICBzaXplX3QgaW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIH07Cisg
ICAgICAgIFBhZ2UqIHBhZ2UgeyBudWxscHRyIH07CisgICAgfTsKKyAgICBGaW5kUmVzdWx0IGZp
bmRFbnRyeSgpOworCisgICAgaW5saW5lIE1ldGFkYXRhKiBtZXRhZGF0YSgpIHsgcmV0dXJuIGJp
dHdpc2VfY2FzdDxNZXRhZGF0YSo+KGJpdHdpc2VfY2FzdDxjaGFyKj4obV9tZW1vcnkpIC0gc2l6
ZW9mKE1ldGFkYXRhKSk7IH0KKyAgICBpbmxpbmUgUGFnZSogZmlyc3RQYWdlKCkgeyByZXR1cm4g
Yml0d2lzZV9jYXN0PFBhZ2UqPihtX21lbW9yeSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hQYWdlKEZ1bmN0aW9uKTsKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hFbnRyeShGdW5jdGlvbik7
CisKKyAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TZWN1cmVBUk02
NEVIYXNoUGluc0lubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGlucy5o
IgorCisjaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNlIEpTQyB7CisK
K0FMV0FZU19JTkxJTkUgdWludDY0X3QgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmtleUZvckN1cnJl
bnRUaHJlYWQoKQoreworICAgIHVpbnQ2NF90IHJlc3VsdDsKKyAgICBhc20gKAorICAgICAgICAi
bXJzICV4W3Jlc3VsdF0sIFRQSURSUk9fRUwwIgorICAgICAgICA6IFtyZXN1bHRdICI9ciIgKHJl
c3VsdCkKKyAgICAgICAgOgorICAgICAgICA6CisgICAgKTsKKyAgICByZXR1cm4gcmVzdWx0ICsg
MTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxXQVlTX0lOTElORSB2b2lk
IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpmb3JFYWNoUGFnZShGdW5jdGlvbiBmdW5jdGlvbikKK3sK
KyAgICBmb3IgKFBhZ2UqIHBhZ2UgPSBmaXJzdFBhZ2UoKTsgcGFnZTsgcGFnZSA9IHBhZ2UtPm5l
eHQpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhwYWdlKSk7CisgICAgICAgIGlm
IChmdW5jdGlvbigqcGFnZSkgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxXQVlT
X0lOTElORSB2b2lkIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpmb3JFYWNoRW50cnkoRnVuY3Rpb24g
ZnVuY3Rpb24pCit7CisgICAgc2l6ZV90IGJhc2VJbmRleCA9IDA7CisgICAgZm9yRWFjaFBhZ2Uo
WyZdIChQYWdlJiBwYWdlKSB7CisgICAgICAgIEl0ZXJhdGlvblN0YXR1cyBpdGVyYXRpb25TdGF0
dXMgPSBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICBwYWdlLmZvckVhY2hTZXRC
aXQoWyZdIChzaXplX3QgYml0SW5kZXgpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGJh
c2VJbmRleCArIGJpdEluZGV4OworICAgICAgICAgICAgRW50cnkmIGVudHJ5ID0gcGFnZS5lbnRy
eShpbmRleCk7CisgICAgICAgICAgICBBU1NFUlQoaXNKSVRQQygmZW50cnkpKTsKKyAgICAgICAg
ICAgIGl0ZXJhdGlvblN0YXR1cyA9IGZ1bmN0aW9uKHBhZ2UsIGVudHJ5LCBpbmRleCk7CisgICAg
ICAgICAgICByZXR1cm4gaXRlcmF0aW9uU3RhdHVzOworICAgICAgICB9KTsKKyAgICAgICAgYmFz
ZUluZGV4ICs9IG51bUVudHJpZXNQZXJQYWdlOworICAgICAgICByZXR1cm4gaXRlcmF0aW9uU3Rh
dHVzOworICAgIH0pOworfQorCitBTFdBWVNfSU5MSU5FIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpG
aW5kUmVzdWx0IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpmaW5kRW50cnkoKQoreworICAgIHVpbnQ2
NF90IGtleSA9IGtleUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAvLyBXZSBjYW4gY2FsbCB0aGlz
IGNvbmN1cnJlbnRseSB0byB0aGUgYml0IHZlY3RvciBiZWluZyBtb2RpZmllZAorICAgIC8vIHNp
bmNlIHdlIGVpdGhlciBjYWxsIHRoaXMgd2hlbiB3ZSdyZSBsb2NrZWQsIG9yIHdlIGNhbGwgaXQg
d2hlbgorICAgIC8vIHdlIGtub3cgdGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzLiBXaGVuIHRoZSBl
bnRyeSBhbHJlYWR5IGV4aXN0cywKKyAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGJpdCBjYW4ndCBn
ZXQgZmxpcHBlZCBzcHVyaW91c2x5IGR1cmluZyBjb25jdXJyZW50CisgICAgLy8gbW9kaWZpY2F0
aW9uLCBzbyB3ZSdyZSBndWFyYW50ZWVkIHRvIGZpbmQgdGhlIHZhbHVlLiBXZSBtaWdodCBzZWUK
KyAgICAvLyBhbiBlbnRyeSBhcyBpdCdzIGJlaW5nIHdyaXR0ZW4gdG8sIGJ1dCB0aGF0J3MgYWxz
byBmaW5lLCBzaW5jZSBpdAorICAgIC8vIHdvbid0IGhhdmUgb3VyIHNhbWUga2V5LiBJdCdsbCBl
aXRoZXIgYmUgemVybywgb3IgYSBkaWZmZXJlbnQga2V5LgorCisgICAgRmluZFJlc3VsdCByZXN1
bHQ7CisgICAgZm9yRWFjaEVudHJ5KFsmXSAoUGFnZSYgcGFnZSwgRW50cnkmIGVudHJ5LCBzaXpl
X3QgaW5kZXgpIHsKKyAgICAgICAgaWYgKGVudHJ5LmtleSA9PSBrZXkpIHsKKyAgICAgICAgICAg
IHJlc3VsdC5lbnRyeSA9ICZlbnRyeTsKKyAgICAgICAgICAgIHJlc3VsdC5wYWdlID0gJnBhZ2U7
CisgICAgICAgICAgICByZXN1bHQuaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIHJldHVybiBJ
dGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlv
blN0YXR1czo6Q29udGludWU7CisgICAgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitB
TFdBWVNfSU5MSU5FIHVpbnQ2NF90IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpwaW5Gb3JDdXJyZW50
VGhyZWFkKCkKK3sKKyAgICByZXR1cm4gZmluZEVudHJ5KCkuZW50cnktPnBpbjsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAy
ODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCwxMyArMjQsMTMgQEAKICNpbmNsdWRlICJDZWxsQXR0cmlidXRlcy5o
IgogI2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgogI2luY2x1ZGUgIkhlYXBDZWxsLmgiCi0j
aW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2Vha1NldC5oIgogI2luY2x1
ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9C
aXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvQ291bnRpbmdMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0aW9uU3RhdHVzLmg+CiAjaW5jbHVk
ZSA8d3RmL1BhZ2VCbG9jay5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyODgw
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiwxMyArMjIsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQmxv
Y2tEaXJlY3RvcnkuaCIKLSNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJN
YXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiUHJl
Y2lzZUFsbG9jYXRpb24uaCIKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvQmFnLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0aW9uU3RhdHVz
Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjg4MDA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1
ZGUgIkhhbmRsZVR5cGVzLmgiCi0jaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCisjaW5jbHVk
ZSA8d3RmL0l0ZXJhdGlvblN0YXR1cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyODgwMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTEgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVk
ZSAiRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmgiCi0jaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVz
LmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9G
aWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL0l0ZXJhdGlvblN0YXR1cy5oPgogI2luY2x1ZGUg
PHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CiAjaW5j
bHVkZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZvLmgiCi0jaW5jbHVkZSAiSXRlcmF0aW9uU3Rh
dHVzLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKICNpbmNsdWRlICJNb2R1bGVTY29wZURhdGEuaCIK
ICNpbmNsdWRlICJOb2Rlcy5oIgpAQCAtMzgsNiArMzcsNyBAQAogI2luY2x1ZGUgIlZhcmlhYmxl
RW52aXJvbm1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRml4ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuY3BwCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAg
QEAgdm9pZCBpbml0aWFsaXplKCkKICAgICAgICAgICAgIGlmICghZ19qc2NDb25maWcudm0uY2Fu
VXNlSklUKSB7CiAgICAgICAgICAgICAgICAgT3B0aW9uczo6dXNlSklUKCkgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisgICAgICAg
ICAgICAgICAgZ19qc2NDb25maWcuYXJtNjRlSGFzaFBpbnMuaW5pdGlhbGl6ZUF0U3RhcnR1cCgp
OworI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgT3B0aW9uczo6Zmlu
YWxpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdGlvblN0
YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJh
dGlvblN0YXR1cy5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRpb25TdGF0dXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDM1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWVudW0gY2xhc3MgSXRlcmF0aW9uU3RhdHVzIHsKLSAg
ICBDb250aW51ZSwKLSAgICBEb25lCi19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCShyZXZpc2lvbiAyODgwMDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NDb25maWcuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkdhdGUuaCIKICNpbmNsdWRlICJPcGNv
ZGUuaCIKICNpbmNsdWRlICJPcHRpb25zTGlzdC5oIgorI2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhh
c2hQaW5zLmgiCiAjaW5jbHVkZSA8d3RmL1dURkNvbmZpZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTk5LDYgKzEwMCwxMCBAQCBzdHJ1Y3QgQ29uZmlnIHsKICNpZiBDUFUoQVJNNjRFKSAmJiBF
TkFCTEUoUFRSVEFHX0RFQlVHR0lORykKICAgICBXVEY6OlB0clRhZ0xvb2t1cCBwdHJUYWdMb29r
dXBSZWNvcmQ7CiAjZW5kaWYKKworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisgICAg
U2VjdXJlQVJNNjRFSGFzaFBpbnMgYXJtNjRlSGFzaFBpbnM7CisjZW5kaWYKIH07CiAKICNpZiBF
TkFCTEUoVU5JRklFRF9BTkRfRlJFRVpBQkxFX0NPTkZJR19SRUNPUkQpCkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjg4MDA1KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAyMi0wMS0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
KworICAgICAgICBVcGRhdGUgQVJNNjRFSGFzaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAgIChXVEY6OldvcmRU
eXBlPjo6Zm9yRWFjaFNldEJpdCBjb25zdCk6CisKIDIwMjItMDEtMTMgIEVsbGlvdHQgV2lsbGlh
bXMgIDxlbXdAYXBwbGUuY29tPgogCiAgICAgICAgIFtYQ0J1aWxkXSBBZGQgInByb2R1Y3QgZGVw
ZW5kZW5jaWVzIiB3aGljaCBpbmZsdWVuY2Ugd29ya3NwYWNlIGJ1aWxkIG9yZGVyCkluZGV4OiBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI4ODAwNSkK
KysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTQzMyw2ICs0MzMsNyBAQAogCQk1MUYxNzUyQTFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVy
c2lzdGVudEVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyc2lz
dGVudEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxQ0M2QjMyNEEy
NzdDMjAwNDM3N0Q2IC8qIFRyYW5zbGF0ZWRQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRyYW5zbGF0ZWRQcm9jZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2
QUVDOTExRjZCNEU1QzAwNjk1RjVEIC8qIE5vVGFpbENhbGxzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vVGFpbENhbGxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUyOTVCMDA0Mjc5MjBDNTQwMDZENzQ2QSAvKiBJdGVyYXRpb25TdGF0dXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSXRlcmF0aW9uU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQjIyOEMxMjQ1OERDODIwMDc1M0Q5MSAvKiBJQ1VIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElDVUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTYzNDgxRkEz
RTNBMDAwMjZBNTQ1IC8qIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBmb2xkZXI7IHBhdGggPSBTY3JpcHRzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaWduYWxzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNDUsNiArMTE0Niw3IEBACiAJCQkJRTMzNjY3NDkyNzIy
NTUwOTAwMjU5MTIyIC8qIEludDEyOC5jcHAgKi8sCiAJCQkJRjZENjdEMzIyNkY5MDE0MjAwNkUw
MzQ5IC8qIEludDEyOC5oICovLAogCQkJCTMzRkQ0ODExMjY1Q0IzODAwMEFCRTRGNCAvKiBJbnRl
cmZlcmVuY2VHcmFwaC5oICovLAorCQkJCTUyOTVCMDA0Mjc5MjBDNTQwMDZENzQ2QSAvKiBJdGVy
YXRpb25TdGF0dXMuaCAqLywKIAkJCQkwRjdFQjg1QjFGQThGRjQxMDBGMUFCQ0IgLyogSXNvTWFs
bG9jLmggKi8sCiAJCQkJMEY3RUI4NUMxRkE4RkY0MjAwRjFBQkNCIC8qIElzb01hbGxvY0lubGlu
ZXMuaCAqLywKIAkJCQk3Q0REN0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9y
cy5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQml0bWFwLmgJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYvd3Rm
L0JpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXJy
YXk+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRJbnRFeHRyYXMuaD4KQEAgLTcyLDYgKzczLDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
c3Vic3VtZXMoY29uc3QgQml0bWFwJikgY29uc3Q7CiAgICAgCisgICAgLy8gSWYgdGhlIGxhbWJk
YSByZXR1cm5zIGFuIEl0ZXJhdGlvblN0YXR1cywgd2UgdXNlIGl0LiBUaGUgbGFtYmRhIGNhbiBh
bHNvIHJldHVybgorICAgIC8vIHZvaWQsIGluIHdoaWNoIGNhc2UsIHdlJ2xsIGl0ZXJhdGUgZXZl
cnkgc2V0IGJpdC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFj
aFNldEJpdChjb25zdCBGdW5jJikgY29uc3Q7CiAgICAgCkBAIC0zODksOCArMzkyLDEzIEBAIGlu
bGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBzaXplX3QgYmFzZSA9IGkgKiB3b3JkU2l6ZTsKICAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCB3b3JkU2l6ZTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAod29yZCAm
IDEpCi0gICAgICAgICAgICAgICAgZnVuYyhiYXNlICsgaik7CisgICAgICAgICAgICBpZiAod29y
ZCAmIDEpIHsKKyAgICAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PEl0
ZXJhdGlvblN0YXR1cywgZGVjbHR5cGUoZnVuYyhiYXNlICsgaikpPikgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoZnVuYyhiYXNlICsgaikgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICBmdW5jKGJhc2UgKyBqKTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHdvcmQgPj49IDE7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9J
dGVyYXRpb25TdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JdGVyYXRpb25T
dGF0dXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9JdGVyYXRpb25TdGF0dXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsK
KworZW51bSBjbGFzcyBJdGVyYXRpb25TdGF0dXMgeworICAgIENvbnRpbnVlLAorICAgIERvbmUK
K307CisKK30KKwordXNpbmcgV1RGOjpJdGVyYXRpb25TdGF0dXM7Cg==
</data>
<flag name="commit-queue"
          id="475208"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449201</attachid>
            <date>2022-01-14 12:18:43 -0800</date>
            <delta_ts>2022-01-14 12:27:21 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>45967</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MDE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDIyLTAxLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBBUk02NEVIYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNo
OjpBUk02NEVIYXNoKToKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6fkFSTTY0RUhhc2gpOgor
ICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpkZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCk6
CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAgICAgIChKU0M6OkFSTTY0
RUhhc2g6OnBpbik6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OmN1cnJlbnRIYXNoKToKKyAg
ICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6c2V0VXBkYXRlZEhhc2gpOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXI6OmFybTY0ZUhhc2gpOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpi
aXRzRm9yRGl2ZXJzaWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29k
ZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFsbG9jYXRlKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V3Jp
dGVUb0pJVFJlZ2lvblNjb3BlOjpXcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpXcml0ZVRvSklUUmVnaW9uU2NvcGU6On5Xcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAg
ICAoSlNDOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlKToK
KyAgICAgICAgKEpTQzo6VmFsaWRhdGVBdG9taWNpdHlTY29wZTo6flZhbGlkYXRlQXRvbWljaXR5
U2NvcGUpOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUluRXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgIChKU0M6OmluaXRpYWxpemVQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmluaXRpYWxpemVBdFN0YXJ0dXApOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVI
YXNoUGluczo6YWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2Vj
dXJlQVJNNjRFSGFzaFBpbnM6OmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjptZXRhZGF0YSk6CisgICAgICAgIChKU0M6OlNlY3Vy
ZUFSTTY0RUhhc2hQaW5zOjpmaXJzdFBhZ2UpOgorICAgICAgICAqIGFzc2VtYmxlci9TZWN1cmVB
Uk02NEVIYXNoUGluc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0
RUhhc2hQaW5zOjprZXlGb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJN
NjRFSGFzaFBpbnM6OmZvckVhY2hQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmZvckVhY2hFbnRyeSk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5z
OjpmaW5kRW50cnkpOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGluczo6cGluRm9y
Q3VycmVudFRocmVhZCk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0NDb25m
aWcuaDoKKwogMjAyMi0wMS0xMyAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW1JJU0NWNjRdIHJpc2N2NjQgYmFja2VuZCBzaG91bGQgbG93ZXIgb2ZmbGlu
ZWFzbSBpbnN0cnVjdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBhc3NlbWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCiAg
ICAgYXNzZW1ibGVyL1JJU0NWNjRSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxlci9SZWdpc3Rlcklu
Zm8uaAorICAgIGFzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCisgICAgYXNzZW1ibGVy
L1NlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCiAgICAgYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCiAgICAgYXNzZW1ibGVyL1g4NlJlZ2lzdGVycy5oCiAgICAgYXNzZW1ibGVyL1g4Nl82NFJl
Z2lzdGVycy5oCkBAIC0xMDIzLDcgKzEwMjUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKICAgICBydW50
aW1lL0ludHJpbnNpYy5oCiAgICAgcnVudGltZS9JdGVyYXRpb25LaW5kLmgKLSAgICBydW50aW1l
L0l0ZXJhdGlvblN0YXR1cy5oCiAgICAgcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAogICAg
IHJ1bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuaAogICAgIHJ1bnRpbWUvSlNBcnJheS5oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcg
QEAgYXNzZW1ibGVyL1BlcmZMb2cuY3BwCiBhc3NlbWJsZXIvUHJpbnRlci5jcHAKIGFzc2VtYmxl
ci9Qcm9iZUNvbnRleHQuY3BwCiBhc3NlbWJsZXIvUHJvYmVTdGFjay5jcHAKK2Fzc2VtYmxlci9T
ZWN1cmVBUk02NEVIYXNoUGlucy5jcHAKIAogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5k
U3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwCiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRT
dGFja0J5TGluZWFyU2Nhbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODk1LDYgKzg5NSw4
IEBACiAJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAw
QjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVw
UmVkdWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBo
YXNlLmggKi87IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2
MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyog
U2VjdXJlQVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyQ0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNo
UGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTUyQ0FFQzc2Mjc5MEI5MDEwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0FFQzcy
Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkNEMEY1RDIyNDJG
NTY5MDA0QTE4QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAv
KiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVz
dGRmZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CkBAIC0yMDgzLDcg
KzIwODUsNiBAQAogCQlGRTQ4QkQ0NDIzMjQ1RTkzMDBGMTM2RDAgLyogSlNDQ29uZmlnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTQ4QkQ0MjIzMjQ1
RTg3MDBGMTM2RDAgLyogSlNDQ29uZmlnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU0OEU2MzgxRUIxMThEMjAwNUQ3QTk2IC8qIE9iamVjdElu
aXRpYWxpemF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFNDhFNjM2MUVCMTE4OEYwMDVEN0E5NiAvKiBPYmplY3RJbml0aWFsaXphdGlv
blNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkU0QkZGMkMxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRCRkYyQTFBRDQ3NkU3
MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCAqLzsgfTsKLQkJRkU0RDU1QjgxQUU3MTZD
QTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlv
blN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTA2ODY0MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTUzM0NBNTFGMjE3REIzMDAxNkExRkUgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFt
ZXdvcmsgKi87IH07CiAJCUZFNTMzQ0E2MUYyMTdEQjMwMDE2QTFGRSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwpAQCAtMzc4OSw2ICszNzkwLDkgQEAKIAkJNTJDNTU1NjUyMjRDMkFFNzAwOTlGNUND
IC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsdWVS
ZXBSZWR1Y3Rpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2
IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQ
cm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJl
QVJNNjRFSGFzaFBpbnNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZUFSTTY0RUhhc2hQ
aW5zSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkNBRUM3MzI3OTBC
OEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MkNBRUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTJDRDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhl
Y3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0
ZXN0ZGZnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcu
Y3BwOyBwYXRoID0gZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTYyNyw3ICs1NjMxLDYgQEAKIAkJRkU0OEU2MzcxRUIxMThBRDAwNUQ3QTk2IC8qIE9iamVj
dEluaXRpYWxpemF0aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFNEJGRjI5MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbk92ZXJyaWRl
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEJGRjJBMUFENDc2RTcwMDA4
OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGdW5jdGlvbk92ZXJyaWRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
RTRENTVCNzFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvblN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTUwNjg2NDFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVt
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUwNjg2NjFBRTI1RTI4MDAwOURB
QjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFNTMzQ0EwMUYyMTdDMzEwMDE2QTFGRSAvKiB0ZXN0bWFzbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSB0ZXN0bWFzbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
ODE1LDcgKzc4MTgsNiBAQAogCQkJCUEzOENBNTlCMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAx
LmNwcCAqLywKIAkJCQlBMzhDQTU5QzI2REQ4NERFMDBDOEQ4NEMgLyogSVNPODYwMS5oICovLAog
CQkJCThCOUY2RDU1MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggKi8sCi0JCQkJ
RkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcw
MTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLAogCQkJ
CTcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLywKIAkJ
CQk3MERDM0UwNzFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuY3BwICovLApA
QCAtODgwMiw2ICs4ODA0LDkgQEAKIAkJCQlGRTEwQUFFOTFGNDRENTEwMDA5REVEQzUgLyogUHJv
YmVTdGFjay5jcHAgKi8sCiAJCQkJRkUxMEFBRUExRjQ0RDUxMjAwOURFREM1IC8qIFByb2JlU3Rh
Y2suaCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTkgLyogUmVnaXN0ZXJJbmZvLmgg
Ki8sCisJCQkJNTJDQUVDNzMyNzkwQjhGNjAwRERCQUFGIC8qIFNlY3VyZUFSTTY0RUhhc2hQaW5z
LmNwcCAqLywKKwkJCQk1MkNBRUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFz
aFBpbnMuaCAqLywKKwkJCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRF
SGFzaFBpbnNJbmxpbmVzLmggKi8sCiAJCQkJRkU1MzNDQTAxRjIxN0MzMTAwMTZBMUZFIC8qIHRl
c3RtYXNtLmNwcCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTIgLyogWDg2XzY0UmVn
aXN0ZXJzLmggKi8sCiAJCQkJOTY4OENCMTQwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxl
ci5oICovLApAQCAtMTAwMTksNiArMTAwMjQsNyBAQAogCQkJCTBGQkUwRjczMTZDMURCMDUwMDgy
QzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4
OUNGNjE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUExNEVGOTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyogU2VjdXJl
QVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4
RDk3NiAvKiBERkdEQ0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNCRkE1RDAyMUU4NTNB
MTAwOUMwRUJBIC8qIERGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY4RjJCOUExNzJGMDUwMTAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMDQ3Niw3ICsxMDQ4Miw2IEBACiAJCQkJMEY1RTBGRTcyMDg2QUQ0
ODAwOTdGMERFIC8qIElzb1N1YnNwYWNlUGVyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCThCOUY2
RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1M0Q0MUVDOTIzQzAwODFBMDBBRTk4NEIgLyogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmggaW4g
SGVhZGVycyAqLywKLQkJCQlGRTRENTVCODFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3Rh
dHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRl
cmF0b3JPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MERDM0UwQTFCMkRGMkM3MDAw
NTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEz
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywKQEAgLTExMTc5
LDYgKzExMTg0LDcgQEAKIAkJCQlFMzNCQkUwOTI1QkZBMDQxMDA1MzY5MEYgLyogV2FzbVN0cmVh
bWluZ0NvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVD
MTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEy
NUJGQTczQjAwRUZFMzAzIC8qIFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MkNBRUM3NjI3OTBCOTAxMDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEQwMUJGNTI2REVFRjUzMDBDQUUwRDAgLyogV2Fz
bVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThEQTA1QTAwMjlBOTMyIC8qIFdh
c21UaHVua3MuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25FZmZvcnQuaCIKKyNpbmNsdWRlICJTZWN1cmVB
Uk02NEVIYXNoUGluc0lubGluZXMuaCIKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxz
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMjAzLDE1ICsyMDQsMzgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIENQVShBUk02NEUpCisgICAgdGVtcGxh
dGUgPGJvb2wgc2hvdWxkU2lnbj4KICAgICBjbGFzcyBBUk02NEVIYXNoIHsKKyAgICAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQVJNNjRFSGFzaCk7CiAgICAgcHVibGljOgotICAgICAgICBBUk02
NEVIYXNoKHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBUk02NEVIYXNoKHZvaWQqKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBzZXRVcGRhdGVkSGFzaCgwLCAwLCBkaXZlcnNpZmllcik7Cisg
ICAgICAgIH0KKworICAgICAgICB+QVJNNjRFSGFzaCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG1faW5pdGlhbGl6ZWRQaW4pIHsKKyAgICAgICAgICAgICAgICBnX2pzY0NvbmZpZy5h
cm02NGVIYXNoUGlucy5kZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCgpOworICAgICAgICAg
ICAgICAgIG1faW5pdGlhbGl6ZWRQaW4gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogCiAgICAgICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgdXBkYXRlKHVpbnQzMl90IGluc3Ry
dWN0aW9uLCB1aW50MzJfdCBpbmRleCwgdm9pZCogZGl2ZXJzaWZpZXIpCiAgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShpbmRleCA9PSAwKSkgeworICAgICAgICAgICAgICAgIGlm
IGNvbnN0ZXhwciAoc2hvdWxkU2lnbikgeworICAgICAgICAgICAgICAgICAgICBtX2luaXRpYWxp
emVkUGluID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZ19qc2NDb25maWcuYXJtNjRlSGFz
aFBpbnMuYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgICAgICAgICAgICAg
IHNldFVwZGF0ZWRIYXNoKDAsIDAsIGRpdmVyc2lmaWVyKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgbV9oYXNoID0gMDsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgdWludDMyX3QgY3VycmVudEhhc2ggPSB0aGlzLT5jdXJyZW50SGFzaChpbmRleCwg
ZGl2ZXJzaWZpZXIpOwogICAgICAgICAgICAgdWludDY0X3QgbmV4dEluZGV4ID0gaW5kZXggKyAx
OwogICAgICAgICAgICAgdWludDMyX3Qgb3V0cHV0ID0gbmV4dFZhbHVlKGluc3RydWN0aW9uLCBu
ZXh0SW5kZXgsIGN1cnJlbnRIYXNoKTsKQEAgLTIzNSwyOSArMjU5LDI4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuIChhID4+IDM5KSBeIChiID4+IDIzKTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGJpdHNGb3JEaXZlcnNp
Zmllcih2b2lkKiBkaXZlcnNpZmllcikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgdWlu
dDMyX3QgcGluKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGRpdmVyc2lmaWVyKTsKKyAgICAgICAgICAgIHJldHVybiBnX2pzY0NvbmZpZy5h
cm02NGVIYXNoUGlucy5waW5Gb3JDdXJyZW50VGhyZWFkKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGN1cnJlbnRIYXNoKHVpbnQzMl90IGluZGV4LCB2b2lk
KiBkaXZlcnNpZmllcikKKyAgICAgICAgQUxXQVlTX0lOTElORSB1aW50MzJfdCBjdXJyZW50SGFz
aCh1aW50MzJfdCBpbmRleCwgdm9pZCopCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaGFz
aEZpZWxkSXNUYWdnZWQgPSBpbmRleCA9PSAwOwotICAgICAgICAgICAgaWYgKGhhc2hGaWVsZElz
VGFnZ2VkKQotICAgICAgICAgICAgICAgIHJldHVybiB1bnRhZ0ludChtX2hhc2gsIG1ha2VEaXZl
cnNpZmllcihpbml0aWFsaXphdGlvbk5hbWVzcGFjZSwgaW5kZXgsIGJpdHNGb3JEaXZlcnNpZmll
cihkaXZlcnNpZmllcikpKTsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2hvdWxkU2lnbikK
KyAgICAgICAgICAgICAgICByZXR1cm4gdW50YWdJbnQobV9oYXNoLCBtYWtlRGl2ZXJzaWZpZXIo
aW5pdGlhbGl6YXRpb25OYW1lc3BhY2UsIGluZGV4LCBwaW4oKSkpOwogICAgICAgICAgICAgcmV0
dXJuIG1faGFzaDsKICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRV
cGRhdGVkSGFzaCh1aW50MzJfdCB2YWx1ZSwgdWludDMyX3QgaW5kZXgsIHZvaWQqIGRpdmVyc2lm
aWVyKQorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VXBkYXRlZEhhc2godWludDMyX3Qg
dmFsdWUsIHVpbnQzMl90IGluZGV4LCB2b2lkKikKICAgICAgICAgewotICAgICAgICAgICAgYm9v
bCBzaG91bGRUYWdIYXNoRmllbGQgPSBpbmRleCA9PSAwOwotICAgICAgICAgICAgaWYgKHNob3Vs
ZFRhZ0hhc2hGaWVsZCkKLSAgICAgICAgICAgICAgICBtX2hhc2ggPSB0YWdJbnQoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHZhbHVlKSwgbWFrZURpdmVyc2lmaWVyKGluaXRpYWxpemF0aW9uTmFtZXNw
YWNlLCBpbmRleCwgYml0c0ZvckRpdmVyc2lmaWVyKGRpdmVyc2lmaWVyKSkpOworICAgICAgICAg
ICAgaWYgY29uc3RleHByIChzaG91bGRTaWduKQorICAgICAgICAgICAgICAgIG1faGFzaCA9IHRh
Z0ludChzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpLCBtYWtlRGl2ZXJzaWZpZXIoaW5pdGlh
bGl6YXRpb25OYW1lc3BhY2UsIGluZGV4LCBwaW4oKSkpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG1faGFzaCA9IHZhbHVlOworICAgICAgICAgICAgICAgIG1faGFzaCA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICB1aW50NjRf
dCBtX2hhc2g7CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZFBpbiB7IGZhbHNlIH07CiAgICAg
fTsKICNlbmRpZiAvLyBDUFUoQVJNNjRFKQogCkBAIC00MDksNiArNDMyLDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLmJ1
ZmZlcigpOyB9CiAjZW5kaWYKIAorI2lmIENQVShBUk02NEUpCisgICAgICAgIEFSTTY0RUhhc2g8
dHJ1ZT4mIGFybTY0ZUhhc2goKSB7IHJldHVybiBtX2hhc2g7IH0KKyNlbmRpZgorCiAgICAgcHJv
dGVjdGVkOgogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+CiAgICAgICAg
IHZvaWQgcHV0SW50ZWdyYWwoSW50ZWdyYWxUeXBlIHZhbHVlKQpAQCAtNDU5LDcgKzQ4Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBc3NlbWJsZXJEYXRhIG1fc3RvcmFnZTsKICAgICAg
ICAgdW5zaWduZWQgbV9pbmRleDsKICNpZiBDUFUoQVJNNjRFKQotICAgICAgICBBUk02NEVIYXNo
IG1faGFzaDsKKyAgICAgICAgQVJNNjRFSGFzaDx0cnVlPiBtX2hhc2g7CiAgICAgICAgIEFzc2Vt
YmxlckRhdGEgbV9oYXNoZXM7CiAjZW5kaWYKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyODgwMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFu
ZExpbmtDb2RlKAogICAgIHVpbnQ4X3QqIGluRGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4o
bV9hc3NlbWJsZXJTdG9yYWdlLmJ1ZmZlcigpKTsKICNpZiBDUFUoQVJNNjRFKQogICAgIHZvaWQq
IGJ1ZmZlclB0ciA9ICZtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5idWZmZXIoKTsKLSAgICBB
Uk02NEVIYXNoIHZlcmlmeVVuY29tcGFjdGVkSGFzaCB7IGJ1ZmZlclB0ciB9OworICAgIEFSTTY0
RUhhc2g8ZmFsc2U+IHZlcmlmeVVuY29tcGFjdGVkSGFzaCB7IGJ1ZmZlclB0ciB9OwogICAgIG1f
YXNzZW1ibGVySGFzaGVzU3RvcmFnZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZl
cigpLnJlbGVhc2VBc3NlbWJsZXJIYXNoZXMoKTsKICAgICB1aW50MzJfdCogaW5IYXNoZXMgPSBi
aXR3aXNlX2Nhc3Q8dWludDMyX3QqPihtX2Fzc2VtYmxlckhhc2hlc1N0b3JhZ2UuYnVmZmVyKCkp
OwogI2VuZGlmCkBAIC00MzgsNiArNDM4LDEwIEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUo
TWFjcm9Bc3NlbWJsZXIKICAgICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fz
c2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIH0KIAorI2lmIENQVShBUk02NEUpCisgICAgbWFjcm9B
c3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkuYXJtNjRlSGFzaCgpLmRlYWxsb2NhdGVQaW5G
b3JDdXJyZW50VGhyZWFkKCk7CisjZW5kaWYKKwogICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4
ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZv
cnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFS
TTY0RUhhc2hQaW5zLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGlucy5oIgor
CisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkZhc3RKSVRQZXJt
aXNzaW9ucy5oIgorI2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisKK3N0cnVjdCBXcml0
ZVRvSklUUmVnaW9uU2NvcGUgeworICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSgpCisgICAgewor
ICAgICAgICB0aHJlYWRTZWxmUmVzdHJpY3RSV1hUb1JXKCk7CisgICAgfQorCisgICAgfldyaXRl
VG9KSVRSZWdpb25TY29wZSgpCisgICAgeworICAgICAgICB0aHJlYWRTZWxmUmVzdHJpY3RSV1hU
b1JYKCk7CisgICAgfQorfTsKKworc3RydWN0IFZhbGlkYXRlQXRvbWljaXR5U2NvcGUgeworICAg
IFZhbGlkYXRlQXRvbWljaXR5U2NvcGUoU2VjdXJlQVJNNjRFSGFzaFBpbnM6Ok1ldGFkYXRhKiBt
ZXRhZGF0YSkKKyAgICAgICAgOiBtX21ldGFkYXRhKG1ldGFkYXRhKQorICAgIHsKKyAgICAgICAg
dWludDMyX3QgdmFsaWRhdGVBdG9taWNpdHkgPSBtX21ldGFkYXRhLT5hc3NlcnROb3RSZWVudHJh
bnQuZXhjaGFuZ2UoMSwgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCF2YWxpZGF0ZUF0b21pY2l0eSk7CisgICAgfQorCisgICAgflZhbGlkYXRlQXRv
bWljaXR5U2NvcGUoKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdmFsaWRhdGVBdG9taWNpdHkg
PSBtX21ldGFkYXRhLT5hc3NlcnROb3RSZWVudHJhbnQuZXhjaGFuZ2UoMCwgc3RkOjptZW1vcnlf
b3JkZXJfc2VxX2NzdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZhbGlkYXRlQXRvbWljaXR5
ID09IDEpOworICAgIH0KKyAgICBTZWN1cmVBUk02NEVIYXNoUGluczo6TWV0YWRhdGEqIG1fbWV0
YWRhdGE7Cit9OworCisvLyBUaGlzIGNsYXNzIGlzIGFsbG9jYXRlZCBvbmNlIHBlciBwcm9jZXNz
LCBzbyBzdGF0aWMgbG9jayBpcyBvay4KK3N0YXRpYyBMb2NrIGhhc2hQaW5zTG9jazsKKworQUxX
QVlTX0lOTElORSBzdGF0aWMgdm9pZCogYWxsb2NhdGVJbkV4ZWN1dGFibGVNZW1vcnkoc2l6ZV90
IHNpemUpCit7CisgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoc2l6ZSwgSklUQ29tcGlsYXRpb25NdXN0
U3VjY2VlZCkubGVha1JlZigpOworICAgIFJFTEVBU0VfQVNTRVJUKGhhbmRsZSk7CisgICAgdm9p
ZCogbWVtb3J5ID0gYml0d2lzZV9jYXN0PGNoYXIqPihoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQ
dHIoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhtZW1vcnkpICYmIGlzSklUUEMoYml0
d2lzZV9jYXN0PGNoYXIqPihtZW1vcnkpICsgc2l6ZSAtIDEpKTsKKyAgICByZXR1cm4gbWVtb3J5
OworfQorCitzdGF0aWMgdm9pZCBpbml0aWFsaXplUGFnZShjb25zdCBXcml0ZVRvSklUUmVnaW9u
U2NvcGUmLCBTZWN1cmVBUk02NEVIYXNoUGluczo6UGFnZSogcGFnZSkKK3sKKyAgICBuZXcgKHBh
Z2UpIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpQYWdlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBTZWN1cmVBUk02NEVIYXNoUGluczo6bnVtRW50cmllc1BlclBhZ2U7ICsraSkgeworICAg
ICAgICBhdXRvJiBlbnRyeSA9IHBhZ2UtPmVudHJ5KGkpOworICAgICAgICBlbnRyeS5waW4gPSAw
OworICAgICAgICBlbnRyeS5rZXkgPSAwOworICAgIH0KK30KKwordm9pZCBTZWN1cmVBUk02NEVI
YXNoUGluczo6aW5pdGlhbGl6ZUF0U3RhcnR1cCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1f
bWVtb3J5KTsKKworICAgIG1fbWVtb3J5ID0gYml0d2lzZV9jYXN0PGNoYXIqPihhbGxvY2F0ZUlu
RXhlY3V0YWJsZU1lbW9yeShzaXplb2YoTWV0YWRhdGEpICsgUGFnZTo6YWxsb2NhdGlvblNpemUo
KSkpICsgc2l6ZW9mKE1ldGFkYXRhKTsKKworICAgIHsKKyAgICAgICAgV3JpdGVUb0pJVFJlZ2lv
blNjb3BlIHdyaXRlU2NvcGU7CisKKyAgICAgICAgbmV3IChtZXRhZGF0YSgpKSBNZXRhZGF0YTsg
CisgICAgICAgIGluaXRpYWxpemVQYWdlKHdyaXRlU2NvcGUsIGZpcnN0UGFnZSgpKTsKKyAgICB9
Cit9CisKK3VpbnQ2NF90IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjphbGxvY2F0ZVBpbkZvckN1cnJl
bnRUaHJlYWQoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBoYXNoUGluc0xvY2sgfTsKKworICAg
IGF1dG8qIG1ldGFkYXRhID0gdGhpcy0+bWV0YWRhdGEoKTsKKworICAgIGF1dG8gZmluZFJlc3Vs
dCA9IGZpbmRFbnRyeSgpOworICAgIEVudHJ5KiBwcmVleGlzdGluZ0VudHJ5ID0gZmluZFJlc3Vs
dC5lbnRyeTsKKyAgICBzaXplX3QgcHJlZXhpc3RpbmdFbnRyeUluZGV4ID0gZmluZFJlc3VsdC5p
bmRleDsKKyAgICBQYWdlKiBwcmVleGlzdGluZ0VudHJ5UGFnZSA9IGZpbmRSZXN1bHQucGFnZTsK
KworICAgIHNpemVfdCBuZXdFbnRyeTsKKyAgICBQYWdlKiBuZXdFbnRyeVBhZ2U7CisgICAgewor
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIHNpemVfdCBiYXNlSW5kZXggPSAw
OworICAgICAgICBQYWdlKiBsYXN0UGFnZSA9IG51bGxwdHI7CisgICAgICAgIGZvckVhY2hQYWdl
KFsmXSAoUGFnZSYgcGFnZSkgeworICAgICAgICAgICAgc2l6ZV90IGJpdCA9IHBhZ2UuZmluZENs
ZWFyQml0KCk7CisgICAgICAgICAgICBpZiAoYml0IDwgbnVtRW50cmllc1BlclBhZ2UpIHsKKyAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbmV3RW50cnkgPSBi
YXNlSW5kZXggKyBiaXQ7CisgICAgICAgICAgICAgICAgbmV3RW50cnlQYWdlID0gJnBhZ2U7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYmFzZUluZGV4ICs9IG51bUVudHJpZXNQZXJQYWdlOworICAgICAg
ICAgICAgbGFzdFBhZ2UgPSAmcGFnZTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0
dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoIWZvdW5k
KSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxhc3RQYWdlLT5uZXh0KTsKKyAgICAg
ICAgICAgIFBhZ2UqIG5leHRQYWdlID0gYml0d2lzZV9jYXN0PFBhZ2UqPihhbGxvY2F0ZUluRXhl
Y3V0YWJsZU1lbW9yeShQYWdlOjphbGxvY2F0aW9uU2l6ZSgpKSk7CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2NvcGU7CisgICAgICAg
ICAgICAgICAgVmFsaWRhdGVBdG9taWNpdHlTY29wZSB2YWxpZGF0ZUF0b21pY2l0eShtZXRhZGF0
YSk7CisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVBhZ2Uod3JpdGVTY29wZSwgbmV4dFBhZ2Up
OworICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIGJlIHJlYWQgZnJvbSBjb25jdXJyZW50bHku
IE1ha2Ugc3VyZSBpdCdzIGluIGEgZ29vZCBzdGF0ZSBmb3IgdGhhdCB0byBoYXBwZW4uCisgICAg
ICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICBsYXN0
UGFnZS0+bmV4dCA9IG5leHRQYWdlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3RW50
cnlQYWdlID0gbmV4dFBhZ2U7CisgICAgICAgICAgICBzaXplX3QgYml0ID0gbmV4dFBhZ2UtPmZp
bmRDbGVhckJpdCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0ID09IDApOworICAg
ICAgICAgICAgbmV3RW50cnkgPSBiYXNlSW5kZXggKyBiaXQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB1aW50NjRfdCBwaW47CisgICAgeworICAgICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsK
KworICAgICAgICBXcml0ZVRvSklUUmVnaW9uU2NvcGUgd3JpdGVTY29wZTsKKyAgICAgICAgVmFs
aWRhdGVBdG9taWNpdHlTY29wZSB2YWxpZGF0ZUF0b21pY2l0eShtZXRhZGF0YSk7CisKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhtZXRhZGF0YSkpOworCisgICAgICAgIHBpbiA9IG1l
dGFkYXRhLT5uZXh0UGluLmV4Y2hhbmdlQWRkKDEsIHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3Qp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChwaW4pOworCisgICAgICAgIG5ld0VudHJ5UGFnZS0+
c2V0SXNJblVzZShuZXdFbnRyeSk7CisKKyAgICAgICAgaWYgKHByZWV4aXN0aW5nRW50cnkgJiYg
cHJlZXhpc3RpbmdFbnRyeUluZGV4IDwgbmV3RW50cnkpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHByZWV4aXN0aW5nRW50cnlQYWdlLT5pc0luVXNlKHByZWV4aXN0aW5nRW50cnlJbmRl
eCkpOworCisgICAgICAgICAgICBuZXdFbnRyeVBhZ2UtPmVudHJ5KG5ld0VudHJ5KSA9ICpwcmVl
eGlzdGluZ0VudHJ5OworICAgICAgICAgICAgbmV3RW50cnkgPSBwcmVleGlzdGluZ0VudHJ5SW5k
ZXg7CisgICAgICAgICAgICBuZXdFbnRyeVBhZ2UgPSBwcmVleGlzdGluZ0VudHJ5UGFnZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5ID0gbmV3RW50cnlQYWdlLT5lbnRyeShuZXdF
bnRyeSk7CisgICAgICAgIGVudHJ5LnBpbiA9IHBpbjsKKyAgICAgICAgZW50cnkua2V5ID0ga2V5
Rm9yQ3VycmVudFRocmVhZCgpOworICAgIH0KKworICAgIHJldHVybiBwaW47Cit9CisKK3ZvaWQg
U2VjdXJlQVJNNjRFSGFzaFBpbnM6OmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCkKK3sK
KyAgICBMb2NrZXIgbG9ja2VyIHsgaGFzaFBpbnNMb2NrIH07CisgICAgYXV0byogbWV0YWRhdGEg
PSB0aGlzLT5tZXRhZGF0YSgpOworCisgICAgYXV0byBjbGVhciA9IFsmXSAoRW50cnkmIGVudHJ5
KSB7CisgICAgICAgIGVudHJ5LnBpbiA9IDA7CisgICAgICAgIGVudHJ5LmtleSA9IDA7CisgICAg
fTsKKworICAgIFBhZ2UqIHJlbW92YWxQYWdlOworICAgIHNpemVfdCByZW1vdmFsSW5kZXg7Cisg
ICAgeworICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBmaW5kRW50cnkoKTsKKyAgICAgICAgRW50
cnkmIGVudHJ5ID0gKmZpbmRSZXN1bHQuZW50cnk7CisgICAgICAgIHJlbW92YWxJbmRleCA9IGZp
bmRSZXN1bHQuaW5kZXg7CisgICAgICAgIHJlbW92YWxQYWdlID0gZmluZFJlc3VsdC5wYWdlOwor
CisgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNjb3BlOworICAgICAgICBWYWxp
ZGF0ZUF0b21pY2l0eVNjb3BlIHZhbGlkYXRlQXRvbWljaXR5KG1ldGFkYXRhKTsKKworICAgICAg
ICBjbGVhcihlbnRyeSk7CisgICAgICAgIHJlbW92YWxQYWdlLT5jbGVhcklzSW5Vc2UocmVtb3Zh
bEluZGV4KTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGFsbG93cyByZWN1
cnNpdmUgdXNlcyBvZiB0aGUgTWFjcm9Bc3NlbWJsZXIsIGZvcm1pbmcgYSBzdGFjaworICAgIC8v
IGxpa2UgZGF0YSBzdHJ1Y3R1cmUuIFRoZSBpbiB1c2UgcGluICh0b3Agb2YgdGhlIHN0YWNrKSB3
aWxsIGFsd2F5cyBiZSBhdCB0aGUgbG93ZXN0CisgICAgLy8gcGFnZSBhbmQgbG93ZXN0IGluZGV4
IGluIHRoZSBiaXQgdmVjdG9yLiBTbyB3aGVuIHdlIGRlYWxsb2NhdGUgdGhlIGN1cnJlbnQgdG9w
IG9mIHRoZQorICAgIC8vIHN0YWNrLCB3ZSBuZWVkIHRvIGZpbmQgdGhlIG5leHQgZW50cnkgaW4g
dGhlIHN0YWNrLCBhbmQgZW5zdXJlIGl0J3MgYXQgdGhlIGxvd2VzdCBpbmRleC4KKyAgICAvLyBT
byBpZiB0aGVyZSBhcmUgb3RoZXIgZW50cmllcyBmb3IgdGhpcyBjdXJyZW50IHRocmVhZCwgd2Ug
ZmluZCB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QKKyAgICAvLyBwaW4gKG5leHQgdG9wIG9mIHN0
YWNrIHZhbHVlKSwgYW5kIHJlcGxhY2UgaXQgYXQgdGhlIGluZGV4IHdlIHdlcmUgdXNpbmcgYmVm
b3JlLgorICAgIC8vIEFkZGl0aW9uIGFsc28gbWFpbnRhaW5zIHRoaXMgaW52YXJpYW50IGJ5IGFs
d2F5cyBwbGFjaW5nIHRoZSBuZXdlc3QgZW50cnkgZm9yCisgICAgLy8gdGhlIGN1cnJlbnQgdGhy
ZWFkIGF0IHRoZSBsb3dlc3QgaW5kZXguCisgICAgeworICAgICAgICB1aW50NjRfdCBrZXkgPSBr
ZXlGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAg
ICAgdWludDY0X3QgbWF4UGluID0gMDsKKyAgICAgICAgc2l6ZV90IG1heEluZGV4ID0gc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKKyAgICAgICAgUGFnZSogbWF4UGFnZSA9IG51
bGxwdHI7CisKKyAgICAgICAgZm9yRWFjaEVudHJ5KFsmXSAoUGFnZSYgcGFnZSwgRW50cnkmIGVu
dHJ5LCBzaXplX3QgaW5kZXgpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5LnBp
bik7CisgICAgICAgICAgICBpZiAoZW50cnkua2V5ID09IGtleSAmJiBlbnRyeS5waW4gPiBtYXhQ
aW4pIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbWF4
UGluID0gZW50cnkucGluOworICAgICAgICAgICAgICAgIG1heEluZGV4ID0gaW5kZXg7CisgICAg
ICAgICAgICAgICAgbWF4UGFnZSA9ICZwYWdlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZW1vdmFsSW5kZXgg
PCBtYXhJbmRleCk7CisKKyAgICAgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNj
b3BlOworICAgICAgICAgICAgVmFsaWRhdGVBdG9taWNpdHlTY29wZSB2YWxpZGF0ZUF0b21pY2l0
eShtZXRhZGF0YSk7CisKKyAgICAgICAgICAgIHJlbW92YWxQYWdlLT5lbnRyeShyZW1vdmFsSW5k
ZXgpID0gbWF4UGFnZS0+ZW50cnkobWF4SW5kZXgpOworICAgICAgICAgICAgY2xlYXIobWF4UGFn
ZS0+ZW50cnkobWF4SW5kZXgpKTsKKyAgICAgICAgICAgIG1heFBhZ2UtPmNsZWFySXNJblVzZSht
YXhJbmRleCk7CisgICAgICAgICAgICByZW1vdmFsUGFnZS0+c2V0SXNJblVzZShyZW1vdmFsSW5k
ZXgpOworICAgICAgICB9CisgICAgfQorfQorCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkgJiYgRU5B
QkxFKEpJVCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFz
aFBpbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgQ1BVKEFS
TTY0RSkgJiYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFNlY3VyZUFSTTY0RUhhc2hQaW5zIHsKK3B1YmxpYzoKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVBdFN0YXJ0dXAoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB1aW50NjRfdCBhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdWludDY0X3QgcGluRm9yQ3VycmVudFRocmVhZCgpOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtRW50cmllc1BlclBhZ2UgPSA2NDsKKworICAg
IHN0cnVjdCBFbnRyeSB7CisgICAgICAgIHVpbnQ2NF90IHBpbjsKKyAgICAgICAgdWludDY0X3Qg
a2V5OworICAgIH07CisKKyAgICBzdHJ1Y3QgYWxpZ25hcyhhbGlnbm9mKEVudHJ5KSkgUGFnZSB7
CisgICAgICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoKSB7IHJldHVybiBzaXplb2Yo
UGFnZSkgKyBudW1FbnRyaWVzUGVyUGFnZSAqIHNpemVvZihFbnRyeSk7IH0KKworICAgICAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBtYXNrID0gbnVtRW50cmllc1BlclBhZ2UgLSAxOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KCEobWFzayAmIG51bUVudHJpZXNQZXJQYWdlKSk7CisKKyAgICAg
ICAgaW5saW5lIEVudHJ5JiBlbnRyeShzaXplX3QgaW5kZXgpCisgICAgICAgIHsgCisgICAgICAg
ICAgICBFbnRyeSogZW50cmllcyA9IGJpdHdpc2VfY2FzdDxFbnRyeSo+KGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgKyBzaXplb2YoUGFnZSkpOworICAgICAgICAgICAgcmV0dXJuIGVudHJpZXNb
aW5kZXggJiBtYXNrXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRJc0lu
VXNlKHNpemVfdCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaXNJblVzZU1hcC5zZXQo
aW5kZXggJiBtYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXJJc0luVXNlKHNp
emVfdCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaXNJblVzZU1hcC5zZXQoaW5kZXgg
JiBtYXNrLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzSW5Vc2Uoc2l6ZV90
IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJblVzZU1hcC5nZXQoaW5k
ZXggJiBtYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBmaW5kQ2xlYXJCaXQoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJblVzZU1hcC5maW5kQml0KDAsIGZhbHNl
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAg
ICAgICAgdm9pZCBmb3JFYWNoU2V0Qml0KEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpc0luVXNlTWFwLmZvckVhY2hTZXRCaXQoZnVuY3Rpb24pOworICAgICAgICB9
CisKKyAgICAgICAgUGFnZSogbmV4dCB7IG51bGxwdHIgfTsKKyAgICBwcml2YXRlOgorICAgICAg
ICBCaXRtYXA8bnVtRW50cmllc1BlclBhZ2U+IGlzSW5Vc2VNYXA7CisgICAgfTsKKworICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKFBhZ2UpICUgYWxpZ25vZihFbnRyeSkgPT0gMCk7CisKKyAgICBz
dHJ1Y3QgYWxpZ25hcyhhbGlnbm9mKFBhZ2UpKSBNZXRhZGF0YSB7CisgICAgICAgIEF0b21pYzx1
aW50NjRfdD4gbmV4dFBpbiB7IDEgfTsKKyAgICAgICAgQXRvbWljPHVpbnQzMl90PiBhc3NlcnRO
b3RSZWVudHJhbnQgeyAwIH07CisgICAgfTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE1l
dGFkYXRhKSAlIGFsaWdub2YoUGFnZSkgPT0gMCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVp
bnQ2NF90IGtleUZvckN1cnJlbnRUaHJlYWQoKTsKKworICAgIHN0cnVjdCBGaW5kUmVzdWx0IHsK
KyAgICAgICAgRW50cnkqIGVudHJ5IHsgbnVsbHB0ciB9OworICAgICAgICBzaXplX3QgaW5kZXgg
eyBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIH07CisgICAgICAgIFBhZ2UqIHBh
Z2UgeyBudWxscHRyIH07CisgICAgfTsKKyAgICBGaW5kUmVzdWx0IGZpbmRFbnRyeSgpOworCisg
ICAgaW5saW5lIE1ldGFkYXRhKiBtZXRhZGF0YSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxNZXRh
ZGF0YSo+KGJpdHdpc2VfY2FzdDxjaGFyKj4obV9tZW1vcnkpIC0gc2l6ZW9mKE1ldGFkYXRhKSk7
IH0KKyAgICBpbmxpbmUgUGFnZSogZmlyc3RQYWdlKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFBh
Z2UqPihtX21lbW9yeSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAg
ICB2b2lkIGZvckVhY2hQYWdlKEZ1bmN0aW9uKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hFbnRyeShGdW5jdGlvbik7CisKKyAgICB2b2lkKiBt
X21lbW9yeSB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGluc0lubGlu
ZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Nl
Y3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGlucy5oIgorCisjaWYgQ1BVKEFS
TTY0RSkgJiYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK0FMV0FZU19JTkxJTkUg
dWludDY0X3QgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmtleUZvckN1cnJlbnRUaHJlYWQoKQorewor
ICAgIHVpbnQ2NF90IHJlc3VsdDsKKyAgICBhc20gKAorICAgICAgICAibXJzICV4W3Jlc3VsdF0s
IFRQSURSUk9fRUwwIgorICAgICAgICA6IFtyZXN1bHRdICI9ciIgKHJlc3VsdCkKKyAgICAgICAg
OgorICAgICAgICA6CisgICAgKTsKKyAgICByZXR1cm4gcmVzdWx0ICsgMTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxXQVlTX0lOTElORSB2b2lkIFNlY3VyZUFSTTY0RUhh
c2hQaW5zOjpmb3JFYWNoUGFnZShGdW5jdGlvbiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKFBhZ2Uq
IHBhZ2UgPSBmaXJzdFBhZ2UoKTsgcGFnZTsgcGFnZSA9IHBhZ2UtPm5leHQpIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhwYWdlKSk7CisgICAgICAgIGlmIChmdW5jdGlvbigqcGFn
ZSkgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxXQVlTX0lOTElORSB2b2lkIFNl
Y3VyZUFSTTY0RUhhc2hQaW5zOjpmb3JFYWNoRW50cnkoRnVuY3Rpb24gZnVuY3Rpb24pCit7Cisg
ICAgc2l6ZV90IGJhc2VJbmRleCA9IDA7CisgICAgZm9yRWFjaFBhZ2UoWyZdIChQYWdlJiBwYWdl
KSB7CisgICAgICAgIEl0ZXJhdGlvblN0YXR1cyBpdGVyYXRpb25TdGF0dXMgPSBJdGVyYXRpb25T
dGF0dXM6OkNvbnRpbnVlOworICAgICAgICBwYWdlLmZvckVhY2hTZXRCaXQoWyZdIChzaXplX3Qg
Yml0SW5kZXgpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGJhc2VJbmRleCArIGJpdElu
ZGV4OworICAgICAgICAgICAgRW50cnkmIGVudHJ5ID0gcGFnZS5lbnRyeShpbmRleCk7CisgICAg
ICAgICAgICBBU1NFUlQoaXNKSVRQQygmZW50cnkpKTsKKyAgICAgICAgICAgIGl0ZXJhdGlvblN0
YXR1cyA9IGZ1bmN0aW9uKHBhZ2UsIGVudHJ5LCBpbmRleCk7CisgICAgICAgICAgICByZXR1cm4g
aXRlcmF0aW9uU3RhdHVzOworICAgICAgICB9KTsKKyAgICAgICAgYmFzZUluZGV4ICs9IG51bUVu
dHJpZXNQZXJQYWdlOworICAgICAgICByZXR1cm4gaXRlcmF0aW9uU3RhdHVzOworICAgIH0pOwor
fQorCitBTFdBWVNfSU5MSU5FIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpGaW5kUmVzdWx0IFNlY3Vy
ZUFSTTY0RUhhc2hQaW5zOjpmaW5kRW50cnkoKQoreworICAgIHVpbnQ2NF90IGtleSA9IGtleUZv
ckN1cnJlbnRUaHJlYWQoKTsKKyAgICAvLyBXZSBjYW4gY2FsbCB0aGlzIGNvbmN1cnJlbnRseSB0
byB0aGUgYml0IHZlY3RvciBiZWluZyBtb2RpZmllZAorICAgIC8vIHNpbmNlIHdlIGVpdGhlciBj
YWxsIHRoaXMgd2hlbiB3ZSdyZSBsb2NrZWQsIG9yIHdlIGNhbGwgaXQgd2hlbgorICAgIC8vIHdl
IGtub3cgdGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzLiBXaGVuIHRoZSBlbnRyeSBhbHJlYWR5IGV4
aXN0cywKKyAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGJpdCBjYW4ndCBnZXQgZmxpcHBlZCBzcHVy
aW91c2x5IGR1cmluZyBjb25jdXJyZW50CisgICAgLy8gbW9kaWZpY2F0aW9uLCBzbyB3ZSdyZSBn
dWFyYW50ZWVkIHRvIGZpbmQgdGhlIHZhbHVlLiBXZSBtaWdodCBzZWUKKyAgICAvLyBhbiBlbnRy
eSBhcyBpdCdzIGJlaW5nIHdyaXR0ZW4gdG8sIGJ1dCB0aGF0J3MgYWxzbyBmaW5lLCBzaW5jZSBp
dAorICAgIC8vIHdvbid0IGhhdmUgb3VyIHNhbWUga2V5LiBJdCdsbCBlaXRoZXIgYmUgemVybywg
b3IgYSBkaWZmZXJlbnQga2V5LgorCisgICAgRmluZFJlc3VsdCByZXN1bHQ7CisgICAgZm9yRWFj
aEVudHJ5KFsmXSAoUGFnZSYgcGFnZSwgRW50cnkmIGVudHJ5LCBzaXplX3QgaW5kZXgpIHsKKyAg
ICAgICAgaWYgKGVudHJ5LmtleSA9PSBrZXkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5lbnRyeSA9
ICZlbnRyeTsKKyAgICAgICAgICAgIHJlc3VsdC5wYWdlID0gJnBhZ2U7CisgICAgICAgICAgICBy
ZXN1bHQuaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6
OkRvbmU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CisgICAgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBTFdBWVNfSU5MSU5FIHVp
bnQ2NF90IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpwaW5Gb3JDdXJyZW50VGhyZWFkKCkKK3sKKyAg
ICByZXR1cm4gZmluZEVudHJ5KCkuZW50cnktPnBpbjsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCwxMyArMjQsMTMgQEAKICNpbmNsdWRlICJDZWxsQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkRl
c3RydWN0aW9uTW9kZS5oIgogI2luY2x1ZGUgIkhlYXBDZWxsLmgiCi0jaW5jbHVkZSAiSXRlcmF0
aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2Vha1NldC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4K
ICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNs
dWRlIDx3dGYvQ291bnRpbmdMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvSXRlcmF0aW9uU3RhdHVzLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VCbG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwx
MyArMjIsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIK
LSNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgog
I2luY2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiUHJlY2lzZUFsbG9jYXRpb24u
aCIKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0aW9uU3RhdHVzLmg+CiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
CiAjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIkhhbmRsZVR5cGVz
LmgiCi0jaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCisjaW5jbHVkZSA8d3RmL0l0ZXJhdGlv
blN0YXR1cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01vbm90
b25pY1RpbWUuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMSArMjksMTEgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6LmgiCi0jaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAi
SklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNs
dWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+Cisj
aW5jbHVkZSA8d3RmL0l0ZXJhdGlvblN0YXR1cy5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2
YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CiAjaW5jbHVkZSA8d3RmL1JlZEJs
YWNrVHJlZS5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZp
c2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkV4ZWN1dGFibGVJbmZvLmgiCi0jaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVk
ZSAiTGV4ZXIuaCIKICNpbmNsdWRlICJNb2R1bGVTY29wZURhdGEuaCIKICNpbmNsdWRlICJOb2Rl
cy5oIgpAQCAtMzgsNiArMzcsNyBAQAogI2luY2x1ZGUgIlZhcmlhYmxlRW52aXJvbm1lbnQuaCIK
ICNpbmNsdWRlIDx3dGYvRml4ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCShyZXZpc2lv
biAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgdm9pZCBpbml0aWFs
aXplKCkKICAgICAgICAgICAgIGlmICghZ19qc2NDb25maWcudm0uY2FuVXNlSklUKSB7CiAgICAg
ICAgICAgICAgICAgT3B0aW9uczo6dXNlSklUKCkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBP
cHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisgICAgICAgICAgICAgICAgZ19qc2ND
b25maWcuYXJtNjRlSGFzaFBpbnMuaW5pdGlhbGl6ZUF0U3RhcnR1cCgpOworI2VuZGlmCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgT3B0aW9uczo6ZmluYWxpemUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdGlvblN0YXR1cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdGlvblN0YXR1cy5oCShy
ZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRp
b25TdGF0dXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWVudW0gY2xhc3MgSXRlcmF0aW9uU3RhdHVzIHsKLSAgICBDb250aW51ZSwKLSAg
ICBEb25lCi19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NDb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogI2luY2x1ZGUgIkdhdGUuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRl
ICJPcHRpb25zTGlzdC5oIgorI2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCiAjaW5j
bHVkZSA8d3RmL1dURkNvbmZpZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk5LDYgKzEwMCwx
MCBAQCBzdHJ1Y3QgQ29uZmlnIHsKICNpZiBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoUFRSVEFHX0RF
QlVHR0lORykKICAgICBXVEY6OlB0clRhZ0xvb2t1cCBwdHJUYWdMb29rdXBSZWNvcmQ7CiAjZW5k
aWYKKworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisgICAgU2VjdXJlQVJNNjRFSGFz
aFBpbnMgYXJtNjRlSGFzaFBpbnM7CisjZW5kaWYKIH07CiAKICNpZiBFTkFCTEUoVU5JRklFRF9B
TkRfRlJFRVpBQkxFX0NPTkZJR19SRUNPUkQpCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MDA1KQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAy
Mi0wMS0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRh
dGUgQVJNNjRFSGFzaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6Zm9yRWFjaFNl
dEJpdCBjb25zdCk6CisKIDIwMjItMDEtMTMgIEVsbGlvdHQgV2lsbGlhbXMgIDxlbXdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtYQ0J1aWxkXSBBZGQgInByb2R1Y3QgZGVwZW5kZW5jaWVzIiB3aGlj
aCBpbmZsdWVuY2Ugd29ya3NwYWNlIGJ1aWxkIG9yZGVyCkluZGV4OiBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQzMyw2ICs0
MzMsNyBAQAogCQk1MUYxNzUyQTFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyc2lzdGVudEVuY29kZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxQ0M2QjMyNEEyNzdDMjAwNDM3N0Q2IC8q
IFRyYW5zbGF0ZWRQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0ZWRQcm9j
ZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2QUVDOTExRjZCNEU1QzAw
Njk1RjVEIC8qIE5vVGFpbENhbGxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5vVGFpbENhbGxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyOTVCMDA0Mjc5
MjBDNTQwMDZENzQ2QSAvKiBJdGVyYXRpb25TdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0
aW9uU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjIyOEMxMjQ1OERD
ODIwMDc1M0Q5MSAvKiBJQ1VIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElDVUhlbHBlcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTYzNDgxRkEzRTNBMDAwMjZBNTQ1IC8q
IFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBmb2xkZXI7IHBhdGggPSBTY3JpcHRzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTaWduYWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTExNDUsNiArMTE0Niw3IEBACiAJCQkJRTMzNjY3NDkyNzIyNTUwOTAwMjU5MTIyIC8q
IEludDEyOC5jcHAgKi8sCiAJCQkJRjZENjdEMzIyNkY5MDE0MjAwNkUwMzQ5IC8qIEludDEyOC5o
ICovLAogCQkJCTMzRkQ0ODExMjY1Q0IzODAwMEFCRTRGNCAvKiBJbnRlcmZlcmVuY2VHcmFwaC5o
ICovLAorCQkJCTUyOTVCMDA0Mjc5MjBDNTQwMDZENzQ2QSAvKiBJdGVyYXRpb25TdGF0dXMuaCAq
LywKIAkJCQkwRjdFQjg1QjFGQThGRjQxMDBGMUFCQ0IgLyogSXNvTWFsbG9jLmggKi8sCiAJCQkJ
MEY3RUI4NUMxRkE4RkY0MjAwRjFBQkNCIC8qIElzb01hbGxvY0lubGluZXMuaCAqLywKIAkJCQk3
Q0REN0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oICovLApJbmRleDog
U291cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0
bWFwLmgJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8
d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRJbnRFeHRyYXMuaD4K
QEAgLTcyLDYgKzczLDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgc3Vic3VtZXMoY29uc3Qg
Qml0bWFwJikgY29uc3Q7CiAgICAgCisgICAgLy8gSWYgdGhlIGxhbWJkYSByZXR1cm5zIGFuIEl0
ZXJhdGlvblN0YXR1cywgd2UgdXNlIGl0LiBUaGUgbGFtYmRhIGNhbiBhbHNvIHJldHVybgorICAg
IC8vIHZvaWQsIGluIHdoaWNoIGNhc2UsIHdlJ2xsIGl0ZXJhdGUgZXZlcnkgc2V0IGJpdC4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaFNldEJpdChjb25zdCBG
dW5jJikgY29uc3Q7CiAgICAgCkBAIC0zODksOCArMzkyLDEzIEBAIGlubGluZSB2b2lkIEJpdG1h
cDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBz
aXplX3QgYmFzZSA9IGkgKiB3b3JkU2l6ZTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGog
PCB3b3JkU2l6ZTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAod29yZCAmIDEpCi0gICAgICAgICAg
ICAgICAgZnVuYyhiYXNlICsgaik7CisgICAgICAgICAgICBpZiAod29yZCAmIDEpIHsKKyAgICAg
ICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PEl0ZXJhdGlvblN0YXR1cywg
ZGVjbHR5cGUoZnVuYyhiYXNlICsgaikpPikgeworICAgICAgICAgICAgICAgICAgICBpZiAoZnVu
YyhiYXNlICsgaikgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICBmdW5jKGJhc2UgKyBqKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdvcmQgPj49IDE7
CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JdGVyYXRpb25TdGF0dXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JdGVyYXRpb25TdGF0dXMuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9JdGVyYXRpb25TdGF0dXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKworZW51bSBjbGFzcyBJ
dGVyYXRpb25TdGF0dXMgeworICAgIENvbnRpbnVlLAorICAgIERvbmUKK307CisKK30KKwordXNp
bmcgV1RGOjpJdGVyYXRpb25TdGF0dXM7Cg==
</data>
<flag name="commit-queue"
          id="475212"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449206</attachid>
            <date>2022-01-14 12:27:21 -0800</date>
            <delta_ts>2022-01-14 17:45:54 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>46368</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MDE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDIyLTAxLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBBUk02NEVIYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNo
OjpBUk02NEVIYXNoKToKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6fkFSTTY0RUhhc2gpOgor
ICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpkZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCk6
CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAgICAgIChKU0M6OkFSTTY0
RUhhc2g6OnBpbik6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OmN1cnJlbnRIYXNoKToKKyAg
ICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6c2V0VXBkYXRlZEhhc2gpOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXI6OmFybTY0ZUhhc2gpOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpi
aXRzRm9yRGl2ZXJzaWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29k
ZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFsbG9jYXRlKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V3Jp
dGVUb0pJVFJlZ2lvblNjb3BlOjpXcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpXcml0ZVRvSklUUmVnaW9uU2NvcGU6On5Xcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAg
ICAoSlNDOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlKToK
KyAgICAgICAgKEpTQzo6VmFsaWRhdGVBdG9taWNpdHlTY29wZTo6flZhbGlkYXRlQXRvbWljaXR5
U2NvcGUpOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUluRXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgIChKU0M6OmluaXRpYWxpemVQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmluaXRpYWxpemVBdFN0YXJ0dXApOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVI
YXNoUGluczo6YWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2Vj
dXJlQVJNNjRFSGFzaFBpbnM6OmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjptZXRhZGF0YSk6CisgICAgICAgIChKU0M6OlNlY3Vy
ZUFSTTY0RUhhc2hQaW5zOjpmaXJzdFBhZ2UpOgorICAgICAgICAqIGFzc2VtYmxlci9TZWN1cmVB
Uk02NEVIYXNoUGluc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0
RUhhc2hQaW5zOjprZXlGb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJN
NjRFSGFzaFBpbnM6OmZvckVhY2hQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmZvckVhY2hFbnRyeSk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5z
OjpmaW5kRW50cnkpOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGluczo6cGluRm9y
Q3VycmVudFRocmVhZCk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0NDb25m
aWcuaDoKKwogMjAyMi0wMS0xMyAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW1JJU0NWNjRdIHJpc2N2NjQgYmFja2VuZCBzaG91bGQgbG93ZXIgb2ZmbGlu
ZWFzbSBpbnN0cnVjdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBhc3NlbWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCiAg
ICAgYXNzZW1ibGVyL1JJU0NWNjRSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxlci9SZWdpc3Rlcklu
Zm8uaAorICAgIGFzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCisgICAgYXNzZW1ibGVy
L1NlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCiAgICAgYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCiAgICAgYXNzZW1ibGVyL1g4NlJlZ2lzdGVycy5oCiAgICAgYXNzZW1ibGVyL1g4Nl82NFJl
Z2lzdGVycy5oCkBAIC0xMDIzLDcgKzEwMjUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKICAgICBydW50
aW1lL0ludHJpbnNpYy5oCiAgICAgcnVudGltZS9JdGVyYXRpb25LaW5kLmgKLSAgICBydW50aW1l
L0l0ZXJhdGlvblN0YXR1cy5oCiAgICAgcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAogICAg
IHJ1bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuaAogICAgIHJ1bnRpbWUvSlNBcnJheS5oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcg
QEAgYXNzZW1ibGVyL1BlcmZMb2cuY3BwCiBhc3NlbWJsZXIvUHJpbnRlci5jcHAKIGFzc2VtYmxl
ci9Qcm9iZUNvbnRleHQuY3BwCiBhc3NlbWJsZXIvUHJvYmVTdGFjay5jcHAKK2Fzc2VtYmxlci9T
ZWN1cmVBUk02NEVIYXNoUGlucy5jcHAKIAogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5k
U3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwCiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRT
dGFja0J5TGluZWFyU2Nhbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODk1LDYgKzg5NSw4
IEBACiAJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAw
QjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVw
UmVkdWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBo
YXNlLmggKi87IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2
MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyog
U2VjdXJlQVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyQ0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNo
UGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTUyQ0FFQzc2Mjc5MEI5MDEwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0FFQzcy
Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkNEMEY1RDIyNDJG
NTY5MDA0QTE4QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAv
KiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVz
dGRmZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CkBAIC0yMDgzLDcg
KzIwODUsNiBAQAogCQlGRTQ4QkQ0NDIzMjQ1RTkzMDBGMTM2RDAgLyogSlNDQ29uZmlnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTQ4QkQ0MjIzMjQ1
RTg3MDBGMTM2RDAgLyogSlNDQ29uZmlnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU0OEU2MzgxRUIxMThEMjAwNUQ3QTk2IC8qIE9iamVjdElu
aXRpYWxpemF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFNDhFNjM2MUVCMTE4OEYwMDVEN0E5NiAvKiBPYmplY3RJbml0aWFsaXphdGlv
blNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkU0QkZGMkMxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRCRkYyQTFBRDQ3NkU3
MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCAqLzsgfTsKLQkJRkU0RDU1QjgxQUU3MTZD
QTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlv
blN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTA2ODY0MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTUzM0NBNTFGMjE3REIzMDAxNkExRkUgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFt
ZXdvcmsgKi87IH07CiAJCUZFNTMzQ0E2MUYyMTdEQjMwMDE2QTFGRSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwpAQCAtMzc4OSw2ICszNzkwLDkgQEAKIAkJNTJDNTU1NjUyMjRDMkFFNzAwOTlGNUND
IC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsdWVS
ZXBSZWR1Y3Rpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2
IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQ
cm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJl
QVJNNjRFSGFzaFBpbnNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZUFSTTY0RUhhc2hQ
aW5zSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkNBRUM3MzI3OTBC
OEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MkNBRUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTJDRDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhl
Y3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0
ZXN0ZGZnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcu
Y3BwOyBwYXRoID0gZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTYyNyw3ICs1NjMxLDYgQEAKIAkJRkU0OEU2MzcxRUIxMThBRDAwNUQ3QTk2IC8qIE9iamVj
dEluaXRpYWxpemF0aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFNEJGRjI5MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbk92ZXJyaWRl
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEJGRjJBMUFENDc2RTcwMDA4
OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGdW5jdGlvbk92ZXJyaWRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
RTRENTVCNzFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvblN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTUwNjg2NDFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVt
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUwNjg2NjFBRTI1RTI4MDAwOURB
QjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFNTMzQ0EwMUYyMTdDMzEwMDE2QTFGRSAvKiB0ZXN0bWFzbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSB0ZXN0bWFzbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
ODE1LDcgKzc4MTgsNiBAQAogCQkJCUEzOENBNTlCMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAx
LmNwcCAqLywKIAkJCQlBMzhDQTU5QzI2REQ4NERFMDBDOEQ4NEMgLyogSVNPODYwMS5oICovLAog
CQkJCThCOUY2RDU1MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggKi8sCi0JCQkJ
RkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcw
MTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLAogCQkJ
CTcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLywKIAkJ
CQk3MERDM0UwNzFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuY3BwICovLApA
QCAtODgwMiw2ICs4ODA0LDkgQEAKIAkJCQlGRTEwQUFFOTFGNDRENTEwMDA5REVEQzUgLyogUHJv
YmVTdGFjay5jcHAgKi8sCiAJCQkJRkUxMEFBRUExRjQ0RDUxMjAwOURFREM1IC8qIFByb2JlU3Rh
Y2suaCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTkgLyogUmVnaXN0ZXJJbmZvLmgg
Ki8sCisJCQkJNTJDQUVDNzMyNzkwQjhGNjAwRERCQUFGIC8qIFNlY3VyZUFSTTY0RUhhc2hQaW5z
LmNwcCAqLywKKwkJCQk1MkNBRUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFz
aFBpbnMuaCAqLywKKwkJCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRF
SGFzaFBpbnNJbmxpbmVzLmggKi8sCiAJCQkJRkU1MzNDQTAxRjIxN0MzMTAwMTZBMUZFIC8qIHRl
c3RtYXNtLmNwcCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTIgLyogWDg2XzY0UmVn
aXN0ZXJzLmggKi8sCiAJCQkJOTY4OENCMTQwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxl
ci5oICovLApAQCAtMTAwMTksNiArMTAwMjQsNyBAQAogCQkJCTBGQkUwRjczMTZDMURCMDUwMDgy
QzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4
OUNGNjE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUExNEVGOTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyogU2VjdXJl
QVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4
RDk3NiAvKiBERkdEQ0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNCRkE1RDAyMUU4NTNB
MTAwOUMwRUJBIC8qIERGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY4RjJCOUExNzJGMDUwMTAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMDQ3Niw3ICsxMDQ4Miw2IEBACiAJCQkJMEY1RTBGRTcyMDg2QUQ0
ODAwOTdGMERFIC8qIElzb1N1YnNwYWNlUGVyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCThCOUY2
RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1M0Q0MUVDOTIzQzAwODFBMDBBRTk4NEIgLyogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmggaW4g
SGVhZGVycyAqLywKLQkJCQlGRTRENTVCODFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3Rh
dHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRl
cmF0b3JPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MERDM0UwQTFCMkRGMkM3MDAw
NTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEz
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywKQEAgLTExMTc5
LDYgKzExMTg0LDcgQEAKIAkJCQlFMzNCQkUwOTI1QkZBMDQxMDA1MzY5MEYgLyogV2FzbVN0cmVh
bWluZ0NvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVD
MTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEy
NUJGQTczQjAwRUZFMzAzIC8qIFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MkNBRUM3NjI3OTBCOTAxMDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEQwMUJGNTI2REVFRjUzMDBDQUUwRDAgLyogV2Fz
bVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThEQTA1QTAwMjlBOTMyIC8qIFdh
c21UaHVua3MuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25FZmZvcnQuaCIKKyNpbmNsdWRlICJTZWN1cmVB
Uk02NEVIYXNoUGluc0lubGluZXMuaCIKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxz
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMjAzLDE1ICsyMDQsMzgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIENQVShBUk02NEUpCisgICAgdGVtcGxh
dGUgPGJvb2wgc2hvdWxkU2lnbj4KICAgICBjbGFzcyBBUk02NEVIYXNoIHsKKyAgICAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQVJNNjRFSGFzaCk7CiAgICAgcHVibGljOgotICAgICAgICBBUk02
NEVIYXNoKHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBUk02NEVIYXNoKHZvaWQqKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBzZXRVcGRhdGVkSGFzaCgwLCAwLCBkaXZlcnNpZmllcik7Cisg
ICAgICAgIH0KKworICAgICAgICB+QVJNNjRFSGFzaCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG1faW5pdGlhbGl6ZWRQaW4pIHsKKyAgICAgICAgICAgICAgICBnX2pzY0NvbmZpZy5h
cm02NGVIYXNoUGlucy5kZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCgpOworICAgICAgICAg
ICAgICAgIG1faW5pdGlhbGl6ZWRQaW4gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogCiAgICAgICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgdXBkYXRlKHVpbnQzMl90IGluc3Ry
dWN0aW9uLCB1aW50MzJfdCBpbmRleCwgdm9pZCogZGl2ZXJzaWZpZXIpCiAgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShpbmRleCA9PSAwKSkgeworICAgICAgICAgICAgICAgIGlm
IGNvbnN0ZXhwciAoc2hvdWxkU2lnbikgeworICAgICAgICAgICAgICAgICAgICBtX2luaXRpYWxp
emVkUGluID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZ19qc2NDb25maWcuYXJtNjRlSGFz
aFBpbnMuYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgICAgICAgICAgICAg
IHNldFVwZGF0ZWRIYXNoKDAsIDAsIGRpdmVyc2lmaWVyKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgbV9oYXNoID0gMDsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgdWludDMyX3QgY3VycmVudEhhc2ggPSB0aGlzLT5jdXJyZW50SGFzaChpbmRleCwg
ZGl2ZXJzaWZpZXIpOwogICAgICAgICAgICAgdWludDY0X3QgbmV4dEluZGV4ID0gaW5kZXggKyAx
OwogICAgICAgICAgICAgdWludDMyX3Qgb3V0cHV0ID0gbmV4dFZhbHVlKGluc3RydWN0aW9uLCBu
ZXh0SW5kZXgsIGN1cnJlbnRIYXNoKTsKQEAgLTIzNSwyOSArMjU5LDI4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuIChhID4+IDM5KSBeIChiID4+IDIzKTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGJpdHNGb3JEaXZlcnNp
Zmllcih2b2lkKiBkaXZlcnNpZmllcikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgdWlu
dDMyX3QgcGluKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGRpdmVyc2lmaWVyKTsKKyAgICAgICAgICAgIHJldHVybiBnX2pzY0NvbmZpZy5h
cm02NGVIYXNoUGlucy5waW5Gb3JDdXJyZW50VGhyZWFkKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGN1cnJlbnRIYXNoKHVpbnQzMl90IGluZGV4LCB2b2lk
KiBkaXZlcnNpZmllcikKKyAgICAgICAgQUxXQVlTX0lOTElORSB1aW50MzJfdCBjdXJyZW50SGFz
aCh1aW50MzJfdCBpbmRleCwgdm9pZCopCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaGFz
aEZpZWxkSXNUYWdnZWQgPSBpbmRleCA9PSAwOwotICAgICAgICAgICAgaWYgKGhhc2hGaWVsZElz
VGFnZ2VkKQotICAgICAgICAgICAgICAgIHJldHVybiB1bnRhZ0ludChtX2hhc2gsIG1ha2VEaXZl
cnNpZmllcihpbml0aWFsaXphdGlvbk5hbWVzcGFjZSwgaW5kZXgsIGJpdHNGb3JEaXZlcnNpZmll
cihkaXZlcnNpZmllcikpKTsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2hvdWxkU2lnbikK
KyAgICAgICAgICAgICAgICByZXR1cm4gdW50YWdJbnQobV9oYXNoLCBtYWtlRGl2ZXJzaWZpZXIo
aW5pdGlhbGl6YXRpb25OYW1lc3BhY2UsIGluZGV4LCBwaW4oKSkpOwogICAgICAgICAgICAgcmV0
dXJuIG1faGFzaDsKICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRV
cGRhdGVkSGFzaCh1aW50MzJfdCB2YWx1ZSwgdWludDMyX3QgaW5kZXgsIHZvaWQqIGRpdmVyc2lm
aWVyKQorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VXBkYXRlZEhhc2godWludDMyX3Qg
dmFsdWUsIHVpbnQzMl90IGluZGV4LCB2b2lkKikKICAgICAgICAgewotICAgICAgICAgICAgYm9v
bCBzaG91bGRUYWdIYXNoRmllbGQgPSBpbmRleCA9PSAwOwotICAgICAgICAgICAgaWYgKHNob3Vs
ZFRhZ0hhc2hGaWVsZCkKLSAgICAgICAgICAgICAgICBtX2hhc2ggPSB0YWdJbnQoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHZhbHVlKSwgbWFrZURpdmVyc2lmaWVyKGluaXRpYWxpemF0aW9uTmFtZXNw
YWNlLCBpbmRleCwgYml0c0ZvckRpdmVyc2lmaWVyKGRpdmVyc2lmaWVyKSkpOworICAgICAgICAg
ICAgaWYgY29uc3RleHByIChzaG91bGRTaWduKQorICAgICAgICAgICAgICAgIG1faGFzaCA9IHRh
Z0ludChzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpLCBtYWtlRGl2ZXJzaWZpZXIoaW5pdGlh
bGl6YXRpb25OYW1lc3BhY2UsIGluZGV4LCBwaW4oKSkpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG1faGFzaCA9IHZhbHVlOworICAgICAgICAgICAgICAgIG1faGFzaCA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICB1aW50NjRf
dCBtX2hhc2g7CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZFBpbiB7IGZhbHNlIH07CiAgICAg
fTsKICNlbmRpZiAvLyBDUFUoQVJNNjRFKQogCkBAIC00MDksNiArNDMyLDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLmJ1
ZmZlcigpOyB9CiAjZW5kaWYKIAorI2lmIENQVShBUk02NEUpCisgICAgICAgIEFSTTY0RUhhc2g8
dHJ1ZT4mIGFybTY0ZUhhc2goKSB7IHJldHVybiBtX2hhc2g7IH0KKyNlbmRpZgorCiAgICAgcHJv
dGVjdGVkOgogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+CiAgICAgICAg
IHZvaWQgcHV0SW50ZWdyYWwoSW50ZWdyYWxUeXBlIHZhbHVlKQpAQCAtNDU5LDcgKzQ4Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBc3NlbWJsZXJEYXRhIG1fc3RvcmFnZTsKICAgICAg
ICAgdW5zaWduZWQgbV9pbmRleDsKICNpZiBDUFUoQVJNNjRFKQotICAgICAgICBBUk02NEVIYXNo
IG1faGFzaDsKKyAgICAgICAgQVJNNjRFSGFzaDx0cnVlPiBtX2hhc2g7CiAgICAgICAgIEFzc2Vt
YmxlckRhdGEgbV9oYXNoZXM7CiAjZW5kaWYKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyODgwMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFu
ZExpbmtDb2RlKAogICAgIHVpbnQ4X3QqIGluRGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4o
bV9hc3NlbWJsZXJTdG9yYWdlLmJ1ZmZlcigpKTsKICNpZiBDUFUoQVJNNjRFKQogICAgIHZvaWQq
IGJ1ZmZlclB0ciA9ICZtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5idWZmZXIoKTsKLSAgICBB
Uk02NEVIYXNoIHZlcmlmeVVuY29tcGFjdGVkSGFzaCB7IGJ1ZmZlclB0ciB9OworICAgIEFSTTY0
RUhhc2g8ZmFsc2U+IHZlcmlmeVVuY29tcGFjdGVkSGFzaCB7IGJ1ZmZlclB0ciB9OwogICAgIG1f
YXNzZW1ibGVySGFzaGVzU3RvcmFnZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZl
cigpLnJlbGVhc2VBc3NlbWJsZXJIYXNoZXMoKTsKICAgICB1aW50MzJfdCogaW5IYXNoZXMgPSBi
aXR3aXNlX2Nhc3Q8dWludDMyX3QqPihtX2Fzc2VtYmxlckhhc2hlc1N0b3JhZ2UuYnVmZmVyKCkp
OwogI2VuZGlmCkBAIC00MzgsNiArNDM4LDEwIEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUo
TWFjcm9Bc3NlbWJsZXIKICAgICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fz
c2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIH0KIAorI2lmIENQVShBUk02NEUpCisgICAgbWFjcm9B
c3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkuYXJtNjRlSGFzaCgpLmRlYWxsb2NhdGVQaW5G
b3JDdXJyZW50VGhyZWFkKCk7CisjZW5kaWYKKwogICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4
ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZv
cnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFS
TTY0RUhhc2hQaW5zLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGlucy5oIgor
CisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkZhc3RKSVRQZXJt
aXNzaW9ucy5oIgorI2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisKK3N0cnVjdCBXcml0
ZVRvSklUUmVnaW9uU2NvcGUgeworICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSgpCisgICAgewor
ICAgICAgICB0aHJlYWRTZWxmUmVzdHJpY3RSV1hUb1JXKCk7CisgICAgfQorCisgICAgfldyaXRl
VG9KSVRSZWdpb25TY29wZSgpCisgICAgeworICAgICAgICB0aHJlYWRTZWxmUmVzdHJpY3RSV1hU
b1JYKCk7CisgICAgfQorfTsKKworc3RydWN0IFZhbGlkYXRlQXRvbWljaXR5U2NvcGUgeworICAg
IFZhbGlkYXRlQXRvbWljaXR5U2NvcGUoU2VjdXJlQVJNNjRFSGFzaFBpbnM6Ok1ldGFkYXRhKiBt
ZXRhZGF0YSkKKyAgICAgICAgOiBtX21ldGFkYXRhKG1ldGFkYXRhKQorICAgIHsKKyAgICAgICAg
dWludDMyX3QgdmFsaWRhdGVBdG9taWNpdHkgPSBtX21ldGFkYXRhLT5hc3NlcnROb3RSZWVudHJh
bnQuZXhjaGFuZ2UoMSwgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCF2YWxpZGF0ZUF0b21pY2l0eSk7CisgICAgfQorCisgICAgflZhbGlkYXRlQXRv
bWljaXR5U2NvcGUoKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdmFsaWRhdGVBdG9taWNpdHkg
PSBtX21ldGFkYXRhLT5hc3NlcnROb3RSZWVudHJhbnQuZXhjaGFuZ2UoMCwgc3RkOjptZW1vcnlf
b3JkZXJfc2VxX2NzdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZhbGlkYXRlQXRvbWljaXR5
ID09IDEpOworICAgIH0KKyAgICBTZWN1cmVBUk02NEVIYXNoUGluczo6TWV0YWRhdGEqIG1fbWV0
YWRhdGE7Cit9OworCisvLyBUaGlzIGNsYXNzIGlzIGFsbG9jYXRlZCBvbmNlIHBlciBwcm9jZXNz
LCBzbyBzdGF0aWMgbG9jayBpcyBvay4KK3N0YXRpYyBMb2NrIGhhc2hQaW5zTG9jazsKKworQUxX
QVlTX0lOTElORSBzdGF0aWMgdm9pZCogYWxsb2NhdGVJbkV4ZWN1dGFibGVNZW1vcnkoc2l6ZV90
IHNpemUpCit7CisgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoc2l6ZSwgSklUQ29tcGlsYXRpb25NdXN0
U3VjY2VlZCkubGVha1JlZigpOworICAgIFJFTEVBU0VfQVNTRVJUKGhhbmRsZSk7CisgICAgdm9p
ZCogbWVtb3J5ID0gYml0d2lzZV9jYXN0PGNoYXIqPihoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQ
dHIoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhtZW1vcnkpICYmIGlzSklUUEMoYml0
d2lzZV9jYXN0PGNoYXIqPihtZW1vcnkpICsgc2l6ZSAtIDEpKTsKKyAgICByZXR1cm4gbWVtb3J5
OworfQorCitzdGF0aWMgdm9pZCBpbml0aWFsaXplUGFnZShjb25zdCBXcml0ZVRvSklUUmVnaW9u
U2NvcGUmLCBTZWN1cmVBUk02NEVIYXNoUGluczo6UGFnZSogcGFnZSkKK3sKKyAgICBuZXcgKHBh
Z2UpIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpQYWdlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBTZWN1cmVBUk02NEVIYXNoUGluczo6bnVtRW50cmllc1BlclBhZ2U7ICsraSkgeworICAg
ICAgICBhdXRvJiBlbnRyeSA9IHBhZ2UtPmVudHJ5KGkpOworICAgICAgICBlbnRyeS5waW4gPSAw
OworICAgICAgICBlbnRyeS5rZXkgPSAwOworICAgIH0KK30KKwordm9pZCBTZWN1cmVBUk02NEVI
YXNoUGluczo6aW5pdGlhbGl6ZUF0U3RhcnR1cCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1f
bWVtb3J5KTsKKworICAgIG1fbWVtb3J5ID0gYml0d2lzZV9jYXN0PGNoYXIqPihhbGxvY2F0ZUlu
RXhlY3V0YWJsZU1lbW9yeShzaXplb2YoTWV0YWRhdGEpICsgUGFnZTo6YWxsb2NhdGlvblNpemUo
KSkpICsgc2l6ZW9mKE1ldGFkYXRhKTsKKworICAgIHsKKyAgICAgICAgV3JpdGVUb0pJVFJlZ2lv
blNjb3BlIHdyaXRlU2NvcGU7CisKKyAgICAgICAgbmV3IChtZXRhZGF0YSgpKSBNZXRhZGF0YTsg
CisgICAgICAgIGluaXRpYWxpemVQYWdlKHdyaXRlU2NvcGUsIGZpcnN0UGFnZSgpKTsKKyAgICB9
Cit9CisKK3VpbnQ2NF90IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjphbGxvY2F0ZVBpbkZvckN1cnJl
bnRUaHJlYWQoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBoYXNoUGluc0xvY2sgfTsKKworICAg
IGF1dG8qIG1ldGFkYXRhID0gdGhpcy0+bWV0YWRhdGEoKTsKKworICAgIGF1dG8gZmluZFJlc3Vs
dCA9IGZpbmRFbnRyeSgpOworICAgIEVudHJ5KiBwcmVleGlzdGluZ0VudHJ5ID0gZmluZFJlc3Vs
dC5lbnRyeTsKKyAgICBzaXplX3QgcHJlZXhpc3RpbmdFbnRyeUluZGV4ID0gZmluZFJlc3VsdC5p
bmRleDsKKyAgICBQYWdlKiBwcmVleGlzdGluZ0VudHJ5UGFnZSA9IGZpbmRSZXN1bHQucGFnZTsK
KworICAgIHNpemVfdCBuZXdFbnRyeTsKKyAgICBQYWdlKiBuZXdFbnRyeVBhZ2U7CisgICAgewor
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIHNpemVfdCBiYXNlSW5kZXggPSAw
OworICAgICAgICBQYWdlKiBsYXN0UGFnZSA9IG51bGxwdHI7CisgICAgICAgIGZvckVhY2hQYWdl
KFsmXSAoUGFnZSYgcGFnZSkgeworICAgICAgICAgICAgc2l6ZV90IGJpdCA9IHBhZ2UuZmluZENs
ZWFyQml0KCk7CisgICAgICAgICAgICBpZiAoYml0IDwgbnVtRW50cmllc1BlclBhZ2UpIHsKKyAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbmV3RW50cnkgPSBi
YXNlSW5kZXggKyBiaXQ7CisgICAgICAgICAgICAgICAgbmV3RW50cnlQYWdlID0gJnBhZ2U7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYmFzZUluZGV4ICs9IG51bUVudHJpZXNQZXJQYWdlOworICAgICAg
ICAgICAgbGFzdFBhZ2UgPSAmcGFnZTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0
dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoIWZvdW5k
KSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxhc3RQYWdlLT5uZXh0KTsKKyAgICAg
ICAgICAgIFBhZ2UqIG5leHRQYWdlID0gYml0d2lzZV9jYXN0PFBhZ2UqPihhbGxvY2F0ZUluRXhl
Y3V0YWJsZU1lbW9yeShQYWdlOjphbGxvY2F0aW9uU2l6ZSgpKSk7CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2NvcGU7CisgICAgICAg
ICAgICAgICAgVmFsaWRhdGVBdG9taWNpdHlTY29wZSB2YWxpZGF0ZUF0b21pY2l0eShtZXRhZGF0
YSk7CisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVBhZ2Uod3JpdGVTY29wZSwgbmV4dFBhZ2Up
OworICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIGJlIHJlYWQgZnJvbSBjb25jdXJyZW50bHku
IE1ha2Ugc3VyZSBpdCdzIGluIGEgZ29vZCBzdGF0ZSBmb3IgdGhhdCB0byBoYXBwZW4uCisgICAg
ICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICBsYXN0
UGFnZS0+bmV4dCA9IG5leHRQYWdlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3RW50
cnlQYWdlID0gbmV4dFBhZ2U7CisgICAgICAgICAgICBzaXplX3QgYml0ID0gbmV4dFBhZ2UtPmZp
bmRDbGVhckJpdCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0ID09IDApOworICAg
ICAgICAgICAgbmV3RW50cnkgPSBiYXNlSW5kZXggKyBiaXQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB1aW50NjRfdCBwaW47CisgICAgeworICAgICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsK
KworICAgICAgICBXcml0ZVRvSklUUmVnaW9uU2NvcGUgd3JpdGVTY29wZTsKKyAgICAgICAgVmFs
aWRhdGVBdG9taWNpdHlTY29wZSB2YWxpZGF0ZUF0b21pY2l0eShtZXRhZGF0YSk7CisKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhtZXRhZGF0YSkpOworCisgICAgICAgIHBpbiA9IG1l
dGFkYXRhLT5uZXh0UGluLmV4Y2hhbmdlQWRkKDEsIHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3Qp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChwaW4pOworCisgICAgICAgIG5ld0VudHJ5UGFnZS0+
c2V0SXNJblVzZShuZXdFbnRyeSk7CisKKyAgICAgICAgaWYgKHByZWV4aXN0aW5nRW50cnkgJiYg
cHJlZXhpc3RpbmdFbnRyeUluZGV4IDwgbmV3RW50cnkpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHByZWV4aXN0aW5nRW50cnlQYWdlLT5pc0luVXNlKHByZWV4aXN0aW5nRW50cnlJbmRl
eCkpOworCisgICAgICAgICAgICBuZXdFbnRyeVBhZ2UtPmVudHJ5KG5ld0VudHJ5KSA9ICpwcmVl
eGlzdGluZ0VudHJ5OworICAgICAgICAgICAgbmV3RW50cnkgPSBwcmVleGlzdGluZ0VudHJ5SW5k
ZXg7CisgICAgICAgICAgICBuZXdFbnRyeVBhZ2UgPSBwcmVleGlzdGluZ0VudHJ5UGFnZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5ID0gbmV3RW50cnlQYWdlLT5lbnRyeShuZXdF
bnRyeSk7CisgICAgICAgIGVudHJ5LnBpbiA9IHBpbjsKKyAgICAgICAgZW50cnkua2V5ID0ga2V5
Rm9yQ3VycmVudFRocmVhZCgpOworICAgIH0KKworICAgIHJldHVybiBwaW47Cit9CisKK3ZvaWQg
U2VjdXJlQVJNNjRFSGFzaFBpbnM6OmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCkKK3sK
KyAgICBMb2NrZXIgbG9ja2VyIHsgaGFzaFBpbnNMb2NrIH07CisgICAgYXV0byogbWV0YWRhdGEg
PSB0aGlzLT5tZXRhZGF0YSgpOworCisgICAgYXV0byBjbGVhciA9IFsmXSAoRW50cnkmIGVudHJ5
KSB7CisgICAgICAgIGVudHJ5LnBpbiA9IDA7CisgICAgICAgIGVudHJ5LmtleSA9IDA7CisgICAg
fTsKKworICAgIFBhZ2UqIHJlbW92YWxQYWdlOworICAgIHNpemVfdCByZW1vdmFsSW5kZXg7Cisg
ICAgeworICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBmaW5kRW50cnkoKTsKKyAgICAgICAgRW50
cnkmIGVudHJ5ID0gKmZpbmRSZXN1bHQuZW50cnk7CisgICAgICAgIHJlbW92YWxJbmRleCA9IGZp
bmRSZXN1bHQuaW5kZXg7CisgICAgICAgIHJlbW92YWxQYWdlID0gZmluZFJlc3VsdC5wYWdlOwor
CisgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNjb3BlOworICAgICAgICBWYWxp
ZGF0ZUF0b21pY2l0eVNjb3BlIHZhbGlkYXRlQXRvbWljaXR5KG1ldGFkYXRhKTsKKworICAgICAg
ICBjbGVhcihlbnRyeSk7CisgICAgICAgIHJlbW92YWxQYWdlLT5jbGVhcklzSW5Vc2UocmVtb3Zh
bEluZGV4KTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGFsbG93cyByZWN1
cnNpdmUgdXNlcyBvZiB0aGUgTWFjcm9Bc3NlbWJsZXIsIGZvcm1pbmcgYSBzdGFjaworICAgIC8v
IGxpa2UgZGF0YSBzdHJ1Y3R1cmUuIFRoZSBpbiB1c2UgcGluICh0b3Agb2YgdGhlIHN0YWNrKSB3
aWxsIGFsd2F5cyBiZSBhdCB0aGUgbG93ZXN0CisgICAgLy8gcGFnZSBhbmQgbG93ZXN0IGluZGV4
IGluIHRoZSBiaXQgdmVjdG9yLiBTbyB3aGVuIHdlIGRlYWxsb2NhdGUgdGhlIGN1cnJlbnQgdG9w
IG9mIHRoZQorICAgIC8vIHN0YWNrLCB3ZSBuZWVkIHRvIGZpbmQgdGhlIG5leHQgZW50cnkgaW4g
dGhlIHN0YWNrLCBhbmQgZW5zdXJlIGl0J3MgYXQgdGhlIGxvd2VzdCBpbmRleC4KKyAgICAvLyBT
byBpZiB0aGVyZSBhcmUgb3RoZXIgZW50cmllcyBmb3IgdGhpcyBjdXJyZW50IHRocmVhZCwgd2Ug
ZmluZCB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QKKyAgICAvLyBwaW4gKG5leHQgdG9wIG9mIHN0
YWNrIHZhbHVlKSwgYW5kIHJlcGxhY2UgaXQgYXQgdGhlIGluZGV4IHdlIHdlcmUgdXNpbmcgYmVm
b3JlLgorICAgIC8vIEFkZGl0aW9uIGFsc28gbWFpbnRhaW5zIHRoaXMgaW52YXJpYW50IGJ5IGFs
d2F5cyBwbGFjaW5nIHRoZSBuZXdlc3QgZW50cnkgZm9yCisgICAgLy8gdGhlIGN1cnJlbnQgdGhy
ZWFkIGF0IHRoZSBsb3dlc3QgaW5kZXguCisgICAgeworICAgICAgICB1aW50NjRfdCBrZXkgPSBr
ZXlGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAg
ICAgdWludDY0X3QgbWF4UGluID0gMDsKKyAgICAgICAgc2l6ZV90IG1heEluZGV4ID0gc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKKyAgICAgICAgUGFnZSogbWF4UGFnZSA9IG51
bGxwdHI7CisKKyAgICAgICAgZm9yRWFjaEVudHJ5KFsmXSAoUGFnZSYgcGFnZSwgRW50cnkmIGVu
dHJ5LCBzaXplX3QgaW5kZXgpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5LnBp
bik7CisgICAgICAgICAgICBpZiAoZW50cnkua2V5ID09IGtleSAmJiBlbnRyeS5waW4gPiBtYXhQ
aW4pIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbWF4
UGluID0gZW50cnkucGluOworICAgICAgICAgICAgICAgIG1heEluZGV4ID0gaW5kZXg7CisgICAg
ICAgICAgICAgICAgbWF4UGFnZSA9ICZwYWdlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZW1vdmFsSW5kZXgg
PCBtYXhJbmRleCk7CisKKyAgICAgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNj
b3BlOworICAgICAgICAgICAgVmFsaWRhdGVBdG9taWNpdHlTY29wZSB2YWxpZGF0ZUF0b21pY2l0
eShtZXRhZGF0YSk7CisKKyAgICAgICAgICAgIHJlbW92YWxQYWdlLT5lbnRyeShyZW1vdmFsSW5k
ZXgpID0gbWF4UGFnZS0+ZW50cnkobWF4SW5kZXgpOworICAgICAgICAgICAgY2xlYXIobWF4UGFn
ZS0+ZW50cnkobWF4SW5kZXgpKTsKKyAgICAgICAgICAgIG1heFBhZ2UtPmNsZWFySXNJblVzZSht
YXhJbmRleCk7CisgICAgICAgICAgICByZW1vdmFsUGFnZS0+c2V0SXNJblVzZShyZW1vdmFsSW5k
ZXgpOworICAgICAgICB9CisgICAgfQorfQorCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkgJiYgRU5B
QkxFKEpJVCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFz
aFBpbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgQ1BVKEFS
TTY0RSkgJiYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFNlY3VyZUFSTTY0RUhhc2hQaW5zIHsKK3B1YmxpYzoKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVBdFN0YXJ0dXAoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB1aW50NjRfdCBhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdWludDY0X3QgcGluRm9yQ3VycmVudFRocmVhZCgpOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtRW50cmllc1BlclBhZ2UgPSA2NDsKKworICAg
IHN0cnVjdCBFbnRyeSB7CisgICAgICAgIHVpbnQ2NF90IHBpbjsKKyAgICAgICAgdWludDY0X3Qg
a2V5OworICAgIH07CisKKyAgICBzdHJ1Y3QgYWxpZ25hcyhhbGlnbm9mKEVudHJ5KSkgUGFnZSB7
CisgICAgICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoKSB7IHJldHVybiBzaXplb2Yo
UGFnZSkgKyBudW1FbnRyaWVzUGVyUGFnZSAqIHNpemVvZihFbnRyeSk7IH0KKworICAgICAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBtYXNrID0gbnVtRW50cmllc1BlclBhZ2UgLSAxOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KCEobWFzayAmIG51bUVudHJpZXNQZXJQYWdlKSk7CisKKyAgICAg
ICAgaW5saW5lIEVudHJ5JiBlbnRyeShzaXplX3QgaW5kZXgpCisgICAgICAgIHsgCisgICAgICAg
ICAgICBFbnRyeSogZW50cmllcyA9IGJpdHdpc2VfY2FzdDxFbnRyeSo+KGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgKyBzaXplb2YoUGFnZSkpOworICAgICAgICAgICAgcmV0dXJuIGVudHJpZXNb
aW5kZXggJiBtYXNrXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRJc0lu
VXNlKHNpemVfdCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaXNJblVzZU1hcC5zZXQo
aW5kZXggJiBtYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXJJc0luVXNlKHNp
emVfdCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaXNJblVzZU1hcC5zZXQoaW5kZXgg
JiBtYXNrLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzSW5Vc2Uoc2l6ZV90
IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJblVzZU1hcC5nZXQoaW5k
ZXggJiBtYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBmaW5kQ2xlYXJCaXQoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJblVzZU1hcC5maW5kQml0KDAsIGZhbHNl
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAg
ICAgICAgdm9pZCBmb3JFYWNoU2V0Qml0KEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpc0luVXNlTWFwLmZvckVhY2hTZXRCaXQoZnVuY3Rpb24pOworICAgICAgICB9
CisKKyAgICAgICAgUGFnZSogbmV4dCB7IG51bGxwdHIgfTsKKyAgICBwcml2YXRlOgorICAgICAg
ICBCaXRtYXA8bnVtRW50cmllc1BlclBhZ2U+IGlzSW5Vc2VNYXA7CisgICAgfTsKKworICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKFBhZ2UpICUgYWxpZ25vZihFbnRyeSkgPT0gMCk7CisKKyAgICBz
dHJ1Y3QgYWxpZ25hcyhhbGlnbm9mKFBhZ2UpKSBNZXRhZGF0YSB7CisgICAgICAgIEF0b21pYzx1
aW50NjRfdD4gbmV4dFBpbiB7IDEgfTsKKyAgICAgICAgQXRvbWljPHVpbnQzMl90PiBhc3NlcnRO
b3RSZWVudHJhbnQgeyAwIH07CisgICAgfTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE1l
dGFkYXRhKSAlIGFsaWdub2YoUGFnZSkgPT0gMCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVp
bnQ2NF90IGtleUZvckN1cnJlbnRUaHJlYWQoKTsKKworICAgIHN0cnVjdCBGaW5kUmVzdWx0IHsK
KyAgICAgICAgRW50cnkqIGVudHJ5IHsgbnVsbHB0ciB9OworICAgICAgICBzaXplX3QgaW5kZXgg
eyBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIH07CisgICAgICAgIFBhZ2UqIHBh
Z2UgeyBudWxscHRyIH07CisgICAgfTsKKyAgICBGaW5kUmVzdWx0IGZpbmRFbnRyeSgpOworCisg
ICAgaW5saW5lIE1ldGFkYXRhKiBtZXRhZGF0YSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxNZXRh
ZGF0YSo+KGJpdHdpc2VfY2FzdDxjaGFyKj4obV9tZW1vcnkpIC0gc2l6ZW9mKE1ldGFkYXRhKSk7
IH0KKyAgICBpbmxpbmUgUGFnZSogZmlyc3RQYWdlKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFBh
Z2UqPihtX21lbW9yeSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAg
ICB2b2lkIGZvckVhY2hQYWdlKEZ1bmN0aW9uKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hFbnRyeShGdW5jdGlvbik7CisKKyAgICB2b2lkKiBt
X21lbW9yeSB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGluc0lubGlu
ZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Nl
Y3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGlucy5oIgorCisjaWYgQ1BVKEFS
TTY0RSkgJiYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK0FMV0FZU19JTkxJTkUg
dWludDY0X3QgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmtleUZvckN1cnJlbnRUaHJlYWQoKQorewor
ICAgIHVpbnQ2NF90IHJlc3VsdDsKKyAgICBhc20gKAorICAgICAgICAibXJzICV4W3Jlc3VsdF0s
IFRQSURSUk9fRUwwIgorICAgICAgICA6IFtyZXN1bHRdICI9ciIgKHJlc3VsdCkKKyAgICAgICAg
OgorICAgICAgICA6CisgICAgKTsKKyAgICByZXR1cm4gcmVzdWx0ICsgMTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxXQVlTX0lOTElORSB2b2lkIFNlY3VyZUFSTTY0RUhh
c2hQaW5zOjpmb3JFYWNoUGFnZShGdW5jdGlvbiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKFBhZ2Uq
IHBhZ2UgPSBmaXJzdFBhZ2UoKTsgcGFnZTsgcGFnZSA9IHBhZ2UtPm5leHQpIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhwYWdlKSk7CisgICAgICAgIGlmIChmdW5jdGlvbigqcGFn
ZSkgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxXQVlTX0lOTElORSB2b2lkIFNl
Y3VyZUFSTTY0RUhhc2hQaW5zOjpmb3JFYWNoRW50cnkoRnVuY3Rpb24gZnVuY3Rpb24pCit7Cisg
ICAgc2l6ZV90IGJhc2VJbmRleCA9IDA7CisgICAgZm9yRWFjaFBhZ2UoWyZdIChQYWdlJiBwYWdl
KSB7CisgICAgICAgIEl0ZXJhdGlvblN0YXR1cyBpdGVyYXRpb25TdGF0dXMgPSBJdGVyYXRpb25T
dGF0dXM6OkNvbnRpbnVlOworICAgICAgICBwYWdlLmZvckVhY2hTZXRCaXQoWyZdIChzaXplX3Qg
Yml0SW5kZXgpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGJhc2VJbmRleCArIGJpdElu
ZGV4OworICAgICAgICAgICAgRW50cnkmIGVudHJ5ID0gcGFnZS5lbnRyeShpbmRleCk7CisgICAg
ICAgICAgICBBU1NFUlQoaXNKSVRQQygmZW50cnkpKTsKKyAgICAgICAgICAgIGl0ZXJhdGlvblN0
YXR1cyA9IGZ1bmN0aW9uKHBhZ2UsIGVudHJ5LCBpbmRleCk7CisgICAgICAgICAgICByZXR1cm4g
aXRlcmF0aW9uU3RhdHVzOworICAgICAgICB9KTsKKyAgICAgICAgYmFzZUluZGV4ICs9IG51bUVu
dHJpZXNQZXJQYWdlOworICAgICAgICByZXR1cm4gaXRlcmF0aW9uU3RhdHVzOworICAgIH0pOwor
fQorCitBTFdBWVNfSU5MSU5FIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpGaW5kUmVzdWx0IFNlY3Vy
ZUFSTTY0RUhhc2hQaW5zOjpmaW5kRW50cnkoKQoreworICAgIHVpbnQ2NF90IGtleSA9IGtleUZv
ckN1cnJlbnRUaHJlYWQoKTsKKyAgICAvLyBXZSBjYW4gY2FsbCB0aGlzIGNvbmN1cnJlbnRseSB0
byB0aGUgYml0IHZlY3RvciBiZWluZyBtb2RpZmllZAorICAgIC8vIHNpbmNlIHdlIGVpdGhlciBj
YWxsIHRoaXMgd2hlbiB3ZSdyZSBsb2NrZWQsIG9yIHdlIGNhbGwgaXQgd2hlbgorICAgIC8vIHdl
IGtub3cgdGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzLiBXaGVuIHRoZSBlbnRyeSBhbHJlYWR5IGV4
aXN0cywKKyAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGJpdCBjYW4ndCBnZXQgZmxpcHBlZCBzcHVy
aW91c2x5IGR1cmluZyBjb25jdXJyZW50CisgICAgLy8gbW9kaWZpY2F0aW9uLCBzbyB3ZSdyZSBn
dWFyYW50ZWVkIHRvIGZpbmQgdGhlIHZhbHVlLiBXZSBtaWdodCBzZWUKKyAgICAvLyBhbiBlbnRy
eSBhcyBpdCdzIGJlaW5nIHdyaXR0ZW4gdG8sIGJ1dCB0aGF0J3MgYWxzbyBmaW5lLCBzaW5jZSBp
dAorICAgIC8vIHdvbid0IGhhdmUgb3VyIHNhbWUga2V5LiBJdCdsbCBlaXRoZXIgYmUgemVybywg
b3IgYSBkaWZmZXJlbnQga2V5LgorCisgICAgRmluZFJlc3VsdCByZXN1bHQ7CisgICAgZm9yRWFj
aEVudHJ5KFsmXSAoUGFnZSYgcGFnZSwgRW50cnkmIGVudHJ5LCBzaXplX3QgaW5kZXgpIHsKKyAg
ICAgICAgaWYgKGVudHJ5LmtleSA9PSBrZXkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5lbnRyeSA9
ICZlbnRyeTsKKyAgICAgICAgICAgIHJlc3VsdC5wYWdlID0gJnBhZ2U7CisgICAgICAgICAgICBy
ZXN1bHQuaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6
OkRvbmU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CisgICAgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBTFdBWVNfSU5MSU5FIHVp
bnQ2NF90IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpwaW5Gb3JDdXJyZW50VGhyZWFkKCkKK3sKKyAg
ICByZXR1cm4gZmluZEVudHJ5KCkuZW50cnktPnBpbjsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCwxMyArMjQsMTMgQEAKICNpbmNsdWRlICJDZWxsQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkRl
c3RydWN0aW9uTW9kZS5oIgogI2luY2x1ZGUgIkhlYXBDZWxsLmgiCi0jaW5jbHVkZSAiSXRlcmF0
aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2Vha1NldC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4K
ICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNs
dWRlIDx3dGYvQ291bnRpbmdMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvSXRlcmF0aW9uU3RhdHVzLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VCbG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwx
MyArMjIsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIK
LSNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgog
I2luY2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiUHJlY2lzZUFsbG9jYXRpb24u
aCIKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0aW9uU3RhdHVzLmg+CiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
CiAjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIkhhbmRsZVR5cGVz
LmgiCi0jaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCisjaW5jbHVkZSA8d3RmL0l0ZXJhdGlv
blN0YXR1cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01vbm90
b25pY1RpbWUuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMSArMjksMTEgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6LmgiCi0jaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAi
SklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNs
dWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+Cisj
aW5jbHVkZSA8d3RmL0l0ZXJhdGlvblN0YXR1cy5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2
YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CiAjaW5jbHVkZSA8d3RmL1JlZEJs
YWNrVHJlZS5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZp
c2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkV4ZWN1dGFibGVJbmZvLmgiCi0jaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVk
ZSAiTGV4ZXIuaCIKICNpbmNsdWRlICJNb2R1bGVTY29wZURhdGEuaCIKICNpbmNsdWRlICJOb2Rl
cy5oIgpAQCAtMzgsNiArMzcsNyBAQAogI2luY2x1ZGUgIlZhcmlhYmxlRW52aXJvbm1lbnQuaCIK
ICNpbmNsdWRlIDx3dGYvRml4ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCShyZXZpc2lv
biAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgdm9pZCBpbml0aWFs
aXplKCkKICAgICAgICAgICAgIGlmICghZ19qc2NDb25maWcudm0uY2FuVXNlSklUKSB7CiAgICAg
ICAgICAgICAgICAgT3B0aW9uczo6dXNlSklUKCkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBP
cHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisgICAgICAgICAgICAgICAgZ19qc2ND
b25maWcuYXJtNjRlSGFzaFBpbnMuaW5pdGlhbGl6ZUF0U3RhcnR1cCgpOworI2VuZGlmCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgT3B0aW9uczo6ZmluYWxpemUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdGlvblN0YXR1cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdGlvblN0YXR1cy5oCShy
ZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRp
b25TdGF0dXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWVudW0gY2xhc3MgSXRlcmF0aW9uU3RhdHVzIHsKLSAgICBDb250aW51ZSwKLSAg
ICBEb25lCi19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NDb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogI2luY2x1ZGUgIkdhdGUuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRl
ICJPcHRpb25zTGlzdC5oIgorI2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCiAjaW5j
bHVkZSA8d3RmL1dURkNvbmZpZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk5LDYgKzEwMCwx
MCBAQCBzdHJ1Y3QgQ29uZmlnIHsKICNpZiBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoUFRSVEFHX0RF
QlVHR0lORykKICAgICBXVEY6OlB0clRhZ0xvb2t1cCBwdHJUYWdMb29rdXBSZWNvcmQ7CiAjZW5k
aWYKKworI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCisgICAgU2VjdXJlQVJNNjRFSGFz
aFBpbnMgYXJtNjRlSGFzaFBpbnM7CisjZW5kaWYKIH07CiAKICNpZiBFTkFCTEUoVU5JRklFRF9B
TkRfRlJFRVpBQkxFX0NPTkZJR19SRUNPUkQpCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MDA1KQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAy
Mi0wMS0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRh
dGUgQVJNNjRFSGFzaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6Zm9yRWFjaFNl
dEJpdCBjb25zdCk6CisKIDIwMjItMDEtMTMgIEVsbGlvdHQgV2lsbGlhbXMgIDxlbXdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtYQ0J1aWxkXSBBZGQgInByb2R1Y3QgZGVwZW5kZW5jaWVzIiB3aGlj
aCBpbmZsdWVuY2Ugd29ya3NwYWNlIGJ1aWxkIG9yZGVyCkluZGV4OiBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQzMyw2ICs0
MzMsNyBAQAogCQk1MUYxNzUyQTFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyc2lzdGVudEVuY29kZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxQ0M2QjMyNEEyNzdDMjAwNDM3N0Q2IC8q
IFRyYW5zbGF0ZWRQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0ZWRQcm9j
ZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2QUVDOTExRjZCNEU1QzAw
Njk1RjVEIC8qIE5vVGFpbENhbGxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5vVGFpbENhbGxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyOTVCMDA0Mjc5
MjBDNTQwMDZENzQ2QSAvKiBJdGVyYXRpb25TdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0
aW9uU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjIyOEMxMjQ1OERD
ODIwMDc1M0Q5MSAvKiBJQ1VIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElDVUhlbHBlcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTYzNDgxRkEzRTNBMDAwMjZBNTQ1IC8q
IFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBmb2xkZXI7IHBhdGggPSBTY3JpcHRzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTaWduYWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTExNDUsNiArMTE0Niw3IEBACiAJCQkJRTMzNjY3NDkyNzIyNTUwOTAwMjU5MTIyIC8q
IEludDEyOC5jcHAgKi8sCiAJCQkJRjZENjdEMzIyNkY5MDE0MjAwNkUwMzQ5IC8qIEludDEyOC5o
ICovLAogCQkJCTMzRkQ0ODExMjY1Q0IzODAwMEFCRTRGNCAvKiBJbnRlcmZlcmVuY2VHcmFwaC5o
ICovLAorCQkJCTUyOTVCMDA0Mjc5MjBDNTQwMDZENzQ2QSAvKiBJdGVyYXRpb25TdGF0dXMuaCAq
LywKIAkJCQkwRjdFQjg1QjFGQThGRjQxMDBGMUFCQ0IgLyogSXNvTWFsbG9jLmggKi8sCiAJCQkJ
MEY3RUI4NUMxRkE4RkY0MjAwRjFBQkNCIC8qIElzb01hbGxvY0lubGluZXMuaCAqLywKIAkJCQk3
Q0REN0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oICovLApJbmRleDog
U291cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0
bWFwLmgJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8
d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRJbnRFeHRyYXMuaD4K
QEAgLTcyLDYgKzczLDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgc3Vic3VtZXMoY29uc3Qg
Qml0bWFwJikgY29uc3Q7CiAgICAgCisgICAgLy8gSWYgdGhlIGxhbWJkYSByZXR1cm5zIGFuIEl0
ZXJhdGlvblN0YXR1cywgd2UgdXNlIGl0LiBUaGUgbGFtYmRhIGNhbiBhbHNvIHJldHVybgorICAg
IC8vIHZvaWQsIGluIHdoaWNoIGNhc2UsIHdlJ2xsIGl0ZXJhdGUgZXZlcnkgc2V0IGJpdC4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaFNldEJpdChjb25zdCBG
dW5jJikgY29uc3Q7CiAgICAgCkBAIC0zODksOCArMzkyLDEzIEBAIGlubGluZSB2b2lkIEJpdG1h
cDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBz
aXplX3QgYmFzZSA9IGkgKiB3b3JkU2l6ZTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGog
PCB3b3JkU2l6ZTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAod29yZCAmIDEpCi0gICAgICAgICAg
ICAgICAgZnVuYyhiYXNlICsgaik7CisgICAgICAgICAgICBpZiAod29yZCAmIDEpIHsKKyAgICAg
ICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PEl0ZXJhdGlvblN0YXR1cywg
ZGVjbHR5cGUoZnVuYyhiYXNlICsgaikpPikgeworICAgICAgICAgICAgICAgICAgICBpZiAoZnVu
YyhiYXNlICsgaikgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICBmdW5jKGJhc2UgKyBqKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdvcmQgPj49IDE7
CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjg4
MDA1KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTExMCw2ICsxMTAsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgSW50ZXJmZXJlbmNl
R3JhcGguaAogICAgIElzb01hbGxvYy5oCiAgICAgSXNvTWFsbG9jSW5saW5lcy5oCisgICAgSXRl
cmF0aW9uU3RhdHVzLmgKICAgICBJdGVyYXRvckFkYXB0b3JzLmgKICAgICBJdGVyYXRvclJhbmdl
LmgKICAgICBKU09OVmFsdWVzLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0l0ZXJhdGlvblN0YXR1
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0l0ZXJhdGlvblN0YXR1cy5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0l0ZXJhdGlvblN0YXR1cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitlbnVtIGNsYXNz
IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgQ29udGludWUsCisgICAgRG9uZQorfTsKKworfQorCit1
c2luZyBXVEY6Okl0ZXJhdGlvblN0YXR1czsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449236</attachid>
            <date>2022-01-14 17:45:54 -0800</date>
            <delta_ts>2022-01-19 10:56:26 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>48457</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MDE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDIyLTAxLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBBUk02NEVIYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNo
OjpBUk02NEVIYXNoKToKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6fkFSTTY0RUhhc2gpOgor
ICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpkZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCk6
CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAgICAgIChKU0M6OkFSTTY0
RUhhc2g6OnBpbik6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OmN1cnJlbnRIYXNoKToKKyAg
ICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6c2V0VXBkYXRlZEhhc2gpOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXI6OmFybTY0ZUhhc2gpOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpi
aXRzRm9yRGl2ZXJzaWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29k
ZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFsbG9jYXRlKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V3Jp
dGVUb0pJVFJlZ2lvblNjb3BlOjpXcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpXcml0ZVRvSklUUmVnaW9uU2NvcGU6On5Xcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAg
ICAoSlNDOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlKToK
KyAgICAgICAgKEpTQzo6VmFsaWRhdGVBdG9taWNpdHlTY29wZTo6flZhbGlkYXRlQXRvbWljaXR5
U2NvcGUpOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUluRXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgIChKU0M6OmluaXRpYWxpemVQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmluaXRpYWxpemVBdFN0YXJ0dXApOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVI
YXNoUGluczo6YWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2Vj
dXJlQVJNNjRFSGFzaFBpbnM6OmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjptZXRhZGF0YSk6CisgICAgICAgIChKU0M6OlNlY3Vy
ZUFSTTY0RUhhc2hQaW5zOjpmaXJzdFBhZ2UpOgorICAgICAgICAqIGFzc2VtYmxlci9TZWN1cmVB
Uk02NEVIYXNoUGluc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0
RUhhc2hQaW5zOjprZXlGb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJN
NjRFSGFzaFBpbnM6OmZvckVhY2hQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmZvckVhY2hFbnRyeSk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5z
OjpmaW5kRW50cnkpOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGluczo6cGluRm9y
Q3VycmVudFRocmVhZCk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0NDb25m
aWcuaDoKKwogMjAyMi0wMS0xMyAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW1JJU0NWNjRdIHJpc2N2NjQgYmFja2VuZCBzaG91bGQgbG93ZXIgb2ZmbGlu
ZWFzbSBpbnN0cnVjdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBhc3NlbWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCiAg
ICAgYXNzZW1ibGVyL1JJU0NWNjRSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxlci9SZWdpc3Rlcklu
Zm8uaAorICAgIGFzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCisgICAgYXNzZW1ibGVy
L1NlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCiAgICAgYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCiAgICAgYXNzZW1ibGVyL1g4NlJlZ2lzdGVycy5oCiAgICAgYXNzZW1ibGVyL1g4Nl82NFJl
Z2lzdGVycy5oCkBAIC0xMDIzLDcgKzEwMjUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKICAgICBydW50
aW1lL0ludHJpbnNpYy5oCiAgICAgcnVudGltZS9JdGVyYXRpb25LaW5kLmgKLSAgICBydW50aW1l
L0l0ZXJhdGlvblN0YXR1cy5oCiAgICAgcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAogICAg
IHJ1bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuaAogICAgIHJ1bnRpbWUvSlNBcnJheS5oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcg
QEAgYXNzZW1ibGVyL1BlcmZMb2cuY3BwCiBhc3NlbWJsZXIvUHJpbnRlci5jcHAKIGFzc2VtYmxl
ci9Qcm9iZUNvbnRleHQuY3BwCiBhc3NlbWJsZXIvUHJvYmVTdGFjay5jcHAKK2Fzc2VtYmxlci9T
ZWN1cmVBUk02NEVIYXNoUGlucy5jcHAKIAogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5k
U3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwCiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRT
dGFja0J5TGluZWFyU2Nhbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODk1LDYgKzg5NSw4
IEBACiAJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAw
QjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVw
UmVkdWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBo
YXNlLmggKi87IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2
MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyog
U2VjdXJlQVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyQ0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNo
UGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTUyQ0FFQzc2Mjc5MEI5MDEwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0FFQzcy
Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkNEMEY1RDIyNDJG
NTY5MDA0QTE4QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAv
KiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVz
dGRmZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CkBAIC0yMDgzLDcg
KzIwODUsNiBAQAogCQlGRTQ4QkQ0NDIzMjQ1RTkzMDBGMTM2RDAgLyogSlNDQ29uZmlnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTQ4QkQ0MjIzMjQ1
RTg3MDBGMTM2RDAgLyogSlNDQ29uZmlnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU0OEU2MzgxRUIxMThEMjAwNUQ3QTk2IC8qIE9iamVjdElu
aXRpYWxpemF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFNDhFNjM2MUVCMTE4OEYwMDVEN0E5NiAvKiBPYmplY3RJbml0aWFsaXphdGlv
blNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkU0QkZGMkMxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRCRkYyQTFBRDQ3NkU3
MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCAqLzsgfTsKLQkJRkU0RDU1QjgxQUU3MTZD
QTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlv
blN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTA2ODY0MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTUzM0NBNTFGMjE3REIzMDAxNkExRkUgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFt
ZXdvcmsgKi87IH07CiAJCUZFNTMzQ0E2MUYyMTdEQjMwMDE2QTFGRSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwpAQCAtMzc4OSw2ICszNzkwLDkgQEAKIAkJNTJDNTU1NjUyMjRDMkFFNzAwOTlGNUND
IC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsdWVS
ZXBSZWR1Y3Rpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2
IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQ
cm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJl
QVJNNjRFSGFzaFBpbnNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZUFSTTY0RUhhc2hQ
aW5zSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkNBRUM3MzI3OTBC
OEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MkNBRUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTJDRDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhl
Y3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0
ZXN0ZGZnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcu
Y3BwOyBwYXRoID0gZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTYyNyw3ICs1NjMxLDYgQEAKIAkJRkU0OEU2MzcxRUIxMThBRDAwNUQ3QTk2IC8qIE9iamVj
dEluaXRpYWxpemF0aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFNEJGRjI5MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbk92ZXJyaWRl
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEJGRjJBMUFENDc2RTcwMDA4
OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGdW5jdGlvbk92ZXJyaWRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
RTRENTVCNzFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvblN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTUwNjg2NDFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVt
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUwNjg2NjFBRTI1RTI4MDAwOURB
QjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFNTMzQ0EwMUYyMTdDMzEwMDE2QTFGRSAvKiB0ZXN0bWFzbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSB0ZXN0bWFzbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
ODE1LDcgKzc4MTgsNiBAQAogCQkJCUEzOENBNTlCMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAx
LmNwcCAqLywKIAkJCQlBMzhDQTU5QzI2REQ4NERFMDBDOEQ4NEMgLyogSVNPODYwMS5oICovLAog
CQkJCThCOUY2RDU1MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggKi8sCi0JCQkJ
RkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcw
MTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLAogCQkJ
CTcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLywKIAkJ
CQk3MERDM0UwNzFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuY3BwICovLApA
QCAtODgwMiw2ICs4ODA0LDkgQEAKIAkJCQlGRTEwQUFFOTFGNDRENTEwMDA5REVEQzUgLyogUHJv
YmVTdGFjay5jcHAgKi8sCiAJCQkJRkUxMEFBRUExRjQ0RDUxMjAwOURFREM1IC8qIFByb2JlU3Rh
Y2suaCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTkgLyogUmVnaXN0ZXJJbmZvLmgg
Ki8sCisJCQkJNTJDQUVDNzMyNzkwQjhGNjAwRERCQUFGIC8qIFNlY3VyZUFSTTY0RUhhc2hQaW5z
LmNwcCAqLywKKwkJCQk1MkNBRUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFz
aFBpbnMuaCAqLywKKwkJCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRF
SGFzaFBpbnNJbmxpbmVzLmggKi8sCiAJCQkJRkU1MzNDQTAxRjIxN0MzMTAwMTZBMUZFIC8qIHRl
c3RtYXNtLmNwcCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTIgLyogWDg2XzY0UmVn
aXN0ZXJzLmggKi8sCiAJCQkJOTY4OENCMTQwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxl
ci5oICovLApAQCAtMTAwMTksNiArMTAwMjQsNyBAQAogCQkJCTBGQkUwRjczMTZDMURCMDUwMDgy
QzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4
OUNGNjE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUExNEVGOTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyogU2VjdXJl
QVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4
RDk3NiAvKiBERkdEQ0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNCRkE1RDAyMUU4NTNB
MTAwOUMwRUJBIC8qIERGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY4RjJCOUExNzJGMDUwMTAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMDQ3Niw3ICsxMDQ4Miw2IEBACiAJCQkJMEY1RTBGRTcyMDg2QUQ0
ODAwOTdGMERFIC8qIElzb1N1YnNwYWNlUGVyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCThCOUY2
RDU2MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1M0Q0MUVDOTIzQzAwODFBMDBBRTk4NEIgLyogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmggaW4g
SGVhZGVycyAqLywKLQkJCQlGRTRENTVCODFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3Rh
dHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRl
cmF0b3JPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MERDM0UwQTFCMkRGMkM3MDAw
NTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEz
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywKQEAgLTExMTc5
LDYgKzExMTg0LDcgQEAKIAkJCQlFMzNCQkUwOTI1QkZBMDQxMDA1MzY5MEYgLyogV2FzbVN0cmVh
bWluZ0NvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVD
MTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEy
NUJGQTczQjAwRUZFMzAzIC8qIFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MkNBRUM3NjI3OTBCOTAxMDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEQwMUJGNTI2REVFRjUzMDBDQUUwRDAgLyogV2Fz
bVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThEQTA1QTAwMjlBOTMyIC8qIFdh
c21UaHVua3MuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25FZmZvcnQuaCIKKyNpbmNsdWRlICJTZWN1cmVB
Uk02NEVIYXNoUGluc0lubGluZXMuaCIKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxz
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMjAzLDE5ICsyMDQsNDIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIENQVShBUk02NEUpCisgICAgdGVtcGxh
dGUgPGJvb2wgc2hvdWxkU2lnbj4KICAgICBjbGFzcyBBUk02NEVIYXNoIHsKKyAgICAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQVJNNjRFSGFzaCk7CiAgICAgcHVibGljOgotICAgICAgICBBUk02
NEVIYXNoKHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBUk02NEVIYXNoKCkKICAgICAgICAg
ewotICAgICAgICAgICAgc2V0VXBkYXRlZEhhc2goMCwgMCwgZGl2ZXJzaWZpZXIpOwogICAgICAg
ICB9CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSB1aW50MzJfdCB1cGRhdGUodWludDMyX3QgaW5z
dHJ1Y3Rpb24sIHVpbnQzMl90IGluZGV4LCB2b2lkKiBkaXZlcnNpZmllcikKKyAgICAgICAgfkFS
TTY0RUhhc2goKQogICAgICAgICB7Ci0gICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50SGFzaCA9
IHRoaXMtPmN1cnJlbnRIYXNoKGluZGV4LCBkaXZlcnNpZmllcik7CisgICAgICAgICAgICBkZWFs
bG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBk
ZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtX2luaXRpYWxpemVkUGluKSB7CisgICAgICAgICAgICAgICAgZ19qc2NDb25maWcuYXJtNjRl
SGFzaFBpbnMuZGVhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgICAgICAg
ICBtX2luaXRpYWxpemVkUGluID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHVwZGF0ZSh1aW50MzJfdCBpbnN0cnVjdGlv
biwgdWludDMyX3QgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShp
bmRleCA9PSAwKSkgeworICAgICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2hvdWxkU2lnbikg
eworICAgICAgICAgICAgICAgICAgICBtX2luaXRpYWxpemVkUGluID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgZ19qc2NDb25maWcuYXJtNjRlSGFzaFBpbnMuYWxsb2NhdGVQaW5Gb3JDdXJy
ZW50VGhyZWFkKCk7CisgICAgICAgICAgICAgICAgICAgIHNldFVwZGF0ZWRIYXNoKDAsIDApOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2hhc2ggPSAwOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50SGFzaCA9IHRoaXMt
PmN1cnJlbnRIYXNoKGluZGV4KTsKICAgICAgICAgICAgIHVpbnQ2NF90IG5leHRJbmRleCA9IGlu
ZGV4ICsgMTsKICAgICAgICAgICAgIHVpbnQzMl90IG91dHB1dCA9IG5leHRWYWx1ZShpbnN0cnVj
dGlvbiwgbmV4dEluZGV4LCBjdXJyZW50SGFzaCk7Ci0gICAgICAgICAgICBzZXRVcGRhdGVkSGFz
aChvdXRwdXQsIG5leHRJbmRleCwgZGl2ZXJzaWZpZXIpOworICAgICAgICAgICAgc2V0VXBkYXRl
ZEhhc2gob3V0cHV0LCBuZXh0SW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuIG91dHB1dDsKICAg
ICAgICAgfQogCkBAIC0yMzUsMjkgKzI1OSwyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHJldHVybiAoYSA+PiAzOSkgXiAoYiA+PiAyMyk7CiAgICAgICAgIH0KIAotICAgICAgICBz
dGF0aWMgQUxXQVlTX0lOTElORSB1aW50MzJfdCBiaXRzRm9yRGl2ZXJzaWZpZXIodm9pZCogZGl2
ZXJzaWZpZXIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHBpbigpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihkaXZl
cnNpZmllcik7CisgICAgICAgICAgICByZXR1cm4gZ19qc2NDb25maWcuYXJtNjRlSGFzaFBpbnMu
cGluRm9yQ3VycmVudFRocmVhZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lOTElO
RSB1aW50MzJfdCBjdXJyZW50SGFzaCh1aW50MzJfdCBpbmRleCwgdm9pZCogZGl2ZXJzaWZpZXIp
CisgICAgICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgY3VycmVudEhhc2godWludDMyX3QgaW5k
ZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaGFzaEZpZWxkSXNUYWdnZWQgPSBpbmRl
eCA9PSAwOwotICAgICAgICAgICAgaWYgKGhhc2hGaWVsZElzVGFnZ2VkKQotICAgICAgICAgICAg
ICAgIHJldHVybiB1bnRhZ0ludChtX2hhc2gsIG1ha2VEaXZlcnNpZmllcihpbml0aWFsaXphdGlv
bk5hbWVzcGFjZSwgaW5kZXgsIGJpdHNGb3JEaXZlcnNpZmllcihkaXZlcnNpZmllcikpKTsKKyAg
ICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2hvdWxkU2lnbikKKyAgICAgICAgICAgICAgICByZXR1
cm4gdW50YWdJbnQobV9oYXNoLCBtYWtlRGl2ZXJzaWZpZXIoaW5pdGlhbGl6YXRpb25OYW1lc3Bh
Y2UsIGluZGV4LCBwaW4oKSkpOwogICAgICAgICAgICAgcmV0dXJuIG1faGFzaDsKICAgICAgICAg
fQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRVcGRhdGVkSGFzaCh1aW50MzJfdCB2
YWx1ZSwgdWludDMyX3QgaW5kZXgsIHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0VXBkYXRlZEhhc2godWludDMyX3QgdmFsdWUsIHVpbnQzMl90IGluZGV4
KQogICAgICAgICB7Ci0gICAgICAgICAgICBib29sIHNob3VsZFRhZ0hhc2hGaWVsZCA9IGluZGV4
ID09IDA7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGFnSGFzaEZpZWxkKQotICAgICAgICAgICAg
ICAgIG1faGFzaCA9IHRhZ0ludChzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpLCBtYWtlRGl2
ZXJzaWZpZXIoaW5pdGlhbGl6YXRpb25OYW1lc3BhY2UsIGluZGV4LCBiaXRzRm9yRGl2ZXJzaWZp
ZXIoZGl2ZXJzaWZpZXIpKSk7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHNob3VsZFNpZ24p
CisgICAgICAgICAgICAgICAgbV9oYXNoID0gdGFnSW50KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2
YWx1ZSksIG1ha2VEaXZlcnNpZmllcihpbml0aWFsaXphdGlvbk5hbWVzcGFjZSwgaW5kZXgsIHBp
bigpKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9oYXNoID0gdmFsdWU7
CisgICAgICAgICAgICAgICAgbV9oYXNoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHVpbnQ2NF90IG1faGFzaDsKKyAgICAgICAgYm9vbCBtX2lu
aXRpYWxpemVkUGluIHsgZmFsc2UgfTsKICAgICB9OwogI2VuZGlmIC8vIENQVShBUk02NEUpCiAK
QEAgLTI2Nyw3ICsyOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIDogbV9zdG9y
YWdlKCkKICAgICAgICAgICAgICwgbV9pbmRleCgwKQogI2lmIENQVShBUk02NEUpCi0gICAgICAg
ICAgICAsIG1faGFzaCh0aGlzKQorICAgICAgICAgICAgLCBtX2hhc2goKQogICAgICAgICAgICAg
LCBtX2hhc2hlcygpCiAjZW5kaWYKICAgICAgICAgewpAQCAtNDA5LDYgKzQzMiwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFn
ZS5idWZmZXIoKTsgfQogI2VuZGlmCiAKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICBBUk02NEVI
YXNoPHRydWU+JiBhcm02NGVIYXNoKCkgeyByZXR1cm4gbV9oYXNoOyB9CisjZW5kaWYKKwogICAg
IHByb3RlY3RlZDoKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdyYWxUeXBlPgogICAg
ICAgICB2b2lkIHB1dEludGVncmFsKEludGVncmFsVHlwZSB2YWx1ZSkKQEAgLTQyNSw3ICs0NTIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBDUFUoQVJNNjQpCiAgICAgICAgICAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZih2YWx1ZSkgPT0gNCwgIiIpOwogI2lmIENQVShBUk02NEUpCi0gICAgICAg
ICAgICB1aW50MzJfdCBoYXNoID0gbV9oYXNoLnVwZGF0ZSh2YWx1ZSwgbV9pbmRleCAvIHNpemVv
ZihJbnRlZ3JhbFR5cGUpLCB0aGlzKTsKKyAgICAgICAgICAgIHVpbnQzMl90IGhhc2ggPSBtX2hh
c2gudXBkYXRlKHZhbHVlLCBtX2luZGV4IC8gc2l6ZW9mKEludGVncmFsVHlwZSkpOwogICAgICAg
ICAgICAgV1RGOjp1bmFsaWduZWRTdG9yZTx1aW50MzJfdD4obV9oYXNoZXMuYnVmZmVyKCkgKyBt
X2luZGV4LCBoYXNoKTsKICNlbmRpZgogI2VuZGlmCkBAIC00NTksNyArNDg2LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIEFzc2VtYmxlckRhdGEgbV9zdG9yYWdlOwogICAgICAgICB1bnNp
Z25lZCBtX2luZGV4OwogI2lmIENQVShBUk02NEUpCi0gICAgICAgIEFSTTY0RUhhc2ggbV9oYXNo
OworICAgICAgICBBUk02NEVIYXNoPHRydWU+IG1faGFzaDsKICAgICAgICAgQXNzZW1ibGVyRGF0
YSBtX2hhc2hlczsKICNlbmRpZgogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyMSw4ICsyMjEsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0Nv
ZGUoCiAgICAgbV9hc3NlbWJsZXJTdG9yYWdlID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIu
YnVmZmVyKCkucmVsZWFzZUFzc2VtYmxlckRhdGEoKTsKICAgICB1aW50OF90KiBpbkRhdGEgPSBi
aXR3aXNlX2Nhc3Q8dWludDhfdCo+KG1fYXNzZW1ibGVyU3RvcmFnZS5idWZmZXIoKSk7CiAjaWYg
Q1BVKEFSTTY0RSkKLSAgICB2b2lkKiBidWZmZXJQdHIgPSAmbWFjcm9Bc3NlbWJsZXIubV9hc3Nl
bWJsZXIuYnVmZmVyKCk7Ci0gICAgQVJNNjRFSGFzaCB2ZXJpZnlVbmNvbXBhY3RlZEhhc2ggeyBi
dWZmZXJQdHIgfTsKKyAgICBBUk02NEVIYXNoPGZhbHNlPiB2ZXJpZnlVbmNvbXBhY3RlZEhhc2g7
CiAgICAgbV9hc3NlbWJsZXJIYXNoZXNTdG9yYWdlID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJs
ZXIuYnVmZmVyKCkucmVsZWFzZUFzc2VtYmxlckhhc2hlcygpOwogICAgIHVpbnQzMl90KiBpbkhh
c2hlcyA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdCo+KG1fYXNzZW1ibGVySGFzaGVzU3RvcmFnZS5i
dWZmZXIoKSk7CiAjZW5kaWYKQEAgLTI0NSw3ICsyNDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmNv
cHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAgICAgIEluc3RydWN0aW9uVHlwZSB2YWx1ZSA9ICpw
dHI7CiAjaWYgQ1BVKEFSTTY0RSkKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAoYml0d2lzZV9j
YXN0PHVpbnQ4X3QqPihwdHIpIC0gaW5EYXRhKSAvIDQ7Ci0gICAgICAgIHVpbnQzMl90IGhhc2gg
PSB2ZXJpZnlVbmNvbXBhY3RlZEhhc2gudXBkYXRlKHZhbHVlLCBpbmRleCwgYnVmZmVyUHRyKTsK
KyAgICAgICAgdWludDMyX3QgaGFzaCA9IHZlcmlmeVVuY29tcGFjdGVkSGFzaC51cGRhdGUodmFs
dWUsIGluZGV4KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5IYXNoZXNbaW5kZXhdID09IGhh
c2gpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiB2YWx1ZTsKQEAgLTQzOCw2ICs0MzcsMTAgQEAg
dm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxlcgogICAgICAgICBpbml0aWFs
U2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgfQogCisj
aWYgQ1BVKEFSTTY0RSkKKyAgICBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5idWZmZXIoKS5h
cm02NGVIYXNoKCkuZGVhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgorCiAg
ICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCku
YWxsb2NhdGUoaW5pdGlhbFNpemUsIGVmZm9ydCk7CiAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1v
cnkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCisKKyNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9y
LmgiCisjaW5jbHVkZSAiRmFzdEpJVFBlcm1pc3Npb25zLmgiCisjaW5jbHVkZSAiU2VjdXJlQVJN
NjRFSGFzaFBpbnNJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgQ1BVKEFSTTY0RSkgJiYg
RU5BQkxFKEpJVCkKKworc3RydWN0IFdyaXRlVG9KSVRSZWdpb25TY29wZSB7CisgICAgQUxXQVlT
X0lOTElORSBXcml0ZVRvSklUUmVnaW9uU2NvcGUoKQorICAgIHsKKyAgICAgICAgdGhyZWFkU2Vs
ZlJlc3RyaWN0UldYVG9SVygpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgfldyaXRlVG9K
SVRSZWdpb25TY29wZSgpCisgICAgeworICAgICAgICB0aHJlYWRTZWxmUmVzdHJpY3RSV1hUb1JY
KCk7CisgICAgfQorfTsKKworc3RydWN0IFZhbGlkYXRlTm9uUmVlbnRyYW5jeVNjb3BlIHsKKyAg
ICBBTFdBWVNfSU5MSU5FIFZhbGlkYXRlTm9uUmVlbnRyYW5jeVNjb3BlKFNlY3VyZUFSTTY0RUhh
c2hQaW5zOjpNZXRhZGF0YSogbWV0YWRhdGEpCisgICAgICAgIDogbV9tZXRhZGF0YShtZXRhZGF0
YSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHZhbGlkYXRlTm9uUmVlbnRyYW5jeSA9IG1fbWV0
YWRhdGEtPmFzc2VydE5vdFJlZW50cmFudC5leGNoYW5nZSgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9z
ZXFfY3N0KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZhbGlkYXRlTm9uUmVlbnRyYW5jeSk7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB+VmFsaWRhdGVOb25SZWVudHJhbmN5U2NvcGUo
KQorICAgIHsKKyAgICAgICAgdWludDMyX3QgdmFsaWRhdGVOb25SZWVudHJhbmN5ID0gbV9tZXRh
ZGF0YS0+YXNzZXJ0Tm90UmVlbnRyYW50LmV4Y2hhbmdlKDAsIHN0ZDo6bWVtb3J5X29yZGVyX3Nl
cV9jc3QpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh2YWxpZGF0ZU5vblJlZW50cmFuY3kgPT0g
MSk7CisgICAgfQorICAgIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpNZXRhZGF0YSogbV9tZXRhZGF0
YTsKK307CisKKy8vIFRoaXMgY2xhc3MgaXMgYWxsb2NhdGVkIG9uY2UgcGVyIHByb2Nlc3MsIHNv
IHN0YXRpYyBsb2NrIGlzIG9rLgorc3RhdGljIExvY2sgaGFzaFBpbnNMb2NrOworCitBTFdBWVNf
SU5MSU5FIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZUluRXhlY3V0YWJsZU1lbW9yeShzaXplX3Qgc2l6
ZSkKK3sKKyAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBFeGVjdXRhYmxlQWxs
b2NhdG9yOjpzaW5nbGV0b24oKS5hbGxvY2F0ZShzaXplLCBKSVRDb21waWxhdGlvbk11c3RTdWNj
ZWVkKS5sZWFrUmVmKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoaGFuZGxlKTsKKyAgICB2b2lkKiBt
ZW1vcnkgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChpc0pJVFBDKG1lbW9yeSkgJiYgaXNKSVRQQyhiaXR3aXNl
X2Nhc3Q8Y2hhcio+KG1lbW9yeSkgKyBzaXplIC0gMSkpOworICAgIHJldHVybiBtZW1vcnk7Cit9
CisKK1NlY3VyZUFSTTY0RUhhc2hQaW5zOjpQYWdlOjpQYWdlKCkKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtRW50cmllc1BlclBhZ2U7ICsraSkgeworICAgICAgICBhdXRvJiBl
bnRyeSA9IHRoaXMtPmVudHJ5KGkpOworICAgICAgICBlbnRyeS5waW4gPSAwOworICAgICAgICBl
bnRyeS5rZXkgPSAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVBhZ2UoY29u
c3QgV3JpdGVUb0pJVFJlZ2lvblNjb3BlJiwgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OlBhZ2UqIHBh
Z2UpCit7CisgICAgbmV3IChwYWdlKSBTZWN1cmVBUk02NEVIYXNoUGluczo6UGFnZTsKK30KKwor
I2RlZmluZSBWQUxJREFURV9USElTX1ZBTFVFKCkgUkVMRUFTRV9BU1NFUlQodGhpcyA9PSAmZ19q
c2NDb25maWcuYXJtNjRlSGFzaFBpbnMpIAorCithdXRvIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpt
ZXRhZGF0YSgpIC0+IE1ldGFkYXRhKgoreworICAgIFZBTElEQVRFX1RISVNfVkFMVUUoKTsKKyAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PE1ldGFkYXRhKj4obV9tZW1vcnkpIC0gMTsKK30KKwordm9p
ZCBTZWN1cmVBUk02NEVIYXNoUGluczo6aW5pdGlhbGl6ZUF0U3RhcnR1cCgpCit7CisgICAgVkFM
SURBVEVfVEhJU19WQUxVRSgpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX21lbW9yeSk7CisKKyAg
ICBtX21lbW9yeSA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oYWxsb2NhdGVJbkV4ZWN1dGFibGVNZW1v
cnkoc2l6ZW9mKE1ldGFkYXRhKSArIFBhZ2U6OmFsbG9jYXRpb25TaXplKCkpKSArIHNpemVvZihN
ZXRhZGF0YSk7CisKKyAgICB7CisgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNj
b3BlOworCisgICAgICAgIG5ldyAobWV0YWRhdGEoKSkgTWV0YWRhdGE7IAorICAgICAgICBpbml0
aWFsaXplUGFnZSh3cml0ZVNjb3BlLCBmaXJzdFBhZ2UoKSk7CisgICAgfQorfQorCitib29sIFNl
Y3VyZUFSTTY0RUhhc2hQaW5zOjphbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWRJbXBsKGNvbnN0
IEFic3RyYWN0TG9ja2VyJikKK3sKKyAgICBWQUxJREFURV9USElTX1ZBTFVFKCk7CisKKyAgICBz
aXplX3QgbmV3RW50cnlJbmRleDsKKyAgICBQYWdlKiBuZXdFbnRyeVBhZ2U7CisKKyAgICBib29s
IGZvdW5kID0gZmFsc2U7CisgICAgc2l6ZV90IGJhc2VJbmRleCA9IDA7CisgICAgZm9yRWFjaFBh
Z2UoWyZdIChQYWdlJiBwYWdlKSB7CisgICAgICAgIHNpemVfdCBiaXQgPSBwYWdlLmZpbmRDbGVh
ckJpdCgpOworICAgICAgICBpZiAoYml0IDwgbnVtRW50cmllc1BlclBhZ2UpIHsKKyAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIG5ld0VudHJ5SW5kZXggPSBiYXNlSW5kZXgg
KyBiaXQ7CisgICAgICAgICAgICBuZXdFbnRyeVBhZ2UgPSAmcGFnZTsKKyAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKworICAgICAgICBiYXNlSW5k
ZXggKz0gbnVtRW50cmllc1BlclBhZ2U7CisgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6
OkNvbnRpbnVlOworICAgIH0pOworCisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byBmaW5kUmVzdWx0ID0gZmluZEVudHJ5KCk7CisgICAgRW50cnkqIHBy
ZWV4aXN0aW5nRW50cnkgPSBmaW5kUmVzdWx0LmVudHJ5OworICAgIHNpemVfdCBwcmVleGlzdGlu
Z0VudHJ5SW5kZXggPSBmaW5kUmVzdWx0LmluZGV4OworICAgIFBhZ2UqIHByZWV4aXN0aW5nRW50
cnlQYWdlID0gZmluZFJlc3VsdC5wYWdlOworCisgICAgeworICAgICAgICBhdXRvKiBtZXRhZGF0
YSA9IHRoaXMtPm1ldGFkYXRhKCk7CisKKyAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdy
aXRlU2NvcGU7CisgICAgICAgIFZhbGlkYXRlTm9uUmVlbnRyYW5jeVNjb3BlIHZhbGlkYXRlTm9u
UmVlbnRyYW5jeShtZXRhZGF0YSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNKSVRQQyht
ZXRhZGF0YSkpOworICAgICAgICB1aW50NjRfdCBuZXh0UGluID0gbWV0YWRhdGEtPm5leHRQaW4u
ZXhjaGFuZ2VBZGQoMSwgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG5leHRQaW4pOworCisgICAgICAgIG5ld0VudHJ5UGFnZS0+c2V0SXNJblVzZShu
ZXdFbnRyeUluZGV4KTsKKworICAgICAgICBpZiAocHJlZXhpc3RpbmdFbnRyeSAmJiBwcmVleGlz
dGluZ0VudHJ5SW5kZXggPCBuZXdFbnRyeUluZGV4KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChwcmVleGlzdGluZ0VudHJ5UGFnZS0+aXNJblVzZShwcmVleGlzdGluZ0VudHJ5SW5kZXgp
KTsKKworICAgICAgICAgICAgbmV3RW50cnlQYWdlLT5lbnRyeShuZXdFbnRyeUluZGV4KSA9ICpw
cmVleGlzdGluZ0VudHJ5OworICAgICAgICAgICAgbmV3RW50cnlJbmRleCA9IHByZWV4aXN0aW5n
RW50cnlJbmRleDsKKyAgICAgICAgICAgIG5ld0VudHJ5UGFnZSA9IHByZWV4aXN0aW5nRW50cnlQ
YWdlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnkgPSBuZXdFbnRyeVBhZ2UtPmVu
dHJ5KG5ld0VudHJ5SW5kZXgpOworICAgICAgICBlbnRyeS5waW4gPSBuZXh0UGluOworICAgICAg
ICBlbnRyeS5rZXkgPSBrZXlGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmFsbG9jYXRlUGluRm9yQ3Vy
cmVudFRocmVhZCgpCit7CisgICAgVkFMSURBVEVfVEhJU19WQUxVRSgpOworCisgICAgTG9ja2Vy
IGxvY2tlciB7IGhhc2hQaW5zTG9jayB9OworCisgICAgaWYgKGFsbG9jYXRlUGluRm9yQ3VycmVu
dFRocmVhZEltcGwobG9ja2VyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQWxsb2NhdGUg
YSBuZXcgcGFnZQorICAgIHsKKyAgICAgICAgUGFnZSogbmV4dFBhZ2UgPSBiaXR3aXNlX2Nhc3Q8
UGFnZSo+KGFsbG9jYXRlSW5FeGVjdXRhYmxlTWVtb3J5KFBhZ2U6OmFsbG9jYXRpb25TaXplKCkp
KTsKKworICAgICAgICBQYWdlKiBsYXN0UGFnZSA9IGZpcnN0UGFnZSgpOworICAgICAgICB3aGls
ZSAobGFzdFBhZ2UtPm5leHQpCisgICAgICAgICAgICBsYXN0UGFnZSA9IGxhc3RQYWdlLT5uZXh0
OworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbGFzdFBhZ2UtPm5leHQpOworCisgICAgICAgIHsK
KyAgICAgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNjb3BlOworICAgICAgICAg
ICAgVmFsaWRhdGVOb25SZWVudHJhbmN5U2NvcGUgdmFsaWRhdGVOb25SZWVudHJhbmN5KG1ldGFk
YXRhKCkpOworICAgICAgICAgICAgaW5pdGlhbGl6ZVBhZ2Uod3JpdGVTY29wZSwgbmV4dFBhZ2Up
OworICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgcmVhZCBmcm9tIGNvbmN1cnJlbnRseS4gTWFr
ZSBzdXJlIGl0J3MgaW4gYSBnb29kIHN0YXRlIGZvciB0aGF0IHRvIGhhcHBlbi4KKyAgICAgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICBsYXN0UGFnZS0+bmV4dCA9
IG5leHRQYWdlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBzdWNjZXNzID0gYWxsb2Nh
dGVQaW5Gb3JDdXJyZW50VGhyZWFkSW1wbChsb2NrZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKHN1
Y2Nlc3MpOworfQorCit2b2lkIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpkZWFsbG9jYXRlUGluRm9y
Q3VycmVudFRocmVhZCgpCit7CisgICAgVkFMSURBVEVfVEhJU19WQUxVRSgpOworCisgICAgTG9j
a2VyIGxvY2tlciB7IGhhc2hQaW5zTG9jayB9OworCisgICAgYXV0byBjbGVhciA9IFsmXSAoRW50
cnkmIGVudHJ5KSB7CisgICAgICAgIGVudHJ5LnBpbiA9IDA7CisgICAgICAgIGVudHJ5LmtleSA9
IDA7CisgICAgfTsKKworICAgIFBhZ2UqIHJlbW92YWxQYWdlOworICAgIHNpemVfdCByZW1vdmFs
SW5kZXg7CisgICAgeworICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBmaW5kRW50cnkoKTsKKyAg
ICAgICAgRW50cnkmIGVudHJ5ID0gKmZpbmRSZXN1bHQuZW50cnk7CisgICAgICAgIHJlbW92YWxJ
bmRleCA9IGZpbmRSZXN1bHQuaW5kZXg7CisgICAgICAgIHJlbW92YWxQYWdlID0gZmluZFJlc3Vs
dC5wYWdlOworCisgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNjb3BlOworICAg
ICAgICBWYWxpZGF0ZU5vblJlZW50cmFuY3lTY29wZSB2YWxpZGF0ZU5vblJlZW50cmFuY3kobWV0
YWRhdGEoKSk7CisKKyAgICAgICAgY2xlYXIoZW50cnkpOworICAgICAgICByZW1vdmFsUGFnZS0+
Y2xlYXJJc0luVXNlKHJlbW92YWxJbmRleCk7CisgICAgfQorCisgICAgLy8gVGhpcyBpbXBsZW1l
bnRhdGlvbiBhbGxvd3MgcmVjdXJzaXZlIHVzZXMgb2YgdGhlIE1hY3JvQXNzZW1ibGVyLCBmb3Jt
aW5nIGEgc3RhY2sKKyAgICAvLyBsaWtlIGRhdGEgc3RydWN0dXJlLiBUaGUgaW4gdXNlIHBpbiAo
dG9wIG9mIHRoZSBzdGFjaykgd2lsbCBhbHdheXMgYmUgYXQgdGhlIGxvd2VzdAorICAgIC8vIHBh
Z2UgYW5kIGxvd2VzdCBpbmRleCBpbiB0aGUgYml0IHZlY3Rvci4gU28gd2hlbiB3ZSBkZWFsbG9j
YXRlIHRoZSBjdXJyZW50IHRvcCBvZiB0aGUKKyAgICAvLyBzdGFjaywgd2UgbmVlZCB0byBmaW5k
IHRoZSBuZXh0IGVudHJ5IGluIHRoZSBzdGFjaywgYW5kIGVuc3VyZSBpdCdzIGF0IHRoZSBsb3dl
c3QgaW5kZXguCisgICAgLy8gU28gaWYgdGhlcmUgYXJlIG90aGVyIGVudHJpZXMgZm9yIHRoaXMg
Y3VycmVudCB0aHJlYWQsIHdlIGZpbmQgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0CisgICAgLy8g
cGluIChuZXh0IHRvcCBvZiBzdGFjayB2YWx1ZSksIGFuZCByZXBsYWNlIGl0IGF0IHRoZSBpbmRl
eCB3ZSB3ZXJlIHVzaW5nIGJlZm9yZS4KKyAgICAvLyBBZGRpdGlvbiBhbHNvIG1haW50YWlucyB0
aGlzIGludmFyaWFudCBieSBhbHdheXMgcGxhY2luZyB0aGUgbmV3ZXN0IGVudHJ5IGZvcgorICAg
IC8vIHRoZSBjdXJyZW50IHRocmVhZCBhdCB0aGUgbG93ZXN0IGluZGV4LgorICAgIHsKKyAgICAg
ICAgdWludDY0X3Qga2V5ID0ga2V5Rm9yQ3VycmVudFRocmVhZCgpOworICAgICAgICBib29sIGZv
dW5kID0gZmFsc2U7CisgICAgICAgIHVpbnQ2NF90IG1heFBpbiA9IDA7CisgICAgICAgIHNpemVf
dCBtYXhJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7CisgICAgICAg
IFBhZ2UqIG1heFBhZ2UgPSBudWxscHRyOworCisgICAgICAgIGZvckVhY2hFbnRyeShbJl0gKFBh
Z2UmIHBhZ2UsIEVudHJ5JiBlbnRyeSwgc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChlbnRyeS5waW4pOworICAgICAgICAgICAgaWYgKGVudHJ5LmtleSA9PSBrZXkg
JiYgZW50cnkucGluID4gbWF4UGluKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIG1heFBpbiA9IGVudHJ5LnBpbjsKKyAgICAgICAgICAgICAgICBtYXhJ
bmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIG1heFBhZ2UgPSAmcGFnZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Cisg
ICAgICAgIH0pOworCisgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocmVtb3ZhbEluZGV4IDwgbWF4SW5kZXgpOworCisgICAgICAgICAgICBXcml0ZVRvSklU
UmVnaW9uU2NvcGUgd3JpdGVTY29wZTsKKyAgICAgICAgICAgIFZhbGlkYXRlTm9uUmVlbnRyYW5j
eVNjb3BlIHZhbGlkYXRlTm9uUmVlbnRyYW5jeShtZXRhZGF0YSgpKTsKKworICAgICAgICAgICAg
cmVtb3ZhbFBhZ2UtPmVudHJ5KHJlbW92YWxJbmRleCkgPSBtYXhQYWdlLT5lbnRyeShtYXhJbmRl
eCk7CisgICAgICAgICAgICBjbGVhcihtYXhQYWdlLT5lbnRyeShtYXhJbmRleCkpOworICAgICAg
ICAgICAgbWF4UGFnZS0+Y2xlYXJJc0luVXNlKG1heEluZGV4KTsKKyAgICAgICAgICAgIHJlbW92
YWxQYWdlLT5zZXRJc0luVXNlKHJlbW92YWxJbmRleCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
KyNlbmRpZiAvLyBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoSklUKQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFz
aFBpbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Nl
Y3VyZUFSTTY0RUhhc2hQaW5zLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoSklUKQorCisjaW5j
bHVkZSA8d3RmL0JpdG1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU2VjdXJlQVJN
NjRFSGFzaFBpbnMgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlh
bGl6ZUF0U3RhcnR1cCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWxsb2NhdGVQaW5G
b3JDdXJyZW50VGhyZWFkKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWFsbG9jYXRl
UGluRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHVpbnQ2NF90IHBp
bkZvckN1cnJlbnRUaHJlYWQoKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bUVu
dHJpZXNQZXJQYWdlID0gNjQ7CisKKyAgICBzdHJ1Y3QgRW50cnkgeworICAgICAgICB1aW50NjRf
dCBwaW47CisgICAgICAgIHVpbnQ2NF90IGtleTsKKyAgICB9OworCisgICAgc3RydWN0IGFsaWdu
YXMoYWxpZ25vZihFbnRyeSkpIFBhZ2UgeworICAgICAgICBQYWdlKCk7CisKKyAgICAgICAgc3Rh
dGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSgpIHsgcmV0dXJuIHNpemVvZihQYWdlKSArIG51bUVu
dHJpZXNQZXJQYWdlICogc2l6ZW9mKEVudHJ5KTsgfQorCisgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG1hc2sgPSBudW1FbnRyaWVzUGVyUGFnZSAtIDE7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoaGFzT25lQml0U2V0KG51bUVudHJpZXNQZXJQYWdlKSk7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoISFtYXNrKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKG1hc2sgJiBudW1FbnRyaWVz
UGVyUGFnZSkpOworCisgICAgICAgIGlubGluZSBFbnRyeSYgZW50cnkoc2l6ZV90IGluZGV4KQor
ICAgICAgICB7IAorICAgICAgICAgICAgcmV0dXJuIGVudHJpZXMoKVtpbmRleCAmIG1hc2tdOwor
ICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIEVudHJ5JiBmYXN0RW50cnlVbmNoZWNrZWQoc2l6
ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggJiBtYXNrID09
IGluZGV4KTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyaWVzKClbaW5kZXhdOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2b2lkIHNldElzSW5Vc2Uoc2l6ZV90IGluZGV4KQorICAgICAg
ICB7CisgICAgICAgICAgICBpc0luVXNlTWFwLnNldChpbmRleCAmIG1hc2spOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBjbGVhcklzSW5Vc2Uoc2l6ZV90IGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpc0luVXNlTWFwLnNldChpbmRleCAmIG1hc2ssIGZhbHNlKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgaXNJblVzZShzaXplX3QgaW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc0luVXNlTWFwLmdldChpbmRleCAmIG1hc2spOworICAgICAgICB9CisK
KyAgICAgICAgc2l6ZV90IGZpbmRDbGVhckJpdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc0luVXNlTWFwLmZpbmRCaXQoMCwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgICAgICB2b2lkIGZvckVhY2hTZXRCaXQo
RnVuY3Rpb24gZnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlzSW5Vc2VNYXAuZm9y
RWFjaFNldEJpdChmdW5jdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBQYWdlKiBuZXh0IHsg
bnVsbHB0ciB9OworICAgIHByaXZhdGU6CisgICAgICAgIEVudHJ5KiBlbnRyaWVzKCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PEVudHJ5Kj4odGhpcyArIDEpOyB9CisgICAgICAgIEJpdG1hcDxudW1F
bnRyaWVzUGVyUGFnZT4gaXNJblVzZU1hcDsKKyAgICB9OworCisgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoUGFnZSkgJSBhbGlnbm9mKEVudHJ5KSA9PSAwKTsKKworICAgIHN0cnVjdCBhbGlnbmFz
KGFsaWdub2YoUGFnZSkpIE1ldGFkYXRhIHsKKyAgICAgICAgQXRvbWljPHVpbnQ2NF90PiBuZXh0
UGluIHsgMSB9OworICAgICAgICBBdG9taWM8dWludDMyX3Q+IGFzc2VydE5vdFJlZW50cmFudCB7
IDAgfTsKKyAgICB9OworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoTWV0YWRhdGEpICUgYWxp
Z25vZihQYWdlKSA9PSAwKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDY0X3Qga2V5Rm9y
Q3VycmVudFRocmVhZCgpOworICAgIGJvb2wgYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkSW1w
bChjb25zdCBBYnN0cmFjdExvY2tlciYpOworCisgICAgc3RydWN0IEZpbmRSZXN1bHQgeworICAg
ICAgICBFbnRyeSogZW50cnkgeyBudWxscHRyIH07CisgICAgICAgIHNpemVfdCBpbmRleCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsKKyAgICAgICAgUGFnZSogcGFnZSB7
IG51bGxwdHIgfTsKKyAgICB9OworICAgIEZpbmRSZXN1bHQgZmluZEVudHJ5KCk7CisKKyAgICBN
ZXRhZGF0YSogbWV0YWRhdGEoKTsKKyAgICBpbmxpbmUgUGFnZSogZmlyc3RQYWdlKCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PFBhZ2UqPihtX21lbW9yeSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hQYWdlKEZ1bmN0aW9uKTsKKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hFbnRyeShGdW5jdGlv
bik7CisKKyAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TZWN1cmVB
Uk02NEVIYXNoUGluc0lubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGlu
cy5oIgorCisjaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNlIEpTQyB7
CisKK0FMV0FZU19JTkxJTkUgdWludDY0X3QgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmtleUZvckN1
cnJlbnRUaHJlYWQoKQoreworICAgIHVpbnQ2NF90IHJlc3VsdDsKKyAgICBhc20gKAorICAgICAg
ICAibXJzICV4W3Jlc3VsdF0sIFRQSURSUk9fRUwwIgorICAgICAgICA6IFtyZXN1bHRdICI9ciIg
KHJlc3VsdCkKKyAgICAgICAgOgorICAgICAgICA6CisgICAgKTsKKyAgICByZXR1cm4gcmVzdWx0
ICsgMTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxXQVlTX0lOTElORSB2
b2lkIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpmb3JFYWNoUGFnZShGdW5jdGlvbiBmdW5jdGlvbikK
K3sKKyAgICBmb3IgKFBhZ2UqIHBhZ2UgPSBmaXJzdFBhZ2UoKTsgcGFnZTsgcGFnZSA9IHBhZ2Ut
Pm5leHQpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNKSVRQQyhwYWdlKSk7CisgICAgICAg
IGlmIChmdW5jdGlvbigqcGFnZSkgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorQUxX
QVlTX0lOTElORSB2b2lkIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpmb3JFYWNoRW50cnkoRnVuY3Rp
b24gZnVuY3Rpb24pCit7CisgICAgc2l6ZV90IGJhc2VJbmRleCA9IDA7CisgICAgZm9yRWFjaFBh
Z2UoWyZdIChQYWdlJiBwYWdlKSB7CisgICAgICAgIEl0ZXJhdGlvblN0YXR1cyBpdGVyYXRpb25T
dGF0dXMgPSBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICBwYWdlLmZvckVhY2hT
ZXRCaXQoWyZdIChzaXplX3QgYml0SW5kZXgpIHsKKyAgICAgICAgICAgIEVudHJ5JiBlbnRyeSA9
IHBhZ2UuZmFzdEVudHJ5VW5jaGVja2VkKGJpdEluZGV4KTsKKyAgICAgICAgICAgIEFTU0VSVChp
c0pJVFBDKCZlbnRyeSkpOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gYmFzZUluZGV4ICsg
Yml0SW5kZXg7CisgICAgICAgICAgICBpdGVyYXRpb25TdGF0dXMgPSBmdW5jdGlvbihwYWdlLCBl
bnRyeSwgaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdGlvblN0YXR1czsKKyAgICAg
ICAgfSk7CisgICAgICAgIGJhc2VJbmRleCArPSBudW1FbnRyaWVzUGVyUGFnZTsKKyAgICAgICAg
cmV0dXJuIGl0ZXJhdGlvblN0YXR1czsKKyAgICB9KTsKK30KKworQUxXQVlTX0lOTElORSBhdXRv
IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpmaW5kRW50cnkoKSAtPiBGaW5kUmVzdWx0Cit7CisgICAg
dWludDY0X3Qga2V5ID0ga2V5Rm9yQ3VycmVudFRocmVhZCgpOworICAgIC8vIFdlIGNhbiBjYWxs
IHRoaXMgY29uY3VycmVudGx5IHRvIHRoZSBiaXQgdmVjdG9yIGJlaW5nIG1vZGlmaWVkCisgICAg
Ly8gc2luY2Ugd2UgZWl0aGVyIGNhbGwgdGhpcyB3aGVuIHdlJ3JlIGxvY2tlZCwgb3Igd2UgY2Fs
bCBpdCB3aGVuCisgICAgLy8gd2Uga25vdyB0aGUgZW50cnkgYWxyZWFkeSBleGlzdHMuIFdoZW4g
dGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzLAorICAgIC8vIHdlIGtub3cgdGhhdCB0aGUgYml0IGNh
bid0IGdldCBmbGlwcGVkIHNwdXJpb3VzbHkgZHVyaW5nIGNvbmN1cnJlbnQKKyAgICAvLyBtb2Rp
ZmljYXRpb24sIHNvIHdlJ3JlIGd1YXJhbnRlZWQgdG8gZmluZCB0aGUgdmFsdWUuIFdlIG1pZ2h0
IHNlZQorICAgIC8vIGFuIGVudHJ5IGFzIGl0J3MgYmVpbmcgd3JpdHRlbiB0bywgYnV0IHRoYXQn
cyBhbHNvIGZpbmUsIHNpbmNlIGl0CisgICAgLy8gd29uJ3QgaGF2ZSBvdXIgc2FtZSBrZXkuIEl0
J2xsIGVpdGhlciBiZSB6ZXJvLCBvciBhIGRpZmZlcmVudCBrZXkuCisKKyAgICBGaW5kUmVzdWx0
IHJlc3VsdDsKKyAgICBmb3JFYWNoRW50cnkoWyZdIChQYWdlJiBwYWdlLCBFbnRyeSYgZW50cnks
IHNpemVfdCBpbmRleCkgeworICAgICAgICBpZiAoZW50cnkua2V5ID09IGtleSkgeworICAgICAg
ICAgICAgcmVzdWx0LmVudHJ5ID0gJmVudHJ5OworICAgICAgICAgICAgcmVzdWx0LnBhZ2UgPSAm
cGFnZTsKKyAgICAgICAgICAgIHJlc3VsdC5pbmRleCA9IGluZGV4OworICAgICAgICAgICAgcmV0
dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSXRl
cmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICB9KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0FMV0FZU19JTkxJTkUgdWludDY0X3QgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OnBpbkZvckN1
cnJlbnRUaHJlYWQoKQoreworICAgIHJldHVybiBmaW5kRW50cnkoKS5lbnRyeS0+cGluOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENQVShBUk02NEUpICYmIEVOQUJMRShK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlz
aW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCwxMyBAQAogI2luY2x1ZGUgIkNlbGxBdHRyaWJ1
dGVzLmgiCiAjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcENlbGwu
aCIKLSNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJXZWFrU2V0LmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8
d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Db3VudGluZ0xvY2suaD4KICNpbmNsdWRlIDx3
dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNp
bmNsdWRlIDx3dGYvUGFnZUJsb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9u
IDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDEzICsyMiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJCbG9ja0RpcmVjdG9yeS5oIgotI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1
ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIKICNpbmNsdWRl
ICJQcmVjaXNlQWxsb2NhdGlvbi5oIgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPHd0Zi9C
YWcuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25T
dGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyODgwMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw4ICsyNyw4IEBACiAKICNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKLSNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4K
ICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAjaWYg
RU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oIgotI2lu
Y2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRp
b24uaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0
b3IuaD4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRp
b25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNpb24gMjg4MDA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NyArMjMsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJFeGVjdXRhYmxlSW5mby5oIgot
I2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIkxleGVyLmgiCiAjaW5jbHVk
ZSAiTW9kdWxlU2NvcGVEYXRhLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKQEAgLTM4LDYgKzM3LDcg
QEAKICNpbmNsdWRlICJWYXJpYWJsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSA8d3RmL0ZpeGVk
VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0
aW9uU3RhdHVzLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcxLDYgKzcxLDEwIEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICBp
ZiAoIWdfanNjQ29uZmlnLnZtLmNhblVzZUpJVCkgewogICAgICAgICAgICAgICAgIE9wdGlvbnM6
OnVzZUpJVCgpID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgT3B0aW9uczo6cmVjb21wdXRlRGVw
ZW5kZW50T3B0aW9ucygpOworICAgICAgICAgICAgfSBlbHNlIHsKKyNpZiBDUFUoQVJNNjRFKSAm
JiBFTkFCTEUoSklUKQorICAgICAgICAgICAgICAgIGdfanNjQ29uZmlnLmFybTY0ZUhhc2hQaW5z
LmluaXRpYWxpemVBdFN0YXJ0dXAoKTsKKyNlbmRpZgogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIE9wdGlvbnM6OmZpbmFsaXplKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JdGVyYXRpb25TdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JdGVyYXRpb25TdGF0dXMuaAkocmV2aXNpb24gMjg4MDA1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0aW9uU3RhdHVzLmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBKU0MgewotCi1lbnVtIGNsYXNz
IEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgQ29udGludWUsCi0gICAgRG9uZQotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NDb25m
aWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NDb25m
aWcuaAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDQ29uZmlnLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJH
YXRlLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiT3B0aW9uc0xpc3QuaCIKKyNp
bmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGlucy5oIgogI2luY2x1ZGUgPHd0Zi9XVEZDb25maWcu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05OSw2ICsxMDAsMTAgQEAgc3RydWN0IENvbmZpZyB7
CiAjaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCiAgICAgV1RGOjpQ
dHJUYWdMb29rdXAgcHRyVGFnTG9va3VwUmVjb3JkOwogI2VuZGlmCisKKyNpZiBDUFUoQVJNNjRF
KSAmJiBFTkFCTEUoSklUKQorICAgIFNlY3VyZUFSTTY0RUhhc2hQaW5zIGFybTY0ZUhhc2hQaW5z
OworI2VuZGlmCiB9OwogCiAjaWYgRU5BQkxFKFVOSUZJRURfQU5EX0ZSRUVaQUJMRV9DT05GSUdf
UkVDT1JEKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDEtMTQgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEFSTTY0RUhhc2gKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTE5MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0JpdG1hcC5o
OgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmZvckVhY2hTZXRCaXQgY29uc3QpOgorCiAyMDIy
LTAxLTEzICBFbGxpb3R0IFdpbGxpYW1zICA8ZW13QGFwcGxlLmNvbT4KIAogICAgICAgICBbWENC
dWlsZF0gQWRkICJwcm9kdWN0IGRlcGVuZGVuY2llcyIgd2hpY2ggaW5mbHVlbmNlIHdvcmtzcGFj
ZSBidWlsZCBvcmRlcgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsNiArNDMzLDcgQEAKIAkJNTFGMTc1MkEx
RjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRFbmNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBlcnNpc3RlbnRFbmNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUyMUNDNkIzMjRBMjc3QzIwMDQzNzdENiAvKiBUcmFuc2xhdGVkUHJvY2Vzcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdGVkUHJvY2Vzcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUyNkFFQzkxMUY2QjRFNUMwMDY5NUY1RCAvKiBOb1RhaWxDYWxs
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb1RhaWxDYWxscy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Mjk1QjAwNDI3OTIwQzU0MDA2RDc0NkEgLyogSXRl
cmF0aW9uU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvblN0YXR1cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIyMjhDMTI0NThEQzgyMDA3NTNEOTEgLyogSUNVSGVs
cGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJQ1VIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzMEE2MzQ4MUZBM0UzQTAwMDI2QTU0NSAvKiBTY3JpcHRzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZm9sZGVyOyBwYXRoID0gU2Ny
aXB0czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTExRUE3MUNBRDAwNTI1
MjgxIC8qIFNpZ25hbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2lnbmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTQ1LDYgKzExNDYs
NyBAQAogCQkJCUUzMzY2NzQ5MjcyMjU1MDkwMDI1OTEyMiAvKiBJbnQxMjguY3BwICovLAogCQkJ
CUY2RDY3RDMyMjZGOTAxNDIwMDZFMDM0OSAvKiBJbnQxMjguaCAqLywKIAkJCQkzM0ZENDgxMTI2
NUNCMzgwMDBBQkU0RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLywKKwkJCQk1Mjk1QjAwNDI3
OTIwQzU0MDA2RDc0NkEgLyogSXRlcmF0aW9uU3RhdHVzLmggKi8sCiAJCQkJMEY3RUI4NUIxRkE4
RkY0MTAwRjFBQkNCIC8qIElzb01hbGxvYy5oICovLAogCQkJCTBGN0VCODVDMUZBOEZGNDIwMEYx
QUJDQiAvKiBJc29NYWxsb2NJbmxpbmVzLmggKi8sCiAJCQkJN0NERDdGRjcxODZEMjkxRTAwNzQz
M0NEIC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdG1h
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCShyZXZpc2lvbiAyODgw
MDUpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiAr
MjIsNyBAQAogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0aW9uU3RhdHVz
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KICNpbmNsdWRlIDx3dGYvU3RkSW50RXh0cmFzLmg+CkBAIC03Miw2ICs3Myw4IEBAIHB1
YmxpYzoKICAgICAKICAgICBib29sIHN1YnN1bWVzKGNvbnN0IEJpdG1hcCYpIGNvbnN0OwogICAg
IAorICAgIC8vIElmIHRoZSBsYW1iZGEgcmV0dXJucyBhbiBJdGVyYXRpb25TdGF0dXMsIHdlIHVz
ZSBpdC4gVGhlIGxhbWJkYSBjYW4gYWxzbyByZXR1cm4KKyAgICAvLyB2b2lkLCBpbiB3aGljaCBj
YXNlLCB3ZSdsbCBpdGVyYXRlIGV2ZXJ5IHNldCBiaXQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KICAgICB2b2lkIGZvckVhY2hTZXRCaXQoY29uc3QgRnVuYyYpIGNvbnN0OwogICAgIApA
QCAtMzg5LDggKzM5MiwxMyBAQCBpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5
cGU+CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc2l6ZV90IGJhc2UgPSBpICogd29y
ZFNpemU7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgd29yZFNpemU7ICsraikgewot
ICAgICAgICAgICAgaWYgKHdvcmQgJiAxKQotICAgICAgICAgICAgICAgIGZ1bmMoYmFzZSArIGop
OworICAgICAgICAgICAgaWYgKHdvcmQgJiAxKSB7CisgICAgICAgICAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX3NhbWVfdjxJdGVyYXRpb25TdGF0dXMsIGRlY2x0eXBlKGZ1bmMoYmFzZSAr
IGopKT4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMoYmFzZSArIGopID09IEl0ZXJh
dGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZnVuYyhiYXNlICsgaik7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB3b3JkID4+PSAxOwogICAgICAgICB9CiAgICAgfQpJ
bmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgc2V0
KFdURl9QVUJMSUNfSEVBREVSUwogICAgIEludGVyZmVyZW5jZUdyYXBoLmgKICAgICBJc29NYWxs
b2MuaAogICAgIElzb01hbGxvY0lubGluZXMuaAorICAgIEl0ZXJhdGlvblN0YXR1cy5oCiAgICAg
SXRlcmF0b3JBZGFwdG9ycy5oCiAgICAgSXRlcmF0b3JSYW5nZS5oCiAgICAgSlNPTlZhbHVlcy5o
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JdGVyYXRpb25TdGF0dXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9JdGVyYXRpb25TdGF0dXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9JdGVyYXRpb25TdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCituYW1lc3BhY2UgV1RGIHsKKworZW51bSBjbGFzcyBJdGVyYXRpb25TdGF0dXMgewor
ICAgIENvbnRpbnVlLAorICAgIERvbmUKK307CisKK30KKwordXNpbmcgV1RGOjpJdGVyYXRpb25T
dGF0dXM7Cg==
</data>
<flag name="review"
          id="475257"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449496</attachid>
            <date>2022-01-19 10:56:26 -0800</date>
            <delta_ts>2022-01-19 11:23:47 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>52389</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MDE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDIyLTAxLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBBUk02NEVIYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYXNz
ZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpBUk02
NEVIYXNoKToKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6fkFSTTY0RUhhc2gpOgorICAgICAg
ICAoSlNDOjpBUk02NEVIYXNoOjpkZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCk6CisgICAg
ICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6
OnBpbik6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OmN1cnJlbnRIYXNoKToKKyAgICAgICAg
KEpTQzo6QVJNNjRFSGFzaDo6c2V0VXBkYXRlZEhhc2gpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
ZXJCdWZmZXI6OmFybTY0ZUhhc2gpOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpiaXRzRm9y
RGl2ZXJzaWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSk6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFsbG9jYXRlKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
U2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V3JpdGVUb0pJ
VFJlZ2lvblNjb3BlOjpXcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAgICAoSlNDOjpXcml0
ZVRvSklUUmVnaW9uU2NvcGU6On5Xcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlKToKKyAgICAg
ICAgKEpTQzo6VmFsaWRhdGVBdG9taWNpdHlTY29wZTo6flZhbGlkYXRlQXRvbWljaXR5U2NvcGUp
OgorICAgICAgICAoSlNDOjphbGxvY2F0ZUluRXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChK
U0M6OmluaXRpYWxpemVQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFzaFBpbnM6
OmluaXRpYWxpemVBdFN0YXJ0dXApOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGlu
czo6YWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJN
NjRFSGFzaFBpbnM6OmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlNl
Y3VyZUFSTTY0RUhhc2hQaW5zOjptZXRhZGF0YSk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0
RUhhc2hQaW5zOjpmaXJzdFBhZ2UpOgorICAgICAgICAqIGFzc2VtYmxlci9TZWN1cmVBUk02NEVI
YXNoUGluc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQ
aW5zOjprZXlGb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmZvckVhY2hQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFzaFBpbnM6
OmZvckVhY2hFbnRyeSk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjpmaW5k
RW50cnkpOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGluczo6cGluRm9yQ3VycmVu
dFRocmVhZCk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAg
ICAgICAgKEpTQzo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0NDb25maWcuaDoK
KwogMjAyMi0wMS0xMyAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW1JJU0NWNjRdIHJpc2N2NjQgYmFja2VuZCBzaG91bGQgbG93ZXIgb2ZmbGluZWFzbSBp
bnN0cnVjdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUEKICAgICBhc3NlbWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCiAgICAgYXNz
ZW1ibGVyL1JJU0NWNjRSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxlci9SZWdpc3RlckluZm8uaAor
ICAgIGFzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCisgICAgYXNzZW1ibGVyL1NlY3Vy
ZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCiAgICAgYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCiAg
ICAgYXNzZW1ibGVyL1g4NlJlZ2lzdGVycy5oCiAgICAgYXNzZW1ibGVyL1g4Nl82NFJlZ2lzdGVy
cy5oCkBAIC0xMDIzLDcgKzEwMjUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBCiAgICAgcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKICAgICBydW50aW1lL0lu
dHJpbnNpYy5oCiAgICAgcnVudGltZS9JdGVyYXRpb25LaW5kLmgKLSAgICBydW50aW1lL0l0ZXJh
dGlvblN0YXR1cy5oCiAgICAgcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAogICAgIHJ1bnRp
bWUvSXRlcmF0b3JQcm90b3R5cGUuaAogICAgIHJ1bnRpbWUvSlNBcnJheS5oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgYXNz
ZW1ibGVyL1BlcmZMb2cuY3BwCiBhc3NlbWJsZXIvUHJpbnRlci5jcHAKIGFzc2VtYmxlci9Qcm9i
ZUNvbnRleHQuY3BwCiBhc3NlbWJsZXIvUHJvYmVTdGFjay5jcHAKK2Fzc2VtYmxlci9TZWN1cmVB
Uk02NEVIYXNoUGlucy5jcHAKIAogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tB
bmRHZW5lcmF0ZUNvZGUuY3BwCiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5
TGluZWFyU2Nhbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODk1LDYgKzg5NSw4IEBACiAJ
CTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJB
IC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUyQzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmgg
Ki87IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5
ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyogU2VjdXJl
QVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQ0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGlucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyQ0FF
Qzc2Mjc5MEI5MDEwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0FFQzcyMjc5MEI4
RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkNEMEY1RDIyNDJGNTY5MDA0
QTE4QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRh
dGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUu
ZnJhbWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2
NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CkBAIC0yMDgzLDcgKzIwODUs
NiBAQAogCQlGRTQ4QkQ0NDIzMjQ1RTkzMDBGMTM2RDAgLyogSlNDQ29uZmlnLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTQ4QkQ0MjIzMjQ1RTg3MDBG
MTM2RDAgLyogSlNDQ29uZmlnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRkU0OEU2MzgxRUIxMThEMjAwNUQ3QTk2IC8qIE9iamVjdEluaXRpYWxp
emF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFNDhFNjM2MUVCMTE4OEYwMDVEN0E5NiAvKiBPYmplY3RJbml0aWFsaXphdGlvblNjb3Bl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU0
QkZGMkMxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRCRkYyQTFBRDQ3NkU3MDAwODhG
ODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCAqLzsgfTsKLQkJRkU0RDU1QjgxQUU3MTZDQTAwNTJF
NDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZF
NTA2ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTA2ODY0MUFFMjQ2MzkwMDA5
REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTUzM0NBNTFGMjE3REIzMDAxNkExRkUgLyogRm91bmRh
dGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsg
Ki87IH07CiAJCUZFNTMzQ0E2MUYyMTdEQjMwMDE2QTFGRSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9
OwpAQCAtMzc4OSw2ICszNzkwLDkgQEAKIAkJNTJDNTU1NjUyMjRDMkFFNzAwOTlGNUNDIC8qIERG
R1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsdWVSZXBSZWR1
Y3Rpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5
cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRF
SGFzaFBpbnNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZUFSTTY0RUhhc2hQaW5zSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkNBRUM3MzI3OTBCOEY2MDBE
REJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vj
dXJlQVJNNjRFSGFzaFBpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkNB
RUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTJDRDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJs
ZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZn
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBw
YXRoID0gZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQx
MzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZh
c2NyaXB0OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTYy
Nyw3ICs1NjMxLDYgQEAKIAkJRkU0OEU2MzcxRUIxMThBRDAwNUQ3QTk2IC8qIE9iamVjdEluaXRp
YWxpemF0aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFNEJGRjI5MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbk92ZXJyaWRlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEJGRjJBMUFENDc2RTcwMDA4OEY4NyAv
KiBGdW5jdGlvbk92ZXJyaWRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
dW5jdGlvbk92ZXJyaWRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRTRENTVC
NzFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvblN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRTUwNjg2NDFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVtcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyog
RGVmZXJyZWRTb3VyY2VEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERlZmVycmVkU291cmNlRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFNTMzQ0EwMUYyMTdDMzEwMDE2QTFGRSAvKiB0ZXN0bWFzbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSB0ZXN0bWFzbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODE1LDcg
Kzc4MTgsNiBAQAogCQkJCUEzOENBNTlCMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmNwcCAq
LywKIAkJCQlBMzhDQTU5QzI2REQ4NERFMDBDOEQ4NEMgLyogSVNPODYwMS5oICovLAogCQkJCThC
OUY2RDU1MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggKi8sCi0JCQkJRkU0RDU1
QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcwMTEzRDQ5
MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLAogCQkJCTcwMTEz
RDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLywKIAkJCQk3MERD
M0UwNzFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuY3BwICovLApAQCAtODgw
Miw2ICs4ODA0LDkgQEAKIAkJCQlGRTEwQUFFOTFGNDRENTEwMDA5REVEQzUgLyogUHJvYmVTdGFj
ay5jcHAgKi8sCiAJCQkJRkUxMEFBRUExRjQ0RDUxMjAwOURFREM1IC8qIFByb2JlU3RhY2suaCAq
LywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTkgLyogUmVnaXN0ZXJJbmZvLmggKi8sCisJ
CQkJNTJDQUVDNzMyNzkwQjhGNjAwRERCQUFGIC8qIFNlY3VyZUFSTTY0RUhhc2hQaW5zLmNwcCAq
LywKKwkJCQk1MkNBRUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMu
aCAqLywKKwkJCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBp
bnNJbmxpbmVzLmggKi8sCiAJCQkJRkU1MzNDQTAxRjIxN0MzMTAwMTZBMUZFIC8qIHRlc3RtYXNt
LmNwcCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTIgLyogWDg2XzY0UmVnaXN0ZXJz
LmggKi8sCiAJCQkJOTY4OENCMTQwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oICov
LApAQCAtMTAwMTksNiArMTAwMjQsNyBAQAogCQkJCTBGQkUwRjczMTZDMURCMDUwMDgyQzVFOCAv
KiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGNjE3
QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGRkM5NUExNEVGOTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyogU2VjdXJlQVJNNjRF
SGFzaFBpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAv
KiBERkdEQ0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNCRkE1RDAyMUU4NTNBMTAwOUMw
RUJBIC8qIERGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
RjJCOUExNzJGMDUwMTAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMDQ3Niw3ICsxMDQ4Miw2IEBACiAJCQkJMEY1RTBGRTcyMDg2QUQ0ODAwOTdG
MERFIC8qIElzb1N1YnNwYWNlUGVyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCThCOUY2RDU2MUQ1
OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0Q0
MUVDOTIzQzAwODFBMDBBRTk4NEIgLyogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlGRTRENTVCODFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JP
cGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MERDM0UwQTFCMkRGMkM3MDAwNTQyOTkg
LyogSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEzMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywKQEAgLTExMTc5LDYgKzEx
MTg0LDcgQEAKIAkJCQlFMzNCQkUwOTI1QkZBMDQxMDA1MzY5MEYgLyogV2FzbVN0cmVhbWluZ0Nv
bXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVDMTQgLyog
V2FzbVN0cmVhbWluZ1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEyNUJGQTcz
QjAwRUZFMzAzIC8qIFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkNB
RUM3NjI3OTBCOTAxMDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRhYmxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEQwMUJGNTI2REVFRjUzMDBDQUUwRDAgLyogV2FzbVRhZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVu
a3MuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAj
aW5jbHVkZSAiSklUQ29tcGlsYXRpb25FZmZvcnQuaCIKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVI
YXNoUGluc0lubGluZXMuaCIKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxzdHJpbmcu
aD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMjAzLDE5ICsyMDQsNDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIENQVShBUk02NEUpCisgICAgZW51bSBjbGFzcyBT
aG91bGRTaWduIHsKKyAgICAgICAgWWVzLAorICAgICAgICBObworICAgIH07CisgICAgdGVtcGxh
dGUgPFNob3VsZFNpZ24gc2hvdWxkU2lnbj4KICAgICBjbGFzcyBBUk02NEVIYXNoIHsKKyAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQVJNNjRFSGFzaCk7CiAgICAgcHVibGljOgotICAgICAg
ICBBUk02NEVIYXNoKHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBUk02NEVIYXNoKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcHJlcGFyZUZvckVtaXR0aW5nSW5zdHJ1Y3Rpb25zKCk7Cisg
ICAgICAgIH0KKworICAgICAgICB+QVJNNjRFSGFzaCgpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHNldFVwZGF0ZWRIYXNoKDAsIDAsIGRpdmVyc2lmaWVyKTsKKyAgICAgICAgICAgIGRlYWxsb2Nh
dGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIH0KKworICAgICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgcHJlcGFyZUZvckVtaXR0aW5nSW5zdHJ1Y3Rpb25zKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgY29uc3RleHByIChzaG91bGRTaWduID09IFNob3VsZFNpZ246Olllcykgewor
ICAgICAgICAgICAgICAgIG1faW5pdGlhbGl6ZWRQaW4gPSB0cnVlOworICAgICAgICAgICAgICAg
IGdfanNjQ29uZmlnLmFybTY0ZUhhc2hQaW5zLmFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCgp
OworICAgICAgICAgICAgICAgIHNldFVwZGF0ZWRIYXNoKDAsIDApOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgbV9oYXNoID0gMDsKICAgICAgICAgfQogCi0gICAgICAgIEFM
V0FZU19JTkxJTkUgdWludDMyX3QgdXBkYXRlKHVpbnQzMl90IGluc3RydWN0aW9uLCB1aW50MzJf
dCBpbmRleCwgdm9pZCogZGl2ZXJzaWZpZXIpCisgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVBpbkZv
ckN1cnJlbnRUaHJlYWQoKQogICAgICAgICB7Ci0gICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50
SGFzaCA9IHRoaXMtPmN1cnJlbnRIYXNoKGluZGV4LCBkaXZlcnNpZmllcik7CisgICAgICAgICAg
ICBpZiAobV9pbml0aWFsaXplZFBpbikgeworICAgICAgICAgICAgICAgIGdfanNjQ29uZmlnLmFy
bTY0ZUhhc2hQaW5zLmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgICAg
ICAgICAgbV9pbml0aWFsaXplZFBpbiA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgQUxXQVlTX0lOTElORSB1aW50MzJfdCB1cGRhdGUodWludDMyX3QgaW5zdHJ1
Y3Rpb24sIHVpbnQzMl90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBj
dXJyZW50SGFzaCA9IHRoaXMtPmN1cnJlbnRIYXNoKGluZGV4KTsKICAgICAgICAgICAgIHVpbnQ2
NF90IG5leHRJbmRleCA9IGluZGV4ICsgMTsKICAgICAgICAgICAgIHVpbnQzMl90IG91dHB1dCA9
IG5leHRWYWx1ZShpbnN0cnVjdGlvbiwgbmV4dEluZGV4LCBjdXJyZW50SGFzaCk7Ci0gICAgICAg
ICAgICBzZXRVcGRhdGVkSGFzaChvdXRwdXQsIG5leHRJbmRleCwgZGl2ZXJzaWZpZXIpOworICAg
ICAgICAgICAgc2V0VXBkYXRlZEhhc2gob3V0cHV0LCBuZXh0SW5kZXgpOwogICAgICAgICAgICAg
cmV0dXJuIG91dHB1dDsKICAgICAgICAgfQogCkBAIC0yMzUsMjkgKzI2NSwyOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAoYSA+PiAzOSkgXiAoYiA+PiAyMyk7CiAgICAg
ICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSB1aW50MzJfdCBiaXRzRm9yRGl2
ZXJzaWZpZXIodm9pZCogZGl2ZXJzaWZpZXIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IHVpbnQzMl90IHBpbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihkaXZlcnNpZmllcik7CisgICAgICAgICAgICByZXR1cm4gZ19qc2NDb25m
aWcuYXJtNjRlSGFzaFBpbnMucGluRm9yQ3VycmVudFRocmVhZCgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgQUxXQVlTX0lOTElORSB1aW50MzJfdCBjdXJyZW50SGFzaCh1aW50MzJfdCBpbmRleCwg
dm9pZCogZGl2ZXJzaWZpZXIpCisgICAgICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgY3VycmVu
dEhhc2godWludDMyX3QgaW5kZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaGFzaEZp
ZWxkSXNUYWdnZWQgPSBpbmRleCA9PSAwOwotICAgICAgICAgICAgaWYgKGhhc2hGaWVsZElzVGFn
Z2VkKQotICAgICAgICAgICAgICAgIHJldHVybiB1bnRhZ0ludChtX2hhc2gsIG1ha2VEaXZlcnNp
Zmllcihpbml0aWFsaXphdGlvbk5hbWVzcGFjZSwgaW5kZXgsIGJpdHNGb3JEaXZlcnNpZmllcihk
aXZlcnNpZmllcikpKTsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2hvdWxkU2lnbiA9PSBT
aG91bGRTaWduOjpZZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHVudGFnSW50KG1faGFzaCwg
bWFrZURpdmVyc2lmaWVyKGluaXRpYWxpemF0aW9uTmFtZXNwYWNlLCBpbmRleCwgcGluKCkpKTsK
ICAgICAgICAgICAgIHJldHVybiBtX2hhc2g7CiAgICAgICAgIH0KIAotICAgICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0VXBkYXRlZEhhc2godWludDMyX3QgdmFsdWUsIHVpbnQzMl90IGluZGV4
LCB2b2lkKiBkaXZlcnNpZmllcikKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFVwZGF0
ZWRIYXNoKHVpbnQzMl90IHZhbHVlLCB1aW50MzJfdCBpbmRleCkKICAgICAgICAgewotICAgICAg
ICAgICAgYm9vbCBzaG91bGRUYWdIYXNoRmllbGQgPSBpbmRleCA9PSAwOwotICAgICAgICAgICAg
aWYgKHNob3VsZFRhZ0hhc2hGaWVsZCkKLSAgICAgICAgICAgICAgICBtX2hhc2ggPSB0YWdJbnQo
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSwgbWFrZURpdmVyc2lmaWVyKGluaXRpYWxpemF0
aW9uTmFtZXNwYWNlLCBpbmRleCwgYml0c0ZvckRpdmVyc2lmaWVyKGRpdmVyc2lmaWVyKSkpOwor
ICAgICAgICAgICAgaWYgY29uc3RleHByIChzaG91bGRTaWduID09IFNob3VsZFNpZ246OlllcykK
KyAgICAgICAgICAgICAgICBtX2hhc2ggPSB0YWdJbnQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZh
bHVlKSwgbWFrZURpdmVyc2lmaWVyKGluaXRpYWxpemF0aW9uTmFtZXNwYWNlLCBpbmRleCwgcGlu
KCkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2hhc2ggPSB2YWx1ZTsK
KyAgICAgICAgICAgICAgICBtX2hhc2ggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpOwog
ICAgICAgICB9CiAKICAgICAgICAgdWludDY0X3QgbV9oYXNoOworICAgICAgICBib29sIG1faW5p
dGlhbGl6ZWRQaW4geyBmYWxzZSB9OwogICAgIH07CiAjZW5kaWYgLy8gQ1BVKEFSTTY0RSkKIApA
QCAtMjY3LDcgKzI5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgOiBtX3N0b3Jh
Z2UoKQogICAgICAgICAgICAgLCBtX2luZGV4KDApCiAjaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAg
ICAgICwgbV9oYXNoKHRoaXMpCisgICAgICAgICAgICAsIG1faGFzaCgpCiAgICAgICAgICAgICAs
IG1faGFzaGVzKCkKICNlbmRpZgogICAgICAgICB7CkBAIC00MDksNiArNDM4LDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdl
LmJ1ZmZlcigpOyB9CiAjZW5kaWYKIAorI2lmIENQVShBUk02NEUpCisgICAgICAgIEFSTTY0RUhh
c2g8U2hvdWxkU2lnbjo6WWVzPiYgYXJtNjRlSGFzaCgpIHsgcmV0dXJuIG1faGFzaDsgfQorI2Vu
ZGlmCisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludGVncmFs
VHlwZT4KICAgICAgICAgdm9pZCBwdXRJbnRlZ3JhbChJbnRlZ3JhbFR5cGUgdmFsdWUpCkBAIC00
MjUsNyArNDU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgQ1BVKEFSTTY0KQogICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YodmFsdWUpID09IDQsICIiKTsKICNpZiBDUFUoQVJNNjRF
KQotICAgICAgICAgICAgdWludDMyX3QgaGFzaCA9IG1faGFzaC51cGRhdGUodmFsdWUsIG1faW5k
ZXggLyBzaXplb2YoSW50ZWdyYWxUeXBlKSwgdGhpcyk7CisgICAgICAgICAgICB1aW50MzJfdCBo
YXNoID0gbV9oYXNoLnVwZGF0ZSh2YWx1ZSwgbV9pbmRleCAvIHNpemVvZihJbnRlZ3JhbFR5cGUp
KTsKICAgICAgICAgICAgIFdURjo6dW5hbGlnbmVkU3RvcmU8dWludDMyX3Q+KG1faGFzaGVzLmJ1
ZmZlcigpICsgbV9pbmRleCwgaGFzaCk7CiAjZW5kaWYKICNlbmRpZgpAQCAtNDU5LDcgKzQ5Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBc3NlbWJsZXJEYXRhIG1fc3RvcmFnZTsKICAg
ICAgICAgdW5zaWduZWQgbV9pbmRleDsKICNpZiBDUFUoQVJNNjRFKQotICAgICAgICBBUk02NEVI
YXNoIG1faGFzaDsKKyAgICAgICAgQVJNNjRFSGFzaDxTaG91bGRTaWduOjpZZXM+IG1faGFzaDsK
ICAgICAgICAgQXNzZW1ibGVyRGF0YSBtX2hhc2hlczsKICNlbmRpZgogICAgIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlz
aW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw4ICsyMjEsNyBAQCB2b2lkIExpbmtCdWZmZXI6
OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAgbV9hc3NlbWJsZXJTdG9yYWdlID0gbWFjcm9B
c3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkucmVsZWFzZUFzc2VtYmxlckRhdGEoKTsKICAg
ICB1aW50OF90KiBpbkRhdGEgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KG1fYXNzZW1ibGVyU3Rv
cmFnZS5idWZmZXIoKSk7CiAjaWYgQ1BVKEFSTTY0RSkKLSAgICB2b2lkKiBidWZmZXJQdHIgPSAm
bWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCk7Ci0gICAgQVJNNjRFSGFzaCB2ZXJp
ZnlVbmNvbXBhY3RlZEhhc2ggeyBidWZmZXJQdHIgfTsKKyAgICBBUk02NEVIYXNoPFNob3VsZFNp
Z246Ok5vPiB2ZXJpZnlVbmNvbXBhY3RlZEhhc2g7CiAgICAgbV9hc3NlbWJsZXJIYXNoZXNTdG9y
YWdlID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkucmVsZWFzZUFzc2VtYmxl
ckhhc2hlcygpOwogICAgIHVpbnQzMl90KiBpbkhhc2hlcyA9IGJpdHdpc2VfY2FzdDx1aW50MzJf
dCo+KG1fYXNzZW1ibGVySGFzaGVzU3RvcmFnZS5idWZmZXIoKSk7CiAjZW5kaWYKQEAgLTI0NSw3
ICsyNDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAg
ICAgIEluc3RydWN0aW9uVHlwZSB2YWx1ZSA9ICpwdHI7CiAjaWYgQ1BVKEFSTTY0RSkKICAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSAoYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihwdHIpIC0gaW5EYXRh
KSAvIDQ7Ci0gICAgICAgIHVpbnQzMl90IGhhc2ggPSB2ZXJpZnlVbmNvbXBhY3RlZEhhc2gudXBk
YXRlKHZhbHVlLCBpbmRleCwgYnVmZmVyUHRyKTsKKyAgICAgICAgdWludDMyX3QgaGFzaCA9IHZl
cmlmeVVuY29tcGFjdGVkSGFzaC51cGRhdGUodmFsdWUsIGluZGV4KTsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaW5IYXNoZXNbaW5kZXhdID09IGhhc2gpOwogI2VuZGlmCiAgICAgICAgIHJldHVy
biB2YWx1ZTsKQEAgLTQzOCw2ICs0MzcsMTAgQEAgdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShN
YWNyb0Fzc2VtYmxlcgogICAgICAgICBpbml0aWFsU2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNz
ZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgfQogCisjaWYgQ1BVKEFSTTY0RSkKKyAgICBtYWNyb0Fz
c2VtYmxlci5tX2Fzc2VtYmxlci5idWZmZXIoKS5hcm02NGVIYXNoKCkuZGVhbGxvY2F0ZVBpbkZv
ckN1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgorCiAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIGVmZm9y
dCk7CiAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJN
NjRFSGFzaFBpbnMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCisK
KyNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiRmFzdEpJVFBlcm1p
c3Npb25zLmgiCisjaW5jbHVkZSAiU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisjaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKKworc3RydWN0IFdyaXRl
VG9KSVRSZWdpb25TY29wZSB7CisgICAgQUxXQVlTX0lOTElORSBXcml0ZVRvSklUUmVnaW9uU2Nv
cGUoKQorICAgIHsKKyAgICAgICAgdGhyZWFkU2VsZlJlc3RyaWN0UldYVG9SVygpOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgfldyaXRlVG9KSVRSZWdpb25TY29wZSgpCisgICAgeworICAg
ICAgICB0aHJlYWRTZWxmUmVzdHJpY3RSV1hUb1JYKCk7CisgICAgfQorfTsKKworc3RydWN0IFZh
bGlkYXRlTm9uUmVlbnRyYW5jeVNjb3BlIHsKKyAgICBBTFdBWVNfSU5MSU5FIFZhbGlkYXRlTm9u
UmVlbnRyYW5jeVNjb3BlKFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpNZXRhZGF0YSogbWV0YWRhdGEp
CisgICAgICAgIDogbV9tZXRhZGF0YShtZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90
IHZhbGlkYXRlTm9uUmVlbnRyYW5jeSA9IG1fbWV0YWRhdGEtPmFzc2VydE5vdFJlZW50cmFudC5l
eGNoYW5nZSgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIXZhbGlkYXRlTm9uUmVlbnRyYW5jeSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSB+VmFsaWRhdGVOb25SZWVudHJhbmN5U2NvcGUoKQorICAgIHsKKyAgICAgICAgdWludDMyX3Qg
dmFsaWRhdGVOb25SZWVudHJhbmN5ID0gbV9tZXRhZGF0YS0+YXNzZXJ0Tm90UmVlbnRyYW50LmV4
Y2hhbmdlKDAsIHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVCh2YWxpZGF0ZU5vblJlZW50cmFuY3kgPT0gMSk7CisgICAgfQorICAgIFNlY3VyZUFSTTY0
RUhhc2hQaW5zOjpNZXRhZGF0YSogbV9tZXRhZGF0YTsKK307CisKKy8vIFRoaXMgY2xhc3MgaXMg
YWxsb2NhdGVkIG9uY2UgcGVyIHByb2Nlc3MsIHNvIHN0YXRpYyBsb2NrIGlzIG9rLgorc3RhdGlj
IExvY2sgaGFzaFBpbnNMb2NrOworCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlOjpNZW1vcnlQdHIgYWxsb2NhdGVJbkV4ZWN1dGFibGVNZW1vcnkoc2l6ZV90IHNp
emUpCit7CisgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoc2l6ZSwgSklUQ29tcGlsYXRpb25NdXN0U3Vj
Y2VlZCkubGVha1JlZigpOworICAgIFJFTEVBU0VfQVNTRVJUKGhhbmRsZSk7CisgICAgdm9pZCog
bWVtb3J5ID0gaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyPGNoYXIqPigpOworICAgIFJFTEVB
U0VfQVNTRVJUKGlzSklUUEMobWVtb3J5KSAmJiBpc0pJVFBDKGJpdHdpc2VfY2FzdDxjaGFyKj4o
bWVtb3J5KSArIHNpemUgLSAxKSk7CisgICAgcmV0dXJuIGhhbmRsZS0+c3RhcnQoKTsKK30KKwor
QUxXQVlTX0lOTElORSBTZWN1cmVBUk02NEVIYXNoUGluczo6UGFnZTo6UGFnZSgpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVudHJpZXNQZXJQYWdlOyArK2kpIHsKKyAgICAg
ICAgYXV0byYgZW50cnkgPSB0aGlzLT5lbnRyeShpKTsKKyAgICAgICAgZW50cnkucGluID0gMDsK
KyAgICAgICAgZW50cnkua2V5ID0gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgaW5pdGlhbGl6ZVBhZ2UoY29uc3QgV3JpdGVUb0pJVFJlZ2lvblNjb3BlJiwgU2VjdXJl
QVJNNjRFSGFzaFBpbnM6OlBhZ2UqIHBhZ2UpCit7CisgICAgbmV3IChwYWdlKSBTZWN1cmVBUk02
NEVIYXNoUGluczo6UGFnZTsKK30KKworI2RlZmluZSBWQUxJREFURV9USElTX1ZBTFVFKCkgUkVM
RUFTRV9BU1NFUlQodGhpcyA9PSAmZ19qc2NDb25maWcuYXJtNjRlSGFzaFBpbnMpIAorCitBTFdB
WVNfSU5MSU5FIGF1dG8gU2VjdXJlQVJNNjRFSGFzaFBpbnM6Om1ldGFkYXRhKCkgLT4gTWV0YWRh
dGEqCit7CisgICAgVkFMSURBVEVfVEhJU19WQUxVRSgpOworICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8TWV0YWRhdGEqPihtX21lbW9yeSkgLSAxOworfQorCit2b2lkIFNlY3VyZUFSTTY0RUhhc2hQ
aW5zOjppbml0aWFsaXplQXRTdGFydHVwKCkKK3sKKyAgICBWQUxJREFURV9USElTX1ZBTFVFKCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWVtb3J5KTsKKworICAgIG1fbWVtb3J5ID0gYWxsb2Nh
dGVJbkV4ZWN1dGFibGVNZW1vcnkoc2l6ZW9mKE1ldGFkYXRhKSArIFBhZ2U6OmFsbG9jYXRpb25T
aXplKCkpLnVudGFnZ2VkUHRyPGNoYXIqPigpICsgc2l6ZW9mKE1ldGFkYXRhKTsKKworICAgIHsK
KyAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2NvcGU7CisKKyAgICAgICAgbmV3
IChtZXRhZGF0YSgpKSBNZXRhZGF0YTsgCisgICAgICAgIGluaXRpYWxpemVQYWdlKHdyaXRlU2Nv
cGUsIGZpcnN0UGFnZSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgU2VjdXJlQVJNNjRFSGFzaFBpbnM6
OmFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZEltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImKQor
eworICAgIFZBTElEQVRFX1RISVNfVkFMVUUoKTsKKworICAgIHNpemVfdCBuZXdFbnRyeUluZGV4
OworICAgIFBhZ2UqIG5ld0VudHJ5UGFnZTsKKworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAg
ICBzaXplX3QgYmFzZUluZGV4ID0gMDsKKyAgICBmb3JFYWNoUGFnZShbJl0gKFBhZ2UmIHBhZ2Up
IHsKKyAgICAgICAgc2l6ZV90IGJpdCA9IHBhZ2UuZmluZENsZWFyQml0KCk7CisgICAgICAgIGlm
IChiaXQgPCBudW1FbnRyaWVzUGVyUGFnZSkgeworICAgICAgICAgICAgZm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgbmV3RW50cnlJbmRleCA9IGJhc2VJbmRleCArIGJpdDsKKyAgICAgICAgICAg
IG5ld0VudHJ5UGFnZSA9ICZwYWdlOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1
czo6RG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIGJhc2VJbmRleCArPSBudW1FbnRyaWVzUGVy
UGFnZTsKKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgfSk7
CisKKyAgICBpZiAoIWZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGZp
bmRSZXN1bHQgPSBmaW5kRmlyc3RFbnRyeSgpOworICAgIEVudHJ5KiBwcmVleGlzdGluZ0VudHJ5
ID0gZmluZFJlc3VsdC5lbnRyeTsKKyAgICBzaXplX3QgcHJlZXhpc3RpbmdFbnRyeUluZGV4ID0g
ZmluZFJlc3VsdC5pbmRleDsKKyAgICBQYWdlKiBwcmVleGlzdGluZ0VudHJ5UGFnZSA9IGZpbmRS
ZXN1bHQucGFnZTsKKworICAgIHsKKyAgICAgICAgYXV0byogbWV0YWRhdGEgPSB0aGlzLT5tZXRh
ZGF0YSgpOworCisgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNjb3BlOworICAg
ICAgICBWYWxpZGF0ZU5vblJlZW50cmFuY3lTY29wZSB2YWxpZGF0ZU5vblJlZW50cmFuY3kobWV0
YWRhdGEpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSklUUEMobWV0YWRhdGEpKTsKKyAg
ICAgICAgdWludDY0X3QgbmV4dFBpbiA9IG1ldGFkYXRhLT5uZXh0UGluLmV4Y2hhbmdlQWRkKDEs
IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChuZXh0
UGluKTsKKworICAgICAgICBuZXdFbnRyeVBhZ2UtPnNldElzSW5Vc2UobmV3RW50cnlJbmRleCk7
CisKKyAgICAgICAgaWYgKHByZWV4aXN0aW5nRW50cnkgJiYgcHJlZXhpc3RpbmdFbnRyeUluZGV4
IDwgbmV3RW50cnlJbmRleCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJlZXhpc3Rp
bmdFbnRyeVBhZ2UtPmlzSW5Vc2UocHJlZXhpc3RpbmdFbnRyeUluZGV4KSk7CisKKyAgICAgICAg
ICAgIG5ld0VudHJ5UGFnZS0+ZW50cnkobmV3RW50cnlJbmRleCkgPSAqcHJlZXhpc3RpbmdFbnRy
eTsKKyAgICAgICAgICAgIG5ld0VudHJ5SW5kZXggPSBwcmVleGlzdGluZ0VudHJ5SW5kZXg7Cisg
ICAgICAgICAgICBuZXdFbnRyeVBhZ2UgPSBwcmVleGlzdGluZ0VudHJ5UGFnZTsKKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8mIGVudHJ5ID0gbmV3RW50cnlQYWdlLT5lbnRyeShuZXdFbnRyeUlu
ZGV4KTsKKyAgICAgICAgZW50cnkucGluID0gbmV4dFBpbjsKKyAgICAgICAgZW50cnkua2V5ID0g
a2V5Rm9yQ3VycmVudFRocmVhZCgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjphbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKQor
eworICAgIFZBTElEQVRFX1RISVNfVkFMVUUoKTsKKworICAgIExvY2tlciBsb2NrZXIgeyBoYXNo
UGluc0xvY2sgfTsKKworICAgIGlmIChhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWRJbXBsKGxv
Y2tlcikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEFsbG9jYXRlIGEgbmV3IHBhZ2UKKyAg
ICB7CisgICAgICAgIFBhZ2UqIGxhc3RQYWdlID0gZmlyc3RQYWdlKCk7CisgICAgICAgIHdoaWxl
IChsYXN0UGFnZS0+bmV4dCkKKyAgICAgICAgICAgIGxhc3RQYWdlID0gbGFzdFBhZ2UtPm5leHQ7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsYXN0UGFnZS0+bmV4dCk7CisKKyAgICAgICAgYXV0
byBuZXdQYWdlID0gYWxsb2NhdGVJbkV4ZWN1dGFibGVNZW1vcnkoUGFnZTo6YWxsb2NhdGlvblNp
emUoKSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdy
aXRlU2NvcGU7CisgICAgICAgICAgICBWYWxpZGF0ZU5vblJlZW50cmFuY3lTY29wZSB2YWxpZGF0
ZU5vblJlZW50cmFuY3kobWV0YWRhdGEoKSk7CisgICAgICAgICAgICBpbml0aWFsaXplUGFnZSh3
cml0ZVNjb3BlLCBuZXdQYWdlLnVudGFnZ2VkUHRyPFBhZ2UqPigpKTsKKyAgICAgICAgICAgIC8v
IFRoaXMgY2FuIGJlIHJlYWQgZnJvbSBjb25jdXJyZW50bHkuIE1ha2Ugc3VyZSBpdCdzIGluIGEg
Z29vZCBzdGF0ZSBmb3IgdGhhdCB0byBoYXBwZW4uCisgICAgICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgICAgICAgICAgbGFzdFBhZ2UtPm5leHQgPSBuZXdQYWdlLnVudGFnZ2Vk
UHRyPFBhZ2UqPigpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBzdWNjZXNzID0gYWxs
b2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkSW1wbChsb2NrZXIpOworICAgIFJFTEVBU0VfQVNTRVJU
KHN1Y2Nlc3MpOworfQorCit2b2lkIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpkZWFsbG9jYXRlUGlu
Rm9yQ3VycmVudFRocmVhZCgpCit7CisgICAgVkFMSURBVEVfVEhJU19WQUxVRSgpOworCisgICAg
TG9ja2VyIGxvY2tlciB7IGhhc2hQaW5zTG9jayB9OworCisgICAgYXV0byBjbGVhciA9IFsmXSAo
RW50cnkmIGVudHJ5KSB7CisgICAgICAgIGVudHJ5LnBpbiA9IDA7CisgICAgICAgIGVudHJ5Lmtl
eSA9IDA7CisgICAgfTsKKworICAgIFBhZ2UqIHJlbW92YWxQYWdlOworICAgIHNpemVfdCByZW1v
dmFsSW5kZXg7CisgICAgeworICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBmaW5kRmlyc3RFbnRy
eSgpOworICAgICAgICBFbnRyeSYgZW50cnkgPSAqZmluZFJlc3VsdC5lbnRyeTsKKyAgICAgICAg
cmVtb3ZhbEluZGV4ID0gZmluZFJlc3VsdC5pbmRleDsKKyAgICAgICAgcmVtb3ZhbFBhZ2UgPSBm
aW5kUmVzdWx0LnBhZ2U7CisKKyAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2Nv
cGU7CisgICAgICAgIFZhbGlkYXRlTm9uUmVlbnRyYW5jeVNjb3BlIHZhbGlkYXRlTm9uUmVlbnRy
YW5jeShtZXRhZGF0YSgpKTsKKworICAgICAgICBjbGVhcihlbnRyeSk7CisgICAgICAgIHJlbW92
YWxQYWdlLT5jbGVhcklzSW5Vc2UocmVtb3ZhbEluZGV4KTsKKyAgICB9CisKKyAgICAvLyBUaGlz
IGltcGxlbWVudGF0aW9uIGFsbG93cyByZWN1cnNpdmUgdXNlcyBvZiB0aGUgTWFjcm9Bc3NlbWJs
ZXIsIGZvcm1pbmcgYSBzdGFjaworICAgIC8vIGxpa2UgZGF0YSBzdHJ1Y3R1cmUuIFRoZSBpbiB1
c2UgcGluICh0b3Agb2YgdGhlIHN0YWNrKSB3aWxsIGFsd2F5cyBiZSBhdCB0aGUgbG93ZXN0Cisg
ICAgLy8gcGFnZSBhbmQgbG93ZXN0IGluZGV4IGluIHRoZSBiaXQgdmVjdG9yLiBTbyB3aGVuIHdl
IGRlYWxsb2NhdGUgdGhlIGN1cnJlbnQgdG9wIG9mIHRoZQorICAgIC8vIHN0YWNrLCB3ZSBuZWVk
IHRvIGZpbmQgdGhlIG5leHQgZW50cnkgaW4gdGhlIHN0YWNrLCBhbmQgZW5zdXJlIGl0J3MgYXQg
dGhlIGxvd2VzdCBpbmRleC4KKyAgICAvLyBTbyBpZiB0aGVyZSBhcmUgb3RoZXIgZW50cmllcyBm
b3IgdGhpcyBjdXJyZW50IHRocmVhZCwgd2UgZmluZCB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QK
KyAgICAvLyBwaW4gKG5leHQgdG9wIG9mIHN0YWNrIHZhbHVlKSwgYW5kIHJlcGxhY2UgaXQgYXQg
dGhlIGluZGV4IHdlIHdlcmUgdXNpbmcgYmVmb3JlLgorICAgIC8vIEFsbG9jYXRpb24gYWxzbyBt
YWludGFpbnMgdGhpcyBpbnZhcmlhbnQgYnkgYWx3YXlzIHBsYWNpbmcgdGhlIG5ld2VzdCBlbnRy
eSBmb3IKKyAgICAvLyB0aGUgY3VycmVudCB0aHJlYWQgYXQgdGhlIGxvd2VzdCBpbmRleC4KKyAg
ICB7CisgICAgICAgIHVpbnQ2NF90IGtleSA9IGtleUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICB1aW50NjRfdCBtYXhQaW4gPSAwOworICAg
ICAgICBzaXplX3QgbWF4SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
OworICAgICAgICBQYWdlKiBtYXhQYWdlID0gbnVsbHB0cjsKKworICAgICAgICBmb3JFYWNoRW50
cnkoWyZdIChQYWdlJiBwYWdlLCBFbnRyeSYgZW50cnksIHNpemVfdCBpbmRleCkgeworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkucGluKTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5r
ZXkgPT0ga2V5ICYmIGVudHJ5LnBpbiA+IG1heFBpbikgeworICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtYXhQaW4gPSBlbnRyeS5waW47CisgICAgICAgICAg
ICAgICAgbWF4SW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBtYXhQYWdlID0gJnBhZ2U7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNv
bnRpbnVlOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlbW92YWxJbmRleCA8IG1heEluZGV4KTsKKworICAgICAgICAgICAg
V3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2NvcGU7CisgICAgICAgICAgICBWYWxpZGF0ZU5v
blJlZW50cmFuY3lTY29wZSB2YWxpZGF0ZU5vblJlZW50cmFuY3kobWV0YWRhdGEoKSk7CisKKyAg
ICAgICAgICAgIHJlbW92YWxQYWdlLT5lbnRyeShyZW1vdmFsSW5kZXgpID0gbWF4UGFnZS0+ZW50
cnkobWF4SW5kZXgpOworICAgICAgICAgICAgY2xlYXIobWF4UGFnZS0+ZW50cnkobWF4SW5kZXgp
KTsKKyAgICAgICAgICAgIG1heFBhZ2UtPmNsZWFySXNJblVzZShtYXhJbmRleCk7CisgICAgICAg
ICAgICByZW1vdmFsUGFnZS0+c2V0SXNJblVzZShyZW1vdmFsSW5kZXgpOworICAgICAgICB9Cisg
ICAgfQorfQorCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKKworfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3Vy
ZUFSTTY0RUhhc2hQaW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJ
VCkKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFNlY3VyZUFSTTY0RUhhc2hQaW5zIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGluaXRpYWxpemVBdFN0YXJ0dXAoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFs
bG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZGVhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICB1aW50NjRfdCBwaW5Gb3JDdXJy
ZW50VGhyZWFkKCk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1FbnRyaWVzUGVy
UGFnZSA9IDY0OworCisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgdWludDY0X3QgcGluOwor
ICAgICAgICB1aW50NjRfdCBrZXk7CisgICAgfTsKKworICAgIHN0cnVjdCBhbGlnbmFzKGFsaWdu
b2YoRW50cnkpKSBQYWdlIHsKKyAgICAgICAgUGFnZSgpOworCisgICAgICAgIHN0YXRpYyBzaXpl
X3QgYWxsb2NhdGlvblNpemUoKSB7IHJldHVybiBzaXplb2YoUGFnZSkgKyBudW1FbnRyaWVzUGVy
UGFnZSAqIHNpemVvZihFbnRyeSk7IH0KKworICAgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBtYXNrID0gbnVtRW50cmllc1BlclBhZ2UgLSAxOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGhh
c09uZUJpdFNldChudW1FbnRyaWVzUGVyUGFnZSkpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEh
bWFzayk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShtYXNrICYgbnVtRW50cmllc1BlclBhZ2Up
KTsKKworICAgICAgICBBTFdBWVNfSU5MSU5FIEVudHJ5JiBlbnRyeShzaXplX3QgaW5kZXgpCisg
ICAgICAgIHsgCisgICAgICAgICAgICByZXR1cm4gZW50cmllcygpW2luZGV4ICYgbWFza107Cisg
ICAgICAgIH0KKworICAgICAgICBBTFdBWVNfSU5MSU5FIEVudHJ5JiBmYXN0RW50cnlVbmNoZWNr
ZWQoc2l6ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoKGluZGV4ICYg
bWFzaykgPT0gaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIGVudHJpZXMoKVtpbmRleF07Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJc0luVXNl
KHNpemVfdCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaXNJblVzZU1hcC5zZXQoaW5k
ZXggJiBtYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVh
cklzSW5Vc2Uoc2l6ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBpc0luVXNlTWFw
LnNldChpbmRleCAmIG1hc2ssIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0luVXNlKHNpemVfdCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzSW5Vc2VNYXAuZ2V0KGluZGV4ICYgbWFzayk7CisgICAgICAgIH0KKworICAgICAg
ICBBTFdBWVNfSU5MSU5FIHNpemVfdCBmaW5kQ2xlYXJCaXQoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNJblVzZU1hcC5maW5kQml0KDAsIGZhbHNlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGZvckVhY2hTZXRCaXQoRnVuY3Rpb24gZnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlzSW5Vc2VNYXAuZm9yRWFjaFNldEJpdChmdW5jdGlvbik7CisgICAgICAgIH0KKwor
ICAgICAgICBQYWdlKiBuZXh0IHsgbnVsbHB0ciB9OworICAgIHByaXZhdGU6CisgICAgICAgIEVu
dHJ5KiBlbnRyaWVzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PEVudHJ5Kj4odGhpcyArIDEpOyB9
CisgICAgICAgIEJpdG1hcDxudW1FbnRyaWVzUGVyUGFnZT4gaXNJblVzZU1hcDsKKyAgICB9Owor
CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoUGFnZSkgJSBhbGlnbm9mKEVudHJ5KSA9PSAwKTsK
KworICAgIHN0cnVjdCBhbGlnbmFzKGFsaWdub2YoUGFnZSkpIE1ldGFkYXRhIHsKKyAgICAgICAg
QXRvbWljPHVpbnQ2NF90PiBuZXh0UGluIHsgMSB9OworICAgICAgICBBdG9taWM8dWludDMyX3Q+
IGFzc2VydE5vdFJlZW50cmFudCB7IDAgfTsKKyAgICB9OworCisgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoTWV0YWRhdGEpICUgYWxpZ25vZihQYWdlKSA9PSAwKTsKKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgdWludDY0X3Qga2V5Rm9yQ3VycmVudFRocmVhZCgpOworICAgIGJvb2wgYWxsb2NhdGVQ
aW5Gb3JDdXJyZW50VGhyZWFkSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYpOworCisgICAgc3Ry
dWN0IEZpbmRSZXN1bHQgeworICAgICAgICBFbnRyeSogZW50cnkgeyBudWxscHRyIH07CisgICAg
ICAgIHNpemVfdCBpbmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsK
KyAgICAgICAgUGFnZSogcGFnZSB7IG51bGxwdHIgfTsKKyAgICB9OworICAgIEZpbmRSZXN1bHQg
ZmluZEZpcnN0RW50cnkoKTsKKworICAgIE1ldGFkYXRhKiBtZXRhZGF0YSgpOworICAgIGlubGlu
ZSBQYWdlKiBmaXJzdFBhZ2UoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UGFnZSo+KG1fbWVtb3J5
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgZm9yRWFj
aFBhZ2UoRnVuY3Rpb24pOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAg
IHZvaWQgZm9yRWFjaEVudHJ5KEZ1bmN0aW9uKTsKKworICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVs
bHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDUFUoQVJNNjRF
KSAmJiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9T
ZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFz
aFBpbnNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCisKKyNpZiBDUFUoQVJNNjRFKSAmJiBFTkFC
TEUoSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworQUxXQVlTX0lOTElORSB1aW50NjRfdCBTZWN1
cmVBUk02NEVIYXNoUGluczo6a2V5Rm9yQ3VycmVudFRocmVhZCgpCit7CisgICAgdWludDY0X3Qg
cmVzdWx0OworICAgIGFzbSAoCisgICAgICAgICJtcnMgJXhbcmVzdWx0XSwgVFBJRFJST19FTDAi
CisgICAgICAgIDogW3Jlc3VsdF0gIj1yIiAocmVzdWx0KQorICAgICAgICA6CisgICAgICAgIDoK
KyAgICApOworICAgIHJldHVybiByZXN1bHQgKyAxOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rpb24+CitBTFdBWVNfSU5MSU5FIHZvaWQgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmZvckVh
Y2hQYWdlKEZ1bmN0aW9uIGZ1bmN0aW9uKQoreworICAgIGZvciAoUGFnZSogcGFnZSA9IGZpcnN0
UGFnZSgpOyBwYWdlOyBwYWdlID0gcGFnZS0+bmV4dCkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VChpc0pJVFBDKHBhZ2UpKTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uKCpwYWdlKSA9PSBJdGVyYXRp
b25TdGF0dXM6OkRvbmUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CitBTFdBWVNfSU5MSU5FIHZvaWQgU2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmZvckVhY2hFbnRyeShGdW5jdGlvbiBmdW5jdGlvbikKK3sKKyAgICBzaXplX3QgYmFz
ZUluZGV4ID0gMDsKKyAgICBmb3JFYWNoUGFnZShbJl0gKFBhZ2UmIHBhZ2UpIHsKKyAgICAgICAg
SXRlcmF0aW9uU3RhdHVzIGl0ZXJhdGlvblN0YXR1cyA9IEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CisgICAgICAgIHBhZ2UuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCBiaXRJbmRleCkgewor
ICAgICAgICAgICAgRW50cnkmIGVudHJ5ID0gcGFnZS5mYXN0RW50cnlVbmNoZWNrZWQoYml0SW5k
ZXgpOworICAgICAgICAgICAgQVNTRVJUKGlzSklUUEMoJmVudHJ5KSk7CisgICAgICAgICAgICBz
aXplX3QgaW5kZXggPSBiYXNlSW5kZXggKyBiaXRJbmRleDsKKyAgICAgICAgICAgIGl0ZXJhdGlv
blN0YXR1cyA9IGZ1bmN0aW9uKHBhZ2UsIGVudHJ5LCBpbmRleCk7CisgICAgICAgICAgICByZXR1
cm4gaXRlcmF0aW9uU3RhdHVzOworICAgICAgICB9KTsKKyAgICAgICAgYmFzZUluZGV4ICs9IG51
bUVudHJpZXNQZXJQYWdlOworICAgICAgICByZXR1cm4gaXRlcmF0aW9uU3RhdHVzOworICAgIH0p
OworfQorCitBTFdBWVNfSU5MSU5FIGF1dG8gU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmZpbmRGaXJz
dEVudHJ5KCkgLT4gRmluZFJlc3VsdAoreworICAgIHVpbnQ2NF90IGtleSA9IGtleUZvckN1cnJl
bnRUaHJlYWQoKTsKKyAgICAvLyBXZSBjYW4gY2FsbCB0aGlzIGNvbmN1cnJlbnRseSB0byB0aGUg
Yml0IHZlY3RvciBiZWluZyBtb2RpZmllZAorICAgIC8vIHNpbmNlIHdlIGVpdGhlciBjYWxsIHRo
aXMgd2hlbiB3ZSdyZSBsb2NrZWQsIG9yIHdlIGNhbGwgaXQgd2hlbgorICAgIC8vIHdlIGtub3cg
dGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzLiBXaGVuIHRoZSBlbnRyeSBhbHJlYWR5IGV4aXN0cywK
KyAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGJpdCBjYW4ndCBnZXQgZmxpcHBlZCBzcHVyaW91c2x5
IGR1cmluZyBjb25jdXJyZW50CisgICAgLy8gbW9kaWZpY2F0aW9uLCBzbyB3ZSdyZSBndWFyYW50
ZWVkIHRvIGZpbmQgdGhlIHZhbHVlLiBXZSBtaWdodCBzZWUKKyAgICAvLyBhbiBlbnRyeSBhcyBp
dCdzIGJlaW5nIHdyaXR0ZW4gdG8sIGJ1dCB0aGF0J3MgYWxzbyBmaW5lLCBzaW5jZSBpdAorICAg
IC8vIHdvbid0IGhhdmUgb3VyIHNhbWUga2V5LiBJdCdsbCBlaXRoZXIgYmUgemVybywgb3IgYSBk
aWZmZXJlbnQga2V5LgorCisgICAgRmluZFJlc3VsdCByZXN1bHQ7CisgICAgZm9yRWFjaEVudHJ5
KFsmXSAoUGFnZSYgcGFnZSwgRW50cnkmIGVudHJ5LCBzaXplX3QgaW5kZXgpIHsKKyAgICAgICAg
aWYgKGVudHJ5LmtleSA9PSBrZXkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5lbnRyeSA9ICZlbnRy
eTsKKyAgICAgICAgICAgIHJlc3VsdC5wYWdlID0gJnBhZ2U7CisgICAgICAgICAgICByZXN1bHQu
aW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Cisg
ICAgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBTFdBWVNfSU5MSU5FIHVpbnQ2NF90
IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpwaW5Gb3JDdXJyZW50VGhyZWFkKCkKK3sKKyAgICByZXR1
cm4gZmluZEZpcnN0RW50cnkoKS5lbnRyeS0+cGluOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDEzICsyNCwxMyBAQAogI2luY2x1ZGUgIkNlbGxBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGVz
dHJ1Y3Rpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKLSNpbmNsdWRlICJJdGVyYXRp
b25TdGF0dXMuaCIKICNpbmNsdWRlICJXZWFrU2V0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
I2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9Db3VudGluZ0xvY2suaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvUGFnZUJsb2Nr
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEz
ICsyMiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeS5oIgot
I2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAj
aW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIKICNpbmNsdWRlICJQcmVjaXNlQWxsb2NhdGlvbi5o
IgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAK
ICNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMu
aCIKLSNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTEgKzM0LDEzIEBAIEJhc2VsaW5lSklUUGxhbjo6QmFzZWxpbmVKSVRQbGFuKENvZGVC
bG8KICAgICA6IEpJVFBsYW4oSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSwgY29kZUJsb2Nr
KQogICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiB7CisgICAgbV9qaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuYXJtNjRlSGFz
aCgpLmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CiAgICAgbV9qaXQuZG9NYWluVGhy
ZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiB9CiAKIGF1dG8gQmFzZWxpbmVKSVRQbGFu
Ojpjb21waWxlSW5UaHJlYWRJbXBsKCkgLT4gQ29tcGlsYXRpb25QYXRoCiB7CisgICAgbV9qaXQu
bV9hc3NlbWJsZXIuYnVmZmVyKCkuYXJtNjRlSGFzaCgpLnByZXBhcmVGb3JFbWl0dGluZ0luc3Ry
dWN0aW9ucygpOwogICAgIG1faml0LmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKICAgICByZXR1cm4gQmFzZWxpbmVQYXRoOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
CShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTEgQEAKICNpZiBF
TkFCTEUoSklUKQogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmgiCi0jaW5j
bHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlv
bi5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL0l0ZXJhdGlv
blN0YXR1cy5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDx3
dGYvUHJvY2Vzc0lELmg+CiAjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3
ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZvLmgiCi0j
aW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKICNpbmNsdWRl
ICJNb2R1bGVTY29wZURhdGEuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgpAQCAtMzgsNiArMzcsNyBA
QAogI2luY2x1ZGUgIlZhcmlhYmxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRml4ZWRW
ZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRp
b25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxp
emVUaHJlYWRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICAgICAgICAgIGlm
ICghZ19qc2NDb25maWcudm0uY2FuVXNlSklUKSB7CiAgICAgICAgICAgICAgICAgT3B0aW9uczo6
dXNlSklUKCkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBPcHRpb25zOjpyZWNvbXB1dGVEZXBl
bmRlbnRPcHRpb25zKCk7CisgICAgICAgICAgICB9IGVsc2UgeworI2lmIENQVShBUk02NEUpICYm
IEVOQUJMRShKSVQpCisgICAgICAgICAgICAgICAgZ19qc2NDb25maWcuYXJtNjRlSGFzaFBpbnMu
aW5pdGlhbGl6ZUF0U3RhcnR1cCgpOworI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgT3B0aW9uczo6ZmluYWxpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0l0ZXJhdGlvblN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0l0ZXJhdGlvblN0YXR1cy5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRpb25TdGF0dXMuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWVudW0gY2xhc3Mg
SXRlcmF0aW9uU3RhdHVzIHsKLSAgICBDb250aW51ZSwKLSAgICBEb25lCi19OwotCi19IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZp
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZp
Zy5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NDb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkdh
dGUuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJPcHRpb25zTGlzdC5oIgorI2lu
Y2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCiAjaW5jbHVkZSA8d3RmL1dURkNvbmZpZy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk5LDYgKzEwMCwxMCBAQCBzdHJ1Y3QgQ29uZmlnIHsK
ICNpZiBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORykKICAgICBXVEY6OlB0
clRhZ0xvb2t1cCBwdHJUYWdMb29rdXBSZWNvcmQ7CiAjZW5kaWYKKworI2lmIENQVShBUk02NEUp
ICYmIEVOQUJMRShKSVQpCisgICAgU2VjdXJlQVJNNjRFSGFzaFBpbnMgYXJtNjRlSGFzaFBpbnM7
CisjZW5kaWYKIH07CiAKICNpZiBFTkFCTEUoVU5JRklFRF9BTkRfRlJFRVpBQkxFX0NPTkZJR19S
RUNPUkQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MTIsNyAr
MzkxMiw2IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW8KIHsKICAg
ICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIAotICAgIGNv
bXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxs
SGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBt
YWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIAogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5wcm9j
ZWR1cmUgPSBtYWtlVW5pcXVlPEIzOjpQcm9jZWR1cmU+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODgw
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNDIsNyArMzE0Miw2IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW8KIHsKICAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50
ZXJuYWxGdW5jdGlvbj4oKTsKIAotICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5
cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNv
bnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAg
ICBjb21waWxhdGlvbkNvbnRleHQucHJvY2VkdXJlID0gbWFrZVVuaXF1ZTxQcm9jZWR1cmU+KCk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJl
dmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSw3IEBAIHZvaWQgQkJRUGxhbjo6Y29t
cGlsZUZ1bmN0aW9uKHVpbnQzMl90IGYKICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlc1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUg
PSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAorICAgICAgICBt
X2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0uZW1iZWRkZXJFbnRyeXBvaW50SklU
ID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgICAgIGF1dG8gZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9uID0gY3JlYXRlSlNUb1dhc21XcmFwcGVyKCptX2NvbXBpbGF0aW9u
Q29udGV4dHNbZnVuY3Rpb25JbmRleF0uZW1iZWRkZXJFbnRyeXBvaW50SklULCBzaWduYXR1cmUs
ICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9y
bWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICBhdXRvIGxpbmtC
dWZmZXIgPSBtYWtlVW5pcXVlPExpbmtCdWZmZXI+KCptX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVu
Y3Rpb25JbmRleF0uZW1iZWRkZXJFbnRyeXBvaW50SklULCBudWxscHRyLCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpXYXNtLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogCkluZGV4OiBTb3VyY2UvV1RG
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24g
Mjg4MDA1KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAyMi0wMS0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBVcGRhdGUgQVJNNjRFSGFzaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0u
CisKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6Zm9y
RWFjaFNldEJpdCBjb25zdCk6CisKIDIwMjItMDEtMTMgIEVsbGlvdHQgV2lsbGlhbXMgIDxlbXdA
YXBwbGUuY29tPgogCiAgICAgICAgIFtYQ0J1aWxkXSBBZGQgInByb2R1Y3QgZGVwZW5kZW5jaWVz
IiB3aGljaCBpbmZsdWVuY2Ugd29ya3NwYWNlIGJ1aWxkIG9yZGVyCkluZGV4OiBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQz
Myw2ICs0MzMsNyBAQAogCQk1MUYxNzUyQTFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudEVu
Y29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyc2lzdGVudEVuY29k
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxQ0M2QjMyNEEyNzdDMjAwNDM3
N0Q2IC8qIFRyYW5zbGF0ZWRQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0
ZWRQcm9jZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2QUVDOTExRjZC
NEU1QzAwNjk1RjVEIC8qIE5vVGFpbENhbGxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5vVGFpbENhbGxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyOTVC
MDA0Mjc5MjBDNTQwMDZENzQ2QSAvKiBJdGVyYXRpb25TdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SXRlcmF0aW9uU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjIyOEMx
MjQ1OERDODIwMDc1M0Q5MSAvKiBJQ1VIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElDVUhlbHBl
cnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTYzNDgxRkEzRTNBMDAwMjZB
NTQ1IC8qIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBmb2xkZXI7IHBhdGggPSBTY3JpcHRzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaWduYWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTExNDUsNiArMTE0Niw3IEBACiAJCQkJRTMzNjY3NDkyNzIyNTUwOTAwMjU5
MTIyIC8qIEludDEyOC5jcHAgKi8sCiAJCQkJRjZENjdEMzIyNkY5MDE0MjAwNkUwMzQ5IC8qIElu
dDEyOC5oICovLAogCQkJCTMzRkQ0ODExMjY1Q0IzODAwMEFCRTRGNCAvKiBJbnRlcmZlcmVuY2VH
cmFwaC5oICovLAorCQkJCTUyOTVCMDA0Mjc5MjBDNTQwMDZENzQ2QSAvKiBJdGVyYXRpb25TdGF0
dXMuaCAqLywKIAkJCQkwRjdFQjg1QjFGQThGRjQxMDBGMUFCQ0IgLyogSXNvTWFsbG9jLmggKi8s
CiAJCQkJMEY3RUI4NUMxRkE4RkY0MjAwRjFBQkNCIC8qIElzb01hbGxvY0lubGluZXMuaCAqLywK
IAkJCQk3Q0REN0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oICovLApJ
bmRleDogU291cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQml0bWFwLmgJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5j
bHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRJbnRFeHRy
YXMuaD4KQEAgLTcyLDYgKzczLDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgc3Vic3VtZXMo
Y29uc3QgQml0bWFwJikgY29uc3Q7CiAgICAgCisgICAgLy8gSWYgdGhlIGxhbWJkYSByZXR1cm5z
IGFuIEl0ZXJhdGlvblN0YXR1cywgd2UgdXNlIGl0LiBUaGUgbGFtYmRhIGNhbiBhbHNvIHJldHVy
bgorICAgIC8vIHZvaWQsIGluIHdoaWNoIGNhc2UsIHdlJ2xsIGl0ZXJhdGUgZXZlcnkgc2V0IGJp
dC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaFNldEJpdChj
b25zdCBGdW5jJikgY29uc3Q7CiAgICAgCkBAIC0xNjUsMTMgKzE2OCwxMyBAQCBpbmxpbmUgYm9v
bCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRt
YXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KLWlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OnNldChzaXplX3QgbikKK0FMV0FZU19JTkxJTkUgdm9pZCBCaXRtYXA8Yml0
bWFwU2l6ZSwgV29yZFR5cGU+OjpzZXQoc2l6ZV90IG4pCiB7CiAgICAgYml0c1tuIC8gd29yZFNp
emVdIHw9IChvbmUgPDwgKG4gJSB3b3JkU2l6ZSkpOwogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0
bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Ci1pbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6
ZSwgV29yZFR5cGU+OjpzZXQoc2l6ZV90IG4sIGJvb2wgdmFsdWUpCitBTFdBWVNfSU5MSU5FIHZv
aWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6c2V0KHNpemVfdCBuLCBib29sIHZhbHVl
KQogewogICAgIGlmICh2YWx1ZSkKICAgICAgICAgc2V0KG4pOwpAQCAtMzg5LDggKzM5MiwxMyBA
QCBpbmxpbmUgdm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgc2l6ZV90IGJhc2UgPSBpICogd29yZFNpemU7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGogPSAwOyBqIDwgd29yZFNpemU7ICsraikgewotICAgICAgICAgICAgaWYgKHdv
cmQgJiAxKQotICAgICAgICAgICAgICAgIGZ1bmMoYmFzZSArIGopOworICAgICAgICAgICAgaWYg
KHdvcmQgJiAxKSB7CisgICAgICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVf
djxJdGVyYXRpb25TdGF0dXMsIGRlY2x0eXBlKGZ1bmMoYmFzZSArIGopKT4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGZ1bmMoYmFzZSArIGopID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgZnVuYyhiYXNlICsgaik7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB3b3JkID4+PSAxOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVS
UwogICAgIEludGVyZmVyZW5jZUdyYXBoLmgKICAgICBJc29NYWxsb2MuaAogICAgIElzb01hbGxv
Y0lubGluZXMuaAorICAgIEl0ZXJhdGlvblN0YXR1cy5oCiAgICAgSXRlcmF0b3JBZGFwdG9ycy5o
CiAgICAgSXRlcmF0b3JSYW5nZS5oCiAgICAgSlNPTlZhbHVlcy5oCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9JdGVyYXRpb25TdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JdGVy
YXRpb25TdGF0dXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9JdGVyYXRpb25T
dGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ug
V1RGIHsKKworZW51bSBjbGFzcyBJdGVyYXRpb25TdGF0dXMgeworICAgIENvbnRpbnVlLAorICAg
IERvbmUKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okl0ZXJhdGlvblN0
YXR1czsK
</data>
<flag name="commit-queue"
          id="475598"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449500</attachid>
            <date>2022-01-19 11:23:47 -0800</date>
            <delta_ts>2022-01-19 15:18:00 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>52439</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MDE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDIyLTAxLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBBUk02NEVIYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYXNz
ZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpBUk02
NEVIYXNoKToKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6fkFSTTY0RUhhc2gpOgorICAgICAg
ICAoSlNDOjpBUk02NEVIYXNoOjpkZWFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCk6CisgICAg
ICAgIChKU0M6OkFSTTY0RUhhc2g6OnVwZGF0ZSk6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6
OnBpbik6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OmN1cnJlbnRIYXNoKToKKyAgICAgICAg
KEpTQzo6QVJNNjRFSGFzaDo6c2V0VXBkYXRlZEhhc2gpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
ZXJCdWZmZXI6OmFybTY0ZUhhc2gpOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpiaXRzRm9y
RGl2ZXJzaWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSk6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFsbG9jYXRlKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
U2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V3JpdGVUb0pJ
VFJlZ2lvblNjb3BlOjpXcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAgICAoSlNDOjpXcml0
ZVRvSklUUmVnaW9uU2NvcGU6On5Xcml0ZVRvSklUUmVnaW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlOjpWYWxpZGF0ZUF0b21pY2l0eVNjb3BlKToKKyAgICAg
ICAgKEpTQzo6VmFsaWRhdGVBdG9taWNpdHlTY29wZTo6flZhbGlkYXRlQXRvbWljaXR5U2NvcGUp
OgorICAgICAgICAoSlNDOjphbGxvY2F0ZUluRXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChK
U0M6OmluaXRpYWxpemVQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFzaFBpbnM6
OmluaXRpYWxpemVBdFN0YXJ0dXApOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGlu
czo6YWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJN
NjRFSGFzaFBpbnM6OmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlNl
Y3VyZUFSTTY0RUhhc2hQaW5zOjptZXRhZGF0YSk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0
RUhhc2hQaW5zOjpmaXJzdFBhZ2UpOgorICAgICAgICAqIGFzc2VtYmxlci9TZWN1cmVBUk02NEVI
YXNoUGluc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQ
aW5zOjprZXlGb3JDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmZvckVhY2hQYWdlKToKKyAgICAgICAgKEpTQzo6U2VjdXJlQVJNNjRFSGFzaFBpbnM6
OmZvckVhY2hFbnRyeSk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjpmaW5k
RW50cnkpOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGluczo6cGluRm9yQ3VycmVu
dFRocmVhZCk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAg
ICAgICAgKEpTQzo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0NDb25maWcuaDoK
KwogMjAyMi0wMS0xMyAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW1JJU0NWNjRdIHJpc2N2NjQgYmFja2VuZCBzaG91bGQgbG93ZXIgb2ZmbGluZWFzbSBp
bnN0cnVjdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUEKICAgICBhc3NlbWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCiAgICAgYXNz
ZW1ibGVyL1JJU0NWNjRSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxlci9SZWdpc3RlckluZm8uaAor
ICAgIGFzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCisgICAgYXNzZW1ibGVyL1NlY3Vy
ZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCiAgICAgYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCiAg
ICAgYXNzZW1ibGVyL1g4NlJlZ2lzdGVycy5oCiAgICAgYXNzZW1ibGVyL1g4Nl82NFJlZ2lzdGVy
cy5oCkBAIC0xMDIzLDcgKzEwMjUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBCiAgICAgcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKICAgICBydW50aW1lL0lu
dHJpbnNpYy5oCiAgICAgcnVudGltZS9JdGVyYXRpb25LaW5kLmgKLSAgICBydW50aW1lL0l0ZXJh
dGlvblN0YXR1cy5oCiAgICAgcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAogICAgIHJ1bnRp
bWUvSXRlcmF0b3JQcm90b3R5cGUuaAogICAgIHJ1bnRpbWUvSlNBcnJheS5oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgYXNz
ZW1ibGVyL1BlcmZMb2cuY3BwCiBhc3NlbWJsZXIvUHJpbnRlci5jcHAKIGFzc2VtYmxlci9Qcm9i
ZUNvbnRleHQuY3BwCiBhc3NlbWJsZXIvUHJvYmVTdGFjay5jcHAKK2Fzc2VtYmxlci9TZWN1cmVB
Uk02NEVIYXNoUGlucy5jcHAKIAogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tB
bmRHZW5lcmF0ZUNvZGUuY3BwCiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5
TGluZWFyU2Nhbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODk1LDYgKzg5NSw4IEBACiAJ
CTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJB
IC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUyQzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmgg
Ki87IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5
ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyogU2VjdXJl
QVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQ0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGlucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyQ0FF
Qzc2Mjc5MEI5MDEwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0FFQzcyMjc5MEI4
RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkNEMEY1RDIyNDJGNTY5MDA0
QTE4QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRh
dGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUu
ZnJhbWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2
NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CkBAIC0yMDgzLDcgKzIwODUs
NiBAQAogCQlGRTQ4QkQ0NDIzMjQ1RTkzMDBGMTM2RDAgLyogSlNDQ29uZmlnLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTQ4QkQ0MjIzMjQ1RTg3MDBG
MTM2RDAgLyogSlNDQ29uZmlnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRkU0OEU2MzgxRUIxMThEMjAwNUQ3QTk2IC8qIE9iamVjdEluaXRpYWxp
emF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFNDhFNjM2MUVCMTE4OEYwMDVEN0E5NiAvKiBPYmplY3RJbml0aWFsaXphdGlvblNjb3Bl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU0
QkZGMkMxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRCRkYyQTFBRDQ3NkU3MDAwODhG
ODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCAqLzsgfTsKLQkJRkU0RDU1QjgxQUU3MTZDQTAwNTJF
NDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZF
NTA2ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTA2ODY0MUFFMjQ2MzkwMDA5
REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTUzM0NBNTFGMjE3REIzMDAxNkExRkUgLyogRm91bmRh
dGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsg
Ki87IH07CiAJCUZFNTMzQ0E2MUYyMTdEQjMwMDE2QTFGRSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9
OwpAQCAtMzc4OSw2ICszNzkwLDkgQEAKIAkJNTJDNTU1NjUyMjRDMkFFNzAwOTlGNUNDIC8qIERG
R1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsdWVSZXBSZWR1
Y3Rpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5
cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRF
SGFzaFBpbnNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZUFSTTY0RUhhc2hQaW5zSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkNBRUM3MzI3OTBCOEY2MDBE
REJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vj
dXJlQVJNNjRFSGFzaFBpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkNB
RUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTJDRDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJs
ZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZn
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBw
YXRoID0gZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQx
MzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZh
c2NyaXB0OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTYy
Nyw3ICs1NjMxLDYgQEAKIAkJRkU0OEU2MzcxRUIxMThBRDAwNUQ3QTk2IC8qIE9iamVjdEluaXRp
YWxpemF0aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFNEJGRjI5MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbk92ZXJyaWRlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEJGRjJBMUFENDc2RTcwMDA4OEY4NyAv
KiBGdW5jdGlvbk92ZXJyaWRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
dW5jdGlvbk92ZXJyaWRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRTRENTVC
NzFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvblN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRTUwNjg2NDFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVtcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyog
RGVmZXJyZWRTb3VyY2VEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERlZmVycmVkU291cmNlRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFNTMzQ0EwMUYyMTdDMzEwMDE2QTFGRSAvKiB0ZXN0bWFzbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSB0ZXN0bWFzbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODE1LDcg
Kzc4MTgsNiBAQAogCQkJCUEzOENBNTlCMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmNwcCAq
LywKIAkJCQlBMzhDQTU5QzI2REQ4NERFMDBDOEQ4NEMgLyogSVNPODYwMS5oICovLAogCQkJCThC
OUY2RDU1MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggKi8sCi0JCQkJRkU0RDU1
QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcwMTEzRDQ5
MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLAogCQkJCTcwMTEz
RDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLywKIAkJCQk3MERD
M0UwNzFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuY3BwICovLApAQCAtODgw
Miw2ICs4ODA0LDkgQEAKIAkJCQlGRTEwQUFFOTFGNDRENTEwMDA5REVEQzUgLyogUHJvYmVTdGFj
ay5jcHAgKi8sCiAJCQkJRkUxMEFBRUExRjQ0RDUxMjAwOURFREM1IC8qIFByb2JlU3RhY2suaCAq
LywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTkgLyogUmVnaXN0ZXJJbmZvLmggKi8sCisJ
CQkJNTJDQUVDNzMyNzkwQjhGNjAwRERCQUFGIC8qIFNlY3VyZUFSTTY0RUhhc2hQaW5zLmNwcCAq
LywKKwkJCQk1MkNBRUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMu
aCAqLywKKwkJCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBp
bnNJbmxpbmVzLmggKi8sCiAJCQkJRkU1MzNDQTAxRjIxN0MzMTAwMTZBMUZFIC8qIHRlc3RtYXNt
LmNwcCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTIgLyogWDg2XzY0UmVnaXN0ZXJz
LmggKi8sCiAJCQkJOTY4OENCMTQwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oICov
LApAQCAtMTAwMTksNiArMTAwMjQsNyBAQAogCQkJCTBGQkUwRjczMTZDMURCMDUwMDgyQzVFOCAv
KiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGNjE3
QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGRkM5NUExNEVGOTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyogU2VjdXJlQVJNNjRF
SGFzaFBpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAv
KiBERkdEQ0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNCRkE1RDAyMUU4NTNBMTAwOUMw
RUJBIC8qIERGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
RjJCOUExNzJGMDUwMTAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMDQ3Niw3ICsxMDQ4Miw2IEBACiAJCQkJMEY1RTBGRTcyMDg2QUQ0ODAwOTdG
MERFIC8qIElzb1N1YnNwYWNlUGVyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCThCOUY2RDU2MUQ1
OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0Q0
MUVDOTIzQzAwODFBMDBBRTk4NEIgLyogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlGRTRENTVCODFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JP
cGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MERDM0UwQTFCMkRGMkM3MDAwNTQyOTkg
LyogSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEzMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywKQEAgLTExMTc5LDYgKzEx
MTg0LDcgQEAKIAkJCQlFMzNCQkUwOTI1QkZBMDQxMDA1MzY5MEYgLyogV2FzbVN0cmVhbWluZ0Nv
bXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVDMTQgLyog
V2FzbVN0cmVhbWluZ1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEyNUJGQTcz
QjAwRUZFMzAzIC8qIFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkNB
RUM3NjI3OTBCOTAxMDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRhYmxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEQwMUJGNTI2REVFRjUzMDBDQUUwRDAgLyogV2FzbVRhZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVu
a3MuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAj
aW5jbHVkZSAiSklUQ29tcGlsYXRpb25FZmZvcnQuaCIKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVI
YXNoUGluc0lubGluZXMuaCIKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxzdHJpbmcu
aD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMjAzLDE5ICsyMDQsNDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIENQVShBUk02NEUpCisgICAgZW51bSBjbGFzcyBT
aG91bGRTaWduIHsKKyAgICAgICAgWWVzLAorICAgICAgICBObworICAgIH07CisgICAgdGVtcGxh
dGUgPFNob3VsZFNpZ24gc2hvdWxkU2lnbj4KICAgICBjbGFzcyBBUk02NEVIYXNoIHsKKyAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQVJNNjRFSGFzaCk7CiAgICAgcHVibGljOgotICAgICAg
ICBBUk02NEVIYXNoKHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBUk02NEVIYXNoKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcHJlcGFyZUZvckVtaXR0aW5nSW5zdHJ1Y3Rpb25zKCk7Cisg
ICAgICAgIH0KKworICAgICAgICB+QVJNNjRFSGFzaCgpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHNldFVwZGF0ZWRIYXNoKDAsIDAsIGRpdmVyc2lmaWVyKTsKKyAgICAgICAgICAgIGRlYWxsb2Nh
dGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIH0KKworICAgICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgcHJlcGFyZUZvckVtaXR0aW5nSW5zdHJ1Y3Rpb25zKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgY29uc3RleHByIChzaG91bGRTaWduID09IFNob3VsZFNpZ246Olllcykgewor
ICAgICAgICAgICAgICAgIG1faW5pdGlhbGl6ZWRQaW4gPSB0cnVlOworICAgICAgICAgICAgICAg
IGdfanNjQ29uZmlnLmFybTY0ZUhhc2hQaW5zLmFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCgp
OworICAgICAgICAgICAgICAgIHNldFVwZGF0ZWRIYXNoKDAsIDApOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgbV9oYXNoID0gMDsKICAgICAgICAgfQogCi0gICAgICAgIEFM
V0FZU19JTkxJTkUgdWludDMyX3QgdXBkYXRlKHVpbnQzMl90IGluc3RydWN0aW9uLCB1aW50MzJf
dCBpbmRleCwgdm9pZCogZGl2ZXJzaWZpZXIpCisgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVBpbkZv
ckN1cnJlbnRUaHJlYWQoKQogICAgICAgICB7Ci0gICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50
SGFzaCA9IHRoaXMtPmN1cnJlbnRIYXNoKGluZGV4LCBkaXZlcnNpZmllcik7CisgICAgICAgICAg
ICBpZiAobV9pbml0aWFsaXplZFBpbikgeworICAgICAgICAgICAgICAgIGdfanNjQ29uZmlnLmFy
bTY0ZUhhc2hQaW5zLmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgICAg
ICAgICAgbV9pbml0aWFsaXplZFBpbiA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgQUxXQVlTX0lOTElORSB1aW50MzJfdCB1cGRhdGUodWludDMyX3QgaW5zdHJ1
Y3Rpb24sIHVpbnQzMl90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBj
dXJyZW50SGFzaCA9IHRoaXMtPmN1cnJlbnRIYXNoKGluZGV4KTsKICAgICAgICAgICAgIHVpbnQ2
NF90IG5leHRJbmRleCA9IGluZGV4ICsgMTsKICAgICAgICAgICAgIHVpbnQzMl90IG91dHB1dCA9
IG5leHRWYWx1ZShpbnN0cnVjdGlvbiwgbmV4dEluZGV4LCBjdXJyZW50SGFzaCk7Ci0gICAgICAg
ICAgICBzZXRVcGRhdGVkSGFzaChvdXRwdXQsIG5leHRJbmRleCwgZGl2ZXJzaWZpZXIpOworICAg
ICAgICAgICAgc2V0VXBkYXRlZEhhc2gob3V0cHV0LCBuZXh0SW5kZXgpOwogICAgICAgICAgICAg
cmV0dXJuIG91dHB1dDsKICAgICAgICAgfQogCkBAIC0yMzUsMjkgKzI2NSwyOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAoYSA+PiAzOSkgXiAoYiA+PiAyMyk7CiAgICAg
ICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSB1aW50MzJfdCBiaXRzRm9yRGl2
ZXJzaWZpZXIodm9pZCogZGl2ZXJzaWZpZXIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IHVpbnQzMl90IHBpbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihkaXZlcnNpZmllcik7CisgICAgICAgICAgICByZXR1cm4gZ19qc2NDb25m
aWcuYXJtNjRlSGFzaFBpbnMucGluRm9yQ3VycmVudFRocmVhZCgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgQUxXQVlTX0lOTElORSB1aW50MzJfdCBjdXJyZW50SGFzaCh1aW50MzJfdCBpbmRleCwg
dm9pZCogZGl2ZXJzaWZpZXIpCisgICAgICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgY3VycmVu
dEhhc2godWludDMyX3QgaW5kZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaGFzaEZp
ZWxkSXNUYWdnZWQgPSBpbmRleCA9PSAwOwotICAgICAgICAgICAgaWYgKGhhc2hGaWVsZElzVGFn
Z2VkKQotICAgICAgICAgICAgICAgIHJldHVybiB1bnRhZ0ludChtX2hhc2gsIG1ha2VEaXZlcnNp
Zmllcihpbml0aWFsaXphdGlvbk5hbWVzcGFjZSwgaW5kZXgsIGJpdHNGb3JEaXZlcnNpZmllcihk
aXZlcnNpZmllcikpKTsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2hvdWxkU2lnbiA9PSBT
aG91bGRTaWduOjpZZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHVudGFnSW50KG1faGFzaCwg
bWFrZURpdmVyc2lmaWVyKGluaXRpYWxpemF0aW9uTmFtZXNwYWNlLCBpbmRleCwgcGluKCkpKTsK
ICAgICAgICAgICAgIHJldHVybiBtX2hhc2g7CiAgICAgICAgIH0KIAotICAgICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0VXBkYXRlZEhhc2godWludDMyX3QgdmFsdWUsIHVpbnQzMl90IGluZGV4
LCB2b2lkKiBkaXZlcnNpZmllcikKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFVwZGF0
ZWRIYXNoKHVpbnQzMl90IHZhbHVlLCB1aW50MzJfdCBpbmRleCkKICAgICAgICAgewotICAgICAg
ICAgICAgYm9vbCBzaG91bGRUYWdIYXNoRmllbGQgPSBpbmRleCA9PSAwOwotICAgICAgICAgICAg
aWYgKHNob3VsZFRhZ0hhc2hGaWVsZCkKLSAgICAgICAgICAgICAgICBtX2hhc2ggPSB0YWdJbnQo
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSwgbWFrZURpdmVyc2lmaWVyKGluaXRpYWxpemF0
aW9uTmFtZXNwYWNlLCBpbmRleCwgYml0c0ZvckRpdmVyc2lmaWVyKGRpdmVyc2lmaWVyKSkpOwor
ICAgICAgICAgICAgaWYgY29uc3RleHByIChzaG91bGRTaWduID09IFNob3VsZFNpZ246OlllcykK
KyAgICAgICAgICAgICAgICBtX2hhc2ggPSB0YWdJbnQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZh
bHVlKSwgbWFrZURpdmVyc2lmaWVyKGluaXRpYWxpemF0aW9uTmFtZXNwYWNlLCBpbmRleCwgcGlu
KCkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2hhc2ggPSB2YWx1ZTsK
KyAgICAgICAgICAgICAgICBtX2hhc2ggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpOwog
ICAgICAgICB9CiAKICAgICAgICAgdWludDY0X3QgbV9oYXNoOworICAgICAgICBib29sIG1faW5p
dGlhbGl6ZWRQaW4geyBmYWxzZSB9OwogICAgIH07CiAjZW5kaWYgLy8gQ1BVKEFSTTY0RSkKIApA
QCAtMjY3LDcgKzI5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgOiBtX3N0b3Jh
Z2UoKQogICAgICAgICAgICAgLCBtX2luZGV4KDApCiAjaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAg
ICAgICwgbV9oYXNoKHRoaXMpCisgICAgICAgICAgICAsIG1faGFzaCgpCiAgICAgICAgICAgICAs
IG1faGFzaGVzKCkKICNlbmRpZgogICAgICAgICB7CkBAIC00MDksNiArNDM4LDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdl
LmJ1ZmZlcigpOyB9CiAjZW5kaWYKIAorI2lmIENQVShBUk02NEUpCisgICAgICAgIEFSTTY0RUhh
c2g8U2hvdWxkU2lnbjo6WWVzPiYgYXJtNjRlSGFzaCgpIHsgcmV0dXJuIG1faGFzaDsgfQorI2Vu
ZGlmCisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludGVncmFs
VHlwZT4KICAgICAgICAgdm9pZCBwdXRJbnRlZ3JhbChJbnRlZ3JhbFR5cGUgdmFsdWUpCkBAIC00
MjUsNyArNDU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgQ1BVKEFSTTY0KQogICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YodmFsdWUpID09IDQsICIiKTsKICNpZiBDUFUoQVJNNjRF
KQotICAgICAgICAgICAgdWludDMyX3QgaGFzaCA9IG1faGFzaC51cGRhdGUodmFsdWUsIG1faW5k
ZXggLyBzaXplb2YoSW50ZWdyYWxUeXBlKSwgdGhpcyk7CisgICAgICAgICAgICB1aW50MzJfdCBo
YXNoID0gbV9oYXNoLnVwZGF0ZSh2YWx1ZSwgbV9pbmRleCAvIHNpemVvZihJbnRlZ3JhbFR5cGUp
KTsKICAgICAgICAgICAgIFdURjo6dW5hbGlnbmVkU3RvcmU8dWludDMyX3Q+KG1faGFzaGVzLmJ1
ZmZlcigpICsgbV9pbmRleCwgaGFzaCk7CiAjZW5kaWYKICNlbmRpZgpAQCAtNDU5LDcgKzQ5Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBc3NlbWJsZXJEYXRhIG1fc3RvcmFnZTsKICAg
ICAgICAgdW5zaWduZWQgbV9pbmRleDsKICNpZiBDUFUoQVJNNjRFKQotICAgICAgICBBUk02NEVI
YXNoIG1faGFzaDsKKyAgICAgICAgQVJNNjRFSGFzaDxTaG91bGRTaWduOjpZZXM+IG1faGFzaDsK
ICAgICAgICAgQXNzZW1ibGVyRGF0YSBtX2hhc2hlczsKICNlbmRpZgogICAgIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlz
aW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw4ICsyMjEsNyBAQCB2b2lkIExpbmtCdWZmZXI6
OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAgbV9hc3NlbWJsZXJTdG9yYWdlID0gbWFjcm9B
c3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkucmVsZWFzZUFzc2VtYmxlckRhdGEoKTsKICAg
ICB1aW50OF90KiBpbkRhdGEgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KG1fYXNzZW1ibGVyU3Rv
cmFnZS5idWZmZXIoKSk7CiAjaWYgQ1BVKEFSTTY0RSkKLSAgICB2b2lkKiBidWZmZXJQdHIgPSAm
bWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCk7Ci0gICAgQVJNNjRFSGFzaCB2ZXJp
ZnlVbmNvbXBhY3RlZEhhc2ggeyBidWZmZXJQdHIgfTsKKyAgICBBUk02NEVIYXNoPFNob3VsZFNp
Z246Ok5vPiB2ZXJpZnlVbmNvbXBhY3RlZEhhc2g7CiAgICAgbV9hc3NlbWJsZXJIYXNoZXNTdG9y
YWdlID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkucmVsZWFzZUFzc2VtYmxl
ckhhc2hlcygpOwogICAgIHVpbnQzMl90KiBpbkhhc2hlcyA9IGJpdHdpc2VfY2FzdDx1aW50MzJf
dCo+KG1fYXNzZW1ibGVySGFzaGVzU3RvcmFnZS5idWZmZXIoKSk7CiAjZW5kaWYKQEAgLTI0NSw3
ICsyNDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAgICAg
ICAgIEluc3RydWN0aW9uVHlwZSB2YWx1ZSA9ICpwdHI7CiAjaWYgQ1BVKEFSTTY0RSkKICAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSAoYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihwdHIpIC0gaW5EYXRh
KSAvIDQ7Ci0gICAgICAgIHVpbnQzMl90IGhhc2ggPSB2ZXJpZnlVbmNvbXBhY3RlZEhhc2gudXBk
YXRlKHZhbHVlLCBpbmRleCwgYnVmZmVyUHRyKTsKKyAgICAgICAgdWludDMyX3QgaGFzaCA9IHZl
cmlmeVVuY29tcGFjdGVkSGFzaC51cGRhdGUodmFsdWUsIGluZGV4KTsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaW5IYXNoZXNbaW5kZXhdID09IGhhc2gpOwogI2VuZGlmCiAgICAgICAgIHJldHVy
biB2YWx1ZTsKQEAgLTQzOCw2ICs0MzcsMTAgQEAgdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShN
YWNyb0Fzc2VtYmxlcgogICAgICAgICBpbml0aWFsU2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNz
ZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgfQogCisjaWYgQ1BVKEFSTTY0RSkKKyAgICBtYWNyb0Fz
c2VtYmxlci5tX2Fzc2VtYmxlci5idWZmZXIoKS5hcm02NGVIYXNoKCkuZGVhbGxvY2F0ZVBpbkZv
ckN1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgorCiAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIGVmZm9y
dCk7CiAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJN
NjRFSGFzaFBpbnMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCisK
KyNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiRmFzdEpJVFBlcm1p
c3Npb25zLmgiCisjaW5jbHVkZSAiU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisjaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKKworc3RydWN0IFdyaXRl
VG9KSVRSZWdpb25TY29wZSB7CisgICAgQUxXQVlTX0lOTElORSBXcml0ZVRvSklUUmVnaW9uU2Nv
cGUoKQorICAgIHsKKyAgICAgICAgdGhyZWFkU2VsZlJlc3RyaWN0UldYVG9SVygpOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgfldyaXRlVG9KSVRSZWdpb25TY29wZSgpCisgICAgeworICAg
ICAgICB0aHJlYWRTZWxmUmVzdHJpY3RSV1hUb1JYKCk7CisgICAgfQorfTsKKworc3RydWN0IFZh
bGlkYXRlTm9uUmVlbnRyYW5jeVNjb3BlIHsKKyAgICBBTFdBWVNfSU5MSU5FIFZhbGlkYXRlTm9u
UmVlbnRyYW5jeVNjb3BlKFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpNZXRhZGF0YSogbWV0YWRhdGEp
CisgICAgICAgIDogbV9tZXRhZGF0YShtZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90
IHZhbGlkYXRlTm9uUmVlbnRyYW5jeSA9IG1fbWV0YWRhdGEtPmFzc2VydE5vdFJlZW50cmFudC5l
eGNoYW5nZSgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIXZhbGlkYXRlTm9uUmVlbnRyYW5jeSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSB+VmFsaWRhdGVOb25SZWVudHJhbmN5U2NvcGUoKQorICAgIHsKKyAgICAgICAgdWludDMyX3Qg
dmFsaWRhdGVOb25SZWVudHJhbmN5ID0gbV9tZXRhZGF0YS0+YXNzZXJ0Tm90UmVlbnRyYW50LmV4
Y2hhbmdlKDAsIHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVCh2YWxpZGF0ZU5vblJlZW50cmFuY3kgPT0gMSk7CisgICAgfQorICAgIFNlY3VyZUFSTTY0
RUhhc2hQaW5zOjpNZXRhZGF0YSogbV9tZXRhZGF0YTsKK307CisKKy8vIFRoaXMgY2xhc3MgaXMg
YWxsb2NhdGVkIG9uY2UgcGVyIHByb2Nlc3MsIHNvIHN0YXRpYyBsb2NrIGlzIG9rLgorc3RhdGlj
IExvY2sgaGFzaFBpbnNMb2NrOworCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlOjpNZW1vcnlQdHIgYWxsb2NhdGVJbkV4ZWN1dGFibGVNZW1vcnkoc2l6ZV90IHNp
emUpCit7CisgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoc2l6ZSwgSklUQ29tcGlsYXRpb25NdXN0U3Vj
Y2VlZCkubGVha1JlZigpOworICAgIFJFTEVBU0VfQVNTRVJUKGhhbmRsZSk7CisgICAgdm9pZCog
bWVtb3J5ID0gaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyPGNoYXIqPigpOworICAgIFJFTEVB
U0VfQVNTRVJUKGlzSklUUEMobWVtb3J5KSAmJiBpc0pJVFBDKGJpdHdpc2VfY2FzdDxjaGFyKj4o
bWVtb3J5KSArIHNpemUgLSAxKSk7CisgICAgcmV0dXJuIGhhbmRsZS0+c3RhcnQoKTsKK30KKwor
QUxXQVlTX0lOTElORSBTZWN1cmVBUk02NEVIYXNoUGluczo6UGFnZTo6UGFnZSgpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVudHJpZXNQZXJQYWdlOyArK2kpIHsKKyAgICAg
ICAgYXV0byYgZW50cnkgPSB0aGlzLT5lbnRyeShpKTsKKyAgICAgICAgZW50cnkucGluID0gMDsK
KyAgICAgICAgZW50cnkua2V5ID0gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgaW5pdGlhbGl6ZVBhZ2UoY29uc3QgV3JpdGVUb0pJVFJlZ2lvblNjb3BlJiwgU2VjdXJl
QVJNNjRFSGFzaFBpbnM6OlBhZ2UqIHBhZ2UpCit7CisgICAgbmV3IChwYWdlKSBTZWN1cmVBUk02
NEVIYXNoUGluczo6UGFnZTsKK30KKworI2RlZmluZSBWQUxJREFURV9USElTX1ZBTFVFKCkgUkVM
RUFTRV9BU1NFUlQodGhpcyA9PSAmZ19qc2NDb25maWcuYXJtNjRlSGFzaFBpbnMpIAorCitBTFdB
WVNfSU5MSU5FIGF1dG8gU2VjdXJlQVJNNjRFSGFzaFBpbnM6Om1ldGFkYXRhKCkgLT4gTWV0YWRh
dGEqCit7CisgICAgVkFMSURBVEVfVEhJU19WQUxVRSgpOworICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8TWV0YWRhdGEqPihtX21lbW9yeSkgLSAxOworfQorCit2b2lkIFNlY3VyZUFSTTY0RUhhc2hQ
aW5zOjppbml0aWFsaXplQXRTdGFydHVwKCkKK3sKKyAgICBWQUxJREFURV9USElTX1ZBTFVFKCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWVtb3J5KTsKKworICAgIG1fbWVtb3J5ID0gYWxsb2Nh
dGVJbkV4ZWN1dGFibGVNZW1vcnkoc2l6ZW9mKE1ldGFkYXRhKSArIFBhZ2U6OmFsbG9jYXRpb25T
aXplKCkpLnVudGFnZ2VkUHRyPGNoYXIqPigpICsgc2l6ZW9mKE1ldGFkYXRhKTsKKworICAgIHsK
KyAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2NvcGU7CisKKyAgICAgICAgbmV3
IChtZXRhZGF0YSgpKSBNZXRhZGF0YTsgCisgICAgICAgIGluaXRpYWxpemVQYWdlKHdyaXRlU2Nv
cGUsIGZpcnN0UGFnZSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgU2VjdXJlQVJNNjRFSGFzaFBpbnM6
OmFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZEltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImKQor
eworICAgIFZBTElEQVRFX1RISVNfVkFMVUUoKTsKKworICAgIHNpemVfdCBuZXdFbnRyeUluZGV4
OworICAgIFBhZ2UqIG5ld0VudHJ5UGFnZTsKKworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAg
ICBzaXplX3QgYmFzZUluZGV4ID0gMDsKKyAgICBmb3JFYWNoUGFnZShbJl0gKFBhZ2UmIHBhZ2Up
IHsKKyAgICAgICAgc2l6ZV90IGJpdCA9IHBhZ2UuZmluZENsZWFyQml0KCk7CisgICAgICAgIGlm
IChiaXQgPCBudW1FbnRyaWVzUGVyUGFnZSkgeworICAgICAgICAgICAgZm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgbmV3RW50cnlJbmRleCA9IGJhc2VJbmRleCArIGJpdDsKKyAgICAgICAgICAg
IG5ld0VudHJ5UGFnZSA9ICZwYWdlOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1
czo6RG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIGJhc2VJbmRleCArPSBudW1FbnRyaWVzUGVy
UGFnZTsKKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgfSk7
CisKKyAgICBpZiAoIWZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGZp
bmRSZXN1bHQgPSBmaW5kRmlyc3RFbnRyeSgpOworICAgIEVudHJ5KiBwcmVleGlzdGluZ0VudHJ5
ID0gZmluZFJlc3VsdC5lbnRyeTsKKyAgICBzaXplX3QgcHJlZXhpc3RpbmdFbnRyeUluZGV4ID0g
ZmluZFJlc3VsdC5pbmRleDsKKyAgICBQYWdlKiBwcmVleGlzdGluZ0VudHJ5UGFnZSA9IGZpbmRS
ZXN1bHQucGFnZTsKKworICAgIHsKKyAgICAgICAgYXV0byogbWV0YWRhdGEgPSB0aGlzLT5tZXRh
ZGF0YSgpOworCisgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNjb3BlOworICAg
ICAgICBWYWxpZGF0ZU5vblJlZW50cmFuY3lTY29wZSB2YWxpZGF0ZU5vblJlZW50cmFuY3kobWV0
YWRhdGEpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSklUUEMobWV0YWRhdGEpKTsKKyAg
ICAgICAgdWludDY0X3QgbmV4dFBpbiA9IG1ldGFkYXRhLT5uZXh0UGluLmV4Y2hhbmdlQWRkKDEs
IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChuZXh0
UGluKTsKKworICAgICAgICBuZXdFbnRyeVBhZ2UtPnNldElzSW5Vc2UobmV3RW50cnlJbmRleCk7
CisKKyAgICAgICAgaWYgKHByZWV4aXN0aW5nRW50cnkgJiYgcHJlZXhpc3RpbmdFbnRyeUluZGV4
IDwgbmV3RW50cnlJbmRleCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJlZXhpc3Rp
bmdFbnRyeVBhZ2UtPmlzSW5Vc2UocHJlZXhpc3RpbmdFbnRyeUluZGV4KSk7CisKKyAgICAgICAg
ICAgIG5ld0VudHJ5UGFnZS0+ZW50cnkobmV3RW50cnlJbmRleCkgPSAqcHJlZXhpc3RpbmdFbnRy
eTsKKyAgICAgICAgICAgIG5ld0VudHJ5SW5kZXggPSBwcmVleGlzdGluZ0VudHJ5SW5kZXg7Cisg
ICAgICAgICAgICBuZXdFbnRyeVBhZ2UgPSBwcmVleGlzdGluZ0VudHJ5UGFnZTsKKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8mIGVudHJ5ID0gbmV3RW50cnlQYWdlLT5lbnRyeShuZXdFbnRyeUlu
ZGV4KTsKKyAgICAgICAgZW50cnkucGluID0gbmV4dFBpbjsKKyAgICAgICAgZW50cnkua2V5ID0g
a2V5Rm9yQ3VycmVudFRocmVhZCgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjphbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKQor
eworICAgIFZBTElEQVRFX1RISVNfVkFMVUUoKTsKKworICAgIExvY2tlciBsb2NrZXIgeyBoYXNo
UGluc0xvY2sgfTsKKworICAgIGlmIChhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWRJbXBsKGxv
Y2tlcikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEFsbG9jYXRlIGEgbmV3IHBhZ2UKKyAg
ICB7CisgICAgICAgIFBhZ2UqIGxhc3RQYWdlID0gZmlyc3RQYWdlKCk7CisgICAgICAgIHdoaWxl
IChsYXN0UGFnZS0+bmV4dCkKKyAgICAgICAgICAgIGxhc3RQYWdlID0gbGFzdFBhZ2UtPm5leHQ7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsYXN0UGFnZS0+bmV4dCk7CisKKyAgICAgICAgYXV0
byBuZXdQYWdlID0gYWxsb2NhdGVJbkV4ZWN1dGFibGVNZW1vcnkoUGFnZTo6YWxsb2NhdGlvblNp
emUoKSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdy
aXRlU2NvcGU7CisgICAgICAgICAgICBWYWxpZGF0ZU5vblJlZW50cmFuY3lTY29wZSB2YWxpZGF0
ZU5vblJlZW50cmFuY3kobWV0YWRhdGEoKSk7CisgICAgICAgICAgICBpbml0aWFsaXplUGFnZSh3
cml0ZVNjb3BlLCBuZXdQYWdlLnVudGFnZ2VkUHRyPFBhZ2UqPigpKTsKKyAgICAgICAgICAgIC8v
IFRoaXMgY2FuIGJlIHJlYWQgZnJvbSBjb25jdXJyZW50bHkuIE1ha2Ugc3VyZSBpdCdzIGluIGEg
Z29vZCBzdGF0ZSBmb3IgdGhhdCB0byBoYXBwZW4uCisgICAgICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgICAgICAgICAgbGFzdFBhZ2UtPm5leHQgPSBuZXdQYWdlLnVudGFnZ2Vk
UHRyPFBhZ2UqPigpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBzdWNjZXNzID0gYWxs
b2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkSW1wbChsb2NrZXIpOworICAgIFJFTEVBU0VfQVNTRVJU
KHN1Y2Nlc3MpOworfQorCit2b2lkIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpkZWFsbG9jYXRlUGlu
Rm9yQ3VycmVudFRocmVhZCgpCit7CisgICAgVkFMSURBVEVfVEhJU19WQUxVRSgpOworCisgICAg
TG9ja2VyIGxvY2tlciB7IGhhc2hQaW5zTG9jayB9OworCisgICAgYXV0byBjbGVhciA9IFsmXSAo
RW50cnkmIGVudHJ5KSB7CisgICAgICAgIGVudHJ5LnBpbiA9IDA7CisgICAgICAgIGVudHJ5Lmtl
eSA9IDA7CisgICAgfTsKKworICAgIFBhZ2UqIHJlbW92YWxQYWdlOworICAgIHNpemVfdCByZW1v
dmFsSW5kZXg7CisgICAgeworICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBmaW5kRmlyc3RFbnRy
eSgpOworICAgICAgICBFbnRyeSYgZW50cnkgPSAqZmluZFJlc3VsdC5lbnRyeTsKKyAgICAgICAg
cmVtb3ZhbEluZGV4ID0gZmluZFJlc3VsdC5pbmRleDsKKyAgICAgICAgcmVtb3ZhbFBhZ2UgPSBm
aW5kUmVzdWx0LnBhZ2U7CisKKyAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2Nv
cGU7CisgICAgICAgIFZhbGlkYXRlTm9uUmVlbnRyYW5jeVNjb3BlIHZhbGlkYXRlTm9uUmVlbnRy
YW5jeShtZXRhZGF0YSgpKTsKKworICAgICAgICBjbGVhcihlbnRyeSk7CisgICAgICAgIHJlbW92
YWxQYWdlLT5jbGVhcklzSW5Vc2UocmVtb3ZhbEluZGV4KTsKKyAgICB9CisKKyAgICAvLyBUaGlz
IGltcGxlbWVudGF0aW9uIGFsbG93cyByZWN1cnNpdmUgdXNlcyBvZiB0aGUgTWFjcm9Bc3NlbWJs
ZXIsIGZvcm1pbmcgYSBzdGFjaworICAgIC8vIGxpa2UgZGF0YSBzdHJ1Y3R1cmUuIFRoZSBpbiB1
c2UgcGluICh0b3Agb2YgdGhlIHN0YWNrKSB3aWxsIGFsd2F5cyBiZSBhdCB0aGUgbG93ZXN0Cisg
ICAgLy8gcGFnZSBhbmQgbG93ZXN0IGluZGV4IGluIHRoZSBiaXQgdmVjdG9yLiBTbyB3aGVuIHdl
IGRlYWxsb2NhdGUgdGhlIGN1cnJlbnQgdG9wIG9mIHRoZQorICAgIC8vIHN0YWNrLCB3ZSBuZWVk
IHRvIGZpbmQgdGhlIG5leHQgZW50cnkgaW4gdGhlIHN0YWNrLCBhbmQgZW5zdXJlIGl0J3MgYXQg
dGhlIGxvd2VzdCBpbmRleC4KKyAgICAvLyBTbyBpZiB0aGVyZSBhcmUgb3RoZXIgZW50cmllcyBm
b3IgdGhpcyBjdXJyZW50IHRocmVhZCwgd2UgZmluZCB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QK
KyAgICAvLyBwaW4gKG5leHQgdG9wIG9mIHN0YWNrIHZhbHVlKSwgYW5kIHJlcGxhY2UgaXQgYXQg
dGhlIGluZGV4IHdlIHdlcmUgdXNpbmcgYmVmb3JlLgorICAgIC8vIEFsbG9jYXRpb24gYWxzbyBt
YWludGFpbnMgdGhpcyBpbnZhcmlhbnQgYnkgYWx3YXlzIHBsYWNpbmcgdGhlIG5ld2VzdCBlbnRy
eSBmb3IKKyAgICAvLyB0aGUgY3VycmVudCB0aHJlYWQgYXQgdGhlIGxvd2VzdCBpbmRleC4KKyAg
ICB7CisgICAgICAgIHVpbnQ2NF90IGtleSA9IGtleUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICB1aW50NjRfdCBtYXhQaW4gPSAwOworICAg
ICAgICBzaXplX3QgbWF4SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
OworICAgICAgICBQYWdlKiBtYXhQYWdlID0gbnVsbHB0cjsKKworICAgICAgICBmb3JFYWNoRW50
cnkoWyZdIChQYWdlJiBwYWdlLCBFbnRyeSYgZW50cnksIHNpemVfdCBpbmRleCkgeworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkucGluKTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5r
ZXkgPT0ga2V5ICYmIGVudHJ5LnBpbiA+IG1heFBpbikgeworICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtYXhQaW4gPSBlbnRyeS5waW47CisgICAgICAgICAg
ICAgICAgbWF4SW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBtYXhQYWdlID0gJnBhZ2U7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNv
bnRpbnVlOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlbW92YWxJbmRleCA8IG1heEluZGV4KTsKKworICAgICAgICAgICAg
V3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2NvcGU7CisgICAgICAgICAgICBWYWxpZGF0ZU5v
blJlZW50cmFuY3lTY29wZSB2YWxpZGF0ZU5vblJlZW50cmFuY3kobWV0YWRhdGEoKSk7CisKKyAg
ICAgICAgICAgIHJlbW92YWxQYWdlLT5lbnRyeShyZW1vdmFsSW5kZXgpID0gbWF4UGFnZS0+ZW50
cnkobWF4SW5kZXgpOworICAgICAgICAgICAgY2xlYXIobWF4UGFnZS0+ZW50cnkobWF4SW5kZXgp
KTsKKyAgICAgICAgICAgIG1heFBhZ2UtPmNsZWFySXNJblVzZShtYXhJbmRleCk7CisgICAgICAg
ICAgICByZW1vdmFsUGFnZS0+c2V0SXNJblVzZShyZW1vdmFsSW5kZXgpOworICAgICAgICB9Cisg
ICAgfQorfQorCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKKworfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3Vy
ZUFSTTY0RUhhc2hQaW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJ
VCkKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFNlY3VyZUFSTTY0RUhhc2hQaW5zIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGluaXRpYWxpemVBdFN0YXJ0dXAoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFs
bG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZGVhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICB1aW50NjRfdCBwaW5Gb3JDdXJy
ZW50VGhyZWFkKCk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1FbnRyaWVzUGVy
UGFnZSA9IDY0OworCisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgdWludDY0X3QgcGluOwor
ICAgICAgICB1aW50NjRfdCBrZXk7CisgICAgfTsKKworICAgIHN0cnVjdCBhbGlnbmFzKGFsaWdu
b2YoRW50cnkpKSBQYWdlIHsKKyAgICAgICAgUGFnZSgpOworCisgICAgICAgIHN0YXRpYyBzaXpl
X3QgYWxsb2NhdGlvblNpemUoKSB7IHJldHVybiBzaXplb2YoUGFnZSkgKyBudW1FbnRyaWVzUGVy
UGFnZSAqIHNpemVvZihFbnRyeSk7IH0KKworICAgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBtYXNrID0gbnVtRW50cmllc1BlclBhZ2UgLSAxOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGhh
c09uZUJpdFNldChudW1FbnRyaWVzUGVyUGFnZSkpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEh
bWFzayk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShtYXNrICYgbnVtRW50cmllc1BlclBhZ2Up
KTsKKworICAgICAgICBBTFdBWVNfSU5MSU5FIEVudHJ5JiBlbnRyeShzaXplX3QgaW5kZXgpCisg
ICAgICAgIHsgCisgICAgICAgICAgICByZXR1cm4gZW50cmllcygpW2luZGV4ICYgbWFza107Cisg
ICAgICAgIH0KKworICAgICAgICBBTFdBWVNfSU5MSU5FIEVudHJ5JiBmYXN0RW50cnlVbmNoZWNr
ZWQoc2l6ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoKGluZGV4ICYg
bWFzaykgPT0gaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIGVudHJpZXMoKVtpbmRleF07Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJc0luVXNl
KHNpemVfdCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaXNJblVzZU1hcC5zZXQoaW5k
ZXggJiBtYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVh
cklzSW5Vc2Uoc2l6ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBpc0luVXNlTWFw
LnNldChpbmRleCAmIG1hc2ssIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0luVXNlKHNpemVfdCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlzSW5Vc2VNYXAuZ2V0KGluZGV4ICYgbWFzayk7CisgICAgICAgIH0KKworICAgICAg
ICBBTFdBWVNfSU5MSU5FIHNpemVfdCBmaW5kQ2xlYXJCaXQoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaXNJblVzZU1hcC5maW5kQml0KDAsIGZhbHNlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGZvckVhY2hTZXRCaXQoRnVuY3Rpb24gZnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlzSW5Vc2VNYXAuZm9yRWFjaFNldEJpdChmdW5jdGlvbik7CisgICAgICAgIH0KKwor
ICAgICAgICBQYWdlKiBuZXh0IHsgbnVsbHB0ciB9OworICAgIHByaXZhdGU6CisgICAgICAgIEVu
dHJ5KiBlbnRyaWVzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PEVudHJ5Kj4odGhpcyArIDEpOyB9
CisgICAgICAgIEJpdG1hcDxudW1FbnRyaWVzUGVyUGFnZT4gaXNJblVzZU1hcDsKKyAgICB9Owor
CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoUGFnZSkgJSBhbGlnbm9mKEVudHJ5KSA9PSAwKTsK
KworICAgIHN0cnVjdCBhbGlnbmFzKGFsaWdub2YoUGFnZSkpIE1ldGFkYXRhIHsKKyAgICAgICAg
QXRvbWljPHVpbnQ2NF90PiBuZXh0UGluIHsgMSB9OworICAgICAgICBBdG9taWM8dWludDMyX3Q+
IGFzc2VydE5vdFJlZW50cmFudCB7IDAgfTsKKyAgICB9OworCisgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoTWV0YWRhdGEpICUgYWxpZ25vZihQYWdlKSA9PSAwKTsKKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgdWludDY0X3Qga2V5Rm9yQ3VycmVudFRocmVhZCgpOworICAgIGJvb2wgYWxsb2NhdGVQ
aW5Gb3JDdXJyZW50VGhyZWFkSW1wbChjb25zdCBBYnN0cmFjdExvY2tlciYpOworCisgICAgc3Ry
dWN0IEZpbmRSZXN1bHQgeworICAgICAgICBFbnRyeSogZW50cnkgeyBudWxscHRyIH07CisgICAg
ICAgIHNpemVfdCBpbmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsK
KyAgICAgICAgUGFnZSogcGFnZSB7IG51bGxwdHIgfTsKKyAgICB9OworICAgIEZpbmRSZXN1bHQg
ZmluZEZpcnN0RW50cnkoKTsKKworICAgIE1ldGFkYXRhKiBtZXRhZGF0YSgpOworICAgIGlubGlu
ZSBQYWdlKiBmaXJzdFBhZ2UoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UGFnZSo+KG1fbWVtb3J5
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgZm9yRWFj
aFBhZ2UoRnVuY3Rpb24pOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAg
IHZvaWQgZm9yRWFjaEVudHJ5KEZ1bmN0aW9uKTsKKworICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVs
bHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDUFUoQVJNNjRF
KSAmJiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9T
ZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFz
aFBpbnNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCisKKyNpZiBDUFUoQVJNNjRFKSAmJiBFTkFC
TEUoSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworQUxXQVlTX0lOTElORSB1aW50NjRfdCBTZWN1
cmVBUk02NEVIYXNoUGluczo6a2V5Rm9yQ3VycmVudFRocmVhZCgpCit7CisgICAgdWludDY0X3Qg
cmVzdWx0OworICAgIGFzbSAoCisgICAgICAgICJtcnMgJXhbcmVzdWx0XSwgVFBJRFJST19FTDAi
CisgICAgICAgIDogW3Jlc3VsdF0gIj1yIiAocmVzdWx0KQorICAgICAgICA6CisgICAgICAgIDoK
KyAgICApOworICAgIHJldHVybiByZXN1bHQgKyAxOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rpb24+CitBTFdBWVNfSU5MSU5FIHZvaWQgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmZvckVh
Y2hQYWdlKEZ1bmN0aW9uIGZ1bmN0aW9uKQoreworICAgIGZvciAoUGFnZSogcGFnZSA9IGZpcnN0
UGFnZSgpOyBwYWdlOyBwYWdlID0gcGFnZS0+bmV4dCkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VChpc0pJVFBDKHBhZ2UpKTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uKCpwYWdlKSA9PSBJdGVyYXRp
b25TdGF0dXM6OkRvbmUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CitBTFdBWVNfSU5MSU5FIHZvaWQgU2VjdXJlQVJNNjRFSGFz
aFBpbnM6OmZvckVhY2hFbnRyeShGdW5jdGlvbiBmdW5jdGlvbikKK3sKKyAgICBzaXplX3QgYmFz
ZUluZGV4ID0gMDsKKyAgICBmb3JFYWNoUGFnZShbJl0gKFBhZ2UmIHBhZ2UpIHsKKyAgICAgICAg
SXRlcmF0aW9uU3RhdHVzIGl0ZXJhdGlvblN0YXR1cyA9IEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CisgICAgICAgIHBhZ2UuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCBiaXRJbmRleCkgewor
ICAgICAgICAgICAgRW50cnkmIGVudHJ5ID0gcGFnZS5mYXN0RW50cnlVbmNoZWNrZWQoYml0SW5k
ZXgpOworICAgICAgICAgICAgQVNTRVJUKGlzSklUUEMoJmVudHJ5KSk7CisgICAgICAgICAgICBz
aXplX3QgaW5kZXggPSBiYXNlSW5kZXggKyBiaXRJbmRleDsKKyAgICAgICAgICAgIGl0ZXJhdGlv
blN0YXR1cyA9IGZ1bmN0aW9uKHBhZ2UsIGVudHJ5LCBpbmRleCk7CisgICAgICAgICAgICByZXR1
cm4gaXRlcmF0aW9uU3RhdHVzOworICAgICAgICB9KTsKKyAgICAgICAgYmFzZUluZGV4ICs9IG51
bUVudHJpZXNQZXJQYWdlOworICAgICAgICByZXR1cm4gaXRlcmF0aW9uU3RhdHVzOworICAgIH0p
OworfQorCitBTFdBWVNfSU5MSU5FIGF1dG8gU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmZpbmRGaXJz
dEVudHJ5KCkgLT4gRmluZFJlc3VsdAoreworICAgIHVpbnQ2NF90IGtleSA9IGtleUZvckN1cnJl
bnRUaHJlYWQoKTsKKyAgICAvLyBXZSBjYW4gY2FsbCB0aGlzIGNvbmN1cnJlbnRseSB0byB0aGUg
Yml0IHZlY3RvciBiZWluZyBtb2RpZmllZAorICAgIC8vIHNpbmNlIHdlIGVpdGhlciBjYWxsIHRo
aXMgd2hlbiB3ZSdyZSBsb2NrZWQsIG9yIHdlIGNhbGwgaXQgd2hlbgorICAgIC8vIHdlIGtub3cg
dGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzLiBXaGVuIHRoZSBlbnRyeSBhbHJlYWR5IGV4aXN0cywK
KyAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGJpdCBjYW4ndCBnZXQgZmxpcHBlZCBzcHVyaW91c2x5
IGR1cmluZyBjb25jdXJyZW50CisgICAgLy8gbW9kaWZpY2F0aW9uLCBzbyB3ZSdyZSBndWFyYW50
ZWVkIHRvIGZpbmQgdGhlIHZhbHVlLiBXZSBtaWdodCBzZWUKKyAgICAvLyBhbiBlbnRyeSBhcyBp
dCdzIGJlaW5nIHdyaXR0ZW4gdG8sIGJ1dCB0aGF0J3MgYWxzbyBmaW5lLCBzaW5jZSBpdAorICAg
IC8vIHdvbid0IGhhdmUgb3VyIHNhbWUga2V5LiBJdCdsbCBlaXRoZXIgYmUgemVybywgb3IgYSBk
aWZmZXJlbnQga2V5LgorCisgICAgRmluZFJlc3VsdCByZXN1bHQ7CisgICAgZm9yRWFjaEVudHJ5
KFsmXSAoUGFnZSYgcGFnZSwgRW50cnkmIGVudHJ5LCBzaXplX3QgaW5kZXgpIHsKKyAgICAgICAg
aWYgKGVudHJ5LmtleSA9PSBrZXkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5lbnRyeSA9ICZlbnRy
eTsKKyAgICAgICAgICAgIHJlc3VsdC5wYWdlID0gJnBhZ2U7CisgICAgICAgICAgICByZXN1bHQu
aW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Cisg
ICAgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBTFdBWVNfSU5MSU5FIHVpbnQ2NF90
IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpwaW5Gb3JDdXJyZW50VGhyZWFkKCkKK3sKKyAgICByZXR1
cm4gZmluZEZpcnN0RW50cnkoKS5lbnRyeS0+cGluOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIENQVShBUk02NEUpICYmIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDEzICsyNCwxMyBAQAogI2luY2x1ZGUgIkNlbGxBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGVz
dHJ1Y3Rpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKLSNpbmNsdWRlICJJdGVyYXRp
b25TdGF0dXMuaCIKICNpbmNsdWRlICJXZWFrU2V0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
I2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9Db3VudGluZ0xvY2suaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvUGFnZUJsb2Nr
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEz
ICsyMiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeS5oIgot
I2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAj
aW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIKICNpbmNsdWRlICJQcmVjaXNlQWxsb2NhdGlvbi5o
IgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAK
ICNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMu
aCIKLSNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTEgKzM0LDE3IEBAIEJhc2VsaW5lSklUUGxhbjo6QmFzZWxpbmVKSVRQbGFuKENvZGVC
bG8KICAgICA6IEpJVFBsYW4oSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSwgY29kZUJsb2Nr
KQogICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiB7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICBtX2ppdC5tX2Fzc2VtYmxlci5i
dWZmZXIoKS5hcm02NGVIYXNoKCkuZGVhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyNl
bmRpZgogICAgIG1faml0LmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwog
fQogCiBhdXRvIEJhc2VsaW5lSklUUGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCgpIC0+IENvbXBp
bGF0aW9uUGF0aAogeworI2lmIENQVShBUk02NEUpCisgICAgbV9qaXQubV9hc3NlbWJsZXIuYnVm
ZmVyKCkuYXJtNjRlSGFzaCgpLnByZXBhcmVGb3JFbWl0dGluZ0luc3RydWN0aW9ucygpOworI2Vu
ZGlmCiAgICAgbV9qaXQuY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxh
dGlvbkNhbkZhaWwpOwogICAgIHJldHVybiBCYXNlbGluZVBhdGg7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlz
aW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBAQAogI2lmIEVOQUJMRShK
SVQpCiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCIKLSNpbmNsdWRlICJJ
dGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0aW9uU3RhdHVz
Lmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Qcm9j
ZXNzSUQuaD4KICNpbmNsdWRlIDx3dGYvUmVkQmxhY2tUcmVlLmg+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDYg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUluZm8uaCIKLSNpbmNsdWRl
ICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJMZXhlci5oIgogI2luY2x1ZGUgIk1vZHVs
ZVNjb3BlRGF0YS5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCkBAIC0zOCw2ICszNyw3IEBACiAjaW5j
bHVkZSAiVmFyaWFibGVFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgPHd0Zi9GaXhlZFZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0l0ZXJhdGlvblN0YXR1
cy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw2ICs3MSwxMCBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgICAgICAgICAgaWYgKCFnX2pz
Y0NvbmZpZy52bS5jYW5Vc2VKSVQpIHsKICAgICAgICAgICAgICAgICBPcHRpb25zOjp1c2VKSVQo
KSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9w
dGlvbnMoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisjaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxF
KEpJVCkKKyAgICAgICAgICAgICAgICBnX2pzY0NvbmZpZy5hcm02NGVIYXNoUGlucy5pbml0aWFs
aXplQXRTdGFydHVwKCk7CisjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBPcHRpb25zOjpmaW5hbGl6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSXRlcmF0aW9uU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSXRlcmF0aW9uU3RhdHVzLmgJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdGlvblN0YXR1cy5oCShub25leGlzdGVudCkKQEAg
LTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi1uYW1lc3BhY2UgSlNDIHsKLQotZW51bSBjbGFzcyBJdGVyYXRp
b25TdGF0dXMgewotICAgIENvbnRpbnVlLAotICAgIERvbmUKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDQ29uZmlnLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDQ29uZmlnLmgJKHJl
dmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZp
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiR2F0ZS5oIgog
I2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIk9wdGlvbnNMaXN0LmgiCisjaW5jbHVkZSAi
U2VjdXJlQVJNNjRFSGFzaFBpbnMuaCIKICNpbmNsdWRlIDx3dGYvV1RGQ29uZmlnLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtOTksNiArMTAwLDEwIEBAIHN0cnVjdCBDb25maWcgewogI2lmIENQ
VShBUk02NEUpICYmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQogICAgIFdURjo6UHRyVGFnTG9v
a3VwIHB0clRhZ0xvb2t1cFJlY29yZDsKICNlbmRpZgorCisjaWYgQ1BVKEFSTTY0RSkgJiYgRU5B
QkxFKEpJVCkKKyAgICBTZWN1cmVBUk02NEVIYXNoUGlucyBhcm02NGVIYXNoUGluczsKKyNlbmRp
ZgogfTsKIAogI2lmIEVOQUJMRShVTklGSUVEX0FORF9GUkVFWkFCTEVfQ09ORklHX1JFQ09SRCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxMiw3ICszOTEyLDYg
QEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3RpbwogewogICAgIGF1dG8g
cmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwogCi0gICAgY29tcGlsYXRp
b25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJz
PigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IG1ha2VVbmlx
dWU8Q0NhbGxIZWxwZXJzPigpOwogCiAgICAgY29tcGlsYXRpb25Db250ZXh0LnByb2NlZHVyZSA9
IG1ha2VVbmlxdWU8QjM6OlByb2NlZHVyZT4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4ODAwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzE0Miw3ICszMTQyLDYgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3RpbwogewogICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1
bmN0aW9uPigpOwogCi0gICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJ
VCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53
YXNtRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBp
bGF0aW9uQ29udGV4dC5wcm9jZWR1cmUgPSBtYWtlVW5pcXVlPFByb2NlZHVyZT4oKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24g
Mjg4MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTUsNiArMTk1LDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVu
Y3Rpb24odWludDMyX3QgZgogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1
bmN0aW9uSW5kZXhdOwogICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogCisgICAgICAgIG1fY29tcGls
YXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XS5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBtYWtl
VW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICAgICAgYXV0byBlbWJlZGRlclRvV2FzbUludGVy
bmFsRnVuY3Rpb24gPSBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoKm1fY29tcGlsYXRpb25Db250ZXh0
c1tmdW5jdGlvbkluZGV4XS5lbWJlZGRlckVudHJ5cG9pbnRKSVQsIHNpZ25hdHVyZSwgJm1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24u
Z2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCk7CiAgICAgICAgIGF1dG8gbGlua0J1ZmZlciA9
IG1ha2VVbmlxdWU8TGlua0J1ZmZlcj4oKm1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbklu
ZGV4XS5lbWJlZGRlckVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIExpbmtCdWZmZXI6OlByb2ZpbGU6
Oldhc20sIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODgwMDUp
CisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDIyLTAxLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBBUk02NEVIYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAg
ICAgICAqIHd0Zi9CaXRtYXAuaDoKKyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojpmb3JFYWNoU2V0
Qml0IGNvbnN0KToKKwogMjAyMi0wMS0xMyAgRWxsaW90dCBXaWxsaWFtcyAgPGVtd0BhcHBsZS5j
b20+CiAKICAgICAgICAgW1hDQnVpbGRdIEFkZCAicHJvZHVjdCBkZXBlbmRlbmNpZXMiIHdoaWNo
IGluZmx1ZW5jZSB3b3Jrc3BhY2UgYnVpbGQgb3JkZXIKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMzLDYgKzQz
Myw3IEBACiAJCTUxRjE3NTJBMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RW5jb2Rlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJzaXN0ZW50RW5jb2Rlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjFDQzZCMzI0QTI3N0MyMDA0Mzc3RDYgLyog
VHJhbnNsYXRlZFByb2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRlZFByb2Nl
c3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjZBRUM5MTFGNkI0RTVDMDA2
OTVGNUQgLyogTm9UYWlsQ2FsbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Tm9UYWlsQ2FsbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTI5NUIwMDQyNzky
MEM1NDAwNkQ3NDZBIC8qIEl0ZXJhdGlvblN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRp
b25TdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMjI4QzEyNDU4REM4
MjAwNzUzRDkxIC8qIElDVUhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNVSGVscGVycy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzBBNjM0ODFGQTNFM0EwMDAyNkE1NDUgLyog
U2NyaXB0cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IGZvbGRlcjsgcGF0aCA9IFNjcmlwdHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
MTFCRDUxMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ25hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTE0NSw2ICsxMTQ2LDcgQEAKIAkJCQlFMzM2Njc0OTI3MjI1NTA5MDAyNTkxMjIgLyog
SW50MTI4LmNwcCAqLywKIAkJCQlGNkQ2N0QzMjI2RjkwMTQyMDA2RTAzNDkgLyogSW50MTI4Lmgg
Ki8sCiAJCQkJMzNGRDQ4MTEyNjVDQjM4MDAwQUJFNEY0IC8qIEludGVyZmVyZW5jZUdyYXBoLmgg
Ki8sCisJCQkJNTI5NUIwMDQyNzkyMEM1NDAwNkQ3NDZBIC8qIEl0ZXJhdGlvblN0YXR1cy5oICov
LAogCQkJCTBGN0VCODVCMUZBOEZGNDEwMEYxQUJDQiAvKiBJc29NYWxsb2MuaCAqLywKIAkJCQkw
RjdFQjg1QzFGQThGRjQyMDBGMUFCQ0IgLyogSXNvTWFsbG9jSW5saW5lcy5oICovLAogCQkJCTdD
REQ3RkY3MTg2RDI5MUUwMDc0MzNDRCAvKiBJdGVyYXRvckFkYXB0b3JzLmggKi8sCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRt
YXAuaAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3
dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8
d3RmL0l0ZXJhdGlvblN0YXR1cy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZEludEV4dHJhcy5oPgpA
QCAtNzIsNiArNzMsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBzdWJzdW1lcyhjb25zdCBC
aXRtYXAmKSBjb25zdDsKICAgICAKKyAgICAvLyBJZiB0aGUgbGFtYmRhIHJldHVybnMgYW4gSXRl
cmF0aW9uU3RhdHVzLCB3ZSB1c2UgaXQuIFRoZSBsYW1iZGEgY2FuIGFsc28gcmV0dXJuCisgICAg
Ly8gdm9pZCwgaW4gd2hpY2ggY2FzZSwgd2UnbGwgaXRlcmF0ZSBldmVyeSBzZXQgYml0LgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2V0Qml0KGNvbnN0IEZ1
bmMmKSBjb25zdDsKICAgICAKQEAgLTE2NSwxMyArMTY4LDEzIEBAIGlubGluZSBib29sIEJpdG1h
cDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUs
IHR5cGVuYW1lIFdvcmRUeXBlPgotaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRU
eXBlPjo6c2V0KHNpemVfdCBuKQorQUxXQVlTX0lOTElORSB2b2lkIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT46OnNldChzaXplX3QgbikKIHsKICAgICBiaXRzW24gLyB3b3JkU2l6ZV0gfD0g
KG9uZSA8PCAobiAlIHdvcmRTaXplKSk7CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3JkVHlwZT4KLWlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3Jk
VHlwZT46OnNldChzaXplX3QgbiwgYm9vbCB2YWx1ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBCaXRt
YXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpzZXQoc2l6ZV90IG4sIGJvb2wgdmFsdWUpCiB7CiAg
ICAgaWYgKHZhbHVlKQogICAgICAgICBzZXQobik7CkBAIC0zODksOCArMzkyLDEzIEBAIGlubGlu
ZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBzaXplX3QgYmFzZSA9IGkgKiB3b3JkU2l6ZTsKICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCB3b3JkU2l6ZTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAod29yZCAmIDEp
Ci0gICAgICAgICAgICAgICAgZnVuYyhiYXNlICsgaik7CisgICAgICAgICAgICBpZiAod29yZCAm
IDEpIHsKKyAgICAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PEl0ZXJh
dGlvblN0YXR1cywgZGVjbHR5cGUoZnVuYyhiYXNlICsgaikpPikgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoZnVuYyhiYXNlICsgaikgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgICAgICBmdW5jKGJhc2UgKyBqKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHdvcmQgPj49IDE7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAg
SW50ZXJmZXJlbmNlR3JhcGguaAogICAgIElzb01hbGxvYy5oCiAgICAgSXNvTWFsbG9jSW5saW5l
cy5oCisgICAgSXRlcmF0aW9uU3RhdHVzLmgKICAgICBJdGVyYXRvckFkYXB0b3JzLmgKICAgICBJ
dGVyYXRvclJhbmdlLmgKICAgICBKU09OVmFsdWVzLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0l0
ZXJhdGlvblN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0l0ZXJhdGlvblN0
YXR1cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0l0ZXJhdGlvblN0YXR1cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgewor
CitlbnVtIGNsYXNzIEl0ZXJhdGlvblN0YXR1cyB7CisgICAgQ29udGludWUsCisgICAgRG9uZQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6SXRlcmF0aW9uU3RhdHVzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449523</attachid>
            <date>2022-01-19 15:18:00 -0800</date>
            <delta_ts>2022-01-19 17:40:44 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>53919</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4MjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDIyLTAxLTE5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBBUk02NEVIYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzUxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYXNz
ZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpBUk02
NEVIYXNoKToKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6fkFSTTY0RUhhc2gpOgorICAgICAg
ICAoSlNDOjpBUk02NEVIYXNoOjphbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWRBbmRJbml0aWFs
aXplSGFzaCk6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6OmRlYWxsb2NhdGVQaW5Gb3JDdXJy
ZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6dXBkYXRlKToKKyAgICAgICAg
KEpTQzo6QVJNNjRFSGFzaDo6cGluKToKKyAgICAgICAgKEpTQzo6QVJNNjRFSGFzaDo6Y3VycmVu
dEhhc2gpOgorICAgICAgICAoSlNDOjpBUk02NEVIYXNoOjpzZXRVcGRhdGVkSGFzaCk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6QXNzZW1ibGVyQnVmZmVyKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibGVyQnVmZmVyOjphcm02NGVIYXNoKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVy
QnVmZmVyOjpwdXRJbnRlZ3JhbFVuY2hlY2tlZCk6CisgICAgICAgIChKU0M6OkFSTTY0RUhhc2g6
OmJpdHNGb3JEaXZlcnNpZmllcik6IERlbGV0ZWQuCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtC
dWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtD
b2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6YWxsb2NhdGUpOgorICAgICAgICAqIGFz
c2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpX
cml0ZVRvSklUUmVnaW9uU2NvcGU6OldyaXRlVG9KSVRSZWdpb25TY29wZSk6CisgICAgICAgIChK
U0M6OldyaXRlVG9KSVRSZWdpb25TY29wZTo6fldyaXRlVG9KSVRSZWdpb25TY29wZSk6CisgICAg
ICAgIChKU0M6OlZhbGlkYXRlTm9uUmVlbnRyYW5jeVNjb3BlOjpWYWxpZGF0ZU5vblJlZW50cmFu
Y3lTY29wZSk6CisgICAgICAgIChKU0M6OlZhbGlkYXRlTm9uUmVlbnRyYW5jeVNjb3BlOjp+VmFs
aWRhdGVOb25SZWVudHJhbmN5U2NvcGUpOgorICAgICAgICAoSlNDOjphbGxvY2F0ZUluRXhlY3V0
YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjpQYWdlOjpQ
YWdlKToKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVBhZ2UpOgorICAgICAgICAoSlNDOjpTZWN1
cmVBUk02NEVIYXNoUGluczo6bWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVI
YXNoUGluczo6aW5pdGlhbGl6ZUF0U3RhcnR1cCk6CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0
RUhhc2hQaW5zOjphbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWRJbXBsKToKKyAgICAgICAgKEpT
Qzo6U2VjdXJlQVJNNjRFSGFzaFBpbnM6OmFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCk6Cisg
ICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjpkZWFsbG9jYXRlUGluRm9yQ3VycmVu
dFRocmVhZCk6CisgICAgICAgICogYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGluczo6Zmlyc3RQYWdlKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpTZWN1cmVBUk02NEVIYXNoUGluczo6a2V5Rm9yQ3VycmVudFRocmVhZCk6
CisgICAgICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjpmb3JFYWNoUGFnZSk6CisgICAg
ICAgIChKU0M6OlNlY3VyZUFSTTY0RUhhc2hQaW5zOjpmb3JFYWNoRW50cnkpOgorICAgICAgICAo
SlNDOjpTZWN1cmVBUk02NEVIYXNoUGluczo6ZmluZEZpcnN0RW50cnkpOgorICAgICAgICAoSlND
OjpTZWN1cmVBUk02NEVIYXNoUGluczo6cGluRm9yQ3VycmVudFRocmVhZCk6CisgICAgICAgICog
aGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAg
ICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICogaml0L0Jhc2VsaW5lSklUUGxhbi5j
cHA6CisgICAgICAgIChKU0M6OkJhc2VsaW5lSklUUGxhbjo6QmFzZWxpbmVKSVRQbGFuKToKKyAg
ICAgICAgKEpTQzo6QmFzZWxpbmVKSVRQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAg
ICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgICogcGFyc2VyL1BhcnNl
ci5oOgorICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAg
IChKU0M6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0aW9uU3RhdHVzLmg6
IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9KU0NDb25maWcuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29t
cGlsZUFpcik6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUIzKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQ
bGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKToK
KwogMjAyMi0wMS0xOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtKU0NdIEZpeCBZYXJySklUIGJhY2t0cmFja0NoYXJhY3RlckNsYXNzTm9uR3JlZWR5IGJy
ZWFrcG9pbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUEKICAgICBhc3NlbWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCiAgICAgYXNzZW1i
bGVyL1JJU0NWNjRSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxlci9SZWdpc3RlckluZm8uaAorICAg
IGFzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCisgICAgYXNzZW1ibGVyL1NlY3VyZUFS
TTY0RUhhc2hQaW5zSW5saW5lcy5oCiAgICAgYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCiAgICAg
YXNzZW1ibGVyL1g4NlJlZ2lzdGVycy5oCiAgICAgYXNzZW1ibGVyL1g4Nl82NFJlZ2lzdGVycy5o
CkBAIC0xMDIzLDcgKzEwMjUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBCiAgICAgcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKICAgICBydW50aW1lL0ludHJp
bnNpYy5oCiAgICAgcnVudGltZS9JdGVyYXRpb25LaW5kLmgKLSAgICBydW50aW1lL0l0ZXJhdGlv
blN0YXR1cy5oCiAgICAgcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAogICAgIHJ1bnRpbWUv
SXRlcmF0b3JQcm90b3R5cGUuaAogICAgIHJ1bnRpbWUvSlNBcnJheS5oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgYXNzZW1i
bGVyL1BlcmZMb2cuY3BwCiBhc3NlbWJsZXIvUHJpbnRlci5jcHAKIGFzc2VtYmxlci9Qcm9iZUNv
bnRleHQuY3BwCiBhc3NlbWJsZXIvUHJvYmVTdGFjay5jcHAKK2Fzc2VtYmxlci9TZWN1cmVBUk02
NEVIYXNoUGlucy5jcHAKIAogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRH
ZW5lcmF0ZUNvZGUuY3BwCiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGlu
ZWFyU2Nhbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
ODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODk1LDYgKzg5NSw4IEBACiAJCTUy
QzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8q
IFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
QzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmggKi87
IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUw
MDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyogU2VjdXJlQVJN
NjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyQ0FFQzc0Mjc5MEI4RjYwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGlucy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyQ0FFQzc2
Mjc5MEI5MDEwMEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0FFQzcyMjc5MEI4RjYw
MEREQkFBRiAvKiBTZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4
QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlv
bi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2Ny
aXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIy
NDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CkBAIC0yMDgzLDcgKzIwODUsNiBA
QAogCQlGRTQ4QkQ0NDIzMjQ1RTkzMDBGMTM2RDAgLyogSlNDQ29uZmlnLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTQ4QkQ0MjIzMjQ1RTg3MDBGMTM2
RDAgLyogSlNDQ29uZmlnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRkU0OEU2MzgxRUIxMThEMjAwNUQ3QTk2IC8qIE9iamVjdEluaXRpYWxpemF0
aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFNDhFNjM2MUVCMTE4OEYwMDVEN0E5NiAvKiBPYmplY3RJbml0aWFsaXphdGlvblNjb3BlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU0QkZG
MkMxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRCRkYyQTFBRDQ3NkU3MDAwODhGODcg
LyogRnVuY3Rpb25PdmVycmlkZXMuaCAqLzsgfTsKLQkJRkU0RDU1QjgxQUU3MTZDQTAwNTJFNDU5
IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU0RDU1QjcxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNTA2
ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTA2ODY0MUFFMjQ2MzkwMDA5REFC
NyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRTUzM0NBNTFGMjE3REIzMDAxNkExRkUgLyogRm91bmRhdGlv
bi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87
IH07CiAJCUZFNTMzQ0E2MUYyMTdEQjMwMDE2QTFGRSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJG
NUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwpA
QCAtMzc4OSw2ICszNzkwLDkgQEAKIAkJNTJDNTU1NjUyMjRDMkFFNzAwOTlGNUNDIC8qIERGR1Zh
bHVlUmVwUmVkdWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsdWVSZXBSZWR1Y3Rp
b25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQ
cm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFz
aFBpbnNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkNBRUM3MzI3OTBCOEY2MDBEREJB
QUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VjdXJl
QVJNNjRFSGFzaFBpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkNBRUM3
NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2VjdXJlQVJNNjRFSGFzaFBpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJDRDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRo
ID0gZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4
RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTYyNyw3
ICs1NjMxLDYgQEAKIAkJRkU0OEU2MzcxRUIxMThBRDAwNUQ3QTk2IC8qIE9iamVjdEluaXRpYWxp
emF0aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT2Jq
ZWN0SW5pdGlhbGl6YXRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFNEJGRjI5MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbk92ZXJyaWRlcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEJGRjJBMUFENDc2RTcwMDA4OEY4NyAvKiBG
dW5jdGlvbk92ZXJyaWRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5j
dGlvbk92ZXJyaWRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRTRENTVCNzFB
RTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEl0ZXJhdGlvblN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTUwNjg2NDFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmVkU291cmNlRHVtcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVm
ZXJyZWRTb3VyY2VEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERlZmVycmVkU291cmNlRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
NTMzQ0EwMUYyMTdDMzEwMDE2QTFGRSAvKiB0ZXN0bWFzbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSB0ZXN0bWFzbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODE1LDcgKzc4
MTgsNiBAQAogCQkJCUEzOENBNTlCMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmNwcCAqLywK
IAkJCQlBMzhDQTU5QzI2REQ4NERFMDBDOEQ4NEMgLyogSVNPODYwMS5oICovLAogCQkJCThCOUY2
RDU1MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggKi8sCi0JCQkJRkU0RDU1Qjcx
QUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcwMTEzRDQ5MUE4
REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLAogCQkJCTcwMTEzRDRB
MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLywKIAkJCQk3MERDM0Uw
NzFCMkRGMkM3MDAwNTQyOTkgLyogSXRlcmF0b3JQcm90b3R5cGUuY3BwICovLApAQCAtODgwMiw2
ICs4ODA0LDkgQEAKIAkJCQlGRTEwQUFFOTFGNDRENTEwMDA5REVEQzUgLyogUHJvYmVTdGFjay5j
cHAgKi8sCiAJCQkJRkUxMEFBRUExRjQ0RDUxMjAwOURFREM1IC8qIFByb2JlU3RhY2suaCAqLywK
IAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTkgLyogUmVnaXN0ZXJJbmZvLmggKi8sCisJCQkJ
NTJDQUVDNzMyNzkwQjhGNjAwRERCQUFGIC8qIFNlY3VyZUFSTTY0RUhhc2hQaW5zLmNwcCAqLywK
KwkJCQk1MkNBRUM3NDI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCAq
LywKKwkJCQk1MkNBRUM3MjI3OTBCOEY2MDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnNJ
bmxpbmVzLmggKi8sCiAJCQkJRkU1MzNDQTAxRjIxN0MzMTAwMTZBMUZFIC8qIHRlc3RtYXNtLmNw
cCAqLywKIAkJCQk5Njg4Q0IxNDBFRDEyQjRFMDAxRDY0OTIgLyogWDg2XzY0UmVnaXN0ZXJzLmgg
Ki8sCiAJCQkJOTY4OENCMTQwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oICovLApA
QCAtMTAwMTksNiArMTAwMjQsNyBAQAogCQkJCTBGQkUwRjczMTZDMURCMDUwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGNjE3QTBC
OENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGRkM5NUExNEVGOTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MkNBRUM3NTI3OTBCOEZCMDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFz
aFBpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNCRkE1RDAyMUU4NTNBMTAwOUMwRUJB
IC8qIERGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjJC
OUExNzJGMDUwMTAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDQ3Niw3ICsxMDQ4Miw2IEBACiAJCQkJMEY1RTBGRTcyMDg2QUQ0ODAwOTdGMERF
IC8qIElzb1N1YnNwYWNlUGVyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCThCOUY2RDU2MUQ1OTEy
RkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0Q0MUVD
OTIzQzAwODFBMDBBRTk4NEIgLyogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmggaW4gSGVhZGVycyAq
LywKLQkJCQlGRTRENTVCODFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVy
YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MERDM0UwQTFCMkRGMkM3MDAwNTQyOTkgLyog
SXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEzMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywKQEAgLTExMTc5LDYgKzExMTg0
LDcgQEAKIAkJCQlFMzNCQkUwOTI1QkZBMDQxMDA1MzY5MEYgLyogV2FzbVN0cmVhbWluZ0NvbXBp
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVDMTQgLyogV2Fz
bVN0cmVhbWluZ1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDNzNBOTEyNUJGQTczQjAw
RUZFMzAzIC8qIFdhc21TdHJlYW1pbmdQbGFuLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkNBRUM3
NjI3OTBCOTAxMDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNEQwMUJGNTI2REVFRjUzMDBDQUUwRDAgLyogV2FzbVRhZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3Mu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
c3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiSklUQ29tcGlsYXRpb25FZmZvcnQuaCIKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNo
UGluc0lubGluZXMuaCIKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMjAzLDE5ICsyMDQsNDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIENQVShBUk02NEUpCisgICAgZW51bSBjbGFzcyBTaG91
bGRTaWduIHsKKyAgICAgICAgWWVzLAorICAgICAgICBObworICAgIH07CisgICAgdGVtcGxhdGUg
PFNob3VsZFNpZ24gc2hvdWxkU2lnbj4KICAgICBjbGFzcyBBUk02NEVIYXNoIHsKKyAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQVJNNjRFSGFzaCk7CiAgICAgcHVibGljOgotICAgICAgICBB
Uk02NEVIYXNoKHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBUk02NEVIYXNoKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkQW5kSW5pdGlhbGl6
ZUhhc2goKTsKKyAgICAgICAgfQorCisgICAgICAgIH5BUk02NEVIYXNoKCkKICAgICAgICAgewot
ICAgICAgICAgICAgc2V0VXBkYXRlZEhhc2goMCwgMCwgZGl2ZXJzaWZpZXIpOworICAgICAgICAg
ICAgZGVhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWRBbmRJbml0aWFs
aXplSGFzaCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2hvdWxkU2ln
biA9PSBTaG91bGRTaWduOjpZZXMpIHsKKyAgICAgICAgICAgICAgICBtX2luaXRpYWxpemVkUGlu
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBnX2pzY0NvbmZpZy5hcm02NGVIYXNoUGlucy5hbGxv
Y2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgICAgICAgICBzZXRVcGRhdGVkSGFz
aCgwLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1faGFzaCA9IDA7
CiAgICAgICAgIH0KIAotICAgICAgICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHVwZGF0ZSh1aW50
MzJfdCBpbnN0cnVjdGlvbiwgdWludDMyX3QgaW5kZXgsIHZvaWQqIGRpdmVyc2lmaWVyKQorICAg
ICAgICB2b2lkIGRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCkKICAgICAgICAgewotICAg
ICAgICAgICAgdWludDMyX3QgY3VycmVudEhhc2ggPSB0aGlzLT5jdXJyZW50SGFzaChpbmRleCwg
ZGl2ZXJzaWZpZXIpOworICAgICAgICAgICAgaWYgKG1faW5pdGlhbGl6ZWRQaW4pIHsKKyAgICAg
ICAgICAgICAgICBnX2pzY0NvbmZpZy5hcm02NGVIYXNoUGlucy5kZWFsbG9jYXRlUGluRm9yQ3Vy
cmVudFRocmVhZCgpOworICAgICAgICAgICAgICAgIG1faW5pdGlhbGl6ZWRQaW4gPSBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgdWludDMy
X3QgdXBkYXRlKHVpbnQzMl90IGluc3RydWN0aW9uLCB1aW50MzJfdCBpbmRleCkKKyAgICAgICAg
eworICAgICAgICAgICAgdWludDMyX3QgY3VycmVudEhhc2ggPSB0aGlzLT5jdXJyZW50SGFzaChp
bmRleCk7CiAgICAgICAgICAgICB1aW50NjRfdCBuZXh0SW5kZXggPSBpbmRleCArIDE7CiAgICAg
ICAgICAgICB1aW50MzJfdCBvdXRwdXQgPSBuZXh0VmFsdWUoaW5zdHJ1Y3Rpb24sIG5leHRJbmRl
eCwgY3VycmVudEhhc2gpOwotICAgICAgICAgICAgc2V0VXBkYXRlZEhhc2gob3V0cHV0LCBuZXh0
SW5kZXgsIGRpdmVyc2lmaWVyKTsKKyAgICAgICAgICAgIHNldFVwZGF0ZWRIYXNoKG91dHB1dCwg
bmV4dEluZGV4KTsKICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7CiAgICAgICAgIH0KIApAQCAt
MjM1LDI5ICsyNjUsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gKGEg
Pj4gMzkpIF4gKGIgPj4gMjMpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19J
TkxJTkUgdWludDMyX3QgYml0c0ZvckRpdmVyc2lmaWVyKHZvaWQqIGRpdmVyc2lmaWVyKQorICAg
ICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSB1aW50MzJfdCBwaW4oKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZGl2ZXJzaWZpZXIpOworICAg
ICAgICAgICAgcmV0dXJuIGdfanNjQ29uZmlnLmFybTY0ZUhhc2hQaW5zLnBpbkZvckN1cnJlbnRU
aHJlYWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgY3Vy
cmVudEhhc2godWludDMyX3QgaW5kZXgsIHZvaWQqIGRpdmVyc2lmaWVyKQorICAgICAgICBBTFdB
WVNfSU5MSU5FIHVpbnQzMl90IGN1cnJlbnRIYXNoKHVpbnQzMl90IGluZGV4KQogICAgICAgICB7
Ci0gICAgICAgICAgICBib29sIGhhc2hGaWVsZElzVGFnZ2VkID0gaW5kZXggPT0gMDsKLSAgICAg
ICAgICAgIGlmIChoYXNoRmllbGRJc1RhZ2dlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdW50
YWdJbnQobV9oYXNoLCBtYWtlRGl2ZXJzaWZpZXIoaW5pdGlhbGl6YXRpb25OYW1lc3BhY2UsIGlu
ZGV4LCBiaXRzRm9yRGl2ZXJzaWZpZXIoZGl2ZXJzaWZpZXIpKSk7CisgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHNob3VsZFNpZ24gPT0gU2hvdWxkU2lnbjo6WWVzKQorICAgICAgICAgICAgICAg
IHJldHVybiB1bnRhZ0ludChtX2hhc2gsIG1ha2VEaXZlcnNpZmllcihpbml0aWFsaXphdGlvbk5h
bWVzcGFjZSwgaW5kZXgsIHBpbigpKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9oYXNoOwogICAg
ICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFVwZGF0ZWRIYXNoKHVpbnQz
Ml90IHZhbHVlLCB1aW50MzJfdCBpbmRleCwgdm9pZCogZGl2ZXJzaWZpZXIpCisgICAgICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXRVcGRhdGVkSGFzaCh1aW50MzJfdCB2YWx1ZSwgdWludDMyX3Qg
aW5kZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkVGFnSGFzaEZpZWxkID0g
aW5kZXggPT0gMDsKLSAgICAgICAgICAgIGlmIChzaG91bGRUYWdIYXNoRmllbGQpCi0gICAgICAg
ICAgICAgICAgbV9oYXNoID0gdGFnSW50KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSksIG1h
a2VEaXZlcnNpZmllcihpbml0aWFsaXphdGlvbk5hbWVzcGFjZSwgaW5kZXgsIGJpdHNGb3JEaXZl
cnNpZmllcihkaXZlcnNpZmllcikpKTsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2hvdWxk
U2lnbiA9PSBTaG91bGRTaWduOjpZZXMpCisgICAgICAgICAgICAgICAgbV9oYXNoID0gdGFnSW50
KHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSksIG1ha2VEaXZlcnNpZmllcihpbml0aWFsaXph
dGlvbk5hbWVzcGFjZSwgaW5kZXgsIHBpbigpKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9oYXNoID0gdmFsdWU7CisgICAgICAgICAgICAgICAgbV9oYXNoID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKICAgICAgICAgfQogCiAgICAgICAgIHVpbnQ2NF90IG1f
aGFzaDsKKyAgICAgICAgYm9vbCBtX2luaXRpYWxpemVkUGluIHsgZmFsc2UgfTsKICAgICB9Owog
I2VuZGlmIC8vIENQVShBUk02NEUpCiAKQEAgLTI2Nyw3ICsyOTYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIDogbV9zdG9yYWdlKCkKICAgICAgICAgICAgICwgbV9pbmRleCgwKQog
I2lmIENQVShBUk02NEUpCi0gICAgICAgICAgICAsIG1faGFzaCh0aGlzKQorICAgICAgICAgICAg
LCBtX2hhc2goKQogICAgICAgICAgICAgLCBtX2hhc2hlcygpCiAjZW5kaWYKICAgICAgICAgewpA
QCAtNDA5LDYgKzQzOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCogZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZS5idWZmZXIoKTsgfQogI2VuZGlmCiAKKyNpZiBDUFUo
QVJNNjRFKQorICAgICAgICBBUk02NEVIYXNoPFNob3VsZFNpZ246Olllcz4mIGFybTY0ZUhhc2go
KSB7IHJldHVybiBtX2hhc2g7IH0KKyNlbmRpZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+CiAgICAgICAgIHZvaWQgcHV0SW50ZWdyYWwo
SW50ZWdyYWxUeXBlIHZhbHVlKQpAQCAtNDI1LDcgKzQ1OCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2lmIENQVShBUk02NCkKICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHZhbHVlKSA9
PSA0LCAiIik7CiAjaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHVpbnQzMl90IGhhc2ggPSBt
X2hhc2gudXBkYXRlKHZhbHVlLCBtX2luZGV4IC8gc2l6ZW9mKEludGVncmFsVHlwZSksIHRoaXMp
OworICAgICAgICAgICAgdWludDMyX3QgaGFzaCA9IG1faGFzaC51cGRhdGUodmFsdWUsIG1faW5k
ZXggLyBzaXplb2YoSW50ZWdyYWxUeXBlKSk7CiAgICAgICAgICAgICBXVEY6OnVuYWxpZ25lZFN0
b3JlPHVpbnQzMl90PihtX2hhc2hlcy5idWZmZXIoKSArIG1faW5kZXgsIGhhc2gpOwogI2VuZGlm
CiAjZW5kaWYKQEAgLTQ1OSw3ICs0OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQXNz
ZW1ibGVyRGF0YSBtX3N0b3JhZ2U7CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CiAjaWYgQ1BV
KEFSTTY0RSkKLSAgICAgICAgQVJNNjRFSGFzaCBtX2hhc2g7CisgICAgICAgIEFSTTY0RUhhc2g8
U2hvdWxkU2lnbjo6WWVzPiBtX2hhc2g7CiAgICAgICAgIEFzc2VtYmxlckRhdGEgbV9oYXNoZXM7
CiAjZW5kaWYKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsOCAr
MjIxLDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogICAgIG1f
YXNzZW1ibGVyU3RvcmFnZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZlcigpLnJl
bGVhc2VBc3NlbWJsZXJEYXRhKCk7CiAgICAgdWludDhfdCogaW5EYXRhID0gYml0d2lzZV9jYXN0
PHVpbnQ4X3QqPihtX2Fzc2VtYmxlclN0b3JhZ2UuYnVmZmVyKCkpOwogI2lmIENQVShBUk02NEUp
Ci0gICAgdm9pZCogYnVmZmVyUHRyID0gJm1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZl
cigpOwotICAgIEFSTTY0RUhhc2ggdmVyaWZ5VW5jb21wYWN0ZWRIYXNoIHsgYnVmZmVyUHRyIH07
CisgICAgQVJNNjRFSGFzaDxTaG91bGRTaWduOjpObz4gdmVyaWZ5VW5jb21wYWN0ZWRIYXNoOwog
ICAgIG1fYXNzZW1ibGVySGFzaGVzU3RvcmFnZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVy
LmJ1ZmZlcigpLnJlbGVhc2VBc3NlbWJsZXJIYXNoZXMoKTsKICAgICB1aW50MzJfdCogaW5IYXNo
ZXMgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3QqPihtX2Fzc2VtYmxlckhhc2hlc1N0b3JhZ2UuYnVm
ZmVyKCkpOwogI2VuZGlmCkBAIC0yNDUsNyArMjQ0LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5
Q29tcGFjdEFuZExpbmtDb2RlKAogICAgICAgICBJbnN0cnVjdGlvblR5cGUgdmFsdWUgPSAqcHRy
OwogI2lmIENQVShBUk02NEUpCiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gKGJpdHdpc2VfY2Fz
dDx1aW50OF90Kj4ocHRyKSAtIGluRGF0YSkgLyA0OwotICAgICAgICB1aW50MzJfdCBoYXNoID0g
dmVyaWZ5VW5jb21wYWN0ZWRIYXNoLnVwZGF0ZSh2YWx1ZSwgaW5kZXgsIGJ1ZmZlclB0cik7Cisg
ICAgICAgIHVpbnQzMl90IGhhc2ggPSB2ZXJpZnlVbmNvbXBhY3RlZEhhc2gudXBkYXRlKHZhbHVl
LCBpbmRleCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluSGFzaGVzW2luZGV4XSA9PSBoYXNo
KTsKICNlbmRpZgogICAgICAgICByZXR1cm4gdmFsdWU7CkBAIC00MzgsNiArNDM3LDEwIEBAIHZv
aWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXIKICAgICAgICAgaW5pdGlhbFNp
emUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIH0KIAorI2lm
IENQVShBUk02NEUpCisgICAgbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuYnVmZmVyKCkuYXJt
NjRlSGFzaCgpLmRlYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisjZW5kaWYKKwogICAg
IG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmFs
bG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5
KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
ZWN1cmVBUk02NEVIYXNoUGlucy5oIgorCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIkZhc3RKSVRQZXJtaXNzaW9ucy5oIgorI2luY2x1ZGUgIlNlY3VyZUFSTTY0
RUhhc2hQaW5zSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIENQVShBUk02NEUpICYmIEVO
QUJMRShKSVQpCisKK3N0cnVjdCBXcml0ZVRvSklUUmVnaW9uU2NvcGUgeworICAgIEFMV0FZU19J
TkxJTkUgV3JpdGVUb0pJVFJlZ2lvblNjb3BlKCkKKyAgICB7CisgICAgICAgIHRocmVhZFNlbGZS
ZXN0cmljdFJXWFRvUlcoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIH5Xcml0ZVRvSklU
UmVnaW9uU2NvcGUoKQorICAgIHsKKyAgICAgICAgdGhyZWFkU2VsZlJlc3RyaWN0UldYVG9SWCgp
OworICAgIH0KK307CisKK3N0cnVjdCBWYWxpZGF0ZU5vblJlZW50cmFuY3lTY29wZSB7CisgICAg
QUxXQVlTX0lOTElORSBWYWxpZGF0ZU5vblJlZW50cmFuY3lTY29wZShTZWN1cmVBUk02NEVIYXNo
UGluczo6TWV0YWRhdGEqIG1ldGFkYXRhKQorICAgICAgICA6IG1fbWV0YWRhdGEobWV0YWRhdGEp
CisgICAgeworICAgICAgICB1aW50MzJfdCB2YWxpZGF0ZU5vblJlZW50cmFuY3kgPSBtX21ldGFk
YXRhLT5hc3NlcnROb3RSZWVudHJhbnQuZXhjaGFuZ2UoMSwgc3RkOjptZW1vcnlfb3JkZXJfc2Vx
X2NzdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2YWxpZGF0ZU5vblJlZW50cmFuY3kpOwor
ICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgflZhbGlkYXRlTm9uUmVlbnRyYW5jeVNjb3BlKCkK
KyAgICB7CisgICAgICAgIHVpbnQzMl90IHZhbGlkYXRlTm9uUmVlbnRyYW5jeSA9IG1fbWV0YWRh
dGEtPmFzc2VydE5vdFJlZW50cmFudC5leGNoYW5nZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFf
Y3N0KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFsaWRhdGVOb25SZWVudHJhbmN5ID09IDEp
OworICAgIH0KKyAgICBTZWN1cmVBUk02NEVIYXNoUGluczo6TWV0YWRhdGEqIG1fbWV0YWRhdGE7
Cit9OworCisvLyBUaGlzIGNsYXNzIGlzIGFsbG9jYXRlZCBvbmNlIHBlciBwcm9jZXNzLCBzbyBz
dGF0aWMgbG9jayBpcyBvay4KK3N0YXRpYyBMb2NrIGhhc2hQaW5zTG9jazsKKworQUxXQVlTX0lO
TElORSBzdGF0aWMgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZTo6TWVtb3J5UHRyIGFsbG9jYXRlSW5F
eGVjdXRhYmxlTWVtb3J5KHNpemVfdCBzaXplKQoreworICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGUqIGhhbmRsZSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKHNp
emUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpLmxlYWtSZWYoKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChoYW5kbGUpOworICAgIHZvaWQqIG1lbW9yeSA9IGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dl
ZFB0cjxjaGFyKj4oKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpc0pJVFBDKG1lbW9yeSkgJiYgaXNK
SVRQQyhiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1lbW9yeSkgKyBzaXplIC0gMSkpOworICAgIHJldHVy
biBoYW5kbGUtPnN0YXJ0KCk7Cit9CisKK0FMV0FZU19JTkxJTkUgU2VjdXJlQVJNNjRFSGFzaFBp
bnM6OlBhZ2U6OlBhZ2UoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbnRy
aWVzUGVyUGFnZTsgKytpKSB7CisgICAgICAgIGF1dG8mIGVudHJ5ID0gdGhpcy0+ZW50cnkoaSk7
CisgICAgICAgIGVudHJ5LnBpbiA9IDA7CisgICAgICAgIGVudHJ5LmtleSA9IDA7CisgICAgfQor
fQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVQYWdlKGNvbnN0IFdyaXRl
VG9KSVRSZWdpb25TY29wZSYsIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpQYWdlKiBwYWdlKQorewor
ICAgIG5ldyAocGFnZSkgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OlBhZ2U7Cit9CisKKyNkZWZpbmUg
VkFMSURBVEVfVEhJU19WQUxVRSgpIFJFTEVBU0VfQVNTRVJUKHRoaXMgPT0gJmdfanNjQ29uZmln
LmFybTY0ZUhhc2hQaW5zKSAKKworQUxXQVlTX0lOTElORSBhdXRvIFNlY3VyZUFSTTY0RUhhc2hQ
aW5zOjptZXRhZGF0YSgpIC0+IE1ldGFkYXRhKgoreworICAgIFZBTElEQVRFX1RISVNfVkFMVUUo
KTsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PE1ldGFkYXRhKj4obV9tZW1vcnkpIC0gMTsKK30K
Kwordm9pZCBTZWN1cmVBUk02NEVIYXNoUGluczo6aW5pdGlhbGl6ZUF0U3RhcnR1cCgpCit7Cisg
ICAgVkFMSURBVEVfVEhJU19WQUxVRSgpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX21lbW9yeSk7
CisKKyAgICBtX21lbW9yeSA9IGFsbG9jYXRlSW5FeGVjdXRhYmxlTWVtb3J5KHNpemVvZihNZXRh
ZGF0YSkgKyBQYWdlOjphbGxvY2F0aW9uU2l6ZSgpKS51bnRhZ2dlZFB0cjxjaGFyKj4oKSArIHNp
emVvZihNZXRhZGF0YSk7CisKKyAgICB7CisgICAgICAgIFdyaXRlVG9KSVRSZWdpb25TY29wZSB3
cml0ZVNjb3BlOworCisgICAgICAgIG5ldyAobWV0YWRhdGEoKSkgTWV0YWRhdGE7IAorICAgICAg
ICBpbml0aWFsaXplUGFnZSh3cml0ZVNjb3BlLCBmaXJzdFBhZ2UoKSk7CisgICAgfQorfQorCiti
b29sIFNlY3VyZUFSTTY0RUhhc2hQaW5zOjphbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWRJbXBs
KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK3sKKyAgICBWQUxJREFURV9USElTX1ZBTFVFKCk7CisK
KyAgICBzaXplX3QgbmV3RW50cnlJbmRleDsKKyAgICBQYWdlKiBuZXdFbnRyeVBhZ2U7CisKKyAg
ICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgc2l6ZV90IGJhc2VJbmRleCA9IDA7CisgICAgZm9y
RWFjaFBhZ2UoWyZdIChQYWdlJiBwYWdlKSB7CisgICAgICAgIHNpemVfdCBiaXQgPSBwYWdlLmZp
bmRDbGVhckJpdCgpOworICAgICAgICBpZiAoYml0IDwgbnVtRW50cmllc1BlclBhZ2UpIHsKKyAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIG5ld0VudHJ5SW5kZXggPSBiYXNl
SW5kZXggKyBiaXQ7CisgICAgICAgICAgICBuZXdFbnRyeVBhZ2UgPSAmcGFnZTsKKyAgICAgICAg
ICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKworICAgICAgICBi
YXNlSW5kZXggKz0gbnVtRW50cmllc1BlclBhZ2U7CisgICAgICAgIHJldHVybiBJdGVyYXRpb25T
dGF0dXM6OkNvbnRpbnVlOworICAgIH0pOworCisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byBmaW5kUmVzdWx0ID0gZmluZEZpcnN0RW50cnkoKTsKKyAg
ICBFbnRyeSogcHJlZXhpc3RpbmdFbnRyeSA9IGZpbmRSZXN1bHQuZW50cnk7CisgICAgc2l6ZV90
IHByZWV4aXN0aW5nRW50cnlJbmRleCA9IGZpbmRSZXN1bHQuaW5kZXg7CisgICAgUGFnZSogcHJl
ZXhpc3RpbmdFbnRyeVBhZ2UgPSBmaW5kUmVzdWx0LnBhZ2U7CisKKyAgICB7CisgICAgICAgIGF1
dG8qIG1ldGFkYXRhID0gdGhpcy0+bWV0YWRhdGEoKTsKKworICAgICAgICBXcml0ZVRvSklUUmVn
aW9uU2NvcGUgd3JpdGVTY29wZTsKKyAgICAgICAgVmFsaWRhdGVOb25SZWVudHJhbmN5U2NvcGUg
dmFsaWRhdGVOb25SZWVudHJhbmN5KG1ldGFkYXRhKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VS
VChpc0pJVFBDKG1ldGFkYXRhKSk7CisgICAgICAgIHVpbnQ2NF90IG5leHRQaW4gPSBtZXRhZGF0
YS0+bmV4dFBpbi5leGNoYW5nZUFkZCgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobmV4dFBpbik7CisKKyAgICAgICAgbmV3RW50cnlQYWdlLT5z
ZXRJc0luVXNlKG5ld0VudHJ5SW5kZXgpOworCisgICAgICAgIGlmIChwcmVleGlzdGluZ0VudHJ5
ICYmIHByZWV4aXN0aW5nRW50cnlJbmRleCA8IG5ld0VudHJ5SW5kZXgpIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHByZWV4aXN0aW5nRW50cnlQYWdlLT5pc0luVXNlKHByZWV4aXN0aW5n
RW50cnlJbmRleCkpOworCisgICAgICAgICAgICBuZXdFbnRyeVBhZ2UtPmVudHJ5KG5ld0VudHJ5
SW5kZXgpID0gKnByZWV4aXN0aW5nRW50cnk7CisgICAgICAgICAgICBuZXdFbnRyeUluZGV4ID0g
cHJlZXhpc3RpbmdFbnRyeUluZGV4OworICAgICAgICAgICAgbmV3RW50cnlQYWdlID0gcHJlZXhp
c3RpbmdFbnRyeVBhZ2U7CisgICAgICAgIH0KKworICAgICAgICBhdXRvJiBlbnRyeSA9IG5ld0Vu
dHJ5UGFnZS0+ZW50cnkobmV3RW50cnlJbmRleCk7CisgICAgICAgIGVudHJ5LnBpbiA9IG5leHRQ
aW47CisgICAgICAgIGVudHJ5LmtleSA9IGtleUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTZWN1cmVBUk02NEVIYXNoUGluczo6YWxsb2Nh
dGVQaW5Gb3JDdXJyZW50VGhyZWFkKCkKK3sKKyAgICBWQUxJREFURV9USElTX1ZBTFVFKCk7CisK
KyAgICBMb2NrZXIgbG9ja2VyIHsgaGFzaFBpbnNMb2NrIH07CisKKyAgICBpZiAoYWxsb2NhdGVQ
aW5Gb3JDdXJyZW50VGhyZWFkSW1wbChsb2NrZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBBbGxvY2F0ZSBhIG5ldyBwYWdlCisgICAgeworICAgICAgICBQYWdlKiBsYXN0UGFnZSA9IGZp
cnN0UGFnZSgpOworICAgICAgICB3aGlsZSAobGFzdFBhZ2UtPm5leHQpCisgICAgICAgICAgICBs
YXN0UGFnZSA9IGxhc3RQYWdlLT5uZXh0OworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbGFzdFBh
Z2UtPm5leHQpOworCisgICAgICAgIGF1dG8gbmV3UGFnZSA9IGFsbG9jYXRlSW5FeGVjdXRhYmxl
TWVtb3J5KFBhZ2U6OmFsbG9jYXRpb25TaXplKCkpOworCisgICAgICAgIHsKKyAgICAgICAgICAg
IFdyaXRlVG9KSVRSZWdpb25TY29wZSB3cml0ZVNjb3BlOworICAgICAgICAgICAgVmFsaWRhdGVO
b25SZWVudHJhbmN5U2NvcGUgdmFsaWRhdGVOb25SZWVudHJhbmN5KG1ldGFkYXRhKCkpOworICAg
ICAgICAgICAgaW5pdGlhbGl6ZVBhZ2Uod3JpdGVTY29wZSwgbmV3UGFnZS51bnRhZ2dlZFB0cjxQ
YWdlKj4oKSk7CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBiZSByZWFkIGZyb20gY29uY3VycmVu
dGx5LiBNYWtlIHN1cmUgaXQncyBpbiBhIGdvb2Qgc3RhdGUgZm9yIHRoYXQgdG8gaGFwcGVuLgor
ICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIGxhc3RQYWdl
LT5uZXh0ID0gbmV3UGFnZS51bnRhZ2dlZFB0cjxQYWdlKj4oKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGJvb2wgc3VjY2VzcyA9IGFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZEltcGwobG9j
a2VyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzKTsKK30KKwordm9pZCBTZWN1cmVBUk02
NEVIYXNoUGluczo6ZGVhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKQoreworICAgIFZBTElE
QVRFX1RISVNfVkFMVUUoKTsKKworICAgIExvY2tlciBsb2NrZXIgeyBoYXNoUGluc0xvY2sgfTsK
KworICAgIGF1dG8gY2xlYXIgPSBbXSAoRW50cnkmIGVudHJ5KSB7CisgICAgICAgIGVudHJ5LnBp
biA9IDA7CisgICAgICAgIGVudHJ5LmtleSA9IDA7CisgICAgfTsKKworICAgIFBhZ2UqIHJlbW92
YWxQYWdlOworICAgIHNpemVfdCByZW1vdmFsSW5kZXg7CisgICAgeworICAgICAgICBhdXRvIGZp
bmRSZXN1bHQgPSBmaW5kRmlyc3RFbnRyeSgpOworICAgICAgICBFbnRyeSYgZW50cnkgPSAqZmlu
ZFJlc3VsdC5lbnRyeTsKKyAgICAgICAgcmVtb3ZhbEluZGV4ID0gZmluZFJlc3VsdC5pbmRleDsK
KyAgICAgICAgcmVtb3ZhbFBhZ2UgPSBmaW5kUmVzdWx0LnBhZ2U7CisKKyAgICAgICAgV3JpdGVU
b0pJVFJlZ2lvblNjb3BlIHdyaXRlU2NvcGU7CisgICAgICAgIFZhbGlkYXRlTm9uUmVlbnRyYW5j
eVNjb3BlIHZhbGlkYXRlTm9uUmVlbnRyYW5jeShtZXRhZGF0YSgpKTsKKworICAgICAgICBjbGVh
cihlbnRyeSk7CisgICAgICAgIHJlbW92YWxQYWdlLT5jbGVhcklzSW5Vc2UocmVtb3ZhbEluZGV4
KTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGFsbG93cyByZWN1cnNpdmUg
dXNlcyBvZiB0aGUgTWFjcm9Bc3NlbWJsZXIsIGZvcm1pbmcgYSBzdGFjaworICAgIC8vIGxpa2Ug
ZGF0YSBzdHJ1Y3R1cmUuIFRoZSBpbiB1c2UgcGluICh0b3Agb2YgdGhlIHN0YWNrKSB3aWxsIGFs
d2F5cyBiZSBhdCB0aGUgbG93ZXN0CisgICAgLy8gcGFnZSBhbmQgbG93ZXN0IGluZGV4IGluIHRo
ZSBiaXQgdmVjdG9yLiBTbyB3aGVuIHdlIGRlYWxsb2NhdGUgdGhlIGN1cnJlbnQgdG9wIG9mIHRo
ZQorICAgIC8vIHN0YWNrLCB3ZSBuZWVkIHRvIGZpbmQgdGhlIG5leHQgZW50cnkgaW4gdGhlIHN0
YWNrLCBhbmQgZW5zdXJlIGl0J3MgYXQgdGhlIGxvd2VzdCBpbmRleC4KKyAgICAvLyBTbyBpZiB0
aGVyZSBhcmUgb3RoZXIgZW50cmllcyBmb3IgdGhpcyBjdXJyZW50IHRocmVhZCwgd2UgZmluZCB0
aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QKKyAgICAvLyBwaW4gKG5leHQgdG9wIG9mIHN0YWNrIHZh
bHVlKSwgYW5kIHJlcGxhY2UgaXQgYXQgdGhlIGluZGV4IHdlIHdlcmUgdXNpbmcgYmVmb3JlLgor
ICAgIC8vIEFsbG9jYXRpb24gYWxzbyBtYWludGFpbnMgdGhpcyBpbnZhcmlhbnQgYnkgYWx3YXlz
IHBsYWNpbmcgdGhlIG5ld2VzdCBlbnRyeSBmb3IKKyAgICAvLyB0aGUgY3VycmVudCB0aHJlYWQg
YXQgdGhlIGxvd2VzdCBpbmRleC4KKyAgICB7CisgICAgICAgIHVpbnQ2NF90IGtleSA9IGtleUZv
ckN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICB1
aW50NjRfdCBtYXhQaW4gPSAwOworICAgICAgICBzaXplX3QgbWF4SW5kZXggPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpemVfdD46Om1heCgpOworICAgICAgICBQYWdlKiBtYXhQYWdlID0gbnVsbHB0
cjsKKworICAgICAgICBmb3JFYWNoRW50cnkoWyZdIChQYWdlJiBwYWdlLCBFbnRyeSYgZW50cnks
IHNpemVfdCBpbmRleCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkucGluKTsK
KyAgICAgICAgICAgIGlmIChlbnRyeS5rZXkgPT0ga2V5ICYmIGVudHJ5LnBpbiA+IG1heFBpbikg
eworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtYXhQaW4g
PSBlbnRyeS5waW47CisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBpbmRleDsKKyAgICAgICAg
ICAgICAgICBtYXhQYWdlID0gJnBhZ2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKKworICAgICAgICBp
ZiAoZm91bmQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlbW92YWxJbmRleCA8IG1h
eEluZGV4KTsKKworICAgICAgICAgICAgV3JpdGVUb0pJVFJlZ2lvblNjb3BlIHdyaXRlU2NvcGU7
CisgICAgICAgICAgICBWYWxpZGF0ZU5vblJlZW50cmFuY3lTY29wZSB2YWxpZGF0ZU5vblJlZW50
cmFuY3kobWV0YWRhdGEoKSk7CisKKyAgICAgICAgICAgIHJlbW92YWxQYWdlLT5lbnRyeShyZW1v
dmFsSW5kZXgpID0gbWF4UGFnZS0+ZW50cnkobWF4SW5kZXgpOworICAgICAgICAgICAgY2xlYXIo
bWF4UGFnZS0+ZW50cnkobWF4SW5kZXgpKTsKKyAgICAgICAgICAgIG1heFBhZ2UtPmNsZWFySXNJ
blVzZShtYXhJbmRleCk7CisgICAgICAgICAgICByZW1vdmFsUGFnZS0+c2V0SXNJblVzZShyZW1v
dmFsSW5kZXgpOworICAgICAgICB9CisgICAgfQorfQorCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkg
JiYgRU5BQkxFKEpJVCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhhc2hQaW5zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGlucy5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU2VjdXJlQVJN
NjRFSGFzaFBpbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
Q1BVKEFSTTY0RSkgJiYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNlY3VyZUFSTTY0RUhhc2hQaW5zIHsKK3B1YmxpYzoK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVBdFN0YXJ0dXAoKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGFsbG9jYXRlUGluRm9yQ3VycmVudFRocmVhZCgpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVhbGxvY2F0ZVBpbkZvckN1cnJlbnRUaHJlYWQoKTsK
KyAgICB1aW50NjRfdCBwaW5Gb3JDdXJyZW50VGhyZWFkKCk7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBudW1FbnRyaWVzUGVyUGFnZSA9IDY0OworCisgICAgc3RydWN0IEVudHJ5IHsK
KyAgICAgICAgdWludDY0X3QgcGluOworICAgICAgICB1aW50NjRfdCBrZXk7CisgICAgfTsKKwor
ICAgIHN0cnVjdCBhbGlnbmFzKGFsaWdub2YoRW50cnkpKSBQYWdlIHsKKyAgICAgICAgUGFnZSgp
OworCisgICAgICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoKSB7IHJldHVybiBzaXpl
b2YoUGFnZSkgKyBudW1FbnRyaWVzUGVyUGFnZSAqIHNpemVvZihFbnRyeSk7IH0KKworICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXNrID0gbnVtRW50cmllc1BlclBhZ2UgLSAxOwor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KGhhc09uZUJpdFNldChudW1FbnRyaWVzUGVyUGFnZSkpOwor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KCEhbWFzayk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoISht
YXNrICYgbnVtRW50cmllc1BlclBhZ2UpKTsKKworICAgICAgICBBTFdBWVNfSU5MSU5FIEVudHJ5
JiBlbnRyeShzaXplX3QgaW5kZXgpCisgICAgICAgIHsgCisgICAgICAgICAgICByZXR1cm4gZW50
cmllcygpW2luZGV4ICYgbWFza107CisgICAgICAgIH0KKworICAgICAgICBBTFdBWVNfSU5MSU5F
IEVudHJ5JiBmYXN0RW50cnlVbmNoZWNrZWQoc2l6ZV90IGluZGV4KQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoKGluZGV4ICYgbWFzaykgPT0gaW5kZXgpOworICAgICAgICAgICAgcmV0
dXJuIGVudHJpZXMoKVtpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXRJc0luVXNlKHNpemVfdCBpbmRleCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaXNJblVzZU1hcC5zZXQoaW5kZXggJiBtYXNrKTsKKyAgICAgICAgfQorCisgICAgICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhcklzSW5Vc2Uoc2l6ZV90IGluZGV4KQorICAgICAgICB7
CisgICAgICAgICAgICBpc0luVXNlTWFwLnNldChpbmRleCAmIG1hc2ssIGZhbHNlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0luVXNlKHNpemVfdCBpbmRleCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSW5Vc2VNYXAuZ2V0KGluZGV4ICYgbWFz
ayk7CisgICAgICAgIH0KKworICAgICAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBmaW5kQ2xlYXJC
aXQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNJblVzZU1hcC5maW5kQml0KDAs
IGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlv
bj4KKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGZvckVhY2hTZXRCaXQoRnVuY3Rpb24gZnVu
Y3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlzSW5Vc2VNYXAuZm9yRWFjaFNldEJpdChm
dW5jdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBQYWdlKiBuZXh0IHsgbnVsbHB0ciB9Owor
ICAgIHByaXZhdGU6CisgICAgICAgIEVudHJ5KiBlbnRyaWVzKCkgeyByZXR1cm4gYml0d2lzZV9j
YXN0PEVudHJ5Kj4odGhpcyArIDEpOyB9CisgICAgICAgIEJpdG1hcDxudW1FbnRyaWVzUGVyUGFn
ZT4gaXNJblVzZU1hcDsKKyAgICB9OworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoUGFnZSkg
JSBhbGlnbm9mKEVudHJ5KSA9PSAwKTsKKworICAgIHN0cnVjdCBhbGlnbmFzKGFsaWdub2YoUGFn
ZSkpIE1ldGFkYXRhIHsKKyAgICAgICAgQXRvbWljPHVpbnQ2NF90PiBuZXh0UGluIHsgMSB9Owor
ICAgICAgICBBdG9taWM8dWludDMyX3Q+IGFzc2VydE5vdFJlZW50cmFudCB7IDAgfTsKKyAgICB9
OworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoTWV0YWRhdGEpICUgYWxpZ25vZihQYWdlKSA9
PSAwKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDY0X3Qga2V5Rm9yQ3VycmVudFRocmVh
ZCgpOworICAgIGJvb2wgYWxsb2NhdGVQaW5Gb3JDdXJyZW50VGhyZWFkSW1wbChjb25zdCBBYnN0
cmFjdExvY2tlciYpOworCisgICAgc3RydWN0IEZpbmRSZXN1bHQgeworICAgICAgICBFbnRyeSog
ZW50cnkgeyBudWxscHRyIH07CisgICAgICAgIHNpemVfdCBpbmRleCB7IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsKKyAgICAgICAgUGFnZSogcGFnZSB7IG51bGxwdHIgfTsK
KyAgICB9OworICAgIEZpbmRSZXN1bHQgZmluZEZpcnN0RW50cnkoKTsKKworICAgIE1ldGFkYXRh
KiBtZXRhZGF0YSgpOworICAgIGlubGluZSBQYWdlKiBmaXJzdFBhZ2UoKSB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8UGFnZSo+KG1fbWVtb3J5KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0aW9uPgorICAgIHZvaWQgZm9yRWFjaFBhZ2UoRnVuY3Rpb24pOworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgZm9yRWFjaEVudHJ5KEZ1bmN0aW9uKTsKKwor
ICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TZWN1cmVBUk02NEVIYXNoUGluc0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NlY3VyZUFSTTY0RUhh
c2hQaW5zSW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvU2VjdXJlQVJNNjRFSGFzaFBpbnNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNlY3VyZUFSTTY0RUhhc2hQaW5zLmgiCisK
KyNpZiBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworQUxX
QVlTX0lOTElORSB1aW50NjRfdCBTZWN1cmVBUk02NEVIYXNoUGluczo6a2V5Rm9yQ3VycmVudFRo
cmVhZCgpCit7CisgICAgdWludDY0X3QgcmVzdWx0OworICAgIGFzbSAoCisgICAgICAgICJtcnMg
JXhbcmVzdWx0XSwgVFBJRFJST19FTDAiCisgICAgICAgIDogW3Jlc3VsdF0gIj1yIiAocmVzdWx0
KQorICAgICAgICA6CisgICAgICAgIDoKKyAgICApOworICAgIHJldHVybiByZXN1bHQgKyAxOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CitBTFdBWVNfSU5MSU5FIHZvaWQgU2Vj
dXJlQVJNNjRFSGFzaFBpbnM6OmZvckVhY2hQYWdlKEZ1bmN0aW9uIGZ1bmN0aW9uKQoreworICAg
IGZvciAoUGFnZSogcGFnZSA9IGZpcnN0UGFnZSgpOyBwYWdlOyBwYWdlID0gcGFnZS0+bmV4dCkg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0pJVFBDKHBhZ2UpKTsKKyAgICAgICAgaWYgKGZ1
bmN0aW9uKCpwYWdlKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CitBTFdBWVNfSU5M
SU5FIHZvaWQgU2VjdXJlQVJNNjRFSGFzaFBpbnM6OmZvckVhY2hFbnRyeShGdW5jdGlvbiBmdW5j
dGlvbikKK3sKKyAgICBzaXplX3QgYmFzZUluZGV4ID0gMDsKKyAgICBmb3JFYWNoUGFnZShbJl0g
KFBhZ2UmIHBhZ2UpIHsKKyAgICAgICAgSXRlcmF0aW9uU3RhdHVzIGl0ZXJhdGlvblN0YXR1cyA9
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIHBhZ2UuZm9yRWFjaFNldEJpdChb
Jl0gKHNpemVfdCBiaXRJbmRleCkgeworICAgICAgICAgICAgRW50cnkmIGVudHJ5ID0gcGFnZS5m
YXN0RW50cnlVbmNoZWNrZWQoYml0SW5kZXgpOworICAgICAgICAgICAgQVNTRVJUKGlzSklUUEMo
JmVudHJ5KSk7CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBiYXNlSW5kZXggKyBiaXRJbmRl
eDsKKyAgICAgICAgICAgIGl0ZXJhdGlvblN0YXR1cyA9IGZ1bmN0aW9uKHBhZ2UsIGVudHJ5LCBp
bmRleCk7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0aW9uU3RhdHVzOworICAgICAgICB9KTsK
KyAgICAgICAgYmFzZUluZGV4ICs9IG51bUVudHJpZXNQZXJQYWdlOworICAgICAgICByZXR1cm4g
aXRlcmF0aW9uU3RhdHVzOworICAgIH0pOworfQorCitBTFdBWVNfSU5MSU5FIGF1dG8gU2VjdXJl
QVJNNjRFSGFzaFBpbnM6OmZpbmRGaXJzdEVudHJ5KCkgLT4gRmluZFJlc3VsdAoreworICAgIHVp
bnQ2NF90IGtleSA9IGtleUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAvLyBXZSBjYW4gY2FsbCB0
aGlzIGNvbmN1cnJlbnRseSB0byB0aGUgYml0IHZlY3RvciBiZWluZyBtb2RpZmllZAorICAgIC8v
IHNpbmNlIHdlIGVpdGhlciBjYWxsIHRoaXMgd2hlbiB3ZSdyZSBsb2NrZWQsIG9yIHdlIGNhbGwg
aXQgd2hlbgorICAgIC8vIHdlIGtub3cgdGhlIGVudHJ5IGFscmVhZHkgZXhpc3RzLiBXaGVuIHRo
ZSBlbnRyeSBhbHJlYWR5IGV4aXN0cywKKyAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGJpdCBjYW4n
dCBnZXQgZmxpcHBlZCBzcHVyaW91c2x5IGR1cmluZyBjb25jdXJyZW50CisgICAgLy8gbW9kaWZp
Y2F0aW9uLCBzbyB3ZSdyZSBndWFyYW50ZWVkIHRvIGZpbmQgdGhlIHZhbHVlLiBXZSBtaWdodCBz
ZWUKKyAgICAvLyBhbiBlbnRyeSBhcyBpdCdzIGJlaW5nIHdyaXR0ZW4gdG8sIGJ1dCB0aGF0J3Mg
YWxzbyBmaW5lLCBzaW5jZSBpdAorICAgIC8vIHdvbid0IGhhdmUgb3VyIHNhbWUga2V5LiBJdCds
bCBlaXRoZXIgYmUgemVybywgb3IgYSBkaWZmZXJlbnQga2V5LgorCisgICAgRmluZFJlc3VsdCBy
ZXN1bHQ7CisgICAgZm9yRWFjaEVudHJ5KFsmXSAoUGFnZSYgcGFnZSwgRW50cnkmIGVudHJ5LCBz
aXplX3QgaW5kZXgpIHsKKyAgICAgICAgaWYgKGVudHJ5LmtleSA9PSBrZXkpIHsKKyAgICAgICAg
ICAgIHJlc3VsdC5lbnRyeSA9ICZlbnRyeTsKKyAgICAgICAgICAgIHJlc3VsdC5wYWdlID0gJnBh
Z2U7CisgICAgICAgICAgICByZXN1bHQuaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIHJldHVy
biBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEl0ZXJh
dGlvblN0YXR1czo6Q29udGludWU7CisgICAgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IFNlY3VyZUFSTTY0RUhhc2hQaW5zOjpwaW5Gb3JDdXJy
ZW50VGhyZWFkKCkKK3sKKyAgICByZXR1cm4gZmluZEZpcnN0RW50cnkoKS5lbnRyeS0+cGluOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENQVShBUk02NEUpICYmIEVOQUJM
RShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJl
dmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCwxMyBAQAogI2luY2x1ZGUgIkNlbGxBdHRy
aWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcENl
bGwuaCIKLSNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJXZWFrU2V0Lmgi
CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVk
ZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Db3VudGluZ0xvY2suaD4KICNpbmNsdWRl
IDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4K
ICNpbmNsdWRlIDx3dGYvUGFnZUJsb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlz
aW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDEzICsyMiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJCbG9ja0RpcmVjdG9yeS5oIgotI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIKICNpbmNs
dWRlICJQcmVjaXNlQWxsb2NhdGlvbi5oIgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPHd0
Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRp
b25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyODgwMDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpbmNsdWRlICJBYnN0cmFjdFNsb3RWaXNpdG9yLmgi
CiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKLSNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMu
aD4KICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJl
dmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQ
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDE3IEBAIEJhc2VsaW5lSklUUGxh
bjo6QmFzZWxpbmVKSVRQbGFuKENvZGVCbG8KICAgICA6IEpJVFBsYW4oSklUQ29tcGlsYXRpb25N
b2RlOjpCYXNlbGluZSwgY29kZUJsb2NrKQogICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBj
b2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisjaWYgQ1BVKEFSTTY0RSkK
KyAgICBtX2ppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5hcm02NGVIYXNoKCkuZGVhbGxvY2F0ZVBp
bkZvckN1cnJlbnRUaHJlYWQoKTsKKyNlbmRpZgogICAgIG1faml0LmRvTWFpblRocmVhZFByZXBh
cmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogfQogCiBhdXRvIEJhc2VsaW5lSklUUGxhbjo6Y29tcGls
ZUluVGhyZWFkSW1wbCgpIC0+IENvbXBpbGF0aW9uUGF0aAogeworI2lmIENQVShBUk02NEUpCisg
ICAgbV9qaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuYXJtNjRlSGFzaCgpLmFsbG9jYXRlUGluRm9y
Q3VycmVudFRocmVhZEFuZEluaXRpYWxpemVIYXNoKCk7CisjZW5kaWYKICAgICBtX2ppdC5jb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAg
cmV0dXJuIEJhc2VsaW5lUGF0aDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjg4MDA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkV4
ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oIgotI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgog
I2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvRmlsZVN5
c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYv
UGFnZVJlc2VydmF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWRCbGFja1RyZWUuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJFeGVjdXRhYmxlSW5mby5oIgotI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5o
IgogI2luY2x1ZGUgIkxleGVyLmgiCiAjaW5jbHVkZSAiTW9kdWxlU2NvcGVEYXRhLmgiCiAjaW5j
bHVkZSAiTm9kZXMuaCIKQEAgLTM4LDYgKzM3LDcgQEAKICNpbmNsdWRlICJWYXJpYWJsZUVudmly
b25tZW50LmgiCiAjaW5jbHVkZSA8d3RmL0ZpeGVkVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSXRlcmF0aW9uU3RhdHVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDEwIEBAIHZv
aWQgaW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICBpZiAoIWdfanNjQ29uZmlnLnZtLmNhblVzZUpJ
VCkgewogICAgICAgICAgICAgICAgIE9wdGlvbnM6OnVzZUpJVCgpID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyNpZiBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoSklUKQorICAgICAgICAgICAg
ICAgIGdfanNjQ29uZmlnLmFybTY0ZUhhc2hQaW5zLmluaXRpYWxpemVBdFN0YXJ0dXAoKTsKKyNl
bmRpZgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIE9wdGlvbnM6OmZpbmFsaXpl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRpb25TdGF0dXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRpb25T
dGF0dXMuaAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSXRlcmF0aW9uU3RhdHVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1lbnVtIGNsYXNzIEl0ZXJhdGlvblN0YXR1cyB7Ci0gICAgQ29u
dGludWUsCi0gICAgRG9uZQotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NDb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NDb25maWcuaAkocmV2aXNpb24gMjg4MDA1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDQ29uZmlnLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJHYXRlLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgi
CiAjaW5jbHVkZSAiT3B0aW9uc0xpc3QuaCIKKyNpbmNsdWRlICJTZWN1cmVBUk02NEVIYXNoUGlu
cy5oIgogI2luY2x1ZGUgPHd0Zi9XVEZDb25maWcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05
OSw2ICsxMDAsMTAgQEAgc3RydWN0IENvbmZpZyB7CiAjaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxF
KFBUUlRBR19ERUJVR0dJTkcpCiAgICAgV1RGOjpQdHJUYWdMb29rdXAgcHRyVGFnTG9va3VwUmVj
b3JkOwogI2VuZGlmCisKKyNpZiBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoSklUKQorICAgIFNlY3Vy
ZUFSTTY0RUhhc2hQaW5zIGFybTY0ZUhhc2hQaW5zOworI2VuZGlmCiB9OwogCiAjaWYgRU5BQkxF
KFVOSUZJRURfQU5EX0ZSRUVaQUJMRV9DT05GSUdfUkVDT1JEKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAy
ODgwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTEyLDcgKzM5MTIsNiBAQCBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvCiB7CiAgICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVl
PEludGVybmFsRnVuY3Rpb24+KCk7CiAKLSAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJF
bnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgY29tcGlsYXRp
b25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7
CiAKICAgICBjb21waWxhdGlvbkNvbnRleHQucHJvY2VkdXJlID0gbWFrZVVuaXF1ZTxCMzo6UHJv
Y2VkdXJlPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg4MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQyLDcg
KzMxNDIsNiBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvCiB7CiAg
ICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CiAKLSAgICBj
b21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2Fs
bEhlbHBlcnM+KCk7CiAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0g
bWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgY29tcGlsYXRpb25Db250ZXh0LnByb2Nl
ZHVyZSA9IG1ha2VVbmlxdWU8UHJvY2VkdXJlPigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCShyZXZpc2lvbiAyODgwMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
NSw2ICsxOTUsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmCiAg
ICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAg
ICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChzaWduYXR1cmVJbmRleCk7CiAKKyAgICAgICAgbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0
aW9uSW5kZXhdLmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJz
PigpOwogICAgICAgICBhdXRvIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9IGNyZWF0
ZUpTVG9XYXNtV3JhcHBlcigqbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLmVt
YmVkZGVyRW50cnlwb2ludEpJVCwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5j
dGlvbkluZGV4KTsKICAgICAgICAgYXV0byBsaW5rQnVmZmVyID0gbWFrZVVuaXF1ZTxMaW5rQnVm
ZmVyPigqbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLmVtYmVkZGVyRW50cnlw
b2ludEpJVCwgbnVsbHB0ciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6V2FzbSwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjItMDEtMTkgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEFSTTY0RUhhc2gK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTE5Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgTGFtLgorCisgICAgICAgICogV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RG
OjpXb3JkVHlwZT46OnNldCk6CisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6Zm9yRWFjaFNldEJp
dCBjb25zdCk6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9J
dGVyYXRpb25TdGF0dXMuaDogQWRkZWQuCisKIDIwMjItMDEtMTMgIEVsbGlvdHQgV2lsbGlhbXMg
IDxlbXdAYXBwbGUuY29tPgogCiAgICAgICAgIFtYQ0J1aWxkXSBBZGQgInByb2R1Y3QgZGVwZW5k
ZW5jaWVzIiB3aGljaCBpbmZsdWVuY2Ugd29ya3NwYWNlIGJ1aWxkIG9yZGVyCkluZGV4OiBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI4ODAwNSkKKysr
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQzMyw2ICs0MzMsNyBAQAogCQk1MUYxNzUyQTFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lz
dGVudEVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyc2lzdGVu
dEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxQ0M2QjMyNEEyNzdD
MjAwNDM3N0Q2IC8qIFRyYW5zbGF0ZWRQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0ZWRQcm9jZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2QUVD
OTExRjZCNEU1QzAwNjk1RjVEIC8qIE5vVGFpbENhbGxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5vVGFpbENhbGxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUyOTVCMDA0Mjc5MjBDNTQwMDZENzQ2QSAvKiBJdGVyYXRpb25TdGF0dXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSXRlcmF0aW9uU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
QjIyOEMxMjQ1OERDODIwMDc1M0Q5MSAvKiBJQ1VIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElD
VUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTYzNDgxRkEzRTNB
MDAwMjZBNTQ1IC8qIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBmb2xkZXI7IHBhdGggPSBTY3JpcHRzOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaWduYWxzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTExNDUsNiArMTE0Niw3IEBACiAJCQkJRTMzNjY3NDkyNzIyNTUw
OTAwMjU5MTIyIC8qIEludDEyOC5jcHAgKi8sCiAJCQkJRjZENjdEMzIyNkY5MDE0MjAwNkUwMzQ5
IC8qIEludDEyOC5oICovLAogCQkJCTMzRkQ0ODExMjY1Q0IzODAwMEFCRTRGNCAvKiBJbnRlcmZl
cmVuY2VHcmFwaC5oICovLAorCQkJCTUyOTVCMDA0Mjc5MjBDNTQwMDZENzQ2QSAvKiBJdGVyYXRp
b25TdGF0dXMuaCAqLywKIAkJCQkwRjdFQjg1QjFGQThGRjQxMDBGMUFCQ0IgLyogSXNvTWFsbG9j
LmggKi8sCiAJCQkJMEY3RUI4NUMxRkE4RkY0MjAwRjFBQkNCIC8qIElzb01hbGxvY0lubGluZXMu
aCAqLywKIAkJCQk3Q0REN0ZGNzE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5o
ICovLApJbmRleDogU291cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQml0bWFwLmgJKHJldmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYvd3RmL0Jp
dG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXJyYXk+
CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRJ
bnRFeHRyYXMuaD4KQEAgLTcyLDYgKzczLDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgc3Vi
c3VtZXMoY29uc3QgQml0bWFwJikgY29uc3Q7CiAgICAgCisgICAgLy8gSWYgdGhlIGxhbWJkYSBy
ZXR1cm5zIGFuIEl0ZXJhdGlvblN0YXR1cywgd2UgdXNlIGl0LiBUaGUgbGFtYmRhIGNhbiBhbHNv
IHJldHVybgorICAgIC8vIHZvaWQsIGluIHdoaWNoIGNhc2UsIHdlJ2xsIGl0ZXJhdGUgZXZlcnkg
c2V0IGJpdC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaFNl
dEJpdChjb25zdCBGdW5jJikgY29uc3Q7CiAgICAgCkBAIC0xNjUsMTMgKzE2OCwxMyBAQCBpbmxp
bmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiB9CiAKIHRlbXBsYXRlPHNpemVf
dCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KLWlubGluZSB2b2lkIEJpdG1hcDxiaXRt
YXBTaXplLCBXb3JkVHlwZT46OnNldChzaXplX3QgbikKK0FMV0FZU19JTkxJTkUgdm9pZCBCaXRt
YXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpzZXQoc2l6ZV90IG4pCiB7CiAgICAgYml0c1tuIC8g
d29yZFNpemVdIHw9IChvbmUgPDwgKG4gJSB3b3JkU2l6ZSkpOwogfQogCiB0ZW1wbGF0ZTxzaXpl
X3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Ci1pbmxpbmUgdm9pZCBCaXRtYXA8Yml0
bWFwU2l6ZSwgV29yZFR5cGU+OjpzZXQoc2l6ZV90IG4sIGJvb2wgdmFsdWUpCitBTFdBWVNfSU5M
SU5FIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6c2V0KHNpemVfdCBuLCBib29s
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZSkKICAgICAgICAgc2V0KG4pOwpAQCAtMzgxLDcgKzM4
NCw3IEBAIGlubGluZSBib29sIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIAogdGVtcGxh
dGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KLWlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmZvckVh
Y2hTZXRCaXQoY29uc3QgRnVuYyYgZnVuYykgY29uc3QKK0FMV0FZU19JTkxJTkUgdm9pZCBCaXRt
YXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpmb3JFYWNoU2V0Qml0KGNvbnN0IEZ1bmMmIGZ1bmMp
IGNvbnN0CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKSB7CiAgICAg
ICAgIFdvcmRUeXBlIHdvcmQgPSBiaXRzW2ldOwpAQCAtMzg5LDggKzM5MiwxMyBAQCBpbmxpbmUg
dm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgc2l6ZV90IGJhc2UgPSBpICogd29yZFNpemU7CiAgICAgICAgIGZvciAoc2l6ZV90
IGogPSAwOyBqIDwgd29yZFNpemU7ICsraikgewotICAgICAgICAgICAgaWYgKHdvcmQgJiAxKQot
ICAgICAgICAgICAgICAgIGZ1bmMoYmFzZSArIGopOworICAgICAgICAgICAgaWYgKHdvcmQgJiAx
KSB7CisgICAgICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxJdGVyYXRp
b25TdGF0dXMsIGRlY2x0eXBlKGZ1bmMoYmFzZSArIGopKT4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGZ1bmMoYmFzZSArIGopID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgZnVuYyhiYXNlICsgaik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB3
b3JkID4+PSAxOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDI4ODAwNSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIElu
dGVyZmVyZW5jZUdyYXBoLmgKICAgICBJc29NYWxsb2MuaAogICAgIElzb01hbGxvY0lubGluZXMu
aAorICAgIEl0ZXJhdGlvblN0YXR1cy5oCiAgICAgSXRlcmF0b3JBZGFwdG9ycy5oCiAgICAgSXRl
cmF0b3JSYW5nZS5oCiAgICAgSlNPTlZhbHVlcy5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JdGVy
YXRpb25TdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JdGVyYXRpb25TdGF0
dXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9JdGVyYXRpb25TdGF0dXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKwor
ZW51bSBjbGFzcyBJdGVyYXRpb25TdGF0dXMgeworICAgIENvbnRpbnVlLAorICAgIERvbmUKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okl0ZXJhdGlvblN0YXR1czsK
</data>

          </attachment>
      

    </bug>

</bugzilla>