<?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>170628</bug_id>
          
          <creation_ts>2017-04-07 17:12:31 -0700</creation_ts>
          <short_desc>WebAssembly: manage memory better</short_desc>
          <delta_ts>2017-04-17 11:25:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=163600</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=170218</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=169892</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=169882</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=169713</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=169728</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=165704</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=165935</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>159775</blocked>
    
    <blocked>170748</blocked>
    
    <blocked>170773</blocked>
    
    <blocked>170788</blocked>
    
    <blocked>170826</blocked>
    
    <blocked>170690</blocked>
    
    <blocked>170751</blocked>
    
    <blocked>170774</blocked>
    
    <blocked>170825</blocked>
    
    <blocked>170832</blocked>
    
    <blocked>170909</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jbedard</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1295554</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-07 17:12:31 -0700</bug_when>
    <thetext>We could do way better with how we manage fast memories. I&apos;ve got an upcoming patch which does a bunch of stuff to improve this situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295556</commentid>
    <comment_count>1</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-07 17:13:00 -0700</bug_when>
    <thetext>*** Bug 163600 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295558</commentid>
    <comment_count>2</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-07 17:13:19 -0700</bug_when>
    <thetext>*** Bug 170218 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295560</commentid>
    <comment_count>3</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-07 17:13:28 -0700</bug_when>
    <thetext>*** Bug 169892 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295562</commentid>
    <comment_count>4</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-07 17:13:38 -0700</bug_when>
    <thetext>*** Bug 169882 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295564</commentid>
    <comment_count>5</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-07 17:13:55 -0700</bug_when>
    <thetext>*** Bug 169713 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295566</commentid>
    <comment_count>6</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-07 17:14:23 -0700</bug_when>
    <thetext>*** Bug 169728 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295568</commentid>
    <comment_count>7</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-07 17:14:32 -0700</bug_when>
    <thetext>*** Bug 165704 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295570</commentid>
    <comment_count>8</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-07 17:14:42 -0700</bug_when>
    <thetext>*** Bug 165935 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295597</commentid>
    <comment_count>9</comment_count>
      <attachid>306558</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-07 17:54:34 -0700</bug_when>
    <thetext>Created attachment 306558
preliminary patch

Here&apos;s a first stab at it. There are a bunch more things to do, but the big parts are in place and could be reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296056</commentid>
    <comment_count>10</comment_count>
      <attachid>306710</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-10 10:52:20 -0700</bug_when>
    <thetext>Created attachment 306710
add multi-agent test

Still WIP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296139</commentid>
    <comment_count>11</comment_count>
      <attachid>306738</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-10 13:54:45 -0700</bug_when>
    <thetext>Created attachment 306738
tune GC after discussing with Fil

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296209</commentid>
    <comment_count>12</comment_count>
      <attachid>306754</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-10 16:27:21 -0700</bug_when>
    <thetext>Created attachment 306754
Updates

A few fixes, and after discussion with Fil we&apos;re back to calling vm.heap.collectAllGarbage(); when we fail getting a memory from the cache. On my desktop the GC thread was getting behind if I had something else (like a compile) running, and I wasn&apos;t reliably getting fast memories. This update makes it 100% reliable that we&apos;ll get fast memories on my desktop.

This is the test I ran:

const memories = 128;
const verbose = true;
const initial = 1;

let types = {};

for (let m = 0; m &lt; memories; ++m) {
    let memory = new WebAssembly.Memory({ initial: initial });
    let type = WebAssemblyMemoryMode(memory);
    types[type] = types[type] ? types[type] + 1 : 1;
}

if (verbose) {
    let got = &quot;Got: &quot;;
    for (let p in types)
        got += ` ${types[p]}: ${p}`;
    print(got);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296271</commentid>
    <comment_count>13</comment_count>
      <attachid>306773</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-10 21:29:21 -0700</bug_when>
    <thetext>Created attachment 306773
Small fix

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296602</commentid>
    <comment_count>14</comment_count>
      <attachid>306873</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-11 16:48:32 -0700</bug_when>
    <thetext>Created attachment 306873
patch

Ready for review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296603</commentid>
    <comment_count>15</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-11 16:51:13 -0700</bug_when>
    <thetext>Attachment 306873 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:85:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:141:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:285:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:305:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:558:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.h:64:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.h:89:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 7 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296636</commentid>
    <comment_count>16</comment_count>
      <attachid>306873</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-11 21:11:14 -0700</bug_when>
    <thetext>Comment on attachment 306873
patch

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

r- on removal of locking for memories, until convinced otherwise. Also, have some nits.

&gt; JSTests/wasm/function-tests/memory-access-past-4gib.js:61
&gt; +    const memory = new WebAssembly.Memory(memoryDeclaration);
&gt; +    if (verbose)
&gt; +        print(WebAssemblyMemoryMode(memory));

Why not move this out of the loop?

&gt; Source/JavaScriptCore/ChangeLog:31
&gt; +        watermark of fast memories was allocated.

Maybe we should have a system where Wasm memories get unmapped if enough GCs happen without them reentering use.

&gt; Source/JavaScriptCore/ChangeLog:50
&gt; +        on iOS. Once we fix th above issues we&apos;ll want to re-visit and

typo: th =&gt; the

&gt; Source/JavaScriptCore/ChangeLog:64
&gt; +        * b3/B3LowerToAir.cpp: fix a baaaaddd bug where unsigned-&gt;signed
&gt; +        conversion allowed out-of-bounds reads by -2GiB. I&apos;ll follow-up in
&gt; +        bug #170692 to prevent this type of bug once and for all.

Interesting, I&apos;m surprised that no tests caught this.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:3177
&gt; +                RELEASE_ASSERT(limitValue &lt;= value-&gt;redzoneLimit());

I would make this a debug assert.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:353
&gt; +                RELEASE_ASSERT(m_memorySizeGPR == pinnedGPR);
&gt; +                break;
&gt; +            case MemoryMode::Signaling:
&gt; +                RELEASE_ASSERT(InvalidGPRReg == pinnedGPR);
&gt; +                break;
&gt; +            case MemoryMode::NumberOfMemoryModes:
&gt; +                RELEASE_ASSERT_NOT_REACHED();

Nit: I&apos;m not sure these need to be release asserts. It seems unlikely this will catch any release bugs in practice. This function might also be called many times.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:51
&gt; +constexpr size_t fastMemoryCacheHardLimit { 16};

nit: { 16} =&gt; { 16 }

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:58
&gt; +std::atomic&lt;void*&gt; fastMemoryCache[fastMemoryCacheHardLimit] = { ATOMIC_VAR_INIT(nullptr) };
&gt; +std::atomic&lt;void*&gt; currentlyActiveFastMemories[fastMemoryAllocationSoftLimit] = { ATOMIC_VAR_INIT(nullptr) };
&gt; +std::atomic&lt;size_t&gt; currentlyAllocatedFastMemories = ATOMIC_VAR_INIT(0);
&gt; +std::atomic&lt;size_t&gt; observedMaximumFastMemory = ATOMIC_VAR_INIT(0);

I&apos;m not sure I see what the real advantage of not using a lock here. It feels like it just makes the other code more complicated. It seems really unlikely that we are going to be allocating more than one memory at the same time in different threads. Even if we are, we potentially do a full GC anyway, so we can&apos;t be too worried about a latency problem here.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:124
&gt; +            dataLogLnIf(verbose &amp;&amp; memory, &quot;tryGetFastMemory waited on GC and retried successfully&quot;);

How is this ever true?

&gt; Websites/webkit.org/docs/b3/intermediate-representation.html:661
&gt;          WasmBoundsCheckValue class.&lt;/dd&gt;

You should update this to comment on the InvalidGPR case and the maximum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296649</commentid>
    <comment_count>17</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-11 22:02:18 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #16)
&gt; Comment on attachment 306873 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=306873&amp;action=review
&gt; 
&gt; r- on removal of locking for memories, until convinced otherwise. Also, have
&gt; some nits.

I removed locking for a few reasons which I should better describe.

The main one is that I&apos;d rather not grab a lock in a signal handler. It&apos;s unlikely to cause badness here given the scope of this lock, but is generally a bad idea because in general signals should happen when we&apos;ve messed up... except here, we&apos;re doing it on purpose, which doesn&apos;t mean we won&apos;t mess up elsewhere! This will get more complicated once we add support for multiple threads sharing memories and being able to grow their memories. Right now I think it&apos;s benign, but I&apos;d rather not have to concern myself with this.

It seems weird to acquire a lock for the GC as well. I guess we could make the watermark update under the lock, and the read racy.

I want to perform this initialization super early in the process. That&apos;s my main reasoning for moving to a static array (well, and simplicity).

So it&apos;s not about speed or reduced contention. In fact, I&apos;d use something else than a FIFO if these were a concern. I stayed with a FIFO because it&apos;s super easy: visit the bounded list from start to finish, until we find what we want.

So I think this approach is better, not because it&apos;s faster or scales more (we&apos;re about to do syscalls anyways), but because it&apos;s a statically-sized array traversal, nothing more.

I should update the ChangeLog with that info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296745</commentid>
    <comment_count>18</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-12 09:18:14 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #17)
&gt; (In reply to Keith Miller from comment #16)
&gt; &gt; Comment on attachment 306873 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=306873&amp;action=review
&gt; &gt; 
&gt; &gt; r- on removal of locking for memories, until convinced otherwise. Also, have
&gt; &gt; some nits.
&gt; 
&gt; I removed locking for a few reasons which I should better describe.
&gt; 
&gt; The main one is that I&apos;d rather not grab a lock in a signal handler. It&apos;s
&gt; unlikely to cause badness here given the scope of this lock, but is
&gt; generally a bad idea because in general signals should happen when we&apos;ve
&gt; messed up... except here, we&apos;re doing it on purpose, which doesn&apos;t mean we
&gt; won&apos;t mess up elsewhere! This will get more complicated once we add support
&gt; for multiple threads sharing memories and being able to grow their memories.
&gt; Right now I think it&apos;s benign, but I&apos;d rather not have to concern myself
&gt; with this.
&gt; 
&gt; It seems weird to acquire a lock for the GC as well. I guess we could make
&gt; the watermark update under the lock, and the read racy.
&gt; 
&gt; I want to perform this initialization super early in the process. That&apos;s my
&gt; main reasoning for moving to a static array (well, and simplicity).
&gt; 
&gt; So it&apos;s not about speed or reduced contention. In fact, I&apos;d use something
&gt; else than a FIFO if these were a concern. I stayed with a FIFO because it&apos;s
&gt; super easy: visit the bounded list from start to finish, until we find what
&gt; we want.
&gt; 
&gt; So I think this approach is better, not because it&apos;s faster or scales more
&gt; (we&apos;re about to do syscalls anyways), but because it&apos;s a statically-sized
&gt; array traversal, nothing more.
&gt; 
&gt; I should update the ChangeLog with that info.

Forgot to say: the original reason I wasn&apos;t thrilled by this was that the fast memory code uses CRASH() when things go bad, and in release the following happens:

    *(int *)(uintptr_t)0xbbadbeef = 0;

That&apos;s great for backtraces... except it&apos;s a segfault, so the signal handler will be called first, and try to determine how bad 0xbbadbeef really is, which will acquire the fast memory lock. If we already held it then we deadlock, don&apos;t get a crash report, and get a bad user experience.

There are 3 possible fixes to this:

 1. Don&apos;t acquire a lock when figuring out whether the address is in range.
 2. Always release the lock before CRASH().
 3. Don&apos;t use locks.

I think they&apos;re all manageable, but I think 3. is the hardest to mess up in that way later.

I agree, though, that atomics are harder than locks. I tried to keep it simple with a FIFO, but I can add more comments and details in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296768</commentid>
    <comment_count>19</comment_count>
      <attachid>306919</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-12 10:25:13 -0700</bug_when>
    <thetext>Created attachment 306919
patch

&gt; JSTests/wasm/function-tests/memory-access-past-4gib.js:61
&gt; &gt; +    const memory = new WebAssembly.Memory(memoryDeclaration);
&gt; &gt; +    if (verbose)
&gt; &gt; +        print(WebAssemblyMemoryMode(memory));
&gt; 
&gt; Why not move this out of the loop?

Because I want to get different memories with different declarations each time, and would rather not pre-allocate the memory before the loop.


&gt; &gt; Source/JavaScriptCore/ChangeLog:31
&gt; &gt; +        watermark of fast memories was allocated.
&gt; 
&gt; Maybe we should have a system where Wasm memories get unmapped if enough GCs
&gt; happen without them reentering use.

Filed https://bugs.webkit.org/show_bug.cgi?id=170773


&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:58
&gt; &gt; +std::atomic&lt;void*&gt; fastMemoryCache[fastMemoryCacheHardLimit] = { ATOMIC_VAR_INIT(nullptr) };
&gt; &gt; +std::atomic&lt;void*&gt; currentlyActiveFastMemories[fastMemoryAllocationSoftLimit] = { ATOMIC_VAR_INIT(nullptr) };
&gt; &gt; +std::atomic&lt;size_t&gt; currentlyAllocatedFastMemories = ATOMIC_VAR_INIT(0);
&gt; &gt; +std::atomic&lt;size_t&gt; observedMaximumFastMemory = ATOMIC_VAR_INIT(0);
&gt; 
&gt; I&apos;m not sure I see what the real advantage of not using a lock here. It
&gt; feels like it just makes the other code more complicated. It seems really
&gt; unlikely that we are going to be allocating more than one memory at the same
&gt; time in different threads. Even if we are, we potentially do a full GC
&gt; anyway, so we can&apos;t be too worried about a latency problem here.

I updated the ChangeLog with some of the details I posted before, and improved comments around this code. I also simplified some of the atomics.


&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:124
&gt; &gt; +            dataLogLnIf(verbose &amp;&amp; memory, &quot;tryGetFastMemory waited on GC and retried successfully&quot;);
&gt; 
&gt; How is this ever true?

Copy / pasta! Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296769</commentid>
    <comment_count>20</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-12 10:26:53 -0700</bug_when>
    <thetext>Attachment 306919 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:302:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:322:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/runtime/Options.h:441:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/Options.h:440:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/Options.h:440:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 5 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296784</commentid>
    <comment_count>21</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-12 11:25:19 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #18)
&gt; (In reply to JF Bastien from comment #17)
&gt; &gt; (In reply to Keith Miller from comment #16)
&gt; &gt; &gt; Comment on attachment 306873 [details]
&gt; &gt; &gt; patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=306873&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; r- on removal of locking for memories, until convinced otherwise. Also, have
&gt; &gt; &gt; some nits.
&gt; &gt; 
&gt; &gt; I removed locking for a few reasons which I should better describe.
&gt; &gt; 
&gt; &gt; The main one is that I&apos;d rather not grab a lock in a signal handler. It&apos;s
&gt; &gt; unlikely to cause badness here given the scope of this lock, but is
&gt; &gt; generally a bad idea because in general signals should happen when we&apos;ve
&gt; &gt; messed up... except here, we&apos;re doing it on purpose, which doesn&apos;t mean we
&gt; &gt; won&apos;t mess up elsewhere! This will get more complicated once we add support
&gt; &gt; for multiple threads sharing memories and being able to grow their memories.
&gt; &gt; Right now I think it&apos;s benign, but I&apos;d rather not have to concern myself
&gt; &gt; with this.
&gt; &gt; 
&gt; &gt; It seems weird to acquire a lock for the GC as well. I guess we could make
&gt; &gt; the watermark update under the lock, and the read racy.
&gt; &gt; 
&gt; &gt; I want to perform this initialization super early in the process. That&apos;s my
&gt; &gt; main reasoning for moving to a static array (well, and simplicity).
&gt; &gt; 
&gt; &gt; So it&apos;s not about speed or reduced contention. In fact, I&apos;d use something
&gt; &gt; else than a FIFO if these were a concern. I stayed with a FIFO because it&apos;s
&gt; &gt; super easy: visit the bounded list from start to finish, until we find what
&gt; &gt; we want.
&gt; &gt; 
&gt; &gt; So I think this approach is better, not because it&apos;s faster or scales more
&gt; &gt; (we&apos;re about to do syscalls anyways), but because it&apos;s a statically-sized
&gt; &gt; array traversal, nothing more.
&gt; &gt; 
&gt; &gt; I should update the ChangeLog with that info.
&gt; 
&gt; Forgot to say: the original reason I wasn&apos;t thrilled by this was that the
&gt; fast memory code uses CRASH() when things go bad, and in release the
&gt; following happens:
&gt; 
&gt;     *(int *)(uintptr_t)0xbbadbeef = 0;
&gt; 
&gt; That&apos;s great for backtraces... except it&apos;s a segfault, so the signal handler
&gt; will be called first, and try to determine how bad 0xbbadbeef really is,
&gt; which will acquire the fast memory lock. If we already held it then we
&gt; deadlock, don&apos;t get a crash report, and get a bad user experience.
Doesn&apos;t the signal handler first check if you&apos;re executing JIT code?

&gt; 
&gt; There are 3 possible fixes to this:
&gt; 
&gt;  1. Don&apos;t acquire a lock when figuring out whether the address is in range.
&gt;  2. Always release the lock before CRASH().
&gt;  3. Don&apos;t use locks.
&gt; 
&gt; I think they&apos;re all manageable, but I think 3. is the hardest to mess up in
&gt; that way later.
&gt; 
&gt; I agree, though, that atomics are harder than locks. I tried to keep it
&gt; simple with a FIFO, but I can add more comments and details in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296794</commentid>
    <comment_count>22</comment_count>
      <attachid>306919</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-04-12 12:08:30 -0700</bug_when>
    <thetext>Comment on attachment 306919
patch

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

I checked the atomic code in WasmMemory and it looks fine to me.

&gt; Source/JavaScriptCore/ChangeLog:56
&gt; +        in a signal handler because in general signals should happen when

Change *should* to *can*.

&gt; Source/JavaScriptCore/ChangeLog:58
&gt; +        raising a signal on purpose and handling it. However this which

Eliminate *which*

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:152
&gt; +            dataLogLnIf(verbose &amp;&amp; memory, &quot;tryGetFastMemory waited on GC and retried successfully&quot;);

Suggestion: Change this to dataLogLnIf(verbose, &quot;tryGetFastMemory waited on GC and retried &quot;, memory ? &quot;successfully&quot; : &quot;unsuccessfully&quot;); so that you can log how successful GC is at freeing up fast memory.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:168
&gt; +                        dataLogLnIf(verbose, &quot;tryGetFastMemory currently observer maximum is now &quot;, currentlyAllocated);

In the message, should *observer* really be *observed*?

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:345
&gt;  RefPtr&lt;Memory&gt; Memory::createImpl(VM&amp; vm, PageCount initial, PageCount maximum, std::optional&lt;MemoryMode&gt; requiredMode)

It doesn&apos;t appear that we call this anywhere where the optional&lt;MemoryMode&gt; is passed.  Seems like we could simplify the code if we eliminated this parameter and the corresponding logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296813</commentid>
    <comment_count>23</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-12 13:42:03 -0700</bug_when>
    <thetext>&gt; &gt; That&apos;s great for backtraces... except it&apos;s a segfault, so the signal handler
&gt; &gt; will be called first, and try to determine how bad 0xbbadbeef really is,
&gt; &gt; which will acquire the fast memory lock. If we already held it then we
&gt; &gt; deadlock, don&apos;t get a crash report, and get a bad user experience.
&gt; Doesn&apos;t the signal handler first check if you&apos;re executing JIT code?

Correct. We can however reach the wasm memory code from JIT code, so any future changes there mean we have to be careful.

My point still stands though: I&apos;d really rather not acquire locks in a signal handler. It&apos;s the type of code that&apos;s easy to get wrong, easy to make wrong in the future, and hard to predict because signals occur when we&apos;ve already messed something up. It&apos;s not a high-priority task to fix, but we should fix as we can. I could do so here, so I did.

I know this sounds tinfoil-hatty :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296826</commentid>
    <comment_count>24</comment_count>
      <attachid>306933</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-12 14:12:06 -0700</bug_when>
    <thetext>Created attachment 306933
patch

Address Michael&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296828</commentid>
    <comment_count>25</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-12 14:14:41 -0700</bug_when>
    <thetext>Attachment 306933 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:302:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:322:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/runtime/Options.h:441:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/Options.h:440:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/Options.h:440:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 5 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297075</commentid>
    <comment_count>26</comment_count>
      <attachid>306933</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-13 12:10:39 -0700</bug_when>
    <thetext>Comment on attachment 306933
patch

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

r=me with more comments.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:480
&gt; +    void* newMemory = tryGetSlowMemory(desiredSize);

I&apos;m not sure we want to grow to the exact size. Usually you want to double up so you can avoid the pathological case of repeatedly calling grow(1).

I would make this:

std::min(std::max(desiredSize, m_mappedCapacity * 2), 2 &lt;&lt; 32).

&gt; Websites/webkit.org/docs/b3/intermediate-representation.html:659
&gt; +        InvalidGPR in which case the out-of-bounds limit is 4GiB. In the later case a maximum parameter

nit: I think you need a comma after InvalidGPR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297123</commentid>
    <comment_count>27</comment_count>
      <attachid>307020</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-13 14:00:26 -0700</bug_when>
    <thetext>Created attachment 307020
patch

Fix html pages. I filed a bug for the other comment since I&apos;m not sure we want to do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297125</commentid>
    <comment_count>28</comment_count>
      <attachid>307020</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-13 14:02:08 -0700</bug_when>
    <thetext>Comment on attachment 307020
patch

Rejecting attachment 307020 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 307020, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in JSTests/ChangeLog contains OOPS!.

Full output: http://webkit-queues.webkit.org/results/3530417</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297127</commentid>
    <comment_count>29</comment_count>
      <attachid>307021</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-13 14:05:59 -0700</bug_when>
    <thetext>Created attachment 307021
patch

OOPS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297144</commentid>
    <comment_count>30</comment_count>
      <attachid>307021</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-13 14:48:46 -0700</bug_when>
    <thetext>Comment on attachment 307021
patch

Clearing flags on attachment: 307021

Committed r215340: &lt;http://trac.webkit.org/changeset/215340&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297145</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-13 14:48:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297159</commentid>
    <comment_count>32</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-04-13 15:27:56 -0700</bug_when>
    <thetext>This change appears to have broken the Windows build:

https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/657</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297160</commentid>
    <comment_count>33</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-13 15:30:26 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #32)
&gt; This change appears to have broken the Windows build:
&gt; 
&gt; https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/
&gt; 657

Interesting, I didn&apos;t realize that AssemblerCommon.h was included in Options.h. I can just delete the one I added and fix this build issue.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297164</commentid>
    <comment_count>34</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-13 15:33:29 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #33)
&gt; (In reply to Ryan Haddad from comment #32)
&gt; &gt; This change appears to have broken the Windows build:
&gt; &gt; 
&gt; &gt; https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/
&gt; &gt; 657
&gt; 
&gt; Interesting, I didn&apos;t realize that AssemblerCommon.h was included in
&gt; Options.h. I can just delete the one I added and fix this build issue.
&gt; 
&gt; Patch forthcoming.

https://bugs.webkit.org/show_bug.cgi?id=170832</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297297</commentid>
    <comment_count>35</comment_count>
      <attachid>307021</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-13 20:38:41 -0700</bug_when>
    <thetext>Comment on attachment 307021
patch

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

&gt; Source/JavaScriptCore/ChangeLog:52
&gt; +        Part of this good positioning is a facility to pre-allocate fast
&gt; +        memories very early at startup, before any fragmentation
&gt; +        occurs. This is currently disabled but worked extremely reliably
&gt; +        on iOS. Once we fix the above issues we&apos;ll want to re-visit and
&gt; +        turn on pre-allocation.

So this is off on macOS too? If so, does it need to be checked in?

&gt; Source/JavaScriptCore/ChangeLog:70
&gt; +        This is a segfault, which our fast memory signal handler tries to
&gt; +        handle. It does so by first figuring out whether 0xbbadbeef is in
&gt; +        a fast memory region, reqiring a lock. If we CRASH() while holding
&gt; +        the lock then our thread self-deadlocks, giving us no crash report
&gt; +        and a bad user experience.

This is not an accurate description of what happens. We first check if the PC is in JIT code. That makes all the difference.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:3174
&gt; +                // We know that anything above the declared &apos;maximum&apos; will trap, so we can compare against that number. If there was no declared
&gt; +                // &apos;maximum&apos; then we still know that any access above 4GiB will trap, no need to add the redzone.

Your comment here is off by 1. It should be above or equal, not above.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:3176
&gt; +                size_t limitValue = value-&gt;maximum() ? value-&gt;maximum().bytes() : std::numeric_limits&lt;uint32_t&gt;::max();

IMO, this logic should not be in Air.
I think it&apos;s cleaner if Air/B3 don&apos;t know about Wasm data types.
I think WasmB3IRGenerator should contain this logic, and always give the WasmBoundsCheckValue a size_t maximum.
Then, you can also remove the ifdef. Even though this opcode has Wasm in the name, other users of B3 could theoretically use it.

Also, this code looks very wrong to me, and looks to have a security hole. Maybe I&apos;m wrong, but you&apos;re trusting that we&apos;ve allocated the maximum() bytes, but we might not be able to, and we might just allocate initial bytes.

&gt; Source/JavaScriptCore/b3/B3WasmBoundsCheckValue.h:69
&gt; +    JS_EXPORT_PRIVATE WasmBoundsCheckValue(Origin, Value* ptr, GPRReg pinnedGPR, unsigned offset, PageCount maximum);

See comment above, I&apos;d have this take a size_t.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:557
&gt; +        // We&apos;ve virtually mapped 4GiB+redzone fo this memory. Only the user-allocated pages are addressable, contiguously in range [0, current], and everything above is mapped PROT_NONE. We don&apos;t need to perform any explicit bounds check in the 4GiB range because WebAssembly register memory accesses are 32-bit. However WebAssembly register+immediate accesses perform the addition in 64-bit which can push an access above the 32-bit limit. The redzone will catch most small immediates, and we&apos;ll explicitly bounds check any register + large immediate access.

Typo: &quot;fo&quot; =&gt; &quot;for&quot;.
Also, style nit: We usually make really long comments multiline in JSC.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1302
&gt; +    if (!!info.memory) {
&gt; +        // Resetting the register prevents the GC from mistakenly thinking that the context is still live.
&gt; +        GPRReg baseMemory = pinnedRegs.baseMemoryPointer;
&gt; +        jit.move(CCallHelpers::TrustedImm32(0), baseMemory);
&gt; +    }

I&apos;m 99% that this literally does nothing. The loop after this is restoring callee saves, which baseMemory should be.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:69
&gt; +        webAssemblyCouldntUnmapMemoryBytes();

Style: No need for the word &quot;bytes&quot; at the end of this function name.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:81
&gt; +void zeroAndUnprotectBytes(void* start, size_t bytes)
&gt;  {
&gt; -    dataLogIf(verbose, &quot;Attempting to mmap &quot;, bytes, &quot; bytes: &quot;);
&gt; -    // FIXME: It would be nice if we had a VM tag for wasm memory. https://bugs.webkit.org/show_bug.cgi?id=163600
&gt; -    void* result = mmap(nullptr, bytes, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);
&gt; -    if (result == MAP_FAILED) {
&gt; -        dataLogLnIf(verbose, &quot;failed&quot;);
&gt; -        return false;
&gt; +    if (bytes) {
&gt; +        dataLogLnIf(verbose, &quot;Zeroing and unprotecting &quot;, bytes, &quot; from &quot;, RawPointer(start));
&gt; +        // FIXME: We could be smarter about memset / mmap / madvise. Here, we may not need to act synchronously, or maybe we can memset+unprotect smaller ranges of memory (which would pay off if not all the writable memory was actually physically backed: memset forces physical backing only to unprotect it right after). https://bugs.webkit.org/show_bug.cgi?id=170343
&gt; +        memset(start, 0, bytes);
&gt; +        if (UNLIKELY(mprotect(start, bytes, PROT_NONE)))
&gt; +            webAssemblyCouldntUnprotectMemory();
&gt;      }
&gt; -    dataLogLnIf(verbose, &quot;succeeded&quot;);
&gt; -    memory = result;
&gt; -    return true;
&gt;  }

Style nit: I wouldn&apos;t have this be its own function. It has one caller, and it&apos;s super confusing when not in the context of its caller. mprotect can fail for valid reasons, but it should not fail in this context. That context is lost when this is its own function.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:152
&gt; +            // No memory was available in the cache. Maybe waiting on GC will find a free one.
&gt; +            // FIXME collectSync(Full) and custom eager destruction of wasm memories could be better. For now use collectAllGarbage. Also, nothing tells us the current VM is holding onto fast memories. https://bugs.webkit.org/show_bug.cgi?id=170748
&gt; +            dataLogLnIf(verbose, &quot;tryGetFastMemory waiting on GC and retrying&quot;);
&gt; +            vm.heap.collectAllGarbage();
&gt; +            memory = tryGetCachedFastMemory();
&gt; +            dataLogLnIf(verbose, &quot;tryGetFastMemory waited on GC and retried &quot;, memory? &quot;successfully&quot; : &quot;unseccessfully&quot;);

This looks like a regression given your preset numbers. It looks like we&apos;ll sync GC the first time we allocate Wasm memory. We should not have this behavior. It&apos;s unfortunate WasmBench doesn&apos;t time creating a memory. Perhaps we should change that. I would suspect something like this would show up. I suspect your patch is causing us to GC more, not less.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:155
&gt; +        // The soft limit is inherently racy because checking+allocation isn&apos;t atomic. Exceeding it slightly is fine.

Why is it OK if addressIsInActiveFastMemory uses this limit? This seems slightly wrong? Or is it OK b/c of tryAddToCurrentlyActiveFastMemories?

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:195
&gt; +}

I think this function would be a lot easier to read and reason about if you just used a lock for fast memory related things. I&apos;m not sure making everything lock free will buy us anything but pain when reading this code.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:276
&gt; +    const auto startTime = MonotonicTime::now();

Please only do this if verbose.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:283
&gt; +                void* startAddress = reinterpret_cast&lt;char*&gt;(memory) + Memory::fastMappedBytes() * subMemory + subMemory;

This looks off by num subMemory. Why &quot;+ subMemory&quot;? Pretty sure this is wrong.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:315
&gt; +    const auto endTime = MonotonicTime::now();

Please only do this if verbose.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:321
&gt; +    for (size_t cacheEntry = 0; cacheEntry &lt; fastMemoryPreallocateCount; ++cacheEntry) {
&gt; +        void* startAddress = fastMemoryCache[cacheEntry].load(std::memory_order_relaxed);
&gt; +        ASSERT(startAddress);
&gt; +        dataLogLnIf(verbose, &quot;Pre-allocation of WebAssembly fast memory at &quot;, RawPointer(startAddress));
&gt; +    }

Style nit: This whole loop should only happen &quot;if !ASSERT_DISABLED&quot;. I think LLVM will do that for you, but I think doing this yourself makes the code easier to read.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:387
&gt; +            mappedCapacityBytes = initialBytes;

This case is why I think your change to B3/Air is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297393</commentid>
    <comment_count>36</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-04-14 08:38:50 -0700</bug_when>
    <thetext>This caused a regression in the Windows build.

&lt;https://trac.webkit.org/changeset/215340/webkit&gt;
&lt;https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/657&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297951</commentid>
    <comment_count>37</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-17 11:23:34 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/ChangeLog:52
&gt; &gt; +        Part of this good positioning is a facility to pre-allocate fast
&gt; &gt; +        memories very early at startup, before any fragmentation
&gt; &gt; +        occurs. This is currently disabled but worked extremely reliably
&gt; &gt; +        on iOS. Once we fix the above issues we&apos;ll want to re-visit and
&gt; &gt; +        turn on pre-allocation.
&gt; 
&gt; So this is off on macOS too? If so, does it need to be checked in?

Correct. I think it&apos;s doing exactly what we want, and the problem we encountered is orthogonal to this. When I try to fix the problem I&apos;ll need to re-enable pre-allocation, so I&apos;d rather not have to dig it back up.

&gt; &gt; Source/JavaScriptCore/ChangeLog:70
&gt; &gt; +        This is a segfault, which our fast memory signal handler tries to
&gt; &gt; +        handle. It does so by first figuring out whether 0xbbadbeef is in
&gt; &gt; +        a fast memory region, reqiring a lock. If we CRASH() while holding
&gt; &gt; +        the lock then our thread self-deadlocks, giving us no crash report
&gt; &gt; +        and a bad user experience.
&gt; 
&gt; This is not an accurate description of what happens. We first check if the
&gt; PC is in JIT code. That makes all the difference.

You are correct.


&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:3174
&gt; &gt; +                // We know that anything above the declared &apos;maximum&apos; will trap, so we can compare against that number. If there was no declared
&gt; &gt; +                // &apos;maximum&apos; then we still know that any access above 4GiB will trap, no need to add the redzone.
&gt; 
&gt; Your comment here is off by 1. It should be above or equal, not above.

I&apos;ll fix in a follow-up.


&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:3176
&gt; &gt; +                size_t limitValue = value-&gt;maximum() ? value-&gt;maximum().bytes() : std::numeric_limits&lt;uint32_t&gt;::max();
&gt; 
&gt; IMO, this logic should not be in Air.
&gt; I think it&apos;s cleaner if Air/B3 don&apos;t know about Wasm data types.
&gt; I think WasmB3IRGenerator should contain this logic, and always give the
&gt; WasmBoundsCheckValue a size_t maximum.
&gt; Then, you can also remove the ifdef. Even though this opcode has Wasm in the
&gt; name, other users of B3 could theoretically use it.

I&apos;ll fix in a follow-up.


&gt; Also, this code looks very wrong to me, and looks to have a security hole.
&gt; Maybe I&apos;m wrong, but you&apos;re trusting that we&apos;ve allocated the maximum()
&gt; bytes, but we might not be able to, and we might just allocate initial bytes.

As we discussed offline last week, no hole here. Because this is ever only used for fast memory, we know that a full 4GiB+redzone was allocated and will trap if OOB. The non-trapping area is [0-initial), and [initial,maximum) will trap (as will anything above maximum).


&gt; &gt; Source/JavaScriptCore/b3/B3WasmBoundsCheckValue.h:69
&gt; &gt; +    JS_EXPORT_PRIVATE WasmBoundsCheckValue(Origin, Value* ptr, GPRReg pinnedGPR, unsigned offset, PageCount maximum);
&gt; 
&gt; See comment above, I&apos;d have this take a size_t.

I&apos;ll fix in a follow-up.


&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:81
&gt; &gt; +void zeroAndUnprotectBytes(void* start, size_t bytes)
&gt; &gt;  {
&gt; &gt; -    dataLogIf(verbose, &quot;Attempting to mmap &quot;, bytes, &quot; bytes: &quot;);
&gt; &gt; -    // FIXME: It would be nice if we had a VM tag for wasm memory. https://bugs.webkit.org/show_bug.cgi?id=163600
&gt; &gt; -    void* result = mmap(nullptr, bytes, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);
&gt; &gt; -    if (result == MAP_FAILED) {
&gt; &gt; -        dataLogLnIf(verbose, &quot;failed&quot;);
&gt; &gt; -        return false;
&gt; &gt; +    if (bytes) {
&gt; &gt; +        dataLogLnIf(verbose, &quot;Zeroing and unprotecting &quot;, bytes, &quot; from &quot;, RawPointer(start));
&gt; &gt; +        // FIXME: We could be smarter about memset / mmap / madvise. Here, we may not need to act synchronously, or maybe we can memset+unprotect smaller ranges of memory (which would pay off if not all the writable memory was actually physically backed: memset forces physical backing only to unprotect it right after). https://bugs.webkit.org/show_bug.cgi?id=170343
&gt; &gt; +        memset(start, 0, bytes);
&gt; &gt; +        if (UNLIKELY(mprotect(start, bytes, PROT_NONE)))
&gt; &gt; +            webAssemblyCouldntUnprotectMemory();
&gt; &gt;      }
&gt; &gt; -    dataLogLnIf(verbose, &quot;succeeded&quot;);
&gt; &gt; -    memory = result;
&gt; &gt; -    return true;
&gt; &gt;  }
&gt; 
&gt; Style nit: I wouldn&apos;t have this be its own function. It has one caller, and
&gt; it&apos;s super confusing when not in the context of its caller. mprotect can
&gt; fail for valid reasons, but it should not fail in this context. That context
&gt; is lost when this is its own function.

That will change when I address 170343, that function will be standalone and be fancier, so moving it back out seems impractical.


&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:152
&gt; &gt; +            // No memory was available in the cache. Maybe waiting on GC will find a free one.
&gt; &gt; +            // FIXME collectSync(Full) and custom eager destruction of wasm memories could be better. For now use collectAllGarbage. Also, nothing tells us the current VM is holding onto fast memories. https://bugs.webkit.org/show_bug.cgi?id=170748
&gt; &gt; +            dataLogLnIf(verbose, &quot;tryGetFastMemory waiting on GC and retrying&quot;);
&gt; &gt; +            vm.heap.collectAllGarbage();
&gt; &gt; +            memory = tryGetCachedFastMemory();
&gt; &gt; +            dataLogLnIf(verbose, &quot;tryGetFastMemory waited on GC and retried &quot;, memory? &quot;successfully&quot; : &quot;unseccessfully&quot;);
&gt; 
&gt; This looks like a regression given your preset numbers. It looks like we&apos;ll
&gt; sync GC the first time we allocate Wasm memory. We should not have this
&gt; behavior. It&apos;s unfortunate WasmBench doesn&apos;t time creating a memory. Perhaps
&gt; we should change that. I would suspect something like this would show up. I
&gt; suspect your patch is causing us to GC more, not less.

Good point, I&apos;ll fix in a follow-up.


&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:155
&gt; &gt; +        // The soft limit is inherently racy because checking+allocation isn&apos;t atomic. Exceeding it slightly is fine.
&gt; 
&gt; Why is it OK if addressIsInActiveFastMemory uses this limit? This seems
&gt; slightly wrong? Or is it OK b/c of tryAddToCurrentlyActiveFastMemories?

fastMemoryAllocationSoftLimit is a constexpr which bounds the static global array. addressIsInActiveFastMemory just uses it as the upper bound of that array, there can&apos;t be more than that number actually active. There can, however, be more than that allocated if allocations race to creation. If that unlikely race happens then tryAddToCurrentlyActiveFastMemories returns false, and we begrudgingly relinquish that fast memory because even though we could use it we have no way to account for it as active (because the array is full).


&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:195
&gt; &gt; +}
&gt; 
&gt; I think this function would be a lot easier to read and reason about if you
&gt; just used a lock for fast memory related things. I&apos;m not sure making
&gt; everything lock free will buy us anything but pain when reading this code.

I&apos;d really rather avoid the lock in the signal handler.


&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:276
&gt; &gt; +    const auto startTime = MonotonicTime::now();
&gt; 
&gt; Please only do this if verbose.

In follow-up.


&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:283
&gt; &gt; +                void* startAddress = reinterpret_cast&lt;char*&gt;(memory) + Memory::fastMappedBytes() * subMemory + subMemory;
&gt; 
&gt; This looks off by num subMemory. Why &quot;+ subMemory&quot;? Pretty sure this is
&gt; wrong.

Eek, horrible copy / pasta. Follow-up.


&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:387
&gt; &gt; +            mappedCapacityBytes = initialBytes;
&gt; 
&gt; This case is why I think your change to B3/Air is wrong.

This is only for slow memories, whereas the above is only for fast memories.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306558</attachid>
            <date>2017-04-07 17:54:34 -0700</date>
            <delta_ts>2017-04-10 10:52:20 -0700</delta_ts>
            <desc>preliminary patch</desc>
            <filename>0001-fast-memories-everywhere.patch</filename>
            <type>text/plain</type>
            <size>75956</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA5ZDQ1NDdjMTNjODllZGUwZjEzOGI1NjcwY2JmNjBiNjA2ZDEyZjA0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDYgQXByIDIwMTcgMTU6MTQ6NDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBmYXN0LW1l
bW9yaWVzLWV2ZXJ5d2hlcmUKCi0tLQogSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMTMgKy0KIEpTVGVzdHMvd2FzbS9XQVNNLmpzICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDMwICsrCiAuLi4vd2FzbS9mdW5jdGlvbi10ZXN0cy9t
ZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcyB8IDEzMCArKysrKysrCiBKU1Rlc3RzL3dhc20vanMt
YXBpL2V4dGVuc2lvbi1NZW1vcnlNb2RlLmpzICAgICAgICB8ICAxNSArCiBKU1Rlc3RzL3dhc20v
dXRpbGl0aWVzLmpzICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCAgICAgICAgICB8ICAzNCArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwICAgICAgICAgICAgfCAgIDMgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcCAgICAgICAgICAgICAgIHwgICA0ICst
CiAuLi4vSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgICB8ICAy
MSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAg
fCAgMTQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcCAgICAg
ICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcCAgICAgICAg
ICAgICAgICB8ICAgMyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgICAg
ICAgICAgICAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCAg
ICAgICAgICAgICAgICAgIHwgIDEyICsKIC4uLi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuY3BwIHwgICA2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmggICAgICAgICAgICB8ICAgMyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAgMzkgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDQyMSArKysrKysrKysrKysrLS0t
LS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCAgICAgICAgICAg
IHwgIDIxICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwICAgICAgICAg
ICAgICB8ICAxMCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmggfCAgIDEgKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5jcHAgfCAgIDQgKwogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1
Y3Rvci5jcHAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmggICAg
ICAgICAgICAgICAgICAgICAgIHwgICAxIC0KIFNvdXJjZS9XVEYvd3RmL1ZNVGFncy5oICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICstCiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291
cmNlVXNhZ2VEYXRhLmNwcCAgICAgICAgICB8ICAgMyArLQogU291cmNlL1dlYkNvcmUvcGFnZS9S
ZXNvdXJjZVVzYWdlRGF0YS5oICAgICAgICAgICAgfCAgMTUgKy0KIC4uLi9wYWdlL2NvY29hL1Jl
c291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0gICAgICAgIHwgICAzICstCiAuLi4vV2ViQ29yZS9w
YWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbSB8ICAgNSArLQogLi4uL2RvY3Mv
YjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwgICAgICAgfCAgIDQgKy0KIDMxIGZp
bGVzIGNoYW5nZWQsIDY0NyBpbnNlcnRpb25zKCspLCAyMTMgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3MtcGFz
dC00Z2liLmpzCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgYi9KU1Rlc3Rz
L3dhc20vQnVpbGRlci5qcwppbmRleCA4ZmY1ZGNlLi5kZWU3ODZkIDEwMDY0NAotLS0gYS9KU1Rl
c3RzL3dhc20vQnVpbGRlci5qcworKysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcwpAQCAtMjcs
MTIgKzI3LDcgQEAgaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydC5qcyc7CiBpbXBvcnQg
KiBhcyBCdWlsZFdlYkFzc2VtYmx5IGZyb20gJ0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMn
OwogaW1wb3J0ICogYXMgTExCIGZyb20gJ0xvd0xldmVsQmluYXJ5LmpzJzsKIGltcG9ydCAqIGFz
IFdBU00gZnJvbSAnV0FTTS5qcyc7Ci0KLWNvbnN0IF90b0phdmFTY3JpcHROYW1lID0gbmFtZSA9
PiB7Ci0gICAgY29uc3QgY2FtZWxDYXNlID0gbmFtZS5yZXBsYWNlKC8oW15hLXowLTldLikvZywg
YyA9PiBjWzFdLnRvVXBwZXJDYXNlKCkpOwotICAgIGNvbnN0IENhbWVsQ2FzZSA9IGNhbWVsQ2Fz
ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNhbWVsQ2FzZS5zbGljZSgxKTsKLSAgICByZXR1
cm4gQ2FtZWxDYXNlOwotfTsKK2ltcG9ydCAqIGFzIHV0aWwgZnJvbSAndXRpbGl0aWVzLmpzJzsK
IAogY29uc3QgX2lzVmFsaWRWYWx1ZSA9ICh2YWx1ZSwgdHlwZSkgPT4gewogICAgIHN3aXRjaCAo
dHlwZSkgewpAQCAtMjI1LDcgKzIyMCw3IEBAIGNvbnN0IF9pbXBvcnRHbG9iYWxDb250aW51YXRp
b24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAgICAgICAgICAgIEVu
ZDogKCkgPT4gbmV4dEJ1aWxkZXIKICAgICAgICAgfTsKICAgICAgICAgZm9yIChsZXQgb3Agb2Yg
V0FTTS5kZXNjcmlwdGlvbi52YWx1ZV90eXBlKSB7Ci0gICAgICAgICAgICBnbG9iYWxCdWlsZGVy
W190b0phdmFTY3JpcHROYW1lKG9wKV0gPSAobW9kdWxlLCBmaWVsZCwgbXV0YWJpbGl0eSkgPT4g
eworICAgICAgICAgICAgZ2xvYmFsQnVpbGRlclt1dGlsLnRvSmF2YVNjcmlwdE5hbWUob3ApXSA9
IChtb2R1bGUsIGZpZWxkLCBtdXRhYmlsaXR5KSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0
LmlzU3RyaW5nKG1vZHVsZSwgYEltcG9ydCBnbG9iYWwgbW9kdWxlIHNob3VsZCBiZSBhIHN0cmlu
ZywgZ290ICIke21vZHVsZX0iYCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZp
ZWxkLCBgSW1wb3J0IGdsb2JhbCBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVs
ZH0iYCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG11dGFiaWxpdHksIGBJbXBv
cnQgZ2xvYmFsIG11dGFiaWxpdHkgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7bXV0YWJpbGl0
eX0iYCk7CkBAIC0zMTgsNyArMzEzLDcgQEAgY29uc3QgX2NoZWNrSW1tcyA9IChvcCwgaW1tcywg
ZXhwZWN0ZWRJbW1zLCByZXQpID0+IHsKIGNvbnN0IF9jcmVhdGVGdW5jdGlvbkJ1aWxkZXIgPSAo
ZnVuYywgYnVpbGRlciwgcHJldmlvdXNCdWlsZGVyKSA9PiB7CiAgICAgbGV0IGZ1bmN0aW9uQnVp
bGRlciA9IHt9OwogICAgIGZvciAoY29uc3Qgb3AgaW4gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGUp
IHsKLSAgICAgICAgY29uc3QgbmFtZSA9IF90b0phdmFTY3JpcHROYW1lKG9wKTsKKyAgICAgICAg
Y29uc3QgbmFtZSA9IHV0aWwudG9KYXZhU2NyaXB0TmFtZShvcCk7CiAgICAgICAgIGNvbnN0IHZh
bHVlID0gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbb3BdLnZhbHVlOwogICAgICAgICBjb25zdCBy
ZXQgPSBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF1bInJldHVybiJdOwogICAgICAgICBjb25z
dCBwYXJhbSA9IFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlW29wXS5wYXJhbWV0ZXI7CkBAIC01NDIs
NyArNTM3LDcgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAg
IGZvciAobGV0IG9wIG9mIFdBU00uZGVzY3JpcHRpb24udmFsdWVfdHlwZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZ2xvYmFsQnVpbGRlcltfdG9KYXZhU2NyaXB0TmFtZShvcCldID0gKGlu
aXRWYWx1ZSwgbXV0YWJpbGl0eSkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFs
QnVpbGRlclt1dGlsLnRvSmF2YVNjcmlwdE5hbWUob3ApXSA9IChpbml0VmFsdWUsIG11dGFiaWxp
dHkpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmRhdGEucHVzaCh7IHR5cGU6
IG9wLCBvcDogb3AgKyAiLmNvbnN0IiwgbXV0YWJpbGl0eTogX25vcm1hbGl6ZU11dGFiaWxpdHko
bXV0YWJpbGl0eSksIGluaXRWYWx1ZSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihnbG9iYWxCdWlsZGVyKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH07CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vV0FTTS5qcyBiL0pTVGVz
dHMvd2FzbS9XQVNNLmpzCmluZGV4IDFiYjc5YjguLjFlNjRjYWUgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvd2FzbS9XQVNNLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9XQVNNLmpzCkBAIC00NCwzICs0NCwz
MyBAQCBleHBvcnQgY29uc3QgaXNWYWxpZEJsb2NrVHlwZSA9IHYgPT4gX2Jsb2NrVHlwZVNldC5o
YXModik7CiBleHBvcnQgY29uc3QgZXh0ZXJuYWxLaW5kVmFsdWUgPSBfbWFwVmFsdWVzKGRlc2Ny
aXB0aW9uLmV4dGVybmFsX2tpbmQpOwogZXhwb3J0IGNvbnN0IHNlY3Rpb25zID0gT2JqZWN0Lmtl
eXMoZGVzY3JpcHRpb24uc2VjdGlvbik7CiBleHBvcnQgY29uc3Qgc2VjdGlvbkVuY29kaW5nVHlw
ZSA9IGRlc2NyaXB0aW9uLnNlY3Rpb25bc2VjdGlvbnNbMF1dLnR5cGU7CisKK2V4cG9ydCBmdW5j
dGlvbiogb3Bjb2RlcyhjYXRlZ29yeSA9IHVuZGVmaW5lZCkgeworICAgIGZvciAobGV0IG9wIGlu
IGRlc2NyaXB0aW9uLm9wY29kZSkKKyAgICAgICAgaWYgKGNhdGVnb3J5ICE9PSB1bmRlZmluZWQg
JiYgZGVzY3JpcHRpb24ub3Bjb2RlW29wXS5jYXRlZ29yeSA9PT0gY2F0ZWdvcnkpCisgICAgICAg
ICAgICB5aWVsZCB7IG5hbWU6IG9wLCBvcGNvZGU6IGRlc2NyaXB0aW9uLm9wY29kZVtvcF0gfTsK
K307CitleHBvcnQgY29uc3QgbWVtb3J5QWNjZXNzSW5mbyA9IG9wID0+IHsKKyAgICAvLyAgICAg
ICAgICAgICAgICA8LS0tLS0tLS0tLS12YWx1ZVR5cGUtLS0tLS0tLS0tLT4gIDwtLS0tLS0tdHlw
ZS0tLS0tLS0+PC0tLS0tLS0tLXdpZHRoLS0tLS0tLS0+ICA8LS1zaWduLS0+CisgICAgY29uc3Qg
Y2xhc3NpZnkgPSAvKCg/OmkzMil8KD86aTY0KXwoPzpmMzIpfCg/OmY2NCkpXC4oKD86bG9hZCl8
KD86c3RvcmUpKSgoPzo4KT98KD86MTYpP3woPzozMik/KV8/KCg/OnN8dSk/KS87CisgICAgY29u
c3QgZm91bmQgPSBvcC5uYW1lLm1hdGNoKGNsYXNzaWZ5KTsKKyAgICBjb25zdCB2YWx1ZVR5cGUg
PSBmb3VuZFsxXTsKKyAgICBjb25zdCB0eXBlID0gZm91bmRbMl07CisgICAgY29uc3Qgd2lkdGgg
PSBwYXJzZUludChmb3VuZFszXSA/IGZvdW5kWzNdIDogdmFsdWVUeXBlLnNsaWNlKDEpKTsKKyAg
ICBjb25zdCBzaWduID0gKCgpID0+IHsKKyAgICAgICAgc3dpdGNoIChmb3VuZFs0XSkgeworICAg
ICAgICBjYXNlICJzIjogcmV0dXJuICJzaWduZWQiOworICAgICAgICBjYXNlICJ1IjogcmV0dXJu
ICJ1bnNpZ25lZCI7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiAiYWdub3N0aWMiOworICAgICAg
ICB9CisgICAgfSkoKTsKKyAgICByZXR1cm4geyB2YWx1ZVR5cGUsIHR5cGUsIHdpZHRoLCBzaWdu
IH07Cit9OworCitleHBvcnQgY29uc3QgY29uc3RGb3JWYWx1ZVR5cGUgPSB2YWx1ZVR5cGUgPT4g
eworICAgIGZvciAobGV0IG9wIGluIGRlc2NyaXB0aW9uLm9wY29kZSkKKyAgICAgICAgaWYgKG9w
LmVuZHNXaXRoKCIuY29uc3QiKSAmJiBkZXNjcmlwdGlvbi5vcGNvZGVbb3BdWyJyZXR1cm4iXSA9
PSB2YWx1ZVR5cGUpCisgICAgICAgICAgICByZXR1cm4gb3A7CisgICAgdGhyb3cgbmV3IEVycm9y
KGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiBubyBjb25zdCB0eXBlIGZvciAke3ZhbHVlVHlwZX1g
KTsKK307CisKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnkt
YWNjZXNzLXBhc3QtNGdpYi5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnkt
YWNjZXNzLXBhc3QtNGdpYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
MWE1ZjAzCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21l
bW9yeS1hY2Nlc3MtcGFzdC00Z2liLmpzCkBAIC0wLDAgKzEsMTMwIEBACitpbXBvcnQgQnVpbGRl
ciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3Nl
cnQuanMnOworaW1wb3J0ICogYXMgTExCIGZyb20gJy4uL0xvd0xldmVsQmluYXJ5LmpzJzsKK2lt
cG9ydCAqIGFzIFdBU00gZnJvbSAnLi4vV0FTTS5qcyc7CitpbXBvcnQgKiBhcyB1dGlsIGZyb20g
Jy4uL3V0aWxpdGllcy5qcyc7CisKK2NvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKworY29uc3QgcGFn
ZVNpemUgPSA2NCAqIDEwMjQ7Citjb25zdCBmb3VyR2lCID0gcGFnZVNpemUgKiA2NTUzNjsKK2Nv
bnN0IGluaXRpYWwgPSA2NDsKK2NvbnN0IG1heGltdW0gPSAxMjg7CisKKy8vIFdoZW4gdXNpbmcg
ZmFzdCBtZW1vcmllcywgd2UgYWxsb2NhdGUgYSByZWR6b25lIGFmdGVyIHRoZSA0R2lCIGh1Z2UK
Ky8vIGFsbG9jYXRpb24uIFRoaXMgcmVkem9uZSBpcyB1c2VkIHRvIHRyYXAgcmVnK2ltbSBhY2Nl
c3NlcyB3aGljaCBleGNlZWQKKy8vIDMyLWJpdHMuIEFueXRoaW5nIHBhc3QgNEdpQiBtdXN0IHRy
YXAsIGJ1dCB3ZSBjYW5ub3Qga25vdyBzdGF0aWNhbGx5IHRoYXQgaXQKKy8vIHdpbGwuCisKK2Nv
bnN0IG9mZnNldHMgPSBbCisgICAgMCwKKyAgICAxLAorICAgIDIsCisgICAgMTAyNCwKKyAgICBw
YWdlU2l6ZSwKKyAgICBwYWdlU2l6ZSArIHBhZ2VTaXplIC8gMiwKKyAgICBwYWdlU2l6ZSAqIDgs
CisgICAgcGFnZVNpemUgKiAxNiwKKyAgICBwYWdlU2l6ZSAqIDEyOCwKKyAgICBwYWdlU2l6ZSAq
IDUxMiwKKyAgICBmb3VyR2lCIC8gNCAtIDQsCisgICAgZm91ckdpQiAvIDQgLSAzLAorICAgIGZv
dXJHaUIgLyA0IC0gMiwKKyAgICBmb3VyR2lCIC8gNCAtIDEsCisgICAgZm91ckdpQiAvIDQsCisg
ICAgZm91ckdpQiAvIDQgKyAxLAorICAgIGZvdXJHaUIgLyA0ICsgMiwKKyAgICBmb3VyR2lCIC8g
NCArIDMsCisgICAgZm91ckdpQiAvIDQgKyA0LAorICAgIGZvdXJHaUIgLyAyIC0gNCwKKyAgICBm
b3VyR2lCIC8gMiAtIDMsCisgICAgZm91ckdpQiAvIDIgLSAyLAorICAgIGZvdXJHaUIgLyAyIC0g
MSwKKyAgICBmb3VyR2lCIC8gMiwKKyAgICBmb3VyR2lCIC8gMiArIDEsCisgICAgZm91ckdpQiAv
IDIgKyAyLAorICAgIGZvdXJHaUIgLyAyICsgMywKKyAgICBmb3VyR2lCIC8gMiArIDQsCisgICAg
KGZvdXJHaUIgLyA0KSAqIDMsCisgICAgZm91ckdpQiAtIDQsCisgICAgZm91ckdpQiAtIDMsCisg
ICAgZm91ckdpQiAtIDIsCisgICAgZm91ckdpQiAtIDEsCitdOworCitmb3IgKGxldCBtZW1vcnlE
ZWNsYXJhdGlvbiBvZiBbeyBpbml0aWFsOiBpbml0aWFsIH0sIHsgaW5pdGlhbDogaW5pdGlhbCwg
bWF4aW11bTogbWF4aW11bSB9XSkgeworICAgIGZ1bGxHQygpOworCisgICAgLy8gUmUtdXNlIGEg
c2luZ2xlIG1lbW9yeSBzbyB0ZXN0cyBhcmUgbW9yZSBsaWtlbHkgdG8gZ2V0IGEgZmFzdCBtZW1v
cnkuCisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZWNs
YXJhdGlvbik7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KFdlYkFzc2VtYmx5TWVt
b3J5TW9kZShtZW1vcnkpKTsKKyAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShtZW1vcnku
YnVmZmVyKTsKKworICAgIC8vIEVudW1lcmF0ZSBhbGwgbWVtb3J5IGFjY2VzcyB0eXBlcy4KKyAg
ICBmb3IgKGNvbnN0IG9wIG9mIFdBU00ub3Bjb2RlcygibWVtb3J5IikpIHsKKyAgICAgICAgY29u
c3QgaW5mbyA9IFdBU00ubWVtb3J5QWNjZXNzSW5mbyhvcCk7CisKKyAgICAgICAgLy8gVGhlIGFj
Y2Vzc2VzIHNob3VsZCBmYXVsdCBldmVuIGlmIG9ubHkgdGhlIGxhc3QgYnl0ZSBpcyBvZmYgdGhl
IGVuZC4KKyAgICAgICAgbGV0IHdpZ2dsZXMgPSBbMF07CisgICAgICAgIGZvciAobGV0IHdpZ2ds
ZSA9IDA7IHdpZ2dsZSAhPT0gaW5mby53aWR0aCAvIDg7ICsrd2lnZ2xlKQorICAgICAgICAgICAg
d2lnZ2xlcy5wdXNoKHdpZ2dsZSk7CisKKyAgICAgICAgbGV0IGJ1aWxkZXIgPSAobmV3IEJ1aWxk
ZXIoKSkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKS5N
ZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZWNsYXJhdGlvbikuRW5kKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCk7CisKKyAgICAgICAg
Zm9yIChsZXQgb2Zmc2V0IG9mIG9mZnNldHMpCisgICAgICAgICAgICBzd2l0Y2ggKGluZm8udHlw
ZSkgeworICAgICAgICAgICAgY2FzZSAibG9hZCI6IGJ1aWxkZXIgPSBidWlsZGVyLkZ1bmN0aW9u
KCJnZXRfIiArIG9mZnNldCk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAic3RvcmUiOiBidWls
ZGVyID0gYnVpbGRlci5GdW5jdGlvbigic2V0XyIgKyBvZmZzZXQpOyBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogdW5r
bm93biBtZW1vcnkgYWNjZXNzIHR5cGUgJHtpbmZvLnR5cGV9YCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIuRW5kKCkuQ29kZSgpOworCisgICAgICAgIGNvbnN0
IGFsaWduID0gMzsgLy8gTm8gbmVlZCB0byBiZSBwcmVjaXNlLCBpdCdzIGp1c3QgYSBoaW50Lgor
ICAgICAgICBjb25zdCBjb25zdEluc3RyID0gdXRpbC50b0phdmFTY3JpcHROYW1lKFdBU00uY29u
c3RGb3JWYWx1ZVR5cGUoaW5mby52YWx1ZVR5cGUpKTsKKyAgICAgICAgY29uc3QgaW5zdHIgPSB1
dGlsLnRvSmF2YVNjcmlwdE5hbWUob3AubmFtZSk7CisgICAgICAgIGZvciAobGV0IG9mZnNldCBv
ZiBvZmZzZXRzKQorICAgICAgICAgICAgc3dpdGNoIChpbmZvLnR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgImxvYWQiOgorICAgICAgICAgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLkZ1bmN0aW9u
KCJnZXRfIiArIG9mZnNldCwgeyBwYXJhbXM6IFsiaTMyIl0gfSkuR2V0TG9jYWwoMClbaW5zdHJd
KGFsaWduLCBvZmZzZXQpLkRyb3AoKS5FbmQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgInN0b3JlIjoKKyAgICAgICAgICAgICAgICBidWlsZGVyID0gYnVpbGRl
ci5GdW5jdGlvbigic2V0XyIgKyBvZmZzZXQsIHsgcGFyYW1zOiBbImkzMiJdIH0pLkdldExvY2Fs
KDApW2NvbnN0SW5zdHJdKDB4ZGVhZClbaW5zdHJdKGFsaWduLCBvZmZzZXQpLkVuZCgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVua25vd24gbWVtb3J5
IGFjY2VzcyB0eXBlICR7aW5mby50eXBlfWApOworICAgICAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgYnVpbGRlciA9IGJ1aWxkZXIuRW5kKCk7CisKKyAgICAgICAgY29uc3QgaW5zdGFuY2Ug
PSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpLCB7IGltcDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pOworCisg
ICAgICAgIGZvciAobGV0IG9mZnNldCBvZiBvZmZzZXRzKSB7CisgICAgICAgICAgICBmb3IgKGxl
dCB3aWdnbGUgb2Ygd2lnZ2xlcykgeworICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBM
TEIudmFydWludDMyTWF4IC0gb2Zmc2V0IC0gd2lnZ2xlOworICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBwcmludChgJHtvcC5uYW1lLnBhZFN0YXJ0KDE2
LCAnICcpfTogYmFzZSBhZGRyZXNzICR7YWRkcmVzcyA+IDAgPyAnMHgnIDogJyAgJ30ke2FkZHJl
c3MudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIGFkZHJlc3MgPiAwID8gJzAnIDogJyAnKX0gKyBv
ZmZzZXQgMHgke29mZnNldC50b1N0cmluZygxNikucGFkU3RhcnQoOCwgJzAnKX0gLSB3aWdnbGUg
JHt3aWdnbGV9ID0gZWZmZWN0aXZlIGFkZHJlc3MgMHgkeyhhZGRyZXNzICsgb2Zmc2V0IC0gd2ln
Z2xlKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsICcwJyl9YCk7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChpbmZvLnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlICJsb2FkIjoKKyAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzWyJnZXRf
IiArIG9mZnNldF0oYWRkcmVzcyksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgYE91dCBvZiBi
b3VuZHMgbWVtb3J5IGFjY2Vzc2ApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlICJzdG9yZSI6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0c1sic2V0XyIgKyBvZmZzZXRdKGFkZHJlc3MpLCBXZWJB
c3NlbWJseS5SdW50aW1lRXJyb3IsIGBPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3NgKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cg
bmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmtub3duIG1lbW9yeSBhY2Nlc3Mg
dHlwZSAke2luZm8udHlwZX1gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBmdWxsR0MoKTsKKyAgICB9CisKKyAgICAvLyBPbmx5IGNoZWNr
IHRoYXQgdGhlIG1lbW9yeSB3YXMgdW50b3VjaGVkIGF0IHRoZSB2ZXJ5IGVuZCwgYmVmb3JlIHRo
cm93aW5nIGl0IGF3YXkgZW50aXJlbHkuCisgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgYnVm
LmJ5dGVMZW5ndGg7ICsraWR4KQorICAgICAgICBhc3NlcnQuZXEoYnVmW2lkeF0sIDApOworfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcyBi
L0pTVGVzdHMvd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMKaW5kZXggOTE5MWNl
YzQuLjU2MDg1MjYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1l
bW9yeU1vZGUuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9k
ZS5qcwpAQCAtMiw2ICsyLDcgQEAgaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7
CiBpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKIAogY29uc3QgaXRlcmF0
aW9ucyA9IDMyOworY29uc3QgdmVyYm9zZSA9IGZhbHNlOwogCiAvLyBUaGlzIEFQSSBpc24ndCBw
YXJ0IG9mIFdlYkFzc2VtYmx5J3Mgb2ZmaWNpYWwgc3BlYy4gSXQgaXMgdXNlIGZvciB0ZXN0aW5n
IHdpdGhpbiB0aGUgc2hlbGwuCiAKQEAgLTIxLDYgKzIyLDggQEAgYXNzZXJ0LnRocm93cygoKSA9
PiBXZWJBc3NlbWJseU1lbW9yeU1vZGUobmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAx
LCBlbGUKIAogY29uc3QgdmFsaWRhdGVNb2RlID0gd2hhdCA9PiB7CiAgICAgY29uc3QgbW9kZSA9
IFdlYkFzc2VtYmx5TWVtb3J5TW9kZSh3aGF0KTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
cHJpbnQoYCAgICAke21vZGV9YCk7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSAiU2ln
bmFsaW5nIjoKICAgICAgICAgYnJlYWs7CkBAIC0zOSw2ICs0Miw4IEBAIGNvbnN0IGluc3RhbnRp
YXRlID0gYnVpbGRlciA9PiB7CiB9OwogCiAoZnVuY3Rpb24gdGVzdE1lbW9yeU5vTWF4KCkgewor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdE1lbW9yeU5vTWF4YCk7CiAgICAg
bGV0IG1lbW9yaWVzID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0aW9uczsg
KytpKQogICAgICAgICBtZW1vcmllcy5wdXNoKHZhbGlkYXRlTW9kZShuZXcgV2ViQXNzZW1ibHku
TWVtb3J5KHsgaW5pdGlhbDogaSB9KSkpOwpAQCAtNDgsNiArNTMsOCBAQCBjb25zdCBpbnN0YW50
aWF0ZSA9IGJ1aWxkZXIgPT4gewogZnVsbEdDKCk7CiAKIChmdW5jdGlvbiB0ZXN0TWVtb3J5KCkg
eworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdE1lbW9yeWApOwogICAgIGxl
dCBtZW1vcmllcyA9IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlvbnM7ICsr
aSkKICAgICAgICAgbWVtb3JpZXMucHVzaCh2YWxpZGF0ZU1vZGUobmV3IFdlYkFzc2VtYmx5Lk1l
bW9yeSh7IGluaXRpYWw6IGksIG1heGltdW06IGkgfSkpKTsKQEAgLTU3LDYgKzY0LDggQEAgZnVs
bEdDKCk7CiBmdWxsR0MoKTsKIAogKGZ1bmN0aW9uIHRlc3RJbnN0YW5jZU5vTWVtb3J5KCkgewor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdEluc3RhbmNlTm9NZW1vcnlgKTsK
ICAgICBsZXQgaW5zdGFuY2VzID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0
aW9uczsgKytpKSB7CiAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKQEAg
LTY2LDYgKzc1LDggQEAgZnVsbEdDKCk7CiAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFu
dGlhdGUoYnVpbGRlcik7CiAgICAgICAgIC8vIE5vLW1lbW9yeSBpbnN0YW5jZXMgc2hvdWxkIG5l
dmVyIGJlIFNpZ25hbGluZzogaXQgd291bGQgYmUgd2FzdGVmdWwuCiAgICAgICAgIGFzc2VydC5l
cShXZWJBc3NlbWJseU1lbW9yeU1vZGUoaW5zdGFuY2UpLCAiQm91bmRzQ2hlY2tpbmciKTsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBwcmludChgICAgICR7V2ViQXNzZW1ibHlN
ZW1vcnlNb2RlKGluc3RhbmNlKX1gKTsKICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2Up
OwogICAgIH0KICAgICByZXR1cm4gaW5zdGFuY2VzOwpAQCAtNzQsNiArODUsOCBAQCBmdWxsR0Mo
KTsKIGZ1bGxHQygpOwogCiAoZnVuY3Rpb24gdGVzdEluc3RhbmNlTm9NYXgoKSB7CisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIHByaW50KGB0ZXN0SW5zdGFuY2VOb01heGApOwogICAgIGxldCBp
bnN0YW5jZXMgPSBbXTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBpdGVyYXRpb25zOyArK2kp
IHsKICAgICAgICAgLy8gTm90ZTogbm90IGV4cG9ydGVkISBUaGUgaW50ZXJuYWwgQVBJIGNhbiBz
dGlsbCBhY2Nlc3MuCkBAIC04OSw2ICsxMDIsOCBAQCBmdWxsR0MoKTsKIGZ1bGxHQygpOwogCiAo
ZnVuY3Rpb24gdGVzdEluc3RhbmNlKCkgeworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmlu
dChgdGVzdEluc3RhbmNlYCk7CiAgICAgbGV0IGluc3RhbmNlcyA9IFtdOwogICAgIGZvciAobGV0
IGkgPSAwOyBpICE9IGl0ZXJhdGlvbnM7ICsraSkgewogICAgICAgICAvLyBOb3RlOiBub3QgZXhw
b3J0ZWQhIFRoZSBpbnRlcm5hbCBBUEkgY2FuIHN0aWxsIGFjY2Vzcy4KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS91dGlsaXRpZXMuanMgYi9KU1Rlc3RzL3dhc20vdXRpbGl0aWVzLmpzCmluZGV4
IDE5ZjliNGUuLmJjNjlhZDcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS91dGlsaXRpZXMuanMK
KysrIGIvSlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcwpAQCAtNzksNiArNzksMTIgQEAgY29uc3Qg
X2R1bXAgPSAod2hhdCwgbmFtZSwgcGFkID0gJyAgICAnKSA9PiB7CiAgICAgcmV0dXJuIHM7CiB9
OwogCitleHBvcnQgY29uc3QgdG9KYXZhU2NyaXB0TmFtZSA9IG5hbWUgPT4geworICAgIGNvbnN0
IGNhbWVsQ2FzZSA9IG5hbWUucmVwbGFjZSgvKFteYS16MC05XS4pL2csIGMgPT4gY1sxXS50b1Vw
cGVyQ2FzZSgpKTsKKyAgICBjb25zdCBDYW1lbENhc2UgPSBjYW1lbENhc2UuY2hhckF0KDApLnRv
VXBwZXJDYXNlKCkgKyBjYW1lbENhc2Uuc2xpY2UoMSk7CisgICAgcmV0dXJuIENhbWVsQ2FzZTsK
K307CisKIC8vIFVzZSB1bmRlcnNjb3JlIG5hbWVzIHRvIGF2b2lkIGNsYXNoaW5nIHdpdGggYnVp
bHRpbiBuYW1lcy4KIGV4cG9ydCB7CiAgICAgX2R1bXAgYXMgZHVtcCwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggODIwZDRjMS4uYjVlYzdmOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTMxNDQsMjIgKzMxNDQs
NDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQjM6Oldhc21Cb3VuZHND
aGVjazogeworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAgICAgICAgIFdhc21Cb3VuZHND
aGVja1ZhbHVlKiB2YWx1ZSA9IG1fdmFsdWUtPmFzPFdhc21Cb3VuZHNDaGVja1ZhbHVlPigpOwog
CiAgICAgICAgICAgICBWYWx1ZSogcHRyID0gdmFsdWUtPmNoaWxkKDApOwogCi0gICAgICAgICAg
ICBBcmcgdGVtcCA9IG1fY29kZS5uZXdUbXAoR1ApOwotICAgICAgICAgICAgYXBwZW5kKEluc3Qo
TW92ZTMyLCB2YWx1ZSwgdG1wKHB0ciksIHRlbXApKTsKKyAgICAgICAgICAgIEFyZyBwdHJQbHVz
SW1tID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICBhcHBlbmQoSW5zdChNb3ZlMzIs
IHZhbHVlLCB0bXAocHRyKSwgcHRyUGx1c0ltbSkpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5v
ZmZzZXQoKSkgewogICAgICAgICAgICAgICAgIGlmIChpbW0odmFsdWUtPm9mZnNldCgpKSkKLSAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW0odmFsdWUtPm9mZnNldCgpKSwgdGVt
cCk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tKHZhbHVlLT5vZmZzZXQo
KSksIHB0clBsdXNJbW0pOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBBcmcgYmlnSW1tID0gbV9jb2RlLm5ld1RtcChHUCk7CiAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSh2YWx1ZS0+b2Zmc2V0KCkpLCBiaWdJbW0pOwotICAg
ICAgICAgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIGJpZ0ltbSwgdGVtcCk7CisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZChBZGQ2NCwgYmlnSW1tLCBwdHJQbHVzSW1tKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmQoSW5zdChBaXI6Oldhc21C
b3VuZHNDaGVjaywgdmFsdWUsIHRlbXAsIEFyZyh2YWx1ZS0+cGlubmVkR1BSKCkpKSk7CisKKyAg
ICAgICAgICAgIEFyZyBsaW1pdDsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+cGlubmVkR1BSKCkg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICBsaW1pdCA9IEFyZyh2YWx1ZS0+cGlu
bmVkR1BSKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU2lnbmFs
aW5nIG1lbW9yaWVzIGRvbid0IHBpbiBhIHJlZ2lzdGVyIGJlY2F1c2Ugb25seSB0aGUgYWNjZXNz
ZXMgd2hvc2UgcmVnK2ltbSBjb3VsZCBldmVyIG92ZXJmbG93IDRHaUIrcmVkem9uZSBuZWVkIHRv
IGJlIGNoZWNrZWQsCisgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGRvbid0IHRoaW5rIHRoZXNl
IHdpbGwgYmUgZnJlcXVlbnQuIEFsbCBvdGhlciBhY2Nlc3NlcyB3aWxsIHRyYXAgZHVlIHRvIFBS
T1RfTk9ORSBwYWdlcy4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIElm
IHdlIGdvdCBoZXJlIGl0J3MgYmVjYXVzZSBhIG1lbW9yeSBhY2Nlc3MgaGFkIGEgdmVyeSBsYXJn
ZSBvZmZzZXQuIFdlIGNvdWxkIGNoZWNrIHRoYXQgaXQgZG9lc24ndCBleGNlZWQgNEdpQityZWR6
b25lIHNpbmNlIHRoYXQncworICAgICAgICAgICAgICAgIC8vIHRlY2huaWNhbGx5IHRoZSBsaW1p
dCB3ZSBuZWVkIHRvIGF2b2lkIG92ZXJmbG93aW5nLCBidXQgaXQncyBiZXR0ZXIgaWYgd2UgdXNl
IGEgc21hbGxlciBpbW1lZGlhdGUgd2hpY2ggY29kZWdlbnMgbW9yZSBlYXNpbHkuCisgICAgICAg
ICAgICAgICAgLy8gV2Uga25vdyB0aGF0IGFueXRoaW5nIGFib3ZlIHRoZSBkZWNsYXJlZCAnbWF4
aW11bScgd2lsbCB0cmFwLCBzbyB3ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgbnVtYmVyLiBJ
ZiB0aGVyZSB3YXMgbm8gZGVjbGFyZWQKKyAgICAgICAgICAgICAgICAvLyAnbWF4aW11bScgdGhl
biB3ZSBzdGlsbCBrbm93IHRoYXQgYW55IGFjY2VzcyBhYm92ZSA0R2lCIHdpbGwgdHJhcCwgbm8g
bmVlZCB0byBhZGQgdGhlIHJlZHpvbmUuCisgICAgICAgICAgICAgICAgbGltaXQgPSBtX2NvZGUu
bmV3VG1wKEdQKTsKKyAgICAgICAgICAgICAgICBzaXplX3QgbGltaXRWYWx1ZSA9IHZhbHVlLT5t
YXhpbXVtKCkgPyB2YWx1ZS0+bWF4aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGltaXRW
YWx1ZSA8PSB2YWx1ZS0+cmVkem9uZUxpbWl0KCkpOworICAgICAgICAgICAgICAgIGlmIChpbW0o
bGltaXRWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBpbW0obGltaXRW
YWx1ZSksIGxpbWl0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShsaW1pdFZhbHVlKSwgbGltaXQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYXBwZW5kKEluc3QoQWlyOjpXYXNtQm91bmRzQ2hlY2ssIHZhbHVl
LCBwdHJQbHVzSW1tLCBsaW1pdCkpOworI2Vsc2UKKyAgICAgICAgICAgIGFwcGVuZChBaXI6Ok9v
cHMpOworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxp
ZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKaW5kZXgg
NmU2YTkzZC4uY2MzYTU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cApAQCAtNDcwLDcgKzQ3MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSgh
dmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1
ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09
IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKG1fcHJv
Y2VkdXJlLmNvZGUoKS5pc1Bpbm5lZCh2YWx1ZS0+YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCkt
PnBpbm5lZEdQUigpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBpZiAodmFs
dWUtPmFzPFdhc21Cb3VuZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURShtX3Byb2NlZHVyZS5jb2RlKCkuaXNQ
aW5uZWQodmFsdWUtPmFzPFdhc21Cb3VuZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSksICgi
QXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUobV9wcm9jZWR1cmUuY29k
ZSgpLndhc21Cb3VuZHNDaGVja0dlbmVyYXRvcigpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuY3BwCmluZGV4IDhjOTEwYWEuLjY1YjE3ZTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJCM1ZhbHVl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNW
YXJpYWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNp
bmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KQEAgLTY2NCw3ICs2NjUsOCBAQCBFZmZl
Y3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgcmVzdWx0ID0gRWZmZWN0czo6Zm9y
Q2hlY2soKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXYXNtQm91bmRzQ2hlY2s6Ci0gICAg
ICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIGlmIChhczxXYXNtQm91bmRz
Q2hlY2tWYWx1ZT4oKS0+cGlubmVkR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
IHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIHJlc3VsdC5leGl0c1NpZGV3YXlz
ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBVcHNpbG9uOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwCmluZGV4IGIz
YTMyOTAuLjhhZWNjMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dh
c21Cb3VuZHNDaGVja1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIldhc21N
ZW1vcnkuaCIKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKQEAgLTM0LDEwICszNSwxMSBAQCBXYXNt
Qm91bmRzQ2hlY2tWYWx1ZTo6fldhc21Cb3VuZHNDaGVja1ZhbHVlKCkKIHsKIH0KIAotV2FzbUJv
dW5kc0NoZWNrVmFsdWU6Oldhc21Cb3VuZHNDaGVja1ZhbHVlKE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBwdHIsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkIG9mZnNldCkKK1dhc21Cb3VuZHNDaGVj
a1ZhbHVlOjpXYXNtQm91bmRzQ2hlY2tWYWx1ZShPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHRyLCBH
UFJSZWcgcGlubmVkR1BSLCB1bnNpZ25lZCBvZmZzZXQsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAg
IDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgV2FzbUJvdW5kc0NoZWNrLCBvcmlnaW4sIHB0cikKICAg
ICAsIG1fcGlubmVkR1BSKHBpbm5lZEdQUikKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAs
IG1fbWF4aW11bShtYXhpbXVtKQogewogfQogCkBAIC00Niw5ICs0OCwyMiBAQCBWYWx1ZSogV2Fz
bUJvdW5kc0NoZWNrVmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CiAgICAgcmV0dXJuIG5ldyBXYXNt
Qm91bmRzQ2hlY2tWYWx1ZSgqdGhpcyk7CiB9CiAKK3NpemVfdCBXYXNtQm91bmRzQ2hlY2tWYWx1
ZTo6cmVkem9uZUxpbWl0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9waW5uZWRHUFIgPT0gSW52
YWxpZEdQUlJlZyk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSArIFdh
c206Ok1lbW9yeTo6ZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpOworI2Vsc2UKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKIHZvaWQgV2FzbUJvdW5kc0NoZWNr
VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7Ci0gICAgb3V0LnByaW50KGNvbW1hLCAic2l6ZVJlZ2lzdGVyID0gIiwgbV9waW5uZWRH
UFIsICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBpZiAobV9waW5uZWRHUFIgPT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAicmVkem9uZUxpbWl0ID0gIiwg
cmVkem9uZUxpbWl0KCksICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBlbHNlCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgInNpemVSZWdpc3RlciA9ICIsIG1fcGlubmVkR1BSLCAiLCBv
ZmZzZXQgPSAiLCBtX29mZnNldCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgKaW5k
ZXggY2NjNTRiOC4uMTEwZTcxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAi
QjNWYWx1ZS5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIldhc21QYWdl
Q291bnQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTQ2LDggKzQ3
LDE2IEBAIHB1YmxpYzoKICAgICAKICAgICB+V2FzbUJvdW5kc0NoZWNrVmFsdWUoKTsKIAorI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICB0eXBlZGVmIFdhc206OlBhZ2VDb3VudCBQYWdlQ291
bnQ7CisjZWxzZQorICAgIHR5cGVkZWYgY2hhciBQYWdlQ291bnQ7CisjZW5kaWYKKwogICAgIEdQ
UlJlZyBwaW5uZWRHUFIoKSBjb25zdCB7IHJldHVybiBtX3Bpbm5lZEdQUjsgfQogICAgIHVuc2ln
bmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgc2l6ZV90IHJlZHpv
bmVMaW1pdCgpIGNvbnN0OworICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhpbXVtOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRl
ciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC01NywxMCArNjYsMTEgQEAgcHJv
dGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgV2FzbUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luLCBWYWx1ZSogcHRyLCBH
UFJSZWcgcGlubmVkR1BSLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IFdhc21Cb3VuZHNDaGVja1ZhbHVlKE9yaWdpbiwgVmFsdWUqIHB0ciwgR1BSUmVnIHBpbm5lZEdQ
UiwgdW5zaWduZWQgb2Zmc2V0LCBQYWdlQ291bnQgbWF4aW11bSk7CiAKICAgICBHUFJSZWcgbV9w
aW5uZWRHUFI7CiAgICAgdW5zaWduZWQgbV9vZmZzZXQ7CisgICAgUGFnZUNvdW50IG1fbWF4aW11
bTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDdXN0b20uY3BwCmluZGV4IDdlZTdmM2MuLjQ5Y2E1NGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCBi
b29sIFdhc21Cb3VuZHNDaGVja0N1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKICAgICBp
ZiAoIWluc3QuYXJnc1swXS5pc1RtcCgpICYmICFpbnN0LmFyZ3NbMF0uaXNTb21lSW1tKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBpbnN0LmFyZ3NbMV0uaXNSZWcoKTsK
KyAgICByZXR1cm4gaW5zdC5hcmdzWzFdLmlzUmVnKCkgfHwgaW5zdC5hcmdzWzFdLmlzVG1wKCkg
fHwgaW5zdC5hcmdzWzFdLmlzU29tZUltbSgpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5jcHAKaW5kZXggMDE5OTZhZi4uYTZmNjkxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5jcHAKQEAgLTE1MTg1LDcgKzE1MTg1LDggQEAgdm9pZCB0ZXN0V2FzbUJvdW5kc0NoZWNr
KHVuc2lnbmVkIG9mZnNldCkKICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICBpZiAocG9pbnRlclR5cGUoKSAhPSBJbnQzMikKICAgICAgICAgbGVmdCA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBsZWZ0KTsKLSAgICByb290LT5hcHBl
bmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsZWZ0LCBwaW5uZWQs
IG9mZnNldCk7CisgICAgV2FzbTo6UGFnZUNvdW50IG1heGltdW07CisgICAgcm9vdC0+YXBwZW5k
TmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbGVmdCwgcGlubmVkLCBv
ZmZzZXQsIG1heGltdW0pOwogICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMHg0Mik7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggM2FlZTMwMS4uMTlhY2IyNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmls
ZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgi
CisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMjUw
LDYgKzI1MSw3IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAs
IG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0KDApCiAgICAgLCBtX3NpemVCZWZvcmVMYXN0RWRl
bkNvbGxlY3QoMCkKICAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKKyAgICAsIG1f
d2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKICAgICAsIG1fYnl0
ZXNBYmFuZG9uZWRTaW5jZUxhc3RGdWxsQ29sbGVjdCgwKQogICAgICwgbV9tYXhFZGVuU2l6ZSht
X21pbkJ5dGVzUGVyQ3ljbGUpCiAgICAgLCBtX21heEhlYXBTaXplKG1fbWluQnl0ZXNQZXJDeWNs
ZSkKQEAgLTQ2Niw2ICs0NjgsMTIgQEAgdm9pZCBIZWFwOjpkZXByZWNhdGVkUmVwb3J0RXh0cmFN
ZW1vcnlTbG93Q2FzZShzaXplX3Qgc2l6ZSkKICAgICByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRl
ZFNsb3dDYXNlKHNpemUpOwogfQogCit2b2lkIEhlYXA6OnJlcG9ydFdlYkFzc2VtYmx5RmFzdE1l
bW9yaWVzQWxsb2NhdGVkKHNpemVfdCBjb3VudCkKK3sKKyAgICBkaWRBbGxvY2F0ZVdlYkFzc2Vt
Ymx5RmFzdE1lbW9yaWVzKGNvdW50KTsKKyAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7
Cit9CisKIHZvaWQgSGVhcDo6cmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKQogewogICAgIC8v
IE91ciBjbGllbnRzIGRvbid0IGtub3cgZXhhY3RseSBob3cgbXVjaCBtZW1vcnkgdGhleQpAQCAt
MjEwMyw2ICsyMTExLDcgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAg
ICBpZiAodmVyYm9zZSkgewogICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgICAgICBkYXRhTG9n
KCJieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9ICIsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUs
ICJcbiIpOworICAgICAgICBkYXRhTG9nKCJ3ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRl
ZFRoaXNDeWNsZSA9ICIsIG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3lj
bGUsICJcbiIpOwogICAgIH0KICAgICAKICAgICAvLyBDYWxjdWxhdGUgb3VyIGN1cnJlbnQgaGVh
cCBzaXplIHRocmVzaG9sZCBmb3IgdGhlIHB1cnBvc2Ugb2YgZmlndXJpbmcgb3V0IHdoZW4gd2Ug
c2hvdWxkCkBAIC0yMTgwLDYgKzIxODksNyBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRpb25M
aW1pdHMoKQogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJzaXplQWZ0ZXJMYXN0
Q29sbGVjdCA9ICIsIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QsICJcbiIpOwogICAgIG1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGUgPSAwOworICAgIG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGUgPSAwOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAg
IGRhdGFMb2coIj0+ICIsIGN1cnJlbnRIZWFwU2l6ZSAvIDEwMjQsICJrYiwgIik7CkBAIC0yMjUz
LDYgKzIyNjMsMTEgQEAgdm9pZCBIZWFwOjpkaWRBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiAgICAg
cGVyZm9ybUluY3JlbWVudChieXRlcyk7CiB9CiAKK3ZvaWQgSGVhcDo6ZGlkQWxsb2NhdGVXZWJB
c3NlbWJseUZhc3RNZW1vcmllcyhzaXplX3QgY291bnQpCit7CisgICAgbV93ZWJBc3NlbWJseUZh
c3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSArPSBjb3VudDsKK30KKwogYm9vbCBIZWFwOjpp
c1ZhbGlkQWxsb2NhdGlvbihzaXplX3QpCiB7CiAgICAgaWYgKCFpc1ZhbGlkVGhyZWFkU3RhdGUo
bV92bSkpCkBAIC0yNDU2LDcgKzI0NzEsMTUgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SWZOZWNlc3Nh
cnlPckRlZmVyKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiAgICAgICAgIGlm
IChtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIDw9IE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZSA8PSBtX21heEVkZW5TaXplKQorICAgICAgICAvLyBXZWJBc3NlbWJs
eSBmYXN0IG1lbW9yaWVzIHVzZSBsYXJnZSBhbW91bnRzIG9mIHZpcnR1YWwgbWVtb3J5IGFuZAor
ICAgICAgICAvLyB3ZSBkb24ndCBrbm93IGhvdyBtYW55IGNhbiBleGlzdCBpbiB0aGlzIHByb2Nl
c3MuIFdlIGtlZXAgdHJhY2sgb2YKKyAgICAgICAgLy8gdGhlIG1vc3QgZmFzdCBtZW1vcmllcyB0
aGF0IGhhdmUgZXhpc3RlZCBhdCBhbnkgcG9pbnQgaW4gdGltZS4gVGhlIEdDCisgICAgICAgIC8v
IHVzZXMgdGhpcyB0b3Agd2F0ZXJtYXJrIGFzIGFuIGluZGljYXRpb24gb2Ygd2hldGhlciByZWNl
bnQKKyAgICAgICAgLy8gYWxsb2NhdGlvbnMgc2hvdWxkIGNhdXNlIGEgY29sbGVjdGlvbjogZ2V0
IHRvbyBjbG9zZSBhbmQgd2UgbWF5IGJlCisgICAgICAgIC8vIGNsb3NlIHRvIHRoZSBhY3R1YWwg
bGltaXQuCisgICAgICAgIHNpemVfdCBmYXN0TWVtb3J5VGhyZXNob2xkID0gc3RkOjptYXg8c2l6
ZV90PigxLCBXYXNtOjpNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCgpIC8gMik7CisgICAgICAg
IGlmIChtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlIDw9IGZhc3RN
ZW1vcnlUaHJlc2hvbGQKKyAgICAgICAgICAgICYmIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUg
PD0gbV9tYXhFZGVuU2l6ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAppbmRleCBkMDY1NzAxLi44NWQ4YzMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCkBAIC0xOTgsNiArMTk4LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcG9y
dEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKIAorICAgIC8vIFNhbWUgYXMgYWJv
dmUsIGJ1dCBmb3IgdW5jb21taXR0ZWQgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbnMgY2F1c2Vk
IGJ5CisgICAgLy8gV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcy4gVGhpcyBpcyBjb3VudGVkIHNl
cGFyYXRlbHkgYmVjYXVzZSB2aXJ0dWFsCisgICAgLy8gbWVtb3J5IGlzIGxvZ2ljYWxseSBhIGRp
ZmZlcmVudCB0eXBlIG9mIHJlc291cmNlIHRoYW4gY29tbWl0dGVkIHBoeXNpY2FsCisgICAgLy8g
bWVtb3J5LiBXZSBjYW4gb2Z0ZW4gYWxsb2NhdGUgaHVnZSBhbW91bnRzIG9mIHZpcnR1YWwgbWVt
b3J5ICh0aGluaworICAgIC8vIGdpZ2FieXRlcykgd2l0aG91dCBhZHZlcnNlbHkgYWZmZWN0aW5n
IHJlZ3VsYXIgR0MnZCBtZW1vcnkuIEF0IHNvbWUgcG9pbnQKKyAgICAvLyB0aG91Z2gsIHRvbyBt
dWNoIHZpcnR1YWwgbWVtb3J5IGJlY29tZXMgcHJvaGliaXRpdmUgYW5kIHdlIHdhbnQgdG8KKyAg
ICAvLyBjb2xsZWN0IEdDLWFibGUgb2JqZWN0cyB3aGljaCBrZWVwIHRoaXMgdmlydHVhbCBtZW1v
cnkgYWxpdmUuCisgICAgLy8gVGhpcyBpcyBjb3VudGVkIGluIG51bWJlciBvZiBmYXN0IG1lbW9y
aWVzLCBub3QgYnl0ZXMuCisgICAgdm9pZCByZXBvcnRXZWJBc3NlbWJseUZhc3RNZW1vcmllc0Fs
bG9jYXRlZChzaXplX3QpOworCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIC8vIFVz
ZSB0aGlzIEFQSSB0byByZXBvcnQgdGhlIHN1YnNldCBvZiBleHRyYSBtZW1vcnkgdGhhdCBsaXZl
cyBvdXRzaWRlIHRoaXMgcHJvY2Vzcy4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9y
dEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOwpAQCAtMjQ3LDYgKzI1Nyw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRlbGV0ZUFsbFVubGlua2VkQ29kZUJsb2NrcyhEZWxldGVBbGxDb2RlRWZm
b3J0KTsKIAogICAgIHZvaWQgZGlkQWxsb2NhdGUoc2l6ZV90KTsKKyAgICB2b2lkIGRpZEFsbG9j
YXRlV2ViQXNzZW1ibHlGYXN0TWVtb3JpZXMoc2l6ZV90KTsKICAgICBib29sIGlzUGFnZWRPdXQo
ZG91YmxlIGRlYWRsaW5lKTsKICAgICAKICAgICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0
U3R1YlJvdXRpbmVzKCkgeyByZXR1cm4gKm1faml0U3R1YlJvdXRpbmVzOyB9CkBAIC01MjUsNiAr
NTM2LDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0
OwogCiAgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CisgICAgc2l6ZV90IG1f
d2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CiAgICAgc2l6ZV90IG1f
Ynl0ZXNBYmFuZG9uZWRTaW5jZUxhc3RGdWxsQ29sbGVjdDsKICAgICBzaXplX3QgbV9tYXhFZGVu
U2l6ZTsKICAgICBzaXplX3QgbV9tYXhIZWFwU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKaW5kZXggYmU2YjZmMS4u
N2M4NWExMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlh
bGl6ZVRocmVhZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSw3IEBACiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRl
ICJTdXBlclNhbXBsZXIuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2Fz
bVRodW5rcy5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPG11dGV4PgpA
QCAtNTgsNiArNTksOSBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAgIHN0ZDo6Y2Fs
bF9vbmNlKGluaXRpYWxpemVUaHJlYWRpbmdPbmNlRmxhZywgW117CiAgICAgICAgIFdURjo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOwogICAgICAgICBPcHRpb25zOjppbml0aWFsaXplKCk7CisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBXYXNtOjpNZW1vcnk6OmluaXRpYWxpemVQcmVh
bGxvY2F0aW9ucygpOworI2VuZGlmCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5H
KQogICAgICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6aW5pdGlhbGl6ZSgpOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggNjBjYWFlMC4uZWE1YWRm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDM3LDkgKzQz
NywxMCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHNpemUsIHdl
YkFzc2VtYmx5UGFydGlhbENvbXBpbGVMaW1pdCwgNTAwMCwgTm9ybWFsLCAiTGltaXQgb24gdGhl
IG51bWJlciBvZiBieXRlcyBhIFdhc206OlBsYW46OmNvbXBpbGUgc2hvdWxkIGF0dGVtcHQgYmVm
b3JlIGNoZWNraW5nIGZvciBvdGhlciB3b3JrLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3Nl
bWJseUIzT3B0aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5v
cm1hbCwgIkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgV2ViIEFzc2VtYmx5IG1vZHVsZXMuIikg
XAogICAgIFwKLSAgICB2KGJvb2wsIHNpbXVsYXRlV2ViQXNzZW1ibHlMb3dNZW1vcnksIGZhbHNl
LCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgTWVtb3J5IG9iamVjdCB3b24ndCBtbWFwIHRoZSBmdWxs
ICdtYXhpbXVtJyByYW5nZSBhbmQgaW5zdGVhZCB3aWxsIGFsbG9jYXRlIHRoZSBtaW5pbXVtIHJl
cXVpcmVkIGFtb3VudC4iKSBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnks
IHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBhIDMyLWJpdCBhZGRy
ZXNzIHNwYWNlIHdpdGggYSBzaWduYWwgaGFuZGxlciB0byBib3VuZHMgY2hlY2sgd2FzbSBtZW1v
cnkuIikgXAorICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdl
cywgMTI4LCBOb3JtYWwsICJXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIHVzZSA0R2lCIHZpcnR1
YWwgYWxsb2NhdGlvbnMsIHBsdXMgYSByZWR6b25lIChjb3VudGVkIGFzIG11bHRpcGxlIG9mIDY0
S2lCIFdlYkFzc2VtYmx5IHBhZ2VzKSBhdCB0aGUgZW5kIHRvIGNhdGNoIHJlZytpbW0gYWNjZXNz
ZXMgd2hpY2ggZXhjZWVkIDMyLWJpdCwgYW55dGhpbmcgYmV5b25kIHRoZSByZWR6b25lIGlzIGV4
cGxpY2l0bHkgYm91bmRzLWNoZWNrZWQiKSBcCiAgICAgdihib29sLCBjcmFzaElmV2ViQXNzZW1i
bHlDYW50RmFzdE1lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgY3Jhc2gg
aWYgd2UgY2FuJ3Qgb2J0YWluIGZhc3QgbWVtb3J5IGZvciB3YXNtLiIpIFwKKyAgICB2KHVuc2ln
bmVkLCB3ZWJBc3NlbWJseUZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50LCA0LCBOb3JtYWwsICJX
ZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIGNhbiBiZSBwcmUtYWxsb2NhdGVkIGF0IHByb2dyYW0g
c3RhcnR1cCBhbmQgcmVtYWluIGNhY2hlZCB0byBhdm9pZCBmcmFnbWVudGF0aW9uIGxlYWRpbmcg
dG8gYm91bmRzLWNoZWNrZWQgbWVtb3J5LiBUaGlzIG51bWJlciBpcyBhbiB1cHBlciBib3VuZCBv
biBpbml0aWFsIGFsbG9jYXRpb24gYXMgd2VsbCBhcyB0b3RhbCBjb3VudCBvZiBmYXN0IG1lbW9y
aWVzLiBaZXJvIG1lYW5zIG5vIHByZS1hbGxvY2F0aW9uLCBubyBjYWNoaW5nLCBhbmQgbm8gbGlt
aXQgdG8gdGhlIG51bWJlciBvZiBydW50aW1lIGFsbG9jYXRpb25zLiIpIFwKICAgICB2KGJvb2ws
IHVzZVdlYkFzc2VtYmx5RmFzdFRMUywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0
cnkgdG8gdXNlIGZhc3QgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaWYgYXZhaWxhYmxlIG9uIHRoZSBj
dXJyZW50IHBsYXRmb3JtLiIpCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDg4MmQxYzcuLjI2NzAzMzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTIyNyw2
ICsyMjcsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6
Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpOwogCisg
ICAgdm9pZCBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3Qm
KTsKKwogICAgIFZhbHVlKiBtYXRlcmlhbGl6ZVdhc21Db250ZXh0KFByb2NlZHVyZSYsIEJhc2lj
QmxvY2sqKTsKICAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmLCBCYXNpY0Js
b2NrKiwgVmFsdWUqKTsKICAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNv
bnN0IE1lbW9yeUluZm9ybWF0aW9uJiwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmLCBCYXNp
Y0Jsb2NrKik7CkBAIC0yNDgsNiArMjUwLDE1IEBAIHByaXZhdGU6CiAgICAgVmFsdWUqIG1faW5z
dGFuY2VWYWx1ZTsgLy8gRklYTUU6IG1ha2UgdGhpcyBsYXp5IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3OTIKIH07CiAKKy8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBX
ZWJBc3NlbWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2
ZSBzaWduZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCit2b2lkIEIzSVJHZW5lcmF0b3I6OmZpeHVw
UG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMyX3QmIG9mZnNldCkK
K3sKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgPiBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAg
IHB0ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmln
aW4oKSwgcHRyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgb2Zmc2V0KSk7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgfQorfQorCiBW
YWx1ZSogQjNJUkdlbmVyYXRvcjo6bWF0ZXJpYWxpemVXYXNtQ29udGV4dChQcm9jZWR1cmUmIHBy
b2MsIEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgp
KSB7CkBAIC0zMzEsNyArMzQyLDE2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgaWYg
KGluZm8ubWVtb3J5KSB7CiAgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsK
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocGlubmVkR1BSLCBtX21lbW9yeVNpemVH
UFIgPT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSW52YWxpZEdQUlJlZyA9PSBwaW5uZWRHUFIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1i
ZXJPZk1lbW9yeU1vZGVzOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hl
Y2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAgICAg
IH0pOwogICAgIH0KQEAgLTUxNywxMCArNTM3LDE5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0
R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJl
CiBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVy
KEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9m
T3BlcmF0aW9uKQogewogICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOwotICAgIGlmIChtX21v
ZGUgPT0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpIHsKKyAgICBzd2l0Y2ggKG1fbW9kZSkg
eworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgIC8vIFdlJ3Jl
IG5vdCB1c2luZyBzaWduYWwgaGFuZGxpbmcgYXQgYWxsLCB3ZSBtdXN0IHRoZXJlZm9yZSBjaGVj
ayB0aGF0IG5vIG1lbW9yeSBhY2Nlc3MgZXhjZWVkcyB0aGUgY3VycmVudCBtZW1vcnkgc2l6ZS4K
ICAgICAgICAgQVNTRVJUKG1fbWVtb3J5U2l6ZUdQUik7CiAgICAgICAgIEFTU0VSVChzaXplT2ZP
cGVyYXRpb24gKyBvZmZzZXQgPiBvZmZzZXQpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyLCBt
X21lbW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCBwb2ludGVyLCBtX21lbW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNl
dCAtIDEsIG1faW5mby5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgIC8vIFdlJ3ZlIHZpcnR1YWxseSBtYXBw
ZWQgNEdpQityZWR6b25lIGZvIHRoaXMgbWVtb3J5LiBPbmx5IHRoZSB1c2VyLWFsbG9jYXRlZCBw
YWdlcyBhcmUgYWRkcmVzc2FibGUsIGNvbnRpZ3VvdXNseSBpbiByYW5nZSBbMCwgY3VycmVudF0s
IGFuZCBldmVyeXRoaW5nIGFib3ZlIGlzIG1hcHBlZCBQUk9UX05PTkUuIFdlIGRvbid0IG5lZWQg
dG8gcGVyZm9ybSBhbnkgZXhwbGljaXQgYm91bmRzIGNoZWNrIGluIHRoZSA0R2lCIHJhbmdlIGJl
Y2F1c2UgV2ViQXNzZW1ibHkgcmVnaXN0ZXIgbWVtb3J5IGFjY2Vzc2VzIGFyZSAzMi1iaXQuIEhv
d2V2ZXIgV2ViQXNzZW1ibHkgcmVnaXN0ZXIraW1tZWRpYXRlIGFjY2Vzc2VzIHBlcmZvcm0gdGhl
IGFkZGl0aW9uIGluIDY0LWJpdCB3aGljaCBjYW4gcHVzaCBhbiBhY2Nlc3MgYWJvdmUgdGhlIDMy
LWJpdCBsaW1pdC4gVGhlIHJlZHpvbmUgd2lsbCBjYXRjaCBtb3N0IHNtYWxsIGltbWVkaWF0ZXMs
IGFuZCB3ZSdsbCBleHBsaWNpdGx5IGJvdW5kcyBjaGVjayBhbnkgcmVnaXN0ZXIgKyBsYXJnZSBp
bW1lZGlhdGUgYWNjZXNzLgorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxX
YXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlciwgSW52YWxpZEdQ
UlJlZywgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSwgbV9pbmZvLm1lbW9yeS5tYXhpbXVt
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lbW9yeU1vZGU6Ok51bWJlck9mTWVtb3J5
TW9kZXM6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAg
IHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQz
Miwgb3JpZ2luKCksIHBvaW50ZXIpOwogICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFdhc21BZGRyZXNzVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5
QmFzZUdQUik7CkBAIC01NjAsNiArNTg5LDggQEAgaW5saW5lIEIzOjpLaW5kIEIzSVJHZW5lcmF0
b3I6Om1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCkKIAogaW5saW5lIFZhbHVlKiBCM0lS
R2VuZXJhdG9yOjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIHVpbnQzMl90IG9mZnNldCkKIHsKKyAgICBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50
ZXIsIG9mZnNldCk7CisKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
MzJMb2FkOFM6IHsKICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFMpLCBvcmlnaW4oKSwgcG9pbnRlciwg
b2Zmc2V0KTsKQEAgLTY5Nyw2ICs3MjgsOCBAQCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9mU3RvcmVP
cChTdG9yZU9wVHlwZSBvcCkKIAogaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3Jl
T3AoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBl
IHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpCiB7CisgICAgZml4dXBQb2ludGVyUGx1c09mZnNldChw
b2ludGVyLCBvZmZzZXQpOworCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgU3RvcmVPcFR5
cGU6Okk2NFN0b3JlODoKICAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAppbmRleCA2
N2JiNTdkLi5iYmE0NGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9p
ZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250
ZXh0KQogICAgICAgICAgICAgYXV0byYgYWN0aXZlRmFzdE1lbW9yaWVzID0gdmlld0FjdGl2ZUZh
c3RNZW1vcmllcyhsb2NrZXIpOwogICAgICAgICAgICAgZm9yICh2b2lkKiBhY3RpdmVNZW1vcnkg
OiBhY3RpdmVGYXN0TWVtb3JpZXMpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiY2hlY2tpbmcgZmFzdCBtZW1vcnkgYXQ6ICIsIFJhd1BvaW50ZXIoYWN0aXZlTWVtb3J5
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZU1lbW9yeSA8PSBmYXVsdGluZ0FkZHJlc3Mg
JiYgZmF1bHRpbmdBZGRyZXNzIDwgc3RhdGljX2Nhc3Q8Y2hhcio+KGFjdGl2ZU1lbW9yeSkgKyBm
YXN0TWVtb3J5TWFwcGVkQnl0ZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZlTWVtb3J5
IDw9IGZhdWx0aW5nQWRkcmVzcyAmJiBmYXVsdGluZ0FkZHJlc3MgPCBzdGF0aWNfY2FzdDxjaGFy
Kj4oYWN0aXZlTWVtb3J5KSArIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgZmF1bHRlZEluQWN0aXZlRmFzdE1lbW9yeSA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeS5jcHAKaW5kZXggN2VmM2Q0Zi4uMjI0NTJjNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKQEAgLTMyLDE0NiArMzIsMjQwIEBACiAj
aW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogI2luY2x1ZGUgIldhc21UaHVua3Mu
aCIKIAotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDxhdG9taWM+CisjaW5j
bHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVk1UYWdz
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLW5hbWVzcGFjZSB7Ci1j
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KKy8vIEZJWE1FOiBXZSBjb3VsZCBiZSBzbWFy
dGVyIGFib3V0IG1lbXNldCAvIG1tYXAgLyBtYWR2aXNlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMzQzCiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgTk9fUkVUVVJO
X0RVRV9UT19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKQorLy8g
RklYTUUgY2hhbmdlIHRoaXMKK1N0YXRpY0xvY2sgbWVtb3J5TG9jazsKKworc3RhdGljIEhhc2hT
ZXQ8dm9pZCo+JiBhY3RpdmVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogewot
ICAgIENSQVNIKCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8dm9pZCo+PiBh
Y3RpdmVGYXN0TWVtb3JpZXM7CisgICAgcmV0dXJuIGFjdGl2ZUZhc3RNZW1vcmllczsKIH0KIAot
aW5saW5lIGJvb2wgbW1hcEJ5dGVzKHNpemVfdCBieXRlcywgdm9pZComIG1lbW9yeSkKK2NvbnN0
IEhhc2hTZXQ8dm9pZCo+JiB2aWV3QWN0aXZlRmFzdE1lbW9yaWVzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIpCiB7Ci0gICAgZGF0YUxvZ0lmKHZlcmJvc2UsICJBdHRlbXB0aW5nIHRvIG1t
YXAgIiwgYnl0ZXMsICIgYnl0ZXM6ICIpOwotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNl
IGlmIHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKLSAgICB2b2lkKiByZXN1bHQgPSBtbWFwKG51bGxw
dHIsIGJ5dGVzLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAg
ICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgImZhaWxlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJzdWNjZWVkZWQiKTsKLSAgICBtZW1vcnkgPSByZXN1bHQ7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIGFjdGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpOwogfQogCi1j
b25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9kZSkKK25hbWVzcGFjZSB7Citjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gdHJ1ZTsKKworLy8gQWxsb2NhdGUgZmFzdCBtZW1vcmllcyB2
ZXJ5IGVhcmx5IGF0IHByb2dyYW0gc3RhcnR1cCBhbmQgY2FjaGUgdGhlbS4gVGhlIGZhc3QgbWVt
b3JpZXMgdXNlIHNpZ25pZmljYW50IGFtb3VudHMgb2YgdmlydHVhbCB1bmNvbW1pdHRlZCBhZGRy
ZXNzIHNwYWNlLCByZWR1Y2luZyB0aGUgbGlrZWxpaG9vZCB0aGF0IHdlJ2xsIG9idGFpbiBhbnkg
aWYgd2Ugd2FpdCB0byBhbGxvY2F0ZSB0aGVtLgorLy8gV2Ugc3RpbGwgdHJ5IHRvIGFsbG9jYXRl
IGZhc3QgbWVtb3JpZXMgYXQgcnVudGltZSwgYW5kIHdpbGwgY2FjaGUgdGhlbSB3aGVuIHJlbGlu
cXVpc2hlZCB1cCB0byB0aGUgcHJlYWxsb2NhdGlvbiBsaW1pdC4KKy8vIE5vdGUgdGhhdCB0aGlz
IHN0YXRlIGlzIHBlci1wcm9jZXNzLCBub3QgcGVyLVZNLgorY29uc3RleHByIHNpemVfdCBmYXN0
TWVtb3J5Q2FjaGVIYXJkTGltaXQgPSAxNjsKK2NvbnN0ZXhwciBzaXplX3QgZmFzdE1lbW9yeUFs
bG9jYXRpb25Tb2Z0TGltaXQgPSAzMjsgLy8gUHJldmVudHMgZmlsbGluZyB1cCB0aGUgdmlydHVh
bCBhZGRyZXNzIHNwYWNlLgorc2l6ZV90IGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50IHsgMCB9
Oworc3RkOjphdG9taWM8dm9pZCo+IGZhc3RNZW1vcnlDYWNoZVtmYXN0TWVtb3J5Q2FjaGVIYXJk
TGltaXRdID0geyBBVE9NSUNfVkFSX0lOSVQobnVsbHB0cikgfTsKK3N0ZDo6YXRvbWljPHNpemVf
dD4gY3VycmVudGx5QWxsb2NhdGVkRmFzdE1lbW9yaWVzID0gQVRPTUlDX1ZBUl9JTklUKDApOwor
c3RkOjphdG9taWM8c2l6ZV90PiBvYnNlcnZlZE1heGltdW1GYXN0TWVtb3J5ID0gQVRPTUlDX1ZB
Ul9JTklUKDApOworCitORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdl
YkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKQogewotICAgIHN3aXRjaCAobW9kZSkgewot
ICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tp
bmciOwotICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7
Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9yeU1vZGVzOiBicmVhazsKLSAgICB9
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gIiI7CisgICAg
Q1JBU0goKTsKIH0KIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEZhc3RNZW1vcmllcyA9IDQ7
Ci1zdGF0aWMgdW5zaWduZWQgYWxsb2NhdGVkRmFzdE1lbW9yaWVzIHsgMCB9OwotU3RhdGljTG9j
ayBtZW1vcnlMb2NrOwotaW5saW5lIERlcXVlPHZvaWQqLCBtYXhGYXN0TWVtb3JpZXM+JiBhdmFp
bGFibGVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RMb2NrZXImKQordm9pZCogbW1hcEJ5dGVz
KHNpemVfdCBieXRlcykKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGVxdWU8dm9pZCos
IG1heEZhc3RNZW1vcmllcz4+IGF2YWlsYWJsZUZhc3RNZW1vcmllczsKLSAgICByZXR1cm4gYXZh
aWxhYmxlRmFzdE1lbW9yaWVzOworI2lmIE9TKERBUldJTikKKyAgICBpbnQgZmQgPSBWTV9UQUdf
Rk9SX1dFQkFTU0VNQkxZX01FTU9SWTsKKyNlbHNlCisgICAgaW50IGZkID0gLTE7CisjZW5kaWYK
KworICAgIHZvaWQqIGxvY2F0aW9uID0gbW1hcChudWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBN
QVBfUFJJVkFURSB8IE1BUF9BTk9OLCBmZCwgMCk7CisgICAgcmV0dXJuIGxvY2F0aW9uID09IE1B
UF9GQUlMRUQgPyBudWxscHRyIDogbG9jYXRpb247CiB9CiAKLWlubGluZSBIYXNoU2V0PHZvaWQq
PiYgYWN0aXZlRmFzdE1lbW9yaWVzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK3N0YXRpYyB2b2lk
KiB0cnlHZXRGYXN0TWVtb3J5KCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNl
dDx2b2lkKj4+IGFjdGl2ZUZhc3RNZW1vcmllczsKLSAgICByZXR1cm4gYWN0aXZlRmFzdE1lbW9y
aWVzOworICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7CisKKyAgICBpZiAoTElLRUxZKGZhc3RN
ZW1vcnlFbmFibGVkKCkpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYXN0
TWVtb3J5UHJlYWxsb2NhdGVDb3VudDsgKytpKSB7CisgICAgICAgICAgICBpZiAodm9pZCogcHJl
dmlvdXMgPSBmYXN0TWVtb3J5Q2FjaGVbaV0uZXhjaGFuZ2UobnVsbHB0ciwgc3RkOjptZW1vcnlf
b3JkZXJfYWNxX3JlbCkpIHsKKyAgICAgICAgICAgICAgICBtZW1vcnkgPSBwcmV2aW91czsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5R2V0RmFzdE1lbW9yeSByZS11
c2luZyAiLCBSYXdQb2ludGVyKG1lbW9yeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIHNvZnQgbGltaXQgaXMgaW5o
ZXJlbnRseSByYWN5IGJlY2F1c2UgY2hlY2tpbmcrYWxsb2NhdGlvbiBpc24ndCBhdG9taWMuIEV4
Y2VlZGluZyBpdCBzbGlnaHRseSBpcyBmaW5lLgorICAgICAgICBib29sIGF0QWxsb2NhdGlvblNv
ZnRMaW1pdCA9IGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcy5sb2FkKHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGF4ZWQpID49IGZhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0OworCisgICAg
ICAgIGlmICghbWVtb3J5ICYmIGF0QWxsb2NhdGlvblNvZnRMaW1pdCkgeworICAgICAgICAgICAg
bWVtb3J5ID0gbW1hcEJ5dGVzKE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkpOworICAgICAgICAg
ICAgaWYgKG1lbW9yeSkgeworICAgICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50bHlBbGxvY2F0
ZWQgPSAxICsgY3VycmVudGx5QWxsb2NhdGVkRmFzdE1lbW9yaWVzLmZldGNoX2FkZCgxLCBzdGQ6
Om1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKyAgICAgICAgICAgICAgICAvLyBSYWNlcyBpbiBvYnNl
cnZlZCBtYXhpbXVtIGRvbid0IG1hdHRlcjogaWYgd2Ugb2JzZXJ2ZWQgYSBoaWdoZXIgbWF4aW11
bSBmb3IgYW4gZXZlci1zby1zbGlnaHRseSBzbWFsbCBhbW91bnQgb2YgdGltZSB0aGVuIHNvIGJl
IGl0LgorICAgICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50T2JzZXJ2ZWRNYXhpbXVtID0gb2Jz
ZXJ2ZWRNYXhpbXVtRmFzdE1lbW9yeS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwor
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50bHlBbGxvY2F0ZWQgPiBjdXJyZW50T2JzZXJ2ZWRN
YXhpbXVtKQorICAgICAgICAgICAgICAgICAgICBvYnNlcnZlZE1heGltdW1GYXN0TWVtb3J5LnN0
b3JlKGN1cnJlbnRseUFsbG9jYXRlZCArIDEsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwor
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRGYXN0TWVtb3J5IGFs
bG9jYXRlZCAiLCBSYXdQb2ludGVyKG1lbW9yeSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKG1lbW9yeSkgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
ZW1vcnlMb2NrKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9j
a2VyKS5hZGQobWVtb3J5KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
dHJ5R2V0RmFzdE1lbW9yeSBjb3VsZG4ndCByZS11c2Ugb3IgYWxsb2NhdGUgYSBmYXN0IG1lbW9y
eSIpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Y3Jhc2hJZldlYkFzc2VtYmx5Q2Fu
dEZhc3RNZW1vcnkoKSkpCisgICAgICAgICAgICB3ZWJBc3NlbWJseUNvdWxkbnRHZXRGYXN0TWVt
b3J5KCk7CisgICAgfQorCisgICAgcmV0dXJuIG1lbW9yeTsKIH0KIAotY29uc3QgSGFzaFNldDx2
b2lkKj4mIHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tl
cikKK3N0YXRpYyB2b2lkKiB0cnlHZXRTbG93TWVtb3J5KHNpemVfdCBieXRlcykKIHsKLSAgICBy
ZXR1cm4gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcik7CisgICAgdm9pZCogbWVtb3J5ID0gbW1h
cEJ5dGVzKGJ5dGVzKTsKKyAgICBkYXRhTG9nTG5JZihtZW1vcnkgJiYgdmVyYm9zZSwgIk9idGFp
bmVkIHNsb3cgbWVtb3J5ICIsIFJhd1BvaW50ZXIobWVtb3J5KSwgIiB3aXRoIGNhcGFjaXR5ICIs
IGJ5dGVzKTsKKyAgICBkYXRhTG9nTG5JZighbWVtb3J5ICYmIHZlcmJvc2UsICJGYWlsZWQgb2J0
YWluaW5nIHNsb3cgbWVtb3J5IHdpdGggY2FwYWNpdHkgIiwgYnl0ZXMpOworICAgIHJldHVybiBt
ZW1vcnk7CiB9CiAKLWlubGluZSBib29sIHRyeUdldEZhc3RNZW1vcnkoVk0mIHZtLCB2b2lkKiYg
bWVtb3J5LCBzaXplX3QmIG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlJiBtb2RlKQorc3RhdGlj
IHZvaWQgcmVsaW5xdWlzaE1lbW9yeSh2b2lkKiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUs
IHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSBtb2RlKQogewotICAgIGF1dG8gZGVx
dWVGYXN0TWVtb3J5ID0gWyZdICgpIC0+IGJvb2wgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGV2ZW50dWFsbHkgcmV0dXJuIHRoZXNlIHRvIHRoZSBPUyBpZiB3ZSBnbyBzb21lIG51bWJl
ciBvZiBHQ3MKLSAgICAgICAgLy8gd2l0aG91dCB1c2luZyB0aGVtLgorICAgIHN3aXRjaCAobW9k
ZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGZhc3RNZW1vcnlFbmFibGVkKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXBw
ZWRDYXBhY2l0eSA9PSBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsKKworICAgICAgICAvLyBU
aGlzIG1lbW9yeSBjYW5ub3QgY2F1c2UgYSB0cmFwIGFueW1vcmUuCiAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1lbW9yeUxvY2spOwotICAgICAgICBpZiAoIWF2YWlsYWJsZUZhc3RNZW1vcmll
cyhsb2NrZXIpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbWVtb3J5ID0gYXZhaWxhYmxlRmFz
dE1lbW9yaWVzKGxvY2tlcikudGFrZUZpcnN0KCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IGFjdGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpLmFkZChtZW1vcnkpOwotICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAgICAgIG1hcHBl
ZENhcGFjaXR5ID0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzOwotICAgICAgICAgICAgbW9kZSA9IE1l
bW9yeU1vZGU6OlNpZ25hbGluZzsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBi
b29sIHJlc3VsdCA9IGFjdGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpLnJlbW92ZShtZW1vcnkpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKKworICAgICAgICAvLyBXZSBt
YXkgY2FjaGUgZmFzdCBtZW1vcmllcy4gQXNzdW1pbmcgd2Ugd2lsbCwgd2UgaGF2ZSB0byByZXNl
dCB0aGVtIGJlZm9yZSBpbnNlcnRpbmcgdGhlbSBpbnRvIHRoZSBjYWNoZS4KKyAgICAgICAgaWYg
KHdyaXRhYmxlU2l6ZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlplcm9p
bmcgYW5kIHVucHJvdGVjdGluZyBmYXN0IG1lbW9yeSAiLCBSYXdQb2ludGVyKG1lbW9yeSksICIn
cyBpbml0aWFsICIsIHdyaXRhYmxlU2l6ZSwgIiBieXRlcyIpOworICAgICAgICAgICAgbWVtc2V0
KG1lbW9yeSwgMCwgd3JpdGFibGVTaXplKTsKKyAgICAgICAgICAgIGlmIChtcHJvdGVjdChtZW1v
cnksIHdyaXRhYmxlU2l6ZSwgUFJPVF9OT05FKSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9OwogCi0gICAgYXV0byBmYWls
ID0gW10gKCkgLT4gYm9vbCB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpjcmFzaElm
V2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSgpKSkKLSAgICAgICAgICAgIHdlYkFzc2VtYmx5Q291
bGRudEdldEZhc3RNZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudDsg
KytpKSB7CisgICAgICAgICAgICB2b2lkKiBleHBlY3RlZCA9IG51bGxwdHI7CisgICAgICAgICAg
ICBpZiAoZmFzdE1lbW9yeUNhY2hlW2ldLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4cGVjdGVk
LCBtZW1vcnksIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKSB7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgInJlbGlucXVpc2hNZW1vcnkgY2FjaGVkIGZhc3QgbWVtb3J5
ICIsIFJhd1BvaW50ZXIobWVtb3J5KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKLSAgICAvLyBXZSBtaWdodCBHQyBoZXJlIHNvIHdlIHNob3Vs
ZCBiZSBob2xkaW5nIHRoZSBBUEkgbG9jay4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gc3luY3Jvbm91c2x5IHRyaWdnZXIgdGhlIEdDIGZyb20gYW5vdGhlciB0aHJlYWQuCi0g
ICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGlmIChV
TkxJS0VMWSghZmFzdE1lbW9yeUVuYWJsZWQoKSkpCi0gICAgICAgIHJldHVybiBmYWlsKCk7Cisg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJyZWxpbnF1aXNoTWVtb3J5IHVuYWJsZSB0byBj
YWNoZSBmYXN0IG1lbW9yeSwgZnJlZWluZyBpbnN0ZWFkICIsIFJhd1BvaW50ZXIobWVtb3J5KSk7
CisgICAgICAgIGlmIChtdW5tYXAobWVtb3J5LCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKSkK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1v
cmllcy5mZXRjaF9zdWIoMSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCk7CiAKLSAgICAvLyBX
ZSBuZWVkIHRvIGJlIHN1cmUgd2UgaGF2ZSBhIHN0dWIgcHJpb3IgdG8gcnVubmluZyBjb2RlLgot
ICAgIGlmIChVTkxJS0VMWSghVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0aW9u
RnJvbVdhc21UaHVua0dlbmVyYXRvcikpKQotICAgICAgICByZXR1cm4gZmFpbCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKGFsbG9jYXRlZEZhc3RNZW1vcmllcyA8PSBt
YXhGYXN0TWVtb3JpZXMpOwotICAgIGlmIChkZXF1ZUZhc3RNZW1vcnkoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgInJlbGlucXVpc2hGYXN0TWVtb3J5IGZyZWVpbmcgc2xvdyBt
ZW1vcnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAgICAgaWYgKG11bm1hcChtZW1vcnks
IG1hcHBlZENhcGFjaXR5KSkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybjsK
IAotICAgIC8vIElmIHdlIGhhdmUgYWxsb2NhdGVkIGFsbCB0aGUgZmFzdCBtZW1vcmllcy4uLiB0
b28gYmFkLgotICAgIGlmIChhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgPT0gbWF4RmFzdE1lbW9yaWVz
KSB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIGEgcmVhc29uYWJsZSBjaGFuY2UgdGhhdCBhbm90aGVy
IG1vZHVsZSBoYXMgZGllZCBidXQgaGFzIG5vdCBiZWVuIGNvbGxlY3RlZCB5ZXQuIERvbid0IGxv
c2UgaG9wZSB5ZXQhCi0gICAgICAgIHZtLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKLSAgICAg
ICAgaWYgKGRlcXVlRmFzdE1lbW9yeSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIHJldHVybiBmYWlsKCk7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9yeU1v
ZGVzOgorICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobW1hcEJ5dGVzKGZhc3RNZW1v
cnlNYXBwZWRCeXRlcywgbWVtb3J5KSkgewotICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RN
ZW1vcnlNYXBwZWRCeXRlczsKLSAgICAgICAgbW9kZSA9IE1lbW9yeU1vZGU6OlNpZ25hbGluZzsK
LSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobWVtb3J5TG9jayk7Ci0gICAgICAgIGFsbG9jYXRl
ZEZhc3RNZW1vcmllcysrOwotICAgICAgICBhdXRvIHJlc3VsdCA9IGFjdGl2ZUZhc3RNZW1vcmll
cyhsb2NrZXIpLmFkZChtZW1vcnkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVz
dWx0LmlzTmV3RW50cnkpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3N0YXRpYyBib29sIG1ha2VOZXdNZW1vcnlSZWFkV3JpdGVPclJlbGlucXVpc2godm9pZCogbWVt
b3J5LCBzaXplX3QgaW5pdGlhbEJ5dGVzLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHlCeXRlcywgTWVt
b3J5TW9kZSBtb2RlKQoreworICAgIEFTU0VSVChtZW1vcnkgJiYgaW5pdGlhbEJ5dGVzIDw9IG1h
cHBlZENhcGFjaXR5Qnl0ZXMpOworICAgIGlmIChpbml0aWFsQnl0ZXMpIHsKKyAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIk1hcmtpbmcgV2ViQXNzZW1ibHkgbWVtb3J5J3MgIiwgUmF3UG9p
bnRlcihtZW1vcnkpLCAiJ3MgaW5pdGlhbCAiLCBpbml0aWFsQnl0ZXMsICIgYnl0ZXMgYXMgcmVh
ZCt3cml0ZSIpOworICAgICAgICBpZiAobXByb3RlY3QobWVtb3J5LCBpbml0aWFsQnl0ZXMsIFBS
T1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiB3aHkgPSBz
dHJlcnJvcihlcnJubyk7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRmFpbGVk
IG1ha2luZyBtZW1vcnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpLCAiIHJlYWRhYmxlIGFuZCB3cml0
YWJsZTogIiwgd2h5KTsKKyAgICAgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobWVtb3J5LCAwLCBt
YXBwZWRDYXBhY2l0eUJ5dGVzLCBtb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCiAKLSAgICBpZiAobWVtb3J5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJl
dHVybiBmYWlsKCk7Citjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9kZSkKK3sK
KyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
OiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZzogcmV0dXJuICJTaWduYWxpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1v
cnlNb2RlczogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuICIiOwogfQogCi1pbmxpbmUgdm9pZCByZWxlYXNlRmFzdE1lbW9yeSh2b2lk
KiYgbWVtb3J5LCBzaXplX3Qgd3JpdGFibGVTaXplLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1l
bW9yeU1vZGUgbW9kZSkKK3ZvaWQgTWVtb3J5Ojppbml0aWFsaXplUHJlYWxsb2NhdGlvbnMoKQog
ewotICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCAhbWVtb3J5KQotICAg
ICAgICByZXR1cm47CisgICAgLy8gUmFjZXMgY2Fubm90IG9jY3VyIGluIHRoaXMgZnVuY3Rpb246
IGl0IGlzIG9ubHkgY2FsbGVkIGF0IHByb2dyYW0gaW5pdGlhbGl6YXRpb24sIGJlZm9yZSBXZWJB
c3NlbWJseSBjYW4gYmUgaW52b2tlZC4KKworICAgIGNvbnN0IGF1dG8gc3RhcnRUaW1lID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CisgICAgY29uc3Qgc2l6ZV90IGRlc2lyZWRGYXN0TWVtb3JpZXMg
PSBzdGQ6Om1pbjxzaXplX3Q+KE9wdGlvbnM6OndlYkFzc2VtYmx5RmFzdE1lbW9yeVByZWFsbG9j
YXRlQ291bnQoKSwgZmFzdE1lbW9yeUNhY2hlSGFyZExpbWl0KTsKKworICAgIC8vIFN0YXJ0IG9m
ZiB0cnlpbmcgdG8gYWxsb2NhdGUgZmFzdCBtZW1vcmllcyBjb250aWd1b3VzbHkgc28gdGhleSBk
b24ndCBmcmFnbWVudCBlYWNoIG90aGVyLiBUaGlzIGNhbiBmYWlsIGlmIHRoZSBhZGRyZXNzIHNw
YWNlIGlzIG90aGVyd2lzZSBmcmFnbWVudGVkLiBJbiB0aGF0IGNhc2UsIGdvIGZvciBzbWFsbGVy
IGNvbnRpZ3VvdXMgYWxsb2NhdGlvbnMuIFdlJ2xsIGV2ZW50dWFsbHkgZ2V0IGluZGl2aWR1YWwg
bm9uLWNvbnRpZ3VvdXMgZmFzdCBtZW1vcmllcyBhbGxvY2F0ZWQsIG9yIHdlJ2xsIGp1c3QgYmUg
dW5hYmxlIHRvIGZpdCBhIHNpbmdsZSBvbmUgYXQgd2hpY2ggcG9pbnQgd2UgZ2l2ZSB1cC4KKyAg
ICBhdXRvIGFsbG9jYXRlQ29udGlndW91c0Zhc3RNZW1vcmllcyA9IFsmXSAoc2l6ZV90IG51bUNv
bnRpZ3VvdXMpIC0+IGJvb2wgeworICAgICAgICBpZiAodm9pZCAqbWVtb3J5ID0gbW1hcEJ5dGVz
KE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkgKiBudW1Db250aWd1b3VzKSkgeworICAgICAgICAg
ICAgZm9yIChzaXplX3Qgc3ViTWVtb3J5ID0gMDsgc3ViTWVtb3J5IDwgbnVtQ29udGlndW91czsg
KytzdWJNZW1vcnkpIHsKKyAgICAgICAgICAgICAgICB2b2lkKiBzdGFydEFkZHJlc3MgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSAq
IHN1Yk1lbW9yeSArIHN1Yk1lbW9yeTsKKyAgICAgICAgICAgICAgICBib29sIGluc2VydGVkID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY2FjaGVFbnRyeSA9IDA7IGNhY2hl
RW50cnkgPCBmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQ7ICsrY2FjaGVFbnRyeSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCkgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLnN0b3JlKHN0YXJ0QWRkcmVzcywgc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bnNlcnRlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKIAotICAgIFJFTEVBU0VfQVNTRVJU
KG1lbW9yeSAmJiBtYXBwZWRDYXBhY2l0eSA9PSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMpOwotICAg
IEFTU0VSVChmYXN0TWVtb3J5RW5hYmxlZCgpKTsKKyAgICBzaXplX3QgZnJhZ21lbnRzID0gMDsK
KyAgICBzaXplX3QgbnVtRmFzdE1lbW9yaWVzID0gMDsKKyAgICBzaXplX3QgY29udGlndW91c01l
bW9yeUFsbG9jYXRpb25BdHRlbXB0ID0gZGVzaXJlZEZhc3RNZW1vcmllczsKKyAgICB3aGlsZSAo
bnVtRmFzdE1lbW9yaWVzICE9IGRlc2lyZWRGYXN0TWVtb3JpZXMgJiYgY29udGlndW91c01lbW9y
eUFsbG9jYXRpb25BdHRlbXB0ICE9IDApIHsKKyAgICAgICAgaWYgKGFsbG9jYXRlQ29udGlndW91
c0Zhc3RNZW1vcmllcyhjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQpKSB7CisgICAg
ICAgICAgICBudW1GYXN0TWVtb3JpZXMgKz0gY29udGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRl
bXB0OworICAgICAgICAgICAgY29udGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0ID0gc3Rk
OjptaW4oY29udGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0IC0gMSwgZGVzaXJlZEZhc3RN
ZW1vcmllcyAtIG51bUZhc3RNZW1vcmllcyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
LS1jb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQ7CisgICAgICAgICsrZnJhZ21lbnRz
OworICAgIH0KKworICAgIGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50ID0gbnVtRmFzdE1lbW9y
aWVzOworICAgIGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcy5zdG9yZShmYXN0TWVtb3J5
UHJlYWxsb2NhdGVDb3VudCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgb2JzZXJ2
ZWRNYXhpbXVtRmFzdE1lbW9yeS5zdG9yZShmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiAKLSAgICBtZW1zZXQobWVtb3J5LCAwLCB3cml0YWJs
ZVNpemUpOwotICAgIGlmIChtcHJvdGVjdChtZW1vcnksIHdyaXRhYmxlU2l6ZSwgUFJPVF9OT05F
KSkKLSAgICAgICAgQ1JBU0goKTsKKyAgICBjb25zdCBhdXRvIGVuZFRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1lbW9yeUxvY2spOwotICAgIGJv
b2wgcmVzdWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcikucmVtb3ZlKG1lbW9yeSk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7Ci0gICAgQVNTRVJUKGF2YWlsYWJsZUZh
c3RNZW1vcmllcyhsb2NrZXIpLnNpemUoKSA8IGFsbG9jYXRlZEZhc3RNZW1vcmllcyk7Ci0gICAg
YXZhaWxhYmxlRmFzdE1lbW9yaWVzKGxvY2tlcikuYXBwZW5kKG1lbW9yeSk7Ci0gICAgbWVtb3J5
ID0gbnVsbHB0cjsKKyAgICBmb3IgKHNpemVfdCBjYWNoZUVudHJ5ID0gMDsgY2FjaGVFbnRyeSA8
IGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50OyArK2NhY2hlRW50cnkpIHsKKyAgICAgICAgdm9p
ZCogc3RhcnRBZGRyZXNzID0gZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIEFTU0VSVChzdGFydEFkZHJlc3MpOworICAg
ICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJlLWFsbG9jYXRpb24gb2YgV2ViQXNzZW1ibHkg
ZmFzdCBtZW1vcnkgYXQgIiwgUmF3UG9pbnRlcihzdGFydEFkZHJlc3MpKTsKKyAgICB9CisgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByZS1hbGxvY2F0ZWQgIiwgZmFzdE1lbW9yeVByZWFsbG9j
YXRlQ291bnQsICIgV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcyBpbiAiLCBmYXN0TWVtb3J5UHJl
YWxsb2NhdGVDb3VudCA9PSAwID8gMCA6IGZyYWdtZW50cywgZnJhZ21lbnRzID09IDEgPyAiIGZy
YWdtZW50LCB0b29rICIgOiAiIGZyYWdtZW50cywgdG9vayAiLCBlbmRUaW1lIC0gc3RhcnRUaW1l
KTsKIH0KIAogTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtKQpAQCAtMTk0LDg5ICsyODgsMTAwIEBAIE1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkCiAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRoaXMp
OwogfQogCi1SZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZUltcGwoVk0mIHZtLCBQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4g
cmVxdWlyZWRNb2RlKQorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJbXBsKFBhZ2VDb3Vu
dCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiBy
ZXF1aXJlZE1vZGUpCiB7CisgICAgQVNTRVJUKGluaXRpYWwpOwogICAgIFJFTEVBU0VfQVNTRVJU
KCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJh
bnRlZWQgYnkgb3VyIGNhbGxlci4KIAorICAgIGNvbnN0IHNpemVfdCBpbml0aWFsQnl0ZXMgPSBp
bml0aWFsLmJ5dGVzKCk7CisgICAgY29uc3Qgc2l6ZV90IG1heGltdW1CeXRlcyA9IG1heGltdW0g
PyBtYXhpbXVtLmJ5dGVzKCkgOiAwOworICAgIGNvbnN0IGJvb2wgY2FuVXNlRmFzdE1lbW9yeSA9
ICFyZXF1aXJlZE1vZGUgfHwgcmVxdWlyZWRNb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZzsK
ICAgICBNZW1vcnlNb2RlIG1vZGUgPSByZXF1aXJlZE1vZGUgPyAqcmVxdWlyZWRNb2RlIDogTWVt
b3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7Ci0gICAgY29uc3Qgc2l6ZV90IHNpemUgPSBpbml0aWFs
LmJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1hcHBlZENhcGFjaXR5ID0gbWF4aW11bSA/IG1heGltdW0u
Ynl0ZXMoKSA6IFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKTsKLSAgICB2b2lkKiBtZW1vcnkgPSBu
dWxscHRyOworICAgIHNpemVfdCBtYXBwZWRDYXBhY2l0eUJ5dGVzID0gMDsKKworICAgIC8vIFdl
IG5lZWQgdG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCisg
ICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25G
cm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
YXV0byBtYWtlRW1wdHlNZW1vcnkgPSBbJl0gKCkgLT4gUmVmUHRyPE1lbW9yeT4geworICAgIGlm
IChtYXhpbXVtICYmICFtYXhpbXVtQnl0ZXMpIHsKKyAgICAgICAgLy8gVXNlciBzcGVjaWZpZWQg
YSB6ZXJvIG1heGltdW0sIGluaXRpYWwgc2l6ZSBtdXN0IGFsc28gYmUgemVyby4KKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWluaXRpYWxCeXRlcyk7CiAgICAgICAgIGlmIChtb2RlID09IE1lbW9y
eU1vZGU6OlNpZ25hbGluZykKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0pKTsKLSAgICB9Owot
Ci0gICAgaWYgKCFtYXBwZWRDYXBhY2l0eSkgewotICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIHNw
ZWNpZmllZCBhIHplcm8gYXMgbWF4aW11bSAod2hpY2ggbWVhbnMgd2UgYWxzbyBoYXZlIHplcm8g
YXMgaW5pdGlhbCBzaXplKS4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNpemUpOwotICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgYWxsb2NhdGluZyBub3RoaW5n
Iik7Ci0gICAgICAgIHJldHVybiBtYWtlRW1wdHlNZW1vcnkoKTsKICAgICB9CiAKLSAgICBib29s
IGNhblVzZUZhc3RNZW1vcnkgPSAhcmVxdWlyZWRNb2RlIHx8IHJlcXVpcmVkTW9kZSA9PSBNZW1v
cnlNb2RlOjpTaWduYWxpbmc7Ci0gICAgaWYgKCFjYW5Vc2VGYXN0TWVtb3J5IHx8ICF0cnlHZXRG
YXN0TWVtb3J5KHZtLCBtZW1vcnksIG1hcHBlZENhcGFjaXR5LCBtb2RlKSkgewotICAgICAgICBp
ZiAobW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOworICAgIGlmIChjYW5Vc2VGYXN0TWVt
b3J5KSB7CisgICAgICAgIG1lbW9yeSA9IHRyeUdldEZhc3RNZW1vcnkoKTsKKyAgICAgICAgaWYg
KG1lbW9yeSkgeworICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHlCeXRlcyA9IE1lbW9yeTo6ZmFz
dE1hcHBlZEJ5dGVzKCk7CisgICAgICAgICAgICBtb2RlID0gTWVtb3J5TW9kZTo6U2lnbmFsaW5n
OworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlmIChPcHRpb25zOjpzaW11bGF0ZVdlYkFz
c2VtYmx5TG93TWVtb3J5KCkgPyB0cnVlIDogIW1tYXBCeXRlcyhtYXBwZWRDYXBhY2l0eSwgbWVt
b3J5KSkgewotICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBkaWZmZXJlbnQgbnVtYmVy
LgotICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAg
ZmFpbGVkIG9uY2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcgYWdhaW4iKTsKLSAgICAgICAgICAgIG1h
cHBlZENhcGFjaXR5ID0gc2l6ZTsKLSAgICAgICAgICAgIGlmICghbWFwcGVkQ2FwYWNpdHkpIHsK
LSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1h
cCBub3QgdHJ5aW5nIGFnYWluIGJlY2F1c2Ugc2l6ZSBpcyB6ZXJvIik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VFbXB0eU1lbW9yeSgpOwotICAgICAgICAgICAgfQorICAgIGlmICghbWVt
b3J5ICYmIG1vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgICAgICAgICAgaWYgKCFtbWFwQnl0ZXMobWFwcGVkQ2FwYWNpdHksIG1lbW9y
eSkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVh
dGUgbW1hcCBmYWlsZWQgdHdpY2UiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIH0KKyAgICBpZiAoIW1lbW9yeSAmJiBtYXhpbXVtKSB7CisgICAgICAgIG1l
bW9yeSA9IHRyeUdldFNsb3dNZW1vcnkobWF4aW11bUJ5dGVzKTsKKyAgICAgICAgaWYgKG1lbW9y
eSkgeworICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHlCeXRlcyA9IG1heGltdW1CeXRlczsKKyAg
ICAgICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIEFTU0VSVChtZW1vcnkgJiYgc2l6ZSA8PSBtYXBwZWRDYXBhY2l0eSk7Ci0g
ICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsK
LSAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGV2ZXIgb2NjdXI/IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4OTAKLSAgICAgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1wcm90ZWN0IGZhaWxlZCIpOwotICAgICAgICByZWxlYXNl
RmFzdE1lbW9yeShtZW1vcnksIDAsIG1hcHBlZENhcGFjaXR5LCBtb2RlKTsKKyAgICBpZiAoIW1l
bW9yeSkgeworICAgICAgICBtZW1vcnkgPSB0cnlHZXRTbG93TWVtb3J5KGluaXRpYWxCeXRlcyk7
CiAgICAgICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgICAgIGlmIChtdW5tYXAobWVtb3J5LCBt
YXBwZWRDYXBhY2l0eSkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIG1h
cHBlZENhcGFjaXR5Qnl0ZXMgPSBpbml0aWFsQnl0ZXM7CisgICAgICAgICAgICBtb2RlID0gTWVt
b3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCi0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1t
YXAgc3VjY2VlZGVkIik7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkobWVtb3J5LCBp
bml0aWFsLCBtYXhpbXVtLCBtYXBwZWRDYXBhY2l0eSwgbW9kZSkpOworICAgIGlmICghbWVtb3J5
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghbWFrZU5ld01lbW9yeVJlYWRX
cml0ZU9yUmVsaW5xdWlzaChtZW1vcnksIGluaXRpYWxCeXRlcywgbWFwcGVkQ2FwYWNpdHlCeXRl
cywgbW9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBNZW1vcnkobWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBtYXBwZWRDYXBhY2l0eUJ5dGVz
LCBtb2RlKSk7CiB9CiAKLVJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFn
ZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1v
ZGU+IG1vZGUpCitSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShQYWdlQ291bnQgaW5pdGlh
bCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gbW9kZSkKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBU
aGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCi0gICAgUmVmUHRyPE1lbW9y
eT4gcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgaW5pdGlhbCwgbWF4aW11bSwgbW9kZSk7Ci0gICAg
aWYgKHJlc3VsdCkgewotICAgICAgICBpZiAocmVzdWx0LT5tb2RlKCkgPT0gTWVtb3J5TW9kZTo6
U2lnbmFsaW5nKQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LT5tX21hcHBlZENh
cGFjaXR5ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRlcyk7Ci0gICAgICAgIGlmIChtb2RlKQotICAg
ICAgICAgICAgQVNTRVJUKCptb2RlID09IHJlc3VsdC0+bW9kZSgpKTsKLSAgICB9CisgICAgUmVm
UHRyPE1lbW9yeT4gcmVzdWx0ID0gY3JlYXRlSW1wbChpbml0aWFsLCBtYXhpbXVtLCBtb2RlKTsK
KyAgICBpZiAocmVzdWx0ICYmIG1vZGUpCisgICAgICAgIEFTU0VSVCgqbW9kZSA9PSByZXN1bHQt
Pm1vZGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogTWVtb3J5Ojp+TWVtb3J5KCkKIHsK
LSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojp+TWVtb3J5ICIsICp0aGlzKTsKLSAg
ICByZWxlYXNlRmFzdE1lbW9yeShtX21lbW9yeSwgbV9zaXplLCBtX21hcHBlZENhcGFjaXR5LCBt
X21vZGUpOwogICAgIGlmIChtX21lbW9yeSkgewotICAgICAgICBpZiAobXVubWFwKG1fbWVtb3J5
LCBtX21hcHBlZENhcGFjaXR5KSkKLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJNZW1vcnk6On5NZW1vcnkgIiwgKnRoaXMpOworICAgICAgICByZWxp
bnF1aXNoTWVtb3J5KG1fbWVtb3J5LCBtX3NpemUsIG1fbWFwcGVkQ2FwYWNpdHksIG1fbW9kZSk7
CiAgICAgfQogfQogCitzaXplX3QgTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihQYWdlQ291bnQ6OnBhZ2VTaXplKSAqIE9w
dGlvbnM6OndlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcygpOworfQorCitzaXplX3Qg
TWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVp
bnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGlt
dW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzIgKyByZWR6b25lIHdoaWNoIGlzIGxh
cmdlciB0aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2QgcGFzcyB0byBtcHJv
dGVjdCBpZiB0aGlzIGRpZG4ndCBob2xkLiIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgKyBmYXN0TWFwcGVkUmVk
em9uZUJ5dGVzKCk7Cit9CisKK3NpemVfdCBNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCgpCit7
CisgICAgLy8gVGhlIG9yZGVyIGNhbiBiZSByZWxheGVkIGhlcmUgYmVjYXVzZSB3ZSBwcm92aWRl
IGEgbW9ub3RvbmljYWxseS1pbmNyZWFzaW5nIGVzdGltYXRlLiBBIGNvbmN1cnJlbnQgb2JzZXJ2
ZXIgY291bGQgc2VlIGEgc2xpZ2h0bHkgb3V0LW9mLWRhdGUgdmFsdWUgYnV0IGNhbid0IHRlbGwg
dGhhdCB0aGV5IGRpZC4KKyAgICByZXR1cm4gb2JzZXJ2ZWRNYXhpbXVtRmFzdE1lbW9yeS5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworfQorCiBib29sIE1lbW9yeTo6Z3JvdyhQYWdl
Q291bnQgbmV3U2l6ZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdTaXplID4gUGFnZUNvdW50
Ojpmcm9tQnl0ZXMobV9zaXplKSk7CkBAIC0zMDEsOCArNDA2LDExIEBAIGJvb2wgTWVtb3J5Ojpn
cm93KFBhZ2VDb3VudCBuZXdTaXplKQogICAgIH0KIAogICAgIGlmIChtX21lbW9yeSAmJiBkZXNp
cmVkU2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KSB7Ci0gICAgICAgIGlmIChtcHJvdGVjdChzdGF0
aWNfY2FzdDx1aW50OF90Kj4obV9tZW1vcnkpICsgbV9zaXplLCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGRlc2lyZWRTaXplIC0gbV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBldmVyIG9jY3VyPyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5ODkwCisgICAgICAgIHVpbnQ4X3QqIHN0YXJ0QWRk
cmVzcyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBtX3NpemU7CisgICAgICAg
IHNpemVfdCBleHRyYUJ5dGVzID0gZGVzaXJlZFNpemUgLSBtX3NpemU7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGV4dHJhQnl0ZXMpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWFy
a2luZyBXZWJBc3NlbWJseSBtZW1vcnkncyAiLCBSYXdQb2ludGVyKG1fbWVtb3J5KSwgIiBhcyBy
ZWFkK3dyaXRlIGluIHJhbmdlIFsiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcyksICIsICIsIFJh
d1BvaW50ZXIoc3RhcnRBZGRyZXNzICsgZXh0cmFCeXRlcyksICIpIik7CisgICAgICAgIGlmICht
cHJvdGVjdChzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUp
KSB7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IGluLXBs
YWNlIGZhaWxlZCAiLCAqdGhpcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KQEAgLTMxNiwxNiArNDI0LDE5IEBAIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdT
aXplKQogICAgIFJFTEVBU0VfQVNTRVJUKG1vZGUoKSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcp
OwogCiAgICAgLy8gT3RoZXJ3aXNlLCBsZXQncyB0cnkgdG8gbWFrZSBzb21lIG5ldyBtZW1vcnku
Ci0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEgVk0gdGFnIGZvciB3
YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzYw
MAotICAgIHZvaWQqIG5ld01lbW9yeSA9IG1tYXAobnVsbHB0ciwgZGVzaXJlZFNpemUsIFBST1Rf
UkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAgICBp
ZiAobmV3TWVtb3J5ID09IE1BUF9GQUlMRUQpCisgICAgLy8gRklYTUUgbXJlbWFwIHdvdWxkIGJl
IG5pY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU1NworICAg
IHZvaWQqIG5ld01lbW9yeSA9IHRyeUdldFNsb3dNZW1vcnkoZGVzaXJlZFNpemUpOworICAgIGlm
ICghbmV3TWVtb3J5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1ha2VOZXdN
ZW1vcnlSZWFkV3JpdGVPclJlbGlucXVpc2gobmV3TWVtb3J5LCBkZXNpcmVkU2l6ZSwgZGVzaXJl
ZFNpemUsIG1vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX21lbW9y
eSkgewogICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwgbV9zaXplKTsKLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gIW11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOworICAgICAgICByZWxpbnF1aXNoTWVtb3J5
KG1fbWVtb3J5LCBtX3NpemUsIG1fc2l6ZSwgbV9tb2RlKTsKICAgICB9CisKICAgICBtX21lbW9y
eSA9IG5ld01lbW9yeTsKICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CiAgICAg
bV9zaXplID0gZGVzaXJlZFNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmgKaW5kZXggYjAyNDUxZC4uY2MzNTg2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuaApAQCAtNDAsOCArNDAsNiBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIFZNOwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIC8vIEZJWE1FOiBX
ZSBzaG91bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCkBAIC02MSwxMSArNTksMTYgQEAgcHVibGljOgogCiAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9tZW1vcnk7IH0K
IAotICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291bnQgaW5pdGlh
bCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRN
b2RlID0gc3RkOjpudWxsb3B0KTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplUHJlYWxsb2Nh
dGlvbnMoKTsKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlKFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZXF1aXJl
ZE1vZGUgPSBzdGQ6Om51bGxvcHQpOwogCiAgICAgTWVtb3J5KCkgPSBkZWZhdWx0OwogICAgIH5N
ZW1vcnkoKTsKIAorICAgIHN0YXRpYyBzaXplX3QgZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpOwor
ICAgIHN0YXRpYyBzaXplX3QgZmFzdE1hcHBlZEJ5dGVzKCk7IC8vIEluY2x1ZGVzIHJlZHpvbmUu
CisgICAgc3RhdGljIHNpemVfdCBtYXhGYXN0TWVtb3J5Q291bnQoKTsKKwogICAgIHZvaWQqIG1l
bW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KICAgICBQYWdlQ291bnQgc2l6ZUluUGFnZXMoKSBjb25zdCB7
IHJldHVybiBQYWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUpOyB9CkBAIC04MSw3ICs4NCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVndW4o
KSk7IH0KIHByaXZhdGU6Ci0gICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZUltcGwoVk0m
LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVt
b3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKKyAgICBzdGF0aWMgUmVmUHRy
PE1lbW9yeT4gY3JlYXRlSW1wbChQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsK
ICAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1h
eGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7CiAgICAgTWVtb3J5KFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CiAKQEAgLTk0LDEyICs5NywxNiBA
QCBwcml2YXRlOgogICAgIE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hl
Y2tpbmcgfTsKIH07CiAKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yo
c2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBNZW1vcnkg
d2UgbWFwIHRvIGJlIDJeMzMgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBp
bnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7
Ci0KLWNvbnN0IHNpemVfdCBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMgPSAoc3RhdGljX2Nhc3Q8c2l6
ZV90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpICsgMSkgKiAyOyAvLyBw
b2ludGVyIG1heCArIG9mZnNldCBtYXguIFRoaXMgaXMgYWxsIHdlIG5lZWQgc2luY2UgYSBsb2Fk
IHN0cmFkZGxpbmcgcmVhZGFibGUgbWVtb3J5IHdpbGwgdHJhcC4KIGV4dGVybiBTdGF0aWNMb2Nr
IG1lbW9yeUxvY2s7CiBjb25zdCBIYXNoU2V0PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmll
cyhjb25zdCBBYnN0cmFjdExvY2tlciYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQog
CisjZWxzZQorCitjbGFzcyBNZW1vcnkgeworcHVibGljOgorICAgIHN0YXRpYyBzaXplX3QgbWF4
RmFzdE1lbW9yeUNvdW50KCkgeyByZXR1cm4gMDsgfQorfTsKKwogI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggNjU0N2Q2Mi4uNDgzMjk4ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCiAgICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBt
b2R1bGUpOwotICAgIGNvbnN0IHNpemVfdCBleHRyYU1lbW9yeVNpemUgPSBtb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGNv
bnN0IHNpemVfdCBleHRyYU1lbW9yeVNpemUgPSBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpOwogICAg
IG1fZ2xvYmFscyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUp
OwogICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXpl
KTsKIApAQCAtODksNyArODksNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fbWVtb3J5KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3RhYmxlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7
Ci0gICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bW9kdWxl
KCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkpOworICAgIHZpc2l0b3IucmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPmdsb2JhbE1lbW9yeUJ5dGVTaXplKCkp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1
bmN0aW9uczsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRG
dW5jdGlvbnMoKVtpXSk7CiB9CkBAIC0yOTYsNyArMjk2LDcgQEAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhl
YywgSlMKICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVtb3J5
SW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24u
bWVtb3J5LmlzSW1wb3J0KCkpOwogICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdo
ZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgotICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1l
bW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOwor
ICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5Ojpj
cmVhdGUobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRp
b24ubWVtb3J5Lm1heGltdW0oKSk7CiAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwog
CkBAIC0zNTAsNiArMzUwLDEwIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgcmV0dXJu
IGluc3RhbmNlOwogfQogCitzaXplX3QgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpnbG9iYWxNZW1v
cnlCeXRlU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpLmdsb2JhbHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKK30KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggODU1MWZlOC4uNTNlZDk5ZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
CkBAIC05Miw2ICs5Miw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgVk0qIG1fdm07CiAg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0
d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KKyAgICBzaXplX3QgZ2xvYmFsTWVt
b3J5Qnl0ZVNpemUoKSBjb25zdDsKIAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9k
dWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4g
bV9jb2RlQmxvY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuY3BwCmluZGV4IDMzNjljMGUuLjc0MGU5ZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3Bw
CkBAIC0xMTcsNiArMTE3LDcgQEAgV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6
Omdyb3coVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHQKICAgICB9CiAKICAg
ICBtZW1vcnkoKS5jaGVjaygpOworICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0
ZWQoV2FzbTo6UGFnZUNvdW50KGRlbHRhKS5ieXRlcygpKTsKICAgICByZXR1cm4gb2xkUGFnZUNv
dW50OwogfQogCkBAIC0xMjQsNiArMTI1LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisgICAgaGVhcCgpLT5yZXBvcnRFeHRy
YU1lbW9yeUFsbG9jYXRlZChtX21lbW9yeS0+c2l6ZSgpKTsKKyAgICB2bS5oZWFwLnJlcG9ydFdl
YkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkKDEpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtMTQxLDYgKzE0NCw3IEBAIHZvaWQg
SlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2J1ZmZlcldyYXBwZXIpOwor
ICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1lbW9yeSgp
LnNpemUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9y
LmNwcAppbmRleCBjZmU4YjlmLi42MGE3ODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNw
cApAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5Ojpj
cmVhdGUodm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOworICAgIFJlZlB0
cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKGluaXRpYWxQYWdl
Q291bnQsIG1heGltdW1QYWdlQ291bnQpOwogICAgIGlmICghbWVtb3J5KQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0
ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
T1NBbGxvY2F0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKaW5kZXggYzljYjE1
NS4uZDc2NzhiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCkBAIC0zNiw3ICszNiw2IEBAIHB1YmxpYzoK
ICAgICBlbnVtIFVzYWdlIHsKICAgICAgICAgVW5rbm93blVzYWdlID0gLTEsCiAgICAgICAgIEZh
c3RNYWxsb2NQYWdlcyA9IFZNX1RBR19GT1JfVENNQUxMT0NfTUVNT1JZLAotICAgICAgICBKU0dD
SGVhcFBhZ2VzID0gVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZLAogICAgICAgICBKU1ZNU3Rh
Y2tQYWdlcyA9IFZNX1RBR19GT1JfUkVHSVNURVJGSUxFX01FTU9SWSwKICAgICAgICAgSlNKSVRD
b2RlUGFnZXMgPSBWTV9UQUdfRk9SX0VYRUNVVEFCTEVBTExPQ0FUT1JfTUVNT1JZLAogICAgIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WTVRhZ3MuaCBiL1NvdXJjZS9XVEYvd3RmL1ZN
VGFncy5oCmluZGV4IGFlZjA1ZDIuLjI3ZmMwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1ZNVGFncy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZNVGFncy5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwxNSArNTEsMTUgQEAK
ICNlbmRpZiAvLyBkZWZpbmVkKFZNX01FTU9SWV9KQVZBU0NSSVBUX0pJVF9SRUdJU1RFUl9GSUxF
KQogCiAjaWYgZGVmaW5lZChWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFKQotI2RlZmluZSBWTV9U
QUdfRk9SX0NPTExFQ1RPUl9NRU1PUlkgVk1fTUFLRV9UQUcoVk1fTUVNT1JZX0pBVkFTQ1JJUFRf
Q09SRSkKKyNkZWZpbmUgVk1fVEFHX0ZPUl9XRUJBU1NFTUJMWV9NRU1PUlkgVk1fTUFLRV9UQUco
Vk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRSkKICNlbHNlCi0jZGVmaW5lIFZNX1RBR19GT1JfQ09M
TEVDVE9SX01FTU9SWSBWTV9NQUtFX1RBRyg2MykKKyNkZWZpbmUgVk1fVEFHX0ZPUl9XRUJBU1NF
TUJMWV9NRU1PUlkgVk1fTUFLRV9UQUcoNjMpCiAjZW5kaWYgLy8gZGVmaW5lZChWTV9NRU1PUllf
SkFWQVNDUklQVF9DT1JFKQogCiAjZWxzZSAvLyBPUyhEQVJXSU4pCiAKICNkZWZpbmUgVk1fVEFH
X0ZPUl9UQ01BTExPQ19NRU1PUlkgLTEKLSNkZWZpbmUgVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVN
T1JZIC0xCisjZGVmaW5lIFZNX1RBR19GT1JfV0VCQVNTRU1CTFlfTUVNT1JZIC0xCiAjZGVmaW5l
IFZNX1RBR19GT1JfRVhFQ1VUQUJMRUFMTE9DQVRPUl9NRU1PUlkgLTEKICNkZWZpbmUgVk1fVEFH
X0ZPUl9SRUdJU1RFUkZJTEVfTUVNT1JZIC0xCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJj
ZVVzYWdlRGF0YS5jcHAKaW5kZXggNTkxMmIwNS4uN2ExNzAwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQCBSZXNvdXJjZVVzYWdlRGF0
YTo6UmVzb3VyY2VVc2FnZURhdGEoKQogewogICAgIC8vIFZNIHRhZyBjYXRlZ29yaWVzLgogICAg
IGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkpTSklUXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhN
ZW1vcnlDYXRlZ29yeTo6SlNKSVQpOworICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6Oldl
YkFzc2VtYmx5XSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6V2ViQXNzZW1i
bHkpOwogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkltYWdlc10gPSBNZW1vcnlDYXRl
Z29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkltYWdlcyk7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlD
YXRlZ29yeTo6TGF5ZXJzXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGF5
ZXJzKTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMaWJjTWFsbG9jXSA9IE1lbW9y
eUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxvYyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1Jlc291cmNlVXNhZ2VEYXRhLmgKaW5kZXggNzIzNjk2Zi4uOWZmODZhOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMiArMzUsMTMgQEAgbmFtZXNwYWNl
IE1lbW9yeUNhdGVnb3J5IHsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibWFsbG9jID0gMDsKIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBMaWJjTWFsbG9jID0gMTsKIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBKU0pJVCA9IDI7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgSW1hZ2VzID0gMzsKLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBHQ0hlYXAgPSA0Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEdDT3duZWQg
PSA1Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIE90aGVyID0gNjsKLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBMYXllcnMgPSA3Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIE51bWJlck9mQ2F0ZWdvcmll
cyA9IDg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgV2ViQXNzZW1ibHkgPSAzOworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIEltYWdlcyA9IDQ7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgR0NIZWFwID0g
NTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBHQ093bmVkID0gNjsKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBPdGhlciA9IDc7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgTGF5ZXJzID0gODsKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBOdW1iZXJPZkNhdGVnb3JpZXMgPSA5OwogfQogCiBzdHJ1Y3QgTWVt
b3J5Q2F0ZWdvcnlJbmZvIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2Ev
UmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2Ev
UmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQppbmRleCAzNjY2MDFlLi45NzNiODZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3Zlcmxh
eUNvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNjIsNiArMTYyLDcgQEAgSGlzdG9yaWNSZXNvdXJjZVVzYWdlRGF0YTo6SGlz
dG9yaWNSZXNvdXJjZVVzYWdlRGF0YSgpCiB7CiAgICAgLy8gVk0gdGFnIGNhdGVnb3JpZXMuCiAg
ICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6SlNKSVRdID0gSGlzdG9yaWNNZW1vcnlDYXRl
Z29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkpTSklULCAweEZGRkY2MEZGLCAiSlMgSklUIik7Cisg
ICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6V2ViQXNzZW1ibHldID0gSGlzdG9yaWNNZW1v
cnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OldlYkFzc2VtYmx5LCAweEZGNjU0RkYwLCAi
V2ViQXNzZW1ibHkiKTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpJbWFnZXNdID0g
SGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkltYWdlcywgMHhGRkZG
RkYwMCwgIkltYWdlcyIpOwogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkxheWVyc10g
PSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGF5ZXJzLCAweEZG
MDBGRkZGLCAiTGF5ZXJzIik7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6TGliY01h
bGxvY10gPSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGliY01h
bGxvYywgMHhGRjAwRkYwMCwgImxpYmMgbWFsbG9jIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCmluZGV4IDA2NGE2MWEu
LmEzMGVmMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VV
c2FnZVRocmVhZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3Vy
Y2VVc2FnZVRocmVhZENvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw2ICs4MCw3IEBAIGNvbnN0IGNoYXIqIGRpc3BsYXlO
YW1lRm9yVk1UYWcodW5zaWduZWQgdGFnKQogICAgIGNhc2UgVk1fTUVNT1JZX0lNQUdFSU86IHJl
dHVybiAiSW1hZ2VJTyI7CiAgICAgY2FzZSBWTV9NRU1PUllfQ0dJTUFHRTogcmV0dXJuICJDRyBp
bWFnZSI7CiAgICAgY2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9KSVRfRVhFQ1VUQUJMRV9BTExP
Q0FUT1I6IHJldHVybiAiSlNDIEpJVCI7CisgICAgY2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9D
T1JFOiByZXR1cm4gIldlYkFzc2VtYmx5IjsKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0M6IHJl
dHVybiAibWFsbG9jIjsKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0NfSFVHRTogcmV0dXJuICJt
YWxsb2MgKGh1Z2UpIjsKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0NfTEFSR0U6IHJldHVybiAi
bWFsbG9jIChsYXJnZSkiOwpAQCAtMTgxLDYgKzE4Miw4IEBAIHN0YXRpYyB1bnNpZ25lZCBjYXRl
Z29yeUZvclZNVGFnKHVuc2lnbmVkIHRhZykKICAgICAgICAgcmV0dXJuIE1lbW9yeUNhdGVnb3J5
OjpJbWFnZXM7CiAgICAgY2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9KSVRfRVhFQ1VUQUJMRV9B
TExPQ0FUT1I6CiAgICAgICAgIHJldHVybiBNZW1vcnlDYXRlZ29yeTo6SlNKSVQ7CisgICAgY2Fz
ZSBWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFOgorICAgICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdv
cnk6OldlYkFzc2VtYmx5OwogICAgIGNhc2UgVk1fTUVNT1JZX01BTExPQzoKICAgICBjYXNlIFZN
X01FTU9SWV9NQUxMT0NfSFVHRToKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0NfTEFSR0U6CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJl
c2VudGF0aW9uLmh0bWwgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRl
LXJlcHJlc2VudGF0aW9uLmh0bWwKaW5kZXggMjBiNTliNS4uMWE1OThhNSAxMDA2NDQKLS0tIGEv
V2Vic2l0ZXMvd2Via2l0Lm9yZy9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5o
dG1sCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVz
ZW50YXRpb24uaHRtbApAQCAtNjU0LDkgKzY1NCw5IEBAIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKICAgICAgIDxkZD5TcGVjaWFsIFdhc20gb3Bjb2RlLiBUaGlzIGJyYW5jaGVzIG9uIHRoZSBm
aXJzdCBjaGlsZC4gSWYgdGhlIGZpcnN0IGNoaWxkIHBsdXMgdGhlIG9mZnNldAogICAgICAgICBw
cm9kdWNlcyBhIEludDY0IGxlc3MgdGhhbiB0byB0aGUgcGlubmVkR1BSIHRoaXMgZmFsbHMgdGhy
b3VnaC4gT3RoZXJ3aXNlLCBpdCBicmFuY2hlcyB0bwogICAgICAgICB0aGUgZXhpdCBwYXRoIGdl
bmVyYXRlZCBieSB0aGUgcGFzc2VkIGdlbmVyYXRvci4gVW5saWtlIHRoZSBQYXRjaC9DaGVjayBm
YW1pbHksIHRoZQotICAgICAgICBnZW5lcmF0b3IgdXNlZCBieSBXYXNtQm91bmRzQ2hlY2sgc291
bGQgYmUgc2V0IG9uIHRoZSBQcm9jdWRlciBpdHNlbGYuIFRoZSBHUlBSZWcgcGFzc2VkIGluCisg
ICAgICAgIGdlbmVyYXRvciB1c2VkIGJ5IFdhc21Cb3VuZHNDaGVjayBzaG91bGQgYmUgc2V0IG9u
IHRoZSBQcm9jZWR1cmUgaXRzZWxmLiBUaGUgR1JQUmVnIHBhc3NlZCBpbgogICAgICAgICBwaW5u
ZWRHUFIgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBwaW5uZWQgYnkgY2FsbGluZyB0aGUgUHJvY2Vk
dXJlJ3MgcGlubmluZyBBUEkuIEIzIGFzc3VtZXMKLSAgICAgICAgdGhlIFdhc21Cb3VuZHNDaGVj
ayB3aWxsIHNpZGUtZXhpdCB3aGVuIHRoZSBpdCBicmFuY2hlcywgc28gdGhlIGdlbmVyYXRvciBt
dXN0IGRvIHNvbWUga2luZAorICAgICAgICB0aGUgV2FzbUJvdW5kc0NoZWNrIHdpbGwgc2lkZS1l
eGl0IHdoZW4gaXQgYnJhbmNoZXMsIHNvIHRoZSBnZW5lcmF0b3IgbXVzdCBkbyBzb21lIGtpbmQK
ICAgICAgICAgb2YgdGVybWluYXRpb24uIEluIFdhc20gdGhpcyBpcyB1c2VkIHRvIHRyYXAgYW5k
IHVud2luZCBiYWNrIHRvIEpTLiBNdXN0IHVzZSB0aGUKICAgICAgICAgV2FzbUJvdW5kc0NoZWNr
VmFsdWUgY2xhc3MuPC9kZD4KIAotLSAKMi4xMC4xCgo=
</data>
<flag name="commit-queue"
          id="327909"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306710</attachid>
            <date>2017-04-10 10:52:20 -0700</date>
            <delta_ts>2017-04-10 13:54:45 -0700</delta_ts>
            <desc>add multi-agent test</desc>
            <filename>0001-fast-memories-everywhere.patch</filename>
            <type>text/plain</type>
            <size>81055</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA0NDkwYmYzZDA3MjBlYTEzZmMwM2E1OWNiYjU1MGNhNGQ4ZTU5MmQ5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDYgQXByIDIwMTcgMTU6MTQ6NDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBmYXN0LW1l
bW9yaWVzLWV2ZXJ5d2hlcmUKCi0tLQogSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMTMgKy0KIEpTVGVzdHMvd2FzbS9XQVNNLmpzICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDMwICsrCiAuLi4vd2FzbS9mdW5jdGlvbi10ZXN0cy9t
ZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcyB8IDEzMCArKysrKysrCiBKU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQuanMgICB8IDExNyArKysrKysKIEpTVGVzdHMv
d2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMgICAgICAgIHwgIDE1ICsKIEpTVGVz
dHMvd2FzbS91dGlsaXRpZXMuanMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICsKIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwICAgICAgICAgIHwgIDM0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAgICAgICAgICAgICB8ICAg
MyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwICAgICAgICAgICAgICAg
fCAgIDQgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNw
cCAgIHwgIDIxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5oICB8ICAxNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20u
Y3BwICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
ICAgICAgICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcCAgICAgICAgICAgICAgICB8ICAyNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oICAgICAgICAgICAgICAgICAgfCAgMTIgKwogLi4uL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgfCAgIDYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaCAgICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgICB8ICAzOSArLQogLi4uL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgfCAgIDIgKy0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwICAgICAgICAgIHwgNDI5ICsrKysrKysr
KysrKystLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAg
ICAgICAgICAgfCAgMjEgKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAg
ICAgICAgICAgICAgIHwgIDEwICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCB8ICAgMSArCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmNwcCB8ICAgNCArCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmNwcCAgICAgICB8ICAgMiArLQogU291cmNlL1dURi93dGYvT1NBbGxvY2F0
b3IuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgLQogU291cmNlL1dURi93dGYvVk1UYWdz
LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmggICAgICAgICAgICB8ICAxNSArLQogLi4uL3BhZ2Uv
Y29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbSAgICAgICAgfCAgIDMgKy0KIC4uLi9X
ZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tIHwgICA1ICstCiAu
Li4vZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbCAgICAgICB8ICAgNCAr
LQogMzIgZmlsZXMgY2hhbmdlZCwgNzcyIGluc2VydGlvbnMoKyksIDIxMyBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFj
Y2Vzcy1wYXN0LTRnaWIuanMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQuanMKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
QnVpbGRlci5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCmluZGV4IDhmZjVkY2UuLmRlZTc4
NmQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCkBAIC0yNywxMiArMjcsNyBAQCBpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAn
YXNzZXJ0LmpzJzsKIGltcG9ydCAqIGFzIEJ1aWxkV2ViQXNzZW1ibHkgZnJvbSAnQnVpbGRlcl9X
ZWJBc3NlbWJseUJpbmFyeS5qcyc7CiBpbXBvcnQgKiBhcyBMTEIgZnJvbSAnTG93TGV2ZWxCaW5h
cnkuanMnOwogaW1wb3J0ICogYXMgV0FTTSBmcm9tICdXQVNNLmpzJzsKLQotY29uc3QgX3RvSmF2
YVNjcmlwdE5hbWUgPSBuYW1lID0+IHsKLSAgICBjb25zdCBjYW1lbENhc2UgPSBuYW1lLnJlcGxh
Y2UoLyhbXmEtejAtOV0uKS9nLCBjID0+IGNbMV0udG9VcHBlckNhc2UoKSk7Ci0gICAgY29uc3Qg
Q2FtZWxDYXNlID0gY2FtZWxDYXNlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY2FtZWxDYXNl
LnNsaWNlKDEpOwotICAgIHJldHVybiBDYW1lbENhc2U7Ci19OworaW1wb3J0ICogYXMgdXRpbCBm
cm9tICd1dGlsaXRpZXMuanMnOwogCiBjb25zdCBfaXNWYWxpZFZhbHVlID0gKHZhbHVlLCB0eXBl
KSA9PiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0yMjUsNyArMjIwLDcgQEAgY29uc3QgX2lt
cG9ydEdsb2JhbENvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikg
PT4gewogICAgICAgICAgICAgRW5kOiAoKSA9PiBuZXh0QnVpbGRlcgogICAgICAgICB9OwogICAg
ICAgICBmb3IgKGxldCBvcCBvZiBXQVNNLmRlc2NyaXB0aW9uLnZhbHVlX3R5cGUpIHsKLSAgICAg
ICAgICAgIGdsb2JhbEJ1aWxkZXJbX3RvSmF2YVNjcmlwdE5hbWUob3ApXSA9IChtb2R1bGUsIGZp
ZWxkLCBtdXRhYmlsaXR5KSA9PiB7CisgICAgICAgICAgICBnbG9iYWxCdWlsZGVyW3V0aWwudG9K
YXZhU2NyaXB0TmFtZShvcCldID0gKG1vZHVsZSwgZmllbGQsIG11dGFiaWxpdHkpID0+IHsKICAg
ICAgICAgICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IGdsb2JhbCBtb2R1
bGUgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7bW9kdWxlfSJgKTsKICAgICAgICAgICAgICAg
ICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgZ2xvYmFsIGZpZWxkIHNob3VsZCBiZSBh
IHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuaXNTdHJp
bmcobXV0YWJpbGl0eSwgYEltcG9ydCBnbG9iYWwgbXV0YWJpbGl0eSBzaG91bGQgYmUgYSBzdHJp
bmcsIGdvdCAiJHttdXRhYmlsaXR5fSJgKTsKQEAgLTMxOCw3ICszMTMsNyBAQCBjb25zdCBfY2hl
Y2tJbW1zID0gKG9wLCBpbW1zLCBleHBlY3RlZEltbXMsIHJldCkgPT4gewogY29uc3QgX2NyZWF0
ZUZ1bmN0aW9uQnVpbGRlciA9IChmdW5jLCBidWlsZGVyLCBwcmV2aW91c0J1aWxkZXIpID0+IHsK
ICAgICBsZXQgZnVuY3Rpb25CdWlsZGVyID0ge307CiAgICAgZm9yIChjb25zdCBvcCBpbiBXQVNN
LmRlc2NyaXB0aW9uLm9wY29kZSkgewotICAgICAgICBjb25zdCBuYW1lID0gX3RvSmF2YVNjcmlw
dE5hbWUob3ApOworICAgICAgICBjb25zdCBuYW1lID0gdXRpbC50b0phdmFTY3JpcHROYW1lKG9w
KTsKICAgICAgICAgY29uc3QgdmFsdWUgPSBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF0udmFs
dWU7CiAgICAgICAgIGNvbnN0IHJldCA9IFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlW29wXVsicmV0
dXJuIl07CiAgICAgICAgIGNvbnN0IHBhcmFtID0gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbb3Bd
LnBhcmFtZXRlcjsKQEAgLTU0Miw3ICs1MzcsNyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWls
ZGVyIHsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgb3Agb2YgV0FTTS5kZXNjcmlwdGlvbi52YWx1
ZV90eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxCdWlsZGVyW190b0phdmFT
Y3JpcHROYW1lKG9wKV0gPSAoaW5pdFZhbHVlLCBtdXRhYmlsaXR5KSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBnbG9iYWxCdWlsZGVyW3V0aWwudG9KYXZhU2NyaXB0TmFtZShvcCldID0g
KGluaXRWYWx1ZSwgbXV0YWJpbGl0eSkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHMuZGF0YS5wdXNoKHsgdHlwZTogb3AsIG9wOiBvcCArICIuY29uc3QiLCBtdXRhYmlsaXR5OiBf
bm9ybWFsaXplTXV0YWJpbGl0eShtdXRhYmlsaXR5KSwgaW5pdFZhbHVlIH0pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGdsb2JhbEJ1
aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9XQVNNLmpzIGIvSlNUZXN0cy93YXNtL1dBU00uanMKaW5kZXggMWJiNzliOC4uMWU2NGNh
ZSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL1dBU00uanMKKysrIGIvSlNUZXN0cy93YXNtL1dB
U00uanMKQEAgLTQ0LDMgKzQ0LDMzIEBAIGV4cG9ydCBjb25zdCBpc1ZhbGlkQmxvY2tUeXBlID0g
diA9PiBfYmxvY2tUeXBlU2V0Lmhhcyh2KTsKIGV4cG9ydCBjb25zdCBleHRlcm5hbEtpbmRWYWx1
ZSA9IF9tYXBWYWx1ZXMoZGVzY3JpcHRpb24uZXh0ZXJuYWxfa2luZCk7CiBleHBvcnQgY29uc3Qg
c2VjdGlvbnMgPSBPYmplY3Qua2V5cyhkZXNjcmlwdGlvbi5zZWN0aW9uKTsKIGV4cG9ydCBjb25z
dCBzZWN0aW9uRW5jb2RpbmdUeXBlID0gZGVzY3JpcHRpb24uc2VjdGlvbltzZWN0aW9uc1swXV0u
dHlwZTsKKworZXhwb3J0IGZ1bmN0aW9uKiBvcGNvZGVzKGNhdGVnb3J5ID0gdW5kZWZpbmVkKSB7
CisgICAgZm9yIChsZXQgb3AgaW4gZGVzY3JpcHRpb24ub3Bjb2RlKQorICAgICAgICBpZiAoY2F0
ZWdvcnkgIT09IHVuZGVmaW5lZCAmJiBkZXNjcmlwdGlvbi5vcGNvZGVbb3BdLmNhdGVnb3J5ID09
PSBjYXRlZ29yeSkKKyAgICAgICAgICAgIHlpZWxkIHsgbmFtZTogb3AsIG9wY29kZTogZGVzY3Jp
cHRpb24ub3Bjb2RlW29wXSB9OworfTsKK2V4cG9ydCBjb25zdCBtZW1vcnlBY2Nlc3NJbmZvID0g
b3AgPT4geworICAgIC8vICAgICAgICAgICAgICAgIDwtLS0tLS0tLS0tLXZhbHVlVHlwZS0tLS0t
LS0tLS0tPiAgPC0tLS0tLS10eXBlLS0tLS0tLT48LS0tLS0tLS0td2lkdGgtLS0tLS0tLT4gIDwt
LXNpZ24tLT4KKyAgICBjb25zdCBjbGFzc2lmeSA9IC8oKD86aTMyKXwoPzppNjQpfCg/OmYzMil8
KD86ZjY0KSlcLigoPzpsb2FkKXwoPzpzdG9yZSkpKCg/OjgpP3woPzoxNik/fCg/OjMyKT8pXz8o
KD86c3x1KT8pLzsKKyAgICBjb25zdCBmb3VuZCA9IG9wLm5hbWUubWF0Y2goY2xhc3NpZnkpOwor
ICAgIGNvbnN0IHZhbHVlVHlwZSA9IGZvdW5kWzFdOworICAgIGNvbnN0IHR5cGUgPSBmb3VuZFsy
XTsKKyAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KGZvdW5kWzNdID8gZm91bmRbM10gOiB2YWx1
ZVR5cGUuc2xpY2UoMSkpOworICAgIGNvbnN0IHNpZ24gPSAoKCkgPT4geworICAgICAgICBzd2l0
Y2ggKGZvdW5kWzRdKSB7CisgICAgICAgIGNhc2UgInMiOiByZXR1cm4gInNpZ25lZCI7CisgICAg
ICAgIGNhc2UgInUiOiByZXR1cm4gInVuc2lnbmVkIjsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJu
ICJhZ25vc3RpYyI7CisgICAgICAgIH0KKyAgICB9KSgpOworICAgIHJldHVybiB7IHZhbHVlVHlw
ZSwgdHlwZSwgd2lkdGgsIHNpZ24gfTsKK307CisKK2V4cG9ydCBjb25zdCBjb25zdEZvclZhbHVl
VHlwZSA9IHZhbHVlVHlwZSA9PiB7CisgICAgZm9yIChsZXQgb3AgaW4gZGVzY3JpcHRpb24ub3Bj
b2RlKQorICAgICAgICBpZiAob3AuZW5kc1dpdGgoIi5jb25zdCIpICYmIGRlc2NyaXB0aW9uLm9w
Y29kZVtvcF1bInJldHVybiJdID09IHZhbHVlVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBvcDsK
KyAgICB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IG5vIGNvbnN0IHR5
cGUgZm9yICR7dmFsdWVUeXBlfWApOworfTsKKwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3MtcGFzdC00Z2liLmpzIGIvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3MtcGFzdC00Z2liLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmQxYTVmMDMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMKQEAgLTAsMCArMSwx
MzAgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworaW1wb3J0ICogYXMg
YXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CitpbXBvcnQgKiBhcyBMTEIgZnJvbSAnLi4vTG93
TGV2ZWxCaW5hcnkuanMnOworaW1wb3J0ICogYXMgV0FTTSBmcm9tICcuLi9XQVNNLmpzJzsKK2lt
cG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbGl0aWVzLmpzJzsKKworY29uc3QgdmVyYm9zZSA9
IGZhbHNlOworCitjb25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKK2NvbnN0IGZvdXJHaUIgPSBw
YWdlU2l6ZSAqIDY1NTM2OworY29uc3QgaW5pdGlhbCA9IDY0OworY29uc3QgbWF4aW11bSA9IDEy
ODsKKworLy8gV2hlbiB1c2luZyBmYXN0IG1lbW9yaWVzLCB3ZSBhbGxvY2F0ZSBhIHJlZHpvbmUg
YWZ0ZXIgdGhlIDRHaUIgaHVnZQorLy8gYWxsb2NhdGlvbi4gVGhpcyByZWR6b25lIGlzIHVzZWQg
dG8gdHJhcCByZWcraW1tIGFjY2Vzc2VzIHdoaWNoIGV4Y2VlZAorLy8gMzItYml0cy4gQW55dGhp
bmcgcGFzdCA0R2lCIG11c3QgdHJhcCwgYnV0IHdlIGNhbm5vdCBrbm93IHN0YXRpY2FsbHkgdGhh
dCBpdAorLy8gd2lsbC4KKworY29uc3Qgb2Zmc2V0cyA9IFsKKyAgICAwLAorICAgIDEsCisgICAg
MiwKKyAgICAxMDI0LAorICAgIHBhZ2VTaXplLAorICAgIHBhZ2VTaXplICsgcGFnZVNpemUgLyAy
LAorICAgIHBhZ2VTaXplICogOCwKKyAgICBwYWdlU2l6ZSAqIDE2LAorICAgIHBhZ2VTaXplICog
MTI4LAorICAgIHBhZ2VTaXplICogNTEyLAorICAgIGZvdXJHaUIgLyA0IC0gNCwKKyAgICBmb3Vy
R2lCIC8gNCAtIDMsCisgICAgZm91ckdpQiAvIDQgLSAyLAorICAgIGZvdXJHaUIgLyA0IC0gMSwK
KyAgICBmb3VyR2lCIC8gNCwKKyAgICBmb3VyR2lCIC8gNCArIDEsCisgICAgZm91ckdpQiAvIDQg
KyAyLAorICAgIGZvdXJHaUIgLyA0ICsgMywKKyAgICBmb3VyR2lCIC8gNCArIDQsCisgICAgZm91
ckdpQiAvIDIgLSA0LAorICAgIGZvdXJHaUIgLyAyIC0gMywKKyAgICBmb3VyR2lCIC8gMiAtIDIs
CisgICAgZm91ckdpQiAvIDIgLSAxLAorICAgIGZvdXJHaUIgLyAyLAorICAgIGZvdXJHaUIgLyAy
ICsgMSwKKyAgICBmb3VyR2lCIC8gMiArIDIsCisgICAgZm91ckdpQiAvIDIgKyAzLAorICAgIGZv
dXJHaUIgLyAyICsgNCwKKyAgICAoZm91ckdpQiAvIDQpICogMywKKyAgICBmb3VyR2lCIC0gNCwK
KyAgICBmb3VyR2lCIC0gMywKKyAgICBmb3VyR2lCIC0gMiwKKyAgICBmb3VyR2lCIC0gMSwKK107
CisKK2ZvciAobGV0IG1lbW9yeURlY2xhcmF0aW9uIG9mIFt7IGluaXRpYWw6IGluaXRpYWwgfSwg
eyBpbml0aWFsOiBpbml0aWFsLCBtYXhpbXVtOiBtYXhpbXVtIH1dKSB7CisgICAgZnVsbEdDKCk7
CisKKyAgICAvLyBSZS11c2UgYSBzaW5nbGUgbWVtb3J5IHNvIHRlc3RzIGFyZSBtb3JlIGxpa2Vs
eSB0byBnZXQgYSBmYXN0IG1lbW9yeS4KKyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1i
bHkuTWVtb3J5KG1lbW9yeURlY2xhcmF0aW9uKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
cHJpbnQoV2ViQXNzZW1ibHlNZW1vcnlNb2RlKG1lbW9yeSkpOworICAgIGNvbnN0IGJ1ZiA9IG5l
dyBVaW50OEFycmF5KG1lbW9yeS5idWZmZXIpOworCisgICAgLy8gRW51bWVyYXRlIGFsbCBtZW1v
cnkgYWNjZXNzIHR5cGVzLgorICAgIGZvciAoY29uc3Qgb3Agb2YgV0FTTS5vcGNvZGVzKCJtZW1v
cnkiKSkgeworICAgICAgICBjb25zdCBpbmZvID0gV0FTTS5tZW1vcnlBY2Nlc3NJbmZvKG9wKTsK
KworICAgICAgICAvLyBUaGUgYWNjZXNzZXMgc2hvdWxkIGZhdWx0IGV2ZW4gaWYgb25seSB0aGUg
bGFzdCBieXRlIGlzIG9mZiB0aGUgZW5kLgorICAgICAgICBsZXQgd2lnZ2xlcyA9IFswXTsKKyAg
ICAgICAgZm9yIChsZXQgd2lnZ2xlID0gMDsgd2lnZ2xlICE9PSBpbmZvLndpZHRoIC8gODsgKyt3
aWdnbGUpCisgICAgICAgICAgICB3aWdnbGVzLnB1c2god2lnZ2xlKTsKKworICAgICAgICBsZXQg
YnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAg
ICAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlY2xhcmF0
aW9uKS5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5F
eHBvcnQoKTsKKworICAgICAgICBmb3IgKGxldCBvZmZzZXQgb2Ygb2Zmc2V0cykKKyAgICAgICAg
ICAgIHN3aXRjaCAoaW5mby50eXBlKSB7CisgICAgICAgICAgICBjYXNlICJsb2FkIjogYnVpbGRl
ciA9IGJ1aWxkZXIuRnVuY3Rpb24oImdldF8iICsgb2Zmc2V0KTsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlICJzdG9yZSI6IGJ1aWxkZXIgPSBidWlsZGVyLkZ1bmN0aW9uKCJzZXRfIiArIG9mZnNl
dCk7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1l
bnRhdGlvbiBwcm9ibGVtOiB1bmtub3duIG1lbW9yeSBhY2Nlc3MgdHlwZSAke2luZm8udHlwZX1g
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBidWlsZGVyID0gYnVpbGRlci5FbmQoKS5Db2Rl
KCk7CisKKyAgICAgICAgY29uc3QgYWxpZ24gPSAzOyAvLyBObyBuZWVkIHRvIGJlIHByZWNpc2Us
IGl0J3MganVzdCBhIGhpbnQuCisgICAgICAgIGNvbnN0IGNvbnN0SW5zdHIgPSB1dGlsLnRvSmF2
YVNjcmlwdE5hbWUoV0FTTS5jb25zdEZvclZhbHVlVHlwZShpbmZvLnZhbHVlVHlwZSkpOworICAg
ICAgICBjb25zdCBpbnN0ciA9IHV0aWwudG9KYXZhU2NyaXB0TmFtZShvcC5uYW1lKTsKKyAgICAg
ICAgZm9yIChsZXQgb2Zmc2V0IG9mIG9mZnNldHMpCisgICAgICAgICAgICBzd2l0Y2ggKGluZm8u
dHlwZSkgeworICAgICAgICAgICAgY2FzZSAibG9hZCI6CisgICAgICAgICAgICAgICAgYnVpbGRl
ciA9IGJ1aWxkZXIuRnVuY3Rpb24oImdldF8iICsgb2Zmc2V0LCB7IHBhcmFtczogWyJpMzIiXSB9
KS5HZXRMb2NhbCgwKVtpbnN0cl0oYWxpZ24sIG9mZnNldCkuRHJvcCgpLkVuZCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAic3RvcmUiOgorICAgICAgICAgICAg
ICAgIGJ1aWxkZXIgPSBidWlsZGVyLkZ1bmN0aW9uKCJzZXRfIiArIG9mZnNldCwgeyBwYXJhbXM6
IFsiaTMyIl0gfSkuR2V0TG9jYWwoMClbY29uc3RJbnN0cl0oMHhkZWFkKVtpbnN0cl0oYWxpZ24s
IG9mZnNldCkuRW5kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJv
YmxlbTogdW5rbm93biBtZW1vcnkgYWNjZXNzIHR5cGUgJHtpbmZvLnR5cGV9YCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBidWlsZGVyID0gYnVpbGRlci5FbmQoKTsKKworICAg
ICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIHsgaW1wOiB7IG1lbW9y
eTogbWVtb3J5IH0gfSk7CisKKyAgICAgICAgZm9yIChsZXQgb2Zmc2V0IG9mIG9mZnNldHMpIHsK
KyAgICAgICAgICAgIGZvciAobGV0IHdpZ2dsZSBvZiB3aWdnbGVzKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgYWRkcmVzcyA9IExMQi52YXJ1aW50MzJNYXggLSBvZmZzZXQgLSB3aWdnbGU7Cisg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIHByaW50KGAk
e29wLm5hbWUucGFkU3RhcnQoMTYsICcgJyl9OiBiYXNlIGFkZHJlc3MgJHthZGRyZXNzID4gMCA/
ICcweCcgOiAnICAnfSR7YWRkcmVzcy50b1N0cmluZygxNikucGFkU3RhcnQoOCwgYWRkcmVzcyA+
IDAgPyAnMCcgOiAnICcpfSArIG9mZnNldCAweCR7b2Zmc2V0LnRvU3RyaW5nKDE2KS5wYWRTdGFy
dCg4LCAnMCcpfSAtIHdpZ2dsZSAke3dpZ2dsZX0gPSBlZmZlY3RpdmUgYWRkcmVzcyAweCR7KGFk
ZHJlc3MgKyBvZmZzZXQgLSB3aWdnbGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwgJzAnKX1g
KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGluZm8udHlwZSkgeworICAgICAgICAgICAgICAg
IGNhc2UgImxvYWQiOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGlu
c3RhbmNlLmV4cG9ydHNbImdldF8iICsgb2Zmc2V0XShhZGRyZXNzKSwgV2ViQXNzZW1ibHkuUnVu
dGltZUVycm9yLCBgT3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzYCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgInN0b3JlIjoKKyAgICAgICAgICAg
ICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzWyJzZXRfIiArIG9m
ZnNldF0oYWRkcmVzcyksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgYE91dCBvZiBib3VuZHMg
bWVtb3J5IGFjY2Vzc2ApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVu
a25vd24gbWVtb3J5IGFjY2VzcyB0eXBlICR7aW5mby50eXBlfWApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bGxHQygpOworICAgIH0K
KworICAgIC8vIE9ubHkgY2hlY2sgdGhhdCB0aGUgbWVtb3J5IHdhcyB1bnRvdWNoZWQgYXQgdGhl
IHZlcnkgZW5kLCBiZWZvcmUgdGhyb3dpbmcgaXQgYXdheSBlbnRpcmVseS4KKyAgICBmb3IgKGxl
dCBpZHggPSAwOyBpZHggPCBidWYuYnl0ZUxlbmd0aDsgKytpZHgpCisgICAgICAgIGFzc2VydC5l
cShidWZbaWR4XSwgMCk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LW11bHRpYWdlbnQuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVt
b3J5LW11bHRpYWdlbnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRl
YzdjMgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1v
cnktbXVsdGlhZ2VudC5qcwpAQCAtMCwwICsxLDExNyBAQAorY29uc3QgcGFnZVNpemUgPSA2NCAq
IDEwMjQ7CisKK2NvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKworLy8gU3RhcnQgbXVsdGlwbGUgYWdl
bnRzIGFuZCBjcmVhdGUgV2ViQXNzZW1ibHkuTWVtb3J5IGZyb20gZWFjaCBvZgorLy8gdGhlbS4g
UGVyZm9ybSB3cml0ZXMgaW50byBlYWNoIG1lbW9yeSwgYW5kIHRoZW4gY2hlY2sgdGhhdCB0aGUg
bWVtb3J5IG9ubHkKKy8vIGNvbnRhaW5zIHRoYXQgYWdlbnQncyB3cml0ZXMuIFRoaXMgd291bGQg
ZmluZCBidWdzIHdoZXJlIGFuIGltcGxlbWVudGF0aW9uJ3MKKy8vIG1lbW9yeSByZXVzZSBpcyBi
dWdneS4KKworLy8gVXNlIHRoZSBhZ2VudCBzdXBwb3J0IGZyb20gdGVzdDI2MjogaHR0cHM6Ly9n
aXRodWIuY29tL3RjMzkvdGVzdDI2Mi9ibG9iL21hc3Rlci9JTlRFUlBSRVRJTkcubWQjaG9zdC1k
ZWZpbmVkLWZ1bmN0aW9ucworCitjb25zdCB0ZXN0SXRlcmF0aW9ucyA9IDg7Citjb25zdCBudW1B
Z2VudHMgPSA4OworY29uc3QgaW5pdGlhbFBhZ2VzID0gNjQ7Citjb25zdCBudW1Xcml0ZXMgPSAx
MDI0OworCitjb25zdCBzdGF0ZVdhaXQgPSAwOworY29uc3Qgc3RhdGVSZWFkeSA9IDE7Citjb25z
dCBzdGF0ZUNoZWNrID0gMjsKKworY29uc3Qgc3RhcnRBZ2VudHMgPSBudW1BZ2VudHNUb1N0YXJ0
ID0+IHsKKyAgICBmb3IgKGxldCBhID0gMDsgYSA8IG51bUFnZW50c1RvU3RhcnQ7ICsrYSkgewor
ICAgICAgICBjb25zdCBhZ2VudFNjcmlwdCA9IGAKKyAgICAgICAgbGV0IHN0YXRlID0gJHtzdGF0
ZVdhaXR9OworICAgICAgICBsZXQgdTg7CisKKyAgICAgICAgaWYgKCR7dmVyYm9zZX0pCisgICAg
ICAgICAgICBwcmludCgiQWdlbnQgJHthfSBzdGFydGVkIik7CisgICAgICAgICQuYWdlbnQucmVw
b3J0KCJBZ2VudCAke2F9IHN0YXJ0ZWQiKTsKKworICAgICAgICAkLmFnZW50LnJlY2VpdmVCcm9h
ZGNhc3QoKHNhYiwgbmV3U3RhdGUpID0+IHsKKyAgICAgICAgICAgIGlmICgke3ZlcmJvc2V9KQor
ICAgICAgICAgICAgICAgIHByaW50KCJBZ2VudCAke2F9IHJlY2VpdmVkIGJyb2FkY2FzdCIpOwor
ICAgICAgICAgICAgdTggPSBuZXcgVWludDhBcnJheShzYWIpOworICAgICAgICAgICAgc3RhdGUg
PSBuZXdTdGF0ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29uc3QgYnVzeVdhaXRGb3JWYWx1
ZSA9IHZhbHVlID0+IHsKKyAgICAgICAgICAgIC8vIEJ1c3ktd2FpdCBzbyB0aGF0IG9uY2UgdGhl
IFNBQiB3cml0ZSBvY2N1cnMgYWxsIGFnZW50cyB0cnkgdG8gY3JlYXRlIGEgbWVtb3J5IGF0IHRo
ZSBzYW1lIHRpbWUuCisgICAgICAgICAgICB3aGlsZSAoQXRvbWljcy5sb2FkKHU4LCAwKSAhPT0g
dmFsdWUpIDsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAg
ICAgIHByaW50KCJBZ2VudCAke2F9IHdhaXRzIik7CisgICAgICAgICQuYWdlbnQucmVwb3J0KCJB
Z2VudCAke2F9IHdhaXRzIik7CisgICAgICAgIHdoaWxlIChzdGF0ZSA9PT0gJHtzdGF0ZVdhaXR9
KSA7CisgICAgICAgICQuYWdlbnQucmVwb3J0KCJBZ2VudCAke2F9IHJlY2VpdmVkIFNBQiIpOwor
ICAgICAgICAvLyBVc2UgaXQgZm9yIGZhc3RlciBzdGF0ZSBjaGFuZ2Ugc28gYWxsIGFnZW50cyBh
cmUgbW9yZSBsaWtlbHkgdG8gZXhlY3V0ZSBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICBidXN5
V2FpdEZvclZhbHVlKCR7c3RhdGVSZWFkeX0pOworCisgICAgICAgIGxldCB3YXNtTWVtb3J5ID0g
bmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6ICR7aW5pdGlhbFBhZ2VzfSB9KTsKKyAg
ICAgICAgbGV0IG1lbW9yeSA9IG5ldyBVaW50OEFycmF5KCh3YXNtTWVtb3J5KS5idWZmZXIpOwor
ICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAgICAgIHByaW50KCJBZ2VudCAke2F9IHBl
cmZvcm1pbmcgd3JpdGVzIik7CisgICAgICAgIGZvciAobGV0IHdyaXRlID0gMDsgd3JpdGUgPCAk
e251bVdyaXRlc307ICsrd3JpdGUpIHsKKyAgICAgICAgICAgIC8vIFBlcmZvcm0gd3JpdGVzIG9m
IG91ciBhZ2VudCBudW1iZXIgYXQgYSByYW5kb20gbG9jYXRpb24uIFRoaXMgbWVtb3J5IHNob3Vs
ZCBub3QgYmUgc2hhcmVkLCBpZiB3ZSBzZWUgd3JpdGVzIG9mIG90aGVyIHZhbHVlcyB0aGVuIHNv
bWV0aGluZyB3ZW50IHdyb25nLgorICAgICAgICAgICAgY29uc3QgaWR4ID0gKE1hdGgucmFuZG9t
KCkgKiAke3BhZ2VTaXplfSAqICR7aW5pdGlhbFBhZ2VzfSkgfCAwOworICAgICAgICAgICAgbWVt
b3J5W2lkeF0gPSAke2F9OworICAgICAgICB9CisgICAgICAgIGlmICgke3ZlcmJvc2V9KQorICAg
ICAgICAgICAgcHJpbnQoIkFnZW50ICR7YX0gd3JpdGVzIHBlcmZvcm1lZCIpOworICAgICAgICAk
LmFnZW50LnJlcG9ydCgiQWdlbnQgJHthfSBwZXJmb3JtZWQgd3JpdGVzIik7CisgICAgICAgIGJ1
c3lXYWl0Rm9yVmFsdWUoJHtzdGF0ZUNoZWNrfSk7CisKKyAgICAgICAgaWYgKCR7dmVyYm9zZX0p
CisgICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSBjaGVja2luZyIpOworICAgICAgICAvLyBD
aGVjayB0aGF0IG91ciBtZW1vcnkgb25seSBjb250YWlucyAwIGFuZCBvdXIgYWdlbnQgbnVtYmVy
LgorICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCAke3BhZ2VTaXplfSAqICR7aW5pdGlh
bFBhZ2VzfTsgKytpZHgpCisgICAgICAgICAgICBpZiAobWVtb3J5W2lkeF0gIT09IDAgJiYgbWVt
b3J5W2lkeF0gIT09ICR7YX0pCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBZ2Vu
dCAke2F9IGZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUgIiArIG1lbW9yeVtpZHhdICsgIiBhdCBsb2Nh
dGlvbiAiICsgaWR4KTsKKyAgICAgICAgJC5hZ2VudC5yZXBvcnQoIkFnZW50ICR7YX0gY2hlY2tz
IG91dCBPSyIpOworICAgICAgICAkLmFnZW50LmxlYXZpbmcoKTsKKyAgICAgICAgYDsKKworICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIHByaW50KGBTdGFydGluZyBhZ2VudCAke2F9
YCk7CisgICAgICAgICQuYWdlbnQuc3RhcnQoYWdlbnRTY3JpcHQpOworICAgIH0KK307CisKK2Nv
bnN0IHdhaXRGb3JBZ2VudHMgPSBudW1BZ2VudHNUb1dhaXRGb3IgPT4geworICAgIGZvciAobGV0
IGEgPSAwOyBhIDwgbnVtQWdlbnRzVG9XYWl0Rm9yOyArK2EpIHsKKyAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgIGNvbnN0IHJlcG9ydCA9ICQuYWdlbnQuZ2V0UmVwb3J0KCk7Cisg
ICAgICAgICAgICBpZiAocmVwb3J0ID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgJC5hZ2Vu
dC5zbGVlcCgxKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIHByaW50KGBSZWNlaXZlZDog
JHtyZXBvcnR9YCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK307CisK
K2NvbnN0IGJyb2FkY2FzdFRvQWdlbnRzID0gKHNhYiwgbmV3U3RhdGUpID0+IHsKKyAgICAkLmFn
ZW50LmJyb2FkY2FzdChzYWIsIG5ld1N0YXRlKTsKK307CisKK2NvbnN0IHNhYiA9IG5ldyBTaGFy
ZWRBcnJheUJ1ZmZlcigxMDI0KTsKK2NvbnN0IHU4ID0gbmV3IFVpbnQ4QXJyYXkoc2FiKTsKKwor
Zm9yIChsZXQgaXQgPSAwOyBpdCA8IHRlc3RJdGVyYXRpb25zOyArK2l0KSB7CisgICAgc3RhcnRB
Z2VudHMobnVtQWdlbnRzKTsKKyAgICB3YWl0Rm9yQWdlbnRzKG51bUFnZW50cyk7CisgICAgYnJv
YWRjYXN0VG9BZ2VudHMoc2FiLCBzdGF0ZVJlYWR5KTsKKyAgICB3YWl0Rm9yQWdlbnRzKG51bUFn
ZW50cyk7CisgICAgJC5hZ2VudC5zbGVlcCgxKTsKKyAgICBBdG9taWNzLnN0b3JlKHU4LCAwLCBz
dGF0ZVJlYWR5KTsKKyAgICB3YWl0Rm9yQWdlbnRzKG51bUFnZW50cyk7CisgICAgJC5hZ2VudC5z
bGVlcCgxKTsKKyAgICBBdG9taWNzLnN0b3JlKHU4LCAwLCBzdGF0ZUNoZWNrKTsKKyAgICB3YWl0
Rm9yQWdlbnRzKG51bUFnZW50cyk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KCJF
dmVyeXRpbmcgd2FzIGZpbmUiKTsKKyAgICAkLmFnZW50LnNsZWVwKDEpOworfQpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcyBiL0pTVGVzdHMv
d2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMKaW5kZXggOTE5MWNlYzQuLjU2MDg1
MjYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUu
anMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcwpAQCAt
Miw2ICsyLDcgQEAgaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiBpbXBvcnQg
KiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKIAogY29uc3QgaXRlcmF0aW9ucyA9IDMy
OworY29uc3QgdmVyYm9zZSA9IGZhbHNlOwogCiAvLyBUaGlzIEFQSSBpc24ndCBwYXJ0IG9mIFdl
YkFzc2VtYmx5J3Mgb2ZmaWNpYWwgc3BlYy4gSXQgaXMgdXNlIGZvciB0ZXN0aW5nIHdpdGhpbiB0
aGUgc2hlbGwuCiAKQEAgLTIxLDYgKzIyLDggQEAgYXNzZXJ0LnRocm93cygoKSA9PiBXZWJBc3Nl
bWJseU1lbW9yeU1vZGUobmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAxLCBlbGUKIAog
Y29uc3QgdmFsaWRhdGVNb2RlID0gd2hhdCA9PiB7CiAgICAgY29uc3QgbW9kZSA9IFdlYkFzc2Vt
Ymx5TWVtb3J5TW9kZSh3aGF0KTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYCAg
ICAke21vZGV9YCk7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSAiU2lnbmFsaW5nIjoK
ICAgICAgICAgYnJlYWs7CkBAIC0zOSw2ICs0Miw4IEBAIGNvbnN0IGluc3RhbnRpYXRlID0gYnVp
bGRlciA9PiB7CiB9OwogCiAoZnVuY3Rpb24gdGVzdE1lbW9yeU5vTWF4KCkgeworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdE1lbW9yeU5vTWF4YCk7CiAgICAgbGV0IG1lbW9y
aWVzID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0aW9uczsgKytpKQogICAg
ICAgICBtZW1vcmllcy5wdXNoKHZhbGlkYXRlTW9kZShuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsg
aW5pdGlhbDogaSB9KSkpOwpAQCAtNDgsNiArNTMsOCBAQCBjb25zdCBpbnN0YW50aWF0ZSA9IGJ1
aWxkZXIgPT4gewogZnVsbEdDKCk7CiAKIChmdW5jdGlvbiB0ZXN0TWVtb3J5KCkgeworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdE1lbW9yeWApOwogICAgIGxldCBtZW1vcmll
cyA9IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlvbnM7ICsraSkKICAgICAg
ICAgbWVtb3JpZXMucHVzaCh2YWxpZGF0ZU1vZGUobmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGlu
aXRpYWw6IGksIG1heGltdW06IGkgfSkpKTsKQEAgLTU3LDYgKzY0LDggQEAgZnVsbEdDKCk7CiBm
dWxsR0MoKTsKIAogKGZ1bmN0aW9uIHRlc3RJbnN0YW5jZU5vTWVtb3J5KCkgeworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdEluc3RhbmNlTm9NZW1vcnlgKTsKICAgICBsZXQg
aW5zdGFuY2VzID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0aW9uczsgKytp
KSB7CiAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKQEAgLTY2LDYgKzc1
LDggQEAgZnVsbEdDKCk7CiAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFudGlhdGUoYnVp
bGRlcik7CiAgICAgICAgIC8vIE5vLW1lbW9yeSBpbnN0YW5jZXMgc2hvdWxkIG5ldmVyIGJlIFNp
Z25hbGluZzogaXQgd291bGQgYmUgd2FzdGVmdWwuCiAgICAgICAgIGFzc2VydC5lcShXZWJBc3Nl
bWJseU1lbW9yeU1vZGUoaW5zdGFuY2UpLCAiQm91bmRzQ2hlY2tpbmciKTsKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBwcmludChgICAgICR7V2ViQXNzZW1ibHlNZW1vcnlNb2Rl
KGluc3RhbmNlKX1gKTsKICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpOwogICAgIH0K
ICAgICByZXR1cm4gaW5zdGFuY2VzOwpAQCAtNzQsNiArODUsOCBAQCBmdWxsR0MoKTsKIGZ1bGxH
QygpOwogCiAoZnVuY3Rpb24gdGVzdEluc3RhbmNlTm9NYXgoKSB7CisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIHByaW50KGB0ZXN0SW5zdGFuY2VOb01heGApOwogICAgIGxldCBpbnN0YW5jZXMg
PSBbXTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBpdGVyYXRpb25zOyArK2kpIHsKICAgICAg
ICAgLy8gTm90ZTogbm90IGV4cG9ydGVkISBUaGUgaW50ZXJuYWwgQVBJIGNhbiBzdGlsbCBhY2Nl
c3MuCkBAIC04OSw2ICsxMDIsOCBAQCBmdWxsR0MoKTsKIGZ1bGxHQygpOwogCiAoZnVuY3Rpb24g
dGVzdEluc3RhbmNlKCkgeworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdElu
c3RhbmNlYCk7CiAgICAgbGV0IGluc3RhbmNlcyA9IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBp
ICE9IGl0ZXJhdGlvbnM7ICsraSkgewogICAgICAgICAvLyBOb3RlOiBub3QgZXhwb3J0ZWQhIFRo
ZSBpbnRlcm5hbCBBUEkgY2FuIHN0aWxsIGFjY2Vzcy4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS91dGlsaXRpZXMuanMgYi9KU1Rlc3RzL3dhc20vdXRpbGl0aWVzLmpzCmluZGV4IDE5ZjliNGUu
LmJjNjlhZDcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS91dGlsaXRpZXMuanMKKysrIGIvSlNU
ZXN0cy93YXNtL3V0aWxpdGllcy5qcwpAQCAtNzksNiArNzksMTIgQEAgY29uc3QgX2R1bXAgPSAo
d2hhdCwgbmFtZSwgcGFkID0gJyAgICAnKSA9PiB7CiAgICAgcmV0dXJuIHM7CiB9OwogCitleHBv
cnQgY29uc3QgdG9KYXZhU2NyaXB0TmFtZSA9IG5hbWUgPT4geworICAgIGNvbnN0IGNhbWVsQ2Fz
ZSA9IG5hbWUucmVwbGFjZSgvKFteYS16MC05XS4pL2csIGMgPT4gY1sxXS50b1VwcGVyQ2FzZSgp
KTsKKyAgICBjb25zdCBDYW1lbENhc2UgPSBjYW1lbENhc2UuY2hhckF0KDApLnRvVXBwZXJDYXNl
KCkgKyBjYW1lbENhc2Uuc2xpY2UoMSk7CisgICAgcmV0dXJuIENhbWVsQ2FzZTsKK307CisKIC8v
IFVzZSB1bmRlcnNjb3JlIG5hbWVzIHRvIGF2b2lkIGNsYXNoaW5nIHdpdGggYnVpbHRpbiBuYW1l
cy4KIGV4cG9ydCB7CiAgICAgX2R1bXAgYXMgZHVtcCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggODIwZDRjMS4uYjVlYzdmOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTMxNDQsMjIgKzMxNDQsNDYgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQjM6Oldhc21Cb3VuZHNDaGVjazogewor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAgICAgICAgIFdhc21Cb3VuZHNDaGVja1ZhbHVl
KiB2YWx1ZSA9IG1fdmFsdWUtPmFzPFdhc21Cb3VuZHNDaGVja1ZhbHVlPigpOwogCiAgICAgICAg
ICAgICBWYWx1ZSogcHRyID0gdmFsdWUtPmNoaWxkKDApOwogCi0gICAgICAgICAgICBBcmcgdGVt
cCA9IG1fY29kZS5uZXdUbXAoR1ApOwotICAgICAgICAgICAgYXBwZW5kKEluc3QoTW92ZTMyLCB2
YWx1ZSwgdG1wKHB0ciksIHRlbXApKTsKKyAgICAgICAgICAgIEFyZyBwdHJQbHVzSW1tID0gbV9j
b2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICBhcHBlbmQoSW5zdChNb3ZlMzIsIHZhbHVlLCB0
bXAocHRyKSwgcHRyUGx1c0ltbSkpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5vZmZzZXQoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChpbW0odmFsdWUtPm9mZnNldCgpKSkKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW0odmFsdWUtPm9mZnNldCgpKSwgdGVtcCk7CisgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tKHZhbHVlLT5vZmZzZXQoKSksIHB0clBs
dXNJbW0pOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBcmcg
YmlnSW1tID0gbV9jb2RlLm5ld1RtcChHUCk7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbSh2YWx1ZS0+b2Zmc2V0KCkpLCBiaWdJbW0pOwotICAgICAgICAgICAg
ICAgICAgICBhcHBlbmQoQWRkNjQsIGJpZ0ltbSwgdGVtcCk7CisgICAgICAgICAgICAgICAgICAg
IGFwcGVuZChBZGQ2NCwgYmlnSW1tLCBwdHJQbHVzSW1tKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmQoSW5zdChBaXI6Oldhc21Cb3VuZHNDaGVj
aywgdmFsdWUsIHRlbXAsIEFyZyh2YWx1ZS0+cGlubmVkR1BSKCkpKSk7CisKKyAgICAgICAgICAg
IEFyZyBsaW1pdDsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+cGlubmVkR1BSKCkgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgICAgICBsaW1pdCA9IEFyZyh2YWx1ZS0+cGlubmVkR1BSKCkp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU2lnbmFsaW5nIG1lbW9y
aWVzIGRvbid0IHBpbiBhIHJlZ2lzdGVyIGJlY2F1c2Ugb25seSB0aGUgYWNjZXNzZXMgd2hvc2Ug
cmVnK2ltbSBjb3VsZCBldmVyIG92ZXJmbG93IDRHaUIrcmVkem9uZSBuZWVkIHRvIGJlIGNoZWNr
ZWQsCisgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGRvbid0IHRoaW5rIHRoZXNlIHdpbGwgYmUg
ZnJlcXVlbnQuIEFsbCBvdGhlciBhY2Nlc3NlcyB3aWxsIHRyYXAgZHVlIHRvIFBST1RfTk9ORSBw
YWdlcy4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIElmIHdlIGdvdCBo
ZXJlIGl0J3MgYmVjYXVzZSBhIG1lbW9yeSBhY2Nlc3MgaGFkIGEgdmVyeSBsYXJnZSBvZmZzZXQu
IFdlIGNvdWxkIGNoZWNrIHRoYXQgaXQgZG9lc24ndCBleGNlZWQgNEdpQityZWR6b25lIHNpbmNl
IHRoYXQncworICAgICAgICAgICAgICAgIC8vIHRlY2huaWNhbGx5IHRoZSBsaW1pdCB3ZSBuZWVk
IHRvIGF2b2lkIG92ZXJmbG93aW5nLCBidXQgaXQncyBiZXR0ZXIgaWYgd2UgdXNlIGEgc21hbGxl
ciBpbW1lZGlhdGUgd2hpY2ggY29kZWdlbnMgbW9yZSBlYXNpbHkuCisgICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB0aGF0IGFueXRoaW5nIGFib3ZlIHRoZSBkZWNsYXJlZCAnbWF4aW11bScgd2ls
bCB0cmFwLCBzbyB3ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgbnVtYmVyLiBJZiB0aGVyZSB3
YXMgbm8gZGVjbGFyZWQKKyAgICAgICAgICAgICAgICAvLyAnbWF4aW11bScgdGhlbiB3ZSBzdGls
bCBrbm93IHRoYXQgYW55IGFjY2VzcyBhYm92ZSA0R2lCIHdpbGwgdHJhcCwgbm8gbmVlZCB0byBh
ZGQgdGhlIHJlZHpvbmUuCisgICAgICAgICAgICAgICAgbGltaXQgPSBtX2NvZGUubmV3VG1wKEdQ
KTsKKyAgICAgICAgICAgICAgICBzaXplX3QgbGltaXRWYWx1ZSA9IHZhbHVlLT5tYXhpbXVtKCkg
PyB2YWx1ZS0+bWF4aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGltaXRWYWx1ZSA8PSB2
YWx1ZS0+cmVkem9uZUxpbWl0KCkpOworICAgICAgICAgICAgICAgIGlmIChpbW0obGltaXRWYWx1
ZSkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBpbW0obGltaXRWYWx1ZSksIGxp
bWl0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbShsaW1pdFZhbHVlKSwgbGltaXQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYXBwZW5kKEluc3QoQWlyOjpXYXNtQm91bmRzQ2hlY2ssIHZhbHVlLCBwdHJQbHVz
SW1tLCBsaW1pdCkpOworI2Vsc2UKKyAgICAgICAgICAgIGFwcGVuZChBaXI6Ok9vcHMpOworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKaW5kZXggNmU2YTkzZC4u
Y2MzYTU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcApAQCAtNDcw
LDcgKzQ3MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtp
bmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDMyLCAo
IkF0ICIsICp2YWx1ZSkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKG1fcHJvY2VkdXJlLmNv
ZGUoKS5pc1Bpbm5lZCh2YWx1ZS0+YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCktPnBpbm5lZEdQ
UigpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmFzPFdh
c21Cb3VuZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURShtX3Byb2NlZHVyZS5jb2RlKCkuaXNQaW5uZWQodmFs
dWUtPmFzPFdhc21Cb3VuZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSksICgiQXQgIiwgKnZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUobV9wcm9jZWR1cmUuY29kZSgpLndhc21C
b3VuZHNDaGVja0dlbmVyYXRvcigpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuY3BwCmluZGV4IDhjOTEwYWEuLjY1YjE3ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYXJpYWJsZVZh
bHVlLmgiCisjaW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgogI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KQEAgLTY2NCw3ICs2NjUsOCBAQCBFZmZlY3RzIFZhbHVl
OjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgcmVzdWx0ID0gRWZmZWN0czo6Zm9yQ2hlY2soKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXYXNtQm91bmRzQ2hlY2s6Ci0gICAgICAgIHJlc3Vs
dC5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIGlmIChhczxXYXNtQm91bmRzQ2hlY2tWYWx1
ZT4oKS0+cGlubmVkR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJlc3VsdC5y
ZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIHJlc3VsdC5leGl0c1NpZGV3YXlzID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBVcHNpbG9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwCmluZGV4IGIzYTMyOTAuLjhh
ZWNjMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRz
Q2hlY2tWYWx1ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIK
IAogI2lmIEVOQUJMRShCM19KSVQpCiAKQEAgLTM0LDEwICszNSwxMSBAQCBXYXNtQm91bmRzQ2hl
Y2tWYWx1ZTo6fldhc21Cb3VuZHNDaGVja1ZhbHVlKCkKIHsKIH0KIAotV2FzbUJvdW5kc0NoZWNr
VmFsdWU6Oldhc21Cb3VuZHNDaGVja1ZhbHVlKE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwdHIsIEdQ
UlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkIG9mZnNldCkKK1dhc21Cb3VuZHNDaGVja1ZhbHVlOjpX
YXNtQm91bmRzQ2hlY2tWYWx1ZShPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcgcGlu
bmVkR1BSLCB1bnNpZ25lZCBvZmZzZXQsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgIDogVmFsdWUo
Q2hlY2tlZE9wY29kZSwgV2FzbUJvdW5kc0NoZWNrLCBvcmlnaW4sIHB0cikKICAgICAsIG1fcGlu
bmVkR1BSKHBpbm5lZEdQUikKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAsIG1fbWF4aW11
bShtYXhpbXVtKQogewogfQogCkBAIC00Niw5ICs0OCwyMiBAQCBWYWx1ZSogV2FzbUJvdW5kc0No
ZWNrVmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CiAgICAgcmV0dXJuIG5ldyBXYXNtQm91bmRzQ2hl
Y2tWYWx1ZSgqdGhpcyk7CiB9CiAKK3NpemVfdCBXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6cmVkem9u
ZUxpbWl0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9waW5uZWRHUFIgPT0gSW52YWxpZEdQUlJl
Zyk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSArIFdhc206Ok1lbW9y
eTo6ZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpOworI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKIHZvaWQgV2FzbUJvdW5kc0NoZWNrVmFsdWU6OmR1
bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0g
ICAgb3V0LnByaW50KGNvbW1hLCAic2l6ZVJlZ2lzdGVyID0gIiwgbV9waW5uZWRHUFIsICIsIG9m
ZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBpZiAobV9waW5uZWRHUFIgPT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAicmVkem9uZUxpbWl0ID0gIiwgcmVkem9uZUxp
bWl0KCksICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBlbHNlCisgICAgICAgIG91dC5w
cmludChjb21tYSwgInNpemVSZWdpc3RlciA9ICIsIG1fcGlubmVkR1BSLCAiLCBvZmZzZXQgPSAi
LCBtX29mZnNldCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgKaW5kZXggY2NjNTRi
OC4uMTEwZTcxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJv
dW5kc0NoZWNrVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQjNWYWx1ZS5o
IgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTQ2LDggKzQ3LDE2IEBAIHB1
YmxpYzoKICAgICAKICAgICB+V2FzbUJvdW5kc0NoZWNrVmFsdWUoKTsKIAorI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKyAgICB0eXBlZGVmIFdhc206OlBhZ2VDb3VudCBQYWdlQ291bnQ7CisjZWxz
ZQorICAgIHR5cGVkZWYgY2hhciBQYWdlQ291bnQ7CisjZW5kaWYKKwogICAgIEdQUlJlZyBwaW5u
ZWRHUFIoKSBjb25zdCB7IHJldHVybiBtX3Bpbm5lZEdQUjsgfQogICAgIHVuc2lnbmVkIG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgc2l6ZV90IHJlZHpvbmVMaW1pdCgp
IGNvbnN0OworICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVt
OyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC01NywxMCArNjYsMTEgQEAgcHJvdGVjdGVkOgog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgV2FzbUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcgcGlu
bmVkR1BSLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhc21Cb3Vu
ZHNDaGVja1ZhbHVlKE9yaWdpbiwgVmFsdWUqIHB0ciwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWdu
ZWQgb2Zmc2V0LCBQYWdlQ291bnQgbWF4aW11bSk7CiAKICAgICBHUFJSZWcgbV9waW5uZWRHUFI7
CiAgICAgdW5zaWduZWQgbV9vZmZzZXQ7CisgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDdXN0b20uY3BwCmluZGV4IDdlZTdmM2MuLjQ5Y2E1NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCBib29sIFdhc21C
b3VuZHNDaGVja0N1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKICAgICBpZiAoIWluc3Qu
YXJnc1swXS5pc1RtcCgpICYmICFpbnN0LmFyZ3NbMF0uaXNTb21lSW1tKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBpbnN0LmFyZ3NbMV0uaXNSZWcoKTsKKyAgICByZXR1
cm4gaW5zdC5hcmdzWzFdLmlzUmVnKCkgfHwgaW5zdC5hcmdzWzFdLmlzVG1wKCkgfHwgaW5zdC5h
cmdzWzFdLmlzU29tZUltbSgpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAK
aW5kZXggMDE5OTZhZi4uYTZmNjkxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAK
QEAgLTE1MTg1LDcgKzE1MTg1LDggQEAgdm9pZCB0ZXN0V2FzbUJvdW5kc0NoZWNrKHVuc2lnbmVk
IG9mZnNldCkKICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBpZiAocG9p
bnRlclR5cGUoKSAhPSBJbnQzMikKICAgICAgICAgbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBsZWZ0KTsKLSAgICByb290LT5hcHBlbmROZXc8V2Fz
bUJvdW5kc0NoZWNrVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsZWZ0LCBwaW5uZWQsIG9mZnNldCk7
CisgICAgV2FzbTo6UGFnZUNvdW50IG1heGltdW07CisgICAgcm9vdC0+YXBwZW5kTmV3PFdhc21C
b3VuZHNDaGVja1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbGVmdCwgcGlubmVkLCBvZmZzZXQsIG1h
eGltdW0pOwogICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMHg0Mik7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKaW5kZXggM2FlZTMwMS4uMTlhY2IyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIK
ICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVk
ZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMjUwLDYgKzI1MSw3
IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fc2l6ZUFm
dGVyTGFzdEVkZW5Db2xsZWN0KDApCiAgICAgLCBtX3NpemVCZWZvcmVMYXN0RWRlbkNvbGxlY3Qo
MCkKICAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKKyAgICAsIG1fd2ViQXNzZW1i
bHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKICAgICAsIG1fYnl0ZXNBYmFuZG9u
ZWRTaW5jZUxhc3RGdWxsQ29sbGVjdCgwKQogICAgICwgbV9tYXhFZGVuU2l6ZShtX21pbkJ5dGVz
UGVyQ3ljbGUpCiAgICAgLCBtX21heEhlYXBTaXplKG1fbWluQnl0ZXNQZXJDeWNsZSkKQEAgLTQ2
Niw2ICs0NjgsMTIgQEAgdm9pZCBIZWFwOjpkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnlTbG93
Q2FzZShzaXplX3Qgc2l6ZSkKICAgICByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZFNsb3dDYXNl
KHNpemUpOwogfQogCit2b2lkIEhlYXA6OnJlcG9ydFdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxs
b2NhdGVkKHNpemVfdCBjb3VudCkKK3sKKyAgICBkaWRBbGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1l
bW9yaWVzKGNvdW50KTsKKyAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7Cit9CisKIHZv
aWQgSGVhcDo6cmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKQogewogICAgIC8vIE91ciBjbGll
bnRzIGRvbid0IGtub3cgZXhhY3RseSBob3cgbXVjaCBtZW1vcnkgdGhleQpAQCAtMjEwMyw2ICsy
MTExLDcgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICBpZiAodmVy
Ym9zZSkgewogICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgICAgICBkYXRhTG9nKCJieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZSA9ICIsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUsICJcbiIpOwor
ICAgICAgICBkYXRhTG9nKCJ3ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNs
ZSA9ICIsIG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGUsICJcbiIp
OwogICAgIH0KICAgICAKICAgICAvLyBDYWxjdWxhdGUgb3VyIGN1cnJlbnQgaGVhcCBzaXplIHRo
cmVzaG9sZCBmb3IgdGhlIHB1cnBvc2Ugb2YgZmlndXJpbmcgb3V0IHdoZW4gd2Ugc2hvdWxkCkBA
IC0yMTgwLDYgKzIxODksNyBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1pdHMoKQog
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJzaXplQWZ0ZXJMYXN0Q29sbGVjdCA9
ICIsIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QsICJcbiIpOwogICAgIG1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGUgPSAwOworICAgIG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgPSAwOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2co
Ij0+ICIsIGN1cnJlbnRIZWFwU2l6ZSAvIDEwMjQsICJrYiwgIik7CkBAIC0yMjUzLDYgKzIyNjMs
MTEgQEAgdm9pZCBIZWFwOjpkaWRBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiAgICAgcGVyZm9ybUlu
Y3JlbWVudChieXRlcyk7CiB9CiAKK3ZvaWQgSGVhcDo6ZGlkQWxsb2NhdGVXZWJBc3NlbWJseUZh
c3RNZW1vcmllcyhzaXplX3QgY291bnQpCit7CisgICAgbV93ZWJBc3NlbWJseUZhc3RNZW1vcmll
c0FsbG9jYXRlZFRoaXNDeWNsZSArPSBjb3VudDsKK30KKwogYm9vbCBIZWFwOjppc1ZhbGlkQWxs
b2NhdGlvbihzaXplX3QpCiB7CiAgICAgaWYgKCFpc1ZhbGlkVGhyZWFkU3RhdGUobV92bSkpCkBA
IC0yNDU2LDcgKzI0NzEsMTUgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVy
KEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiAgICAgICAgIGlmIChtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlIDw9IE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9ieXRlc0FsbG9jYXRlZFRo
aXNDeWNsZSA8PSBtX21heEVkZW5TaXplKQorICAgICAgICAvLyBXZWJBc3NlbWJseSBmYXN0IG1l
bW9yaWVzIHVzZSBsYXJnZSBhbW91bnRzIG9mIHZpcnR1YWwgbWVtb3J5IGFuZAorICAgICAgICAv
LyB3ZSBkb24ndCBrbm93IGhvdyBtYW55IGNhbiBleGlzdCBpbiB0aGlzIHByb2Nlc3MuIFdlIGtl
ZXAgdHJhY2sgb2YKKyAgICAgICAgLy8gdGhlIG1vc3QgZmFzdCBtZW1vcmllcyB0aGF0IGhhdmUg
ZXhpc3RlZCBhdCBhbnkgcG9pbnQgaW4gdGltZS4gVGhlIEdDCisgICAgICAgIC8vIHVzZXMgdGhp
cyB0b3Agd2F0ZXJtYXJrIGFzIGFuIGluZGljYXRpb24gb2Ygd2hldGhlciByZWNlbnQKKyAgICAg
ICAgLy8gYWxsb2NhdGlvbnMgc2hvdWxkIGNhdXNlIGEgY29sbGVjdGlvbjogZ2V0IHRvbyBjbG9z
ZSBhbmQgd2UgbWF5IGJlCisgICAgICAgIC8vIGNsb3NlIHRvIHRoZSBhY3R1YWwgbGltaXQuCisg
ICAgICAgIHNpemVfdCBmYXN0TWVtb3J5VGhyZXNob2xkID0gc3RkOjptYXg8c2l6ZV90PigxLCBX
YXNtOjpNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCgpIC8gMik7CisgICAgICAgIGlmIChtX3dl
YkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlIDw9IGZhc3RNZW1vcnlUaHJl
c2hvbGQKKyAgICAgICAgICAgICYmIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPD0gbV9tYXhF
ZGVuU2l6ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAppbmRleCBkMDY1NzAxLi44NWQ4YzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCkBAIC0xOTgsNiArMTk4LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKHNpemVfdCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKIAorICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBm
b3IgdW5jb21taXR0ZWQgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbnMgY2F1c2VkIGJ5CisgICAg
Ly8gV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcy4gVGhpcyBpcyBjb3VudGVkIHNlcGFyYXRlbHkg
YmVjYXVzZSB2aXJ0dWFsCisgICAgLy8gbWVtb3J5IGlzIGxvZ2ljYWxseSBhIGRpZmZlcmVudCB0
eXBlIG9mIHJlc291cmNlIHRoYW4gY29tbWl0dGVkIHBoeXNpY2FsCisgICAgLy8gbWVtb3J5LiBX
ZSBjYW4gb2Z0ZW4gYWxsb2NhdGUgaHVnZSBhbW91bnRzIG9mIHZpcnR1YWwgbWVtb3J5ICh0aGlu
aworICAgIC8vIGdpZ2FieXRlcykgd2l0aG91dCBhZHZlcnNlbHkgYWZmZWN0aW5nIHJlZ3VsYXIg
R0MnZCBtZW1vcnkuIEF0IHNvbWUgcG9pbnQKKyAgICAvLyB0aG91Z2gsIHRvbyBtdWNoIHZpcnR1
YWwgbWVtb3J5IGJlY29tZXMgcHJvaGliaXRpdmUgYW5kIHdlIHdhbnQgdG8KKyAgICAvLyBjb2xs
ZWN0IEdDLWFibGUgb2JqZWN0cyB3aGljaCBrZWVwIHRoaXMgdmlydHVhbCBtZW1vcnkgYWxpdmUu
CisgICAgLy8gVGhpcyBpcyBjb3VudGVkIGluIG51bWJlciBvZiBmYXN0IG1lbW9yaWVzLCBub3Qg
Ynl0ZXMuCisgICAgdm9pZCByZXBvcnRXZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZChz
aXplX3QpOworCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIC8vIFVzZSB0aGlzIEFQ
SSB0byByZXBvcnQgdGhlIHN1YnNldCBvZiBleHRyYSBtZW1vcnkgdGhhdCBsaXZlcyBvdXRzaWRl
IHRoaXMgcHJvY2Vzcy4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFs
TWVtb3J5VmlzaXRlZChzaXplX3QpOwpAQCAtMjQ3LDYgKzI1Nyw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGRlbGV0ZUFsbFVubGlua2VkQ29kZUJsb2NrcyhEZWxldGVBbGxDb2RlRWZmb3J0KTsKIAog
ICAgIHZvaWQgZGlkQWxsb2NhdGUoc2l6ZV90KTsKKyAgICB2b2lkIGRpZEFsbG9jYXRlV2ViQXNz
ZW1ibHlGYXN0TWVtb3JpZXMoc2l6ZV90KTsKICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRl
YWRsaW5lKTsKICAgICAKICAgICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRp
bmVzKCkgeyByZXR1cm4gKm1faml0U3R1YlJvdXRpbmVzOyB9CkBAIC01MjUsNiArNTM2LDcgQEAg
cHJpdmF0ZToKICAgICBzaXplX3QgbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0OwogCiAgICAg
c2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CisgICAgc2l6ZV90IG1fd2ViQXNzZW1i
bHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7CiAgICAgc2l6ZV90IG1fYnl0ZXNBYmFu
ZG9uZWRTaW5jZUxhc3RGdWxsQ29sbGVjdDsKICAgICBzaXplX3QgbV9tYXhFZGVuU2l6ZTsKICAg
ICBzaXplX3QgbV9tYXhIZWFwU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKaW5kZXggYmU2YjZmMS4uN2M4NWExMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiT3B0
aW9ucy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRlICJTdXBlclNh
bXBsZXIuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5o
IgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPG11dGV4PgpAQCAtNTgsNiAr
NTksOSBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAgIHN0ZDo6Y2FsbF9vbmNlKGlu
aXRpYWxpemVUaHJlYWRpbmdPbmNlRmxhZywgW117CiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOwogICAgICAgICBPcHRpb25zOjppbml0aWFsaXplKCk7CisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorICAgICAgICBXYXNtOjpNZW1vcnk6OmluaXRpYWxpemVQcmVhbGxvY2F0aW9u
cygpOworI2VuZGlmCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgICAg
ICBXcml0ZUJhcnJpZXJDb3VudGVyczo6aW5pdGlhbGl6ZSgpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggNjBjYWFlMC4uZWE1YWRmZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDM3LDkgKzQzNywxMCBAQCB0
eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHNpemUsIHdlYkFzc2VtYmx5
UGFydGlhbENvbXBpbGVMaW1pdCwgNTAwMCwgTm9ybWFsLCAiTGltaXQgb24gdGhlIG51bWJlciBv
ZiBieXRlcyBhIFdhc206OlBsYW46OmNvbXBpbGUgc2hvdWxkIGF0dGVtcHQgYmVmb3JlIGNoZWNr
aW5nIGZvciBvdGhlciB3b3JrLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUIzT3B0
aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5vcm1hbCwgIkIz
IE9wdGltaXphdGlvbiBsZXZlbCBmb3IgV2ViIEFzc2VtYmx5IG1vZHVsZXMuIikgXAogICAgIFwK
LSAgICB2KGJvb2wsIHNpbXVsYXRlV2ViQXNzZW1ibHlMb3dNZW1vcnksIGZhbHNlLCBOb3JtYWws
ICJJZiB0cnVlLCB0aGUgTWVtb3J5IG9iamVjdCB3b24ndCBtbWFwIHRoZSBmdWxsICdtYXhpbXVt
JyByYW5nZSBhbmQgaW5zdGVhZCB3aWxsIGFsbG9jYXRlIHRoZSBtaW5pbXVtIHJlcXVpcmVkIGFt
b3VudC4iKSBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnksIHRydWUsIE5v
cm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBhIDMyLWJpdCBhZGRyZXNzIHNwYWNl
IHdpdGggYSBzaWduYWwgaGFuZGxlciB0byBib3VuZHMgY2hlY2sgd2FzbSBtZW1vcnkuIikgXAor
ICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcywgMTI4LCBO
b3JtYWwsICJXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIHVzZSA0R2lCIHZpcnR1YWwgYWxsb2Nh
dGlvbnMsIHBsdXMgYSByZWR6b25lIChjb3VudGVkIGFzIG11bHRpcGxlIG9mIDY0S2lCIFdlYkFz
c2VtYmx5IHBhZ2VzKSBhdCB0aGUgZW5kIHRvIGNhdGNoIHJlZytpbW0gYWNjZXNzZXMgd2hpY2gg
ZXhjZWVkIDMyLWJpdCwgYW55dGhpbmcgYmV5b25kIHRoZSByZWR6b25lIGlzIGV4cGxpY2l0bHkg
Ym91bmRzLWNoZWNrZWQiKSBcCiAgICAgdihib29sLCBjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFz
dE1lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgY3Jhc2ggaWYgd2UgY2Fu
J3Qgb2J0YWluIGZhc3QgbWVtb3J5IGZvciB3YXNtLiIpIFwKKyAgICB2KHVuc2lnbmVkLCB3ZWJB
c3NlbWJseUZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50LCA0LCBOb3JtYWwsICJXZWJBc3NlbWJs
eSBmYXN0IG1lbW9yaWVzIGNhbiBiZSBwcmUtYWxsb2NhdGVkIGF0IHByb2dyYW0gc3RhcnR1cCBh
bmQgcmVtYWluIGNhY2hlZCB0byBhdm9pZCBmcmFnbWVudGF0aW9uIGxlYWRpbmcgdG8gYm91bmRz
LWNoZWNrZWQgbWVtb3J5LiBUaGlzIG51bWJlciBpcyBhbiB1cHBlciBib3VuZCBvbiBpbml0aWFs
IGFsbG9jYXRpb24gYXMgd2VsbCBhcyB0b3RhbCBjb3VudCBvZiBmYXN0IG1lbW9yaWVzLiBaZXJv
IG1lYW5zIG5vIHByZS1hbGxvY2F0aW9uLCBubyBjYWNoaW5nLCBhbmQgbm8gbGltaXQgdG8gdGhl
IG51bWJlciBvZiBydW50aW1lIGFsbG9jYXRpb25zLiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYkFz
c2VtYmx5RmFzdFRMUywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNl
IGZhc3QgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaWYgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBs
YXRmb3JtLiIpCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCmluZGV4IDg4MmQxYzcuLjI2NzAzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTIyNyw2ICsyMjcsOCBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwg
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpOwogCisgICAgdm9pZCBm
aXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QmKTsKKwogICAg
IFZhbHVlKiBtYXRlcmlhbGl6ZVdhc21Db250ZXh0KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsK
ICAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgVmFs
dWUqKTsKICAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9y
eUluZm9ybWF0aW9uJiwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKik7
CkBAIC0yNDgsNiArMjUwLDE1IEBAIHByaXZhdGU6CiAgICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1
ZTsgLy8gRklYTUU6IG1ha2UgdGhpcyBsYXp5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjk3OTIKIH07CiAKKy8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJs
eSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQg
MzItYml0IG9mZnNldHMgaW4gQjMuCit2b2lkIEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBs
dXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMyX3QmIG9mZnNldCkKK3sKKyAgICBp
ZiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAgIHB0ciA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgcHRy
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgb2Zmc2V0KSk7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgfQorfQorCiBWYWx1ZSogQjNJ
UkdlbmVyYXRvcjo6bWF0ZXJpYWxpemVXYXNtQ29udGV4dChQcm9jZWR1cmUmIHByb2MsIEJhc2lj
QmxvY2sqIGJsb2NrKQogewogICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CkBAIC0z
MzEsNyArMzQyLDE2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgaWYgKGluZm8ubWVt
b3J5KSB7CiAgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsKICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQocGlubmVkR1BSLCBtX21lbW9yeVNpemVHUFIgPT0gcGlu
bmVkR1BSKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAgICAgICBjYXNl
IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoSW52YWxpZEdQUlJlZyA9PSBwaW5uZWRHUFIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9y
eU1vZGVzOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBF
eGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAgICAgIH0pOwogICAg
IH0KQEAgLTUxNywxMCArNTM3LDE5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVp
bnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlCiBpbmxpbmUg
VmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9u
KQogewogICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOwotICAgIGlmIChtX21vZGUgPT0gTWVt
b3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpIHsKKyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNh
c2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgIC8vIFdlJ3JlIG5vdCB1c2lu
ZyBzaWduYWwgaGFuZGxpbmcgYXQgYWxsLCB3ZSBtdXN0IHRoZXJlZm9yZSBjaGVjayB0aGF0IG5v
IG1lbW9yeSBhY2Nlc3MgZXhjZWVkcyB0aGUgY3VycmVudCBtZW1vcnkgc2l6ZS4KICAgICAgICAg
QVNTRVJUKG1fbWVtb3J5U2l6ZUdQUik7CiAgICAgICAgIEFTU0VSVChzaXplT2ZPcGVyYXRpb24g
KyBvZmZzZXQgPiBvZmZzZXQpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdh
c21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyLCBtX21lbW9yeVNp
emVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBw
b2ludGVyLCBtX21lbW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEsIG1f
aW5mby5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZW1vcnlN
b2RlOjpTaWduYWxpbmc6CisgICAgICAgIC8vIFdlJ3ZlIHZpcnR1YWxseSBtYXBwZWQgNEdpQity
ZWR6b25lIGZvIHRoaXMgbWVtb3J5LiBPbmx5IHRoZSB1c2VyLWFsbG9jYXRlZCBwYWdlcyBhcmUg
YWRkcmVzc2FibGUsIGNvbnRpZ3VvdXNseSBpbiByYW5nZSBbMCwgY3VycmVudF0sIGFuZCBldmVy
eXRoaW5nIGFib3ZlIGlzIG1hcHBlZCBQUk9UX05PTkUuIFdlIGRvbid0IG5lZWQgdG8gcGVyZm9y
bSBhbnkgZXhwbGljaXQgYm91bmRzIGNoZWNrIGluIHRoZSA0R2lCIHJhbmdlIGJlY2F1c2UgV2Vi
QXNzZW1ibHkgcmVnaXN0ZXIgbWVtb3J5IGFjY2Vzc2VzIGFyZSAzMi1iaXQuIEhvd2V2ZXIgV2Vi
QXNzZW1ibHkgcmVnaXN0ZXIraW1tZWRpYXRlIGFjY2Vzc2VzIHBlcmZvcm0gdGhlIGFkZGl0aW9u
IGluIDY0LWJpdCB3aGljaCBjYW4gcHVzaCBhbiBhY2Nlc3MgYWJvdmUgdGhlIDMyLWJpdCBsaW1p
dC4gVGhlIHJlZHpvbmUgd2lsbCBjYXRjaCBtb3N0IHNtYWxsIGltbWVkaWF0ZXMsIGFuZCB3ZSds
bCBleHBsaWNpdGx5IGJvdW5kcyBjaGVjayBhbnkgcmVnaXN0ZXIgKyBsYXJnZSBpbW1lZGlhdGUg
YWNjZXNzLgorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRz
Q2hlY2tWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlciwgSW52YWxpZEdQUlJlZywgc2l6
ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSwgbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE1lbW9yeU1vZGU6Ok51bWJlck9mTWVtb3J5TW9kZXM6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIHBvaW50ZXIg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2lu
KCksIHBvaW50ZXIpOwogICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21B
ZGRyZXNzVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5QmFzZUdQUik7
CkBAIC01NjAsNiArNTg5LDggQEAgaW5saW5lIEIzOjpLaW5kIEIzSVJHZW5lcmF0b3I6Om1lbW9y
eUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCkKIAogaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9y
OjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQz
Ml90IG9mZnNldCkKIHsKKyAgICBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIG9mZnNl
dCk7CisKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6
IHsKICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsK
QEAgLTY5Nyw2ICs3MjgsOCBAQCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9mU3RvcmVPcChTdG9yZU9w
VHlwZSBvcCkKIAogaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVP
cFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1
aW50MzJfdCBvZmZzZXQpCiB7CisgICAgZml4dXBQb2ludGVyUGx1c09mZnNldChwb2ludGVyLCBv
ZmZzZXQpOworCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlODoKICAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAppbmRleCA2N2JiNTdkLi5i
YmE0NGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmNwcApAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCB0cmFwSGFu
ZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQogICAg
ICAgICAgICAgYXV0byYgYWN0aXZlRmFzdE1lbW9yaWVzID0gdmlld0FjdGl2ZUZhc3RNZW1vcmll
cyhsb2NrZXIpOwogICAgICAgICAgICAgZm9yICh2b2lkKiBhY3RpdmVNZW1vcnkgOiBhY3RpdmVG
YXN0TWVtb3JpZXMpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiY2hl
Y2tpbmcgZmFzdCBtZW1vcnkgYXQ6ICIsIFJhd1BvaW50ZXIoYWN0aXZlTWVtb3J5KSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFjdGl2ZU1lbW9yeSA8PSBmYXVsdGluZ0FkZHJlc3MgJiYgZmF1bHRp
bmdBZGRyZXNzIDwgc3RhdGljX2Nhc3Q8Y2hhcio+KGFjdGl2ZU1lbW9yeSkgKyBmYXN0TWVtb3J5
TWFwcGVkQnl0ZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZlTWVtb3J5IDw9IGZhdWx0
aW5nQWRkcmVzcyAmJiBmYXVsdGluZ0FkZHJlc3MgPCBzdGF0aWNfY2FzdDxjaGFyKj4oYWN0aXZl
TWVtb3J5KSArIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgZmF1bHRlZEluQWN0aXZlRmFzdE1lbW9yeSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeS5jcHAKaW5kZXggN2VmM2Q0Zi4uYWVkYmE4MiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKQEAgLTMyLDE0NiArMzIsMjQ4IEBACiAjaW5jbHVkZSAi
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogI2luY2x1ZGUgIldhc21UaHVua3MuaCIKIAotI2lu
Y2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDxhdG9taWM+CisjaW5jbHVkZSA8d3Rm
L01vbm90b25pY1RpbWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLW5hbWVzcGFjZSB7Ci1jb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKLX0KKy8vIEZJWE1FOiBXZSBjb3VsZCBiZSBzbWFydGVyIGFib3V0
IG1lbXNldCAvIG1tYXAgLyBtYWR2aXNlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcwMzQzCiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKQorLy8gRklYTUUgY2hh
bmdlIHRoaXMKK1N0YXRpY0xvY2sgbWVtb3J5TG9jazsKKworc3RhdGljIEhhc2hTZXQ8dm9pZCo+
JiBhY3RpdmVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogewotICAgIENSQVNI
KCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8dm9pZCo+PiBhY3RpdmVGYXN0
TWVtb3JpZXM7CisgICAgcmV0dXJuIGFjdGl2ZUZhc3RNZW1vcmllczsKIH0KIAotaW5saW5lIGJv
b2wgbW1hcEJ5dGVzKHNpemVfdCBieXRlcywgdm9pZComIG1lbW9yeSkKK2NvbnN0IEhhc2hTZXQ8
dm9pZCo+JiB2aWV3QWN0aXZlRmFzdE1lbW9yaWVzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2Nr
ZXIpCiB7Ci0gICAgZGF0YUxvZ0lmKHZlcmJvc2UsICJBdHRlbXB0aW5nIHRvIG1tYXAgIiwgYnl0
ZXMsICIgYnl0ZXM6ICIpOwotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGhh
ZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM2MDAKLSAgICB2b2lkKiByZXN1bHQgPSBtbWFwKG51bGxwdHIsIGJ5dGVz
LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAgICBpZiAocmVz
dWx0ID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImZhaWxl
ZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJzdWNjZWVkZWQiKTsKLSAgICBtZW1vcnkgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIGFjdGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpOwogfQogCi1jb25zdCBjaGFy
KiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9kZSkKK25hbWVzcGFjZSB7Citjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gdHJ1ZTsKKworLy8gQWxsb2NhdGUgZmFzdCBtZW1vcmllcyB2ZXJ5IGVhcmx5
IGF0IHByb2dyYW0gc3RhcnR1cCBhbmQgY2FjaGUgdGhlbS4gVGhlIGZhc3QgbWVtb3JpZXMgdXNl
IHNpZ25pZmljYW50IGFtb3VudHMgb2YgdmlydHVhbCB1bmNvbW1pdHRlZCBhZGRyZXNzIHNwYWNl
LCByZWR1Y2luZyB0aGUgbGlrZWxpaG9vZCB0aGF0IHdlJ2xsIG9idGFpbiBhbnkgaWYgd2Ugd2Fp
dCB0byBhbGxvY2F0ZSB0aGVtLgorLy8gV2Ugc3RpbGwgdHJ5IHRvIGFsbG9jYXRlIGZhc3QgbWVt
b3JpZXMgYXQgcnVudGltZSwgYW5kIHdpbGwgY2FjaGUgdGhlbSB3aGVuIHJlbGlucXVpc2hlZCB1
cCB0byB0aGUgcHJlYWxsb2NhdGlvbiBsaW1pdC4KKy8vIE5vdGUgdGhhdCB0aGlzIHN0YXRlIGlz
IHBlci1wcm9jZXNzLCBub3QgcGVyLVZNLgorY29uc3RleHByIHNpemVfdCBmYXN0TWVtb3J5Q2Fj
aGVIYXJkTGltaXQgPSAxNjsKK2NvbnN0ZXhwciBzaXplX3QgZmFzdE1lbW9yeUFsbG9jYXRpb25T
b2Z0TGltaXQgPSAzMjsgLy8gUHJldmVudHMgZmlsbGluZyB1cCB0aGUgdmlydHVhbCBhZGRyZXNz
IHNwYWNlLgorc2l6ZV90IGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50IHsgMCB9Oworc3RkOjph
dG9taWM8dm9pZCo+IGZhc3RNZW1vcnlDYWNoZVtmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXRdID0g
eyBBVE9NSUNfVkFSX0lOSVQobnVsbHB0cikgfTsKK3N0ZDo6YXRvbWljPHNpemVfdD4gY3VycmVu
dGx5QWxsb2NhdGVkRmFzdE1lbW9yaWVzID0gQVRPTUlDX1ZBUl9JTklUKDApOworc3RkOjphdG9t
aWM8c2l6ZV90PiBvYnNlcnZlZE1heGltdW1GYXN0TWVtb3J5ID0gQVRPTUlDX1ZBUl9JTklUKDAp
OworCitORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5
Q291bGRudEdldEZhc3RNZW1vcnkoKQogewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2Ug
TWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOwotICAg
IGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7Ci0gICAgY2Fz
ZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9yeU1vZGVzOiBicmVhazsKLSAgICB9Ci0gICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gIiI7CisgICAgQ1JBU0goKTsK
IH0KIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEZhc3RNZW1vcmllcyA9IDQ7Ci1zdGF0aWMg
dW5zaWduZWQgYWxsb2NhdGVkRmFzdE1lbW9yaWVzIHsgMCB9OwotU3RhdGljTG9jayBtZW1vcnlM
b2NrOwotaW5saW5lIERlcXVlPHZvaWQqLCBtYXhGYXN0TWVtb3JpZXM+JiBhdmFpbGFibGVGYXN0
TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RMb2NrZXImKQordm9pZCogbW1hcEJ5dGVzKHNpemVfdCBi
eXRlcykKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGVxdWU8dm9pZCosIG1heEZhc3RN
ZW1vcmllcz4+IGF2YWlsYWJsZUZhc3RNZW1vcmllczsKLSAgICByZXR1cm4gYXZhaWxhYmxlRmFz
dE1lbW9yaWVzOworI2lmIE9TKERBUldJTikKKyAgICBpbnQgZmQgPSBWTV9UQUdfRk9SX1dFQkFT
U0VNQkxZX01FTU9SWTsKKyNlbHNlCisgICAgaW50IGZkID0gLTE7CisjZW5kaWYKKworICAgIHZv
aWQqIGxvY2F0aW9uID0gbW1hcChudWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFU
RSB8IE1BUF9BTk9OLCBmZCwgMCk7CisgICAgcmV0dXJuIGxvY2F0aW9uID09IE1BUF9GQUlMRUQg
PyBudWxscHRyIDogbG9jYXRpb247CiB9CiAKLWlubGluZSBIYXNoU2V0PHZvaWQqPiYgYWN0aXZl
RmFzdE1lbW9yaWVzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK3N0YXRpYyB2b2lkKiB0cnlHZXRG
YXN0TWVtb3J5KCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDx2b2lkKj4+
IGFjdGl2ZUZhc3RNZW1vcmllczsKLSAgICByZXR1cm4gYWN0aXZlRmFzdE1lbW9yaWVzOworICAg
IHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7CisKKyAgICBpZiAoTElLRUxZKGZhc3RNZW1vcnlFbmFi
bGVkKCkpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYXN0TWVtb3J5UHJl
YWxsb2NhdGVDb3VudDsgKytpKSB7CisgICAgICAgICAgICBpZiAodm9pZCogcHJldmlvdXMgPSBm
YXN0TWVtb3J5Q2FjaGVbaV0uZXhjaGFuZ2UobnVsbHB0ciwgc3RkOjptZW1vcnlfb3JkZXJfYWNx
X3JlbCkpIHsKKyAgICAgICAgICAgICAgICBtZW1vcnkgPSBwcmV2aW91czsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5R2V0RmFzdE1lbW9yeSByZS11c2luZyAiLCBS
YXdQb2ludGVyKG1lbW9yeSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIHNvZnQgbGltaXQgaXMgaW5oZXJlbnRseSBy
YWN5IGJlY2F1c2UgY2hlY2tpbmcrYWxsb2NhdGlvbiBpc24ndCBhdG9taWMuIEV4Y2VlZGluZyBp
dCBzbGlnaHRseSBpcyBmaW5lLgorICAgICAgICBib29sIGF0QWxsb2NhdGlvblNvZnRMaW1pdCA9
IGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQpID49IGZhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0OworICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlICYmIGF0QWxsb2NhdGlvblNvZnRMaW1pdCwgInRyeUdldEZhc3RNZW1vcnkg
cmVhY2hlZCBhbGxvY2F0aW9uIHNvZnQgbGltaXQgb2YgIiwgZmFzdE1lbW9yeUFsbG9jYXRpb25T
b2Z0TGltaXQpOworCisgICAgICAgIGlmICghbWVtb3J5ICYmICFhdEFsbG9jYXRpb25Tb2Z0TGlt
aXQpIHsKKyAgICAgICAgICAgIG1lbW9yeSA9IG1tYXBCeXRlcyhNZW1vcnk6OmZhc3RNYXBwZWRC
eXRlcygpKTsKKyAgICAgICAgICAgIGlmIChtZW1vcnkpIHsKKyAgICAgICAgICAgICAgICBzaXpl
X3QgY3VycmVudGx5QWxsb2NhdGVkID0gMSArIGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmll
cy5mZXRjaF9hZGQoMSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisgICAgICAgICAgICAg
ICAgc2l6ZV90IGN1cnJlbnRseU9ic2VydmVkTWF4aW11bSA9IG9ic2VydmVkTWF4aW11bUZhc3RN
ZW1vcnkubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudGx5QWxsb2NhdGVkID4gY3VycmVudGx5T2JzZXJ2ZWRNYXhpbXVtKSB7CisgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBleHBlY3RlZCA9IGN1cnJlbnRseU9ic2VydmVkTWF4aW11
bTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JzZXJ2ZWRNYXhpbXVtRmFz
dE1lbW9yeS5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhleHBlY3RlZCwgY3VycmVudGx5QWxsb2Nh
dGVkLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRGYXN0TWVtb3J5IGN1cnJlbnRseSBv
YnNlcnZlciBtYXhpbXVtIGlzIG5vdyAiLCBjdXJyZW50bHlBbGxvY2F0ZWQpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbG9zdCB0
aGUgdXBkYXRlIHJhY2UsIGJ1dCB0aGUgY291bnRlciBpcyBtb25vdG9uaWMgc28gdGhlIHdpbm5l
ciBtdXN0IGhhdmUgdXBkYXRlZCB0aGUgdmFsdWUgdG8gd2hhdCB3ZSB3ZXJlIGdvaW5nIHRvIHVw
ZGF0ZSBpdCB0bywgb3IgbXVsdGlwbGUgd2lubmVycyBkaWQgc28uCisgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoZXhwZWN0ZWQgPj0gY3VycmVudGx5QWxsb2NhdGVkKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAidHJ5R2V0RmFzdE1lbW9yeSBhbGxvY2F0ZWQgIiwgUmF3UG9pbnRlciht
ZW1vcnkpLCAiLCBjdXJyZW50bHkgYWxsb2NhdGVkIGlzICIsIGN1cnJlbnRseUFsbG9jYXRlZCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWVtb3J5KSB7Cisg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1lbW9yeUxvY2spOworICAgICAgICBhdXRvIHJlc3Vs
dCA9IGFjdGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpLmFkZChtZW1vcnkpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRGYXN0TWVtb3J5IGNvdWxkbid0IHJlLXVz
ZSBvciBhbGxvY2F0ZSBhIGZhc3QgbWVtb3J5Iik7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSgpKSkKKyAgICAgICAgICAgIHdl
YkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWVt
b3J5OwogfQogCi1jb25zdCBIYXNoU2V0PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmllcyhj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQorc3RhdGljIHZvaWQqIHRyeUdldFNsb3dNZW1v
cnkoc2l6ZV90IGJ5dGVzKQogewotICAgIHJldHVybiBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2Vy
KTsKKyAgICB2b2lkKiBtZW1vcnkgPSBtbWFwQnl0ZXMoYnl0ZXMpOworICAgIGRhdGFMb2dMbklm
KG1lbW9yeSAmJiB2ZXJib3NlLCAiT2J0YWluZWQgc2xvdyBtZW1vcnkgIiwgUmF3UG9pbnRlciht
ZW1vcnkpLCAiIHdpdGggY2FwYWNpdHkgIiwgYnl0ZXMpOworICAgIGRhdGFMb2dMbklmKCFtZW1v
cnkgJiYgdmVyYm9zZSwgIkZhaWxlZCBvYnRhaW5pbmcgc2xvdyBtZW1vcnkgd2l0aCBjYXBhY2l0
eSAiLCBieXRlcyk7CisgICAgcmV0dXJuIG1lbW9yeTsKIH0KIAotaW5saW5lIGJvb2wgdHJ5R2V0
RmFzdE1lbW9yeShWTSYgdm0sIHZvaWQqJiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHks
IE1lbW9yeU1vZGUmIG1vZGUpCitzdGF0aWMgdm9pZCByZWxpbnF1aXNoTWVtb3J5KHZvaWQqIG1l
bW9yeSwgc2l6ZV90IHdyaXRhYmxlU2l6ZSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlN
b2RlIG1vZGUpCiB7Ci0gICAgYXV0byBkZXF1ZUZhc3RNZW1vcnkgPSBbJl0gKCkgLT4gYm9vbCB7
Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSByZXR1cm4gdGhlc2UgdG8g
dGhlIE9TIGlmIHdlIGdvIHNvbWUgbnVtYmVyIG9mIEdDcwotICAgICAgICAvLyB3aXRob3V0IHVz
aW5nIHRoZW0uCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmc6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFzdE1lbW9yeUVuYWJsZWQoKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1hcHBlZENhcGFjaXR5ID09IE1lbW9yeTo6ZmFzdE1hcHBl
ZEJ5dGVzKCkpOworCisgICAgICAgIC8vIFRoaXMgbWVtb3J5IGNhbm5vdCBjYXVzZSBhIHRyYXAg
YW55bW9yZS4KICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobWVtb3J5TG9jayk7Ci0gICAgICAg
IGlmICghYXZhaWxhYmxlRmFzdE1lbW9yaWVzKGxvY2tlcikuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBtZW1vcnkgPSBhdmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2VyKS50YWtlRmlyc3QoKTsK
LSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcikuYWRk
KG1lbW9yeSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3
RW50cnkpOwotICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVkQnl0
ZXM7Ci0gICAgICAgICAgICBtb2RlID0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVz
KGxvY2tlcikucmVtb3ZlKG1lbW9yeSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCBy
ZXN1bHQpOworCisgICAgICAgIC8vIFdlIG1heSBjYWNoZSBmYXN0IG1lbW9yaWVzLiBBc3N1bWlu
ZyB3ZSB3aWxsLCB3ZSBoYXZlIHRvIHJlc2V0IHRoZW0gYmVmb3JlIGluc2VydGluZyB0aGVtIGlu
dG8gdGhlIGNhY2hlLgorICAgICAgICBpZiAod3JpdGFibGVTaXplKSB7CisgICAgICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiWmVyb2luZyBhbmQgdW5wcm90ZWN0aW5nIGZhc3QgbWVtb3J5
ICIsIFJhd1BvaW50ZXIobWVtb3J5KSwgIidzIGluaXRpYWwgIiwgd3JpdGFibGVTaXplLCAiIGJ5
dGVzIik7CisgICAgICAgICAgICBtZW1zZXQobWVtb3J5LCAwLCB3cml0YWJsZVNpemUpOworICAg
ICAgICAgICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgd3JpdGFibGVTaXplLCBQUk9UX05PTkUpKQor
ICAgICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH07CiAKLSAgICBhdXRvIGZhaWwgPSBbXSAoKSAtPiBib29sIHsKLSAgICAgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OmNyYXNoSWZXZWJBc3NlbWJseUNhbnRGYXN0TWVtb3J5KCkpKQot
ICAgICAgICAgICAgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZh
c3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHZvaWQqIGV4cGVj
dGVkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChmYXN0TWVtb3J5Q2FjaGVbaV0uY29tcGFy
ZV9leGNoYW5nZV9zdHJvbmcoZXhwZWN0ZWQsIG1lbW9yeSwgc3RkOjptZW1vcnlfb3JkZXJfYWNx
X3JlbCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAicmVsaW5xdWlz
aE1lbW9yeSBjYWNoZWQgZmFzdCBtZW1vcnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgIC8vIFdl
IG1pZ2h0IEdDIGhlcmUgc28gd2Ugc2hvdWxkIGJlIGhvbGRpbmcgdGhlIEFQSSBsb2NrLgotICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBzeW5jcm9ub3VzbHkgdHJpZ2dlciB0aGUg
R0MgZnJvbSBhbm90aGVyIHRocmVhZC4KLSAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9s
ZGluZ0FQSUxvY2soKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFmYXN0TWVtb3J5RW5hYmxlZCgpKSkK
LSAgICAgICAgcmV0dXJuIGZhaWwoKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInJl
bGlucXVpc2hNZW1vcnkgdW5hYmxlIHRvIGNhY2hlIGZhc3QgbWVtb3J5LCBmcmVlaW5nIGluc3Rl
YWQgIiwgUmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAgICAgaWYgKG11bm1hcChtZW1vcnksIE1l
bW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkpKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
Y3VycmVudGx5QWxsb2NhdGVkRmFzdE1lbW9yaWVzLmZldGNoX3N1YigxLCBzdGQ6Om1lbW9yeV9v
cmRlcl9hY3FfcmVsKTsKIAotICAgIC8vIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1
YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCi0gICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmds
ZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCi0gICAg
ICAgIHJldHVybiBmYWlsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBBU1NFUlQo
YWxsb2NhdGVkRmFzdE1lbW9yaWVzIDw9IG1heEZhc3RNZW1vcmllcyk7Ci0gICAgaWYgKGRlcXVl
RmFzdE1lbW9yeSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nOgorICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAicmVsaW5xdWlz
aEZhc3RNZW1vcnkgZnJlZWluZyBzbG93IG1lbW9yeSAiLCBSYXdQb2ludGVyKG1lbW9yeSkpOwor
ICAgICAgICBpZiAobXVubWFwKG1lbW9yeSwgbWFwcGVkQ2FwYWNpdHkpKQorICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSWYgd2UgaGF2ZSBhbGxvY2F0ZWQg
YWxsIHRoZSBmYXN0IG1lbW9yaWVzLi4uIHRvbyBiYWQuCi0gICAgaWYgKGFsbG9jYXRlZEZhc3RN
ZW1vcmllcyA9PSBtYXhGYXN0TWVtb3JpZXMpIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgYSByZWFz
b25hYmxlIGNoYW5jZSB0aGF0IGFub3RoZXIgbW9kdWxlIGhhcyBkaWVkIGJ1dCBoYXMgbm90IGJl
ZW4gY29sbGVjdGVkIHlldC4gRG9uJ3QgbG9zZSBob3BlIHlldCEKLSAgICAgICAgdm0uaGVhcC5j
b2xsZWN0QWxsR2FyYmFnZSgpOwotICAgICAgICBpZiAoZGVxdWVGYXN0TWVtb3J5KCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhaWwoKTsKKyAgICBjYXNlIE1l
bW9yeU1vZGU6Ok51bWJlck9mTWVtb3J5TW9kZXM6CisgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIGlmIChtbWFwQnl0ZXMoZmFzdE1lbW9yeU1hcHBlZEJ5dGVzLCBtZW1vcnkpKSB7Ci0gICAg
ICAgIG1hcHBlZENhcGFjaXR5ID0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzOwotICAgICAgICBtb2Rl
ID0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nOwotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtZW1v
cnlMb2NrKTsKLSAgICAgICAgYWxsb2NhdGVkRmFzdE1lbW9yaWVzKys7Ci0gICAgICAgIGF1dG8g
cmVzdWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcikuYWRkKG1lbW9yeSk7Ci0gICAgICAg
IEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIGJvb2wgbWFrZU5ld01lbW9yeVJlYWRX
cml0ZU9yUmVsaW5xdWlzaCh2b2lkKiBtZW1vcnksIHNpemVfdCBpbml0aWFsQnl0ZXMsIHNpemVf
dCBtYXBwZWRDYXBhY2l0eUJ5dGVzLCBNZW1vcnlNb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKG1l
bW9yeSAmJiBpbml0aWFsQnl0ZXMgPD0gbWFwcGVkQ2FwYWNpdHlCeXRlcyk7CisgICAgaWYgKGlu
aXRpYWxCeXRlcykgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWFya2luZyBXZWJB
c3NlbWJseSBtZW1vcnkncyAiLCBSYXdQb2ludGVyKG1lbW9yeSksICIncyBpbml0aWFsICIsIGlu
aXRpYWxCeXRlcywgIiBieXRlcyBhcyByZWFkK3dyaXRlIik7CisgICAgICAgIGlmIChtcHJvdGVj
dChtZW1vcnksIGluaXRpYWxCeXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHdoeSA9IHN0cmVycm9yKGVycm5vKTsKKyAgICAgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJGYWlsZWQgbWFraW5nIG1lbW9yeSAiLCBSYXdQb2ludGVyKG1l
bW9yeSksICIgcmVhZGFibGUgYW5kIHdyaXRhYmxlOiAiLCB3aHkpOworICAgICAgICAgICAgcmVs
aW5xdWlzaE1lbW9yeShtZW1vcnksIDAsIG1hcHBlZENhcGFjaXR5Qnl0ZXMsIG1vZGUpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotICAgIGlmIChtZW1vcnkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIGZhaWwoKTsKK2NvbnN0IGNoYXIqIG1ha2VT
dHJpbmcoTWVtb3J5TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
TWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOworICAg
IGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7CisgICAgY2Fz
ZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9yeU1vZGVzOiBicmVhazsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiI7CiB9CiAKLWlubGluZSB2
b2lkIHJlbGVhc2VGYXN0TWVtb3J5KHZvaWQqJiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUs
IHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSBtb2RlKQordm9pZCBNZW1vcnk6Omlu
aXRpYWxpemVQcmVhbGxvY2F0aW9ucygpCiB7Ci0gICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6
U2lnbmFsaW5nIHx8ICFtZW1vcnkpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBSYWNlcyBjYW5u
b3Qgb2NjdXIgaW4gdGhpcyBmdW5jdGlvbjogaXQgaXMgb25seSBjYWxsZWQgYXQgcHJvZ3JhbSBp
bml0aWFsaXphdGlvbiwgYmVmb3JlIFdlYkFzc2VtYmx5IGNhbiBiZSBpbnZva2VkLgorCisgICAg
Y29uc3QgYXV0byBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBjb25zdCBz
aXplX3QgZGVzaXJlZEZhc3RNZW1vcmllcyA9IHN0ZDo6bWluPHNpemVfdD4oT3B0aW9uczo6d2Vi
QXNzZW1ibHlGYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCgpLCBmYXN0TWVtb3J5Q2FjaGVIYXJk
TGltaXQpOworCisgICAgLy8gU3RhcnQgb2ZmIHRyeWluZyB0byBhbGxvY2F0ZSBmYXN0IG1lbW9y
aWVzIGNvbnRpZ3VvdXNseSBzbyB0aGV5IGRvbid0IGZyYWdtZW50IGVhY2ggb3RoZXIuIFRoaXMg
Y2FuIGZhaWwgaWYgdGhlIGFkZHJlc3Mgc3BhY2UgaXMgb3RoZXJ3aXNlIGZyYWdtZW50ZWQuIElu
IHRoYXQgY2FzZSwgZ28gZm9yIHNtYWxsZXIgY29udGlndW91cyBhbGxvY2F0aW9ucy4gV2UnbGwg
ZXZlbnR1YWxseSBnZXQgaW5kaXZpZHVhbCBub24tY29udGlndW91cyBmYXN0IG1lbW9yaWVzIGFs
bG9jYXRlZCwgb3Igd2UnbGwganVzdCBiZSB1bmFibGUgdG8gZml0IGEgc2luZ2xlIG9uZSBhdCB3
aGljaCBwb2ludCB3ZSBnaXZlIHVwLgorICAgIGF1dG8gYWxsb2NhdGVDb250aWd1b3VzRmFzdE1l
bW9yaWVzID0gWyZdIChzaXplX3QgbnVtQ29udGlndW91cykgLT4gYm9vbCB7CisgICAgICAgIGlm
ICh2b2lkICptZW1vcnkgPSBtbWFwQnl0ZXMoTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSAqIG51
bUNvbnRpZ3VvdXMpKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBzdWJNZW1vcnkgPSAwOyBz
dWJNZW1vcnkgPCBudW1Db250aWd1b3VzOyArK3N1Yk1lbW9yeSkgeworICAgICAgICAgICAgICAg
IHZvaWQqIHN0YXJ0QWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1lbW9yeSkgKyBN
ZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpICogc3ViTWVtb3J5ICsgc3ViTWVtb3J5OworICAgICAg
ICAgICAgICAgIGJvb2wgaW5zZXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBjYWNoZUVudHJ5ID0gMDsgY2FjaGVFbnRyeSA8IGZhc3RNZW1vcnlDYWNoZUhhcmRMaW1p
dDsgKytjYWNoZUVudHJ5KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYXN0TWVtb3J5Q2Fj
aGVbY2FjaGVFbnRyeV0ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSA9PSBudWxscHRy
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmYXN0TWVtb3J5Q2FjaGVbY2FjaGVFbnRyeV0u
c3RvcmUoc3RhcnRBZGRyZXNzLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc2VydGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9OwogCi0gICAgUkVMRUFTRV9BU1NFUlQobWVtb3J5ICYmIG1hcHBlZENhcGFjaXR5ID09IGZh
c3RNZW1vcnlNYXBwZWRCeXRlcyk7Ci0gICAgQVNTRVJUKGZhc3RNZW1vcnlFbmFibGVkKCkpOwor
ICAgIHNpemVfdCBmcmFnbWVudHMgPSAwOworICAgIHNpemVfdCBudW1GYXN0TWVtb3JpZXMgPSAw
OworICAgIHNpemVfdCBjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQgPSBkZXNpcmVk
RmFzdE1lbW9yaWVzOworICAgIHdoaWxlIChudW1GYXN0TWVtb3JpZXMgIT0gZGVzaXJlZEZhc3RN
ZW1vcmllcyAmJiBjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQgIT0gMCkgeworICAg
ICAgICBpZiAoYWxsb2NhdGVDb250aWd1b3VzRmFzdE1lbW9yaWVzKGNvbnRpZ3VvdXNNZW1vcnlB
bGxvY2F0aW9uQXR0ZW1wdCkpIHsKKyAgICAgICAgICAgIG51bUZhc3RNZW1vcmllcyArPSBjb250
aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQ7CisgICAgICAgICAgICBjb250aWd1b3VzTWVt
b3J5QWxsb2NhdGlvbkF0dGVtcHQgPSBzdGQ6Om1pbihjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlv
bkF0dGVtcHQgLSAxLCBkZXNpcmVkRmFzdE1lbW9yaWVzIC0gbnVtRmFzdE1lbW9yaWVzKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAtLWNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0
ZW1wdDsKKyAgICAgICAgKytmcmFnbWVudHM7CisgICAgfQorCisgICAgZmFzdE1lbW9yeVByZWFs
bG9jYXRlQ291bnQgPSBudW1GYXN0TWVtb3JpZXM7CisgICAgY3VycmVudGx5QWxsb2NhdGVkRmFz
dE1lbW9yaWVzLnN0b3JlKGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50LCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxheGVkKTsKKyAgICBvYnNlcnZlZE1heGltdW1GYXN0TWVtb3J5LnN0b3JlKGZhc3RN
ZW1vcnlQcmVhbGxvY2F0ZUNvdW50LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIAotICAg
IG1lbXNldChtZW1vcnksIDAsIHdyaXRhYmxlU2l6ZSk7Ci0gICAgaWYgKG1wcm90ZWN0KG1lbW9y
eSwgd3JpdGFibGVTaXplLCBQUk9UX05PTkUpKQotICAgICAgICBDUkFTSCgpOworICAgIGNvbnN0
IGF1dG8gZW5kVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogCi0gICAgTG9ja0hvbGRlciBs
b2NrZXIobWVtb3J5TG9jayk7Ci0gICAgYm9vbCByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMo
bG9ja2VyKS5yZW1vdmUobWVtb3J5KTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
KTsKLSAgICBBU1NFUlQoYXZhaWxhYmxlRmFzdE1lbW9yaWVzKGxvY2tlcikuc2l6ZSgpIDwgYWxs
b2NhdGVkRmFzdE1lbW9yaWVzKTsKLSAgICBhdmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2VyKS5h
cHBlbmQobWVtb3J5KTsKLSAgICBtZW1vcnkgPSBudWxscHRyOworICAgIGZvciAoc2l6ZV90IGNh
Y2hlRW50cnkgPSAwOyBjYWNoZUVudHJ5IDwgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQ7ICsr
Y2FjaGVFbnRyeSkgeworICAgICAgICB2b2lkKiBzdGFydEFkZHJlc3MgPSBmYXN0TWVtb3J5Q2Fj
aGVbY2FjaGVFbnRyeV0ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAg
QVNTRVJUKHN0YXJ0QWRkcmVzcyk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcmUt
YWxsb2NhdGlvbiBvZiBXZWJBc3NlbWJseSBmYXN0IG1lbW9yeSBhdCAiLCBSYXdQb2ludGVyKHN0
YXJ0QWRkcmVzcykpOworICAgIH0KKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJlLWFsbG9j
YXRlZCAiLCBmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCwgIiBXZWJBc3NlbWJseSBmYXN0IG1l
bW9yaWVzIGluICIsIGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50ID09IDAgPyAwIDogZnJhZ21l
bnRzLCBmcmFnbWVudHMgPT0gMSA/ICIgZnJhZ21lbnQsIHRvb2sgIiA6ICIgZnJhZ21lbnRzLCB0
b29rICIsIGVuZFRpbWUgLSBzdGFydFRpbWUpOwogfQogCiBNZW1vcnk6Ok1lbW9yeShQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCkBAIC0xOTQsODkgKzI5NiwxMDAgQEAgTWVt
b3J5OjpNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1h
eGltdW0sIHNpemVfdCBtYXBwZWQKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpN
ZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CiAKLVJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6
Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwg
c3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZXF1aXJlZE1vZGUpCitSZWZQdHI8TWVtb3J5PiBN
ZW1vcnk6OmNyZWF0ZUltcGwoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBz
dGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVpcmVkTW9kZSkKIHsKKyAgICBBU1NFUlQoaW5p
dGlhbCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1heGltdW0gfHwgbWF4aW11bSA+PSBpbml0aWFs
KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBvdXIgY2FsbGVyLgogCisgICAgY29u
c3Qgc2l6ZV90IGluaXRpYWxCeXRlcyA9IGluaXRpYWwuYnl0ZXMoKTsKKyAgICBjb25zdCBzaXpl
X3QgbWF4aW11bUJ5dGVzID0gbWF4aW11bSA/IG1heGltdW0uYnl0ZXMoKSA6IDA7CisgICAgY29u
c3QgYm9vbCBjYW5Vc2VGYXN0TWVtb3J5ID0gIXJlcXVpcmVkTW9kZSB8fCByZXF1aXJlZE1vZGUg
PT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nOwogICAgIE1lbW9yeU1vZGUgbW9kZSA9IHJlcXVpcmVk
TW9kZSA/ICpyZXF1aXJlZE1vZGUgOiBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzsKLSAgICBj
b25zdCBzaXplX3Qgc2l6ZSA9IGluaXRpYWwuYnl0ZXMoKTsKLSAgICBzaXplX3QgbWFwcGVkQ2Fw
YWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogUGFnZUNvdW50OjptYXgoKS5ieXRl
cygpOwotICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7CisgICAgc2l6ZV90IG1hcHBlZENhcGFj
aXR5Qnl0ZXMgPSAwOworCisgICAgLy8gV2UgbmVlZCB0byBiZSBzdXJlIHdlIGhhdmUgYSBzdHVi
IHByaW9yIHRvIHJ1bm5pbmcgY29kZS4KKyAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xl
dG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIG1ha2VFbXB0eU1lbW9yeSA9IFsmXSAoKSAt
PiBSZWZQdHI8TWVtb3J5PiB7CisgICAgaWYgKG1heGltdW0gJiYgIW1heGltdW1CeXRlcykgewor
ICAgICAgICAvLyBVc2VyIHNwZWNpZmllZCBhIHplcm8gbWF4aW11bSwgaW5pdGlhbCBzaXplIG11
c3QgYWxzbyBiZSB6ZXJvLgorICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5pdGlhbEJ5dGVzKTsK
ICAgICAgICAgaWYgKG1vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5p
dGlhbCwgbWF4aW11bSkpOwotICAgIH07Ci0KLSAgICBpZiAoIW1hcHBlZENhcGFjaXR5KSB7Ci0g
ICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugc3BlY2lmaWVkIGEgemVybyBhcyBtYXhpbXVtICh3aGlj
aCBtZWFucyB3ZSBhbHNvIGhhdmUgemVybyBhcyBpbml0aWFsIHNpemUpLgotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghc2l6ZSk7Ci0gICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6
OmNyZWF0ZSBhbGxvY2F0aW5nIG5vdGhpbmciKTsKLSAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1l
bW9yeSgpOwogICAgIH0KIAotICAgIGJvb2wgY2FuVXNlRmFzdE1lbW9yeSA9ICFyZXF1aXJlZE1v
ZGUgfHwgcmVxdWlyZWRNb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZzsKLSAgICBpZiAoIWNh
blVzZUZhc3RNZW1vcnkgfHwgIXRyeUdldEZhc3RNZW1vcnkodm0sIG1lbW9yeSwgbWFwcGVkQ2Fw
YWNpdHksIG1vZGUpKSB7Ci0gICAgICAgIGlmIChtb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHZvaWQqIG1lbW9yeSA9IG51bGxw
dHI7CisgICAgaWYgKGNhblVzZUZhc3RNZW1vcnkpIHsKKyAgICAgICAgbWVtb3J5ID0gdHJ5R2V0
RmFzdE1lbW9yeSgpOworICAgICAgICBpZiAobWVtb3J5KSB7CisgICAgICAgICAgICBtYXBwZWRD
YXBhY2l0eUJ5dGVzID0gTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKTsKKyAgICAgICAgICAgIG1v
ZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAg
aWYgKE9wdGlvbnM6OnNpbXVsYXRlV2ViQXNzZW1ibHlMb3dNZW1vcnkoKSA/IHRydWUgOiAhbW1h
cEJ5dGVzKG1hcHBlZENhcGFjaXR5LCBtZW1vcnkpKSB7Ci0gICAgICAgICAgICAvLyBUcnkgYWdh
aW4gd2l0aCBhIGRpZmZlcmVudCBudW1iZXIuCi0gICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBmYWlsZWQgb25jZSBmb3IgY2FwYWNpdHksIHRyeWlu
ZyBhZ2FpbiIpOwotICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBzaXplOwotICAgICAgICAg
ICAgaWYgKCFtYXBwZWRDYXBhY2l0eSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIG5vdCB0cnlpbmcgYWdhaW4gYmVjYXVzZSBzaXpl
IGlzIHplcm8iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUVtcHR5TWVtb3J5KCk7Ci0g
ICAgICAgICAgICB9CisgICAgaWYgKCFtZW1vcnkgJiYgbW9kZSA9PSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmcpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICBpZiAoIW1tYXBC
eXRlcyhtYXBwZWRDYXBhY2l0eSwgbWVtb3J5KSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIGZhaWxlZCB0d2ljZSIpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgfQorICAgIGlmICghbWVtb3J5
ICYmIG1heGltdW0pIHsKKyAgICAgICAgbWVtb3J5ID0gdHJ5R2V0U2xvd01lbW9yeShtYXhpbXVt
Qnl0ZXMpOworICAgICAgICBpZiAobWVtb3J5KSB7CisgICAgICAgICAgICBtYXBwZWRDYXBhY2l0
eUJ5dGVzID0gbWF4aW11bUJ5dGVzOworICAgICAgICAgICAgbW9kZSA9IE1lbW9yeU1vZGU6OkJv
dW5kc0NoZWNraW5nOwogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKG1lbW9yeSAmJiBz
aXplIDw9IG1hcHBlZENhcGFjaXR5KTsKLSAgICBpZiAobXByb3RlY3QobWVtb3J5LCBzaXplLCBQ
Uk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgewotICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMg
ZXZlciBvY2N1cj8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTg5
MAotICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbXByb3RlY3Qg
ZmFpbGVkIik7Ci0gICAgICAgIHJlbGVhc2VGYXN0TWVtb3J5KG1lbW9yeSwgMCwgbWFwcGVkQ2Fw
YWNpdHksIG1vZGUpOworICAgIGlmICghbWVtb3J5KSB7CisgICAgICAgIG1lbW9yeSA9IHRyeUdl
dFNsb3dNZW1vcnkoaW5pdGlhbEJ5dGVzKTsKICAgICAgICAgaWYgKG1lbW9yeSkgewotICAgICAg
ICAgICAgaWYgKG11bm1hcChtZW1vcnksIG1hcHBlZENhcGFjaXR5KSkKLSAgICAgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHlCeXRlcyA9IGluaXRpYWxCeXRl
czsKKyAgICAgICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBzdWNjZWVkZWQiKTsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lbW9yeShtZW1vcnksIGluaXRpYWwsIG1heGltdW0sIG1hcHBlZENhcGFjaXR5
LCBtb2RlKSk7CisgICAgaWYgKCFtZW1vcnkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgaWYgKCFtYWtlTmV3TWVtb3J5UmVhZFdyaXRlT3JSZWxpbnF1aXNoKG1lbW9yeSwgaW5pdGlh
bEJ5dGVzLCBtYXBwZWRDYXBhY2l0eUJ5dGVzLCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShtZW1vcnksIGluaXRpYWwsIG1h
eGltdW0sIG1hcHBlZENhcGFjaXR5Qnl0ZXMsIG1vZGUpKTsKIH0KIAotUmVmUHRyPE1lbW9yeT4g
TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gbW9kZSkKK1JlZlB0cjxNZW1vcnk+IE1lbW9y
eTo6Y3JlYXRlKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRp
b25hbDxNZW1vcnlNb2RlPiBtb2RlKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8
IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3Vy
IGNhbGxlci4KLSAgICBSZWZQdHI8TWVtb3J5PiByZXN1bHQgPSBjcmVhdGVJbXBsKHZtLCBpbml0
aWFsLCBtYXhpbXVtLCBtb2RlKTsKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1
bHQtPm1vZGUoKSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQtPm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVz
KTsKLSAgICAgICAgaWYgKG1vZGUpCi0gICAgICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcmVzdWx0
LT5tb2RlKCkpOwotICAgIH0KKyAgICBSZWZQdHI8TWVtb3J5PiByZXN1bHQgPSBjcmVhdGVJbXBs
KGluaXRpYWwsIG1heGltdW0sIG1vZGUpOworICAgIGlmIChyZXN1bHQgJiYgbW9kZSkKKyAgICAg
ICAgQVNTRVJUKCptb2RlID09IHJlc3VsdC0+bW9kZSgpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBNZW1vcnk6On5NZW1vcnkoKQogewotICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1v
cnk6On5NZW1vcnkgIiwgKnRoaXMpOwotICAgIHJlbGVhc2VGYXN0TWVtb3J5KG1fbWVtb3J5LCBt
X3NpemUsIG1fbWFwcGVkQ2FwYWNpdHksIG1fbW9kZSk7CiAgICAgaWYgKG1fbWVtb3J5KSB7Ci0g
ICAgICAgIGlmIChtdW5tYXAobV9tZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkpKQotICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6fk1lbW9y
eSAiLCAqdGhpcyk7CisgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobV9tZW1vcnksIG1fc2l6ZSwg
bV9tYXBwZWRDYXBhY2l0eSwgbV9tb2RlKTsKICAgICB9CiB9CiAKK3NpemVfdCBNZW1vcnk6OmZh
c3RNYXBwZWRSZWR6b25lQnl0ZXMoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+
KFBhZ2VDb3VudDo6cGFnZVNpemUpICogT3B0aW9uczo6d2ViQXNzZW1ibHlGYXN0TWVtb3J5UmVk
em9uZVBhZ2VzKCk7Cit9CisKK3NpemVfdCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpCit7Cisg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YodWludDY0X3QpID09IHNpemVvZihzaXplX3QpLCAiV2Ug
cmVseSBvbiBhbGxvd2luZyB0aGUgbWF4aW11bSBzaXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUg
Ml4zMiArIHJlZHpvbmUgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRl
Z2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpKSArIGZhc3RNYXBwZWRSZWR6b25lQnl0ZXMoKTsKK30KKworc2l6ZV90IE1lbW9y
eTo6bWF4RmFzdE1lbW9yeUNvdW50KCkKK3sKKyAgICAvLyBUaGUgb3JkZXIgY2FuIGJlIHJlbGF4
ZWQgaGVyZSBiZWNhdXNlIHdlIHByb3ZpZGUgYSBtb25vdG9uaWNhbGx5LWluY3JlYXNpbmcgZXN0
aW1hdGUuIEEgY29uY3VycmVudCBvYnNlcnZlciBjb3VsZCBzZWUgYSBzbGlnaHRseSBvdXQtb2Yt
ZGF0ZSB2YWx1ZSBidXQgY2FuJ3QgdGVsbCB0aGF0IHRoZXkgZGlkLgorICAgIHJldHVybiBvYnNl
cnZlZE1heGltdW1GYXN0TWVtb3J5LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Cit9
CisKIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKG5ld1NpemUgPiBQYWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUpKTsKQEAgLTMwMSw4
ICs0MTQsMTEgQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiAgICAgfQog
CiAgICAgaWYgKG1fbWVtb3J5ICYmIGRlc2lyZWRTaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpIHsK
LSAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBt
X3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZGVzaXJlZFNpemUgLSBtX3NpemUpLCBQUk9UX1JF
QUQgfCBQUk9UX1dSSVRFKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGV2
ZXIgb2NjdXI/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4OTAK
KyAgICAgICAgdWludDhfdCogc3RhcnRBZGRyZXNzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1f
bWVtb3J5KSArIG1fc2l6ZTsKKyAgICAgICAgc2l6ZV90IGV4dHJhQnl0ZXMgPSBkZXNpcmVkU2l6
ZSAtIG1fc2l6ZTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXh0cmFCeXRlcyk7CisgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJraW5nIFdlYkFzc2VtYmx5IG1lbW9yeSdzICIsIFJh
d1BvaW50ZXIobV9tZW1vcnkpLCAiIGFzIHJlYWQrd3JpdGUgaW4gcmFuZ2UgWyIsIFJhd1BvaW50
ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3UG9pbnRlcihzdGFydEFkZHJlc3MgKyBleHRyYUJ5
dGVzKSwgIikiKTsKKyAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXJ0QWRkcmVzcywgZXh0cmFCeXRl
cywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxhY2UgZmFpbGVkICIsICp0aGlzKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMzE2LDE2ICs0MzIsMTkgQEAgYm9vbCBN
ZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiAgICAgUkVMRUFTRV9BU1NFUlQobW9kZSgp
ICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZyk7CiAKICAgICAvLyBPdGhlcndpc2UsIGxldCdzIHRy
eSB0byBtYWtlIHNvbWUgbmV3IG1lbW9yeS4KLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmlj
ZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0gICAgdm9pZCogbmV3TWVtb3J5ID0gbW1hcChu
dWxscHRyLCBkZXNpcmVkU2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUg
fCBNQVBfQU5PTiwgLTEsIDApOwotICAgIGlmIChuZXdNZW1vcnkgPT0gTUFQX0ZBSUxFRCkKKyAg
ICAvLyBGSVhNRSBtcmVtYXAgd291bGQgYmUgbmljZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTU3CisgICAgdm9pZCogbmV3TWVtb3J5ID0gdHJ5R2V0U2xvd01l
bW9yeShkZXNpcmVkU2l6ZSk7CisgICAgaWYgKCFuZXdNZW1vcnkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghbWFrZU5ld01lbW9yeVJlYWRXcml0ZU9yUmVsaW5xdWlzaChuZXdN
ZW1vcnksIGRlc2lyZWRTaXplLCBkZXNpcmVkU2l6ZSwgbW9kZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKG1fbWVtb3J5KSB7CiAgICAgICAgIG1lbWNweShuZXdNZW1vcnks
IG1fbWVtb3J5LCBtX3NpemUpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSAhbXVubWFwKG1fbWVt
b3J5LCBtX21hcHBlZENhcGFjaXR5KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7
CisgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobV9tZW1vcnksIG1fc2l6ZSwgbV9zaXplLCBtX21v
ZGUpOwogICAgIH0KKwogICAgIG1fbWVtb3J5ID0gbmV3TWVtb3J5OwogICAgIG1fbWFwcGVkQ2Fw
YWNpdHkgPSBkZXNpcmVkU2l6ZTsKICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCBiMDI0NTFkLi5jYzM1ODZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC00MCw4ICs0MCw2IEBAIGNs
YXNzIFByaW50U3RyZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5hbWVz
cGFjZSBXYXNtIHsKIAogLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIG1vZGVzLiBz
ZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKQEAgLTYx
LDExICs1OSwxNiBAQCBwdWJsaWM6CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gISFtX21lbW9yeTsgfQogCi0gICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNy
ZWF0ZShWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRp
b25hbDxNZW1vcnlNb2RlPiByZXF1aXJlZE1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIHN0YXRp
YyB2b2lkIGluaXRpYWxpemVQcmVhbGxvY2F0aW9ucygpOworICAgIHN0YXRpYyBSZWZQdHI8TWVt
b3J5PiBjcmVhdGUoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9w
dGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVpcmVkTW9kZSA9IHN0ZDo6bnVsbG9wdCk7CiAKICAgICBN
ZW1vcnkoKSA9IGRlZmF1bHQ7CiAgICAgfk1lbW9yeSgpOwogCisgICAgc3RhdGljIHNpemVfdCBm
YXN0TWFwcGVkUmVkem9uZUJ5dGVzKCk7CisgICAgc3RhdGljIHNpemVfdCBmYXN0TWFwcGVkQnl0
ZXMoKTsgLy8gSW5jbHVkZXMgcmVkem9uZS4KKyAgICBzdGF0aWMgc2l6ZV90IG1heEZhc3RNZW1v
cnlDb3VudCgpOworCiAgICAgdm9pZCogbWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnk7
IH0KICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIFBhZ2VD
b3VudCBzaXplSW5QYWdlcygpIGNvbnN0IHsgcmV0dXJuIFBhZ2VDb3VudDo6ZnJvbUJ5dGVzKG1f
c2l6ZSk7IH0KQEAgLTgxLDcgKzg0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjaGVjaygpIHsg
IEFTU0VSVCghZGVsZXRpb25IYXNCZWd1bigpKTsgfQogcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVm
UHRyPE1lbW9yeT4gY3JlYXRlSW1wbChWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZXF1aXJlZE1vZGUgPSBzdGQ6Om51
bGxvcHQpOworICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGVJbXBsKFBhZ2VDb3VudCBp
bml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZXF1
aXJlZE1vZGUgPSBzdGQ6Om51bGxvcHQpOwogICAgIE1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBN
ZW1vcnlNb2RlKTsKICAgICBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtKTsKIApAQCAtOTQsMTIgKzk3LDE2IEBAIHByaXZhdGU6CiAgICAgTWVtb3J5TW9kZSBtX21v
ZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogfTsKIAotc3RhdGljX2Fzc2VydChz
aXplb2YodWludDY0X3QpID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVseSBvbiBhbGxvd2luZyB0
aGUgbWF4aW11bSBzaXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4zMyB3aGljaCBpcyBsYXJn
ZXIgdGhhbiBmaXRzIGluIGEgMzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3Rl
Y3QgaWYgdGhpcyBkaWRuJ3QgaG9sZC4iKTsKLQotY29uc3Qgc2l6ZV90IGZhc3RNZW1vcnlNYXBw
ZWRCeXRlcyA9IChzdGF0aWNfY2FzdDxzaXplX3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKSkgKyAxKSAqIDI7IC8vIHBvaW50ZXIgbWF4ICsgb2Zmc2V0IG1heC4gVGhpcyBp
cyBhbGwgd2UgbmVlZCBzaW5jZSBhIGxvYWQgc3RyYWRkbGluZyByZWFkYWJsZSBtZW1vcnkgd2ls
bCB0cmFwLgogZXh0ZXJuIFN0YXRpY0xvY2sgbWVtb3J5TG9jazsKIGNvbnN0IEhhc2hTZXQ8dm9p
ZCo+JiB2aWV3QWN0aXZlRmFzdE1lbW9yaWVzKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKKyNlbHNlCisKK2NsYXNzIE1lbW9yeSB7CitwdWJs
aWM6CisgICAgc3RhdGljIHNpemVfdCBtYXhGYXN0TWVtb3J5Q291bnQoKSB7IHJldHVybiAwOyB9
Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCA2
NTQ3ZDYyLi40ODMyOThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJs
eU1vZHVsZSogbW9kdWxlLAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKICAg
ICBtX21vZHVsZS5zZXQodm0sIHRoaXMsIG1vZHVsZSk7Ci0gICAgY29uc3Qgc2l6ZV90IGV4dHJh
TWVtb3J5U2l6ZSA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSAq
IHNpemVvZihSZWdpc3Rlcik7CisgICAgY29uc3Qgc2l6ZV90IGV4dHJhTWVtb3J5U2l6ZSA9IGds
b2JhbE1lbW9yeUJ5dGVTaXplKCk7CiAgICAgbV9nbG9iYWxzID0gTWFsbG9jUHRyPHVpbnQ2NF90
Pjo6bWFsbG9jKGV4dHJhTWVtb3J5U2l6ZSk7CiAgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9y
eUFsbG9jYXRlZChleHRyYU1lbW9yeVNpemUpOwogCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1vcnkpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKLSAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZCh0aGlzT2JqZWN0LT5tb2R1bGUoKS0+bW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxz
LnNpemUoKSk7CisgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVj
dC0+Z2xvYmFsTWVtb3J5Qnl0ZVNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRoaXNPYmplY3QtPm1fbnVtSW1wb3J0RnVuY3Rpb25zOyArK2kpCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9ucygpW2ldKTsKIH0KQEAgLTI5Niw3ICsy
OTYsNyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3Jl
YXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICBpZiAobW9kdWxlSW5mb3Jt
YXRpb24ubWVtb3J5ICYmICFoYXNNZW1vcnlJbXBvcnQpIHsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSk7CiAgICAgICAgICAg
ICAvLyBXZSBjcmVhdGUgYSBtZW1vcnkgd2hlbiBpdCdzIGEgbWVtb3J5IGRlZmluaXRpb24uCi0g
ICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNy
ZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3Jt
YXRpb24ubWVtb3J5Lm1heGltdW0oKSk7CisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5
PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZShtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnku
aW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKTsKICAgICAgICAg
ICAgIGlmICghbWVtb3J5KQogICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRl
T3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAKQEAgLTM1MCw2ICszNTAsMTAgQEAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNT
dGF0ZSogZXhlYywgSlMKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKK3NpemVfdCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Omdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2Yo
UmVnaXN0ZXIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAppbmRleCA4NTUx
ZmU4Li41M2VkOTlmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTkyLDYgKzkyLDcgQEAgcHJvdGVjdGVkOgog
cHJpdmF0ZToKICAgICBWTSogbV92bTsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBv
cnRGdW5jdGlvbnMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0
Pio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygp
KTsgfQorICAgIHNpemVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0OwogCiAgICAgV3Jp
dGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKaW5kZXggMzM2
OWMwZS4uNzQwZTlkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKQEAgLTExNyw2ICsxMTcsNyBAQCBXYXNtOjpQYWdl
Q291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
dWludDMyX3QgZGVsdAogICAgIH0KIAogICAgIG1lbW9yeSgpLmNoZWNrKCk7CisgICAgdm0uaGVh
cC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChXYXNtOjpQYWdlQ291bnQoZGVsdGEpLmJ5dGVz
KCkpOwogICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiB9CiAKQEAgLTEyNCw2ICsxMjUsOCBAQCB2
b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkp
KTsKKyAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1fbWVtb3J5LT5zaXpl
KCkpOworICAgIHZtLmhlYXAucmVwb3J0V2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWQo
MSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
CkBAIC0xNDEsNiArMTQ0LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fYnVmZmVyV3JhcHBlcik7CisgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQodGhpc09iamVjdC0+bWVtb3J5KCkuc2l6ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1lbW9yeUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCmluZGV4IGNmZThiOWYuLjYwYTc4MzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5
Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhl
Y1N0YXRlKiBleGVjCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8V2FzbTo6TWVtb3J5
PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbFBhZ2VDb3VudCwgbWF4
aW11bVBhZ2VDb3VudCk7CisgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6
TWVtb3J5OjpjcmVhdGUoaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCk7CiAgICAg
aWYgKCFtZW1vcnkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oIGIvU291cmNlL1dURi93dGYv
T1NBbGxvY2F0b3IuaAppbmRleCBjOWNiMTU1Li5kNzY3OGI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9PU0FsbG9jYXRvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgK
QEAgLTM2LDcgKzM2LDYgQEAgcHVibGljOgogICAgIGVudW0gVXNhZ2UgewogICAgICAgICBVbmtu
b3duVXNhZ2UgPSAtMSwKICAgICAgICAgRmFzdE1hbGxvY1BhZ2VzID0gVk1fVEFHX0ZPUl9UQ01B
TExPQ19NRU1PUlksCi0gICAgICAgIEpTR0NIZWFwUGFnZXMgPSBWTV9UQUdfRk9SX0NPTExFQ1RP
Ul9NRU1PUlksCiAgICAgICAgIEpTVk1TdGFja1BhZ2VzID0gVk1fVEFHX0ZPUl9SRUdJU1RFUkZJ
TEVfTUVNT1JZLAogICAgICAgICBKU0pJVENvZGVQYWdlcyA9IFZNX1RBR19GT1JfRVhFQ1VUQUJM
RUFMTE9DQVRPUl9NRU1PUlksCiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZN
VGFncy5oIGIvU291cmNlL1dURi93dGYvVk1UYWdzLmgKaW5kZXggYWVmMDVkMi4uMjdmYzBkZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVk1UYWdzLmgKKysrIGIvU291cmNlL1dURi93dGYv
Vk1UYWdzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUxLDE1ICs1MSwxNSBAQAogI2VuZGlmIC8vIGRlZmluZWQoVk1fTUVNT1JZX0pB
VkFTQ1JJUFRfSklUX1JFR0lTVEVSX0ZJTEUpCiAKICNpZiBkZWZpbmVkKFZNX01FTU9SWV9KQVZB
U0NSSVBUX0NPUkUpCi0jZGVmaW5lIFZNX1RBR19GT1JfQ09MTEVDVE9SX01FTU9SWSBWTV9NQUtF
X1RBRyhWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFKQorI2RlZmluZSBWTV9UQUdfRk9SX1dFQkFT
U0VNQkxZX01FTU9SWSBWTV9NQUtFX1RBRyhWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFKQogI2Vs
c2UKLSNkZWZpbmUgVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZIFZNX01BS0VfVEFHKDYzKQor
I2RlZmluZSBWTV9UQUdfRk9SX1dFQkFTU0VNQkxZX01FTU9SWSBWTV9NQUtFX1RBRyg2MykKICNl
bmRpZiAvLyBkZWZpbmVkKFZNX01FTU9SWV9KQVZBU0NSSVBUX0NPUkUpCiAKICNlbHNlIC8vIE9T
KERBUldJTikKIAogI2RlZmluZSBWTV9UQUdfRk9SX1RDTUFMTE9DX01FTU9SWSAtMQotI2RlZmlu
ZSBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlkgLTEKKyNkZWZpbmUgVk1fVEFHX0ZPUl9XRUJB
U1NFTUJMWV9NRU1PUlkgLTEKICNkZWZpbmUgVk1fVEFHX0ZPUl9FWEVDVVRBQkxFQUxMT0NBVE9S
X01FTU9SWSAtMQogI2RlZmluZSBWTV9UQUdfRk9SX1JFR0lTVEVSRklMRV9NRU1PUlkgLTEKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmNwcAppbmRleCA1OTEyYjA1Li43
YTE3MDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2
ICszNCw3IEBAIFJlc291cmNlVXNhZ2VEYXRhOjpSZXNvdXJjZVVzYWdlRGF0YSgpCiB7CiAgICAg
Ly8gVk0gdGFnIGNhdGVnb3JpZXMuCiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6SlNK
SVRdID0gTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpKU0pJVCk7CisgICAgY2F0
ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6V2ViQXNzZW1ibHldID0gTWVtb3J5Q2F0ZWdvcnlJbmZv
KE1lbW9yeUNhdGVnb3J5OjpXZWJBc3NlbWJseSk7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRl
Z29yeTo6SW1hZ2VzXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6SW1hZ2Vz
KTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMYXllcnNdID0gTWVtb3J5Q2F0ZWdv
cnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpMYXllcnMpOwogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0
ZWdvcnk6OkxpYmNNYWxsb2NdID0gTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpM
aWJjTWFsbG9jKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2Fn
ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuaAppbmRleCA3
MjM2OTZmLi45ZmY4NmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNl
VXNhZ2VEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM1LDEyICszNSwxMyBAQCBuYW1lc3BhY2UgTWVtb3J5Q2F0ZWdvcnkgewogc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGJtYWxsb2MgPSAwOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIExpYmNNYWxsb2Mg
PSAxOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIEpTSklUID0gMjsKLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBJbWFnZXMgPSAzOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEdDSGVhcCA9IDQ7Ci1zdGF0
aWMgY29uc3QgdW5zaWduZWQgR0NPd25lZCA9IDU7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgT3Ro
ZXIgPSA2Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIExheWVycyA9IDc7Ci1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgTnVtYmVyT2ZDYXRlZ29yaWVzID0gODsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBX
ZWJBc3NlbWJseSA9IDM7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgSW1hZ2VzID0gNDsKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBHQ0hlYXAgPSA1Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIEdDT3du
ZWQgPSA2Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIE90aGVyID0gNzsKK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCBMYXllcnMgPSA4Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIE51bWJlck9mQ2F0ZWdv
cmllcyA9IDk7CiB9CiAKIHN0cnVjdCBNZW1vcnlDYXRlZ29yeUluZm8gewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCmlu
ZGV4IDM2NjYwMWUuLjk3M2I4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29j
b2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Miw2ICsxNjIsNyBAQCBIaXN0
b3JpY1Jlc291cmNlVXNhZ2VEYXRhOjpIaXN0b3JpY1Jlc291cmNlVXNhZ2VEYXRhKCkKIHsKICAg
ICAvLyBWTSB0YWcgY2F0ZWdvcmllcy4KICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpK
U0pJVF0gPSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6SlNKSVQs
IDB4RkZGRjYwRkYsICJKUyBKSVQiKTsKKyAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpX
ZWJBc3NlbWJseV0gPSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6
V2ViQXNzZW1ibHksIDB4RkY2NTRGRjAsICJXZWJBc3NlbWJseSIpOwogICAgIGNhdGVnb3JpZXNb
TWVtb3J5Q2F0ZWdvcnk6OkltYWdlc10gPSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1v
cnlDYXRlZ29yeTo6SW1hZ2VzLCAweEZGRkZGRjAwLCAiSW1hZ2VzIik7CiAgICAgY2F0ZWdvcmll
c1tNZW1vcnlDYXRlZ29yeTo6TGF5ZXJzXSA9IEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKE1l
bW9yeUNhdGVnb3J5OjpMYXllcnMsIDB4RkYwMEZGRkYsICJMYXllcnMiKTsKICAgICBjYXRlZ29y
aWVzW01lbW9yeUNhdGVnb3J5OjpMaWJjTWFsbG9jXSA9IEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJ
bmZvKE1lbW9yeUNhdGVnb3J5OjpMaWJjTWFsbG9jLCAweEZGMDBGRjAwLCAibGliYyBtYWxsb2Mi
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRo
cmVhZENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhy
ZWFkQ29jb2EubW0KaW5kZXggMDY0YTYxYS4uYTMwZWYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EubW0KQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDYgKzgw
LDcgQEAgY29uc3QgY2hhciogZGlzcGxheU5hbWVGb3JWTVRhZyh1bnNpZ25lZCB0YWcpCiAgICAg
Y2FzZSBWTV9NRU1PUllfSU1BR0VJTzogcmV0dXJuICJJbWFnZUlPIjsKICAgICBjYXNlIFZNX01F
TU9SWV9DR0lNQUdFOiByZXR1cm4gIkNHIGltYWdlIjsKICAgICBjYXNlIFZNX01FTU9SWV9KQVZB
U0NSSVBUX0pJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUjogcmV0dXJuICJKU0MgSklUIjsKKyAgICBj
YXNlIFZNX01FTU9SWV9KQVZBU0NSSVBUX0NPUkU6IHJldHVybiAiV2ViQXNzZW1ibHkiOwogICAg
IGNhc2UgVk1fTUVNT1JZX01BTExPQzogcmV0dXJuICJtYWxsb2MiOwogICAgIGNhc2UgVk1fTUVN
T1JZX01BTExPQ19IVUdFOiByZXR1cm4gIm1hbGxvYyAoaHVnZSkiOwogICAgIGNhc2UgVk1fTUVN
T1JZX01BTExPQ19MQVJHRTogcmV0dXJuICJtYWxsb2MgKGxhcmdlKSI7CkBAIC0xODEsNiArMTgy
LDggQEAgc3RhdGljIHVuc2lnbmVkIGNhdGVnb3J5Rm9yVk1UYWcodW5zaWduZWQgdGFnKQogICAg
ICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdvcnk6OkltYWdlczsKICAgICBjYXNlIFZNX01FTU9SWV9K
QVZBU0NSSVBUX0pJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUjoKICAgICAgICAgcmV0dXJuIE1lbW9y
eUNhdGVnb3J5OjpKU0pJVDsKKyAgICBjYXNlIFZNX01FTU9SWV9KQVZBU0NSSVBUX0NPUkU6Cisg
ICAgICAgIHJldHVybiBNZW1vcnlDYXRlZ29yeTo6V2ViQXNzZW1ibHk7CiAgICAgY2FzZSBWTV9N
RU1PUllfTUFMTE9DOgogICAgIGNhc2UgVk1fTUVNT1JZX01BTExPQ19IVUdFOgogICAgIGNhc2Ug
Vk1fTUVNT1JZX01BTExPQ19MQVJHRToKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcv
ZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbCBiL1dlYnNpdGVzL3dlYmtp
dC5vcmcvZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbAppbmRleCAyMGI1
OWI1Li4xYTU5OGE1IDEwMDY0NAotLS0gYS9XZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50
ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwKKysrIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9k
b2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCkBAIC02NTQsOSArNjU0LDkg
QEAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgPGRkPlNwZWNpYWwgV2FzbSBvcGNv
ZGUuIFRoaXMgYnJhbmNoZXMgb24gdGhlIGZpcnN0IGNoaWxkLiBJZiB0aGUgZmlyc3QgY2hpbGQg
cGx1cyB0aGUgb2Zmc2V0CiAgICAgICAgIHByb2R1Y2VzIGEgSW50NjQgbGVzcyB0aGFuIHRvIHRo
ZSBwaW5uZWRHUFIgdGhpcyBmYWxscyB0aHJvdWdoLiBPdGhlcndpc2UsIGl0IGJyYW5jaGVzIHRv
CiAgICAgICAgIHRoZSBleGl0IHBhdGggZ2VuZXJhdGVkIGJ5IHRoZSBwYXNzZWQgZ2VuZXJhdG9y
LiBVbmxpa2UgdGhlIFBhdGNoL0NoZWNrIGZhbWlseSwgdGhlCi0gICAgICAgIGdlbmVyYXRvciB1
c2VkIGJ5IFdhc21Cb3VuZHNDaGVjayBzb3VsZCBiZSBzZXQgb24gdGhlIFByb2N1ZGVyIGl0c2Vs
Zi4gVGhlIEdSUFJlZyBwYXNzZWQgaW4KKyAgICAgICAgZ2VuZXJhdG9yIHVzZWQgYnkgV2FzbUJv
dW5kc0NoZWNrIHNob3VsZCBiZSBzZXQgb24gdGhlIFByb2NlZHVyZSBpdHNlbGYuIFRoZSBHUlBS
ZWcgcGFzc2VkIGluCiAgICAgICAgIHBpbm5lZEdQUiBtdXN0IGFsc28gYmUgbWFya2VkIGFzIHBp
bm5lZCBieSBjYWxsaW5nIHRoZSBQcm9jZWR1cmUncyBwaW5uaW5nIEFQSS4gQjMgYXNzdW1lcwot
ICAgICAgICB0aGUgV2FzbUJvdW5kc0NoZWNrIHdpbGwgc2lkZS1leGl0IHdoZW4gdGhlIGl0IGJy
YW5jaGVzLCBzbyB0aGUgZ2VuZXJhdG9yIG11c3QgZG8gc29tZSBraW5kCisgICAgICAgIHRoZSBX
YXNtQm91bmRzQ2hlY2sgd2lsbCBzaWRlLWV4aXQgd2hlbiBpdCBicmFuY2hlcywgc28gdGhlIGdl
bmVyYXRvciBtdXN0IGRvIHNvbWUga2luZAogICAgICAgICBvZiB0ZXJtaW5hdGlvbi4gSW4gV2Fz
bSB0aGlzIGlzIHVzZWQgdG8gdHJhcCBhbmQgdW53aW5kIGJhY2sgdG8gSlMuIE11c3QgdXNlIHRo
ZQogICAgICAgICBXYXNtQm91bmRzQ2hlY2tWYWx1ZSBjbGFzcy48L2RkPgogCi0tIAoyLjEwLjEK
Cg==
</data>
<flag name="commit-queue"
          id="328043"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306738</attachid>
            <date>2017-04-10 13:54:45 -0700</date>
            <delta_ts>2017-04-10 16:27:21 -0700</delta_ts>
            <desc>tune GC after discussing with Fil</desc>
            <filename>0001-fast-memories-everywhere.patch</filename>
            <type>text/plain</type>
            <size>81729</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA1MmVmZmEwZmM5YTAxYmI1NzBmZDJiZTM1NGIxN2EyN2M1YWMzNjYwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDYgQXByIDIwMTcgMTU6MTQ6NDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBmYXN0LW1l
bW9yaWVzLWV2ZXJ5d2hlcmUKCi0tLQogSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMTMgKy0KIEpTVGVzdHMvd2FzbS9XQVNNLmpzICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDMwICsrCiAuLi4vd2FzbS9mdW5jdGlvbi10ZXN0cy9t
ZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcyB8IDEzMCArKysrKysrCiBKU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQuanMgICB8IDExNyArKysrKysKIEpTVGVzdHMv
d2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMgICAgICAgIHwgIDE1ICsKIEpTVGVz
dHMvd2FzbS91dGlsaXRpZXMuanMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICsKIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwICAgICAgICAgIHwgIDM0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAgICAgICAgICAgICB8ICAg
MyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwICAgICAgICAgICAgICAg
fCAgIDQgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNw
cCAgIHwgIDIxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5oICB8ICAxNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20u
Y3BwICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
ICAgICAgICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcCAgICAgICAgICAgICAgICB8ICAzMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oICAgICAgICAgICAgICAgICAgfCAgMTMgKwogLi4uL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgfCAgIDYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaCAgICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgICB8ICAzOSArLQogLi4uL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgfCAgIDIgKy0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwICAgICAgICAgIHwgNDI5ICsrKysrKysr
KysrKystLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAg
ICAgICAgICAgfCAgMjEgKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAg
ICAgICAgICAgICAgIHwgIDEwICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCB8ICAgMSArCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmNwcCB8ICAgNCArCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmNwcCAgICAgICB8ICAgMiArLQogU291cmNlL1dURi93dGYvT1NBbGxvY2F0
b3IuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgLQogU291cmNlL1dURi93dGYvVk1UYWdz
LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmggICAgICAgICAgICB8ICAxNSArLQogLi4uL3BhZ2Uv
Y29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbSAgICAgICAgfCAgIDMgKy0KIC4uLi9X
ZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tIHwgICA1ICstCiAu
Li4vZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbCAgICAgICB8ICAgNCAr
LQogMzIgZmlsZXMgY2hhbmdlZCwgNzc4IGluc2VydGlvbnMoKyksIDIxNCBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFj
Y2Vzcy1wYXN0LTRnaWIuanMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQuanMKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
QnVpbGRlci5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCmluZGV4IDhmZjVkY2UuLmRlZTc4
NmQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCkBAIC0yNywxMiArMjcsNyBAQCBpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAn
YXNzZXJ0LmpzJzsKIGltcG9ydCAqIGFzIEJ1aWxkV2ViQXNzZW1ibHkgZnJvbSAnQnVpbGRlcl9X
ZWJBc3NlbWJseUJpbmFyeS5qcyc7CiBpbXBvcnQgKiBhcyBMTEIgZnJvbSAnTG93TGV2ZWxCaW5h
cnkuanMnOwogaW1wb3J0ICogYXMgV0FTTSBmcm9tICdXQVNNLmpzJzsKLQotY29uc3QgX3RvSmF2
YVNjcmlwdE5hbWUgPSBuYW1lID0+IHsKLSAgICBjb25zdCBjYW1lbENhc2UgPSBuYW1lLnJlcGxh
Y2UoLyhbXmEtejAtOV0uKS9nLCBjID0+IGNbMV0udG9VcHBlckNhc2UoKSk7Ci0gICAgY29uc3Qg
Q2FtZWxDYXNlID0gY2FtZWxDYXNlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY2FtZWxDYXNl
LnNsaWNlKDEpOwotICAgIHJldHVybiBDYW1lbENhc2U7Ci19OworaW1wb3J0ICogYXMgdXRpbCBm
cm9tICd1dGlsaXRpZXMuanMnOwogCiBjb25zdCBfaXNWYWxpZFZhbHVlID0gKHZhbHVlLCB0eXBl
KSA9PiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0yMjUsNyArMjIwLDcgQEAgY29uc3QgX2lt
cG9ydEdsb2JhbENvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikg
PT4gewogICAgICAgICAgICAgRW5kOiAoKSA9PiBuZXh0QnVpbGRlcgogICAgICAgICB9OwogICAg
ICAgICBmb3IgKGxldCBvcCBvZiBXQVNNLmRlc2NyaXB0aW9uLnZhbHVlX3R5cGUpIHsKLSAgICAg
ICAgICAgIGdsb2JhbEJ1aWxkZXJbX3RvSmF2YVNjcmlwdE5hbWUob3ApXSA9IChtb2R1bGUsIGZp
ZWxkLCBtdXRhYmlsaXR5KSA9PiB7CisgICAgICAgICAgICBnbG9iYWxCdWlsZGVyW3V0aWwudG9K
YXZhU2NyaXB0TmFtZShvcCldID0gKG1vZHVsZSwgZmllbGQsIG11dGFiaWxpdHkpID0+IHsKICAg
ICAgICAgICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IGdsb2JhbCBtb2R1
bGUgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7bW9kdWxlfSJgKTsKICAgICAgICAgICAgICAg
ICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgZ2xvYmFsIGZpZWxkIHNob3VsZCBiZSBh
IHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuaXNTdHJp
bmcobXV0YWJpbGl0eSwgYEltcG9ydCBnbG9iYWwgbXV0YWJpbGl0eSBzaG91bGQgYmUgYSBzdHJp
bmcsIGdvdCAiJHttdXRhYmlsaXR5fSJgKTsKQEAgLTMxOCw3ICszMTMsNyBAQCBjb25zdCBfY2hl
Y2tJbW1zID0gKG9wLCBpbW1zLCBleHBlY3RlZEltbXMsIHJldCkgPT4gewogY29uc3QgX2NyZWF0
ZUZ1bmN0aW9uQnVpbGRlciA9IChmdW5jLCBidWlsZGVyLCBwcmV2aW91c0J1aWxkZXIpID0+IHsK
ICAgICBsZXQgZnVuY3Rpb25CdWlsZGVyID0ge307CiAgICAgZm9yIChjb25zdCBvcCBpbiBXQVNN
LmRlc2NyaXB0aW9uLm9wY29kZSkgewotICAgICAgICBjb25zdCBuYW1lID0gX3RvSmF2YVNjcmlw
dE5hbWUob3ApOworICAgICAgICBjb25zdCBuYW1lID0gdXRpbC50b0phdmFTY3JpcHROYW1lKG9w
KTsKICAgICAgICAgY29uc3QgdmFsdWUgPSBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF0udmFs
dWU7CiAgICAgICAgIGNvbnN0IHJldCA9IFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlW29wXVsicmV0
dXJuIl07CiAgICAgICAgIGNvbnN0IHBhcmFtID0gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbb3Bd
LnBhcmFtZXRlcjsKQEAgLTU0Miw3ICs1MzcsNyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWls
ZGVyIHsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgb3Agb2YgV0FTTS5kZXNjcmlwdGlvbi52YWx1
ZV90eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxCdWlsZGVyW190b0phdmFT
Y3JpcHROYW1lKG9wKV0gPSAoaW5pdFZhbHVlLCBtdXRhYmlsaXR5KSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBnbG9iYWxCdWlsZGVyW3V0aWwudG9KYXZhU2NyaXB0TmFtZShvcCldID0g
KGluaXRWYWx1ZSwgbXV0YWJpbGl0eSkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHMuZGF0YS5wdXNoKHsgdHlwZTogb3AsIG9wOiBvcCArICIuY29uc3QiLCBtdXRhYmlsaXR5OiBf
bm9ybWFsaXplTXV0YWJpbGl0eShtdXRhYmlsaXR5KSwgaW5pdFZhbHVlIH0pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGdsb2JhbEJ1
aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9XQVNNLmpzIGIvSlNUZXN0cy93YXNtL1dBU00uanMKaW5kZXggMWJiNzliOC4uMWU2NGNh
ZSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL1dBU00uanMKKysrIGIvSlNUZXN0cy93YXNtL1dB
U00uanMKQEAgLTQ0LDMgKzQ0LDMzIEBAIGV4cG9ydCBjb25zdCBpc1ZhbGlkQmxvY2tUeXBlID0g
diA9PiBfYmxvY2tUeXBlU2V0Lmhhcyh2KTsKIGV4cG9ydCBjb25zdCBleHRlcm5hbEtpbmRWYWx1
ZSA9IF9tYXBWYWx1ZXMoZGVzY3JpcHRpb24uZXh0ZXJuYWxfa2luZCk7CiBleHBvcnQgY29uc3Qg
c2VjdGlvbnMgPSBPYmplY3Qua2V5cyhkZXNjcmlwdGlvbi5zZWN0aW9uKTsKIGV4cG9ydCBjb25z
dCBzZWN0aW9uRW5jb2RpbmdUeXBlID0gZGVzY3JpcHRpb24uc2VjdGlvbltzZWN0aW9uc1swXV0u
dHlwZTsKKworZXhwb3J0IGZ1bmN0aW9uKiBvcGNvZGVzKGNhdGVnb3J5ID0gdW5kZWZpbmVkKSB7
CisgICAgZm9yIChsZXQgb3AgaW4gZGVzY3JpcHRpb24ub3Bjb2RlKQorICAgICAgICBpZiAoY2F0
ZWdvcnkgIT09IHVuZGVmaW5lZCAmJiBkZXNjcmlwdGlvbi5vcGNvZGVbb3BdLmNhdGVnb3J5ID09
PSBjYXRlZ29yeSkKKyAgICAgICAgICAgIHlpZWxkIHsgbmFtZTogb3AsIG9wY29kZTogZGVzY3Jp
cHRpb24ub3Bjb2RlW29wXSB9OworfTsKK2V4cG9ydCBjb25zdCBtZW1vcnlBY2Nlc3NJbmZvID0g
b3AgPT4geworICAgIC8vICAgICAgICAgICAgICAgIDwtLS0tLS0tLS0tLXZhbHVlVHlwZS0tLS0t
LS0tLS0tPiAgPC0tLS0tLS10eXBlLS0tLS0tLT48LS0tLS0tLS0td2lkdGgtLS0tLS0tLT4gIDwt
LXNpZ24tLT4KKyAgICBjb25zdCBjbGFzc2lmeSA9IC8oKD86aTMyKXwoPzppNjQpfCg/OmYzMil8
KD86ZjY0KSlcLigoPzpsb2FkKXwoPzpzdG9yZSkpKCg/OjgpP3woPzoxNik/fCg/OjMyKT8pXz8o
KD86c3x1KT8pLzsKKyAgICBjb25zdCBmb3VuZCA9IG9wLm5hbWUubWF0Y2goY2xhc3NpZnkpOwor
ICAgIGNvbnN0IHZhbHVlVHlwZSA9IGZvdW5kWzFdOworICAgIGNvbnN0IHR5cGUgPSBmb3VuZFsy
XTsKKyAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KGZvdW5kWzNdID8gZm91bmRbM10gOiB2YWx1
ZVR5cGUuc2xpY2UoMSkpOworICAgIGNvbnN0IHNpZ24gPSAoKCkgPT4geworICAgICAgICBzd2l0
Y2ggKGZvdW5kWzRdKSB7CisgICAgICAgIGNhc2UgInMiOiByZXR1cm4gInNpZ25lZCI7CisgICAg
ICAgIGNhc2UgInUiOiByZXR1cm4gInVuc2lnbmVkIjsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJu
ICJhZ25vc3RpYyI7CisgICAgICAgIH0KKyAgICB9KSgpOworICAgIHJldHVybiB7IHZhbHVlVHlw
ZSwgdHlwZSwgd2lkdGgsIHNpZ24gfTsKK307CisKK2V4cG9ydCBjb25zdCBjb25zdEZvclZhbHVl
VHlwZSA9IHZhbHVlVHlwZSA9PiB7CisgICAgZm9yIChsZXQgb3AgaW4gZGVzY3JpcHRpb24ub3Bj
b2RlKQorICAgICAgICBpZiAob3AuZW5kc1dpdGgoIi5jb25zdCIpICYmIGRlc2NyaXB0aW9uLm9w
Y29kZVtvcF1bInJldHVybiJdID09IHZhbHVlVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBvcDsK
KyAgICB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IG5vIGNvbnN0IHR5
cGUgZm9yICR7dmFsdWVUeXBlfWApOworfTsKKwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3MtcGFzdC00Z2liLmpzIGIvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3MtcGFzdC00Z2liLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmQxYTVmMDMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMKQEAgLTAsMCArMSwx
MzAgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworaW1wb3J0ICogYXMg
YXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CitpbXBvcnQgKiBhcyBMTEIgZnJvbSAnLi4vTG93
TGV2ZWxCaW5hcnkuanMnOworaW1wb3J0ICogYXMgV0FTTSBmcm9tICcuLi9XQVNNLmpzJzsKK2lt
cG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbGl0aWVzLmpzJzsKKworY29uc3QgdmVyYm9zZSA9
IGZhbHNlOworCitjb25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKK2NvbnN0IGZvdXJHaUIgPSBw
YWdlU2l6ZSAqIDY1NTM2OworY29uc3QgaW5pdGlhbCA9IDY0OworY29uc3QgbWF4aW11bSA9IDEy
ODsKKworLy8gV2hlbiB1c2luZyBmYXN0IG1lbW9yaWVzLCB3ZSBhbGxvY2F0ZSBhIHJlZHpvbmUg
YWZ0ZXIgdGhlIDRHaUIgaHVnZQorLy8gYWxsb2NhdGlvbi4gVGhpcyByZWR6b25lIGlzIHVzZWQg
dG8gdHJhcCByZWcraW1tIGFjY2Vzc2VzIHdoaWNoIGV4Y2VlZAorLy8gMzItYml0cy4gQW55dGhp
bmcgcGFzdCA0R2lCIG11c3QgdHJhcCwgYnV0IHdlIGNhbm5vdCBrbm93IHN0YXRpY2FsbHkgdGhh
dCBpdAorLy8gd2lsbC4KKworY29uc3Qgb2Zmc2V0cyA9IFsKKyAgICAwLAorICAgIDEsCisgICAg
MiwKKyAgICAxMDI0LAorICAgIHBhZ2VTaXplLAorICAgIHBhZ2VTaXplICsgcGFnZVNpemUgLyAy
LAorICAgIHBhZ2VTaXplICogOCwKKyAgICBwYWdlU2l6ZSAqIDE2LAorICAgIHBhZ2VTaXplICog
MTI4LAorICAgIHBhZ2VTaXplICogNTEyLAorICAgIGZvdXJHaUIgLyA0IC0gNCwKKyAgICBmb3Vy
R2lCIC8gNCAtIDMsCisgICAgZm91ckdpQiAvIDQgLSAyLAorICAgIGZvdXJHaUIgLyA0IC0gMSwK
KyAgICBmb3VyR2lCIC8gNCwKKyAgICBmb3VyR2lCIC8gNCArIDEsCisgICAgZm91ckdpQiAvIDQg
KyAyLAorICAgIGZvdXJHaUIgLyA0ICsgMywKKyAgICBmb3VyR2lCIC8gNCArIDQsCisgICAgZm91
ckdpQiAvIDIgLSA0LAorICAgIGZvdXJHaUIgLyAyIC0gMywKKyAgICBmb3VyR2lCIC8gMiAtIDIs
CisgICAgZm91ckdpQiAvIDIgLSAxLAorICAgIGZvdXJHaUIgLyAyLAorICAgIGZvdXJHaUIgLyAy
ICsgMSwKKyAgICBmb3VyR2lCIC8gMiArIDIsCisgICAgZm91ckdpQiAvIDIgKyAzLAorICAgIGZv
dXJHaUIgLyAyICsgNCwKKyAgICAoZm91ckdpQiAvIDQpICogMywKKyAgICBmb3VyR2lCIC0gNCwK
KyAgICBmb3VyR2lCIC0gMywKKyAgICBmb3VyR2lCIC0gMiwKKyAgICBmb3VyR2lCIC0gMSwKK107
CisKK2ZvciAobGV0IG1lbW9yeURlY2xhcmF0aW9uIG9mIFt7IGluaXRpYWw6IGluaXRpYWwgfSwg
eyBpbml0aWFsOiBpbml0aWFsLCBtYXhpbXVtOiBtYXhpbXVtIH1dKSB7CisgICAgZnVsbEdDKCk7
CisKKyAgICAvLyBSZS11c2UgYSBzaW5nbGUgbWVtb3J5IHNvIHRlc3RzIGFyZSBtb3JlIGxpa2Vs
eSB0byBnZXQgYSBmYXN0IG1lbW9yeS4KKyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1i
bHkuTWVtb3J5KG1lbW9yeURlY2xhcmF0aW9uKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
cHJpbnQoV2ViQXNzZW1ibHlNZW1vcnlNb2RlKG1lbW9yeSkpOworICAgIGNvbnN0IGJ1ZiA9IG5l
dyBVaW50OEFycmF5KG1lbW9yeS5idWZmZXIpOworCisgICAgLy8gRW51bWVyYXRlIGFsbCBtZW1v
cnkgYWNjZXNzIHR5cGVzLgorICAgIGZvciAoY29uc3Qgb3Agb2YgV0FTTS5vcGNvZGVzKCJtZW1v
cnkiKSkgeworICAgICAgICBjb25zdCBpbmZvID0gV0FTTS5tZW1vcnlBY2Nlc3NJbmZvKG9wKTsK
KworICAgICAgICAvLyBUaGUgYWNjZXNzZXMgc2hvdWxkIGZhdWx0IGV2ZW4gaWYgb25seSB0aGUg
bGFzdCBieXRlIGlzIG9mZiB0aGUgZW5kLgorICAgICAgICBsZXQgd2lnZ2xlcyA9IFswXTsKKyAg
ICAgICAgZm9yIChsZXQgd2lnZ2xlID0gMDsgd2lnZ2xlICE9PSBpbmZvLndpZHRoIC8gODsgKyt3
aWdnbGUpCisgICAgICAgICAgICB3aWdnbGVzLnB1c2god2lnZ2xlKTsKKworICAgICAgICBsZXQg
YnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAg
ICAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlY2xhcmF0
aW9uKS5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5F
eHBvcnQoKTsKKworICAgICAgICBmb3IgKGxldCBvZmZzZXQgb2Ygb2Zmc2V0cykKKyAgICAgICAg
ICAgIHN3aXRjaCAoaW5mby50eXBlKSB7CisgICAgICAgICAgICBjYXNlICJsb2FkIjogYnVpbGRl
ciA9IGJ1aWxkZXIuRnVuY3Rpb24oImdldF8iICsgb2Zmc2V0KTsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlICJzdG9yZSI6IGJ1aWxkZXIgPSBidWlsZGVyLkZ1bmN0aW9uKCJzZXRfIiArIG9mZnNl
dCk7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1l
bnRhdGlvbiBwcm9ibGVtOiB1bmtub3duIG1lbW9yeSBhY2Nlc3MgdHlwZSAke2luZm8udHlwZX1g
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBidWlsZGVyID0gYnVpbGRlci5FbmQoKS5Db2Rl
KCk7CisKKyAgICAgICAgY29uc3QgYWxpZ24gPSAzOyAvLyBObyBuZWVkIHRvIGJlIHByZWNpc2Us
IGl0J3MganVzdCBhIGhpbnQuCisgICAgICAgIGNvbnN0IGNvbnN0SW5zdHIgPSB1dGlsLnRvSmF2
YVNjcmlwdE5hbWUoV0FTTS5jb25zdEZvclZhbHVlVHlwZShpbmZvLnZhbHVlVHlwZSkpOworICAg
ICAgICBjb25zdCBpbnN0ciA9IHV0aWwudG9KYXZhU2NyaXB0TmFtZShvcC5uYW1lKTsKKyAgICAg
ICAgZm9yIChsZXQgb2Zmc2V0IG9mIG9mZnNldHMpCisgICAgICAgICAgICBzd2l0Y2ggKGluZm8u
dHlwZSkgeworICAgICAgICAgICAgY2FzZSAibG9hZCI6CisgICAgICAgICAgICAgICAgYnVpbGRl
ciA9IGJ1aWxkZXIuRnVuY3Rpb24oImdldF8iICsgb2Zmc2V0LCB7IHBhcmFtczogWyJpMzIiXSB9
KS5HZXRMb2NhbCgwKVtpbnN0cl0oYWxpZ24sIG9mZnNldCkuRHJvcCgpLkVuZCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAic3RvcmUiOgorICAgICAgICAgICAg
ICAgIGJ1aWxkZXIgPSBidWlsZGVyLkZ1bmN0aW9uKCJzZXRfIiArIG9mZnNldCwgeyBwYXJhbXM6
IFsiaTMyIl0gfSkuR2V0TG9jYWwoMClbY29uc3RJbnN0cl0oMHhkZWFkKVtpbnN0cl0oYWxpZ24s
IG9mZnNldCkuRW5kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJv
YmxlbTogdW5rbm93biBtZW1vcnkgYWNjZXNzIHR5cGUgJHtpbmZvLnR5cGV9YCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBidWlsZGVyID0gYnVpbGRlci5FbmQoKTsKKworICAg
ICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIHsgaW1wOiB7IG1lbW9y
eTogbWVtb3J5IH0gfSk7CisKKyAgICAgICAgZm9yIChsZXQgb2Zmc2V0IG9mIG9mZnNldHMpIHsK
KyAgICAgICAgICAgIGZvciAobGV0IHdpZ2dsZSBvZiB3aWdnbGVzKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgYWRkcmVzcyA9IExMQi52YXJ1aW50MzJNYXggLSBvZmZzZXQgLSB3aWdnbGU7Cisg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIHByaW50KGAk
e29wLm5hbWUucGFkU3RhcnQoMTYsICcgJyl9OiBiYXNlIGFkZHJlc3MgJHthZGRyZXNzID4gMCA/
ICcweCcgOiAnICAnfSR7YWRkcmVzcy50b1N0cmluZygxNikucGFkU3RhcnQoOCwgYWRkcmVzcyA+
IDAgPyAnMCcgOiAnICcpfSArIG9mZnNldCAweCR7b2Zmc2V0LnRvU3RyaW5nKDE2KS5wYWRTdGFy
dCg4LCAnMCcpfSAtIHdpZ2dsZSAke3dpZ2dsZX0gPSBlZmZlY3RpdmUgYWRkcmVzcyAweCR7KGFk
ZHJlc3MgKyBvZmZzZXQgLSB3aWdnbGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwgJzAnKX1g
KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGluZm8udHlwZSkgeworICAgICAgICAgICAgICAg
IGNhc2UgImxvYWQiOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGlu
c3RhbmNlLmV4cG9ydHNbImdldF8iICsgb2Zmc2V0XShhZGRyZXNzKSwgV2ViQXNzZW1ibHkuUnVu
dGltZUVycm9yLCBgT3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzYCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgInN0b3JlIjoKKyAgICAgICAgICAg
ICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzWyJzZXRfIiArIG9m
ZnNldF0oYWRkcmVzcyksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgYE91dCBvZiBib3VuZHMg
bWVtb3J5IGFjY2Vzc2ApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVu
a25vd24gbWVtb3J5IGFjY2VzcyB0eXBlICR7aW5mby50eXBlfWApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bGxHQygpOworICAgIH0K
KworICAgIC8vIE9ubHkgY2hlY2sgdGhhdCB0aGUgbWVtb3J5IHdhcyB1bnRvdWNoZWQgYXQgdGhl
IHZlcnkgZW5kLCBiZWZvcmUgdGhyb3dpbmcgaXQgYXdheSBlbnRpcmVseS4KKyAgICBmb3IgKGxl
dCBpZHggPSAwOyBpZHggPCBidWYuYnl0ZUxlbmd0aDsgKytpZHgpCisgICAgICAgIGFzc2VydC5l
cShidWZbaWR4XSwgMCk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LW11bHRpYWdlbnQuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVt
b3J5LW11bHRpYWdlbnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRl
YzdjMgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1v
cnktbXVsdGlhZ2VudC5qcwpAQCAtMCwwICsxLDExNyBAQAorY29uc3QgcGFnZVNpemUgPSA2NCAq
IDEwMjQ7CisKK2NvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKworLy8gU3RhcnQgbXVsdGlwbGUgYWdl
bnRzIGFuZCBjcmVhdGUgV2ViQXNzZW1ibHkuTWVtb3J5IGZyb20gZWFjaCBvZgorLy8gdGhlbS4g
UGVyZm9ybSB3cml0ZXMgaW50byBlYWNoIG1lbW9yeSwgYW5kIHRoZW4gY2hlY2sgdGhhdCB0aGUg
bWVtb3J5IG9ubHkKKy8vIGNvbnRhaW5zIHRoYXQgYWdlbnQncyB3cml0ZXMuIFRoaXMgd291bGQg
ZmluZCBidWdzIHdoZXJlIGFuIGltcGxlbWVudGF0aW9uJ3MKKy8vIG1lbW9yeSByZXVzZSBpcyBi
dWdneS4KKworLy8gVXNlIHRoZSBhZ2VudCBzdXBwb3J0IGZyb20gdGVzdDI2MjogaHR0cHM6Ly9n
aXRodWIuY29tL3RjMzkvdGVzdDI2Mi9ibG9iL21hc3Rlci9JTlRFUlBSRVRJTkcubWQjaG9zdC1k
ZWZpbmVkLWZ1bmN0aW9ucworCitjb25zdCB0ZXN0SXRlcmF0aW9ucyA9IDg7Citjb25zdCBudW1B
Z2VudHMgPSA4OworY29uc3QgaW5pdGlhbFBhZ2VzID0gNjQ7Citjb25zdCBudW1Xcml0ZXMgPSAx
MDI0OworCitjb25zdCBzdGF0ZVdhaXQgPSAwOworY29uc3Qgc3RhdGVSZWFkeSA9IDE7Citjb25z
dCBzdGF0ZUNoZWNrID0gMjsKKworY29uc3Qgc3RhcnRBZ2VudHMgPSBudW1BZ2VudHNUb1N0YXJ0
ID0+IHsKKyAgICBmb3IgKGxldCBhID0gMDsgYSA8IG51bUFnZW50c1RvU3RhcnQ7ICsrYSkgewor
ICAgICAgICBjb25zdCBhZ2VudFNjcmlwdCA9IGAKKyAgICAgICAgbGV0IHN0YXRlID0gJHtzdGF0
ZVdhaXR9OworICAgICAgICBsZXQgdTg7CisKKyAgICAgICAgaWYgKCR7dmVyYm9zZX0pCisgICAg
ICAgICAgICBwcmludCgiQWdlbnQgJHthfSBzdGFydGVkIik7CisgICAgICAgICQuYWdlbnQucmVw
b3J0KCJBZ2VudCAke2F9IHN0YXJ0ZWQiKTsKKworICAgICAgICAkLmFnZW50LnJlY2VpdmVCcm9h
ZGNhc3QoKHNhYiwgbmV3U3RhdGUpID0+IHsKKyAgICAgICAgICAgIGlmICgke3ZlcmJvc2V9KQor
ICAgICAgICAgICAgICAgIHByaW50KCJBZ2VudCAke2F9IHJlY2VpdmVkIGJyb2FkY2FzdCIpOwor
ICAgICAgICAgICAgdTggPSBuZXcgVWludDhBcnJheShzYWIpOworICAgICAgICAgICAgc3RhdGUg
PSBuZXdTdGF0ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29uc3QgYnVzeVdhaXRGb3JWYWx1
ZSA9IHZhbHVlID0+IHsKKyAgICAgICAgICAgIC8vIEJ1c3ktd2FpdCBzbyB0aGF0IG9uY2UgdGhl
IFNBQiB3cml0ZSBvY2N1cnMgYWxsIGFnZW50cyB0cnkgdG8gY3JlYXRlIGEgbWVtb3J5IGF0IHRo
ZSBzYW1lIHRpbWUuCisgICAgICAgICAgICB3aGlsZSAoQXRvbWljcy5sb2FkKHU4LCAwKSAhPT0g
dmFsdWUpIDsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAg
ICAgIHByaW50KCJBZ2VudCAke2F9IHdhaXRzIik7CisgICAgICAgICQuYWdlbnQucmVwb3J0KCJB
Z2VudCAke2F9IHdhaXRzIik7CisgICAgICAgIHdoaWxlIChzdGF0ZSA9PT0gJHtzdGF0ZVdhaXR9
KSA7CisgICAgICAgICQuYWdlbnQucmVwb3J0KCJBZ2VudCAke2F9IHJlY2VpdmVkIFNBQiIpOwor
ICAgICAgICAvLyBVc2UgaXQgZm9yIGZhc3RlciBzdGF0ZSBjaGFuZ2Ugc28gYWxsIGFnZW50cyBh
cmUgbW9yZSBsaWtlbHkgdG8gZXhlY3V0ZSBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICBidXN5
V2FpdEZvclZhbHVlKCR7c3RhdGVSZWFkeX0pOworCisgICAgICAgIGxldCB3YXNtTWVtb3J5ID0g
bmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6ICR7aW5pdGlhbFBhZ2VzfSB9KTsKKyAg
ICAgICAgbGV0IG1lbW9yeSA9IG5ldyBVaW50OEFycmF5KCh3YXNtTWVtb3J5KS5idWZmZXIpOwor
ICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAgICAgIHByaW50KCJBZ2VudCAke2F9IHBl
cmZvcm1pbmcgd3JpdGVzIik7CisgICAgICAgIGZvciAobGV0IHdyaXRlID0gMDsgd3JpdGUgPCAk
e251bVdyaXRlc307ICsrd3JpdGUpIHsKKyAgICAgICAgICAgIC8vIFBlcmZvcm0gd3JpdGVzIG9m
IG91ciBhZ2VudCBudW1iZXIgYXQgYSByYW5kb20gbG9jYXRpb24uIFRoaXMgbWVtb3J5IHNob3Vs
ZCBub3QgYmUgc2hhcmVkLCBpZiB3ZSBzZWUgd3JpdGVzIG9mIG90aGVyIHZhbHVlcyB0aGVuIHNv
bWV0aGluZyB3ZW50IHdyb25nLgorICAgICAgICAgICAgY29uc3QgaWR4ID0gKE1hdGgucmFuZG9t
KCkgKiAke3BhZ2VTaXplfSAqICR7aW5pdGlhbFBhZ2VzfSkgfCAwOworICAgICAgICAgICAgbWVt
b3J5W2lkeF0gPSAke2F9OworICAgICAgICB9CisgICAgICAgIGlmICgke3ZlcmJvc2V9KQorICAg
ICAgICAgICAgcHJpbnQoIkFnZW50ICR7YX0gd3JpdGVzIHBlcmZvcm1lZCIpOworICAgICAgICAk
LmFnZW50LnJlcG9ydCgiQWdlbnQgJHthfSBwZXJmb3JtZWQgd3JpdGVzIik7CisgICAgICAgIGJ1
c3lXYWl0Rm9yVmFsdWUoJHtzdGF0ZUNoZWNrfSk7CisKKyAgICAgICAgaWYgKCR7dmVyYm9zZX0p
CisgICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSBjaGVja2luZyIpOworICAgICAgICAvLyBD
aGVjayB0aGF0IG91ciBtZW1vcnkgb25seSBjb250YWlucyAwIGFuZCBvdXIgYWdlbnQgbnVtYmVy
LgorICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCAke3BhZ2VTaXplfSAqICR7aW5pdGlh
bFBhZ2VzfTsgKytpZHgpCisgICAgICAgICAgICBpZiAobWVtb3J5W2lkeF0gIT09IDAgJiYgbWVt
b3J5W2lkeF0gIT09ICR7YX0pCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBZ2Vu
dCAke2F9IGZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUgIiArIG1lbW9yeVtpZHhdICsgIiBhdCBsb2Nh
dGlvbiAiICsgaWR4KTsKKyAgICAgICAgJC5hZ2VudC5yZXBvcnQoIkFnZW50ICR7YX0gY2hlY2tz
IG91dCBPSyIpOworICAgICAgICAkLmFnZW50LmxlYXZpbmcoKTsKKyAgICAgICAgYDsKKworICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIHByaW50KGBTdGFydGluZyBhZ2VudCAke2F9
YCk7CisgICAgICAgICQuYWdlbnQuc3RhcnQoYWdlbnRTY3JpcHQpOworICAgIH0KK307CisKK2Nv
bnN0IHdhaXRGb3JBZ2VudHMgPSBudW1BZ2VudHNUb1dhaXRGb3IgPT4geworICAgIGZvciAobGV0
IGEgPSAwOyBhIDwgbnVtQWdlbnRzVG9XYWl0Rm9yOyArK2EpIHsKKyAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgIGNvbnN0IHJlcG9ydCA9ICQuYWdlbnQuZ2V0UmVwb3J0KCk7Cisg
ICAgICAgICAgICBpZiAocmVwb3J0ID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgJC5hZ2Vu
dC5zbGVlcCgxKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIHByaW50KGBSZWNlaXZlZDog
JHtyZXBvcnR9YCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK307CisK
K2NvbnN0IGJyb2FkY2FzdFRvQWdlbnRzID0gKHNhYiwgbmV3U3RhdGUpID0+IHsKKyAgICAkLmFn
ZW50LmJyb2FkY2FzdChzYWIsIG5ld1N0YXRlKTsKK307CisKK2NvbnN0IHNhYiA9IG5ldyBTaGFy
ZWRBcnJheUJ1ZmZlcigxMDI0KTsKK2NvbnN0IHU4ID0gbmV3IFVpbnQ4QXJyYXkoc2FiKTsKKwor
Zm9yIChsZXQgaXQgPSAwOyBpdCA8IHRlc3RJdGVyYXRpb25zOyArK2l0KSB7CisgICAgc3RhcnRB
Z2VudHMobnVtQWdlbnRzKTsKKyAgICB3YWl0Rm9yQWdlbnRzKG51bUFnZW50cyk7CisgICAgYnJv
YWRjYXN0VG9BZ2VudHMoc2FiLCBzdGF0ZVJlYWR5KTsKKyAgICB3YWl0Rm9yQWdlbnRzKG51bUFn
ZW50cyk7CisgICAgJC5hZ2VudC5zbGVlcCgxKTsKKyAgICBBdG9taWNzLnN0b3JlKHU4LCAwLCBz
dGF0ZVJlYWR5KTsKKyAgICB3YWl0Rm9yQWdlbnRzKG51bUFnZW50cyk7CisgICAgJC5hZ2VudC5z
bGVlcCgxKTsKKyAgICBBdG9taWNzLnN0b3JlKHU4LCAwLCBzdGF0ZUNoZWNrKTsKKyAgICB3YWl0
Rm9yQWdlbnRzKG51bUFnZW50cyk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KCJF
dmVyeXRpbmcgd2FzIGZpbmUiKTsKKyAgICAkLmFnZW50LnNsZWVwKDEpOworfQpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcyBiL0pTVGVzdHMv
d2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMKaW5kZXggOTE5MWNlYzQuLjU2MDg1
MjYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUu
anMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcwpAQCAt
Miw2ICsyLDcgQEAgaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiBpbXBvcnQg
KiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKIAogY29uc3QgaXRlcmF0aW9ucyA9IDMy
OworY29uc3QgdmVyYm9zZSA9IGZhbHNlOwogCiAvLyBUaGlzIEFQSSBpc24ndCBwYXJ0IG9mIFdl
YkFzc2VtYmx5J3Mgb2ZmaWNpYWwgc3BlYy4gSXQgaXMgdXNlIGZvciB0ZXN0aW5nIHdpdGhpbiB0
aGUgc2hlbGwuCiAKQEAgLTIxLDYgKzIyLDggQEAgYXNzZXJ0LnRocm93cygoKSA9PiBXZWJBc3Nl
bWJseU1lbW9yeU1vZGUobmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtpbml0aWFsOiAxLCBlbGUKIAog
Y29uc3QgdmFsaWRhdGVNb2RlID0gd2hhdCA9PiB7CiAgICAgY29uc3QgbW9kZSA9IFdlYkFzc2Vt
Ymx5TWVtb3J5TW9kZSh3aGF0KTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYCAg
ICAke21vZGV9YCk7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSAiU2lnbmFsaW5nIjoK
ICAgICAgICAgYnJlYWs7CkBAIC0zOSw2ICs0Miw4IEBAIGNvbnN0IGluc3RhbnRpYXRlID0gYnVp
bGRlciA9PiB7CiB9OwogCiAoZnVuY3Rpb24gdGVzdE1lbW9yeU5vTWF4KCkgeworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdE1lbW9yeU5vTWF4YCk7CiAgICAgbGV0IG1lbW9y
aWVzID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0aW9uczsgKytpKQogICAg
ICAgICBtZW1vcmllcy5wdXNoKHZhbGlkYXRlTW9kZShuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsg
aW5pdGlhbDogaSB9KSkpOwpAQCAtNDgsNiArNTMsOCBAQCBjb25zdCBpbnN0YW50aWF0ZSA9IGJ1
aWxkZXIgPT4gewogZnVsbEdDKCk7CiAKIChmdW5jdGlvbiB0ZXN0TWVtb3J5KCkgeworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdE1lbW9yeWApOwogICAgIGxldCBtZW1vcmll
cyA9IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlvbnM7ICsraSkKICAgICAg
ICAgbWVtb3JpZXMucHVzaCh2YWxpZGF0ZU1vZGUobmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGlu
aXRpYWw6IGksIG1heGltdW06IGkgfSkpKTsKQEAgLTU3LDYgKzY0LDggQEAgZnVsbEdDKCk7CiBm
dWxsR0MoKTsKIAogKGZ1bmN0aW9uIHRlc3RJbnN0YW5jZU5vTWVtb3J5KCkgeworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdEluc3RhbmNlTm9NZW1vcnlgKTsKICAgICBsZXQg
aW5zdGFuY2VzID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0aW9uczsgKytp
KSB7CiAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKQEAgLTY2LDYgKzc1
LDggQEAgZnVsbEdDKCk7CiAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFudGlhdGUoYnVp
bGRlcik7CiAgICAgICAgIC8vIE5vLW1lbW9yeSBpbnN0YW5jZXMgc2hvdWxkIG5ldmVyIGJlIFNp
Z25hbGluZzogaXQgd291bGQgYmUgd2FzdGVmdWwuCiAgICAgICAgIGFzc2VydC5lcShXZWJBc3Nl
bWJseU1lbW9yeU1vZGUoaW5zdGFuY2UpLCAiQm91bmRzQ2hlY2tpbmciKTsKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBwcmludChgICAgICR7V2ViQXNzZW1ibHlNZW1vcnlNb2Rl
KGluc3RhbmNlKX1gKTsKICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpOwogICAgIH0K
ICAgICByZXR1cm4gaW5zdGFuY2VzOwpAQCAtNzQsNiArODUsOCBAQCBmdWxsR0MoKTsKIGZ1bGxH
QygpOwogCiAoZnVuY3Rpb24gdGVzdEluc3RhbmNlTm9NYXgoKSB7CisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIHByaW50KGB0ZXN0SW5zdGFuY2VOb01heGApOwogICAgIGxldCBpbnN0YW5jZXMg
PSBbXTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBpdGVyYXRpb25zOyArK2kpIHsKICAgICAg
ICAgLy8gTm90ZTogbm90IGV4cG9ydGVkISBUaGUgaW50ZXJuYWwgQVBJIGNhbiBzdGlsbCBhY2Nl
c3MuCkBAIC04OSw2ICsxMDIsOCBAQCBmdWxsR0MoKTsKIGZ1bGxHQygpOwogCiAoZnVuY3Rpb24g
dGVzdEluc3RhbmNlKCkgeworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdElu
c3RhbmNlYCk7CiAgICAgbGV0IGluc3RhbmNlcyA9IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBp
ICE9IGl0ZXJhdGlvbnM7ICsraSkgewogICAgICAgICAvLyBOb3RlOiBub3QgZXhwb3J0ZWQhIFRo
ZSBpbnRlcm5hbCBBUEkgY2FuIHN0aWxsIGFjY2Vzcy4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS91dGlsaXRpZXMuanMgYi9KU1Rlc3RzL3dhc20vdXRpbGl0aWVzLmpzCmluZGV4IDE5ZjliNGUu
LmJjNjlhZDcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS91dGlsaXRpZXMuanMKKysrIGIvSlNU
ZXN0cy93YXNtL3V0aWxpdGllcy5qcwpAQCAtNzksNiArNzksMTIgQEAgY29uc3QgX2R1bXAgPSAo
d2hhdCwgbmFtZSwgcGFkID0gJyAgICAnKSA9PiB7CiAgICAgcmV0dXJuIHM7CiB9OwogCitleHBv
cnQgY29uc3QgdG9KYXZhU2NyaXB0TmFtZSA9IG5hbWUgPT4geworICAgIGNvbnN0IGNhbWVsQ2Fz
ZSA9IG5hbWUucmVwbGFjZSgvKFteYS16MC05XS4pL2csIGMgPT4gY1sxXS50b1VwcGVyQ2FzZSgp
KTsKKyAgICBjb25zdCBDYW1lbENhc2UgPSBjYW1lbENhc2UuY2hhckF0KDApLnRvVXBwZXJDYXNl
KCkgKyBjYW1lbENhc2Uuc2xpY2UoMSk7CisgICAgcmV0dXJuIENhbWVsQ2FzZTsKK307CisKIC8v
IFVzZSB1bmRlcnNjb3JlIG5hbWVzIHRvIGF2b2lkIGNsYXNoaW5nIHdpdGggYnVpbHRpbiBuYW1l
cy4KIGV4cG9ydCB7CiAgICAgX2R1bXAgYXMgZHVtcCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggODIwZDRjMS4uYjVlYzdmOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTMxNDQsMjIgKzMxNDQsNDYgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQjM6Oldhc21Cb3VuZHNDaGVjazogewor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAgICAgICAgIFdhc21Cb3VuZHNDaGVja1ZhbHVl
KiB2YWx1ZSA9IG1fdmFsdWUtPmFzPFdhc21Cb3VuZHNDaGVja1ZhbHVlPigpOwogCiAgICAgICAg
ICAgICBWYWx1ZSogcHRyID0gdmFsdWUtPmNoaWxkKDApOwogCi0gICAgICAgICAgICBBcmcgdGVt
cCA9IG1fY29kZS5uZXdUbXAoR1ApOwotICAgICAgICAgICAgYXBwZW5kKEluc3QoTW92ZTMyLCB2
YWx1ZSwgdG1wKHB0ciksIHRlbXApKTsKKyAgICAgICAgICAgIEFyZyBwdHJQbHVzSW1tID0gbV9j
b2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICBhcHBlbmQoSW5zdChNb3ZlMzIsIHZhbHVlLCB0
bXAocHRyKSwgcHRyUGx1c0ltbSkpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5vZmZzZXQoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChpbW0odmFsdWUtPm9mZnNldCgpKSkKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW0odmFsdWUtPm9mZnNldCgpKSwgdGVtcCk7CisgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tKHZhbHVlLT5vZmZzZXQoKSksIHB0clBs
dXNJbW0pOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBcmcg
YmlnSW1tID0gbV9jb2RlLm5ld1RtcChHUCk7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbSh2YWx1ZS0+b2Zmc2V0KCkpLCBiaWdJbW0pOwotICAgICAgICAgICAg
ICAgICAgICBhcHBlbmQoQWRkNjQsIGJpZ0ltbSwgdGVtcCk7CisgICAgICAgICAgICAgICAgICAg
IGFwcGVuZChBZGQ2NCwgYmlnSW1tLCBwdHJQbHVzSW1tKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmQoSW5zdChBaXI6Oldhc21Cb3VuZHNDaGVj
aywgdmFsdWUsIHRlbXAsIEFyZyh2YWx1ZS0+cGlubmVkR1BSKCkpKSk7CisKKyAgICAgICAgICAg
IEFyZyBsaW1pdDsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+cGlubmVkR1BSKCkgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgICAgICBsaW1pdCA9IEFyZyh2YWx1ZS0+cGlubmVkR1BSKCkp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU2lnbmFsaW5nIG1lbW9y
aWVzIGRvbid0IHBpbiBhIHJlZ2lzdGVyIGJlY2F1c2Ugb25seSB0aGUgYWNjZXNzZXMgd2hvc2Ug
cmVnK2ltbSBjb3VsZCBldmVyIG92ZXJmbG93IDRHaUIrcmVkem9uZSBuZWVkIHRvIGJlIGNoZWNr
ZWQsCisgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGRvbid0IHRoaW5rIHRoZXNlIHdpbGwgYmUg
ZnJlcXVlbnQuIEFsbCBvdGhlciBhY2Nlc3NlcyB3aWxsIHRyYXAgZHVlIHRvIFBST1RfTk9ORSBw
YWdlcy4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIElmIHdlIGdvdCBo
ZXJlIGl0J3MgYmVjYXVzZSBhIG1lbW9yeSBhY2Nlc3MgaGFkIGEgdmVyeSBsYXJnZSBvZmZzZXQu
IFdlIGNvdWxkIGNoZWNrIHRoYXQgaXQgZG9lc24ndCBleGNlZWQgNEdpQityZWR6b25lIHNpbmNl
IHRoYXQncworICAgICAgICAgICAgICAgIC8vIHRlY2huaWNhbGx5IHRoZSBsaW1pdCB3ZSBuZWVk
IHRvIGF2b2lkIG92ZXJmbG93aW5nLCBidXQgaXQncyBiZXR0ZXIgaWYgd2UgdXNlIGEgc21hbGxl
ciBpbW1lZGlhdGUgd2hpY2ggY29kZWdlbnMgbW9yZSBlYXNpbHkuCisgICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB0aGF0IGFueXRoaW5nIGFib3ZlIHRoZSBkZWNsYXJlZCAnbWF4aW11bScgd2ls
bCB0cmFwLCBzbyB3ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgbnVtYmVyLiBJZiB0aGVyZSB3
YXMgbm8gZGVjbGFyZWQKKyAgICAgICAgICAgICAgICAvLyAnbWF4aW11bScgdGhlbiB3ZSBzdGls
bCBrbm93IHRoYXQgYW55IGFjY2VzcyBhYm92ZSA0R2lCIHdpbGwgdHJhcCwgbm8gbmVlZCB0byBh
ZGQgdGhlIHJlZHpvbmUuCisgICAgICAgICAgICAgICAgbGltaXQgPSBtX2NvZGUubmV3VG1wKEdQ
KTsKKyAgICAgICAgICAgICAgICBzaXplX3QgbGltaXRWYWx1ZSA9IHZhbHVlLT5tYXhpbXVtKCkg
PyB2YWx1ZS0+bWF4aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGltaXRWYWx1ZSA8PSB2
YWx1ZS0+cmVkem9uZUxpbWl0KCkpOworICAgICAgICAgICAgICAgIGlmIChpbW0obGltaXRWYWx1
ZSkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBpbW0obGltaXRWYWx1ZSksIGxp
bWl0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbShsaW1pdFZhbHVlKSwgbGltaXQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYXBwZW5kKEluc3QoQWlyOjpXYXNtQm91bmRzQ2hlY2ssIHZhbHVlLCBwdHJQbHVz
SW1tLCBsaW1pdCkpOworI2Vsc2UKKyAgICAgICAgICAgIGFwcGVuZChBaXI6Ok9vcHMpOworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKaW5kZXggNmU2YTkzZC4u
Y2MzYTU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcApAQCAtNDcw
LDcgKzQ3MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtp
bmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDMyLCAo
IkF0ICIsICp2YWx1ZSkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKG1fcHJvY2VkdXJlLmNv
ZGUoKS5pc1Bpbm5lZCh2YWx1ZS0+YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCktPnBpbm5lZEdQ
UigpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmFzPFdh
c21Cb3VuZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURShtX3Byb2NlZHVyZS5jb2RlKCkuaXNQaW5uZWQodmFs
dWUtPmFzPFdhc21Cb3VuZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSksICgiQXQgIiwgKnZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUobV9wcm9jZWR1cmUuY29kZSgpLndhc21C
b3VuZHNDaGVja0dlbmVyYXRvcigpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuY3BwCmluZGV4IDhjOTEwYWEuLjY1YjE3ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYXJpYWJsZVZh
bHVlLmgiCisjaW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgogI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KQEAgLTY2NCw3ICs2NjUsOCBAQCBFZmZlY3RzIFZhbHVl
OjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgcmVzdWx0ID0gRWZmZWN0czo6Zm9yQ2hlY2soKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXYXNtQm91bmRzQ2hlY2s6Ci0gICAgICAgIHJlc3Vs
dC5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIGlmIChhczxXYXNtQm91bmRzQ2hlY2tWYWx1
ZT4oKS0+cGlubmVkR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJlc3VsdC5y
ZWFkc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIHJlc3VsdC5leGl0c1NpZGV3YXlzID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBVcHNpbG9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwCmluZGV4IGIzYTMyOTAuLjhh
ZWNjMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRz
Q2hlY2tWYWx1ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIK
IAogI2lmIEVOQUJMRShCM19KSVQpCiAKQEAgLTM0LDEwICszNSwxMSBAQCBXYXNtQm91bmRzQ2hl
Y2tWYWx1ZTo6fldhc21Cb3VuZHNDaGVja1ZhbHVlKCkKIHsKIH0KIAotV2FzbUJvdW5kc0NoZWNr
VmFsdWU6Oldhc21Cb3VuZHNDaGVja1ZhbHVlKE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwdHIsIEdQ
UlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkIG9mZnNldCkKK1dhc21Cb3VuZHNDaGVja1ZhbHVlOjpX
YXNtQm91bmRzQ2hlY2tWYWx1ZShPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcgcGlu
bmVkR1BSLCB1bnNpZ25lZCBvZmZzZXQsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgIDogVmFsdWUo
Q2hlY2tlZE9wY29kZSwgV2FzbUJvdW5kc0NoZWNrLCBvcmlnaW4sIHB0cikKICAgICAsIG1fcGlu
bmVkR1BSKHBpbm5lZEdQUikKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAsIG1fbWF4aW11
bShtYXhpbXVtKQogewogfQogCkBAIC00Niw5ICs0OCwyMiBAQCBWYWx1ZSogV2FzbUJvdW5kc0No
ZWNrVmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CiAgICAgcmV0dXJuIG5ldyBXYXNtQm91bmRzQ2hl
Y2tWYWx1ZSgqdGhpcyk7CiB9CiAKK3NpemVfdCBXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6cmVkem9u
ZUxpbWl0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9waW5uZWRHUFIgPT0gSW52YWxpZEdQUlJl
Zyk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSArIFdhc206Ok1lbW9y
eTo6ZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpOworI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKIHZvaWQgV2FzbUJvdW5kc0NoZWNrVmFsdWU6OmR1
bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0g
ICAgb3V0LnByaW50KGNvbW1hLCAic2l6ZVJlZ2lzdGVyID0gIiwgbV9waW5uZWRHUFIsICIsIG9m
ZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBpZiAobV9waW5uZWRHUFIgPT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAicmVkem9uZUxpbWl0ID0gIiwgcmVkem9uZUxp
bWl0KCksICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBlbHNlCisgICAgICAgIG91dC5w
cmludChjb21tYSwgInNpemVSZWdpc3RlciA9ICIsIG1fcGlubmVkR1BSLCAiLCBvZmZzZXQgPSAi
LCBtX29mZnNldCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgKaW5kZXggY2NjNTRi
OC4uMTEwZTcxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJv
dW5kc0NoZWNrVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQjNWYWx1ZS5o
IgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTQ2LDggKzQ3LDE2IEBAIHB1
YmxpYzoKICAgICAKICAgICB+V2FzbUJvdW5kc0NoZWNrVmFsdWUoKTsKIAorI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKyAgICB0eXBlZGVmIFdhc206OlBhZ2VDb3VudCBQYWdlQ291bnQ7CisjZWxz
ZQorICAgIHR5cGVkZWYgY2hhciBQYWdlQ291bnQ7CisjZW5kaWYKKwogICAgIEdQUlJlZyBwaW5u
ZWRHUFIoKSBjb25zdCB7IHJldHVybiBtX3Bpbm5lZEdQUjsgfQogICAgIHVuc2lnbmVkIG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgc2l6ZV90IHJlZHpvbmVMaW1pdCgp
IGNvbnN0OworICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVt
OyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC01NywxMCArNjYsMTEgQEAgcHJvdGVjdGVkOgog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgV2FzbUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcgcGlu
bmVkR1BSLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhc21Cb3Vu
ZHNDaGVja1ZhbHVlKE9yaWdpbiwgVmFsdWUqIHB0ciwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWdu
ZWQgb2Zmc2V0LCBQYWdlQ291bnQgbWF4aW11bSk7CiAKICAgICBHUFJSZWcgbV9waW5uZWRHUFI7
CiAgICAgdW5zaWduZWQgbV9vZmZzZXQ7CisgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDdXN0b20uY3BwCmluZGV4IDdlZTdmM2MuLjQ5Y2E1NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCBib29sIFdhc21C
b3VuZHNDaGVja0N1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKICAgICBpZiAoIWluc3Qu
YXJnc1swXS5pc1RtcCgpICYmICFpbnN0LmFyZ3NbMF0uaXNTb21lSW1tKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBpbnN0LmFyZ3NbMV0uaXNSZWcoKTsKKyAgICByZXR1
cm4gaW5zdC5hcmdzWzFdLmlzUmVnKCkgfHwgaW5zdC5hcmdzWzFdLmlzVG1wKCkgfHwgaW5zdC5h
cmdzWzFdLmlzU29tZUltbSgpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAK
aW5kZXggMDE5OTZhZi4uYTZmNjkxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAK
QEAgLTE1MTg1LDcgKzE1MTg1LDggQEAgdm9pZCB0ZXN0V2FzbUJvdW5kc0NoZWNrKHVuc2lnbmVk
IG9mZnNldCkKICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBpZiAocG9p
bnRlclR5cGUoKSAhPSBJbnQzMikKICAgICAgICAgbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBsZWZ0KTsKLSAgICByb290LT5hcHBlbmROZXc8V2Fz
bUJvdW5kc0NoZWNrVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsZWZ0LCBwaW5uZWQsIG9mZnNldCk7
CisgICAgV2FzbTo6UGFnZUNvdW50IG1heGltdW07CisgICAgcm9vdC0+YXBwZW5kTmV3PFdhc21C
b3VuZHNDaGVja1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbGVmdCwgcGlubmVkLCBvZmZzZXQsIG1h
eGltdW0pOwogICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMHg0Mik7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKaW5kZXggM2FlZTMwMS4uZWMzMWVjMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIK
ICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVk
ZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMjUwLDYgKzI1MSw3
IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fc2l6ZUFm
dGVyTGFzdEVkZW5Db2xsZWN0KDApCiAgICAgLCBtX3NpemVCZWZvcmVMYXN0RWRlbkNvbGxlY3Qo
MCkKICAgICAsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKKyAgICAsIG1fd2ViQXNzZW1i
bHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKICAgICAsIG1fYnl0ZXNBYmFuZG9u
ZWRTaW5jZUxhc3RGdWxsQ29sbGVjdCgwKQogICAgICwgbV9tYXhFZGVuU2l6ZShtX21pbkJ5dGVz
UGVyQ3ljbGUpCiAgICAgLCBtX21heEhlYXBTaXplKG1fbWluQnl0ZXNQZXJDeWNsZSkKQEAgLTQ2
Niw2ICs0NjgsMjMgQEAgdm9pZCBIZWFwOjpkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnlTbG93
Q2FzZShzaXplX3Qgc2l6ZSkKICAgICByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZFNsb3dDYXNl
KHNpemUpOwogfQogCit2b2lkIEhlYXA6OnJlcG9ydFdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxs
b2NhdGVkKHNpemVfdCBjb3VudCkKK3sKKyAgICBkaWRBbGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1l
bW9yaWVzKGNvdW50KTsKKyAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7Cit9CisKK2Jv
b2wgSGVhcDo6d2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCgpIGNv
bnN0Cit7CisgICAgLy8gV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcyB1c2UgbGFyZ2UgYW1vdW50
cyBvZiB2aXJ0dWFsIG1lbW9yeSBhbmQgd2UKKyAgICAvLyBkb24ndCBrbm93IGhvdyBtYW55IGNh
biBleGlzdCBpbiB0aGlzIHByb2Nlc3MuIFdlIGtlZXAgdHJhY2sgb2YgdGhlIG1vc3QKKyAgICAv
LyBmYXN0IG1lbW9yaWVzIHRoYXQgaGF2ZSBleGlzdGVkIGF0IGFueSBwb2ludCBpbiB0aW1lLiBU
aGUgR0MgdXNlcyB0aGlzCisgICAgLy8gdG9wIHdhdGVybWFyayBhcyBhbiBpbmRpY2F0aW9uIG9m
IHdoZXRoZXIgcmVjZW50IGFsbG9jYXRpb25zIHNob3VsZCBjYXVzZQorICAgIC8vIGEgY29sbGVj
dGlvbjogZ2V0IHRvbyBjbG9zZSBhbmQgd2UgbWF5IGJlIGNsb3NlIHRvIHRoZSBhY3R1YWwgbGlt
aXQuCisgICAgc2l6ZV90IGZhc3RNZW1vcnlUaHJlc2hvbGQgPSBzdGQ6Om1heDxzaXplX3Q+KDEs
IFdhc206Ok1lbW9yeTo6bWF4RmFzdE1lbW9yeUNvdW50KCkgLyAyKTsKKyAgICByZXR1cm4gbV93
ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSA+IGZhc3RNZW1vcnlUaHJl
c2hvbGQ7Cit9CisKIHZvaWQgSGVhcDo6cmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKQogewog
ICAgIC8vIE91ciBjbGllbnRzIGRvbid0IGtub3cgZXhhY3RseSBob3cgbXVjaCBtZW1vcnkgdGhl
eQpAQCAtMjEwMyw2ICsyMTIyLDcgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRz
KCkKICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgICAgICBk
YXRhTG9nKCJieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9ICIsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJ3ZWJBc3NlbWJseUZhc3RNZW1vcmllc0Fs
bG9jYXRlZFRoaXNDeWNsZSA9ICIsIG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRU
aGlzQ3ljbGUsICJcbiIpOwogICAgIH0KICAgICAKICAgICAvLyBDYWxjdWxhdGUgb3VyIGN1cnJl
bnQgaGVhcCBzaXplIHRocmVzaG9sZCBmb3IgdGhlIHB1cnBvc2Ugb2YgZmlndXJpbmcgb3V0IHdo
ZW4gd2Ugc2hvdWxkCkBAIC0yMTgwLDYgKzIyMDAsNyBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9j
YXRpb25MaW1pdHMoKQogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJzaXplQWZ0
ZXJMYXN0Q29sbGVjdCA9ICIsIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QsICJcbiIpOwogICAgIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSAwOworICAgIG1fd2ViQXNzZW1ibHlGYXN0TWVtb3Jp
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSAwOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAg
ICAgICAgIGRhdGFMb2coIj0+ICIsIGN1cnJlbnRIZWFwU2l6ZSAvIDEwMjQsICJrYiwgIik7CkBA
IC0yMjUzLDYgKzIyNzQsMTEgQEAgdm9pZCBIZWFwOjpkaWRBbGxvY2F0ZShzaXplX3QgYnl0ZXMp
CiAgICAgcGVyZm9ybUluY3JlbWVudChieXRlcyk7CiB9CiAKK3ZvaWQgSGVhcDo6ZGlkQWxsb2Nh
dGVXZWJBc3NlbWJseUZhc3RNZW1vcmllcyhzaXplX3QgY291bnQpCit7CisgICAgbV93ZWJBc3Nl
bWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSArPSBjb3VudDsKK30KKwogYm9vbCBI
ZWFwOjppc1ZhbGlkQWxsb2NhdGlvbihzaXplX3QpCiB7CiAgICAgaWYgKCFpc1ZhbGlkVGhyZWFk
U3RhdGUobV92bSkpCkBAIC0yMzA1LDcgKzIzMzEsNyBAQCBib29sIEhlYXA6OnNob3VsZERvRnVs
bENvbGxlY3Rpb24oc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHNjb3BlKSBjb25zdAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICghc2NvcGUpCi0gICAgICAgIHJldHVybiBt
X3Nob3VsZERvRnVsbENvbGxlY3Rpb247CisgICAgICAgIHJldHVybiBtX3Nob3VsZERvRnVsbENv
bGxlY3Rpb24gfHwgd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCgp
OwogICAgIHJldHVybiAqc2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsOwogfQogCkBAIC0y
NDU2LDcgKzI0ODIsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKICAgICAgICAgaWYgKG1fYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGUgPD0gT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2J5dGVzQWxsb2NhdGVkVGhpc0N5
Y2xlIDw9IG1fbWF4RWRlblNpemUpCisgICAgICAgIGlmICghd2ViQXNzZW1ibHlGYXN0TWVtb3Jp
ZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCgpCisgICAgICAgICAgICAmJiBtX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlIDw9IG1fbWF4RWRlblNpemUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggZDA2NTcwMS4uNGIxNTlmZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtMTk4LDYgKzE5OCwxNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3QpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAKKyAgICAvLyBT
YW1lIGFzIGFib3ZlLCBidXQgZm9yIHVuY29tbWl0dGVkIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRp
b25zIGNhdXNlZCBieQorICAgIC8vIFdlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMuIFRoaXMgaXMg
Y291bnRlZCBzZXBhcmF0ZWx5IGJlY2F1c2UgdmlydHVhbAorICAgIC8vIG1lbW9yeSBpcyBsb2dp
Y2FsbHkgYSBkaWZmZXJlbnQgdHlwZSBvZiByZXNvdXJjZSB0aGFuIGNvbW1pdHRlZCBwaHlzaWNh
bAorICAgIC8vIG1lbW9yeS4gV2UgY2FuIG9mdGVuIGFsbG9jYXRlIGh1Z2UgYW1vdW50cyBvZiB2
aXJ0dWFsIG1lbW9yeSAodGhpbmsKKyAgICAvLyBnaWdhYnl0ZXMpIHdpdGhvdXQgYWR2ZXJzZWx5
IGFmZmVjdGluZyByZWd1bGFyIEdDJ2QgbWVtb3J5LiBBdCBzb21lIHBvaW50CisgICAgLy8gdGhv
dWdoLCB0b28gbXVjaCB2aXJ0dWFsIG1lbW9yeSBiZWNvbWVzIHByb2hpYml0aXZlIGFuZCB3ZSB3
YW50IHRvCisgICAgLy8gY29sbGVjdCBHQy1hYmxlIG9iamVjdHMgd2hpY2gga2VlcCB0aGlzIHZp
cnR1YWwgbWVtb3J5IGFsaXZlLgorICAgIC8vIFRoaXMgaXMgY291bnRlZCBpbiBudW1iZXIgb2Yg
ZmFzdCBtZW1vcmllcywgbm90IGJ5dGVzLgorICAgIHZvaWQgcmVwb3J0V2ViQXNzZW1ibHlGYXN0
TWVtb3JpZXNBbGxvY2F0ZWQoc2l6ZV90KTsKKyAgICBib29sIHdlYkFzc2VtYmx5RmFzdE1lbW9y
aWVzVGhpc0N5Y2xlQXRUaHJlc2hvbGQoKSBjb25zdDsKKwogI2lmIEVOQUJMRShSRVNPVVJDRV9V
U0FHRSkKICAgICAvLyBVc2UgdGhpcyBBUEkgdG8gcmVwb3J0IHRoZSBzdWJzZXQgb2YgZXh0cmEg
bWVtb3J5IHRoYXQgbGl2ZXMgb3V0c2lkZSB0aGlzIHByb2Nlc3MuCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKQEAgLTI0Nyw2
ICsyNTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVBbGxVbmxpbmtlZENvZGVCbG9ja3Mo
RGVsZXRlQWxsQ29kZUVmZm9ydCk7CiAKICAgICB2b2lkIGRpZEFsbG9jYXRlKHNpemVfdCk7Cisg
ICAgdm9pZCBkaWRBbGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzKHNpemVfdCk7CiAgICAg
Ym9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAgCiAgICAgY29uc3QgSklUU3R1
YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0dXJuICptX2ppdFN0dWJSb3V0aW5l
czsgfQpAQCAtNTI1LDYgKzUzNyw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fc2l6ZUJlZm9y
ZUxhc3RFZGVuQ29sbGVjdDsKIAogICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
OworICAgIHNpemVfdCBtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xl
OwogICAgIHNpemVfdCBtX2J5dGVzQWJhbmRvbmVkU2luY2VMYXN0RnVsbENvbGxlY3Q7CiAgICAg
c2l6ZV90IG1fbWF4RWRlblNpemU7CiAgICAgc2l6ZV90IG1fbWF4SGVhcFNpemU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3Bw
CmluZGV4IGJlNmI2ZjEuLjdjODVhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzks
NiArMzksNyBAQAogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRh
YmxlLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5o
IgogI2luY2x1ZGUgIldhc21UaHVua3MuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNp
bmNsdWRlIDxtdXRleD4KQEAgLTU4LDYgKzU5LDkgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5n
KCkKICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplVGhyZWFkaW5nT25jZUZsYWcsIFtdewog
ICAgICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICAgICAgT3B0aW9uczo6aW5p
dGlhbGl6ZSgpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgV2FzbTo6TWVtb3J5
Ojppbml0aWFsaXplUHJlYWxsb2NhdGlvbnMoKTsKKyNlbmRpZgogI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKICAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmluaXRpYWxp
emUoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4
IDYwY2FhZTAuLmVhNWFkZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgKQEAgLTQzNyw5ICs0MzcsMTAgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7
CiAgICAgdihzaXplLCB3ZWJBc3NlbWJseVBhcnRpYWxDb21waWxlTGltaXQsIDUwMDAsIE5vcm1h
bCwgIkxpbWl0IG9uIHRoZSBudW1iZXIgb2YgYnl0ZXMgYSBXYXNtOjpQbGFuOjpjb21waWxlIHNo
b3VsZCBhdHRlbXB0IGJlZm9yZSBjaGVja2luZyBmb3Igb3RoZXIgd29yay4iKSBcCiAgICAgdih1
bnNpZ25lZCwgd2ViQXNzZW1ibHlCM09wdGltaXphdGlvbkxldmVsLCBPcHRpb25zOjpkZWZhdWx0
QjNPcHRMZXZlbCgpLCBOb3JtYWwsICJCMyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIFdlYiBBc3Nl
bWJseSBtb2R1bGVzLiIpIFwKICAgICBcCi0gICAgdihib29sLCBzaW11bGF0ZVdlYkFzc2VtYmx5
TG93TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIE1lbW9yeSBvYmplY3Qgd29u
J3QgbW1hcCB0aGUgZnVsbCAnbWF4aW11bScgcmFuZ2UgYW5kIGluc3RlYWQgd2lsbCBhbGxvY2F0
ZSB0aGUgbWluaW11bSByZXF1aXJlZCBhbW91bnQuIikgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNz
ZW1ibHlGYXN0TWVtb3J5LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1
c2UgYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRsZXIgdG8gYm91bmRz
IGNoZWNrIHdhc20gbWVtb3J5LiIpIFwKKyAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZhc3RN
ZW1vcnlSZWR6b25lUGFnZXMsIDEyOCwgTm9ybWFsLCAiV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmll
cyB1c2UgNEdpQiB2aXJ0dWFsIGFsbG9jYXRpb25zLCBwbHVzIGEgcmVkem9uZSAoY291bnRlZCBh
cyBtdWx0aXBsZSBvZiA2NEtpQiBXZWJBc3NlbWJseSBwYWdlcykgYXQgdGhlIGVuZCB0byBjYXRj
aCByZWcraW1tIGFjY2Vzc2VzIHdoaWNoIGV4Y2VlZCAzMi1iaXQsIGFueXRoaW5nIGJleW9uZCB0
aGUgcmVkem9uZSBpcyBleHBsaWNpdGx5IGJvdW5kcy1jaGVja2VkIikgXAogICAgIHYoYm9vbCwg
Y3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnksIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIGNyYXNoIGlmIHdlIGNhbid0IG9idGFpbiBmYXN0IG1lbW9yeSBmb3Igd2FzbS4i
KSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlGYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3Vu
dCwgNCwgTm9ybWFsLCAiV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcyBjYW4gYmUgcHJlLWFsbG9j
YXRlZCBhdCBwcm9ncmFtIHN0YXJ0dXAgYW5kIHJlbWFpbiBjYWNoZWQgdG8gYXZvaWQgZnJhZ21l
bnRhdGlvbiBsZWFkaW5nIHRvIGJvdW5kcy1jaGVja2VkIG1lbW9yeS4gVGhpcyBudW1iZXIgaXMg
YW4gdXBwZXIgYm91bmQgb24gaW5pdGlhbCBhbGxvY2F0aW9uIGFzIHdlbGwgYXMgdG90YWwgY291
bnQgb2YgZmFzdCBtZW1vcmllcy4gWmVybyBtZWFucyBubyBwcmUtYWxsb2NhdGlvbiwgbm8gY2Fj
aGluZywgYW5kIG5vIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgcnVudGltZSBhbGxvY2F0aW9ucy4i
KSBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RUTFMsIHRydWUsIE5vcm1hbCwgIklm
IHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBmYXN0IHRocmVhZC1sb2NhbCBzdG9yYWdlIGlmIGF2
YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4iKQogCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCA4ODJkMWM3Li4yNjcw
MzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCkBAIC0yMjcsNiArMjI3LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZW1pdENoZWNr
c0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0KTsKIAorICAgIHZvaWQgZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9u
VHlwZSYsIHVpbnQzMl90Jik7CisKICAgICBWYWx1ZSogbWF0ZXJpYWxpemVXYXNtQ29udGV4dChQ
cm9jZWR1cmUmLCBCYXNpY0Jsb2NrKik7CiAgICAgdm9pZCByZXN0b3JlV2FzbUNvbnRleHQoUHJv
Y2VkdXJlJiwgQmFzaWNCbG9jayosIFZhbHVlKik7CiAgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1i
bHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5jZSwg
UHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOwpAQCAtMjQ4LDYgKzI1MCwxNSBAQCBwcml2YXRlOgog
ICAgIFZhbHVlKiBtX2luc3RhbmNlVmFsdWU7IC8vIEZJWE1FOiBtYWtlIHRoaXMgbGF6eSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NzkyCiB9OwogCisvLyBNZW1v
cnkgYWNjZXNzZXMgaW4gV2ViQXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywg
d2hlcmVhcyB0aGV5IGhhdmUgc2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgordm9pZCBCM0lS
R2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVp
bnQzMl90JiBvZmZzZXQpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQp
ID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1h
eCgpKSkgeworICAgICAgICBwdHIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEFkZCwgb3JpZ2luKCksIHB0ciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCkpOworICAgICAgICBvZmZzZXQgPSAw
OworICAgIH0KK30KKwogVmFsdWUqIEIzSVJHZW5lcmF0b3I6Om1hdGVyaWFsaXplV2FzbUNvbnRl
eHQoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICBpZiAodXNlRmFz
dFRMU0ZvckNvbnRleHQoKSkgewpAQCAtMzMxLDcgKzM0MiwxNiBAQCBCM0lSR2VuZXJhdG9yOjpC
M0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHBy
b2NlZHVyZQogICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBtX3Byb2Muc2V0V2FzbUJv
dW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRH
UFIsIHVuc2lnbmVkKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBpbm5lZEdQ
UiwgbV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7CisgICAgICAgICAgICBzd2l0Y2ggKG1f
bW9kZSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX21lbW9yeVNpemVHUFIgPT0gcGlubmVkR1BS
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6
U2lnbmFsaW5nOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEludmFsaWRHUFJSZWcg
PT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
TWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlB
Y2Nlc3MpOwogICAgICAgICB9KTsKICAgICB9CkBAIC01MTcsMTAgKzUzNywxOSBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFs
dWUpIC0+IFBhcnRpYWxSZQogaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0Q2hlY2tB
bmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikKIHsKICAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BS
KTsKLSAgICBpZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSB7CisgICAg
c3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgor
ICAgICAgICAvLyBXZSdyZSBub3QgdXNpbmcgc2lnbmFsIGhhbmRsaW5nIGF0IGFsbCwgd2UgbXVz
dCB0aGVyZWZvcmUgY2hlY2sgdGhhdCBubyBtZW1vcnkgYWNjZXNzIGV4Y2VlZHMgdGhlIGN1cnJl
bnQgbWVtb3J5IHNpemUuCiAgICAgICAgIEFTU0VSVChtX21lbW9yeVNpemVHUFIpOwogICAgICAg
ICBBU1NFUlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQg
LSAxKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlTaXplR1BSLCBzaXplT2ZP
cGVyYXRpb24gKyBvZmZzZXQgLSAxLCBtX2luZm8ubWVtb3J5Lm1heGltdW0oKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgorICAgICAgICAvLyBXZSd2
ZSB2aXJ0dWFsbHkgbWFwcGVkIDRHaUIrcmVkem9uZSBmbyB0aGlzIG1lbW9yeS4gT25seSB0aGUg
dXNlci1hbGxvY2F0ZWQgcGFnZXMgYXJlIGFkZHJlc3NhYmxlLCBjb250aWd1b3VzbHkgaW4gcmFu
Z2UgWzAsIGN1cnJlbnRdLCBhbmQgZXZlcnl0aGluZyBhYm92ZSBpcyBtYXBwZWQgUFJPVF9OT05F
LiBXZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGV4cGxpY2l0IGJvdW5kcyBjaGVjayBpbiB0
aGUgNEdpQiByYW5nZSBiZWNhdXNlIFdlYkFzc2VtYmx5IHJlZ2lzdGVyIG1lbW9yeSBhY2Nlc3Nl
cyBhcmUgMzItYml0LiBIb3dldmVyIFdlYkFzc2VtYmx5IHJlZ2lzdGVyK2ltbWVkaWF0ZSBhY2Nl
c3NlcyBwZXJmb3JtIHRoZSBhZGRpdGlvbiBpbiA2NC1iaXQgd2hpY2ggY2FuIHB1c2ggYW4gYWNj
ZXNzIGFib3ZlIHRoZSAzMi1iaXQgbGltaXQuIFRoZSByZWR6b25lIHdpbGwgY2F0Y2ggbW9zdCBz
bWFsbCBpbW1lZGlhdGVzLCBhbmQgd2UnbGwgZXhwbGljaXRseSBib3VuZHMgY2hlY2sgYW55IHJl
Z2lzdGVyICsgbGFyZ2UgaW1tZWRpYXRlIGFjY2Vzcy4KKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBv
aW50ZXIsIEludmFsaWRHUFJSZWcsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEsIG1faW5m
by5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZW1vcnlNb2Rl
OjpOdW1iZXJPZk1lbW9yeU1vZGVzOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KICAgICBwb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCBwb2ludGVyKTsKICAgICByZXR1cm4gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQWRkcmVzc1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBw
b2ludGVyLCBtX21lbW9yeUJhc2VHUFIpOwpAQCAtNTYwLDYgKzU4OSw4IEBAIGlubGluZSBCMzo6
S2luZCBCM0lSR2VuZXJhdG9yOjptZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApCiAKIGlu
bGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpCiB7CisgICAgZml4dXBQb2ludGVy
UGx1c09mZnNldChwb2ludGVyLCBvZmZzZXQpOworCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNh
c2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhTKSwgb3Jp
Z2luKCksIHBvaW50ZXIsIG9mZnNldCk7CkBAIC02OTcsNiArNzI4LDggQEAgaW5saW5lIHVpbnQz
Ml90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCiAKIGlubGluZSB2b2lkIEIzSVJHZW5l
cmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KQogeworICAgIGZpeHVwUG9p
bnRlclBsdXNPZmZzZXQocG9pbnRlciwgb2Zmc2V0KTsKKwogICAgIHN3aXRjaCAob3ApIHsKICAg
ICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CiAgICAgICAgIHZhbHVlID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIHZhbHVlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAKaW5kZXggNjdiYjU3ZC4uYmJhNDRlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTcyLDcgKzcy
LDcgQEAgc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJ
bmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICAgICAgICAgIGF1dG8mIGFjdGl2ZUZhc3RNZW1vcmll
cyA9IHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKTsKICAgICAgICAgICAgIGZvciAodm9p
ZCogYWN0aXZlTWVtb3J5IDogYWN0aXZlRmFzdE1lbW9yaWVzKSB7CiAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgImNoZWNraW5nIGZhc3QgbWVtb3J5IGF0OiAiLCBSYXdQb2lu
dGVyKGFjdGl2ZU1lbW9yeSkpOwotICAgICAgICAgICAgICAgIGlmIChhY3RpdmVNZW1vcnkgPD0g
ZmF1bHRpbmdBZGRyZXNzICYmIGZhdWx0aW5nQWRkcmVzcyA8IHN0YXRpY19jYXN0PGNoYXIqPihh
Y3RpdmVNZW1vcnkpICsgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKSB7CisgICAgICAgICAgICAgICAg
aWYgKGFjdGl2ZU1lbW9yeSA8PSBmYXVsdGluZ0FkZHJlc3MgJiYgZmF1bHRpbmdBZGRyZXNzIDwg
c3RhdGljX2Nhc3Q8Y2hhcio+KGFjdGl2ZU1lbW9yeSkgKyBNZW1vcnk6OmZhc3RNYXBwZWRCeXRl
cygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IDdlZjNkNGYuLmFlZGJh
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0zMiwx
NDYgKzMyLDI0OCBAQAogI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKICNpbmNs
dWRlICJXYXNtVGh1bmtzLmgiCiAKLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVk
ZSA8YXRvbWljPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1ZNVGFncy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewog
Ci1uYW1lc3BhY2UgewotY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CisvLyBGSVhNRTog
V2UgY291bGQgYmUgc21hcnRlciBhYm91dCBtZW1zZXQgLyBtbWFwIC8gbWFkdmlzZS4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM0MwogCi1zdGF0aWMgTkVWRVJf
SU5MSU5FIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3ZWJBc3NlbWJseUNvdWxkbnRHZXRG
YXN0TWVtb3J5KCkKKy8vIEZJWE1FIGNoYW5nZSB0aGlzCitTdGF0aWNMb2NrIG1lbW9yeUxvY2s7
CisKK3N0YXRpYyBIYXNoU2V0PHZvaWQqPiYgYWN0aXZlRmFzdE1lbW9yaWVzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJikKIHsKLSAgICBDUkFTSCgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxI
YXNoU2V0PHZvaWQqPj4gYWN0aXZlRmFzdE1lbW9yaWVzOworICAgIHJldHVybiBhY3RpdmVGYXN0
TWVtb3JpZXM7CiB9CiAKLWlubGluZSBib29sIG1tYXBCeXRlcyhzaXplX3QgYnl0ZXMsIHZvaWQq
JiBtZW1vcnkpCitjb25zdCBIYXNoU2V0PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmllcyhj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIGRhdGFMb2dJZih2ZXJib3NlLCAi
QXR0ZW1wdGluZyB0byBtbWFwICIsIGJ5dGVzLCAiIGJ5dGVzOiAiKTsKLSAgICAvLyBGSVhNRTog
SXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0gICAgdm9pZCogcmVz
dWx0ID0gbW1hcChudWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9B
Tk9OLCAtMSwgMCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3VjY2VlZGVkIik7Ci0gICAgbWVtb3J5ID0g
cmVzdWx0OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhY3RpdmVGYXN0TWVtb3JpZXMo
bG9ja2VyKTsKIH0KIAotY29uc3QgY2hhciogbWFrZVN0cmluZyhNZW1vcnlNb2RlIG1vZGUpCitu
YW1lc3BhY2UgeworY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IHRydWU7CisKKy8vIEFsbG9jYXRl
IGZhc3QgbWVtb3JpZXMgdmVyeSBlYXJseSBhdCBwcm9ncmFtIHN0YXJ0dXAgYW5kIGNhY2hlIHRo
ZW0uIFRoZSBmYXN0IG1lbW9yaWVzIHVzZSBzaWduaWZpY2FudCBhbW91bnRzIG9mIHZpcnR1YWwg
dW5jb21taXR0ZWQgYWRkcmVzcyBzcGFjZSwgcmVkdWNpbmcgdGhlIGxpa2VsaWhvb2QgdGhhdCB3
ZSdsbCBvYnRhaW4gYW55IGlmIHdlIHdhaXQgdG8gYWxsb2NhdGUgdGhlbS4KKy8vIFdlIHN0aWxs
IHRyeSB0byBhbGxvY2F0ZSBmYXN0IG1lbW9yaWVzIGF0IHJ1bnRpbWUsIGFuZCB3aWxsIGNhY2hl
IHRoZW0gd2hlbiByZWxpbnF1aXNoZWQgdXAgdG8gdGhlIHByZWFsbG9jYXRpb24gbGltaXQuCisv
LyBOb3RlIHRoYXQgdGhpcyBzdGF0ZSBpcyBwZXItcHJvY2Vzcywgbm90IHBlci1WTS4KK2NvbnN0
ZXhwciBzaXplX3QgZmFzdE1lbW9yeUNhY2hlSGFyZExpbWl0ID0gMTY7Citjb25zdGV4cHIgc2l6
ZV90IGZhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0ID0gMzI7IC8vIFByZXZlbnRzIGZpbGxp
bmcgdXAgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KK3NpemVfdCBmYXN0TWVtb3J5UHJlYWxs
b2NhdGVDb3VudCB7IDAgfTsKK3N0ZDo6YXRvbWljPHZvaWQqPiBmYXN0TWVtb3J5Q2FjaGVbZmFz
dE1lbW9yeUNhY2hlSGFyZExpbWl0XSA9IHsgQVRPTUlDX1ZBUl9JTklUKG51bGxwdHIpIH07Citz
dGQ6OmF0b21pYzxzaXplX3Q+IGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcyA9IEFUT01J
Q19WQVJfSU5JVCgwKTsKK3N0ZDo6YXRvbWljPHNpemVfdD4gb2JzZXJ2ZWRNYXhpbXVtRmFzdE1l
bW9yeSA9IEFUT01JQ19WQVJfSU5JVCgwKTsKKworTkVWRVJfSU5MSU5FIE5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggdm9pZCB3ZWJBc3NlbWJseUNvdWxkbnRHZXRGYXN0TWVtb3J5KCkKIHsKLSAgICBz
d2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1
cm4gIkJvdW5kc0NoZWNraW5nIjsKLSAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzogcmV0
dXJuICJTaWduYWxpbmciOwotICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2Rl
czogYnJlYWs7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuICIiOworICAgIENSQVNIKCk7CiB9CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhG
YXN0TWVtb3JpZXMgPSA0Owotc3RhdGljIHVuc2lnbmVkIGFsbG9jYXRlZEZhc3RNZW1vcmllcyB7
IDAgfTsKLVN0YXRpY0xvY2sgbWVtb3J5TG9jazsKLWlubGluZSBEZXF1ZTx2b2lkKiwgbWF4RmFz
dE1lbW9yaWVzPiYgYXZhaWxhYmxlRmFzdE1lbW9yaWVzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikK
K3ZvaWQqIG1tYXBCeXRlcyhzaXplX3QgYnl0ZXMpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPERlcXVlPHZvaWQqLCBtYXhGYXN0TWVtb3JpZXM+PiBhdmFpbGFibGVGYXN0TWVtb3JpZXM7
Ci0gICAgcmV0dXJuIGF2YWlsYWJsZUZhc3RNZW1vcmllczsKKyNpZiBPUyhEQVJXSU4pCisgICAg
aW50IGZkID0gVk1fVEFHX0ZPUl9XRUJBU1NFTUJMWV9NRU1PUlk7CisjZWxzZQorICAgIGludCBm
ZCA9IC0xOworI2VuZGlmCisKKyAgICB2b2lkKiBsb2NhdGlvbiA9IG1tYXAobnVsbHB0ciwgYnl0
ZXMsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgZmQsIDApOworICAgIHJldHVy
biBsb2NhdGlvbiA9PSBNQVBfRkFJTEVEID8gbnVsbHB0ciA6IGxvY2F0aW9uOwogfQogCi1pbmxp
bmUgSGFzaFNldDx2b2lkKj4mIGFjdGl2ZUZhc3RNZW1vcmllcyhjb25zdCBBYnN0cmFjdExvY2tl
ciYpCitzdGF0aWMgdm9pZCogdHJ5R2V0RmFzdE1lbW9yeSgpCiB7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEhhc2hTZXQ8dm9pZCo+PiBhY3RpdmVGYXN0TWVtb3JpZXM7Ci0gICAgcmV0dXJu
IGFjdGl2ZUZhc3RNZW1vcmllczsKKyAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOworCisgICAg
aWYgKExJS0VMWShmYXN0TWVtb3J5RW5hYmxlZCgpKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQ7ICsraSkgeworICAgICAgICAg
ICAgaWYgKHZvaWQqIHByZXZpb3VzID0gZmFzdE1lbW9yeUNhY2hlW2ldLmV4Y2hhbmdlKG51bGxw
dHIsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKSB7CisgICAgICAgICAgICAgICAgbWVtb3J5
ID0gcHJldmlvdXM7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdl
dEZhc3RNZW1vcnkgcmUtdXNpbmcgIiwgUmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBz
b2Z0IGxpbWl0IGlzIGluaGVyZW50bHkgcmFjeSBiZWNhdXNlIGNoZWNraW5nK2FsbG9jYXRpb24g
aXNuJ3QgYXRvbWljLiBFeGNlZWRpbmcgaXQgc2xpZ2h0bHkgaXMgZmluZS4KKyAgICAgICAgYm9v
bCBhdEFsbG9jYXRpb25Tb2Z0TGltaXQgPSBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMu
bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSA+PSBmYXN0TWVtb3J5QWxsb2NhdGlvblNv
ZnRMaW1pdDsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSAmJiBhdEFsbG9jYXRpb25Tb2Z0
TGltaXQsICJ0cnlHZXRGYXN0TWVtb3J5IHJlYWNoZWQgYWxsb2NhdGlvbiBzb2Z0IGxpbWl0IG9m
ICIsIGZhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0KTsKKworICAgICAgICBpZiAoIW1lbW9y
eSAmJiAhYXRBbGxvY2F0aW9uU29mdExpbWl0KSB7CisgICAgICAgICAgICBtZW1vcnkgPSBtbWFw
Qnl0ZXMoTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CisgICAgICAgICAgICBpZiAobWVtb3J5
KSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IGN1cnJlbnRseUFsbG9jYXRlZCA9IDEgKyBjdXJy
ZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMuZmV0Y2hfYWRkKDEsIHN0ZDo6bWVtb3J5X29yZGVy
X2FjcV9yZWwpOworICAgICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50bHlPYnNlcnZlZE1heGlt
dW0gPSBvYnNlcnZlZE1heGltdW1GYXN0TWVtb3J5LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNx
dWlyZSk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRseUFsbG9jYXRlZCA+IGN1cnJlbnRs
eU9ic2VydmVkTWF4aW11bSkgeworICAgICAgICAgICAgICAgICAgICBzaXplX3QgZXhwZWN0ZWQg
PSBjdXJyZW50bHlPYnNlcnZlZE1heGltdW07CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc3Vj
Y2VzcyA9IG9ic2VydmVkTWF4aW11bUZhc3RNZW1vcnkuY29tcGFyZV9leGNoYW5nZV9zdHJvbmco
ZXhwZWN0ZWQsIGN1cnJlbnRseUFsbG9jYXRlZCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSwg
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5
R2V0RmFzdE1lbW9yeSBjdXJyZW50bHkgb2JzZXJ2ZXIgbWF4aW11bSBpcyBub3cgIiwgY3VycmVu
dGx5QWxsb2NhdGVkKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGxvc3QgdGhlIHVwZGF0ZSByYWNlLCBidXQgdGhlIGNvdW50ZXIg
aXMgbW9ub3RvbmljIHNvIHRoZSB3aW5uZXIgbXVzdCBoYXZlIHVwZGF0ZWQgdGhlIHZhbHVlIHRv
IHdoYXQgd2Ugd2VyZSBnb2luZyB0byB1cGRhdGUgaXQgdG8sIG9yIG11bHRpcGxlIHdpbm5lcnMg
ZGlkIHNvLgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGV4cGVjdGVkID49IGN1cnJl
bnRseUFsbG9jYXRlZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkg
YWxsb2NhdGVkICIsIFJhd1BvaW50ZXIobWVtb3J5KSwgIiwgY3VycmVudGx5IGFsbG9jYXRlZCBp
cyAiLCBjdXJyZW50bHlBbGxvY2F0ZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKG1lbW9yeSkgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtZW1vcnlM
b2NrKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKS5h
ZGQobWVtb3J5KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5R2V0
RmFzdE1lbW9yeSBjb3VsZG4ndCByZS11c2Ugb3IgYWxsb2NhdGUgYSBmYXN0IG1lbW9yeSIpOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Y3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RN
ZW1vcnkoKSkpCisgICAgICAgICAgICB3ZWJBc3NlbWJseUNvdWxkbnRHZXRGYXN0TWVtb3J5KCk7
CisgICAgfQorCisgICAgcmV0dXJuIG1lbW9yeTsKIH0KIAotY29uc3QgSGFzaFNldDx2b2lkKj4m
IHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKK3N0
YXRpYyB2b2lkKiB0cnlHZXRTbG93TWVtb3J5KHNpemVfdCBieXRlcykKIHsKLSAgICByZXR1cm4g
YWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcik7CisgICAgdm9pZCogbWVtb3J5ID0gbW1hcEJ5dGVz
KGJ5dGVzKTsKKyAgICBkYXRhTG9nTG5JZihtZW1vcnkgJiYgdmVyYm9zZSwgIk9idGFpbmVkIHNs
b3cgbWVtb3J5ICIsIFJhd1BvaW50ZXIobWVtb3J5KSwgIiB3aXRoIGNhcGFjaXR5ICIsIGJ5dGVz
KTsKKyAgICBkYXRhTG9nTG5JZighbWVtb3J5ICYmIHZlcmJvc2UsICJGYWlsZWQgb2J0YWluaW5n
IHNsb3cgbWVtb3J5IHdpdGggY2FwYWNpdHkgIiwgYnl0ZXMpOworICAgIHJldHVybiBtZW1vcnk7
CiB9CiAKLWlubGluZSBib29sIHRyeUdldEZhc3RNZW1vcnkoVk0mIHZtLCB2b2lkKiYgbWVtb3J5
LCBzaXplX3QmIG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlJiBtb2RlKQorc3RhdGljIHZvaWQg
cmVsaW5xdWlzaE1lbW9yeSh2b2lkKiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUsIHNpemVf
dCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSBtb2RlKQogewotICAgIGF1dG8gZGVxdWVGYXN0
TWVtb3J5ID0gWyZdICgpIC0+IGJvb2wgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2
ZW50dWFsbHkgcmV0dXJuIHRoZXNlIHRvIHRoZSBPUyBpZiB3ZSBnbyBzb21lIG51bWJlciBvZiBH
Q3MKLSAgICAgICAgLy8gd2l0aG91dCB1c2luZyB0aGVtLgorICAgIHN3aXRjaCAobW9kZSkgewor
ICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGZhc3RNZW1vcnlFbmFibGVkKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXBwZWRDYXBh
Y2l0eSA9PSBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsKKworICAgICAgICAvLyBUaGlzIG1l
bW9yeSBjYW5ub3QgY2F1c2UgYSB0cmFwIGFueW1vcmUuCiAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1lbW9yeUxvY2spOwotICAgICAgICBpZiAoIWF2YWlsYWJsZUZhc3RNZW1vcmllcyhsb2Nr
ZXIpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbWVtb3J5ID0gYXZhaWxhYmxlRmFzdE1lbW9y
aWVzKGxvY2tlcikudGFrZUZpcnN0KCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGFjdGl2
ZUZhc3RNZW1vcmllcyhsb2NrZXIpLmFkZChtZW1vcnkpOwotICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAgICAgIG1hcHBlZENhcGFj
aXR5ID0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzOwotICAgICAgICAgICAgbW9kZSA9IE1lbW9yeU1v
ZGU6OlNpZ25hbGluZzsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBib29sIHJl
c3VsdCA9IGFjdGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpLnJlbW92ZShtZW1vcnkpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKKworICAgICAgICAvLyBXZSBtYXkgY2Fj
aGUgZmFzdCBtZW1vcmllcy4gQXNzdW1pbmcgd2Ugd2lsbCwgd2UgaGF2ZSB0byByZXNldCB0aGVt
IGJlZm9yZSBpbnNlcnRpbmcgdGhlbSBpbnRvIHRoZSBjYWNoZS4KKyAgICAgICAgaWYgKHdyaXRh
YmxlU2l6ZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlplcm9pbmcgYW5k
IHVucHJvdGVjdGluZyBmYXN0IG1lbW9yeSAiLCBSYXdQb2ludGVyKG1lbW9yeSksICIncyBpbml0
aWFsICIsIHdyaXRhYmxlU2l6ZSwgIiBieXRlcyIpOworICAgICAgICAgICAgbWVtc2V0KG1lbW9y
eSwgMCwgd3JpdGFibGVTaXplKTsKKyAgICAgICAgICAgIGlmIChtcHJvdGVjdChtZW1vcnksIHdy
aXRhYmxlU2l6ZSwgUFJPVF9OT05FKSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9OwogCi0gICAgYXV0byBmYWlsID0gW10g
KCkgLT4gYm9vbCB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpjcmFzaElmV2ViQXNz
ZW1ibHlDYW50RmFzdE1lbW9yeSgpKSkKLSAgICAgICAgICAgIHdlYkFzc2VtYmx5Q291bGRudEdl
dEZhc3RNZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudDsgKytpKSB7
CisgICAgICAgICAgICB2b2lkKiBleHBlY3RlZCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAo
ZmFzdE1lbW9yeUNhY2hlW2ldLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4cGVjdGVkLCBtZW1v
cnksIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgInJlbGlucXVpc2hNZW1vcnkgY2FjaGVkIGZhc3QgbWVtb3J5ICIsIFJh
d1BvaW50ZXIobWVtb3J5KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CiAKLSAgICAvLyBXZSBtaWdodCBHQyBoZXJlIHNvIHdlIHNob3VsZCBiZSBo
b2xkaW5nIHRoZSBBUEkgbG9jay4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8g
c3luY3Jvbm91c2x5IHRyaWdnZXIgdGhlIEdDIGZyb20gYW5vdGhlciB0aHJlYWQuCi0gICAgQVNT
RVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGlmIChVTkxJS0VM
WSghZmFzdE1lbW9yeUVuYWJsZWQoKSkpCi0gICAgICAgIHJldHVybiBmYWlsKCk7CisgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJyZWxpbnF1aXNoTWVtb3J5IHVuYWJsZSB0byBjYWNoZSBm
YXN0IG1lbW9yeSwgZnJlZWluZyBpbnN0ZWFkICIsIFJhd1BvaW50ZXIobWVtb3J5KSk7CisgICAg
ICAgIGlmIChtdW5tYXAobWVtb3J5LCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKSkKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcy5m
ZXRjaF9zdWIoMSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCk7CiAKLSAgICAvLyBXZSBuZWVk
IHRvIGJlIHN1cmUgd2UgaGF2ZSBhIHN0dWIgcHJpb3IgdG8gcnVubmluZyBjb2RlLgotICAgIGlm
IChVTkxJS0VMWSghVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0aW9uRnJvbVdh
c21UaHVua0dlbmVyYXRvcikpKQotICAgICAgICByZXR1cm4gZmFpbCgpOworICAgICAgICByZXR1
cm47CisgICAgfQogCi0gICAgQVNTRVJUKGFsbG9jYXRlZEZhc3RNZW1vcmllcyA8PSBtYXhGYXN0
TWVtb3JpZXMpOwotICAgIGlmIChkZXF1ZUZhc3RNZW1vcnkoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgInJlbGlucXVpc2hGYXN0TWVtb3J5IGZyZWVpbmcgc2xvdyBtZW1vcnkg
IiwgUmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAgICAgaWYgKG11bm1hcChtZW1vcnksIG1hcHBl
ZENhcGFjaXR5KSkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybjsKIAotICAg
IC8vIElmIHdlIGhhdmUgYWxsb2NhdGVkIGFsbCB0aGUgZmFzdCBtZW1vcmllcy4uLiB0b28gYmFk
LgotICAgIGlmIChhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgPT0gbWF4RmFzdE1lbW9yaWVzKSB7Ci0g
ICAgICAgIC8vIFRoZXJlIGlzIGEgcmVhc29uYWJsZSBjaGFuY2UgdGhhdCBhbm90aGVyIG1vZHVs
ZSBoYXMgZGllZCBidXQgaGFzIG5vdCBiZWVuIGNvbGxlY3RlZCB5ZXQuIERvbid0IGxvc2UgaG9w
ZSB5ZXQhCi0gICAgICAgIHZtLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKLSAgICAgICAgaWYg
KGRlcXVlRmFzdE1lbW9yeSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJl
dHVybiBmYWlsKCk7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9yeU1vZGVzOgor
ICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobW1hcEJ5dGVzKGZhc3RNZW1vcnlNYXBw
ZWRCeXRlcywgbWVtb3J5KSkgewotICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlN
YXBwZWRCeXRlczsKLSAgICAgICAgbW9kZSA9IE1lbW9yeU1vZGU6OlNpZ25hbGluZzsKLSAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobWVtb3J5TG9jayk7Ci0gICAgICAgIGFsbG9jYXRlZEZhc3RN
ZW1vcmllcysrOwotICAgICAgICBhdXRvIHJlc3VsdCA9IGFjdGl2ZUZhc3RNZW1vcmllcyhsb2Nr
ZXIpLmFkZChtZW1vcnkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0Lmlz
TmV3RW50cnkpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRp
YyBib29sIG1ha2VOZXdNZW1vcnlSZWFkV3JpdGVPclJlbGlucXVpc2godm9pZCogbWVtb3J5LCBz
aXplX3QgaW5pdGlhbEJ5dGVzLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHlCeXRlcywgTWVtb3J5TW9k
ZSBtb2RlKQoreworICAgIEFTU0VSVChtZW1vcnkgJiYgaW5pdGlhbEJ5dGVzIDw9IG1hcHBlZENh
cGFjaXR5Qnl0ZXMpOworICAgIGlmIChpbml0aWFsQnl0ZXMpIHsKKyAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIk1hcmtpbmcgV2ViQXNzZW1ibHkgbWVtb3J5J3MgIiwgUmF3UG9pbnRlciht
ZW1vcnkpLCAiJ3MgaW5pdGlhbCAiLCBpbml0aWFsQnl0ZXMsICIgYnl0ZXMgYXMgcmVhZCt3cml0
ZSIpOworICAgICAgICBpZiAobXByb3RlY3QobWVtb3J5LCBpbml0aWFsQnl0ZXMsIFBST1RfUkVB
RCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiB3aHkgPSBzdHJlcnJv
cihlcnJubyk7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRmFpbGVkIG1ha2lu
ZyBtZW1vcnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpLCAiIHJlYWRhYmxlIGFuZCB3cml0YWJsZTog
Iiwgd2h5KTsKKyAgICAgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobWVtb3J5LCAwLCBtYXBwZWRD
YXBhY2l0eUJ5dGVzLCBtb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQogICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CiAKLSAgICBpZiAobWVtb3J5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBm
YWlsKCk7Citjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9kZSkKK3sKKyAgICBz
d2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1
cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzogcmV0
dXJuICJTaWduYWxpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2Rl
czogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuICIiOwogfQogCi1pbmxpbmUgdm9pZCByZWxlYXNlRmFzdE1lbW9yeSh2b2lkKiYgbWVt
b3J5LCBzaXplX3Qgd3JpdGFibGVTaXplLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1v
ZGUgbW9kZSkKK3ZvaWQgTWVtb3J5Ojppbml0aWFsaXplUHJlYWxsb2NhdGlvbnMoKQogewotICAg
IGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCAhbWVtb3J5KQotICAgICAgICBy
ZXR1cm47CisgICAgLy8gUmFjZXMgY2Fubm90IG9jY3VyIGluIHRoaXMgZnVuY3Rpb246IGl0IGlz
IG9ubHkgY2FsbGVkIGF0IHByb2dyYW0gaW5pdGlhbGl6YXRpb24sIGJlZm9yZSBXZWJBc3NlbWJs
eSBjYW4gYmUgaW52b2tlZC4KKworICAgIGNvbnN0IGF1dG8gc3RhcnRUaW1lID0gTW9ub3Rvbmlj
VGltZTo6bm93KCk7CisgICAgY29uc3Qgc2l6ZV90IGRlc2lyZWRGYXN0TWVtb3JpZXMgPSBzdGQ6
Om1pbjxzaXplX3Q+KE9wdGlvbnM6OndlYkFzc2VtYmx5RmFzdE1lbW9yeVByZWFsbG9jYXRlQ291
bnQoKSwgZmFzdE1lbW9yeUNhY2hlSGFyZExpbWl0KTsKKworICAgIC8vIFN0YXJ0IG9mZiB0cnlp
bmcgdG8gYWxsb2NhdGUgZmFzdCBtZW1vcmllcyBjb250aWd1b3VzbHkgc28gdGhleSBkb24ndCBm
cmFnbWVudCBlYWNoIG90aGVyLiBUaGlzIGNhbiBmYWlsIGlmIHRoZSBhZGRyZXNzIHNwYWNlIGlz
IG90aGVyd2lzZSBmcmFnbWVudGVkLiBJbiB0aGF0IGNhc2UsIGdvIGZvciBzbWFsbGVyIGNvbnRp
Z3VvdXMgYWxsb2NhdGlvbnMuIFdlJ2xsIGV2ZW50dWFsbHkgZ2V0IGluZGl2aWR1YWwgbm9uLWNv
bnRpZ3VvdXMgZmFzdCBtZW1vcmllcyBhbGxvY2F0ZWQsIG9yIHdlJ2xsIGp1c3QgYmUgdW5hYmxl
IHRvIGZpdCBhIHNpbmdsZSBvbmUgYXQgd2hpY2ggcG9pbnQgd2UgZ2l2ZSB1cC4KKyAgICBhdXRv
IGFsbG9jYXRlQ29udGlndW91c0Zhc3RNZW1vcmllcyA9IFsmXSAoc2l6ZV90IG51bUNvbnRpZ3Vv
dXMpIC0+IGJvb2wgeworICAgICAgICBpZiAodm9pZCAqbWVtb3J5ID0gbW1hcEJ5dGVzKE1lbW9y
eTo6ZmFzdE1hcHBlZEJ5dGVzKCkgKiBudW1Db250aWd1b3VzKSkgeworICAgICAgICAgICAgZm9y
IChzaXplX3Qgc3ViTWVtb3J5ID0gMDsgc3ViTWVtb3J5IDwgbnVtQ29udGlndW91czsgKytzdWJN
ZW1vcnkpIHsKKyAgICAgICAgICAgICAgICB2b2lkKiBzdGFydEFkZHJlc3MgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSAqIHN1Yk1l
bW9yeSArIHN1Yk1lbW9yeTsKKyAgICAgICAgICAgICAgICBib29sIGluc2VydGVkID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY2FjaGVFbnRyeSA9IDA7IGNhY2hlRW50cnkg
PCBmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQ7ICsrY2FjaGVFbnRyeSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLmxvYWQoc3RkOjptZW1vcnlf
b3JkZXJfcmVsYXhlZCkgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgICAgICAgICAgZmFz
dE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLnN0b3JlKHN0YXJ0QWRkcmVzcywgc3RkOjptZW1vcnlf
b3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnNlcnRl
ZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9y
eSAmJiBtYXBwZWRDYXBhY2l0eSA9PSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMpOwotICAgIEFTU0VS
VChmYXN0TWVtb3J5RW5hYmxlZCgpKTsKKyAgICBzaXplX3QgZnJhZ21lbnRzID0gMDsKKyAgICBz
aXplX3QgbnVtRmFzdE1lbW9yaWVzID0gMDsKKyAgICBzaXplX3QgY29udGlndW91c01lbW9yeUFs
bG9jYXRpb25BdHRlbXB0ID0gZGVzaXJlZEZhc3RNZW1vcmllczsKKyAgICB3aGlsZSAobnVtRmFz
dE1lbW9yaWVzICE9IGRlc2lyZWRGYXN0TWVtb3JpZXMgJiYgY29udGlndW91c01lbW9yeUFsbG9j
YXRpb25BdHRlbXB0ICE9IDApIHsKKyAgICAgICAgaWYgKGFsbG9jYXRlQ29udGlndW91c0Zhc3RN
ZW1vcmllcyhjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQpKSB7CisgICAgICAgICAg
ICBudW1GYXN0TWVtb3JpZXMgKz0gY29udGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0Owor
ICAgICAgICAgICAgY29udGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0ID0gc3RkOjptaW4o
Y29udGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0IC0gMSwgZGVzaXJlZEZhc3RNZW1vcmll
cyAtIG51bUZhc3RNZW1vcmllcyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgLS1jb250
aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQ7CisgICAgICAgICsrZnJhZ21lbnRzOworICAg
IH0KKworICAgIGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50ID0gbnVtRmFzdE1lbW9yaWVzOwor
ICAgIGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcy5zdG9yZShmYXN0TWVtb3J5UHJlYWxs
b2NhdGVDb3VudCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgb2JzZXJ2ZWRNYXhp
bXVtRmFzdE1lbW9yeS5zdG9yZShmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCwgc3RkOjptZW1v
cnlfb3JkZXJfcmVsYXhlZCk7CiAKLSAgICBtZW1zZXQobWVtb3J5LCAwLCB3cml0YWJsZVNpemUp
OwotICAgIGlmIChtcHJvdGVjdChtZW1vcnksIHdyaXRhYmxlU2l6ZSwgUFJPVF9OT05FKSkKLSAg
ICAgICAgQ1JBU0goKTsKKyAgICBjb25zdCBhdXRvIGVuZFRpbWUgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1lbW9yeUxvY2spOwotICAgIGJvb2wgcmVz
dWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcikucmVtb3ZlKG1lbW9yeSk7Ci0gICAgQVNT
RVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7Ci0gICAgQVNTRVJUKGF2YWlsYWJsZUZhc3RNZW1v
cmllcyhsb2NrZXIpLnNpemUoKSA8IGFsbG9jYXRlZEZhc3RNZW1vcmllcyk7Ci0gICAgYXZhaWxh
YmxlRmFzdE1lbW9yaWVzKGxvY2tlcikuYXBwZW5kKG1lbW9yeSk7Ci0gICAgbWVtb3J5ID0gbnVs
bHB0cjsKKyAgICBmb3IgKHNpemVfdCBjYWNoZUVudHJ5ID0gMDsgY2FjaGVFbnRyeSA8IGZhc3RN
ZW1vcnlQcmVhbGxvY2F0ZUNvdW50OyArK2NhY2hlRW50cnkpIHsKKyAgICAgICAgdm9pZCogc3Rh
cnRBZGRyZXNzID0gZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLmxvYWQoc3RkOjptZW1vcnlf
b3JkZXJfcmVsYXhlZCk7CisgICAgICAgIEFTU0VSVChzdGFydEFkZHJlc3MpOworICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiUHJlLWFsbG9jYXRpb24gb2YgV2ViQXNzZW1ibHkgZmFzdCBt
ZW1vcnkgYXQgIiwgUmF3UG9pbnRlcihzdGFydEFkZHJlc3MpKTsKKyAgICB9CisgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIlByZS1hbGxvY2F0ZWQgIiwgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291
bnQsICIgV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcyBpbiAiLCBmYXN0TWVtb3J5UHJlYWxsb2Nh
dGVDb3VudCA9PSAwID8gMCA6IGZyYWdtZW50cywgZnJhZ21lbnRzID09IDEgPyAiIGZyYWdtZW50
LCB0b29rICIgOiAiIGZyYWdtZW50cywgdG9vayAiLCBlbmRUaW1lIC0gc3RhcnRUaW1lKTsKIH0K
IAogTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQpA
QCAtMTk0LDg5ICsyOTYsMTAwIEBAIE1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNv
dW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkCiAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRoaXMpOwogfQog
Ci1SZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZUltcGwoVk0mIHZtLCBQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWly
ZWRNb2RlKQorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJbXBsKFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZXF1aXJl
ZE1vZGUpCiB7CisgICAgQVNTRVJUKGluaXRpYWwpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhp
bXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQg
Ynkgb3VyIGNhbGxlci4KIAorICAgIGNvbnN0IHNpemVfdCBpbml0aWFsQnl0ZXMgPSBpbml0aWFs
LmJ5dGVzKCk7CisgICAgY29uc3Qgc2l6ZV90IG1heGltdW1CeXRlcyA9IG1heGltdW0gPyBtYXhp
bXVtLmJ5dGVzKCkgOiAwOworICAgIGNvbnN0IGJvb2wgY2FuVXNlRmFzdE1lbW9yeSA9ICFyZXF1
aXJlZE1vZGUgfHwgcmVxdWlyZWRNb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZzsKICAgICBN
ZW1vcnlNb2RlIG1vZGUgPSByZXF1aXJlZE1vZGUgPyAqcmVxdWlyZWRNb2RlIDogTWVtb3J5TW9k
ZTo6Qm91bmRzQ2hlY2tpbmc7Ci0gICAgY29uc3Qgc2l6ZV90IHNpemUgPSBpbml0aWFsLmJ5dGVz
KCk7Ci0gICAgc2l6ZV90IG1hcHBlZENhcGFjaXR5ID0gbWF4aW11bSA/IG1heGltdW0uYnl0ZXMo
KSA6IFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKTsKLSAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRy
OworICAgIHNpemVfdCBtYXBwZWRDYXBhY2l0eUJ5dGVzID0gMDsKKworICAgIC8vIFdlIG5lZWQg
dG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCisgICAgaWYg
KFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBt
YWtlRW1wdHlNZW1vcnkgPSBbJl0gKCkgLT4gUmVmUHRyPE1lbW9yeT4geworICAgIGlmIChtYXhp
bXVtICYmICFtYXhpbXVtQnl0ZXMpIHsKKyAgICAgICAgLy8gVXNlciBzcGVjaWZpZWQgYSB6ZXJv
IG1heGltdW0sIGluaXRpYWwgc2l6ZSBtdXN0IGFsc28gYmUgemVyby4KKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWluaXRpYWxCeXRlcyk7CiAgICAgICAgIGlmIChtb2RlID09IE1lbW9yeU1vZGU6
OlNpZ25hbGluZykKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0pKTsKLSAgICB9OwotCi0gICAg
aWYgKCFtYXBwZWRDYXBhY2l0eSkgewotICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIHNwZWNpZmll
ZCBhIHplcm8gYXMgbWF4aW11bSAod2hpY2ggbWVhbnMgd2UgYWxzbyBoYXZlIHplcm8gYXMgaW5p
dGlhbCBzaXplKS4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNpemUpOwotICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgYWxsb2NhdGluZyBub3RoaW5nIik7Ci0g
ICAgICAgIHJldHVybiBtYWtlRW1wdHlNZW1vcnkoKTsKICAgICB9CiAKLSAgICBib29sIGNhblVz
ZUZhc3RNZW1vcnkgPSAhcmVxdWlyZWRNb2RlIHx8IHJlcXVpcmVkTW9kZSA9PSBNZW1vcnlNb2Rl
OjpTaWduYWxpbmc7Ci0gICAgaWYgKCFjYW5Vc2VGYXN0TWVtb3J5IHx8ICF0cnlHZXRGYXN0TWVt
b3J5KHZtLCBtZW1vcnksIG1hcHBlZENhcGFjaXR5LCBtb2RlKSkgewotICAgICAgICBpZiAobW9k
ZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOworICAgIGlmIChjYW5Vc2VGYXN0TWVtb3J5KSB7
CisgICAgICAgIG1lbW9yeSA9IHRyeUdldEZhc3RNZW1vcnkoKTsKKyAgICAgICAgaWYgKG1lbW9y
eSkgeworICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHlCeXRlcyA9IE1lbW9yeTo6ZmFzdE1hcHBl
ZEJ5dGVzKCk7CisgICAgICAgICAgICBtb2RlID0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nOworICAg
ICAgICB9CisgICAgfQogCi0gICAgICAgIGlmIChPcHRpb25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5
TG93TWVtb3J5KCkgPyB0cnVlIDogIW1tYXBCeXRlcyhtYXBwZWRDYXBhY2l0eSwgbWVtb3J5KSkg
ewotICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBkaWZmZXJlbnQgbnVtYmVyLgotICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAgZmFpbGVk
IG9uY2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcgYWdhaW4iKTsKLSAgICAgICAgICAgIG1hcHBlZENh
cGFjaXR5ID0gc2l6ZTsKLSAgICAgICAgICAgIGlmICghbWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBub3Qg
dHJ5aW5nIGFnYWluIGJlY2F1c2Ugc2l6ZSBpcyB6ZXJvIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VFbXB0eU1lbW9yeSgpOwotICAgICAgICAgICAgfQorICAgIGlmICghbWVtb3J5ICYm
IG1vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgICAgICAgICAgaWYgKCFtbWFwQnl0ZXMobWFwcGVkQ2FwYWNpdHksIG1lbW9yeSkpIHsK
LSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1h
cCBmYWlsZWQgdHdpY2UiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgICAgIH0KKyAgICBpZiAoIW1lbW9yeSAmJiBtYXhpbXVtKSB7CisgICAgICAgIG1lbW9yeSA9
IHRyeUdldFNsb3dNZW1vcnkobWF4aW11bUJ5dGVzKTsKKyAgICAgICAgaWYgKG1lbW9yeSkgewor
ICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHlCeXRlcyA9IG1heGltdW1CeXRlczsKKyAgICAgICAg
ICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzsKICAgICAgICAgfQogICAgIH0K
IAotICAgIEFTU0VSVChtZW1vcnkgJiYgc2l6ZSA8PSBtYXBwZWRDYXBhY2l0eSk7Ci0gICAgaWYg
KG1wcm90ZWN0KG1lbW9yeSwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAgICAg
ICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGV2ZXIgb2NjdXI/IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4OTAKLSAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
Ik1lbW9yeTo6Y3JlYXRlIG1wcm90ZWN0IGZhaWxlZCIpOwotICAgICAgICByZWxlYXNlRmFzdE1l
bW9yeShtZW1vcnksIDAsIG1hcHBlZENhcGFjaXR5LCBtb2RlKTsKKyAgICBpZiAoIW1lbW9yeSkg
eworICAgICAgICBtZW1vcnkgPSB0cnlHZXRTbG93TWVtb3J5KGluaXRpYWxCeXRlcyk7CiAgICAg
ICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgICAgIGlmIChtdW5tYXAobWVtb3J5LCBtYXBwZWRD
YXBhY2l0eSkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIG1hcHBlZENh
cGFjaXR5Qnl0ZXMgPSBpbml0aWFsQnl0ZXM7CisgICAgICAgICAgICBtb2RlID0gTWVtb3J5TW9k
ZTo6Qm91bmRzQ2hlY2tpbmc7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCi0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAgc3Vj
Y2VlZGVkIik7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkobWVtb3J5LCBpbml0aWFs
LCBtYXhpbXVtLCBtYXBwZWRDYXBhY2l0eSwgbW9kZSkpOworICAgIGlmICghbWVtb3J5KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghbWFrZU5ld01lbW9yeVJlYWRXcml0ZU9y
UmVsaW5xdWlzaChtZW1vcnksIGluaXRpYWxCeXRlcywgbWFwcGVkQ2FwYWNpdHlCeXRlcywgbW9k
ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
ZW1vcnkobWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBtYXBwZWRDYXBhY2l0eUJ5dGVzLCBtb2Rl
KSk7CiB9CiAKLVJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IG1v
ZGUpCitSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gbW9kZSkKIHsKLSAgICBS
RUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNo
b3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCi0gICAgUmVmUHRyPE1lbW9yeT4gcmVz
dWx0ID0gY3JlYXRlSW1wbCh2bSwgaW5pdGlhbCwgbWF4aW11bSwgbW9kZSk7Ci0gICAgaWYgKHJl
c3VsdCkgewotICAgICAgICBpZiAocmVzdWx0LT5tb2RlKCkgPT0gTWVtb3J5TW9kZTo6U2lnbmFs
aW5nKQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LT5tX21hcHBlZENhcGFjaXR5
ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRlcyk7Ci0gICAgICAgIGlmIChtb2RlKQotICAgICAgICAg
ICAgQVNTRVJUKCptb2RlID09IHJlc3VsdC0+bW9kZSgpKTsKLSAgICB9CisgICAgUmVmUHRyPE1l
bW9yeT4gcmVzdWx0ID0gY3JlYXRlSW1wbChpbml0aWFsLCBtYXhpbXVtLCBtb2RlKTsKKyAgICBp
ZiAocmVzdWx0ICYmIG1vZGUpCisgICAgICAgIEFTU0VSVCgqbW9kZSA9PSByZXN1bHQtPm1vZGUo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogTWVtb3J5Ojp+TWVtb3J5KCkKIHsKLSAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojp+TWVtb3J5ICIsICp0aGlzKTsKLSAgICByZWxl
YXNlRmFzdE1lbW9yeShtX21lbW9yeSwgbV9zaXplLCBtX21hcHBlZENhcGFjaXR5LCBtX21vZGUp
OwogICAgIGlmIChtX21lbW9yeSkgewotICAgICAgICBpZiAobXVubWFwKG1fbWVtb3J5LCBtX21h
cHBlZENhcGFjaXR5KSkKLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJNZW1vcnk6On5NZW1vcnkgIiwgKnRoaXMpOworICAgICAgICByZWxpbnF1aXNo
TWVtb3J5KG1fbWVtb3J5LCBtX3NpemUsIG1fbWFwcGVkQ2FwYWNpdHksIG1fbW9kZSk7CiAgICAg
fQogfQogCitzaXplX3QgTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihQYWdlQ291bnQ6OnBhZ2VTaXplKSAqIE9wdGlvbnM6
OndlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcygpOworfQorCitzaXplX3QgTWVtb3J5
OjpmYXN0TWFwcGVkQnl0ZXMoKQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90
KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6
ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzIgKyByZWR6b25lIHdoaWNoIGlzIGxhcmdlciB0
aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2QgcGFzcyB0byBtcHJvdGVjdCBp
ZiB0aGlzIGRpZG4ndCBob2xkLiIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgKyBmYXN0TWFwcGVkUmVkem9uZUJ5
dGVzKCk7Cit9CisKK3NpemVfdCBNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCgpCit7CisgICAg
Ly8gVGhlIG9yZGVyIGNhbiBiZSByZWxheGVkIGhlcmUgYmVjYXVzZSB3ZSBwcm92aWRlIGEgbW9u
b3RvbmljYWxseS1pbmNyZWFzaW5nIGVzdGltYXRlLiBBIGNvbmN1cnJlbnQgb2JzZXJ2ZXIgY291
bGQgc2VlIGEgc2xpZ2h0bHkgb3V0LW9mLWRhdGUgdmFsdWUgYnV0IGNhbid0IHRlbGwgdGhhdCB0
aGV5IGRpZC4KKyAgICByZXR1cm4gb2JzZXJ2ZWRNYXhpbXVtRmFzdE1lbW9yeS5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworfQorCiBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQg
bmV3U2l6ZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdTaXplID4gUGFnZUNvdW50Ojpmcm9t
Qnl0ZXMobV9zaXplKSk7CkBAIC0zMDEsOCArNDE0LDExIEBAIGJvb2wgTWVtb3J5Ojpncm93KFBh
Z2VDb3VudCBuZXdTaXplKQogICAgIH0KIAogICAgIGlmIChtX21lbW9yeSAmJiBkZXNpcmVkU2l6
ZSA8PSBtX21hcHBlZENhcGFjaXR5KSB7Ci0gICAgICAgIGlmIChtcHJvdGVjdChzdGF0aWNfY2Fz
dDx1aW50OF90Kj4obV9tZW1vcnkpICsgbV9zaXplLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlc2ly
ZWRTaXplIC0gbV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBzaG91bGQgdGhpcyBldmVyIG9jY3VyPyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY5ODkwCisgICAgICAgIHVpbnQ4X3QqIHN0YXJ0QWRkcmVzcyA9
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBtX3NpemU7CisgICAgICAgIHNpemVf
dCBleHRyYUJ5dGVzID0gZGVzaXJlZFNpemUgLSBtX3NpemU7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGV4dHJhQnl0ZXMpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWFya2luZyBX
ZWJBc3NlbWJseSBtZW1vcnkncyAiLCBSYXdQb2ludGVyKG1fbWVtb3J5KSwgIiBhcyByZWFkK3dy
aXRlIGluIHJhbmdlIFsiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcyksICIsICIsIFJhd1BvaW50
ZXIoc3RhcnRBZGRyZXNzICsgZXh0cmFCeXRlcyksICIpIik7CisgICAgICAgIGlmIChtcHJvdGVj
dChzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IGluLXBsYWNlIGZh
aWxlZCAiLCAqdGhpcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAg
LTMxNiwxNiArNDMyLDE5IEBAIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQog
ICAgIFJFTEVBU0VfQVNTRVJUKG1vZGUoKSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpOwogCiAg
ICAgLy8gT3RoZXJ3aXNlLCBsZXQncyB0cnkgdG8gbWFrZSBzb21lIG5ldyBtZW1vcnkuCi0gICAg
Ly8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEgVk0gdGFnIGZvciB3YXNtIG1l
bW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzYwMAotICAg
IHZvaWQqIG5ld01lbW9yeSA9IG1tYXAobnVsbHB0ciwgZGVzaXJlZFNpemUsIFBST1RfUkVBRCB8
IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAgICBpZiAobmV3
TWVtb3J5ID09IE1BUF9GQUlMRUQpCisgICAgLy8gRklYTUUgbXJlbWFwIHdvdWxkIGJlIG5pY2Ug
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU1NworICAgIHZvaWQq
IG5ld01lbW9yeSA9IHRyeUdldFNsb3dNZW1vcnkoZGVzaXJlZFNpemUpOworICAgIGlmICghbmV3
TWVtb3J5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1ha2VOZXdNZW1vcnlS
ZWFkV3JpdGVPclJlbGlucXVpc2gobmV3TWVtb3J5LCBkZXNpcmVkU2l6ZSwgZGVzaXJlZFNpemUs
IG1vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX21lbW9yeSkgewog
ICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwgbV9zaXplKTsKLSAgICAgICAgYm9v
bCBzdWNjZXNzID0gIW11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSk7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOworICAgICAgICByZWxpbnF1aXNoTWVtb3J5KG1fbWVt
b3J5LCBtX3NpemUsIG1fc2l6ZSwgbV9tb2RlKTsKICAgICB9CisKICAgICBtX21lbW9yeSA9IG5l
d01lbW9yeTsKICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CiAgICAgbV9zaXpl
ID0gZGVzaXJlZFNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKaW5k
ZXggYjAyNDUxZC4uY2MzNTg2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuaApAQCAtNDAsOCArNDAsNiBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWNsYXNzIFZNOwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIC8vIEZJWE1FOiBXZSBzaG91
bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyNjkzCkBAIC02MSwxMSArNTksMTYgQEAgcHVibGljOgogCiAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9tZW1vcnk7IH0KIAotICAg
IHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlID0g
c3RkOjpudWxsb3B0KTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplUHJlYWxsb2NhdGlvbnMo
KTsKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlKFBhZ2VDb3VudCBpbml0aWFsLCBQ
YWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZXF1aXJlZE1vZGUg
PSBzdGQ6Om51bGxvcHQpOwogCiAgICAgTWVtb3J5KCkgPSBkZWZhdWx0OwogICAgIH5NZW1vcnko
KTsKIAorICAgIHN0YXRpYyBzaXplX3QgZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpOworICAgIHN0
YXRpYyBzaXplX3QgZmFzdE1hcHBlZEJ5dGVzKCk7IC8vIEluY2x1ZGVzIHJlZHpvbmUuCisgICAg
c3RhdGljIHNpemVfdCBtYXhGYXN0TWVtb3J5Q291bnQoKTsKKwogICAgIHZvaWQqIG1lbW9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KICAgICBQYWdlQ291bnQgc2l6ZUluUGFnZXMoKSBjb25zdCB7IHJldHVy
biBQYWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUpOyB9CkBAIC04MSw3ICs4NCw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7IH0K
IHByaXZhdGU6Ci0gICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZUltcGwoVk0mLCBQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9k
ZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9y
eT4gY3JlYXRlSW1wbChQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6
b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKICAgICBN
ZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7CiAgICAgTWVtb3J5KFBhZ2VDb3Vu
dCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CiAKQEAgLTk0LDEyICs5NywxNiBAQCBwcml2
YXRlOgogICAgIE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcg
fTsKIH07CiAKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90
KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFw
IHRvIGJlIDJeMzMgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2Vy
IHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7Ci0KLWNv
bnN0IHNpemVfdCBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMgPSAoc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpICsgMSkgKiAyOyAvLyBwb2ludGVy
IG1heCArIG9mZnNldCBtYXguIFRoaXMgaXMgYWxsIHdlIG5lZWQgc2luY2UgYSBsb2FkIHN0cmFk
ZGxpbmcgcmVhZGFibGUgbWVtb3J5IHdpbGwgdHJhcC4KIGV4dGVybiBTdGF0aWNMb2NrIG1lbW9y
eUxvY2s7CiBjb25zdCBIYXNoU2V0PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmllcyhjb25z
dCBBYnN0cmFjdExvY2tlciYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCisjZWxz
ZQorCitjbGFzcyBNZW1vcnkgeworcHVibGljOgorICAgIHN0YXRpYyBzaXplX3QgbWF4RmFzdE1l
bW9yeUNvdW50KCkgeyByZXR1cm4gMDsgfQorfTsKKwogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggNjU0N2Q2Mi4uNDgzMjk4ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3Bw
CkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBBU1NFUlQoaW5o
ZXJpdHModm0sIGluZm8oKSkpOwogCiAgICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBtb2R1bGUp
OwotICAgIGNvbnN0IHNpemVfdCBleHRyYU1lbW9yeVNpemUgPSBtb2R1bGUtPm1vZHVsZUluZm9y
bWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGNvbnN0IHNp
emVfdCBleHRyYU1lbW9yeVNpemUgPSBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpOwogICAgIG1fZ2xv
YmFscyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwogICAg
IGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsKIApA
QCAtODksNyArODksNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fbWVtb3J5KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X3RhYmxlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7Ci0gICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bW9kdWxlKCktPm1v
ZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPmdsb2JhbE1lbW9yeUJ5dGVTaXplKCkpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1bmN0aW9u
czsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlv
bnMoKVtpXSk7CiB9CkBAIC0yOTYsNyArMjk2LDcgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMK
ICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVtb3J5SW1wb3J0
KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
LmlzSW1wb3J0KCkpOwogICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQn
cyBhIG1lbW9yeSBkZWZpbml0aW9uLgotICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4g
bWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOworICAgICAg
ICAgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUo
bW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5Lm1heGltdW0oKSk7CiAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwogCkBAIC0z
NTAsNiArMzUwLDEwIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgcmV0dXJuIGluc3Rh
bmNlOwogfQogCitzaXplX3QgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpnbG9iYWxNZW1vcnlCeXRl
U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
Lmdsb2JhbHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKK30KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmgKaW5kZXggODU1MWZlOC4uNTNlZDk5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCkBAIC05
Miw2ICs5Miw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgVk0qIG1fdm07CiAgICAgV3Jp
dGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9j
YXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsg
b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KKyAgICBzaXplX3QgZ2xvYmFsTWVtb3J5Qnl0
ZVNpemUoKSBjb25zdDsKIAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBt
X21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2Rl
QmxvY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNZW1vcnkuY3BwCmluZGV4IDMzNjljMGUuLmM2ZDc4Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCkBAIC0x
MTcsNiArMTE3LDcgQEAgV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3co
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHQKICAgICB9CiAKICAgICBtZW1v
cnkoKS5jaGVjaygpOworICAgIC8vIEZJWE1FIFNob3VsZCB3ZSByZXBvcnQgZXh0cmEgbWVtb3J5
IHRvIHRoZSBHQyBvbiBhbGxvY2F0aW9uIC8gZ3JvdyAvIHZpc2l0PyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjkwCiAgICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsK
IH0KIApAQCAtMTI0LDYgKzEyNSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBB
U1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAgIC8vIEZJWE1FIFNob3VsZCB3ZSByZXBv
cnQgZXh0cmEgbWVtb3J5IHRvIHRoZSBHQyBvbiBhbGxvY2F0aW9uIC8gZ3JvdyAvIHZpc2l0PyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjkwCisgICAgdm0uaGVh
cC5yZXBvcnRXZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZCgxKTsKIH0KIAogdm9pZCBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTE0MSw2ICsxNDQs
NyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9idWZmZXJX
cmFwcGVyKTsKKyAgICAvLyBGSVhNRSBTaG91bGQgd2UgcmVwb3J0IGV4dHJhIG1lbW9yeSB0byB0
aGUgR0Mgb24gYWxsb2NhdGlvbiAvIGdyb3cgLyB2aXNpdD8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MDY5MAogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29u
c3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvci5jcHAKaW5kZXggY2ZlOGI5Zi4uNjBhNzgzMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlDb25zdHJ1Y3Rvci5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUqIGV4
ZWMKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9
IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNv
dW50KTsKKyAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNy
ZWF0ZShpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50KTsKICAgICBpZiAoIW1lbW9y
eSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRv
ci5oCmluZGV4IGM5Y2IxNTUuLmQ3Njc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL09T
QWxsb2NhdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaApAQCAtMzYsNyAr
MzYsNiBAQCBwdWJsaWM6CiAgICAgZW51bSBVc2FnZSB7CiAgICAgICAgIFVua25vd25Vc2FnZSA9
IC0xLAogICAgICAgICBGYXN0TWFsbG9jUGFnZXMgPSBWTV9UQUdfRk9SX1RDTUFMTE9DX01FTU9S
WSwKLSAgICAgICAgSlNHQ0hlYXBQYWdlcyA9IFZNX1RBR19GT1JfQ09MTEVDVE9SX01FTU9SWSwK
ICAgICAgICAgSlNWTVN0YWNrUGFnZXMgPSBWTV9UQUdfRk9SX1JFR0lTVEVSRklMRV9NRU1PUlks
CiAgICAgICAgIEpTSklUQ29kZVBhZ2VzID0gVk1fVEFHX0ZPUl9FWEVDVVRBQkxFQUxMT0NBVE9S
X01FTU9SWSwKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVk1UYWdzLmggYi9T
b3VyY2UvV1RGL3d0Zi9WTVRhZ3MuaAppbmRleCBhZWYwNWQyLi4yN2ZjMGRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9WTVRhZ3MuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WTVRhZ3MuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTEsMTUgKzUxLDE1IEBACiAjZW5kaWYgLy8gZGVmaW5lZChWTV9NRU1PUllfSkFWQVNDUklQVF9K
SVRfUkVHSVNURVJfRklMRSkKIAogI2lmIGRlZmluZWQoVk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09S
RSkKLSNkZWZpbmUgVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZIFZNX01BS0VfVEFHKFZNX01F
TU9SWV9KQVZBU0NSSVBUX0NPUkUpCisjZGVmaW5lIFZNX1RBR19GT1JfV0VCQVNTRU1CTFlfTUVN
T1JZIFZNX01BS0VfVEFHKFZNX01FTU9SWV9KQVZBU0NSSVBUX0NPUkUpCiAjZWxzZQotI2RlZmlu
ZSBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlkgVk1fTUFLRV9UQUcoNjMpCisjZGVmaW5lIFZN
X1RBR19GT1JfV0VCQVNTRU1CTFlfTUVNT1JZIFZNX01BS0VfVEFHKDYzKQogI2VuZGlmIC8vIGRl
ZmluZWQoVk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRSkKIAogI2Vsc2UgLy8gT1MoREFSV0lOKQog
CiAjZGVmaW5lIFZNX1RBR19GT1JfVENNQUxMT0NfTUVNT1JZIC0xCi0jZGVmaW5lIFZNX1RBR19G
T1JfQ09MTEVDVE9SX01FTU9SWSAtMQorI2RlZmluZSBWTV9UQUdfRk9SX1dFQkFTU0VNQkxZX01F
TU9SWSAtMQogI2RlZmluZSBWTV9UQUdfRk9SX0VYRUNVVEFCTEVBTExPQ0FUT1JfTUVNT1JZIC0x
CiAjZGVmaW5lIFZNX1RBR19GT1JfUkVHSVNURVJGSUxFX01FTU9SWSAtMQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwCmluZGV4IDU5MTJiMDUuLjdhMTcwMDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAg
UmVzb3VyY2VVc2FnZURhdGE6OlJlc291cmNlVXNhZ2VEYXRhKCkKIHsKICAgICAvLyBWTSB0YWcg
Y2F0ZWdvcmllcy4KICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpKU0pJVF0gPSBNZW1v
cnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkpTSklUKTsKKyAgICBjYXRlZ29yaWVzW01l
bW9yeUNhdGVnb3J5OjpXZWJBc3NlbWJseV0gPSBNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0
ZWdvcnk6OldlYkFzc2VtYmx5KTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpJbWFn
ZXNdID0gTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpJbWFnZXMpOwogICAgIGNh
dGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkxheWVyc10gPSBNZW1vcnlDYXRlZ29yeUluZm8oTWVt
b3J5Q2F0ZWdvcnk6OkxheWVycyk7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6TGli
Y01hbGxvY10gPSBNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkxpYmNNYWxsb2Mp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5oCmluZGV4IDcyMzY5NmYuLjlm
Zjg2YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTIgKzM1
LDEzIEBAIG5hbWVzcGFjZSBNZW1vcnlDYXRlZ29yeSB7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQg
Ym1hbGxvYyA9IDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgTGliY01hbGxvYyA9IDE7CiBzdGF0
aWMgY29uc3QgdW5zaWduZWQgSlNKSVQgPSAyOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEltYWdl
cyA9IDM7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgR0NIZWFwID0gNDsKLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBHQ093bmVkID0gNTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdGhlciA9IDY7Ci1z
dGF0aWMgY29uc3QgdW5zaWduZWQgTGF5ZXJzID0gNzsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBO
dW1iZXJPZkNhdGVnb3JpZXMgPSA4Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIFdlYkFzc2VtYmx5
ID0gMzsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBJbWFnZXMgPSA0Oworc3RhdGljIGNvbnN0IHVu
c2lnbmVkIEdDSGVhcCA9IDU7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgR0NPd25lZCA9IDY7Citz
dGF0aWMgY29uc3QgdW5zaWduZWQgT3RoZXIgPSA3Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIExh
eWVycyA9IDg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgTnVtYmVyT2ZDYXRlZ29yaWVzID0gOTsK
IH0KIAogc3RydWN0IE1lbW9yeUNhdGVnb3J5SW5mbyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KaW5kZXggMzY2NjAx
ZS4uOTczYjg2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJj
ZVVzYWdlT3ZlcmxheUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVz
b3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTYyLDYgKzE2Miw3IEBAIEhpc3RvcmljUmVzb3Vy
Y2VVc2FnZURhdGE6Okhpc3RvcmljUmVzb3VyY2VVc2FnZURhdGEoKQogewogICAgIC8vIFZNIHRh
ZyBjYXRlZ29yaWVzLgogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkpTSklUXSA9IEhp
c3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpKU0pJVCwgMHhGRkZGNjBG
RiwgIkpTIEpJVCIpOworICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OldlYkFzc2VtYmx5
XSA9IEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpXZWJBc3NlbWJs
eSwgMHhGRjY1NEZGMCwgIldlYkFzc2VtYmx5Iik7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRl
Z29yeTo6SW1hZ2VzXSA9IEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5
OjpJbWFnZXMsIDB4RkZGRkZGMDAsICJJbWFnZXMiKTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNh
dGVnb3J5OjpMYXllcnNdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdv
cnk6OkxheWVycywgMHhGRjAwRkZGRiwgIkxheWVycyIpOwogICAgIGNhdGVnb3JpZXNbTWVtb3J5
Q2F0ZWdvcnk6OkxpYmNNYWxsb2NdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5
Q2F0ZWdvcnk6OkxpYmNNYWxsb2MsIDB4RkYwMEZGMDAsICJsaWJjIG1hbGxvYyIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5t
bQppbmRleCAwNjRhNjFhLi5hMzBlZjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNiArODAsNyBAQCBjb25z
dCBjaGFyKiBkaXNwbGF5TmFtZUZvclZNVGFnKHVuc2lnbmVkIHRhZykKICAgICBjYXNlIFZNX01F
TU9SWV9JTUFHRUlPOiByZXR1cm4gIkltYWdlSU8iOwogICAgIGNhc2UgVk1fTUVNT1JZX0NHSU1B
R0U6IHJldHVybiAiQ0cgaW1hZ2UiOwogICAgIGNhc2UgVk1fTUVNT1JZX0pBVkFTQ1JJUFRfSklU
X0VYRUNVVEFCTEVfQUxMT0NBVE9SOiByZXR1cm4gIkpTQyBKSVQiOworICAgIGNhc2UgVk1fTUVN
T1JZX0pBVkFTQ1JJUFRfQ09SRTogcmV0dXJuICJXZWJBc3NlbWJseSI7CiAgICAgY2FzZSBWTV9N
RU1PUllfTUFMTE9DOiByZXR1cm4gIm1hbGxvYyI7CiAgICAgY2FzZSBWTV9NRU1PUllfTUFMTE9D
X0hVR0U6IHJldHVybiAibWFsbG9jIChodWdlKSI7CiAgICAgY2FzZSBWTV9NRU1PUllfTUFMTE9D
X0xBUkdFOiByZXR1cm4gIm1hbGxvYyAobGFyZ2UpIjsKQEAgLTE4MSw2ICsxODIsOCBAQCBzdGF0
aWMgdW5zaWduZWQgY2F0ZWdvcnlGb3JWTVRhZyh1bnNpZ25lZCB0YWcpCiAgICAgICAgIHJldHVy
biBNZW1vcnlDYXRlZ29yeTo6SW1hZ2VzOwogICAgIGNhc2UgVk1fTUVNT1JZX0pBVkFTQ1JJUFRf
SklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SOgogICAgICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdvcnk6
OkpTSklUOworICAgIGNhc2UgVk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRToKKyAgICAgICAgcmV0
dXJuIE1lbW9yeUNhdGVnb3J5OjpXZWJBc3NlbWJseTsKICAgICBjYXNlIFZNX01FTU9SWV9NQUxM
T0M6CiAgICAgY2FzZSBWTV9NRU1PUllfTUFMTE9DX0hVR0U6CiAgICAgY2FzZSBWTV9NRU1PUllf
TUFMTE9DX0xBUkdFOgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kb2NzL2IzL2lu
dGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kb2Nz
L2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCmluZGV4IDIwYjU5YjUuLjFhNTk4
YTUgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9pbnRlcm1lZGlhdGUt
cmVwcmVzZW50YXRpb24uaHRtbAorKysgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50
ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwKQEAgLTY1NCw5ICs2NTQsOSBAQCBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICA8ZGQ+U3BlY2lhbCBXYXNtIG9wY29kZS4gVGhpcyBi
cmFuY2hlcyBvbiB0aGUgZmlyc3QgY2hpbGQuIElmIHRoZSBmaXJzdCBjaGlsZCBwbHVzIHRoZSBv
ZmZzZXQKICAgICAgICAgcHJvZHVjZXMgYSBJbnQ2NCBsZXNzIHRoYW4gdG8gdGhlIHBpbm5lZEdQ
UiB0aGlzIGZhbGxzIHRocm91Z2guIE90aGVyd2lzZSwgaXQgYnJhbmNoZXMgdG8KICAgICAgICAg
dGhlIGV4aXQgcGF0aCBnZW5lcmF0ZWQgYnkgdGhlIHBhc3NlZCBnZW5lcmF0b3IuIFVubGlrZSB0
aGUgUGF0Y2gvQ2hlY2sgZmFtaWx5LCB0aGUKLSAgICAgICAgZ2VuZXJhdG9yIHVzZWQgYnkgV2Fz
bUJvdW5kc0NoZWNrIHNvdWxkIGJlIHNldCBvbiB0aGUgUHJvY3VkZXIgaXRzZWxmLiBUaGUgR1JQ
UmVnIHBhc3NlZCBpbgorICAgICAgICBnZW5lcmF0b3IgdXNlZCBieSBXYXNtQm91bmRzQ2hlY2sg
c2hvdWxkIGJlIHNldCBvbiB0aGUgUHJvY2VkdXJlIGl0c2VsZi4gVGhlIEdSUFJlZyBwYXNzZWQg
aW4KICAgICAgICAgcGlubmVkR1BSIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgcGlubmVkIGJ5IGNh
bGxpbmcgdGhlIFByb2NlZHVyZSdzIHBpbm5pbmcgQVBJLiBCMyBhc3N1bWVzCi0gICAgICAgIHRo
ZSBXYXNtQm91bmRzQ2hlY2sgd2lsbCBzaWRlLWV4aXQgd2hlbiB0aGUgaXQgYnJhbmNoZXMsIHNv
IHRoZSBnZW5lcmF0b3IgbXVzdCBkbyBzb21lIGtpbmQKKyAgICAgICAgdGhlIFdhc21Cb3VuZHND
aGVjayB3aWxsIHNpZGUtZXhpdCB3aGVuIGl0IGJyYW5jaGVzLCBzbyB0aGUgZ2VuZXJhdG9yIG11
c3QgZG8gc29tZSBraW5kCiAgICAgICAgIG9mIHRlcm1pbmF0aW9uLiBJbiBXYXNtIHRoaXMgaXMg
dXNlZCB0byB0cmFwIGFuZCB1bndpbmQgYmFjayB0byBKUy4gTXVzdCB1c2UgdGhlCiAgICAgICAg
IFdhc21Cb3VuZHNDaGVja1ZhbHVlIGNsYXNzLjwvZGQ+CiAKLS0gCjIuMTAuMQoK
</data>
<flag name="commit-queue"
          id="328065"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306754</attachid>
            <date>2017-04-10 16:27:21 -0700</date>
            <delta_ts>2017-04-10 21:29:21 -0700</delta_ts>
            <desc>Updates</desc>
            <filename>0001-fast-memories-everywhere.patch</filename>
            <type>text/plain</type>
            <size>80738</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBlMzRiMjEwOTQwZDE5MGZlOTc3Mzg1NzdhMTY5N2E4YjNjYzQ4N2ZkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDYgQXByIDIwMTcgMTU6MTQ6NDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBmYXN0LW1l
bW9yaWVzLWV2ZXJ5d2hlcmUKCi0tLQogSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMTMgKy0KIEpTVGVzdHMvd2FzbS9XQVNNLmpzICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDMwICsrCiAuLi4vd2FzbS9mdW5jdGlvbi10ZXN0cy9t
ZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcyB8IDEzMCArKysrKysKIEpTVGVzdHMvd2FzbS9mdW5j
dGlvbi10ZXN0cy9tZW1vcnktbXVsdGlhZ2VudC5qcyAgIHwgMTE3ICsrKysrKwogSlNUZXN0cy93
YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcyAgICAgICAgfCAgMTUgKwogSlNUZXN0
cy93YXNtL3V0aWxpdGllcy5qcyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgICAgICAgICAgfCAgMzQgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcCAgICAgICAgICAgIHwgICAz
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAgICAgICAgICAgICAgICB8
ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3Bw
ICAgfCAgMjEgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmggIHwgIDE0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5j
cHAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAg
ICAgICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwICAgICAgICAgICAgICAgIHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmggICAgICAgICAgICAgICAgICB8ICAxMyArCiAuLi4vSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgIDQwICstCiAuLi4vSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCB8ICAgMiArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAgICAgfCA0MzQgKysrKysrKysr
KysrKy0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggICAg
ICAgICAgICB8ICAxOSArLQogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCAg
ICAgICAgICAgICAgfCAgIDggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oIHwgICAxICsKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuY3BwIHwgICA0ICsKIFNvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxIC0KIFNvdXJjZS9XVEYvd3RmL1ZNVGFncy5oICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICstCiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jl
c291cmNlVXNhZ2VEYXRhLmNwcCAgICAgICAgICB8ICAgMyArLQogU291cmNlL1dlYkNvcmUvcGFn
ZS9SZXNvdXJjZVVzYWdlRGF0YS5oICAgICAgICAgICAgfCAgMTUgKy0KIC4uLi9wYWdlL2NvY29h
L1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0gICAgICAgIHwgICAzICstCiAuLi4vV2ViQ29y
ZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbSB8ICAgNSArLQogLi4uL2Rv
Y3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwgICAgICAgfCAgIDQgKy0KIDMx
IGZpbGVzIGNoYW5nZWQsIDc4NSBpbnNlcnRpb25zKCspLCAyMDcgZGVsZXRpb25zKC0pCiBjcmVh
dGUgbW9kZSAxMDA2NDQgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3Mt
cGFzdC00Z2liLmpzCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRl
c3RzL21lbW9yeS1tdWx0aWFnZW50LmpzCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL0J1aWxk
ZXIuanMgYi9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcwppbmRleCA4ZmY1ZGNlLi5kZWU3ODZkIDEw
MDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcworKysgYi9KU1Rlc3RzL3dhc20vQnVp
bGRlci5qcwpAQCAtMjcsMTIgKzI3LDcgQEAgaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2Vy
dC5qcyc7CiBpbXBvcnQgKiBhcyBCdWlsZFdlYkFzc2VtYmx5IGZyb20gJ0J1aWxkZXJfV2ViQXNz
ZW1ibHlCaW5hcnkuanMnOwogaW1wb3J0ICogYXMgTExCIGZyb20gJ0xvd0xldmVsQmluYXJ5Lmpz
JzsKIGltcG9ydCAqIGFzIFdBU00gZnJvbSAnV0FTTS5qcyc7Ci0KLWNvbnN0IF90b0phdmFTY3Jp
cHROYW1lID0gbmFtZSA9PiB7Ci0gICAgY29uc3QgY2FtZWxDYXNlID0gbmFtZS5yZXBsYWNlKC8o
W15hLXowLTldLikvZywgYyA9PiBjWzFdLnRvVXBwZXJDYXNlKCkpOwotICAgIGNvbnN0IENhbWVs
Q2FzZSA9IGNhbWVsQ2FzZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNhbWVsQ2FzZS5zbGlj
ZSgxKTsKLSAgICByZXR1cm4gQ2FtZWxDYXNlOwotfTsKK2ltcG9ydCAqIGFzIHV0aWwgZnJvbSAn
dXRpbGl0aWVzLmpzJzsKIAogY29uc3QgX2lzVmFsaWRWYWx1ZSA9ICh2YWx1ZSwgdHlwZSkgPT4g
ewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMjI1LDcgKzIyMCw3IEBAIGNvbnN0IF9pbXBvcnRH
bG9iYWxDb250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsK
ICAgICAgICAgICAgIEVuZDogKCkgPT4gbmV4dEJ1aWxkZXIKICAgICAgICAgfTsKICAgICAgICAg
Zm9yIChsZXQgb3Agb2YgV0FTTS5kZXNjcmlwdGlvbi52YWx1ZV90eXBlKSB7Ci0gICAgICAgICAg
ICBnbG9iYWxCdWlsZGVyW190b0phdmFTY3JpcHROYW1lKG9wKV0gPSAobW9kdWxlLCBmaWVsZCwg
bXV0YWJpbGl0eSkgPT4geworICAgICAgICAgICAgZ2xvYmFsQnVpbGRlclt1dGlsLnRvSmF2YVNj
cmlwdE5hbWUob3ApXSA9IChtb2R1bGUsIGZpZWxkLCBtdXRhYmlsaXR5KSA9PiB7CiAgICAgICAg
ICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG1vZHVsZSwgYEltcG9ydCBnbG9iYWwgbW9kdWxlIHNo
b3VsZCBiZSBhIHN0cmluZywgZ290ICIke21vZHVsZX0iYCk7CiAgICAgICAgICAgICAgICAgYXNz
ZXJ0LmlzU3RyaW5nKGZpZWxkLCBgSW1wb3J0IGdsb2JhbCBmaWVsZCBzaG91bGQgYmUgYSBzdHJp
bmcsIGdvdCAiJHtmaWVsZH0iYCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG11
dGFiaWxpdHksIGBJbXBvcnQgZ2xvYmFsIG11dGFiaWxpdHkgc2hvdWxkIGJlIGEgc3RyaW5nLCBn
b3QgIiR7bXV0YWJpbGl0eX0iYCk7CkBAIC0zMTgsNyArMzEzLDcgQEAgY29uc3QgX2NoZWNrSW1t
cyA9IChvcCwgaW1tcywgZXhwZWN0ZWRJbW1zLCByZXQpID0+IHsKIGNvbnN0IF9jcmVhdGVGdW5j
dGlvbkJ1aWxkZXIgPSAoZnVuYywgYnVpbGRlciwgcHJldmlvdXNCdWlsZGVyKSA9PiB7CiAgICAg
bGV0IGZ1bmN0aW9uQnVpbGRlciA9IHt9OwogICAgIGZvciAoY29uc3Qgb3AgaW4gV0FTTS5kZXNj
cmlwdGlvbi5vcGNvZGUpIHsKLSAgICAgICAgY29uc3QgbmFtZSA9IF90b0phdmFTY3JpcHROYW1l
KG9wKTsKKyAgICAgICAgY29uc3QgbmFtZSA9IHV0aWwudG9KYXZhU2NyaXB0TmFtZShvcCk7CiAg
ICAgICAgIGNvbnN0IHZhbHVlID0gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbb3BdLnZhbHVlOwog
ICAgICAgICBjb25zdCByZXQgPSBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF1bInJldHVybiJd
OwogICAgICAgICBjb25zdCBwYXJhbSA9IFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlW29wXS5wYXJh
bWV0ZXI7CkBAIC01NDIsNyArNTM3LDcgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAobGV0IG9wIG9mIFdBU00uZGVzY3JpcHRpb24udmFsdWVfdHlw
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsQnVpbGRlcltfdG9KYXZhU2NyaXB0
TmFtZShvcCldID0gKGluaXRWYWx1ZSwgbXV0YWJpbGl0eSkgPT4geworICAgICAgICAgICAgICAg
ICAgICAgICAgZ2xvYmFsQnVpbGRlclt1dGlsLnRvSmF2YVNjcmlwdE5hbWUob3ApXSA9IChpbml0
VmFsdWUsIG11dGFiaWxpdHkpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmRh
dGEucHVzaCh7IHR5cGU6IG9wLCBvcDogb3AgKyAiLmNvbnN0IiwgbXV0YWJpbGl0eTogX25vcm1h
bGl6ZU11dGFiaWxpdHkobXV0YWJpbGl0eSksIGluaXRWYWx1ZSB9KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihnbG9iYWxCdWlsZGVy
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH07CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
V0FTTS5qcyBiL0pTVGVzdHMvd2FzbS9XQVNNLmpzCmluZGV4IDFiYjc5YjguLjFlNjRjYWUgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9XQVNNLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9XQVNNLmpz
CkBAIC00NCwzICs0NCwzMyBAQCBleHBvcnQgY29uc3QgaXNWYWxpZEJsb2NrVHlwZSA9IHYgPT4g
X2Jsb2NrVHlwZVNldC5oYXModik7CiBleHBvcnQgY29uc3QgZXh0ZXJuYWxLaW5kVmFsdWUgPSBf
bWFwVmFsdWVzKGRlc2NyaXB0aW9uLmV4dGVybmFsX2tpbmQpOwogZXhwb3J0IGNvbnN0IHNlY3Rp
b25zID0gT2JqZWN0LmtleXMoZGVzY3JpcHRpb24uc2VjdGlvbik7CiBleHBvcnQgY29uc3Qgc2Vj
dGlvbkVuY29kaW5nVHlwZSA9IGRlc2NyaXB0aW9uLnNlY3Rpb25bc2VjdGlvbnNbMF1dLnR5cGU7
CisKK2V4cG9ydCBmdW5jdGlvbiogb3Bjb2RlcyhjYXRlZ29yeSA9IHVuZGVmaW5lZCkgeworICAg
IGZvciAobGV0IG9wIGluIGRlc2NyaXB0aW9uLm9wY29kZSkKKyAgICAgICAgaWYgKGNhdGVnb3J5
ICE9PSB1bmRlZmluZWQgJiYgZGVzY3JpcHRpb24ub3Bjb2RlW29wXS5jYXRlZ29yeSA9PT0gY2F0
ZWdvcnkpCisgICAgICAgICAgICB5aWVsZCB7IG5hbWU6IG9wLCBvcGNvZGU6IGRlc2NyaXB0aW9u
Lm9wY29kZVtvcF0gfTsKK307CitleHBvcnQgY29uc3QgbWVtb3J5QWNjZXNzSW5mbyA9IG9wID0+
IHsKKyAgICAvLyAgICAgICAgICAgICAgICA8LS0tLS0tLS0tLS12YWx1ZVR5cGUtLS0tLS0tLS0t
LT4gIDwtLS0tLS0tdHlwZS0tLS0tLS0+PC0tLS0tLS0tLXdpZHRoLS0tLS0tLS0+ICA8LS1zaWdu
LS0+CisgICAgY29uc3QgY2xhc3NpZnkgPSAvKCg/OmkzMil8KD86aTY0KXwoPzpmMzIpfCg/OmY2
NCkpXC4oKD86bG9hZCl8KD86c3RvcmUpKSgoPzo4KT98KD86MTYpP3woPzozMik/KV8/KCg/OnN8
dSk/KS87CisgICAgY29uc3QgZm91bmQgPSBvcC5uYW1lLm1hdGNoKGNsYXNzaWZ5KTsKKyAgICBj
b25zdCB2YWx1ZVR5cGUgPSBmb3VuZFsxXTsKKyAgICBjb25zdCB0eXBlID0gZm91bmRbMl07Cisg
ICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChmb3VuZFszXSA/IGZvdW5kWzNdIDogdmFsdWVUeXBl
LnNsaWNlKDEpKTsKKyAgICBjb25zdCBzaWduID0gKCgpID0+IHsKKyAgICAgICAgc3dpdGNoIChm
b3VuZFs0XSkgeworICAgICAgICBjYXNlICJzIjogcmV0dXJuICJzaWduZWQiOworICAgICAgICBj
YXNlICJ1IjogcmV0dXJuICJ1bnNpZ25lZCI7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiAiYWdu
b3N0aWMiOworICAgICAgICB9CisgICAgfSkoKTsKKyAgICByZXR1cm4geyB2YWx1ZVR5cGUsIHR5
cGUsIHdpZHRoLCBzaWduIH07Cit9OworCitleHBvcnQgY29uc3QgY29uc3RGb3JWYWx1ZVR5cGUg
PSB2YWx1ZVR5cGUgPT4geworICAgIGZvciAobGV0IG9wIGluIGRlc2NyaXB0aW9uLm9wY29kZSkK
KyAgICAgICAgaWYgKG9wLmVuZHNXaXRoKCIuY29uc3QiKSAmJiBkZXNjcmlwdGlvbi5vcGNvZGVb
b3BdWyJyZXR1cm4iXSA9PSB2YWx1ZVR5cGUpCisgICAgICAgICAgICByZXR1cm4gb3A7CisgICAg
dGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiBubyBjb25zdCB0eXBlIGZv
ciAke3ZhbHVlVHlwZX1gKTsKK307CisKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlv
bi10ZXN0cy9tZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlv
bi10ZXN0cy9tZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kMWE1ZjAzCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3MtcGFzdC00Z2liLmpzCkBAIC0wLDAgKzEsMTMwIEBA
CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKK2ltcG9ydCAqIGFzIGFzc2Vy
dCBmcm9tICcuLi9hc3NlcnQuanMnOworaW1wb3J0ICogYXMgTExCIGZyb20gJy4uL0xvd0xldmVs
QmluYXJ5LmpzJzsKK2ltcG9ydCAqIGFzIFdBU00gZnJvbSAnLi4vV0FTTS5qcyc7CitpbXBvcnQg
KiBhcyB1dGlsIGZyb20gJy4uL3V0aWxpdGllcy5qcyc7CisKK2NvbnN0IHZlcmJvc2UgPSBmYWxz
ZTsKKworY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7Citjb25zdCBmb3VyR2lCID0gcGFnZVNp
emUgKiA2NTUzNjsKK2NvbnN0IGluaXRpYWwgPSA2NDsKK2NvbnN0IG1heGltdW0gPSAxMjg7CisK
Ky8vIFdoZW4gdXNpbmcgZmFzdCBtZW1vcmllcywgd2UgYWxsb2NhdGUgYSByZWR6b25lIGFmdGVy
IHRoZSA0R2lCIGh1Z2UKKy8vIGFsbG9jYXRpb24uIFRoaXMgcmVkem9uZSBpcyB1c2VkIHRvIHRy
YXAgcmVnK2ltbSBhY2Nlc3NlcyB3aGljaCBleGNlZWQKKy8vIDMyLWJpdHMuIEFueXRoaW5nIHBh
c3QgNEdpQiBtdXN0IHRyYXAsIGJ1dCB3ZSBjYW5ub3Qga25vdyBzdGF0aWNhbGx5IHRoYXQgaXQK
Ky8vIHdpbGwuCisKK2NvbnN0IG9mZnNldHMgPSBbCisgICAgMCwKKyAgICAxLAorICAgIDIsCisg
ICAgMTAyNCwKKyAgICBwYWdlU2l6ZSwKKyAgICBwYWdlU2l6ZSArIHBhZ2VTaXplIC8gMiwKKyAg
ICBwYWdlU2l6ZSAqIDgsCisgICAgcGFnZVNpemUgKiAxNiwKKyAgICBwYWdlU2l6ZSAqIDEyOCwK
KyAgICBwYWdlU2l6ZSAqIDUxMiwKKyAgICBmb3VyR2lCIC8gNCAtIDQsCisgICAgZm91ckdpQiAv
IDQgLSAzLAorICAgIGZvdXJHaUIgLyA0IC0gMiwKKyAgICBmb3VyR2lCIC8gNCAtIDEsCisgICAg
Zm91ckdpQiAvIDQsCisgICAgZm91ckdpQiAvIDQgKyAxLAorICAgIGZvdXJHaUIgLyA0ICsgMiwK
KyAgICBmb3VyR2lCIC8gNCArIDMsCisgICAgZm91ckdpQiAvIDQgKyA0LAorICAgIGZvdXJHaUIg
LyAyIC0gNCwKKyAgICBmb3VyR2lCIC8gMiAtIDMsCisgICAgZm91ckdpQiAvIDIgLSAyLAorICAg
IGZvdXJHaUIgLyAyIC0gMSwKKyAgICBmb3VyR2lCIC8gMiwKKyAgICBmb3VyR2lCIC8gMiArIDEs
CisgICAgZm91ckdpQiAvIDIgKyAyLAorICAgIGZvdXJHaUIgLyAyICsgMywKKyAgICBmb3VyR2lC
IC8gMiArIDQsCisgICAgKGZvdXJHaUIgLyA0KSAqIDMsCisgICAgZm91ckdpQiAtIDQsCisgICAg
Zm91ckdpQiAtIDMsCisgICAgZm91ckdpQiAtIDIsCisgICAgZm91ckdpQiAtIDEsCitdOworCitm
b3IgKGxldCBtZW1vcnlEZWNsYXJhdGlvbiBvZiBbeyBpbml0aWFsOiBpbml0aWFsIH0sIHsgaW5p
dGlhbDogaW5pdGlhbCwgbWF4aW11bTogbWF4aW11bSB9XSkgeworICAgIGZ1bGxHQygpOworCisg
ICAgLy8gUmUtdXNlIGEgc2luZ2xlIG1lbW9yeSBzbyB0ZXN0cyBhcmUgbW9yZSBsaWtlbHkgdG8g
Z2V0IGEgZmFzdCBtZW1vcnkuCisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1l
bW9yeShtZW1vcnlEZWNsYXJhdGlvbik7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50
KFdlYkFzc2VtYmx5TWVtb3J5TW9kZShtZW1vcnkpKTsKKyAgICBjb25zdCBidWYgPSBuZXcgVWlu
dDhBcnJheShtZW1vcnkuYnVmZmVyKTsKKworICAgIC8vIEVudW1lcmF0ZSBhbGwgbWVtb3J5IGFj
Y2VzcyB0eXBlcy4KKyAgICBmb3IgKGNvbnN0IG9wIG9mIFdBU00ub3Bjb2RlcygibWVtb3J5Iikp
IHsKKyAgICAgICAgY29uc3QgaW5mbyA9IFdBU00ubWVtb3J5QWNjZXNzSW5mbyhvcCk7CisKKyAg
ICAgICAgLy8gVGhlIGFjY2Vzc2VzIHNob3VsZCBmYXVsdCBldmVuIGlmIG9ubHkgdGhlIGxhc3Qg
Ynl0ZSBpcyBvZmYgdGhlIGVuZC4KKyAgICAgICAgbGV0IHdpZ2dsZXMgPSBbMF07CisgICAgICAg
IGZvciAobGV0IHdpZ2dsZSA9IDA7IHdpZ2dsZSAhPT0gaW5mby53aWR0aCAvIDg7ICsrd2lnZ2xl
KQorICAgICAgICAgICAgd2lnZ2xlcy5wdXNoKHdpZ2dsZSk7CisKKyAgICAgICAgbGV0IGJ1aWxk
ZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAg
ICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZWNsYXJhdGlvbiku
RW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0
KCk7CisKKyAgICAgICAgZm9yIChsZXQgb2Zmc2V0IG9mIG9mZnNldHMpCisgICAgICAgICAgICBz
d2l0Y2ggKGluZm8udHlwZSkgeworICAgICAgICAgICAgY2FzZSAibG9hZCI6IGJ1aWxkZXIgPSBi
dWlsZGVyLkZ1bmN0aW9uKCJnZXRfIiArIG9mZnNldCk7IGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSAic3RvcmUiOiBidWlsZGVyID0gYnVpbGRlci5GdW5jdGlvbigic2V0XyIgKyBvZmZzZXQpOyBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRp
b24gcHJvYmxlbTogdW5rbm93biBtZW1vcnkgYWNjZXNzIHR5cGUgJHtpbmZvLnR5cGV9YCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIuRW5kKCkuQ29kZSgpOwor
CisgICAgICAgIGNvbnN0IGFsaWduID0gMzsgLy8gTm8gbmVlZCB0byBiZSBwcmVjaXNlLCBpdCdz
IGp1c3QgYSBoaW50LgorICAgICAgICBjb25zdCBjb25zdEluc3RyID0gdXRpbC50b0phdmFTY3Jp
cHROYW1lKFdBU00uY29uc3RGb3JWYWx1ZVR5cGUoaW5mby52YWx1ZVR5cGUpKTsKKyAgICAgICAg
Y29uc3QgaW5zdHIgPSB1dGlsLnRvSmF2YVNjcmlwdE5hbWUob3AubmFtZSk7CisgICAgICAgIGZv
ciAobGV0IG9mZnNldCBvZiBvZmZzZXRzKQorICAgICAgICAgICAgc3dpdGNoIChpbmZvLnR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgImxvYWQiOgorICAgICAgICAgICAgICAgIGJ1aWxkZXIgPSBi
dWlsZGVyLkZ1bmN0aW9uKCJnZXRfIiArIG9mZnNldCwgeyBwYXJhbXM6IFsiaTMyIl0gfSkuR2V0
TG9jYWwoMClbaW5zdHJdKGFsaWduLCBvZmZzZXQpLkRyb3AoKS5FbmQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgInN0b3JlIjoKKyAgICAgICAgICAgICAgICBi
dWlsZGVyID0gYnVpbGRlci5GdW5jdGlvbigic2V0XyIgKyBvZmZzZXQsIHsgcGFyYW1zOiBbImkz
MiJdIH0pLkdldExvY2FsKDApW2NvbnN0SW5zdHJdKDB4ZGVhZClbaW5zdHJdKGFsaWduLCBvZmZz
ZXQpLkVuZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06
IHVua25vd24gbWVtb3J5IGFjY2VzcyB0eXBlICR7aW5mby50eXBlfWApOworICAgICAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIuRW5kKCk7CisKKyAgICAgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCB7IGltcDogeyBtZW1vcnk6IG1l
bW9yeSB9IH0pOworCisgICAgICAgIGZvciAobGV0IG9mZnNldCBvZiBvZmZzZXRzKSB7CisgICAg
ICAgICAgICBmb3IgKGxldCB3aWdnbGUgb2Ygd2lnZ2xlcykgeworICAgICAgICAgICAgICAgIGNv
bnN0IGFkZHJlc3MgPSBMTEIudmFydWludDMyTWF4IC0gb2Zmc2V0IC0gd2lnZ2xlOworICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBwcmludChgJHtvcC5u
YW1lLnBhZFN0YXJ0KDE2LCAnICcpfTogYmFzZSBhZGRyZXNzICR7YWRkcmVzcyA+IDAgPyAnMHgn
IDogJyAgJ30ke2FkZHJlc3MudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIGFkZHJlc3MgPiAwID8g
JzAnIDogJyAnKX0gKyBvZmZzZXQgMHgke29mZnNldC50b1N0cmluZygxNikucGFkU3RhcnQoOCwg
JzAnKX0gLSB3aWdnbGUgJHt3aWdnbGV9ID0gZWZmZWN0aXZlIGFkZHJlc3MgMHgkeyhhZGRyZXNz
ICsgb2Zmc2V0IC0gd2lnZ2xlKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsICcwJyl9YCk7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChpbmZvLnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNl
ICJsb2FkIjoKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5j
ZS5leHBvcnRzWyJnZXRfIiArIG9mZnNldF0oYWRkcmVzcyksIFdlYkFzc2VtYmx5LlJ1bnRpbWVF
cnJvciwgYE91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2Vzc2ApOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJzdG9yZSI6CisgICAgICAgICAgICAgICAg
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0c1sic2V0XyIgKyBvZmZzZXRd
KGFkZHJlc3MpLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsIGBPdXQgb2YgYm91bmRzIG1lbW9y
eSBhY2Nlc3NgKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmtub3du
IG1lbW9yeSBhY2Nlc3MgdHlwZSAke2luZm8udHlwZX1gKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdWxsR0MoKTsKKyAgICB9CisKKyAg
ICAvLyBPbmx5IGNoZWNrIHRoYXQgdGhlIG1lbW9yeSB3YXMgdW50b3VjaGVkIGF0IHRoZSB2ZXJ5
IGVuZCwgYmVmb3JlIHRocm93aW5nIGl0IGF3YXkgZW50aXJlbHkuCisgICAgZm9yIChsZXQgaWR4
ID0gMDsgaWR4IDwgYnVmLmJ5dGVMZW5ndGg7ICsraWR4KQorICAgICAgICBhc3NlcnQuZXEoYnVm
W2lkeF0sIDApOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21l
bW9yeS1tdWx0aWFnZW50LmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1t
dWx0aWFnZW50LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZWM3YzIK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11
bHRpYWdlbnQuanMKQEAgLTAsMCArMSwxMTcgQEAKK2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0
OworCitjb25zdCB2ZXJib3NlID0gZmFsc2U7CisKKy8vIFN0YXJ0IG11bHRpcGxlIGFnZW50cyBh
bmQgY3JlYXRlIFdlYkFzc2VtYmx5Lk1lbW9yeSBmcm9tIGVhY2ggb2YKKy8vIHRoZW0uIFBlcmZv
cm0gd3JpdGVzIGludG8gZWFjaCBtZW1vcnksIGFuZCB0aGVuIGNoZWNrIHRoYXQgdGhlIG1lbW9y
eSBvbmx5CisvLyBjb250YWlucyB0aGF0IGFnZW50J3Mgd3JpdGVzLiBUaGlzIHdvdWxkIGZpbmQg
YnVncyB3aGVyZSBhbiBpbXBsZW1lbnRhdGlvbidzCisvLyBtZW1vcnkgcmV1c2UgaXMgYnVnZ3ku
CisKKy8vIFVzZSB0aGUgYWdlbnQgc3VwcG9ydCBmcm9tIHRlc3QyNjI6IGh0dHBzOi8vZ2l0aHVi
LmNvbS90YzM5L3Rlc3QyNjIvYmxvYi9tYXN0ZXIvSU5URVJQUkVUSU5HLm1kI2hvc3QtZGVmaW5l
ZC1mdW5jdGlvbnMKKworY29uc3QgdGVzdEl0ZXJhdGlvbnMgPSA4OworY29uc3QgbnVtQWdlbnRz
ID0gODsKK2NvbnN0IGluaXRpYWxQYWdlcyA9IDY0OworY29uc3QgbnVtV3JpdGVzID0gMTAyNDsK
KworY29uc3Qgc3RhdGVXYWl0ID0gMDsKK2NvbnN0IHN0YXRlUmVhZHkgPSAxOworY29uc3Qgc3Rh
dGVDaGVjayA9IDI7CisKK2NvbnN0IHN0YXJ0QWdlbnRzID0gbnVtQWdlbnRzVG9TdGFydCA9PiB7
CisgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBudW1BZ2VudHNUb1N0YXJ0OyArK2EpIHsKKyAgICAg
ICAgY29uc3QgYWdlbnRTY3JpcHQgPSBgCisgICAgICAgIGxldCBzdGF0ZSA9ICR7c3RhdGVXYWl0
fTsKKyAgICAgICAgbGV0IHU4OworCisgICAgICAgIGlmICgke3ZlcmJvc2V9KQorICAgICAgICAg
ICAgcHJpbnQoIkFnZW50ICR7YX0gc3RhcnRlZCIpOworICAgICAgICAkLmFnZW50LnJlcG9ydCgi
QWdlbnQgJHthfSBzdGFydGVkIik7CisKKyAgICAgICAgJC5hZ2VudC5yZWNlaXZlQnJvYWRjYXN0
KChzYWIsIG5ld1N0YXRlKSA9PiB7CisgICAgICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAg
ICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSByZWNlaXZlZCBicm9hZGNhc3QiKTsKKyAgICAg
ICAgICAgIHU4ID0gbmV3IFVpbnQ4QXJyYXkoc2FiKTsKKyAgICAgICAgICAgIHN0YXRlID0gbmV3
U3RhdGU7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnN0IGJ1c3lXYWl0Rm9yVmFsdWUgPSB2
YWx1ZSA9PiB7CisgICAgICAgICAgICAvLyBCdXN5LXdhaXQgc28gdGhhdCBvbmNlIHRoZSBTQUIg
d3JpdGUgb2NjdXJzIGFsbCBhZ2VudHMgdHJ5IHRvIGNyZWF0ZSBhIG1lbW9yeSBhdCB0aGUgc2Ft
ZSB0aW1lLgorICAgICAgICAgICAgd2hpbGUgKEF0b21pY3MubG9hZCh1OCwgMCkgIT09IHZhbHVl
KSA7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCR7dmVyYm9zZX0pCisgICAgICAgICAgICBw
cmludCgiQWdlbnQgJHthfSB3YWl0cyIpOworICAgICAgICAkLmFnZW50LnJlcG9ydCgiQWdlbnQg
JHthfSB3YWl0cyIpOworICAgICAgICB3aGlsZSAoc3RhdGUgPT09ICR7c3RhdGVXYWl0fSkgOwor
ICAgICAgICAkLmFnZW50LnJlcG9ydCgiQWdlbnQgJHthfSByZWNlaXZlZCBTQUIiKTsKKyAgICAg
ICAgLy8gVXNlIGl0IGZvciBmYXN0ZXIgc3RhdGUgY2hhbmdlIHNvIGFsbCBhZ2VudHMgYXJlIG1v
cmUgbGlrZWx5IHRvIGV4ZWN1dGUgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgYnVzeVdhaXRG
b3JWYWx1ZSgke3N0YXRlUmVhZHl9KTsKKworICAgICAgICBsZXQgd2FzbU1lbW9yeSA9IG5ldyBX
ZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiAke2luaXRpYWxQYWdlc30gfSk7CisgICAgICAg
IGxldCBtZW1vcnkgPSBuZXcgVWludDhBcnJheSgod2FzbU1lbW9yeSkuYnVmZmVyKTsKKyAgICAg
ICAgaWYgKCR7dmVyYm9zZX0pCisgICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSBwZXJmb3Jt
aW5nIHdyaXRlcyIpOworICAgICAgICBmb3IgKGxldCB3cml0ZSA9IDA7IHdyaXRlIDwgJHtudW1X
cml0ZXN9OyArK3dyaXRlKSB7CisgICAgICAgICAgICAvLyBQZXJmb3JtIHdyaXRlcyBvZiBvdXIg
YWdlbnQgbnVtYmVyIGF0IGEgcmFuZG9tIGxvY2F0aW9uLiBUaGlzIG1lbW9yeSBzaG91bGQgbm90
IGJlIHNoYXJlZCwgaWYgd2Ugc2VlIHdyaXRlcyBvZiBvdGhlciB2YWx1ZXMgdGhlbiBzb21ldGhp
bmcgd2VudCB3cm9uZy4KKyAgICAgICAgICAgIGNvbnN0IGlkeCA9IChNYXRoLnJhbmRvbSgpICog
JHtwYWdlU2l6ZX0gKiAke2luaXRpYWxQYWdlc30pIHwgMDsKKyAgICAgICAgICAgIG1lbW9yeVtp
ZHhdID0gJHthfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAg
ICAgIHByaW50KCJBZ2VudCAke2F9IHdyaXRlcyBwZXJmb3JtZWQiKTsKKyAgICAgICAgJC5hZ2Vu
dC5yZXBvcnQoIkFnZW50ICR7YX0gcGVyZm9ybWVkIHdyaXRlcyIpOworICAgICAgICBidXN5V2Fp
dEZvclZhbHVlKCR7c3RhdGVDaGVja30pOworCisgICAgICAgIGlmICgke3ZlcmJvc2V9KQorICAg
ICAgICAgICAgcHJpbnQoIkFnZW50ICR7YX0gY2hlY2tpbmciKTsKKyAgICAgICAgLy8gQ2hlY2sg
dGhhdCBvdXIgbWVtb3J5IG9ubHkgY29udGFpbnMgMCBhbmQgb3VyIGFnZW50IG51bWJlci4KKyAg
ICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgJHtwYWdlU2l6ZX0gKiAke2luaXRpYWxQYWdl
c307ICsraWR4KQorICAgICAgICAgICAgaWYgKG1lbW9yeVtpZHhdICE9PSAwICYmIG1lbW9yeVtp
ZHhdICE9PSAke2F9KQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWdlbnQgJHth
fSBmb3VuZCB1bmV4cGVjdGVkIHZhbHVlICIgKyBtZW1vcnlbaWR4XSArICIgYXQgbG9jYXRpb24g
IiArIGlkeCk7CisgICAgICAgICQuYWdlbnQucmVwb3J0KCJBZ2VudCAke2F9IGNoZWNrcyBvdXQg
T0siKTsKKyAgICAgICAgJC5hZ2VudC5sZWF2aW5nKCk7CisgICAgICAgIGA7CisKKyAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICBwcmludChgU3RhcnRpbmcgYWdlbnQgJHthfWApOwor
ICAgICAgICAkLmFnZW50LnN0YXJ0KGFnZW50U2NyaXB0KTsKKyAgICB9Cit9OworCitjb25zdCB3
YWl0Rm9yQWdlbnRzID0gbnVtQWdlbnRzVG9XYWl0Rm9yID0+IHsKKyAgICBmb3IgKGxldCBhID0g
MDsgYSA8IG51bUFnZW50c1RvV2FpdEZvcjsgKythKSB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICBjb25zdCByZXBvcnQgPSAkLmFnZW50LmdldFJlcG9ydCgpOworICAgICAg
ICAgICAgaWYgKHJlcG9ydCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICQuYWdlbnQuc2xl
ZXAoMSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBwcmludChgUmVjZWl2ZWQ6ICR7cmVw
b3J0fWApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9OworCitjb25z
dCBicm9hZGNhc3RUb0FnZW50cyA9IChzYWIsIG5ld1N0YXRlKSA9PiB7CisgICAgJC5hZ2VudC5i
cm9hZGNhc3Qoc2FiLCBuZXdTdGF0ZSk7Cit9OworCitjb25zdCBzYWIgPSBuZXcgU2hhcmVkQXJy
YXlCdWZmZXIoMTAyNCk7Citjb25zdCB1OCA9IG5ldyBVaW50OEFycmF5KHNhYik7CisKK2ZvciAo
bGV0IGl0ID0gMDsgaXQgPCB0ZXN0SXRlcmF0aW9uczsgKytpdCkgeworICAgIHN0YXJ0QWdlbnRz
KG51bUFnZW50cyk7CisgICAgd2FpdEZvckFnZW50cyhudW1BZ2VudHMpOworICAgIGJyb2FkY2Fz
dFRvQWdlbnRzKHNhYiwgc3RhdGVSZWFkeSk7CisgICAgd2FpdEZvckFnZW50cyhudW1BZ2VudHMp
OworICAgICQuYWdlbnQuc2xlZXAoMSk7CisgICAgQXRvbWljcy5zdG9yZSh1OCwgMCwgc3RhdGVS
ZWFkeSk7CisgICAgd2FpdEZvckFnZW50cyhudW1BZ2VudHMpOworICAgICQuYWdlbnQuc2xlZXAo
MSk7CisgICAgQXRvbWljcy5zdG9yZSh1OCwgMCwgc3RhdGVDaGVjayk7CisgICAgd2FpdEZvckFn
ZW50cyhudW1BZ2VudHMpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludCgiRXZlcnl0
aW5nIHdhcyBmaW5lIik7CisgICAgJC5hZ2VudC5zbGVlcCgxKTsKK30KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL2V4dGVuc2lvbi1NZW1vcnlNb2RlLmpzCmluZGV4IDkxOTFjZWM0Li41NjA4NTI2IDEw
MDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL2V4dGVuc2lvbi1NZW1vcnlNb2RlLmpzCisr
KyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMKQEAgLTIsNiAr
Miw3IEBAIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogaW1wb3J0ICogYXMg
YXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiAKIGNvbnN0IGl0ZXJhdGlvbnMgPSAzMjsKK2Nv
bnN0IHZlcmJvc2UgPSBmYWxzZTsKIAogLy8gVGhpcyBBUEkgaXNuJ3QgcGFydCBvZiBXZWJBc3Nl
bWJseSdzIG9mZmljaWFsIHNwZWMuIEl0IGlzIHVzZSBmb3IgdGVzdGluZyB3aXRoaW4gdGhlIHNo
ZWxsLgogCkBAIC0yMSw2ICsyMiw4IEBAIGFzc2VydC50aHJvd3MoKCkgPT4gV2ViQXNzZW1ibHlN
ZW1vcnlNb2RlKG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDogMSwgZWxlCiAKIGNvbnN0
IHZhbGlkYXRlTW9kZSA9IHdoYXQgPT4gewogICAgIGNvbnN0IG1vZGUgPSBXZWJBc3NlbWJseU1l
bW9yeU1vZGUod2hhdCk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGAgICAgJHtt
b2RlfWApOwogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgIlNpZ25hbGluZyI6CiAgICAg
ICAgIGJyZWFrOwpAQCAtMzksNiArNDIsOCBAQCBjb25zdCBpbnN0YW50aWF0ZSA9IGJ1aWxkZXIg
PT4gewogfTsKIAogKGZ1bmN0aW9uIHRlc3RNZW1vcnlOb01heCgpIHsKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgcHJpbnQoYHRlc3RNZW1vcnlOb01heGApOwogICAgIGxldCBtZW1vcmllcyA9
IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlvbnM7ICsraSkKICAgICAgICAg
bWVtb3JpZXMucHVzaCh2YWxpZGF0ZU1vZGUobmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRp
YWw6IGkgfSkpKTsKQEAgLTQ4LDYgKzUzLDggQEAgY29uc3QgaW5zdGFudGlhdGUgPSBidWlsZGVy
ID0+IHsKIGZ1bGxHQygpOwogCiAoZnVuY3Rpb24gdGVzdE1lbW9yeSgpIHsKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgcHJpbnQoYHRlc3RNZW1vcnlgKTsKICAgICBsZXQgbWVtb3JpZXMgPSBb
XTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBpdGVyYXRpb25zOyArK2kpCiAgICAgICAgIG1l
bW9yaWVzLnB1c2godmFsaWRhdGVNb2RlKG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFs
OiBpLCBtYXhpbXVtOiBpIH0pKSk7CkBAIC01Nyw2ICs2NCw4IEBAIGZ1bGxHQygpOwogZnVsbEdD
KCk7CiAKIChmdW5jdGlvbiB0ZXN0SW5zdGFuY2VOb01lbW9yeSgpIHsKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgcHJpbnQoYHRlc3RJbnN0YW5jZU5vTWVtb3J5YCk7CiAgICAgbGV0IGluc3Rh
bmNlcyA9IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlvbnM7ICsraSkgewog
ICAgICAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCkBAIC02Niw2ICs3NSw4IEBA
IGZ1bGxHQygpOwogICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbnRpYXRlKGJ1aWxkZXIp
OwogICAgICAgICAvLyBOby1tZW1vcnkgaW5zdGFuY2VzIHNob3VsZCBuZXZlciBiZSBTaWduYWxp
bmc6IGl0IHdvdWxkIGJlIHdhc3RlZnVsLgogICAgICAgICBhc3NlcnQuZXEoV2ViQXNzZW1ibHlN
ZW1vcnlNb2RlKGluc3RhbmNlKSwgIkJvdW5kc0NoZWNraW5nIik7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgcHJpbnQoYCAgICAke1dlYkFzc2VtYmx5TWVtb3J5TW9kZShpbnN0
YW5jZSl9YCk7CiAgICAgICAgIGluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTsKICAgICB9CiAgICAg
cmV0dXJuIGluc3RhbmNlczsKQEAgLTc0LDYgKzg1LDggQEAgZnVsbEdDKCk7CiBmdWxsR0MoKTsK
IAogKGZ1bmN0aW9uIHRlc3RJbnN0YW5jZU5vTWF4KCkgeworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBwcmludChgdGVzdEluc3RhbmNlTm9NYXhgKTsKICAgICBsZXQgaW5zdGFuY2VzID0gW107
CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0aW9uczsgKytpKSB7CiAgICAgICAgIC8v
IE5vdGU6IG5vdCBleHBvcnRlZCEgVGhlIGludGVybmFsIEFQSSBjYW4gc3RpbGwgYWNjZXNzLgpA
QCAtODksNiArMTAyLDggQEAgZnVsbEdDKCk7CiBmdWxsR0MoKTsKIAogKGZ1bmN0aW9uIHRlc3RJ
bnN0YW5jZSgpIHsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYHRlc3RJbnN0YW5j
ZWApOwogICAgIGxldCBpbnN0YW5jZXMgPSBbXTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBp
dGVyYXRpb25zOyArK2kpIHsKICAgICAgICAgLy8gTm90ZTogbm90IGV4cG9ydGVkISBUaGUgaW50
ZXJuYWwgQVBJIGNhbiBzdGlsbCBhY2Nlc3MuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdXRp
bGl0aWVzLmpzIGIvSlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcwppbmRleCAxOWY5YjRlLi5iYzY5
YWQ3IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vdXRpbGl0aWVzLmpzCisrKyBiL0pTVGVzdHMv
d2FzbS91dGlsaXRpZXMuanMKQEAgLTc5LDYgKzc5LDEyIEBAIGNvbnN0IF9kdW1wID0gKHdoYXQs
IG5hbWUsIHBhZCA9ICcgICAgJykgPT4gewogICAgIHJldHVybiBzOwogfTsKIAorZXhwb3J0IGNv
bnN0IHRvSmF2YVNjcmlwdE5hbWUgPSBuYW1lID0+IHsKKyAgICBjb25zdCBjYW1lbENhc2UgPSBu
YW1lLnJlcGxhY2UoLyhbXmEtejAtOV0uKS9nLCBjID0+IGNbMV0udG9VcHBlckNhc2UoKSk7Cisg
ICAgY29uc3QgQ2FtZWxDYXNlID0gY2FtZWxDYXNlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsg
Y2FtZWxDYXNlLnNsaWNlKDEpOworICAgIHJldHVybiBDYW1lbENhc2U7Cit9OworCiAvLyBVc2Ug
dW5kZXJzY29yZSBuYW1lcyB0byBhdm9pZCBjbGFzaGluZyB3aXRoIGJ1aWx0aW4gbmFtZXMuCiBl
eHBvcnQgewogICAgIF9kdW1wIGFzIGR1bXAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCmluZGV4IDgyMGQ0YzEuLmI1ZWM3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0zMTQ0LDIyICszMTQ0LDQ2IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEIzOjpXYXNtQm91bmRzQ2hlY2s6IHsKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgICAgICBXYXNtQm91bmRzQ2hlY2tWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlLT5hczxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4oKTsKIAogICAgICAgICAgICAg
VmFsdWUqIHB0ciA9IHZhbHVlLT5jaGlsZCgwKTsKIAotICAgICAgICAgICAgQXJnIHRlbXAgPSBt
X2NvZGUubmV3VG1wKEdQKTsKLSAgICAgICAgICAgIGFwcGVuZChJbnN0KE1vdmUzMiwgdmFsdWUs
IHRtcChwdHIpLCB0ZW1wKSk7CisgICAgICAgICAgICBBcmcgcHRyUGx1c0ltbSA9IG1fY29kZS5u
ZXdUbXAoR1ApOworICAgICAgICAgICAgYXBwZW5kKEluc3QoTW92ZTMyLCB2YWx1ZSwgdG1wKHB0
ciksIHB0clBsdXNJbW0pKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+b2Zmc2V0KCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoaW1tKHZhbHVlLT5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAg
ICAgIGFwcGVuZChBZGQ2NCwgaW1tKHZhbHVlLT5vZmZzZXQoKSksIHRlbXApOworICAgICAgICAg
ICAgICAgICAgICBhcHBlbmQoQWRkNjQsIGltbSh2YWx1ZS0+b2Zmc2V0KCkpLCBwdHJQbHVzSW1t
KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQXJnIGJpZ0lt
bSA9IG1fY29kZS5uZXdUbXAoR1ApOwogICAgICAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0odmFsdWUtPm9mZnNldCgpKSwgYmlnSW1tKTsKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kKEFkZDY0LCBiaWdJbW0sIHRlbXApOworICAgICAgICAgICAgICAgICAgICBhcHBl
bmQoQWRkNjQsIGJpZ0ltbSwgcHRyUGx1c0ltbSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYXBwZW5kKEluc3QoQWlyOjpXYXNtQm91bmRzQ2hlY2ssIHZh
bHVlLCB0ZW1wLCBBcmcodmFsdWUtPnBpbm5lZEdQUigpKSkpOworCisgICAgICAgICAgICBBcmcg
bGltaXQ7CisgICAgICAgICAgICBpZiAodmFsdWUtPnBpbm5lZEdQUigpICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgICAgICAgICAgbGltaXQgPSBBcmcodmFsdWUtPnBpbm5lZEdQUigpKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFNpZ25hbGluZyBtZW1vcmllcyBk
b24ndCBwaW4gYSByZWdpc3RlciBiZWNhdXNlIG9ubHkgdGhlIGFjY2Vzc2VzIHdob3NlIHJlZytp
bW0gY291bGQgZXZlciBvdmVyZmxvdyA0R2lCK3JlZHpvbmUgbmVlZCB0byBiZSBjaGVja2VkLAor
ICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBkb24ndCB0aGluayB0aGVzZSB3aWxsIGJlIGZyZXF1
ZW50LiBBbGwgb3RoZXIgYWNjZXNzZXMgd2lsbCB0cmFwIGR1ZSB0byBQUk9UX05PTkUgcGFnZXMu
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBnb3QgaGVyZSBp
dCdzIGJlY2F1c2UgYSBtZW1vcnkgYWNjZXNzIGhhZCBhIHZlcnkgbGFyZ2Ugb2Zmc2V0LiBXZSBj
b3VsZCBjaGVjayB0aGF0IGl0IGRvZXNuJ3QgZXhjZWVkIDRHaUIrcmVkem9uZSBzaW5jZSB0aGF0
J3MKKyAgICAgICAgICAgICAgICAvLyB0ZWNobmljYWxseSB0aGUgbGltaXQgd2UgbmVlZCB0byBh
dm9pZCBvdmVyZmxvd2luZywgYnV0IGl0J3MgYmV0dGVyIGlmIHdlIHVzZSBhIHNtYWxsZXIgaW1t
ZWRpYXRlIHdoaWNoIGNvZGVnZW5zIG1vcmUgZWFzaWx5LgorICAgICAgICAgICAgICAgIC8vIFdl
IGtub3cgdGhhdCBhbnl0aGluZyBhYm92ZSB0aGUgZGVjbGFyZWQgJ21heGltdW0nIHdpbGwgdHJh
cCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0aGF0IG51bWJlci4gSWYgdGhlcmUgd2FzIG5v
IGRlY2xhcmVkCisgICAgICAgICAgICAgICAgLy8gJ21heGltdW0nIHRoZW4gd2Ugc3RpbGwga25v
dyB0aGF0IGFueSBhY2Nlc3MgYWJvdmUgNEdpQiB3aWxsIHRyYXAsIG5vIG5lZWQgdG8gYWRkIHRo
ZSByZWR6b25lLgorICAgICAgICAgICAgICAgIGxpbWl0ID0gbV9jb2RlLm5ld1RtcChHUCk7Cisg
ICAgICAgICAgICAgICAgc2l6ZV90IGxpbWl0VmFsdWUgPSB2YWx1ZS0+bWF4aW11bSgpID8gdmFs
dWUtPm1heGltdW0oKS5ieXRlcygpIDogc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbWl0VmFsdWUgPD0gdmFsdWUt
PnJlZHpvbmVMaW1pdCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW1tKGxpbWl0VmFsdWUpKQor
ICAgICAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgaW1tKGxpbWl0VmFsdWUpLCBsaW1pdCk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0obGltaXRWYWx1ZSksIGxpbWl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGFwcGVuZChJbnN0KEFpcjo6V2FzbUJvdW5kc0NoZWNrLCB2YWx1ZSwgcHRyUGx1c0ltbSwg
bGltaXQpKTsKKyNlbHNlCisgICAgICAgICAgICBhcHBlbmQoQWlyOjpPb3BzKTsKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCmluZGV4IDZlNmE5M2QuLmNjM2E1
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKQEAgLTQ3MCw3ICs0
NzAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCku
aGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAi
LCAqdmFsdWUpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURShtX3Byb2NlZHVyZS5jb2RlKCku
aXNQaW5uZWQodmFsdWUtPmFzPFdhc21Cb3VuZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSks
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5hczxXYXNtQm91
bmRzQ2hlY2tWYWx1ZT4oKS0+cGlubmVkR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUobV9wcm9jZWR1cmUuY29kZSgpLmlzUGlubmVkKHZhbHVlLT5h
czxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4oKS0+cGlubmVkR1BSKCkpLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKG1fcHJvY2VkdXJlLmNvZGUoKS53YXNtQm91bmRz
Q2hlY2tHZW5lcmF0b3IoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
LmNwcAppbmRleCA4YzkxMGFhLi42NWIxN2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKICNp
bmNsdWRlICJCM1ZhbHVlS2V5SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5o
IgorI2luY2x1ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQ29t
bWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAjaW5jbHVkZSA8d3RmL1N0
cmluZ1ByaW50U3RyZWFtLmg+CkBAIC02NjQsNyArNjY1LDggQEAgRWZmZWN0cyBWYWx1ZTo6ZWZm
ZWN0cygpIGNvbnN0CiAgICAgICAgIHJlc3VsdCA9IEVmZmVjdHM6OmZvckNoZWNrKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbUJvdW5kc0NoZWNrOgotICAgICAgICByZXN1bHQucmVh
ZHNQaW5uZWQgPSB0cnVlOworICAgICAgICBpZiAoYXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCkt
PnBpbm5lZEdQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXN1bHQucmVhZHNQ
aW5uZWQgPSB0cnVlOwogICAgICAgICByZXN1bHQuZXhpdHNTaWRld2F5cyA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgVXBzaWxvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcAppbmRleCBiM2EzMjkwLi44YWVjYzFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNr
VmFsdWUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAKICNp
ZiBFTkFCTEUoQjNfSklUKQogCkBAIC0zNCwxMCArMzUsMTEgQEAgV2FzbUJvdW5kc0NoZWNrVmFs
dWU6On5XYXNtQm91bmRzQ2hlY2tWYWx1ZSgpCiB7CiB9CiAKLVdhc21Cb3VuZHNDaGVja1ZhbHVl
OjpXYXNtQm91bmRzQ2hlY2tWYWx1ZShPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcg
cGlubmVkR1BSLCB1bnNpZ25lZCBvZmZzZXQpCitXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6V2FzbUJv
dW5kc0NoZWNrVmFsdWUoT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHB0ciwgR1BSUmVnIHBpbm5lZEdQ
UiwgdW5zaWduZWQgb2Zmc2V0LCBQYWdlQ291bnQgbWF4aW11bSkKICAgICA6IFZhbHVlKENoZWNr
ZWRPcGNvZGUsIFdhc21Cb3VuZHNDaGVjaywgb3JpZ2luLCBwdHIpCiAgICAgLCBtX3Bpbm5lZEdQ
UihwaW5uZWRHUFIpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgLCBtX21heGltdW0obWF4
aW11bSkKIHsKIH0KIApAQCAtNDYsOSArNDgsMjIgQEAgVmFsdWUqIFdhc21Cb3VuZHNDaGVja1Zh
bHVlOjpjbG9uZUltcGwoKSBjb25zdAogICAgIHJldHVybiBuZXcgV2FzbUJvdW5kc0NoZWNrVmFs
dWUoKnRoaXMpOwogfQogCitzaXplX3QgV2FzbUJvdW5kc0NoZWNrVmFsdWU6OnJlZHpvbmVMaW1p
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcGlubmVkR1BSID09IEludmFsaWRHUFJSZWcpOwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgKyBXYXNtOjpNZW1vcnk6OmZh
c3RNYXBwZWRSZWR6b25lQnl0ZXMoKTsKKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyNlbmRpZgorfQorCiB2b2lkIFdhc21Cb3VuZHNDaGVja1ZhbHVlOjpkdW1wTWV0
YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91
dC5wcmludChjb21tYSwgInNpemVSZWdpc3RlciA9ICIsIG1fcGlubmVkR1BSLCAiLCBvZmZzZXQg
PSAiLCBtX29mZnNldCk7CisgICAgaWYgKG1fcGlubmVkR1BSID09IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgInJlZHpvbmVMaW1pdCA9ICIsIHJlZHpvbmVMaW1pdCgp
LCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJzaXplUmVnaXN0ZXIgPSAiLCBtX3Bpbm5lZEdQUiwgIiwgb2Zmc2V0ID0gIiwgbV9v
ZmZzZXQpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oCmluZGV4IGNjYzU0YjguLjEx
MGU3MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0No
ZWNrVmFsdWUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkIzVmFsdWUuaCIKICNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCkBAIC00Niw4ICs0NywxNiBAQCBwdWJsaWM6
CiAgICAgCiAgICAgfldhc21Cb3VuZHNDaGVja1ZhbHVlKCk7CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgdHlwZWRlZiBXYXNtOjpQYWdlQ291bnQgUGFnZUNvdW50OworI2Vsc2UKKyAg
ICB0eXBlZGVmIGNoYXIgUGFnZUNvdW50OworI2VuZGlmCisKICAgICBHUFJSZWcgcGlubmVkR1BS
KCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRHUFI7IH0KICAgICB1bnNpZ25lZCBvZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIHNpemVfdCByZWR6b25lTGltaXQoKSBjb25z
dDsKKyAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNTcsMTAgKzY2LDExIEBAIHByb3RlY3RlZDoKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IFdhc21Cb3VuZHNDaGVja1ZhbHVlKE9yaWdpbiwgVmFsdWUqIHB0ciwgR1BSUmVnIHBpbm5lZEdQ
UiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBXYXNtQm91bmRzQ2hl
Y2tWYWx1ZShPcmlnaW4sIFZhbHVlKiBwdHIsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkIG9m
ZnNldCwgUGFnZUNvdW50IG1heGltdW0pOwogCiAgICAgR1BSUmVnIG1fcGlubmVkR1BSOwogICAg
IHVuc2lnbmVkIG1fb2Zmc2V0OworICAgIFBhZ2VDb3VudCBtX21heGltdW07CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ3VzdG9tLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3Vz
dG9tLmNwcAppbmRleCA3ZWU3ZjNjLi40OWNhNTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDdXN0b20uY3BwCkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBXYXNtQm91bmRz
Q2hlY2tDdXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCiAgICAgaWYgKCFpbnN0LmFyZ3Nb
MF0uaXNUbXAoKSAmJiAhaW5zdC5hcmdzWzBdLmlzU29tZUltbSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gaW5zdC5hcmdzWzFdLmlzUmVnKCk7CisgICAgcmV0dXJuIGlu
c3QuYXJnc1sxXS5pc1JlZygpIHx8IGluc3QuYXJnc1sxXS5pc1RtcCgpIHx8IGluc3QuYXJnc1sx
XS5pc1NvbWVJbW0oKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4
IDAxOTk2YWYuLmE2ZjY5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0x
NTE4NSw3ICsxNTE4NSw4IEBAIHZvaWQgdGVzdFdhc21Cb3VuZHNDaGVjayh1bnNpZ25lZCBvZmZz
ZXQpCiAgICAgVmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaWYgKHBvaW50ZXJU
eXBlKCkgIT0gSW50MzIpCiAgICAgICAgIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwgbGVmdCk7Ci0gICAgcm9vdC0+YXBwZW5kTmV3PFdhc21Cb3Vu
ZHNDaGVja1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbGVmdCwgcGlubmVkLCBvZmZzZXQpOworICAg
IFdhc206OlBhZ2VDb3VudCBtYXhpbXVtOworICAgIHJvb3QtPmFwcGVuZE5ldzxXYXNtQm91bmRz
Q2hlY2tWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxlZnQsIHBpbm5lZCwgb2Zmc2V0LCBtYXhpbXVt
KTsKICAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDB4NDIpOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCmluZGV4IDNhZWUzMDEuLmVjMzFlYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5j
bHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIldh
c21NZW1vcnkuaCIKICNpbmNsdWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29y
aXRobT4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTI1MCw2ICsyNTEsNyBAQCBI
ZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX3NpemVBZnRlckxh
c3RFZGVuQ29sbGVjdCgwKQogICAgICwgbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0KDApCiAg
ICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKDApCisgICAgLCBtX3dlYkFzc2VtYmx5RmFz
dE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlKDApCiAgICAgLCBtX2J5dGVzQWJhbmRvbmVkU2lu
Y2VMYXN0RnVsbENvbGxlY3QoMCkKICAgICAsIG1fbWF4RWRlblNpemUobV9taW5CeXRlc1BlckN5
Y2xlKQogICAgICwgbV9tYXhIZWFwU2l6ZShtX21pbkJ5dGVzUGVyQ3ljbGUpCkBAIC00NjYsNiAr
NDY4LDIzIEBAIHZvaWQgSGVhcDo6ZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5U2xvd0Nhc2Uo
c2l6ZV90IHNpemUpCiAgICAgcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWRTbG93Q2FzZShzaXpl
KTsKIH0KIAordm9pZCBIZWFwOjpyZXBvcnRXZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRl
ZChzaXplX3QgY291bnQpCit7CisgICAgZGlkQWxsb2NhdGVXZWJBc3NlbWJseUZhc3RNZW1vcmll
cyhjb3VudCk7CisgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworfQorCitib29sIEhl
YXA6OndlYkFzc2VtYmx5RmFzdE1lbW9yaWVzVGhpc0N5Y2xlQXRUaHJlc2hvbGQoKSBjb25zdAor
eworICAgIC8vIFdlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgdXNlIGxhcmdlIGFtb3VudHMgb2Yg
dmlydHVhbCBtZW1vcnkgYW5kIHdlCisgICAgLy8gZG9uJ3Qga25vdyBob3cgbWFueSBjYW4gZXhp
c3QgaW4gdGhpcyBwcm9jZXNzLiBXZSBrZWVwIHRyYWNrIG9mIHRoZSBtb3N0CisgICAgLy8gZmFz
dCBtZW1vcmllcyB0aGF0IGhhdmUgZXhpc3RlZCBhdCBhbnkgcG9pbnQgaW4gdGltZS4gVGhlIEdD
IHVzZXMgdGhpcworICAgIC8vIHRvcCB3YXRlcm1hcmsgYXMgYW4gaW5kaWNhdGlvbiBvZiB3aGV0
aGVyIHJlY2VudCBhbGxvY2F0aW9ucyBzaG91bGQgY2F1c2UKKyAgICAvLyBhIGNvbGxlY3Rpb246
IGdldCB0b28gY2xvc2UgYW5kIHdlIG1heSBiZSBjbG9zZSB0byB0aGUgYWN0dWFsIGxpbWl0Lgor
ICAgIHNpemVfdCBmYXN0TWVtb3J5VGhyZXNob2xkID0gc3RkOjptYXg8c2l6ZV90PigxLCBXYXNt
OjpNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCgpIC8gMik7CisgICAgcmV0dXJuIG1fd2ViQXNz
ZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBmYXN0TWVtb3J5VGhyZXNob2xk
OworfQorCiB2b2lkIEhlYXA6OnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCkKIHsKICAgICAv
LyBPdXIgY2xpZW50cyBkb24ndCBrbm93IGV4YWN0bHkgaG93IG11Y2ggbWVtb3J5IHRoZXkKQEAg
LTIxMDMsNiArMjEyMiw3IEBAIHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiAg
ICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiXG4iKTsKICAgICAgICAgZGF0YUxv
ZygiYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSAiLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygid2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0
ZWRUaGlzQ3ljbGUgPSAiLCBtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5
Y2xlLCAiXG4iKTsKICAgICB9CiAgICAgCiAgICAgLy8gQ2FsY3VsYXRlIG91ciBjdXJyZW50IGhl
YXAgc2l6ZSB0aHJlc2hvbGQgZm9yIHRoZSBwdXJwb3NlIG9mIGZpZ3VyaW5nIG91dCB3aGVuIHdl
IHNob3VsZApAQCAtMjE4MCw2ICsyMjAwLDcgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9u
TGltaXRzKCkKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygic2l6ZUFmdGVyTGFz
dENvbGxlY3QgPSAiLCBtX3NpemVBZnRlckxhc3RDb2xsZWN0LCAiXG4iKTsKICAgICBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlID0gMDsKKyAgICBtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxs
b2NhdGVkVGhpc0N5Y2xlID0gMDsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAg
ICBkYXRhTG9nKCI9PiAiLCBjdXJyZW50SGVhcFNpemUgLyAxMDI0LCAia2IsICIpOwpAQCAtMjI1
Myw2ICsyMjc0LDExIEBAIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogICAg
IHBlcmZvcm1JbmNyZW1lbnQoYnl0ZXMpOwogfQogCit2b2lkIEhlYXA6OmRpZEFsbG9jYXRlV2Vi
QXNzZW1ibHlGYXN0TWVtb3JpZXMoc2l6ZV90IGNvdW50KQoreworICAgIG1fd2ViQXNzZW1ibHlG
YXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgKz0gY291bnQ7Cit9CisKIGJvb2wgSGVhcDo6
aXNWYWxpZEFsbG9jYXRpb24oc2l6ZV90KQogewogICAgIGlmICghaXNWYWxpZFRocmVhZFN0YXRl
KG1fdm0pKQpAQCAtMjMwNSw3ICsyMzMxLDcgQEAgYm9vbCBIZWFwOjpzaG91bGREb0Z1bGxDb2xs
ZWN0aW9uKHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBzY29wZSkgY29uc3QKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoIXNjb3BlKQotICAgICAgICByZXR1cm4gbV9zaG91
bGREb0Z1bGxDb2xsZWN0aW9uOworICAgICAgICByZXR1cm4gbV9zaG91bGREb0Z1bGxDb2xsZWN0
aW9uIHx8IHdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzVGhpc0N5Y2xlQXRUaHJlc2hvbGQoKTsKICAg
ICByZXR1cm4gKnNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbDsKIH0KIApAQCAtMjQ1Niw3
ICsyNDgyLDggQEAgdm9pZCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiAgICAgICAgIGlmIChtX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlIDw9IE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA8
PSBtX21heEVkZW5TaXplKQorICAgICAgICBpZiAoIXdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzVGhp
c0N5Y2xlQXRUaHJlc2hvbGQoKQorICAgICAgICAgICAgJiYgbV9ieXRlc0FsbG9jYXRlZFRoaXND
eWNsZSA8PSBtX21heEVkZW5TaXplKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGQwNjU3MDEuLjRiMTU5ZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKQEAgLTE5OCw2ICsxOTgsMTcgQEAgcHVibGljOgogICAgIHZvaWQg
cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90KTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOwogCisgICAgLy8gU2FtZSBh
cyBhYm92ZSwgYnV0IGZvciB1bmNvbW1pdHRlZCB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9ucyBj
YXVzZWQgYnkKKyAgICAvLyBXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzLiBUaGlzIGlzIGNvdW50
ZWQgc2VwYXJhdGVseSBiZWNhdXNlIHZpcnR1YWwKKyAgICAvLyBtZW1vcnkgaXMgbG9naWNhbGx5
IGEgZGlmZmVyZW50IHR5cGUgb2YgcmVzb3VyY2UgdGhhbiBjb21taXR0ZWQgcGh5c2ljYWwKKyAg
ICAvLyBtZW1vcnkuIFdlIGNhbiBvZnRlbiBhbGxvY2F0ZSBodWdlIGFtb3VudHMgb2YgdmlydHVh
bCBtZW1vcnkgKHRoaW5rCisgICAgLy8gZ2lnYWJ5dGVzKSB3aXRob3V0IGFkdmVyc2VseSBhZmZl
Y3RpbmcgcmVndWxhciBHQydkIG1lbW9yeS4gQXQgc29tZSBwb2ludAorICAgIC8vIHRob3VnaCwg
dG9vIG11Y2ggdmlydHVhbCBtZW1vcnkgYmVjb21lcyBwcm9oaWJpdGl2ZSBhbmQgd2Ugd2FudCB0
bworICAgIC8vIGNvbGxlY3QgR0MtYWJsZSBvYmplY3RzIHdoaWNoIGtlZXAgdGhpcyB2aXJ0dWFs
IG1lbW9yeSBhbGl2ZS4KKyAgICAvLyBUaGlzIGlzIGNvdW50ZWQgaW4gbnVtYmVyIG9mIGZhc3Qg
bWVtb3JpZXMsIG5vdCBieXRlcy4KKyAgICB2b2lkIHJlcG9ydFdlYkFzc2VtYmx5RmFzdE1lbW9y
aWVzQWxsb2NhdGVkKHNpemVfdCk7CisgICAgYm9vbCB3ZWJBc3NlbWJseUZhc3RNZW1vcmllc1Ro
aXNDeWNsZUF0VGhyZXNob2xkKCkgY29uc3Q7CisKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0Up
CiAgICAgLy8gVXNlIHRoaXMgQVBJIHRvIHJlcG9ydCB0aGUgc3Vic2V0IG9mIGV4dHJhIG1lbW9y
eSB0aGF0IGxpdmVzIG91dHNpZGUgdGhpcyBwcm9jZXNzLgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CkBAIC0yNDcsNiArMjU4
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlQWxsVW5saW5rZWRDb2RlQmxvY2tzKERlbGV0
ZUFsbENvZGVFZmZvcnQpOwogCiAgICAgdm9pZCBkaWRBbGxvY2F0ZShzaXplX3QpOworICAgIHZv
aWQgZGlkQWxsb2NhdGVXZWJBc3NlbWJseUZhc3RNZW1vcmllcyhzaXplX3QpOwogICAgIGJvb2wg
aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgIAogICAgIGNvbnN0IEpJVFN0dWJSb3V0
aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiAqbV9qaXRTdHViUm91dGluZXM7IH0K
QEAgLTUyNSw2ICs1MzcsNyBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemVCZWZvcmVMYXN0
RWRlbkNvbGxlY3Q7CiAKICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAg
ICBzaXplX3QgbV93ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZTsKICAg
ICBzaXplX3QgbV9ieXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0OwogICAgIHNpemVf
dCBtX21heEVkZW5TaXplOwogICAgIHNpemVfdCBtX21heEhlYXBTaXplOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAppbmRl
eCBiZTZiNmYxLi43Yzg1YTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDYgKzM5
LDcgQEAKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5o
IgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNp
bmNsdWRlICJXYXNtVGh1bmtzLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVk
ZSA8bXV0ZXg+CkBAIC01OCw2ICs1OSw5IEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiAg
ICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVRocmVhZGluZ09uY2VGbGFnLCBbXXsKICAgICAg
ICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgICAgIE9wdGlvbnM6OmluaXRpYWxp
emUoKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIFdhc206Ok1lbW9yeTo6aW5p
dGlhbGl6ZVByZWFsbG9jYXRpb25zKCk7CisjZW5kaWYKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklF
Ul9QUk9GSUxJTkcpCiAgICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjppbml0aWFsaXplKCk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCA2MGNh
YWUwLi5lYTVhZGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBA
IC00MzcsOSArNDM3LDEwIEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAg
IHYoc2l6ZSwgd2ViQXNzZW1ibHlQYXJ0aWFsQ29tcGlsZUxpbWl0LCA1MDAwLCBOb3JtYWwsICJM
aW1pdCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGEgV2FzbTo6UGxhbjo6Y29tcGlsZSBzaG91bGQg
YXR0ZW1wdCBiZWZvcmUgY2hlY2tpbmcgZm9yIG90aGVyIHdvcmsuIikgXAogICAgIHYodW5zaWdu
ZWQsIHdlYkFzc2VtYmx5QjNPcHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBXZWIgQXNzZW1ibHkg
bW9kdWxlcy4iKSBcCiAgICAgXAotICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJBc3NlbWJseUxvd01l
bW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdvbid0IG1t
YXAgdGhlIGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwgYWxsb2NhdGUgdGhl
IG1pbmltdW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5
RmFzdE1lbW9yeSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGEg
MzItYml0IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJvdW5kcyBjaGVj
ayB3YXNtIG1lbW9yeS4iKSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlGYXN0TWVtb3J5
UmVkem9uZVBhZ2VzLCAxMjgsIE5vcm1hbCwgIldlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgdXNl
IDRHaUIgdmlydHVhbCBhbGxvY2F0aW9ucywgcGx1cyBhIHJlZHpvbmUgKGNvdW50ZWQgYXMgbXVs
dGlwbGUgb2YgNjRLaUIgV2ViQXNzZW1ibHkgcGFnZXMpIGF0IHRoZSBlbmQgdG8gY2F0Y2ggcmVn
K2ltbSBhY2Nlc3NlcyB3aGljaCBleGNlZWQgMzItYml0LCBhbnl0aGluZyBiZXlvbmQgdGhlIHJl
ZHpvbmUgaXMgZXhwbGljaXRseSBib3VuZHMtY2hlY2tlZCIpIFwKICAgICB2KGJvb2wsIGNyYXNo
SWZXZWJBc3NlbWJseUNhbnRGYXN0TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ug
d2lsbCBjcmFzaCBpZiB3ZSBjYW4ndCBvYnRhaW4gZmFzdCBtZW1vcnkgZm9yIHdhc20uIikgXAor
ICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQsIDQs
IE5vcm1hbCwgIldlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgY2FuIGJlIHByZS1hbGxvY2F0ZWQg
YXQgcHJvZ3JhbSBzdGFydHVwIGFuZCByZW1haW4gY2FjaGVkIHRvIGF2b2lkIGZyYWdtZW50YXRp
b24gbGVhZGluZyB0byBib3VuZHMtY2hlY2tlZCBtZW1vcnkuIFRoaXMgbnVtYmVyIGlzIGFuIHVw
cGVyIGJvdW5kIG9uIGluaXRpYWwgYWxsb2NhdGlvbiBhcyB3ZWxsIGFzIHRvdGFsIGNvdW50IG9m
IGZhc3QgbWVtb3JpZXMuIFplcm8gbWVhbnMgbm8gcHJlLWFsbG9jYXRpb24sIG5vIGNhY2hpbmcs
IGFuZCBubyBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIHJ1bnRpbWUgYWxsb2NhdGlvbnMuIikgXAog
ICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0VExTLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpZiBhdmFpbGFi
bGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggODgyZDFjNy4uNzk5OGJkMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cApAQCAtMjI3LDYgKzIyNyw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVtaXRDaGVja3NGb3JN
b2RPckRpdihCMzo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCk7CiAKKyAgICB2b2lkIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUm
LCB1aW50MzJfdCYpOworCiAgICAgVmFsdWUqIG1hdGVyaWFsaXplV2FzbUNvbnRleHQoUHJvY2Vk
dXJlJiwgQmFzaWNCbG9jayopOwogICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVy
ZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xv
YmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2Nl
ZHVyZSYsIEJhc2ljQmxvY2sqKTsKQEAgLTI0OCw2ICsyNTAsMTUgQEAgcHJpdmF0ZToKICAgICBW
YWx1ZSogbV9pbnN0YW5jZVZhbHVlOyAvLyBGSVhNRTogbWFrZSB0aGlzIGxhenkgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTc5MgogfTsKIAorLy8gTWVtb3J5IGFj
Y2Vzc2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJl
YXMgdGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK3ZvaWQgQjNJUkdlbmVy
YXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJf
dCYgb2Zmc2V0KQoreworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
IHsKKyAgICAgICAgcHRyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBBZGQsIG9yaWdpbigpLCBwdHIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAg
ICB9Cit9CisKIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjptYXRlcmlhbGl6ZVdhc21Db250ZXh0KFBy
b2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgaWYgKHVzZUZhc3RUTFNG
b3JDb250ZXh0KCkpIHsKQEAgLTMzMSw3ICszNDIsMTYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUKICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHND
aGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSLCB1
bnNpZ25lZCkgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1f
bWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgc3dpdGNoIChtX21vZGUp
IHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25h
bGluZzoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChJbnZhbGlkR1BSUmVnID09IHBp
bm5lZEdQUik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lbW9y
eU1vZGU6Ok51bWJlck9mTWVtb3J5TW9kZXM6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMtPmVtaXRF
eGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNz
KTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNTE3LDEwICs1MzcsMjAgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAt
PiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJl
cGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50
MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7Ci0g
ICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykgeworICAgIHN3aXRj
aCAobV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAg
ICAgLy8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGwsIHdlIG11c3QgdGhl
cmVmb3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRoZSBjdXJyZW50IG1l
bW9yeSBzaXplLgogICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKICAgICAgICAgQVNT
RVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0
aW9uICsgb2Zmc2V0IC0gMSwgbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgLy8gV2UndmUgdmly
dHVhbGx5IG1hcHBlZCA0R2lCK3JlZHpvbmUgZm8gdGhpcyBtZW1vcnkuIE9ubHkgdGhlIHVzZXIt
YWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJsZSwgY29udGlndW91c2x5IGluIHJhbmdlIFsw
LCBjdXJyZW50XSwgYW5kIGV2ZXJ5dGhpbmcgYWJvdmUgaXMgbWFwcGVkIFBST1RfTk9ORS4gV2Ug
ZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBleHBsaWNpdCBib3VuZHMgY2hlY2sgaW4gdGhlIDRH
aUIgcmFuZ2UgYmVjYXVzZSBXZWJBc3NlbWJseSByZWdpc3RlciBtZW1vcnkgYWNjZXNzZXMgYXJl
IDMyLWJpdC4gSG93ZXZlciBXZWJBc3NlbWJseSByZWdpc3RlcitpbW1lZGlhdGUgYWNjZXNzZXMg
cGVyZm9ybSB0aGUgYWRkaXRpb24gaW4gNjQtYml0IHdoaWNoIGNhbiBwdXNoIGFuIGFjY2VzcyBh
Ym92ZSB0aGUgMzItYml0IGxpbWl0LiBUaGUgcmVkem9uZSB3aWxsIGNhdGNoIG1vc3Qgc21hbGwg
aW1tZWRpYXRlcywgYW5kIHdlJ2xsIGV4cGxpY2l0bHkgYm91bmRzIGNoZWNrIGFueSByZWdpc3Rl
ciArIGxhcmdlIGltbWVkaWF0ZSBhY2Nlc3MuCisgICAgICAgICAgICBpZiAob2Zmc2V0ID49IE1l
bW9yeTo6ZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpKQorICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHBvaW50ZXIsIEludmFsaWRHUFJSZWcsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEsIG1f
aW5mby5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZW1vcnlN
b2RlOjpOdW1iZXJPZk1lbW9yeU1vZGVzOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KICAgICBwb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCBwb2ludGVyKTsKICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQWRkcmVzc1ZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBwb2ludGVyLCBtX21lbW9yeUJhc2VHUFIpOwpAQCAtNTYwLDYgKzU5MCw4IEBAIGlubGluZSBC
Mzo6S2luZCBCM0lSR2VuZXJhdG9yOjptZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApCiAK
IGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpCiB7CisgICAgZml4dXBQb2lu
dGVyUGx1c09mZnNldChwb2ludGVyLCBvZmZzZXQpOworCiAgICAgc3dpdGNoIChvcCkgewogICAg
IGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhTKSwg
b3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CkBAIC02OTcsNiArNzI5LDggQEAgaW5saW5lIHVp
bnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCiAKIGlubGluZSB2b2lkIEIzSVJH
ZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KQogeworICAgIGZpeHVw
UG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgb2Zmc2V0KTsKKwogICAgIHN3aXRjaCAob3ApIHsK
ICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CiAgICAgICAgIHZhbHVlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIHZhbHVl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5jcHAKaW5kZXggNjdiYjU3ZC4uYmJhNDRlZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTcyLDcg
KzcyLDcgQEAgc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190KiBz
aWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICAgICAgICAgIGF1dG8mIGFjdGl2ZUZhc3RNZW1v
cmllcyA9IHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKTsKICAgICAgICAgICAgIGZvciAo
dm9pZCogYWN0aXZlTWVtb3J5IDogYWN0aXZlRmFzdE1lbW9yaWVzKSB7CiAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImNoZWNraW5nIGZhc3QgbWVtb3J5IGF0OiAiLCBSYXdQ
b2ludGVyKGFjdGl2ZU1lbW9yeSkpOwotICAgICAgICAgICAgICAgIGlmIChhY3RpdmVNZW1vcnkg
PD0gZmF1bHRpbmdBZGRyZXNzICYmIGZhdWx0aW5nQWRkcmVzcyA8IHN0YXRpY19jYXN0PGNoYXIq
PihhY3RpdmVNZW1vcnkpICsgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGFjdGl2ZU1lbW9yeSA8PSBmYXVsdGluZ0FkZHJlc3MgJiYgZmF1bHRpbmdBZGRyZXNz
IDwgc3RhdGljX2Nhc3Q8Y2hhcio+KGFjdGl2ZU1lbW9yeSkgKyBNZW1vcnk6OmZhc3RNYXBwZWRC
eXRlcygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IDdlZjNkNGYuLjk1
YjU1YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0z
MiwxNDYgKzMyLDI1OSBAQAogI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKICNp
bmNsdWRlICJXYXNtVGh1bmtzLmgiCiAKLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5j
bHVkZSA8YXRvbWljPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL1ZNVGFncy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogCi1uYW1lc3BhY2UgewotY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CisvLyBGSVhN
RTogV2UgY291bGQgYmUgc21hcnRlciBhYm91dCBtZW1zZXQgLyBtbWFwIC8gbWFkdmlzZS4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM0MwogCi1zdGF0aWMgTkVW
RVJfSU5MSU5FIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3ZWJBc3NlbWJseUNvdWxkbnRH
ZXRGYXN0TWVtb3J5KCkKKy8vIEZJWE1FIGNoYW5nZSB0aGlzCitTdGF0aWNMb2NrIG1lbW9yeUxv
Y2s7CisKK3N0YXRpYyBIYXNoU2V0PHZvaWQqPiYgYWN0aXZlRmFzdE1lbW9yaWVzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJikKIHsKLSAgICBDUkFTSCgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoU2V0PHZvaWQqPj4gYWN0aXZlRmFzdE1lbW9yaWVzOworICAgIHJldHVybiBhY3RpdmVG
YXN0TWVtb3JpZXM7CiB9CiAKLWlubGluZSBib29sIG1tYXBCeXRlcyhzaXplX3QgYnl0ZXMsIHZv
aWQqJiBtZW1vcnkpCitjb25zdCBIYXNoU2V0PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmll
cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIGRhdGFMb2dJZih2ZXJib3Nl
LCAiQXR0ZW1wdGluZyB0byBtbWFwICIsIGJ5dGVzLCAiIGJ5dGVzOiAiKTsKLSAgICAvLyBGSVhN
RTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0gICAgdm9pZCog
cmVzdWx0ID0gbW1hcChudWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1B
UF9BTk9OLCAtMSwgMCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3VjY2VlZGVkIik7Ci0gICAgbWVtb3J5
ID0gcmVzdWx0OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhY3RpdmVGYXN0TWVtb3Jp
ZXMobG9ja2VyKTsKIH0KIAotY29uc3QgY2hhciogbWFrZVN0cmluZyhNZW1vcnlNb2RlIG1vZGUp
CituYW1lc3BhY2UgeworY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisvLyBBbGxv
Y2F0ZSBmYXN0IG1lbW9yaWVzIHZlcnkgZWFybHkgYXQgcHJvZ3JhbSBzdGFydHVwIGFuZCBjYWNo
ZSB0aGVtLiBUaGUgZmFzdCBtZW1vcmllcyB1c2Ugc2lnbmlmaWNhbnQgYW1vdW50cyBvZiB2aXJ0
dWFsIHVuY29tbWl0dGVkIGFkZHJlc3Mgc3BhY2UsIHJlZHVjaW5nIHRoZSBsaWtlbGlob29kIHRo
YXQgd2UnbGwgb2J0YWluIGFueSBpZiB3ZSB3YWl0IHRvIGFsbG9jYXRlIHRoZW0uCisvLyBXZSBz
dGlsbCB0cnkgdG8gYWxsb2NhdGUgZmFzdCBtZW1vcmllcyBhdCBydW50aW1lLCBhbmQgd2lsbCBj
YWNoZSB0aGVtIHdoZW4gcmVsaW5xdWlzaGVkIHVwIHRvIHRoZSBwcmVhbGxvY2F0aW9uIGxpbWl0
LgorLy8gTm90ZSB0aGF0IHRoaXMgc3RhdGUgaXMgcGVyLXByb2Nlc3MsIG5vdCBwZXItVk0uCitj
b25zdGV4cHIgc2l6ZV90IGZhc3RNZW1vcnlDYWNoZUhhcmRMaW1pdCA9IDE2OworY29uc3RleHBy
IHNpemVfdCBmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1pdCA9IDMyOyAvLyBQcmV2ZW50cyBm
aWxsaW5nIHVwIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCitzaXplX3QgZmFzdE1lbW9yeVBy
ZWFsbG9jYXRlQ291bnQgeyAwIH07CitzdGQ6OmF0b21pYzx2b2lkKj4gZmFzdE1lbW9yeUNhY2hl
W2Zhc3RNZW1vcnlDYWNoZUhhcmRMaW1pdF0gPSB7IEFUT01JQ19WQVJfSU5JVChudWxscHRyKSB9
Oworc3RkOjphdG9taWM8c2l6ZV90PiBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMgPSBB
VE9NSUNfVkFSX0lOSVQoMCk7CitzdGQ6OmF0b21pYzxzaXplX3Q+IG9ic2VydmVkTWF4aW11bUZh
c3RNZW1vcnkgPSBBVE9NSUNfVkFSX0lOSVQoMCk7CisKK05FVkVSX0lOTElORSBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpCiB7Ci0g
ICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzog
cmV0dXJuICJCb3VuZHNDaGVja2luZyI7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6
IHJldHVybiAiU2lnbmFsaW5nIjsKLSAgICBjYXNlIE1lbW9yeU1vZGU6Ok51bWJlck9mTWVtb3J5
TW9kZXM6IGJyZWFrOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiAiIjsKKyAgICBDUkFTSCgpOwogfQogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQg
bWF4RmFzdE1lbW9yaWVzID0gNDsKLXN0YXRpYyB1bnNpZ25lZCBhbGxvY2F0ZWRGYXN0TWVtb3Jp
ZXMgeyAwIH07Ci1TdGF0aWNMb2NrIG1lbW9yeUxvY2s7Ci1pbmxpbmUgRGVxdWU8dm9pZCosIG1h
eEZhc3RNZW1vcmllcz4mIGF2YWlsYWJsZUZhc3RNZW1vcmllcyhjb25zdCBBYnN0cmFjdExvY2tl
ciYpCit2b2lkKiBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzKQogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxEZXF1ZTx2b2lkKiwgbWF4RmFzdE1lbW9yaWVzPj4gYXZhaWxhYmxlRmFzdE1lbW9y
aWVzOwotICAgIHJldHVybiBhdmFpbGFibGVGYXN0TWVtb3JpZXM7CisjaWYgT1MoREFSV0lOKQor
ICAgIGludCBmZCA9IFZNX1RBR19GT1JfV0VCQVNTRU1CTFlfTUVNT1JZOworI2Vsc2UKKyAgICBp
bnQgZmQgPSAtMTsKKyNlbmRpZgorCisgICAgdm9pZCogbG9jYXRpb24gPSBtbWFwKG51bGxwdHIs
IGJ5dGVzLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIGZkLCAwKTsKKyAgICBy
ZXR1cm4gbG9jYXRpb24gPT0gTUFQX0ZBSUxFRCA/IG51bGxwdHIgOiBsb2NhdGlvbjsKIH0KIAot
aW5saW5lIEhhc2hTZXQ8dm9pZCo+JiBhY3RpdmVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQorc3RhdGljIHZvaWQqIHRyeUdldEZhc3RNZW1vcnkoVk0mIHZtKQogewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHZvaWQqPj4gYWN0aXZlRmFzdE1lbW9yaWVzOwot
ICAgIHJldHVybiBhY3RpdmVGYXN0TWVtb3JpZXM7CisgICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0
cjsKKworICAgIGlmIChMSUtFTFkoZmFzdE1lbW9yeUVuYWJsZWQoKSkpIHsKKyAgICAgICAgLy8g
V2UncmUgYWxsb3dlZCB0byByZXRyeSByZXVzZSBvZiBjYWNoZWQgbWVtb3JpZXMgb25jZTogbWF5
YmUgdGhlIEdDIGhhc24ndCBjb2xsZWN0ZWQgcHJldmlvdXNseSB1c2VkIGZhc3QgbWVtb3JpZXMg
dGhhdCBhcmUgYWN0dWFsbHkgZGVhZC4gV2FpdGluZyBmb3IgdGhpcyBjb3VsZCBmcmVlIHVwIGEg
ZmFzdCBtZW1vcnkgZm9yIHVzLgorICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhSZXRyaWVzID0g
MTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCByZXRyeSA9IDA7IHJldHJ5IDw9IG1heFJldHJpZXM7
ICsrcmV0cnkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYXN0TWVt
b3J5UHJlYWxsb2NhdGVDb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZvaWQqIHBy
ZXZpb3VzID0gZmFzdE1lbW9yeUNhY2hlW2ldLmV4Y2hhbmdlKG51bGxwdHIsIHN0ZDo6bWVtb3J5
X29yZGVyX2FjcV9yZWwpKSB7CisgICAgICAgICAgICAgICAgICAgIG1lbW9yeSA9IHByZXZpb3Vz
OworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5R2V0RmFzdE1l
bW9yeSByZS11c2luZyAiLCBSYXdQb2ludGVyKG1lbW9yeSkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSAmJiBtZW1vcnkgJiYgcmV0cnkgPT0gbWF4UmV0cmllcywg
InRyeUdldEZhc3RNZW1vcnkgd2FpdGVkIG9uIEdDIGFuZCByZXRyaWVkIHN1Y2Nlc3NmdWxseSIp
OworICAgICAgICAgICAgaWYgKCFtZW1vcnkgJiYgcmV0cnkgIT0gbWF4UmV0cmllcykgeworICAg
ICAgICAgICAgICAgIC8vIE5vIG1lbW9yeSB3YXMgYXZhaWxhYmxlIGluIHRoZSBjYWNoZS4gTWF5
YmUgd2FpdGluZyBvbiBHQyB3aWxsIGZpbmQgYSBmcmVlIG9uZS4KKyAgICAgICAgICAgICAgICAv
LyBGSVhNRSBjb2xsZWN0U3luYyhGdWxsKSBhbmQgY3VzdG9tIGVhZ2VyIGRlc3RydWN0aW9uIG9m
IHdhc20gbWVtb3JpZXMgY291bGQgYmUgYmV0dGVyLiBGb3Igbm93IHVzZSBjb2xsZWN0QWxsR2Fy
YmFnZS4KKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5R2V0RmFzdE1l
bW9yeSB3YWl0aW5nIG9uIEdDIGFuZCByZXRyeWluZyIpOworICAgICAgICAgICAgICAgIHZtLmhl
YXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFRoZSBzb2Z0IGxpbWl0IGlzIGluaGVyZW50bHkgcmFjeSBiZWNhdXNlIGNoZWNraW5n
K2FsbG9jYXRpb24gaXNuJ3QgYXRvbWljLiBFeGNlZWRpbmcgaXQgc2xpZ2h0bHkgaXMgZmluZS4K
KyAgICAgICAgYm9vbCBhdEFsbG9jYXRpb25Tb2Z0TGltaXQgPSBjdXJyZW50bHlBbGxvY2F0ZWRG
YXN0TWVtb3JpZXMubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSA+PSBmYXN0TWVtb3J5
QWxsb2NhdGlvblNvZnRMaW1pdDsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSAmJiBhdEFs
bG9jYXRpb25Tb2Z0TGltaXQsICJ0cnlHZXRGYXN0TWVtb3J5IHJlYWNoZWQgYWxsb2NhdGlvbiBz
b2Z0IGxpbWl0IG9mICIsIGZhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0KTsKKworICAgICAg
ICBpZiAoIW1lbW9yeSAmJiAhYXRBbGxvY2F0aW9uU29mdExpbWl0KSB7CisgICAgICAgICAgICBt
ZW1vcnkgPSBtbWFwQnl0ZXMoTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CisgICAgICAgICAg
ICBpZiAobWVtb3J5KSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IGN1cnJlbnRseUFsbG9jYXRl
ZCA9IDEgKyBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMuZmV0Y2hfYWRkKDEsIHN0ZDo6
bWVtb3J5X29yZGVyX2FjcV9yZWwpOworICAgICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50bHlP
YnNlcnZlZE1heGltdW0gPSBvYnNlcnZlZE1heGltdW1GYXN0TWVtb3J5LmxvYWQoc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRseUFsbG9jYXRl
ZCA+IGN1cnJlbnRseU9ic2VydmVkTWF4aW11bSkgeworICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgZXhwZWN0ZWQgPSBjdXJyZW50bHlPYnNlcnZlZE1heGltdW07CisgICAgICAgICAgICAgICAg
ICAgIGJvb2wgc3VjY2VzcyA9IG9ic2VydmVkTWF4aW11bUZhc3RNZW1vcnkuY29tcGFyZV9leGNo
YW5nZV9zdHJvbmcoZXhwZWN0ZWQsIGN1cnJlbnRseUFsbG9jYXRlZCwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsZWFzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAidHJ5R2V0RmFzdE1lbW9yeSBjdXJyZW50bHkgb2JzZXJ2ZXIgbWF4aW11bSBpcyBu
b3cgIiwgY3VycmVudGx5QWxsb2NhdGVkKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGxvc3QgdGhlIHVwZGF0ZSByYWNlLCBidXQg
dGhlIGNvdW50ZXIgaXMgbW9ub3RvbmljIHNvIHRoZSB3aW5uZXIgbXVzdCBoYXZlIHVwZGF0ZWQg
dGhlIHZhbHVlIHRvIHdoYXQgd2Ugd2VyZSBnb2luZyB0byB1cGRhdGUgaXQgdG8sIG9yIG11bHRp
cGxlIHdpbm5lcnMgZGlkIHNvLgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGV4cGVj
dGVkID49IGN1cnJlbnRseUFsbG9jYXRlZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdl
dEZhc3RNZW1vcnkgYWxsb2NhdGVkICIsIFJhd1BvaW50ZXIobWVtb3J5KSwgIiwgY3VycmVudGx5
IGFsbG9jYXRlZCBpcyAiLCBjdXJyZW50bHlBbGxvY2F0ZWQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKG1lbW9yeSkgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtZW1vcnlMb2NrKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3Jp
ZXMobG9ja2VyKS5hZGQobWVtb3J5KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAidHJ5R2V0RmFzdE1lbW9yeSBjb3VsZG4ndCByZS11c2Ugb3IgYWxsb2NhdGUgYSBmYXN0
IG1lbW9yeSIpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Y3Jhc2hJZldlYkFzc2Vt
Ymx5Q2FudEZhc3RNZW1vcnkoKSkpCisgICAgICAgICAgICB3ZWJBc3NlbWJseUNvdWxkbnRHZXRG
YXN0TWVtb3J5KCk7CisgICAgfQorCisgICAgcmV0dXJuIG1lbW9yeTsKIH0KIAotY29uc3QgSGFz
aFNldDx2b2lkKj4mIHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlcikKK3N0YXRpYyB2b2lkKiB0cnlHZXRTbG93TWVtb3J5KHNpemVfdCBieXRlcykKIHsK
LSAgICByZXR1cm4gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcik7CisgICAgdm9pZCogbWVtb3J5
ID0gbW1hcEJ5dGVzKGJ5dGVzKTsKKyAgICBkYXRhTG9nTG5JZihtZW1vcnkgJiYgdmVyYm9zZSwg
Ik9idGFpbmVkIHNsb3cgbWVtb3J5ICIsIFJhd1BvaW50ZXIobWVtb3J5KSwgIiB3aXRoIGNhcGFj
aXR5ICIsIGJ5dGVzKTsKKyAgICBkYXRhTG9nTG5JZighbWVtb3J5ICYmIHZlcmJvc2UsICJGYWls
ZWQgb2J0YWluaW5nIHNsb3cgbWVtb3J5IHdpdGggY2FwYWNpdHkgIiwgYnl0ZXMpOworICAgIHJl
dHVybiBtZW1vcnk7CiB9CiAKLWlubGluZSBib29sIHRyeUdldEZhc3RNZW1vcnkoVk0mIHZtLCB2
b2lkKiYgbWVtb3J5LCBzaXplX3QmIG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlJiBtb2RlKQor
c3RhdGljIHZvaWQgcmVsaW5xdWlzaE1lbW9yeSh2b2lkKiBtZW1vcnksIHNpemVfdCB3cml0YWJs
ZVNpemUsIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSBtb2RlKQogewotICAgIGF1
dG8gZGVxdWVGYXN0TWVtb3J5ID0gWyZdICgpIC0+IGJvb2wgewotICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmV0dXJuIHRoZXNlIHRvIHRoZSBPUyBpZiB3ZSBnbyBzb21l
IG51bWJlciBvZiBHQ3MKLSAgICAgICAgLy8gd2l0aG91dCB1c2luZyB0aGVtLgorICAgIHN3aXRj
aCAobW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGZhc3RNZW1vcnlFbmFibGVkKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChtYXBwZWRDYXBhY2l0eSA9PSBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsKKworICAgICAg
ICAvLyBUaGlzIG1lbW9yeSBjYW5ub3QgY2F1c2UgYSB0cmFwIGFueW1vcmUuCiAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1lbW9yeUxvY2spOwotICAgICAgICBpZiAoIWF2YWlsYWJsZUZhc3RN
ZW1vcmllcyhsb2NrZXIpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbWVtb3J5ID0gYXZhaWxh
YmxlRmFzdE1lbW9yaWVzKGxvY2tlcikudGFrZUZpcnN0KCk7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGFjdGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpLmFkZChtZW1vcnkpOwotICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAgICAg
IG1hcHBlZENhcGFjaXR5ID0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzOwotICAgICAgICAgICAgbW9k
ZSA9IE1lbW9yeU1vZGU6OlNpZ25hbGluZzsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBib29sIHJlc3VsdCA9IGFjdGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpLnJlbW92ZShtZW1v
cnkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKKworICAgICAgICAv
LyBXZSBtYXkgY2FjaGUgZmFzdCBtZW1vcmllcy4gQXNzdW1pbmcgd2Ugd2lsbCwgd2UgaGF2ZSB0
byByZXNldCB0aGVtIGJlZm9yZSBpbnNlcnRpbmcgdGhlbSBpbnRvIHRoZSBjYWNoZS4KKyAgICAg
ICAgaWYgKHdyaXRhYmxlU2l6ZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
Ilplcm9pbmcgYW5kIHVucHJvdGVjdGluZyBmYXN0IG1lbW9yeSAiLCBSYXdQb2ludGVyKG1lbW9y
eSksICIncyBpbml0aWFsICIsIHdyaXRhYmxlU2l6ZSwgIiBieXRlcyIpOworICAgICAgICAgICAg
bWVtc2V0KG1lbW9yeSwgMCwgd3JpdGFibGVTaXplKTsKKyAgICAgICAgICAgIGlmIChtcHJvdGVj
dChtZW1vcnksIHdyaXRhYmxlU2l6ZSwgUFJPVF9OT05FKSkKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9OwogCi0gICAgYXV0
byBmYWlsID0gW10gKCkgLT4gYm9vbCB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpj
cmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSgpKSkKLSAgICAgICAgICAgIHdlYkFzc2Vt
Ymx5Q291bGRudEdldEZhc3RNZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYXN0TWVtb3J5UHJlYWxsb2NhdGVD
b3VudDsgKytpKSB7CisgICAgICAgICAgICB2b2lkKiBleHBlY3RlZCA9IG51bGxwdHI7CisgICAg
ICAgICAgICBpZiAoZmFzdE1lbW9yeUNhY2hlW2ldLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4
cGVjdGVkLCBtZW1vcnksIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKSB7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInJlbGlucXVpc2hNZW1vcnkgY2FjaGVkIGZhc3Qg
bWVtb3J5ICIsIFJhd1BvaW50ZXIobWVtb3J5KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAvLyBXZSBtaWdodCBHQyBoZXJlIHNvIHdl
IHNob3VsZCBiZSBob2xkaW5nIHRoZSBBUEkgbG9jay4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGJlIGFibGUgdG8gc3luY3Jvbm91c2x5IHRyaWdnZXIgdGhlIEdDIGZyb20gYW5vdGhlciB0aHJl
YWQuCi0gICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAg
IGlmIChVTkxJS0VMWSghZmFzdE1lbW9yeUVuYWJsZWQoKSkpCi0gICAgICAgIHJldHVybiBmYWls
KCk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJyZWxpbnF1aXNoTWVtb3J5IHVuYWJs
ZSB0byBjYWNoZSBmYXN0IG1lbW9yeSwgZnJlZWluZyBpbnN0ZWFkICIsIFJhd1BvaW50ZXIobWVt
b3J5KSk7CisgICAgICAgIGlmIChtdW5tYXAobWVtb3J5LCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRl
cygpKSkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIGN1cnJlbnRseUFsbG9jYXRlZEZh
c3RNZW1vcmllcy5mZXRjaF9zdWIoMSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCk7CiAKLSAg
ICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgaGF2ZSBhIHN0dWIgcHJpb3IgdG8gcnVubmluZyBj
b2RlLgotICAgIGlmIChVTkxJS0VMWSghVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhj
ZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikpKQotICAgICAgICByZXR1cm4gZmFpbCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKGFsbG9jYXRlZEZhc3RNZW1vcmll
cyA8PSBtYXhGYXN0TWVtb3JpZXMpOwotICAgIGlmIChkZXF1ZUZhc3RNZW1vcnkoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInJlbGlucXVpc2hGYXN0TWVtb3J5IGZyZWVpbmcg
c2xvdyBtZW1vcnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAgICAgaWYgKG11bm1hcCht
ZW1vcnksIG1hcHBlZENhcGFjaXR5KSkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJl
dHVybjsKIAotICAgIC8vIElmIHdlIGhhdmUgYWxsb2NhdGVkIGFsbCB0aGUgZmFzdCBtZW1vcmll
cy4uLiB0b28gYmFkLgotICAgIGlmIChhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgPT0gbWF4RmFzdE1l
bW9yaWVzKSB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIGEgcmVhc29uYWJsZSBjaGFuY2UgdGhhdCBh
bm90aGVyIG1vZHVsZSBoYXMgZGllZCBidXQgaGFzIG5vdCBiZWVuIGNvbGxlY3RlZCB5ZXQuIERv
bid0IGxvc2UgaG9wZSB5ZXQhCi0gICAgICAgIHZtLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsK
LSAgICAgICAgaWYgKGRlcXVlRmFzdE1lbW9yeSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIHJldHVybiBmYWlsKCk7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1l
bW9yeU1vZGVzOgorICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobW1hcEJ5dGVzKGZh
c3RNZW1vcnlNYXBwZWRCeXRlcywgbWVtb3J5KSkgewotICAgICAgICBtYXBwZWRDYXBhY2l0eSA9
IGZhc3RNZW1vcnlNYXBwZWRCeXRlczsKLSAgICAgICAgbW9kZSA9IE1lbW9yeU1vZGU6OlNpZ25h
bGluZzsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobWVtb3J5TG9jayk7Ci0gICAgICAgIGFs
bG9jYXRlZEZhc3RNZW1vcmllcysrOwotICAgICAgICBhdXRvIHJlc3VsdCA9IGFjdGl2ZUZhc3RN
ZW1vcmllcyhsb2NrZXIpLmFkZChtZW1vcnkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3N0YXRpYyBib29sIG1ha2VOZXdNZW1vcnlSZWFkV3JpdGVPclJlbGlucXVpc2godm9p
ZCogbWVtb3J5LCBzaXplX3QgaW5pdGlhbEJ5dGVzLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHlCeXRl
cywgTWVtb3J5TW9kZSBtb2RlKQoreworICAgIEFTU0VSVChtZW1vcnkgJiYgaW5pdGlhbEJ5dGVz
IDw9IG1hcHBlZENhcGFjaXR5Qnl0ZXMpOworICAgIGlmIChpbml0aWFsQnl0ZXMpIHsKKyAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1hcmtpbmcgV2ViQXNzZW1ibHkgbWVtb3J5J3MgIiwg
UmF3UG9pbnRlcihtZW1vcnkpLCAiJ3MgaW5pdGlhbCAiLCBpbml0aWFsQnl0ZXMsICIgYnl0ZXMg
YXMgcmVhZCt3cml0ZSIpOworICAgICAgICBpZiAobXByb3RlY3QobWVtb3J5LCBpbml0aWFsQnl0
ZXMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiB3
aHkgPSBzdHJlcnJvcihlcnJubyk7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
RmFpbGVkIG1ha2luZyBtZW1vcnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpLCAiIHJlYWRhYmxlIGFu
ZCB3cml0YWJsZTogIiwgd2h5KTsKKyAgICAgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobWVtb3J5
LCAwLCBtYXBwZWRDYXBhY2l0eUJ5dGVzLCBtb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCiAKLSAgICBpZiAobWVtb3J5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIHJldHVybiBmYWlsKCk7Citjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9k
ZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNp
Z25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVy
T2ZNZW1vcnlNb2RlczogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuICIiOwogfQogCi1pbmxpbmUgdm9pZCByZWxlYXNlRmFzdE1lbW9y
eSh2b2lkKiYgbWVtb3J5LCBzaXplX3Qgd3JpdGFibGVTaXplLCBzaXplX3QgbWFwcGVkQ2FwYWNp
dHksIE1lbW9yeU1vZGUgbW9kZSkKK3ZvaWQgTWVtb3J5Ojppbml0aWFsaXplUHJlYWxsb2NhdGlv
bnMoKQogewotICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCAhbWVtb3J5
KQotICAgICAgICByZXR1cm47CisgICAgLy8gUmFjZXMgY2Fubm90IG9jY3VyIGluIHRoaXMgZnVu
Y3Rpb246IGl0IGlzIG9ubHkgY2FsbGVkIGF0IHByb2dyYW0gaW5pdGlhbGl6YXRpb24sIGJlZm9y
ZSBXZWJBc3NlbWJseSBjYW4gYmUgaW52b2tlZC4KKworICAgIGNvbnN0IGF1dG8gc3RhcnRUaW1l
ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgY29uc3Qgc2l6ZV90IGRlc2lyZWRGYXN0TWVt
b3JpZXMgPSBzdGQ6Om1pbjxzaXplX3Q+KE9wdGlvbnM6OndlYkFzc2VtYmx5RmFzdE1lbW9yeVBy
ZWFsbG9jYXRlQ291bnQoKSwgZmFzdE1lbW9yeUNhY2hlSGFyZExpbWl0KTsKKworICAgIC8vIFN0
YXJ0IG9mZiB0cnlpbmcgdG8gYWxsb2NhdGUgZmFzdCBtZW1vcmllcyBjb250aWd1b3VzbHkgc28g
dGhleSBkb24ndCBmcmFnbWVudCBlYWNoIG90aGVyLiBUaGlzIGNhbiBmYWlsIGlmIHRoZSBhZGRy
ZXNzIHNwYWNlIGlzIG90aGVyd2lzZSBmcmFnbWVudGVkLiBJbiB0aGF0IGNhc2UsIGdvIGZvciBz
bWFsbGVyIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbnMuIFdlJ2xsIGV2ZW50dWFsbHkgZ2V0IGluZGl2
aWR1YWwgbm9uLWNvbnRpZ3VvdXMgZmFzdCBtZW1vcmllcyBhbGxvY2F0ZWQsIG9yIHdlJ2xsIGp1
c3QgYmUgdW5hYmxlIHRvIGZpdCBhIHNpbmdsZSBvbmUgYXQgd2hpY2ggcG9pbnQgd2UgZ2l2ZSB1
cC4KKyAgICBhdXRvIGFsbG9jYXRlQ29udGlndW91c0Zhc3RNZW1vcmllcyA9IFsmXSAoc2l6ZV90
IG51bUNvbnRpZ3VvdXMpIC0+IGJvb2wgeworICAgICAgICBpZiAodm9pZCAqbWVtb3J5ID0gbW1h
cEJ5dGVzKE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkgKiBudW1Db250aWd1b3VzKSkgeworICAg
ICAgICAgICAgZm9yIChzaXplX3Qgc3ViTWVtb3J5ID0gMDsgc3ViTWVtb3J5IDwgbnVtQ29udGln
dW91czsgKytzdWJNZW1vcnkpIHsKKyAgICAgICAgICAgICAgICB2b2lkKiBzdGFydEFkZHJlc3Mg
PSByZWludGVycHJldF9jYXN0PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5OjpmYXN0TWFwcGVkQnl0
ZXMoKSAqIHN1Yk1lbW9yeSArIHN1Yk1lbW9yeTsKKyAgICAgICAgICAgICAgICBib29sIGluc2Vy
dGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY2FjaGVFbnRyeSA9IDA7
IGNhY2hlRW50cnkgPCBmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQ7ICsrY2FjaGVFbnRyeSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLnN0b3JlKHN0YXJ0QWRkcmVzcywg
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNl
cnRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbnNlcnRlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKIAotICAgIFJFTEVBU0Vf
QVNTRVJUKG1lbW9yeSAmJiBtYXBwZWRDYXBhY2l0eSA9PSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMp
OwotICAgIEFTU0VSVChmYXN0TWVtb3J5RW5hYmxlZCgpKTsKKyAgICBzaXplX3QgZnJhZ21lbnRz
ID0gMDsKKyAgICBzaXplX3QgbnVtRmFzdE1lbW9yaWVzID0gMDsKKyAgICBzaXplX3QgY29udGln
dW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0ID0gZGVzaXJlZEZhc3RNZW1vcmllczsKKyAgICB3
aGlsZSAobnVtRmFzdE1lbW9yaWVzICE9IGRlc2lyZWRGYXN0TWVtb3JpZXMgJiYgY29udGlndW91
c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0ICE9IDApIHsKKyAgICAgICAgaWYgKGFsbG9jYXRlQ29u
dGlndW91c0Zhc3RNZW1vcmllcyhjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQpKSB7
CisgICAgICAgICAgICBudW1GYXN0TWVtb3JpZXMgKz0gY29udGlndW91c01lbW9yeUFsbG9jYXRp
b25BdHRlbXB0OworICAgICAgICAgICAgY29udGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0
ID0gc3RkOjptaW4oY29udGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0IC0gMSwgZGVzaXJl
ZEZhc3RNZW1vcmllcyAtIG51bUZhc3RNZW1vcmllcyk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgLS1jb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQ7CisgICAgICAgICsrZnJh
Z21lbnRzOworICAgIH0KKworICAgIGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50ID0gbnVtRmFz
dE1lbW9yaWVzOworICAgIGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcy5zdG9yZShmYXN0
TWVtb3J5UHJlYWxsb2NhdGVDb3VudCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAg
b2JzZXJ2ZWRNYXhpbXVtRmFzdE1lbW9yeS5zdG9yZShmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3Vu
dCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiAKLSAgICBtZW1zZXQobWVtb3J5LCAwLCB3
cml0YWJsZVNpemUpOwotICAgIGlmIChtcHJvdGVjdChtZW1vcnksIHdyaXRhYmxlU2l6ZSwgUFJP
VF9OT05FKSkKLSAgICAgICAgQ1JBU0goKTsKKyAgICBjb25zdCBhdXRvIGVuZFRpbWUgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1lbW9yeUxvY2spOwot
ICAgIGJvb2wgcmVzdWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcikucmVtb3ZlKG1lbW9y
eSk7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7Ci0gICAgQVNTRVJUKGF2YWls
YWJsZUZhc3RNZW1vcmllcyhsb2NrZXIpLnNpemUoKSA8IGFsbG9jYXRlZEZhc3RNZW1vcmllcyk7
Ci0gICAgYXZhaWxhYmxlRmFzdE1lbW9yaWVzKGxvY2tlcikuYXBwZW5kKG1lbW9yeSk7Ci0gICAg
bWVtb3J5ID0gbnVsbHB0cjsKKyAgICBmb3IgKHNpemVfdCBjYWNoZUVudHJ5ID0gMDsgY2FjaGVF
bnRyeSA8IGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50OyArK2NhY2hlRW50cnkpIHsKKyAgICAg
ICAgdm9pZCogc3RhcnRBZGRyZXNzID0gZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIEFTU0VSVChzdGFydEFkZHJlc3Mp
OworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJlLWFsbG9jYXRpb24gb2YgV2ViQXNz
ZW1ibHkgZmFzdCBtZW1vcnkgYXQgIiwgUmF3UG9pbnRlcihzdGFydEFkZHJlc3MpKTsKKyAgICB9
CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByZS1hbGxvY2F0ZWQgIiwgZmFzdE1lbW9yeVBy
ZWFsbG9jYXRlQ291bnQsICIgV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcyBpbiAiLCBmYXN0TWVt
b3J5UHJlYWxsb2NhdGVDb3VudCA9PSAwID8gMCA6IGZyYWdtZW50cywgZnJhZ21lbnRzID09IDEg
PyAiIGZyYWdtZW50LCB0b29rICIgOiAiIGZyYWdtZW50cywgdG9vayAiLCBlbmRUaW1lIC0gc3Rh
cnRUaW1lKTsKIH0KIAogTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXVtKQpAQCAtMTk2LDg3ICszMDksOTggQEAgTWVtb3J5OjpNZW1vcnkodm9pZCogbWVt
b3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBwZWQK
IAogUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJbXBsKFZNJiB2bSwgUGFnZUNvdW50IGlu
aXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVp
cmVkTW9kZSkKIHsKKyAgICBBU1NFUlQoaW5pdGlhbCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1h
eGltdW0gfHwgbWF4aW11bSA+PSBpbml0aWFsKTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVl
ZCBieSBvdXIgY2FsbGVyLgogCisgICAgY29uc3Qgc2l6ZV90IGluaXRpYWxCeXRlcyA9IGluaXRp
YWwuYnl0ZXMoKTsKKyAgICBjb25zdCBzaXplX3QgbWF4aW11bUJ5dGVzID0gbWF4aW11bSA/IG1h
eGltdW0uYnl0ZXMoKSA6IDA7CisgICAgY29uc3QgYm9vbCBjYW5Vc2VGYXN0TWVtb3J5ID0gIXJl
cXVpcmVkTW9kZSB8fCByZXF1aXJlZE1vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nOwogICAg
IE1lbW9yeU1vZGUgbW9kZSA9IHJlcXVpcmVkTW9kZSA/ICpyZXF1aXJlZE1vZGUgOiBNZW1vcnlN
b2RlOjpCb3VuZHNDaGVja2luZzsKLSAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IGluaXRpYWwuYnl0
ZXMoKTsKLSAgICBzaXplX3QgbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRl
cygpIDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpOwotICAgIHZvaWQqIG1lbW9yeSA9IG51bGxw
dHI7CisgICAgc2l6ZV90IG1hcHBlZENhcGFjaXR5Qnl0ZXMgPSAwOworCisgICAgLy8gV2UgbmVl
ZCB0byBiZSBzdXJlIHdlIGhhdmUgYSBzdHViIHByaW9yIHRvIHJ1bm5pbmcgY29kZS4KKyAgICBp
ZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21X
YXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRv
IG1ha2VFbXB0eU1lbW9yeSA9IFsmXSAoKSAtPiBSZWZQdHI8TWVtb3J5PiB7CisgICAgaWYgKG1h
eGltdW0gJiYgIW1heGltdW1CeXRlcykgeworICAgICAgICAvLyBVc2VyIHNwZWNpZmllZCBhIHpl
cm8gbWF4aW11bSwgaW5pdGlhbCBzaXplIG11c3QgYWxzbyBiZSB6ZXJvLgorICAgICAgICBSRUxF
QVNFX0FTU0VSVCghaW5pdGlhbEJ5dGVzKTsKICAgICAgICAgaWYgKG1vZGUgPT0gTWVtb3J5TW9k
ZTo6U2lnbmFsaW5nKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSkpOwotICAgIH07Ci0KLSAg
ICBpZiAoIW1hcHBlZENhcGFjaXR5KSB7Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugc3BlY2lm
aWVkIGEgemVybyBhcyBtYXhpbXVtICh3aGljaCBtZWFucyB3ZSBhbHNvIGhhdmUgemVybyBhcyBp
bml0aWFsIHNpemUpLgotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc2l6ZSk7Ci0gICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBhbGxvY2F0aW5nIG5vdGhpbmciKTsK
LSAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1lbW9yeSgpOwogICAgIH0KIAotICAgIGJvb2wgY2Fu
VXNlRmFzdE1lbW9yeSA9ICFyZXF1aXJlZE1vZGUgfHwgcmVxdWlyZWRNb2RlID09IE1lbW9yeU1v
ZGU6OlNpZ25hbGluZzsKLSAgICBpZiAoIWNhblVzZUZhc3RNZW1vcnkgfHwgIXRyeUdldEZhc3RN
ZW1vcnkodm0sIG1lbW9yeSwgbWFwcGVkQ2FwYWNpdHksIG1vZGUpKSB7Ci0gICAgICAgIGlmICht
b2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7CisgICAgaWYgKGNhblVzZUZhc3RNZW1vcnkp
IHsKKyAgICAgICAgbWVtb3J5ID0gdHJ5R2V0RmFzdE1lbW9yeSh2bSk7CisgICAgICAgIGlmICht
ZW1vcnkpIHsKKyAgICAgICAgICAgIG1hcHBlZENhcGFjaXR5Qnl0ZXMgPSBNZW1vcnk6OmZhc3RN
YXBwZWRCeXRlcygpOworICAgICAgICAgICAgbW9kZSA9IE1lbW9yeU1vZGU6OlNpZ25hbGluZzsK
KyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAoT3B0aW9uczo6c2ltdWxhdGVXZWJBc3Nl
bWJseUxvd01lbW9yeSgpID8gdHJ1ZSA6ICFtbWFwQnl0ZXMobWFwcGVkQ2FwYWNpdHksIG1lbW9y
eSkpIHsKLSAgICAgICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4K
LSAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIGZh
aWxlZCBvbmNlIGZvciBjYXBhY2l0eSwgdHJ5aW5nIGFnYWluIik7Ci0gICAgICAgICAgICBtYXBw
ZWRDYXBhY2l0eSA9IHNpemU7Ci0gICAgICAgICAgICBpZiAoIW1hcHBlZENhcGFjaXR5KSB7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAg
bm90IHRyeWluZyBhZ2FpbiBiZWNhdXNlIHNpemUgaXMgemVybyIpOwotICAgICAgICAgICAgICAg
IHJldHVybiBtYWtlRW1wdHlNZW1vcnkoKTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoIW1lbW9y
eSAmJiBtb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZykKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICAgICAgICAgIGlmICghbW1hcEJ5dGVzKG1hcHBlZENhcGFjaXR5LCBtZW1vcnkp
KSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRl
IG1tYXAgZmFpbGVkIHR3aWNlIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgICAgICB9CisgICAgaWYgKCFtZW1vcnkgJiYgbWF4aW11bSkgeworICAgICAgICBtZW1v
cnkgPSB0cnlHZXRTbG93TWVtb3J5KG1heGltdW1CeXRlcyk7CisgICAgICAgIGlmIChtZW1vcnkp
IHsKKyAgICAgICAgICAgIG1hcHBlZENhcGFjaXR5Qnl0ZXMgPSBtYXhpbXVtQnl0ZXM7CisgICAg
ICAgICAgICBtb2RlID0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBBU1NFUlQobWVtb3J5ICYmIHNpemUgPD0gbWFwcGVkQ2FwYWNpdHkpOwotICAg
IGlmIChtcHJvdGVjdChtZW1vcnksIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBldmVyIG9jY3VyPyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5ODkwCi0gICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJNZW1vcnk6OmNyZWF0ZSBtcHJvdGVjdCBmYWlsZWQiKTsKLSAgICAgICAgcmVsZWFzZUZh
c3RNZW1vcnkobWVtb3J5LCAwLCBtYXBwZWRDYXBhY2l0eSwgbW9kZSk7CisgICAgaWYgKCFtZW1v
cnkpIHsKKyAgICAgICAgbWVtb3J5ID0gdHJ5R2V0U2xvd01lbW9yeShpbml0aWFsQnl0ZXMpOwog
ICAgICAgICBpZiAobWVtb3J5KSB7Ci0gICAgICAgICAgICBpZiAobXVubWFwKG1lbW9yeSwgbWFw
cGVkQ2FwYWNpdHkpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBtYXBw
ZWRDYXBhY2l0eUJ5dGVzID0gaW5pdGlhbEJ5dGVzOworICAgICAgICAgICAgbW9kZSA9IE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFw
IHN1Y2NlZWRlZCIpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KG1lbW9yeSwgaW5p
dGlhbCwgbWF4aW11bSwgbWFwcGVkQ2FwYWNpdHksIG1vZGUpKTsKKyAgICBpZiAoIW1lbW9yeSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIW1ha2VOZXdNZW1vcnlSZWFkV3Jp
dGVPclJlbGlucXVpc2gobWVtb3J5LCBpbml0aWFsQnl0ZXMsIG1hcHBlZENhcGFjaXR5Qnl0ZXMs
IG1vZGUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTWVtb3J5KG1lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgbWFwcGVkQ2FwYWNpdHlCeXRlcywg
bW9kZSkpOwogfQogCiBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2Rl
PiBtb2RlKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5p
dGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KICAgICBS
ZWZQdHI8TWVtb3J5PiByZXN1bHQgPSBjcmVhdGVJbXBsKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBt
b2RlKTsKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9PSBN
ZW1vcnlNb2RlOjpTaWduYWxpbmcpCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQt
Pm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKTsKLSAgICAgICAgaWYg
KG1vZGUpCi0gICAgICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpOwotICAg
IH0KKyAgICBpZiAocmVzdWx0ICYmIG1vZGUpCisgICAgICAgIEFTU0VSVCgqbW9kZSA9PSByZXN1
bHQtPm1vZGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogTWVtb3J5Ojp+TWVtb3J5KCkK
IHsKLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojp+TWVtb3J5ICIsICp0aGlzKTsK
LSAgICByZWxlYXNlRmFzdE1lbW9yeShtX21lbW9yeSwgbV9zaXplLCBtX21hcHBlZENhcGFjaXR5
LCBtX21vZGUpOwogICAgIGlmIChtX21lbW9yeSkgewotICAgICAgICBpZiAobXVubWFwKG1fbWVt
b3J5LCBtX21hcHBlZENhcGFjaXR5KSkKLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6On5NZW1vcnkgIiwgKnRoaXMpOworICAgICAgICBy
ZWxpbnF1aXNoTWVtb3J5KG1fbWVtb3J5LCBtX3NpemUsIG1fbWFwcGVkQ2FwYWNpdHksIG1fbW9k
ZSk7CiAgICAgfQogfQogCitzaXplX3QgTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihQYWdlQ291bnQ6OnBhZ2VTaXplKSAq
IE9wdGlvbnM6OndlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcygpOworfQorCitzaXpl
X3QgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1h
eGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzIgKyByZWR6b25lIHdoaWNoIGlz
IGxhcmdlciB0aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2QgcGFzcyB0byBt
cHJvdGVjdCBpZiB0aGlzIGRpZG4ndCBob2xkLiIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgKyBmYXN0TWFwcGVk
UmVkem9uZUJ5dGVzKCk7Cit9CisKK3NpemVfdCBNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCgp
Cit7CisgICAgLy8gVGhlIG9yZGVyIGNhbiBiZSByZWxheGVkIGhlcmUgYmVjYXVzZSB3ZSBwcm92
aWRlIGEgbW9ub3RvbmljYWxseS1pbmNyZWFzaW5nIGVzdGltYXRlLiBBIGNvbmN1cnJlbnQgb2Jz
ZXJ2ZXIgY291bGQgc2VlIGEgc2xpZ2h0bHkgb3V0LW9mLWRhdGUgdmFsdWUgYnV0IGNhbid0IHRl
bGwgdGhhdCB0aGV5IGRpZC4KKyAgICByZXR1cm4gb2JzZXJ2ZWRNYXhpbXVtRmFzdE1lbW9yeS5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworfQorCiBib29sIE1lbW9yeTo6Z3JvdyhQ
YWdlQ291bnQgbmV3U2l6ZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdTaXplID4gUGFnZUNv
dW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CkBAIC0zMDEsOCArNDI1LDExIEBAIGJvb2wgTWVtb3J5
Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQogICAgIH0KIAogICAgIGlmIChtX21lbW9yeSAmJiBk
ZXNpcmVkU2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KSB7Ci0gICAgICAgIGlmIChtcHJvdGVjdChz
dGF0aWNfY2FzdDx1aW50OF90Kj4obV9tZW1vcnkpICsgbV9zaXplLCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGRlc2lyZWRTaXplIC0gbV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBldmVyIG9jY3VyPyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5ODkwCisgICAgICAgIHVpbnQ4X3QqIHN0YXJ0
QWRkcmVzcyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBtX3NpemU7CisgICAg
ICAgIHNpemVfdCBleHRyYUJ5dGVzID0gZGVzaXJlZFNpemUgLSBtX3NpemU7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGV4dHJhQnl0ZXMpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
TWFya2luZyBXZWJBc3NlbWJseSBtZW1vcnkncyAiLCBSYXdQb2ludGVyKG1fbWVtb3J5KSwgIiBh
cyByZWFkK3dyaXRlIGluIHJhbmdlIFsiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcyksICIsICIs
IFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzICsgZXh0cmFCeXRlcyksICIpIik7CisgICAgICAgIGlm
IChtcHJvdGVjdChzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMsIFBST1RfUkVBRCB8IFBST1RfV1JJ
VEUpKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IGlu
LXBsYWNlIGZhaWxlZCAiLCAqdGhpcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KQEAgLTMxNiwxNiArNDQzLDE5IEBAIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBu
ZXdTaXplKQogICAgIFJFTEVBU0VfQVNTRVJUKG1vZGUoKSAhPSBNZW1vcnlNb2RlOjpTaWduYWxp
bmcpOwogCiAgICAgLy8gT3RoZXJ3aXNlLCBsZXQncyB0cnkgdG8gbWFrZSBzb21lIG5ldyBtZW1v
cnkuCi0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEgVk0gdGFnIGZv
ciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzYwMAotICAgIHZvaWQqIG5ld01lbW9yeSA9IG1tYXAobnVsbHB0ciwgZGVzaXJlZFNpemUsIFBS
T1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAg
ICBpZiAobmV3TWVtb3J5ID09IE1BUF9GQUlMRUQpCisgICAgLy8gRklYTUUgbXJlbWFwIHdvdWxk
IGJlIG5pY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU1Nwor
ICAgIHZvaWQqIG5ld01lbW9yeSA9IHRyeUdldFNsb3dNZW1vcnkoZGVzaXJlZFNpemUpOworICAg
IGlmICghbmV3TWVtb3J5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1ha2VO
ZXdNZW1vcnlSZWFkV3JpdGVPclJlbGlucXVpc2gobmV3TWVtb3J5LCBkZXNpcmVkU2l6ZSwgZGVz
aXJlZFNpemUsIG1vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX21l
bW9yeSkgewogICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwgbV9zaXplKTsKLSAg
ICAgICAgYm9vbCBzdWNjZXNzID0gIW11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOworICAgICAgICByZWxpbnF1aXNoTWVt
b3J5KG1fbWVtb3J5LCBtX3NpemUsIG1fc2l6ZSwgbV9tb2RlKTsKICAgICB9CisKICAgICBtX21l
bW9yeSA9IG5ld01lbW9yeTsKICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CiAg
ICAgbV9zaXplID0gZGVzaXJlZFNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmgKaW5kZXggYjAyNDUxZC4uMDFiZjM3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnkuaApAQCAtNjEsMTEgKzYxLDE2IEBAIHB1YmxpYzoKIAogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9CiAKLSAgICBzdGF0
aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlKFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVpcmVkTW9kZSA9IHN0ZDo6
bnVsbG9wdCk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVByZWFsbG9jYXRpb25zKCk7Cisg
ICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFs
LCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZXF1aXJlZE1v
ZGUgPSBzdGQ6Om51bGxvcHQpOwogCiAgICAgTWVtb3J5KCkgPSBkZWZhdWx0OwogICAgIH5NZW1v
cnkoKTsKIAorICAgIHN0YXRpYyBzaXplX3QgZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpOworICAg
IHN0YXRpYyBzaXplX3QgZmFzdE1hcHBlZEJ5dGVzKCk7IC8vIEluY2x1ZGVzIHJlZHpvbmUuCisg
ICAgc3RhdGljIHNpemVfdCBtYXhGYXN0TWVtb3J5Q291bnQoKTsKKwogICAgIHZvaWQqIG1lbW9y
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KICAgICBQYWdlQ291bnQgc2l6ZUluUGFnZXMoKSBjb25zdCB7IHJl
dHVybiBQYWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUpOyB9CkBAIC04MSw3ICs4Niw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7
IH0KIHByaXZhdGU6Ci0gICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZUltcGwoVk0mLCBQ
YWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5
TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKKyAgICBzdGF0aWMgUmVmUHRyPE1l
bW9yeT4gY3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZXF1aXJlZE1vZGUgPSBzdGQ6Om51bGxv
cHQpOwogICAgIE1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlKTsKICAgICBNZW1v
cnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKTsKIApAQCAtOTQsMTIgKzk5
LDE2IEBAIHByaXZhdGU6CiAgICAgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3Vu
ZHNDaGVja2luZyB9OwogfTsKIAotc3RhdGljX2Fzc2VydChzaXplb2YodWludDY0X3QpID09IHNp
emVvZihzaXplX3QpLCAiV2UgcmVseSBvbiBhbGxvd2luZyB0aGUgbWF4aW11bSBzaXplIG9mIE1l
bW9yeSB3ZSBtYXAgdG8gYmUgMl4zMyB3aGljaCBpcyBsYXJnZXIgdGhhbiBmaXRzIGluIGEgMzIt
Yml0IGludGVnZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3RlY3QgaWYgdGhpcyBkaWRuJ3QgaG9s
ZC4iKTsKLQotY29uc3Qgc2l6ZV90IGZhc3RNZW1vcnlNYXBwZWRCeXRlcyA9IChzdGF0aWNfY2Fz
dDxzaXplX3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgKyAxKSAqIDI7
IC8vIHBvaW50ZXIgbWF4ICsgb2Zmc2V0IG1heC4gVGhpcyBpcyBhbGwgd2UgbmVlZCBzaW5jZSBh
IGxvYWQgc3RyYWRkbGluZyByZWFkYWJsZSBtZW1vcnkgd2lsbCB0cmFwLgogZXh0ZXJuIFN0YXRp
Y0xvY2sgbWVtb3J5TG9jazsKIGNvbnN0IEhhc2hTZXQ8dm9pZCo+JiB2aWV3QWN0aXZlRmFzdE1l
bW9yaWVzKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCiAKKyNlbHNlCisKK2NsYXNzIE1lbW9yeSB7CitwdWJsaWM6CisgICAgc3RhdGljIHNpemVf
dCBtYXhGYXN0TWVtb3J5Q291bnQoKSB7IHJldHVybiAwOyB9Cit9OworCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCA2NTQ3ZDYyLi45Y2Q0N2Q4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAg
IEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKICAgICBtX21vZHVsZS5zZXQodm0sIHRo
aXMsIG1vZHVsZSk7Ci0gICAgY29uc3Qgc2l6ZV90IGV4dHJhTWVtb3J5U2l6ZSA9IG1vZHVsZS0+
bW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSAqIHNpemVvZihSZWdpc3Rlcik7Cisg
ICAgY29uc3Qgc2l6ZV90IGV4dHJhTWVtb3J5U2l6ZSA9IGdsb2JhbE1lbW9yeUJ5dGVTaXplKCk7
CiAgICAgbV9nbG9iYWxzID0gTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGV4dHJhTWVtb3J5
U2l6ZSk7CiAgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChleHRyYU1lbW9y
eVNpemUpOwogCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fdGFibGUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2Fs
bGVlKTsKLSAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5t
b2R1bGUoKS0+bW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSk7CisgICAgdmlzaXRv
ci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+Z2xvYmFsTWVtb3J5Qnl0ZVNp
emUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbnVtSW1w
b3J0RnVuY3Rpb25zOyArK2kpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmlt
cG9ydEZ1bmN0aW9ucygpW2ldKTsKIH0KQEAgLTM1MCw2ICszNTAsMTAgQEAgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlMKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKK3NpemVfdCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Omdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVn
aXN0ZXIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAppbmRleCA4NTUxZmU4
Li41M2VkOTlmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTkyLDYgKzkyLDcgQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICBWTSogbV92bTsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRG
dW5jdGlvbnMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+
KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsg
fQorICAgIHNpemVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0OwogCiAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKaW5kZXggMzM2OWMw
ZS4uYzZkNzhjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKQEAgLTExNyw2ICsxMTcsNyBAQCBXYXNtOjpQYWdlQ291
bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWlu
dDMyX3QgZGVsdAogICAgIH0KIAogICAgIG1lbW9yeSgpLmNoZWNrKCk7CisgICAgLy8gRklYTUUg
U2hvdWxkIHdlIHJlcG9ydCBleHRyYSBtZW1vcnkgdG8gdGhlIEdDIG9uIGFsbG9jYXRpb24gLyBn
cm93IC8gdmlzaXQ/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2
OTAKICAgICByZXR1cm4gb2xkUGFnZUNvdW50OwogfQogCkBAIC0xMjQsNiArMTI1LDggQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
CisgICAgLy8gRklYTUUgU2hvdWxkIHdlIHJlcG9ydCBleHRyYSBtZW1vcnkgdG8gdGhlIEdDIG9u
IGFsbG9jYXRpb24gLyBncm93IC8gdmlzaXQ/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzA2OTAKKyAgICB2bS5oZWFwLnJlcG9ydFdlYkFzc2VtYmx5RmFzdE1lbW9y
aWVzQWxsb2NhdGVkKDEpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQpAQCAtMTQxLDYgKzE0NCw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9y
eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2J1ZmZlcldyYXBwZXIpOworICAgIC8vIEZJWE1FIFNob3Vs
ZCB3ZSByZXBvcnQgZXh0cmEgbWVtb3J5IHRvIHRoZSBHQyBvbiBhbGxvY2F0aW9uIC8gZ3JvdyAv
IHZpc2l0PyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjkwCiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvT1NBbGxv
Y2F0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKaW5kZXggYzljYjE1NS4uZDc2
NzhiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCkBAIC0zNiw3ICszNiw2IEBAIHB1YmxpYzoKICAgICBl
bnVtIFVzYWdlIHsKICAgICAgICAgVW5rbm93blVzYWdlID0gLTEsCiAgICAgICAgIEZhc3RNYWxs
b2NQYWdlcyA9IFZNX1RBR19GT1JfVENNQUxMT0NfTUVNT1JZLAotICAgICAgICBKU0dDSGVhcFBh
Z2VzID0gVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZLAogICAgICAgICBKU1ZNU3RhY2tQYWdl
cyA9IFZNX1RBR19GT1JfUkVHSVNURVJGSUxFX01FTU9SWSwKICAgICAgICAgSlNKSVRDb2RlUGFn
ZXMgPSBWTV9UQUdfRk9SX0VYRUNVVEFCTEVBTExPQ0FUT1JfTUVNT1JZLAogICAgIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WTVRhZ3MuaCBiL1NvdXJjZS9XVEYvd3RmL1ZNVGFncy5o
CmluZGV4IGFlZjA1ZDIuLjI3ZmMwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZNVGFn
cy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZNVGFncy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwxNSArNTEsMTUgQEAKICNlbmRp
ZiAvLyBkZWZpbmVkKFZNX01FTU9SWV9KQVZBU0NSSVBUX0pJVF9SRUdJU1RFUl9GSUxFKQogCiAj
aWYgZGVmaW5lZChWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFKQotI2RlZmluZSBWTV9UQUdfRk9S
X0NPTExFQ1RPUl9NRU1PUlkgVk1fTUFLRV9UQUcoVk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRSkK
KyNkZWZpbmUgVk1fVEFHX0ZPUl9XRUJBU1NFTUJMWV9NRU1PUlkgVk1fTUFLRV9UQUcoVk1fTUVN
T1JZX0pBVkFTQ1JJUFRfQ09SRSkKICNlbHNlCi0jZGVmaW5lIFZNX1RBR19GT1JfQ09MTEVDVE9S
X01FTU9SWSBWTV9NQUtFX1RBRyg2MykKKyNkZWZpbmUgVk1fVEFHX0ZPUl9XRUJBU1NFTUJMWV9N
RU1PUlkgVk1fTUFLRV9UQUcoNjMpCiAjZW5kaWYgLy8gZGVmaW5lZChWTV9NRU1PUllfSkFWQVND
UklQVF9DT1JFKQogCiAjZWxzZSAvLyBPUyhEQVJXSU4pCiAKICNkZWZpbmUgVk1fVEFHX0ZPUl9U
Q01BTExPQ19NRU1PUlkgLTEKLSNkZWZpbmUgVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZIC0x
CisjZGVmaW5lIFZNX1RBR19GT1JfV0VCQVNTRU1CTFlfTUVNT1JZIC0xCiAjZGVmaW5lIFZNX1RB
R19GT1JfRVhFQ1VUQUJMRUFMTE9DQVRPUl9NRU1PUlkgLTEKICNkZWZpbmUgVk1fVEFHX0ZPUl9S
RUdJU1RFUkZJTEVfTUVNT1JZIC0xCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzb3VyY2VVc2FnZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdl
RGF0YS5jcHAKaW5kZXggNTkxMmIwNS4uN2ExNzAwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9S
ZXNvdXJjZVVzYWdlRGF0YS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQCBSZXNvdXJjZVVzYWdlRGF0YTo6UmVz
b3VyY2VVc2FnZURhdGEoKQogewogICAgIC8vIFZNIHRhZyBjYXRlZ29yaWVzLgogICAgIGNhdGVn
b3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkpTSklUXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlD
YXRlZ29yeTo6SlNKSVQpOworICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OldlYkFzc2Vt
Ymx5XSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6V2ViQXNzZW1ibHkpOwog
ICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkltYWdlc10gPSBNZW1vcnlDYXRlZ29yeUlu
Zm8oTWVtb3J5Q2F0ZWdvcnk6OkltYWdlcyk7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29y
eTo6TGF5ZXJzXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGF5ZXJzKTsK
ICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMaWJjTWFsbG9jXSA9IE1lbW9yeUNhdGVn
b3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxvYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jl
c291cmNlVXNhZ2VEYXRhLmgKaW5kZXggNzIzNjk2Zi4uOWZmODZhOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMiArMzUsMTMgQEAgbmFtZXNwYWNlIE1lbW9y
eUNhdGVnb3J5IHsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibWFsbG9jID0gMDsKIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBMaWJjTWFsbG9jID0gMTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBKU0pJ
VCA9IDI7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgSW1hZ2VzID0gMzsKLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBHQ0hlYXAgPSA0Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEdDT3duZWQgPSA1Owot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIE90aGVyID0gNjsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBM
YXllcnMgPSA3Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIE51bWJlck9mQ2F0ZWdvcmllcyA9IDg7
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgV2ViQXNzZW1ibHkgPSAzOworc3RhdGljIGNvbnN0IHVu
c2lnbmVkIEltYWdlcyA9IDQ7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgR0NIZWFwID0gNTsKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBHQ093bmVkID0gNjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBP
dGhlciA9IDc7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgTGF5ZXJzID0gODsKK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBOdW1iZXJPZkNhdGVnb3JpZXMgPSA5OwogfQogCiBzdHJ1Y3QgTWVtb3J5Q2F0
ZWdvcnlJbmZvIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3Vy
Y2VVc2FnZU92ZXJsYXlDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3Vy
Y2VVc2FnZU92ZXJsYXlDb2NvYS5tbQppbmRleCAzNjY2MDFlLi45NzNiODZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29h
Lm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNjIsNiArMTYyLDcgQEAgSGlzdG9yaWNSZXNvdXJjZVVzYWdlRGF0YTo6SGlzdG9yaWNS
ZXNvdXJjZVVzYWdlRGF0YSgpCiB7CiAgICAgLy8gVk0gdGFnIGNhdGVnb3JpZXMuCiAgICAgY2F0
ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6SlNKSVRdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUlu
Zm8oTWVtb3J5Q2F0ZWdvcnk6OkpTSklULCAweEZGRkY2MEZGLCAiSlMgSklUIik7CisgICAgY2F0
ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6V2ViQXNzZW1ibHldID0gSGlzdG9yaWNNZW1vcnlDYXRl
Z29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OldlYkFzc2VtYmx5LCAweEZGNjU0RkYwLCAiV2ViQXNz
ZW1ibHkiKTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpJbWFnZXNdID0gSGlzdG9y
aWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkltYWdlcywgMHhGRkZGRkYwMCwg
IkltYWdlcyIpOwogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkxheWVyc10gPSBIaXN0
b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGF5ZXJzLCAweEZGMDBGRkZG
LCAiTGF5ZXJzIik7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxvY10g
PSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxvYywg
MHhGRjAwRkYwMCwgImxpYmMgbWFsbG9jIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCmluZGV4IDA2NGE2MWEuLmEzMGVm
MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRo
cmVhZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2Fn
ZVRocmVhZENvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUs
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04MCw2ICs4MCw3IEBAIGNvbnN0IGNoYXIqIGRpc3BsYXlOYW1lRm9y
Vk1UYWcodW5zaWduZWQgdGFnKQogICAgIGNhc2UgVk1fTUVNT1JZX0lNQUdFSU86IHJldHVybiAi
SW1hZ2VJTyI7CiAgICAgY2FzZSBWTV9NRU1PUllfQ0dJTUFHRTogcmV0dXJuICJDRyBpbWFnZSI7
CiAgICAgY2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9KSVRfRVhFQ1VUQUJMRV9BTExPQ0FUT1I6
IHJldHVybiAiSlNDIEpJVCI7CisgICAgY2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFOiBy
ZXR1cm4gIldlYkFzc2VtYmx5IjsKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0M6IHJldHVybiAi
bWFsbG9jIjsKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0NfSFVHRTogcmV0dXJuICJtYWxsb2Mg
KGh1Z2UpIjsKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0NfTEFSR0U6IHJldHVybiAibWFsbG9j
IChsYXJnZSkiOwpAQCAtMTgxLDYgKzE4Miw4IEBAIHN0YXRpYyB1bnNpZ25lZCBjYXRlZ29yeUZv
clZNVGFnKHVuc2lnbmVkIHRhZykKICAgICAgICAgcmV0dXJuIE1lbW9yeUNhdGVnb3J5OjpJbWFn
ZXM7CiAgICAgY2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9KSVRfRVhFQ1VUQUJMRV9BTExPQ0FU
T1I6CiAgICAgICAgIHJldHVybiBNZW1vcnlDYXRlZ29yeTo6SlNKSVQ7CisgICAgY2FzZSBWTV9N
RU1PUllfSkFWQVNDUklQVF9DT1JFOgorICAgICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdvcnk6Oldl
YkFzc2VtYmx5OwogICAgIGNhc2UgVk1fTUVNT1JZX01BTExPQzoKICAgICBjYXNlIFZNX01FTU9S
WV9NQUxMT0NfSFVHRToKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0NfTEFSR0U6CmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0
aW9uLmh0bWwgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJl
c2VudGF0aW9uLmh0bWwKaW5kZXggMjBiNTliNS4uMWE1OThhNSAxMDA2NDQKLS0tIGEvV2Vic2l0
ZXMvd2Via2l0Lm9yZy9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCisr
KyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRp
b24uaHRtbApAQCAtNjU0LDkgKzY1NCw5IEBAIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAg
ICAgIDxkZD5TcGVjaWFsIFdhc20gb3Bjb2RlLiBUaGlzIGJyYW5jaGVzIG9uIHRoZSBmaXJzdCBj
aGlsZC4gSWYgdGhlIGZpcnN0IGNoaWxkIHBsdXMgdGhlIG9mZnNldAogICAgICAgICBwcm9kdWNl
cyBhIEludDY0IGxlc3MgdGhhbiB0byB0aGUgcGlubmVkR1BSIHRoaXMgZmFsbHMgdGhyb3VnaC4g
T3RoZXJ3aXNlLCBpdCBicmFuY2hlcyB0bwogICAgICAgICB0aGUgZXhpdCBwYXRoIGdlbmVyYXRl
ZCBieSB0aGUgcGFzc2VkIGdlbmVyYXRvci4gVW5saWtlIHRoZSBQYXRjaC9DaGVjayBmYW1pbHks
IHRoZQotICAgICAgICBnZW5lcmF0b3IgdXNlZCBieSBXYXNtQm91bmRzQ2hlY2sgc291bGQgYmUg
c2V0IG9uIHRoZSBQcm9jdWRlciBpdHNlbGYuIFRoZSBHUlBSZWcgcGFzc2VkIGluCisgICAgICAg
IGdlbmVyYXRvciB1c2VkIGJ5IFdhc21Cb3VuZHNDaGVjayBzaG91bGQgYmUgc2V0IG9uIHRoZSBQ
cm9jZWR1cmUgaXRzZWxmLiBUaGUgR1JQUmVnIHBhc3NlZCBpbgogICAgICAgICBwaW5uZWRHUFIg
bXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBwaW5uZWQgYnkgY2FsbGluZyB0aGUgUHJvY2VkdXJlJ3Mg
cGlubmluZyBBUEkuIEIzIGFzc3VtZXMKLSAgICAgICAgdGhlIFdhc21Cb3VuZHNDaGVjayB3aWxs
IHNpZGUtZXhpdCB3aGVuIHRoZSBpdCBicmFuY2hlcywgc28gdGhlIGdlbmVyYXRvciBtdXN0IGRv
IHNvbWUga2luZAorICAgICAgICB0aGUgV2FzbUJvdW5kc0NoZWNrIHdpbGwgc2lkZS1leGl0IHdo
ZW4gaXQgYnJhbmNoZXMsIHNvIHRoZSBnZW5lcmF0b3IgbXVzdCBkbyBzb21lIGtpbmQKICAgICAg
ICAgb2YgdGVybWluYXRpb24uIEluIFdhc20gdGhpcyBpcyB1c2VkIHRvIHRyYXAgYW5kIHVud2lu
ZCBiYWNrIHRvIEpTLiBNdXN0IHVzZSB0aGUKICAgICAgICAgV2FzbUJvdW5kc0NoZWNrVmFsdWUg
Y2xhc3MuPC9kZD4KIAotLSAKMi4xMC4xCgo=
</data>
<flag name="commit-queue"
          id="328078"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306773</attachid>
            <date>2017-04-10 21:29:21 -0700</date>
            <delta_ts>2017-04-11 16:48:32 -0700</delta_ts>
            <desc>Small fix</desc>
            <filename>0001-fast-memories-everywhere.patch</filename>
            <type>text/plain</type>
            <size>80772</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBkOTQ0OTZhZDc0ZGY5MzA2MTkzZTIwZmFkZGUxYTMzZDljMTM5YTMzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDYgQXByIDIwMTcgMTU6MTQ6NDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBmYXN0LW1l
bW9yaWVzLWV2ZXJ5d2hlcmUKCi0tLQogSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMTMgKy0KIEpTVGVzdHMvd2FzbS9XQVNNLmpzICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDMwICsrCiAuLi4vd2FzbS9mdW5jdGlvbi10ZXN0cy9t
ZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcyB8IDEzMCArKysrKysKIEpTVGVzdHMvd2FzbS9mdW5j
dGlvbi10ZXN0cy9tZW1vcnktbXVsdGlhZ2VudC5qcyAgIHwgMTE3ICsrKysrKwogSlNUZXN0cy93
YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcyAgICAgICAgfCAgMTUgKwogSlNUZXN0
cy93YXNtL3V0aWxpdGllcy5qcyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgICAgICAgICAgfCAgMzQgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcCAgICAgICAgICAgIHwgICAz
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAgICAgICAgICAgICAgICB8
ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3Bw
ICAgfCAgMjEgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmggIHwgIDE0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5j
cHAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAg
ICAgICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwICAgICAgICAgICAgICAgIHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmggICAgICAgICAgICAgICAgICB8ICAxMyArCiAuLi4vSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgIDQwICstCiAuLi4vSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCB8ICAgMiArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAgICAgfCA0MzYgKysrKysrKysr
KysrKystLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggICAg
ICAgICAgICB8ICAxOSArLQogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCAg
ICAgICAgICAgICAgfCAgIDggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oIHwgICAxICsKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuY3BwIHwgICA0ICsKIFNvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxIC0KIFNvdXJjZS9XVEYvd3RmL1ZNVGFncy5oICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICstCiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jl
c291cmNlVXNhZ2VEYXRhLmNwcCAgICAgICAgICB8ICAgMyArLQogU291cmNlL1dlYkNvcmUvcGFn
ZS9SZXNvdXJjZVVzYWdlRGF0YS5oICAgICAgICAgICAgfCAgMTUgKy0KIC4uLi9wYWdlL2NvY29h
L1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0gICAgICAgIHwgICAzICstCiAuLi4vV2ViQ29y
ZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbSB8ICAgNSArLQogLi4uL2Rv
Y3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwgICAgICAgfCAgIDQgKy0KIDMx
IGZpbGVzIGNoYW5nZWQsIDc4NyBpbnNlcnRpb25zKCspLCAyMDcgZGVsZXRpb25zKC0pCiBjcmVh
dGUgbW9kZSAxMDA2NDQgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3Mt
cGFzdC00Z2liLmpzCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRl
c3RzL21lbW9yeS1tdWx0aWFnZW50LmpzCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL0J1aWxk
ZXIuanMgYi9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcwppbmRleCA4ZmY1ZGNlLi5kZWU3ODZkIDEw
MDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcworKysgYi9KU1Rlc3RzL3dhc20vQnVp
bGRlci5qcwpAQCAtMjcsMTIgKzI3LDcgQEAgaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2Vy
dC5qcyc7CiBpbXBvcnQgKiBhcyBCdWlsZFdlYkFzc2VtYmx5IGZyb20gJ0J1aWxkZXJfV2ViQXNz
ZW1ibHlCaW5hcnkuanMnOwogaW1wb3J0ICogYXMgTExCIGZyb20gJ0xvd0xldmVsQmluYXJ5Lmpz
JzsKIGltcG9ydCAqIGFzIFdBU00gZnJvbSAnV0FTTS5qcyc7Ci0KLWNvbnN0IF90b0phdmFTY3Jp
cHROYW1lID0gbmFtZSA9PiB7Ci0gICAgY29uc3QgY2FtZWxDYXNlID0gbmFtZS5yZXBsYWNlKC8o
W15hLXowLTldLikvZywgYyA9PiBjWzFdLnRvVXBwZXJDYXNlKCkpOwotICAgIGNvbnN0IENhbWVs
Q2FzZSA9IGNhbWVsQ2FzZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNhbWVsQ2FzZS5zbGlj
ZSgxKTsKLSAgICByZXR1cm4gQ2FtZWxDYXNlOwotfTsKK2ltcG9ydCAqIGFzIHV0aWwgZnJvbSAn
dXRpbGl0aWVzLmpzJzsKIAogY29uc3QgX2lzVmFsaWRWYWx1ZSA9ICh2YWx1ZSwgdHlwZSkgPT4g
ewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMjI1LDcgKzIyMCw3IEBAIGNvbnN0IF9pbXBvcnRH
bG9iYWxDb250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsK
ICAgICAgICAgICAgIEVuZDogKCkgPT4gbmV4dEJ1aWxkZXIKICAgICAgICAgfTsKICAgICAgICAg
Zm9yIChsZXQgb3Agb2YgV0FTTS5kZXNjcmlwdGlvbi52YWx1ZV90eXBlKSB7Ci0gICAgICAgICAg
ICBnbG9iYWxCdWlsZGVyW190b0phdmFTY3JpcHROYW1lKG9wKV0gPSAobW9kdWxlLCBmaWVsZCwg
bXV0YWJpbGl0eSkgPT4geworICAgICAgICAgICAgZ2xvYmFsQnVpbGRlclt1dGlsLnRvSmF2YVNj
cmlwdE5hbWUob3ApXSA9IChtb2R1bGUsIGZpZWxkLCBtdXRhYmlsaXR5KSA9PiB7CiAgICAgICAg
ICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG1vZHVsZSwgYEltcG9ydCBnbG9iYWwgbW9kdWxlIHNo
b3VsZCBiZSBhIHN0cmluZywgZ290ICIke21vZHVsZX0iYCk7CiAgICAgICAgICAgICAgICAgYXNz
ZXJ0LmlzU3RyaW5nKGZpZWxkLCBgSW1wb3J0IGdsb2JhbCBmaWVsZCBzaG91bGQgYmUgYSBzdHJp
bmcsIGdvdCAiJHtmaWVsZH0iYCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG11
dGFiaWxpdHksIGBJbXBvcnQgZ2xvYmFsIG11dGFiaWxpdHkgc2hvdWxkIGJlIGEgc3RyaW5nLCBn
b3QgIiR7bXV0YWJpbGl0eX0iYCk7CkBAIC0zMTgsNyArMzEzLDcgQEAgY29uc3QgX2NoZWNrSW1t
cyA9IChvcCwgaW1tcywgZXhwZWN0ZWRJbW1zLCByZXQpID0+IHsKIGNvbnN0IF9jcmVhdGVGdW5j
dGlvbkJ1aWxkZXIgPSAoZnVuYywgYnVpbGRlciwgcHJldmlvdXNCdWlsZGVyKSA9PiB7CiAgICAg
bGV0IGZ1bmN0aW9uQnVpbGRlciA9IHt9OwogICAgIGZvciAoY29uc3Qgb3AgaW4gV0FTTS5kZXNj
cmlwdGlvbi5vcGNvZGUpIHsKLSAgICAgICAgY29uc3QgbmFtZSA9IF90b0phdmFTY3JpcHROYW1l
KG9wKTsKKyAgICAgICAgY29uc3QgbmFtZSA9IHV0aWwudG9KYXZhU2NyaXB0TmFtZShvcCk7CiAg
ICAgICAgIGNvbnN0IHZhbHVlID0gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbb3BdLnZhbHVlOwog
ICAgICAgICBjb25zdCByZXQgPSBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF1bInJldHVybiJd
OwogICAgICAgICBjb25zdCBwYXJhbSA9IFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlW29wXS5wYXJh
bWV0ZXI7CkBAIC01NDIsNyArNTM3LDcgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAobGV0IG9wIG9mIFdBU00uZGVzY3JpcHRpb24udmFsdWVfdHlw
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsQnVpbGRlcltfdG9KYXZhU2NyaXB0
TmFtZShvcCldID0gKGluaXRWYWx1ZSwgbXV0YWJpbGl0eSkgPT4geworICAgICAgICAgICAgICAg
ICAgICAgICAgZ2xvYmFsQnVpbGRlclt1dGlsLnRvSmF2YVNjcmlwdE5hbWUob3ApXSA9IChpbml0
VmFsdWUsIG11dGFiaWxpdHkpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmRh
dGEucHVzaCh7IHR5cGU6IG9wLCBvcDogb3AgKyAiLmNvbnN0IiwgbXV0YWJpbGl0eTogX25vcm1h
bGl6ZU11dGFiaWxpdHkobXV0YWJpbGl0eSksIGluaXRWYWx1ZSB9KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gX2Vycm9ySGFuZGxpbmdQcm94eUZvcihnbG9iYWxCdWlsZGVy
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH07CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
V0FTTS5qcyBiL0pTVGVzdHMvd2FzbS9XQVNNLmpzCmluZGV4IDFiYjc5YjguLjFlNjRjYWUgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9XQVNNLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9XQVNNLmpz
CkBAIC00NCwzICs0NCwzMyBAQCBleHBvcnQgY29uc3QgaXNWYWxpZEJsb2NrVHlwZSA9IHYgPT4g
X2Jsb2NrVHlwZVNldC5oYXModik7CiBleHBvcnQgY29uc3QgZXh0ZXJuYWxLaW5kVmFsdWUgPSBf
bWFwVmFsdWVzKGRlc2NyaXB0aW9uLmV4dGVybmFsX2tpbmQpOwogZXhwb3J0IGNvbnN0IHNlY3Rp
b25zID0gT2JqZWN0LmtleXMoZGVzY3JpcHRpb24uc2VjdGlvbik7CiBleHBvcnQgY29uc3Qgc2Vj
dGlvbkVuY29kaW5nVHlwZSA9IGRlc2NyaXB0aW9uLnNlY3Rpb25bc2VjdGlvbnNbMF1dLnR5cGU7
CisKK2V4cG9ydCBmdW5jdGlvbiogb3Bjb2RlcyhjYXRlZ29yeSA9IHVuZGVmaW5lZCkgeworICAg
IGZvciAobGV0IG9wIGluIGRlc2NyaXB0aW9uLm9wY29kZSkKKyAgICAgICAgaWYgKGNhdGVnb3J5
ICE9PSB1bmRlZmluZWQgJiYgZGVzY3JpcHRpb24ub3Bjb2RlW29wXS5jYXRlZ29yeSA9PT0gY2F0
ZWdvcnkpCisgICAgICAgICAgICB5aWVsZCB7IG5hbWU6IG9wLCBvcGNvZGU6IGRlc2NyaXB0aW9u
Lm9wY29kZVtvcF0gfTsKK307CitleHBvcnQgY29uc3QgbWVtb3J5QWNjZXNzSW5mbyA9IG9wID0+
IHsKKyAgICAvLyAgICAgICAgICAgICAgICA8LS0tLS0tLS0tLS12YWx1ZVR5cGUtLS0tLS0tLS0t
LT4gIDwtLS0tLS0tdHlwZS0tLS0tLS0+PC0tLS0tLS0tLXdpZHRoLS0tLS0tLS0+ICA8LS1zaWdu
LS0+CisgICAgY29uc3QgY2xhc3NpZnkgPSAvKCg/OmkzMil8KD86aTY0KXwoPzpmMzIpfCg/OmY2
NCkpXC4oKD86bG9hZCl8KD86c3RvcmUpKSgoPzo4KT98KD86MTYpP3woPzozMik/KV8/KCg/OnN8
dSk/KS87CisgICAgY29uc3QgZm91bmQgPSBvcC5uYW1lLm1hdGNoKGNsYXNzaWZ5KTsKKyAgICBj
b25zdCB2YWx1ZVR5cGUgPSBmb3VuZFsxXTsKKyAgICBjb25zdCB0eXBlID0gZm91bmRbMl07Cisg
ICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChmb3VuZFszXSA/IGZvdW5kWzNdIDogdmFsdWVUeXBl
LnNsaWNlKDEpKTsKKyAgICBjb25zdCBzaWduID0gKCgpID0+IHsKKyAgICAgICAgc3dpdGNoIChm
b3VuZFs0XSkgeworICAgICAgICBjYXNlICJzIjogcmV0dXJuICJzaWduZWQiOworICAgICAgICBj
YXNlICJ1IjogcmV0dXJuICJ1bnNpZ25lZCI7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiAiYWdu
b3N0aWMiOworICAgICAgICB9CisgICAgfSkoKTsKKyAgICByZXR1cm4geyB2YWx1ZVR5cGUsIHR5
cGUsIHdpZHRoLCBzaWduIH07Cit9OworCitleHBvcnQgY29uc3QgY29uc3RGb3JWYWx1ZVR5cGUg
PSB2YWx1ZVR5cGUgPT4geworICAgIGZvciAobGV0IG9wIGluIGRlc2NyaXB0aW9uLm9wY29kZSkK
KyAgICAgICAgaWYgKG9wLmVuZHNXaXRoKCIuY29uc3QiKSAmJiBkZXNjcmlwdGlvbi5vcGNvZGVb
b3BdWyJyZXR1cm4iXSA9PSB2YWx1ZVR5cGUpCisgICAgICAgICAgICByZXR1cm4gb3A7CisgICAg
dGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiBubyBjb25zdCB0eXBlIGZv
ciAke3ZhbHVlVHlwZX1gKTsKK307CisKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlv
bi10ZXN0cy9tZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlv
bi10ZXN0cy9tZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kMWE1ZjAzCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3MtcGFzdC00Z2liLmpzCkBAIC0wLDAgKzEsMTMwIEBA
CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKK2ltcG9ydCAqIGFzIGFzc2Vy
dCBmcm9tICcuLi9hc3NlcnQuanMnOworaW1wb3J0ICogYXMgTExCIGZyb20gJy4uL0xvd0xldmVs
QmluYXJ5LmpzJzsKK2ltcG9ydCAqIGFzIFdBU00gZnJvbSAnLi4vV0FTTS5qcyc7CitpbXBvcnQg
KiBhcyB1dGlsIGZyb20gJy4uL3V0aWxpdGllcy5qcyc7CisKK2NvbnN0IHZlcmJvc2UgPSBmYWxz
ZTsKKworY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7Citjb25zdCBmb3VyR2lCID0gcGFnZVNp
emUgKiA2NTUzNjsKK2NvbnN0IGluaXRpYWwgPSA2NDsKK2NvbnN0IG1heGltdW0gPSAxMjg7CisK
Ky8vIFdoZW4gdXNpbmcgZmFzdCBtZW1vcmllcywgd2UgYWxsb2NhdGUgYSByZWR6b25lIGFmdGVy
IHRoZSA0R2lCIGh1Z2UKKy8vIGFsbG9jYXRpb24uIFRoaXMgcmVkem9uZSBpcyB1c2VkIHRvIHRy
YXAgcmVnK2ltbSBhY2Nlc3NlcyB3aGljaCBleGNlZWQKKy8vIDMyLWJpdHMuIEFueXRoaW5nIHBh
c3QgNEdpQiBtdXN0IHRyYXAsIGJ1dCB3ZSBjYW5ub3Qga25vdyBzdGF0aWNhbGx5IHRoYXQgaXQK
Ky8vIHdpbGwuCisKK2NvbnN0IG9mZnNldHMgPSBbCisgICAgMCwKKyAgICAxLAorICAgIDIsCisg
ICAgMTAyNCwKKyAgICBwYWdlU2l6ZSwKKyAgICBwYWdlU2l6ZSArIHBhZ2VTaXplIC8gMiwKKyAg
ICBwYWdlU2l6ZSAqIDgsCisgICAgcGFnZVNpemUgKiAxNiwKKyAgICBwYWdlU2l6ZSAqIDEyOCwK
KyAgICBwYWdlU2l6ZSAqIDUxMiwKKyAgICBmb3VyR2lCIC8gNCAtIDQsCisgICAgZm91ckdpQiAv
IDQgLSAzLAorICAgIGZvdXJHaUIgLyA0IC0gMiwKKyAgICBmb3VyR2lCIC8gNCAtIDEsCisgICAg
Zm91ckdpQiAvIDQsCisgICAgZm91ckdpQiAvIDQgKyAxLAorICAgIGZvdXJHaUIgLyA0ICsgMiwK
KyAgICBmb3VyR2lCIC8gNCArIDMsCisgICAgZm91ckdpQiAvIDQgKyA0LAorICAgIGZvdXJHaUIg
LyAyIC0gNCwKKyAgICBmb3VyR2lCIC8gMiAtIDMsCisgICAgZm91ckdpQiAvIDIgLSAyLAorICAg
IGZvdXJHaUIgLyAyIC0gMSwKKyAgICBmb3VyR2lCIC8gMiwKKyAgICBmb3VyR2lCIC8gMiArIDEs
CisgICAgZm91ckdpQiAvIDIgKyAyLAorICAgIGZvdXJHaUIgLyAyICsgMywKKyAgICBmb3VyR2lC
IC8gMiArIDQsCisgICAgKGZvdXJHaUIgLyA0KSAqIDMsCisgICAgZm91ckdpQiAtIDQsCisgICAg
Zm91ckdpQiAtIDMsCisgICAgZm91ckdpQiAtIDIsCisgICAgZm91ckdpQiAtIDEsCitdOworCitm
b3IgKGxldCBtZW1vcnlEZWNsYXJhdGlvbiBvZiBbeyBpbml0aWFsOiBpbml0aWFsIH0sIHsgaW5p
dGlhbDogaW5pdGlhbCwgbWF4aW11bTogbWF4aW11bSB9XSkgeworICAgIGZ1bGxHQygpOworCisg
ICAgLy8gUmUtdXNlIGEgc2luZ2xlIG1lbW9yeSBzbyB0ZXN0cyBhcmUgbW9yZSBsaWtlbHkgdG8g
Z2V0IGEgZmFzdCBtZW1vcnkuCisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1l
bW9yeShtZW1vcnlEZWNsYXJhdGlvbik7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50
KFdlYkFzc2VtYmx5TWVtb3J5TW9kZShtZW1vcnkpKTsKKyAgICBjb25zdCBidWYgPSBuZXcgVWlu
dDhBcnJheShtZW1vcnkuYnVmZmVyKTsKKworICAgIC8vIEVudW1lcmF0ZSBhbGwgbWVtb3J5IGFj
Y2VzcyB0eXBlcy4KKyAgICBmb3IgKGNvbnN0IG9wIG9mIFdBU00ub3Bjb2RlcygibWVtb3J5Iikp
IHsKKyAgICAgICAgY29uc3QgaW5mbyA9IFdBU00ubWVtb3J5QWNjZXNzSW5mbyhvcCk7CisKKyAg
ICAgICAgLy8gVGhlIGFjY2Vzc2VzIHNob3VsZCBmYXVsdCBldmVuIGlmIG9ubHkgdGhlIGxhc3Qg
Ynl0ZSBpcyBvZmYgdGhlIGVuZC4KKyAgICAgICAgbGV0IHdpZ2dsZXMgPSBbMF07CisgICAgICAg
IGZvciAobGV0IHdpZ2dsZSA9IDA7IHdpZ2dsZSAhPT0gaW5mby53aWR0aCAvIDg7ICsrd2lnZ2xl
KQorICAgICAgICAgICAgd2lnZ2xlcy5wdXNoKHdpZ2dsZSk7CisKKyAgICAgICAgbGV0IGJ1aWxk
ZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAg
ICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZWNsYXJhdGlvbiku
RW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0
KCk7CisKKyAgICAgICAgZm9yIChsZXQgb2Zmc2V0IG9mIG9mZnNldHMpCisgICAgICAgICAgICBz
d2l0Y2ggKGluZm8udHlwZSkgeworICAgICAgICAgICAgY2FzZSAibG9hZCI6IGJ1aWxkZXIgPSBi
dWlsZGVyLkZ1bmN0aW9uKCJnZXRfIiArIG9mZnNldCk7IGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSAic3RvcmUiOiBidWlsZGVyID0gYnVpbGRlci5GdW5jdGlvbigic2V0XyIgKyBvZmZzZXQpOyBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRp
b24gcHJvYmxlbTogdW5rbm93biBtZW1vcnkgYWNjZXNzIHR5cGUgJHtpbmZvLnR5cGV9YCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIuRW5kKCkuQ29kZSgpOwor
CisgICAgICAgIGNvbnN0IGFsaWduID0gMzsgLy8gTm8gbmVlZCB0byBiZSBwcmVjaXNlLCBpdCdz
IGp1c3QgYSBoaW50LgorICAgICAgICBjb25zdCBjb25zdEluc3RyID0gdXRpbC50b0phdmFTY3Jp
cHROYW1lKFdBU00uY29uc3RGb3JWYWx1ZVR5cGUoaW5mby52YWx1ZVR5cGUpKTsKKyAgICAgICAg
Y29uc3QgaW5zdHIgPSB1dGlsLnRvSmF2YVNjcmlwdE5hbWUob3AubmFtZSk7CisgICAgICAgIGZv
ciAobGV0IG9mZnNldCBvZiBvZmZzZXRzKQorICAgICAgICAgICAgc3dpdGNoIChpbmZvLnR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgImxvYWQiOgorICAgICAgICAgICAgICAgIGJ1aWxkZXIgPSBi
dWlsZGVyLkZ1bmN0aW9uKCJnZXRfIiArIG9mZnNldCwgeyBwYXJhbXM6IFsiaTMyIl0gfSkuR2V0
TG9jYWwoMClbaW5zdHJdKGFsaWduLCBvZmZzZXQpLkRyb3AoKS5FbmQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgInN0b3JlIjoKKyAgICAgICAgICAgICAgICBi
dWlsZGVyID0gYnVpbGRlci5GdW5jdGlvbigic2V0XyIgKyBvZmZzZXQsIHsgcGFyYW1zOiBbImkz
MiJdIH0pLkdldExvY2FsKDApW2NvbnN0SW5zdHJdKDB4ZGVhZClbaW5zdHJdKGFsaWduLCBvZmZz
ZXQpLkVuZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06
IHVua25vd24gbWVtb3J5IGFjY2VzcyB0eXBlICR7aW5mby50eXBlfWApOworICAgICAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIuRW5kKCk7CisKKyAgICAgICAg
Y29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCB7IGltcDogeyBtZW1vcnk6IG1l
bW9yeSB9IH0pOworCisgICAgICAgIGZvciAobGV0IG9mZnNldCBvZiBvZmZzZXRzKSB7CisgICAg
ICAgICAgICBmb3IgKGxldCB3aWdnbGUgb2Ygd2lnZ2xlcykgeworICAgICAgICAgICAgICAgIGNv
bnN0IGFkZHJlc3MgPSBMTEIudmFydWludDMyTWF4IC0gb2Zmc2V0IC0gd2lnZ2xlOworICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBwcmludChgJHtvcC5u
YW1lLnBhZFN0YXJ0KDE2LCAnICcpfTogYmFzZSBhZGRyZXNzICR7YWRkcmVzcyA+IDAgPyAnMHgn
IDogJyAgJ30ke2FkZHJlc3MudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIGFkZHJlc3MgPiAwID8g
JzAnIDogJyAnKX0gKyBvZmZzZXQgMHgke29mZnNldC50b1N0cmluZygxNikucGFkU3RhcnQoOCwg
JzAnKX0gLSB3aWdnbGUgJHt3aWdnbGV9ID0gZWZmZWN0aXZlIGFkZHJlc3MgMHgkeyhhZGRyZXNz
ICsgb2Zmc2V0IC0gd2lnZ2xlKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsICcwJyl9YCk7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChpbmZvLnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNl
ICJsb2FkIjoKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5j
ZS5leHBvcnRzWyJnZXRfIiArIG9mZnNldF0oYWRkcmVzcyksIFdlYkFzc2VtYmx5LlJ1bnRpbWVF
cnJvciwgYE91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2Vzc2ApOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJzdG9yZSI6CisgICAgICAgICAgICAgICAg
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0c1sic2V0XyIgKyBvZmZzZXRd
KGFkZHJlc3MpLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsIGBPdXQgb2YgYm91bmRzIG1lbW9y
eSBhY2Nlc3NgKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmtub3du
IG1lbW9yeSBhY2Nlc3MgdHlwZSAke2luZm8udHlwZX1gKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdWxsR0MoKTsKKyAgICB9CisKKyAg
ICAvLyBPbmx5IGNoZWNrIHRoYXQgdGhlIG1lbW9yeSB3YXMgdW50b3VjaGVkIGF0IHRoZSB2ZXJ5
IGVuZCwgYmVmb3JlIHRocm93aW5nIGl0IGF3YXkgZW50aXJlbHkuCisgICAgZm9yIChsZXQgaWR4
ID0gMDsgaWR4IDwgYnVmLmJ5dGVMZW5ndGg7ICsraWR4KQorICAgICAgICBhc3NlcnQuZXEoYnVm
W2lkeF0sIDApOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21l
bW9yeS1tdWx0aWFnZW50LmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1t
dWx0aWFnZW50LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZWM3YzIK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11
bHRpYWdlbnQuanMKQEAgLTAsMCArMSwxMTcgQEAKK2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0
OworCitjb25zdCB2ZXJib3NlID0gZmFsc2U7CisKKy8vIFN0YXJ0IG11bHRpcGxlIGFnZW50cyBh
bmQgY3JlYXRlIFdlYkFzc2VtYmx5Lk1lbW9yeSBmcm9tIGVhY2ggb2YKKy8vIHRoZW0uIFBlcmZv
cm0gd3JpdGVzIGludG8gZWFjaCBtZW1vcnksIGFuZCB0aGVuIGNoZWNrIHRoYXQgdGhlIG1lbW9y
eSBvbmx5CisvLyBjb250YWlucyB0aGF0IGFnZW50J3Mgd3JpdGVzLiBUaGlzIHdvdWxkIGZpbmQg
YnVncyB3aGVyZSBhbiBpbXBsZW1lbnRhdGlvbidzCisvLyBtZW1vcnkgcmV1c2UgaXMgYnVnZ3ku
CisKKy8vIFVzZSB0aGUgYWdlbnQgc3VwcG9ydCBmcm9tIHRlc3QyNjI6IGh0dHBzOi8vZ2l0aHVi
LmNvbS90YzM5L3Rlc3QyNjIvYmxvYi9tYXN0ZXIvSU5URVJQUkVUSU5HLm1kI2hvc3QtZGVmaW5l
ZC1mdW5jdGlvbnMKKworY29uc3QgdGVzdEl0ZXJhdGlvbnMgPSA4OworY29uc3QgbnVtQWdlbnRz
ID0gODsKK2NvbnN0IGluaXRpYWxQYWdlcyA9IDY0OworY29uc3QgbnVtV3JpdGVzID0gMTAyNDsK
KworY29uc3Qgc3RhdGVXYWl0ID0gMDsKK2NvbnN0IHN0YXRlUmVhZHkgPSAxOworY29uc3Qgc3Rh
dGVDaGVjayA9IDI7CisKK2NvbnN0IHN0YXJ0QWdlbnRzID0gbnVtQWdlbnRzVG9TdGFydCA9PiB7
CisgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBudW1BZ2VudHNUb1N0YXJ0OyArK2EpIHsKKyAgICAg
ICAgY29uc3QgYWdlbnRTY3JpcHQgPSBgCisgICAgICAgIGxldCBzdGF0ZSA9ICR7c3RhdGVXYWl0
fTsKKyAgICAgICAgbGV0IHU4OworCisgICAgICAgIGlmICgke3ZlcmJvc2V9KQorICAgICAgICAg
ICAgcHJpbnQoIkFnZW50ICR7YX0gc3RhcnRlZCIpOworICAgICAgICAkLmFnZW50LnJlcG9ydCgi
QWdlbnQgJHthfSBzdGFydGVkIik7CisKKyAgICAgICAgJC5hZ2VudC5yZWNlaXZlQnJvYWRjYXN0
KChzYWIsIG5ld1N0YXRlKSA9PiB7CisgICAgICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAg
ICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSByZWNlaXZlZCBicm9hZGNhc3QiKTsKKyAgICAg
ICAgICAgIHU4ID0gbmV3IFVpbnQ4QXJyYXkoc2FiKTsKKyAgICAgICAgICAgIHN0YXRlID0gbmV3
U3RhdGU7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnN0IGJ1c3lXYWl0Rm9yVmFsdWUgPSB2
YWx1ZSA9PiB7CisgICAgICAgICAgICAvLyBCdXN5LXdhaXQgc28gdGhhdCBvbmNlIHRoZSBTQUIg
d3JpdGUgb2NjdXJzIGFsbCBhZ2VudHMgdHJ5IHRvIGNyZWF0ZSBhIG1lbW9yeSBhdCB0aGUgc2Ft
ZSB0aW1lLgorICAgICAgICAgICAgd2hpbGUgKEF0b21pY3MubG9hZCh1OCwgMCkgIT09IHZhbHVl
KSA7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCR7dmVyYm9zZX0pCisgICAgICAgICAgICBw
cmludCgiQWdlbnQgJHthfSB3YWl0cyIpOworICAgICAgICAkLmFnZW50LnJlcG9ydCgiQWdlbnQg
JHthfSB3YWl0cyIpOworICAgICAgICB3aGlsZSAoc3RhdGUgPT09ICR7c3RhdGVXYWl0fSkgOwor
ICAgICAgICAkLmFnZW50LnJlcG9ydCgiQWdlbnQgJHthfSByZWNlaXZlZCBTQUIiKTsKKyAgICAg
ICAgLy8gVXNlIGl0IGZvciBmYXN0ZXIgc3RhdGUgY2hhbmdlIHNvIGFsbCBhZ2VudHMgYXJlIG1v
cmUgbGlrZWx5IHRvIGV4ZWN1dGUgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgYnVzeVdhaXRG
b3JWYWx1ZSgke3N0YXRlUmVhZHl9KTsKKworICAgICAgICBsZXQgd2FzbU1lbW9yeSA9IG5ldyBX
ZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiAke2luaXRpYWxQYWdlc30gfSk7CisgICAgICAg
IGxldCBtZW1vcnkgPSBuZXcgVWludDhBcnJheSgod2FzbU1lbW9yeSkuYnVmZmVyKTsKKyAgICAg
ICAgaWYgKCR7dmVyYm9zZX0pCisgICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSBwZXJmb3Jt
aW5nIHdyaXRlcyIpOworICAgICAgICBmb3IgKGxldCB3cml0ZSA9IDA7IHdyaXRlIDwgJHtudW1X
cml0ZXN9OyArK3dyaXRlKSB7CisgICAgICAgICAgICAvLyBQZXJmb3JtIHdyaXRlcyBvZiBvdXIg
YWdlbnQgbnVtYmVyIGF0IGEgcmFuZG9tIGxvY2F0aW9uLiBUaGlzIG1lbW9yeSBzaG91bGQgbm90
IGJlIHNoYXJlZCwgaWYgd2Ugc2VlIHdyaXRlcyBvZiBvdGhlciB2YWx1ZXMgdGhlbiBzb21ldGhp
bmcgd2VudCB3cm9uZy4KKyAgICAgICAgICAgIGNvbnN0IGlkeCA9IChNYXRoLnJhbmRvbSgpICog
JHtwYWdlU2l6ZX0gKiAke2luaXRpYWxQYWdlc30pIHwgMDsKKyAgICAgICAgICAgIG1lbW9yeVtp
ZHhdID0gJHthfTsKKyAgICAgICAgfQorICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAg
ICAgIHByaW50KCJBZ2VudCAke2F9IHdyaXRlcyBwZXJmb3JtZWQiKTsKKyAgICAgICAgJC5hZ2Vu
dC5yZXBvcnQoIkFnZW50ICR7YX0gcGVyZm9ybWVkIHdyaXRlcyIpOworICAgICAgICBidXN5V2Fp
dEZvclZhbHVlKCR7c3RhdGVDaGVja30pOworCisgICAgICAgIGlmICgke3ZlcmJvc2V9KQorICAg
ICAgICAgICAgcHJpbnQoIkFnZW50ICR7YX0gY2hlY2tpbmciKTsKKyAgICAgICAgLy8gQ2hlY2sg
dGhhdCBvdXIgbWVtb3J5IG9ubHkgY29udGFpbnMgMCBhbmQgb3VyIGFnZW50IG51bWJlci4KKyAg
ICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgJHtwYWdlU2l6ZX0gKiAke2luaXRpYWxQYWdl
c307ICsraWR4KQorICAgICAgICAgICAgaWYgKG1lbW9yeVtpZHhdICE9PSAwICYmIG1lbW9yeVtp
ZHhdICE9PSAke2F9KQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWdlbnQgJHth
fSBmb3VuZCB1bmV4cGVjdGVkIHZhbHVlICIgKyBtZW1vcnlbaWR4XSArICIgYXQgbG9jYXRpb24g
IiArIGlkeCk7CisgICAgICAgICQuYWdlbnQucmVwb3J0KCJBZ2VudCAke2F9IGNoZWNrcyBvdXQg
T0siKTsKKyAgICAgICAgJC5hZ2VudC5sZWF2aW5nKCk7CisgICAgICAgIGA7CisKKyAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICBwcmludChgU3RhcnRpbmcgYWdlbnQgJHthfWApOwor
ICAgICAgICAkLmFnZW50LnN0YXJ0KGFnZW50U2NyaXB0KTsKKyAgICB9Cit9OworCitjb25zdCB3
YWl0Rm9yQWdlbnRzID0gbnVtQWdlbnRzVG9XYWl0Rm9yID0+IHsKKyAgICBmb3IgKGxldCBhID0g
MDsgYSA8IG51bUFnZW50c1RvV2FpdEZvcjsgKythKSB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICBjb25zdCByZXBvcnQgPSAkLmFnZW50LmdldFJlcG9ydCgpOworICAgICAg
ICAgICAgaWYgKHJlcG9ydCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICQuYWdlbnQuc2xl
ZXAoMSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBwcmludChgUmVjZWl2ZWQ6ICR7cmVw
b3J0fWApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9OworCitjb25z
dCBicm9hZGNhc3RUb0FnZW50cyA9IChzYWIsIG5ld1N0YXRlKSA9PiB7CisgICAgJC5hZ2VudC5i
cm9hZGNhc3Qoc2FiLCBuZXdTdGF0ZSk7Cit9OworCitjb25zdCBzYWIgPSBuZXcgU2hhcmVkQXJy
YXlCdWZmZXIoMTAyNCk7Citjb25zdCB1OCA9IG5ldyBVaW50OEFycmF5KHNhYik7CisKK2ZvciAo
bGV0IGl0ID0gMDsgaXQgPCB0ZXN0SXRlcmF0aW9uczsgKytpdCkgeworICAgIHN0YXJ0QWdlbnRz
KG51bUFnZW50cyk7CisgICAgd2FpdEZvckFnZW50cyhudW1BZ2VudHMpOworICAgIGJyb2FkY2Fz
dFRvQWdlbnRzKHNhYiwgc3RhdGVSZWFkeSk7CisgICAgd2FpdEZvckFnZW50cyhudW1BZ2VudHMp
OworICAgICQuYWdlbnQuc2xlZXAoMSk7CisgICAgQXRvbWljcy5zdG9yZSh1OCwgMCwgc3RhdGVS
ZWFkeSk7CisgICAgd2FpdEZvckFnZW50cyhudW1BZ2VudHMpOworICAgICQuYWdlbnQuc2xlZXAo
MSk7CisgICAgQXRvbWljcy5zdG9yZSh1OCwgMCwgc3RhdGVDaGVjayk7CisgICAgd2FpdEZvckFn
ZW50cyhudW1BZ2VudHMpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludCgiRXZlcnl0
aW5nIHdhcyBmaW5lIik7CisgICAgJC5hZ2VudC5zbGVlcCgxKTsKK30KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL2V4dGVuc2lvbi1NZW1vcnlNb2RlLmpzCmluZGV4IDkxOTFjZWM0Li41NjA4NTI2IDEw
MDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL2V4dGVuc2lvbi1NZW1vcnlNb2RlLmpzCisr
KyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMKQEAgLTIsNiAr
Miw3IEBAIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogaW1wb3J0ICogYXMg
YXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiAKIGNvbnN0IGl0ZXJhdGlvbnMgPSAzMjsKK2Nv
bnN0IHZlcmJvc2UgPSBmYWxzZTsKIAogLy8gVGhpcyBBUEkgaXNuJ3QgcGFydCBvZiBXZWJBc3Nl
bWJseSdzIG9mZmljaWFsIHNwZWMuIEl0IGlzIHVzZSBmb3IgdGVzdGluZyB3aXRoaW4gdGhlIHNo
ZWxsLgogCkBAIC0yMSw2ICsyMiw4IEBAIGFzc2VydC50aHJvd3MoKCkgPT4gV2ViQXNzZW1ibHlN
ZW1vcnlNb2RlKG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDogMSwgZWxlCiAKIGNvbnN0
IHZhbGlkYXRlTW9kZSA9IHdoYXQgPT4gewogICAgIGNvbnN0IG1vZGUgPSBXZWJBc3NlbWJseU1l
bW9yeU1vZGUod2hhdCk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGAgICAgJHtt
b2RlfWApOwogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgIlNpZ25hbGluZyI6CiAgICAg
ICAgIGJyZWFrOwpAQCAtMzksNiArNDIsOCBAQCBjb25zdCBpbnN0YW50aWF0ZSA9IGJ1aWxkZXIg
PT4gewogfTsKIAogKGZ1bmN0aW9uIHRlc3RNZW1vcnlOb01heCgpIHsKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgcHJpbnQoYHRlc3RNZW1vcnlOb01heGApOwogICAgIGxldCBtZW1vcmllcyA9
IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlvbnM7ICsraSkKICAgICAgICAg
bWVtb3JpZXMucHVzaCh2YWxpZGF0ZU1vZGUobmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRp
YWw6IGkgfSkpKTsKQEAgLTQ4LDYgKzUzLDggQEAgY29uc3QgaW5zdGFudGlhdGUgPSBidWlsZGVy
ID0+IHsKIGZ1bGxHQygpOwogCiAoZnVuY3Rpb24gdGVzdE1lbW9yeSgpIHsKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgcHJpbnQoYHRlc3RNZW1vcnlgKTsKICAgICBsZXQgbWVtb3JpZXMgPSBb
XTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBpdGVyYXRpb25zOyArK2kpCiAgICAgICAgIG1l
bW9yaWVzLnB1c2godmFsaWRhdGVNb2RlKG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFs
OiBpLCBtYXhpbXVtOiBpIH0pKSk7CkBAIC01Nyw2ICs2NCw4IEBAIGZ1bGxHQygpOwogZnVsbEdD
KCk7CiAKIChmdW5jdGlvbiB0ZXN0SW5zdGFuY2VOb01lbW9yeSgpIHsKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgcHJpbnQoYHRlc3RJbnN0YW5jZU5vTWVtb3J5YCk7CiAgICAgbGV0IGluc3Rh
bmNlcyA9IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlvbnM7ICsraSkgewog
ICAgICAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCkBAIC02Niw2ICs3NSw4IEBA
IGZ1bGxHQygpOwogICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbnRpYXRlKGJ1aWxkZXIp
OwogICAgICAgICAvLyBOby1tZW1vcnkgaW5zdGFuY2VzIHNob3VsZCBuZXZlciBiZSBTaWduYWxp
bmc6IGl0IHdvdWxkIGJlIHdhc3RlZnVsLgogICAgICAgICBhc3NlcnQuZXEoV2ViQXNzZW1ibHlN
ZW1vcnlNb2RlKGluc3RhbmNlKSwgIkJvdW5kc0NoZWNraW5nIik7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgcHJpbnQoYCAgICAke1dlYkFzc2VtYmx5TWVtb3J5TW9kZShpbnN0
YW5jZSl9YCk7CiAgICAgICAgIGluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTsKICAgICB9CiAgICAg
cmV0dXJuIGluc3RhbmNlczsKQEAgLTc0LDYgKzg1LDggQEAgZnVsbEdDKCk7CiBmdWxsR0MoKTsK
IAogKGZ1bmN0aW9uIHRlc3RJbnN0YW5jZU5vTWF4KCkgeworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBwcmludChgdGVzdEluc3RhbmNlTm9NYXhgKTsKICAgICBsZXQgaW5zdGFuY2VzID0gW107
CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0aW9uczsgKytpKSB7CiAgICAgICAgIC8v
IE5vdGU6IG5vdCBleHBvcnRlZCEgVGhlIGludGVybmFsIEFQSSBjYW4gc3RpbGwgYWNjZXNzLgpA
QCAtODksNiArMTAyLDggQEAgZnVsbEdDKCk7CiBmdWxsR0MoKTsKIAogKGZ1bmN0aW9uIHRlc3RJ
bnN0YW5jZSgpIHsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYHRlc3RJbnN0YW5j
ZWApOwogICAgIGxldCBpbnN0YW5jZXMgPSBbXTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBp
dGVyYXRpb25zOyArK2kpIHsKICAgICAgICAgLy8gTm90ZTogbm90IGV4cG9ydGVkISBUaGUgaW50
ZXJuYWwgQVBJIGNhbiBzdGlsbCBhY2Nlc3MuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdXRp
bGl0aWVzLmpzIGIvSlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcwppbmRleCAxOWY5YjRlLi5iYzY5
YWQ3IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vdXRpbGl0aWVzLmpzCisrKyBiL0pTVGVzdHMv
d2FzbS91dGlsaXRpZXMuanMKQEAgLTc5LDYgKzc5LDEyIEBAIGNvbnN0IF9kdW1wID0gKHdoYXQs
IG5hbWUsIHBhZCA9ICcgICAgJykgPT4gewogICAgIHJldHVybiBzOwogfTsKIAorZXhwb3J0IGNv
bnN0IHRvSmF2YVNjcmlwdE5hbWUgPSBuYW1lID0+IHsKKyAgICBjb25zdCBjYW1lbENhc2UgPSBu
YW1lLnJlcGxhY2UoLyhbXmEtejAtOV0uKS9nLCBjID0+IGNbMV0udG9VcHBlckNhc2UoKSk7Cisg
ICAgY29uc3QgQ2FtZWxDYXNlID0gY2FtZWxDYXNlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsg
Y2FtZWxDYXNlLnNsaWNlKDEpOworICAgIHJldHVybiBDYW1lbENhc2U7Cit9OworCiAvLyBVc2Ug
dW5kZXJzY29yZSBuYW1lcyB0byBhdm9pZCBjbGFzaGluZyB3aXRoIGJ1aWx0aW4gbmFtZXMuCiBl
eHBvcnQgewogICAgIF9kdW1wIGFzIGR1bXAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCmluZGV4IDgyMGQ0YzEuLmI1ZWM3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0zMTQ0LDIyICszMTQ0LDQ2IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEIzOjpXYXNtQm91bmRzQ2hlY2s6IHsKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgICAgICBXYXNtQm91bmRzQ2hlY2tWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlLT5hczxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4oKTsKIAogICAgICAgICAgICAg
VmFsdWUqIHB0ciA9IHZhbHVlLT5jaGlsZCgwKTsKIAotICAgICAgICAgICAgQXJnIHRlbXAgPSBt
X2NvZGUubmV3VG1wKEdQKTsKLSAgICAgICAgICAgIGFwcGVuZChJbnN0KE1vdmUzMiwgdmFsdWUs
IHRtcChwdHIpLCB0ZW1wKSk7CisgICAgICAgICAgICBBcmcgcHRyUGx1c0ltbSA9IG1fY29kZS5u
ZXdUbXAoR1ApOworICAgICAgICAgICAgYXBwZW5kKEluc3QoTW92ZTMyLCB2YWx1ZSwgdG1wKHB0
ciksIHB0clBsdXNJbW0pKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+b2Zmc2V0KCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoaW1tKHZhbHVlLT5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAg
ICAgIGFwcGVuZChBZGQ2NCwgaW1tKHZhbHVlLT5vZmZzZXQoKSksIHRlbXApOworICAgICAgICAg
ICAgICAgICAgICBhcHBlbmQoQWRkNjQsIGltbSh2YWx1ZS0+b2Zmc2V0KCkpLCBwdHJQbHVzSW1t
KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQXJnIGJpZ0lt
bSA9IG1fY29kZS5uZXdUbXAoR1ApOwogICAgICAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0odmFsdWUtPm9mZnNldCgpKSwgYmlnSW1tKTsKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kKEFkZDY0LCBiaWdJbW0sIHRlbXApOworICAgICAgICAgICAgICAgICAgICBhcHBl
bmQoQWRkNjQsIGJpZ0ltbSwgcHRyUGx1c0ltbSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYXBwZW5kKEluc3QoQWlyOjpXYXNtQm91bmRzQ2hlY2ssIHZh
bHVlLCB0ZW1wLCBBcmcodmFsdWUtPnBpbm5lZEdQUigpKSkpOworCisgICAgICAgICAgICBBcmcg
bGltaXQ7CisgICAgICAgICAgICBpZiAodmFsdWUtPnBpbm5lZEdQUigpICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgICAgICAgICAgbGltaXQgPSBBcmcodmFsdWUtPnBpbm5lZEdQUigpKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFNpZ25hbGluZyBtZW1vcmllcyBk
b24ndCBwaW4gYSByZWdpc3RlciBiZWNhdXNlIG9ubHkgdGhlIGFjY2Vzc2VzIHdob3NlIHJlZytp
bW0gY291bGQgZXZlciBvdmVyZmxvdyA0R2lCK3JlZHpvbmUgbmVlZCB0byBiZSBjaGVja2VkLAor
ICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBkb24ndCB0aGluayB0aGVzZSB3aWxsIGJlIGZyZXF1
ZW50LiBBbGwgb3RoZXIgYWNjZXNzZXMgd2lsbCB0cmFwIGR1ZSB0byBQUk9UX05PTkUgcGFnZXMu
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBnb3QgaGVyZSBp
dCdzIGJlY2F1c2UgYSBtZW1vcnkgYWNjZXNzIGhhZCBhIHZlcnkgbGFyZ2Ugb2Zmc2V0LiBXZSBj
b3VsZCBjaGVjayB0aGF0IGl0IGRvZXNuJ3QgZXhjZWVkIDRHaUIrcmVkem9uZSBzaW5jZSB0aGF0
J3MKKyAgICAgICAgICAgICAgICAvLyB0ZWNobmljYWxseSB0aGUgbGltaXQgd2UgbmVlZCB0byBh
dm9pZCBvdmVyZmxvd2luZywgYnV0IGl0J3MgYmV0dGVyIGlmIHdlIHVzZSBhIHNtYWxsZXIgaW1t
ZWRpYXRlIHdoaWNoIGNvZGVnZW5zIG1vcmUgZWFzaWx5LgorICAgICAgICAgICAgICAgIC8vIFdl
IGtub3cgdGhhdCBhbnl0aGluZyBhYm92ZSB0aGUgZGVjbGFyZWQgJ21heGltdW0nIHdpbGwgdHJh
cCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0aGF0IG51bWJlci4gSWYgdGhlcmUgd2FzIG5v
IGRlY2xhcmVkCisgICAgICAgICAgICAgICAgLy8gJ21heGltdW0nIHRoZW4gd2Ugc3RpbGwga25v
dyB0aGF0IGFueSBhY2Nlc3MgYWJvdmUgNEdpQiB3aWxsIHRyYXAsIG5vIG5lZWQgdG8gYWRkIHRo
ZSByZWR6b25lLgorICAgICAgICAgICAgICAgIGxpbWl0ID0gbV9jb2RlLm5ld1RtcChHUCk7Cisg
ICAgICAgICAgICAgICAgc2l6ZV90IGxpbWl0VmFsdWUgPSB2YWx1ZS0+bWF4aW11bSgpID8gdmFs
dWUtPm1heGltdW0oKS5ieXRlcygpIDogc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbWl0VmFsdWUgPD0gdmFsdWUt
PnJlZHpvbmVMaW1pdCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW1tKGxpbWl0VmFsdWUpKQor
ICAgICAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgaW1tKGxpbWl0VmFsdWUpLCBsaW1pdCk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0obGltaXRWYWx1ZSksIGxpbWl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGFwcGVuZChJbnN0KEFpcjo6V2FzbUJvdW5kc0NoZWNrLCB2YWx1ZSwgcHRyUGx1c0ltbSwg
bGltaXQpKTsKKyNlbHNlCisgICAgICAgICAgICBhcHBlbmQoQWlyOjpPb3BzKTsKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCmluZGV4IDZlNmE5M2QuLmNjM2E1
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKQEAgLTQ3MCw3ICs0
NzAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCku
aGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAi
LCAqdmFsdWUpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURShtX3Byb2NlZHVyZS5jb2RlKCku
aXNQaW5uZWQodmFsdWUtPmFzPFdhc21Cb3VuZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSks
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5hczxXYXNtQm91
bmRzQ2hlY2tWYWx1ZT4oKS0+cGlubmVkR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUobV9wcm9jZWR1cmUuY29kZSgpLmlzUGlubmVkKHZhbHVlLT5h
czxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4oKS0+cGlubmVkR1BSKCkpLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKG1fcHJvY2VkdXJlLmNvZGUoKS53YXNtQm91bmRz
Q2hlY2tHZW5lcmF0b3IoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
LmNwcAppbmRleCA4YzkxMGFhLi42NWIxN2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKICNp
bmNsdWRlICJCM1ZhbHVlS2V5SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5o
IgorI2luY2x1ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQ29t
bWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAjaW5jbHVkZSA8d3RmL1N0
cmluZ1ByaW50U3RyZWFtLmg+CkBAIC02NjQsNyArNjY1LDggQEAgRWZmZWN0cyBWYWx1ZTo6ZWZm
ZWN0cygpIGNvbnN0CiAgICAgICAgIHJlc3VsdCA9IEVmZmVjdHM6OmZvckNoZWNrKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbUJvdW5kc0NoZWNrOgotICAgICAgICByZXN1bHQucmVh
ZHNQaW5uZWQgPSB0cnVlOworICAgICAgICBpZiAoYXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCkt
PnBpbm5lZEdQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXN1bHQucmVhZHNQ
aW5uZWQgPSB0cnVlOwogICAgICAgICByZXN1bHQuZXhpdHNTaWRld2F5cyA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgVXBzaWxvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcAppbmRleCBiM2EzMjkwLi44YWVjYzFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNr
VmFsdWUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAKICNp
ZiBFTkFCTEUoQjNfSklUKQogCkBAIC0zNCwxMCArMzUsMTEgQEAgV2FzbUJvdW5kc0NoZWNrVmFs
dWU6On5XYXNtQm91bmRzQ2hlY2tWYWx1ZSgpCiB7CiB9CiAKLVdhc21Cb3VuZHNDaGVja1ZhbHVl
OjpXYXNtQm91bmRzQ2hlY2tWYWx1ZShPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcg
cGlubmVkR1BSLCB1bnNpZ25lZCBvZmZzZXQpCitXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6V2FzbUJv
dW5kc0NoZWNrVmFsdWUoT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHB0ciwgR1BSUmVnIHBpbm5lZEdQ
UiwgdW5zaWduZWQgb2Zmc2V0LCBQYWdlQ291bnQgbWF4aW11bSkKICAgICA6IFZhbHVlKENoZWNr
ZWRPcGNvZGUsIFdhc21Cb3VuZHNDaGVjaywgb3JpZ2luLCBwdHIpCiAgICAgLCBtX3Bpbm5lZEdQ
UihwaW5uZWRHUFIpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgLCBtX21heGltdW0obWF4
aW11bSkKIHsKIH0KIApAQCAtNDYsOSArNDgsMjIgQEAgVmFsdWUqIFdhc21Cb3VuZHNDaGVja1Zh
bHVlOjpjbG9uZUltcGwoKSBjb25zdAogICAgIHJldHVybiBuZXcgV2FzbUJvdW5kc0NoZWNrVmFs
dWUoKnRoaXMpOwogfQogCitzaXplX3QgV2FzbUJvdW5kc0NoZWNrVmFsdWU6OnJlZHpvbmVMaW1p
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcGlubmVkR1BSID09IEludmFsaWRHUFJSZWcpOwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgKyBXYXNtOjpNZW1vcnk6OmZh
c3RNYXBwZWRSZWR6b25lQnl0ZXMoKTsKKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyNlbmRpZgorfQorCiB2b2lkIFdhc21Cb3VuZHNDaGVja1ZhbHVlOjpkdW1wTWV0
YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91
dC5wcmludChjb21tYSwgInNpemVSZWdpc3RlciA9ICIsIG1fcGlubmVkR1BSLCAiLCBvZmZzZXQg
PSAiLCBtX29mZnNldCk7CisgICAgaWYgKG1fcGlubmVkR1BSID09IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgInJlZHpvbmVMaW1pdCA9ICIsIHJlZHpvbmVMaW1pdCgp
LCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJzaXplUmVnaXN0ZXIgPSAiLCBtX3Bpbm5lZEdQUiwgIiwgb2Zmc2V0ID0gIiwgbV9v
ZmZzZXQpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oCmluZGV4IGNjYzU0YjguLjEx
MGU3MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0No
ZWNrVmFsdWUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkIzVmFsdWUuaCIKICNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCkBAIC00Niw4ICs0NywxNiBAQCBwdWJsaWM6
CiAgICAgCiAgICAgfldhc21Cb3VuZHNDaGVja1ZhbHVlKCk7CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgdHlwZWRlZiBXYXNtOjpQYWdlQ291bnQgUGFnZUNvdW50OworI2Vsc2UKKyAg
ICB0eXBlZGVmIGNoYXIgUGFnZUNvdW50OworI2VuZGlmCisKICAgICBHUFJSZWcgcGlubmVkR1BS
KCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRHUFI7IH0KICAgICB1bnNpZ25lZCBvZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIHNpemVfdCByZWR6b25lTGltaXQoKSBjb25z
dDsKKyAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNTcsMTAgKzY2LDExIEBAIHByb3RlY3RlZDoKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IFdhc21Cb3VuZHNDaGVja1ZhbHVlKE9yaWdpbiwgVmFsdWUqIHB0ciwgR1BSUmVnIHBpbm5lZEdQ
UiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBXYXNtQm91bmRzQ2hl
Y2tWYWx1ZShPcmlnaW4sIFZhbHVlKiBwdHIsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkIG9m
ZnNldCwgUGFnZUNvdW50IG1heGltdW0pOwogCiAgICAgR1BSUmVnIG1fcGlubmVkR1BSOwogICAg
IHVuc2lnbmVkIG1fb2Zmc2V0OworICAgIFBhZ2VDb3VudCBtX21heGltdW07CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ3VzdG9tLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3Vz
dG9tLmNwcAppbmRleCA3ZWU3ZjNjLi40OWNhNTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDdXN0b20uY3BwCkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBXYXNtQm91bmRz
Q2hlY2tDdXN0b206OmlzVmFsaWRGb3JtKEluc3QmIGluc3QpCiAgICAgaWYgKCFpbnN0LmFyZ3Nb
MF0uaXNUbXAoKSAmJiAhaW5zdC5hcmdzWzBdLmlzU29tZUltbSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gaW5zdC5hcmdzWzFdLmlzUmVnKCk7CisgICAgcmV0dXJuIGlu
c3QuYXJnc1sxXS5pc1JlZygpIHx8IGluc3QuYXJnc1sxXS5pc1RtcCgpIHx8IGluc3QuYXJnc1sx
XS5pc1NvbWVJbW0oKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4
IDAxOTk2YWYuLmE2ZjY5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0x
NTE4NSw3ICsxNTE4NSw4IEBAIHZvaWQgdGVzdFdhc21Cb3VuZHNDaGVjayh1bnNpZ25lZCBvZmZz
ZXQpCiAgICAgVmFsdWUqIGxlZnQgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaWYgKHBvaW50ZXJU
eXBlKCkgIT0gSW50MzIpCiAgICAgICAgIGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwgbGVmdCk7Ci0gICAgcm9vdC0+YXBwZW5kTmV3PFdhc21Cb3Vu
ZHNDaGVja1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbGVmdCwgcGlubmVkLCBvZmZzZXQpOworICAg
IFdhc206OlBhZ2VDb3VudCBtYXhpbXVtOworICAgIHJvb3QtPmFwcGVuZE5ldzxXYXNtQm91bmRz
Q2hlY2tWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxlZnQsIHBpbm5lZCwgb2Zmc2V0LCBtYXhpbXVt
KTsKICAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDB4NDIpOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCmluZGV4IDNhZWUzMDEuLmVjMzFlYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5j
bHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIldh
c21NZW1vcnkuaCIKICNpbmNsdWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29y
aXRobT4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTI1MCw2ICsyNTEsNyBAQCBI
ZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX3NpemVBZnRlckxh
c3RFZGVuQ29sbGVjdCgwKQogICAgICwgbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0KDApCiAg
ICAgLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlKDApCisgICAgLCBtX3dlYkFzc2VtYmx5RmFz
dE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlKDApCiAgICAgLCBtX2J5dGVzQWJhbmRvbmVkU2lu
Y2VMYXN0RnVsbENvbGxlY3QoMCkKICAgICAsIG1fbWF4RWRlblNpemUobV9taW5CeXRlc1BlckN5
Y2xlKQogICAgICwgbV9tYXhIZWFwU2l6ZShtX21pbkJ5dGVzUGVyQ3ljbGUpCkBAIC00NjYsNiAr
NDY4LDIzIEBAIHZvaWQgSGVhcDo6ZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5U2xvd0Nhc2Uo
c2l6ZV90IHNpemUpCiAgICAgcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWRTbG93Q2FzZShzaXpl
KTsKIH0KIAordm9pZCBIZWFwOjpyZXBvcnRXZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRl
ZChzaXplX3QgY291bnQpCit7CisgICAgZGlkQWxsb2NhdGVXZWJBc3NlbWJseUZhc3RNZW1vcmll
cyhjb3VudCk7CisgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworfQorCitib29sIEhl
YXA6OndlYkFzc2VtYmx5RmFzdE1lbW9yaWVzVGhpc0N5Y2xlQXRUaHJlc2hvbGQoKSBjb25zdAor
eworICAgIC8vIFdlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgdXNlIGxhcmdlIGFtb3VudHMgb2Yg
dmlydHVhbCBtZW1vcnkgYW5kIHdlCisgICAgLy8gZG9uJ3Qga25vdyBob3cgbWFueSBjYW4gZXhp
c3QgaW4gdGhpcyBwcm9jZXNzLiBXZSBrZWVwIHRyYWNrIG9mIHRoZSBtb3N0CisgICAgLy8gZmFz
dCBtZW1vcmllcyB0aGF0IGhhdmUgZXhpc3RlZCBhdCBhbnkgcG9pbnQgaW4gdGltZS4gVGhlIEdD
IHVzZXMgdGhpcworICAgIC8vIHRvcCB3YXRlcm1hcmsgYXMgYW4gaW5kaWNhdGlvbiBvZiB3aGV0
aGVyIHJlY2VudCBhbGxvY2F0aW9ucyBzaG91bGQgY2F1c2UKKyAgICAvLyBhIGNvbGxlY3Rpb246
IGdldCB0b28gY2xvc2UgYW5kIHdlIG1heSBiZSBjbG9zZSB0byB0aGUgYWN0dWFsIGxpbWl0Lgor
ICAgIHNpemVfdCBmYXN0TWVtb3J5VGhyZXNob2xkID0gc3RkOjptYXg8c2l6ZV90PigxLCBXYXNt
OjpNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCgpIC8gMik7CisgICAgcmV0dXJuIG1fd2ViQXNz
ZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBmYXN0TWVtb3J5VGhyZXNob2xk
OworfQorCiB2b2lkIEhlYXA6OnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCkKIHsKICAgICAv
LyBPdXIgY2xpZW50cyBkb24ndCBrbm93IGV4YWN0bHkgaG93IG11Y2ggbWVtb3J5IHRoZXkKQEAg
LTIxMDMsNiArMjEyMiw3IEBAIHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiAg
ICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiXG4iKTsKICAgICAgICAgZGF0YUxv
ZygiYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSAiLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygid2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0
ZWRUaGlzQ3ljbGUgPSAiLCBtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5
Y2xlLCAiXG4iKTsKICAgICB9CiAgICAgCiAgICAgLy8gQ2FsY3VsYXRlIG91ciBjdXJyZW50IGhl
YXAgc2l6ZSB0aHJlc2hvbGQgZm9yIHRoZSBwdXJwb3NlIG9mIGZpZ3VyaW5nIG91dCB3aGVuIHdl
IHNob3VsZApAQCAtMjE4MCw2ICsyMjAwLDcgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9u
TGltaXRzKCkKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygic2l6ZUFmdGVyTGFz
dENvbGxlY3QgPSAiLCBtX3NpemVBZnRlckxhc3RDb2xsZWN0LCAiXG4iKTsKICAgICBtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlID0gMDsKKyAgICBtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxs
b2NhdGVkVGhpc0N5Y2xlID0gMDsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQogICAgICAg
ICBkYXRhTG9nKCI9PiAiLCBjdXJyZW50SGVhcFNpemUgLyAxMDI0LCAia2IsICIpOwpAQCAtMjI1
Myw2ICsyMjc0LDExIEBAIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogICAg
IHBlcmZvcm1JbmNyZW1lbnQoYnl0ZXMpOwogfQogCit2b2lkIEhlYXA6OmRpZEFsbG9jYXRlV2Vi
QXNzZW1ibHlGYXN0TWVtb3JpZXMoc2l6ZV90IGNvdW50KQoreworICAgIG1fd2ViQXNzZW1ibHlG
YXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgKz0gY291bnQ7Cit9CisKIGJvb2wgSGVhcDo6
aXNWYWxpZEFsbG9jYXRpb24oc2l6ZV90KQogewogICAgIGlmICghaXNWYWxpZFRocmVhZFN0YXRl
KG1fdm0pKQpAQCAtMjMwNSw3ICsyMzMxLDcgQEAgYm9vbCBIZWFwOjpzaG91bGREb0Z1bGxDb2xs
ZWN0aW9uKHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBzY29wZSkgY29uc3QKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoIXNjb3BlKQotICAgICAgICByZXR1cm4gbV9zaG91
bGREb0Z1bGxDb2xsZWN0aW9uOworICAgICAgICByZXR1cm4gbV9zaG91bGREb0Z1bGxDb2xsZWN0
aW9uIHx8IHdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzVGhpc0N5Y2xlQXRUaHJlc2hvbGQoKTsKICAg
ICByZXR1cm4gKnNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbDsKIH0KIApAQCAtMjQ1Niw3
ICsyNDgyLDggQEAgdm9pZCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiAgICAgICAgIGlmIChtX2J5dGVzQWxsb2NhdGVk
VGhpc0N5Y2xlIDw9IE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA8
PSBtX21heEVkZW5TaXplKQorICAgICAgICBpZiAoIXdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzVGhp
c0N5Y2xlQXRUaHJlc2hvbGQoKQorICAgICAgICAgICAgJiYgbV9ieXRlc0FsbG9jYXRlZFRoaXND
eWNsZSA8PSBtX21heEVkZW5TaXplKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGQwNjU3MDEuLjRiMTU5ZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKQEAgLTE5OCw2ICsxOTgsMTcgQEAgcHVibGljOgogICAgIHZvaWQg
cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90KTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOwogCisgICAgLy8gU2FtZSBh
cyBhYm92ZSwgYnV0IGZvciB1bmNvbW1pdHRlZCB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9ucyBj
YXVzZWQgYnkKKyAgICAvLyBXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzLiBUaGlzIGlzIGNvdW50
ZWQgc2VwYXJhdGVseSBiZWNhdXNlIHZpcnR1YWwKKyAgICAvLyBtZW1vcnkgaXMgbG9naWNhbGx5
IGEgZGlmZmVyZW50IHR5cGUgb2YgcmVzb3VyY2UgdGhhbiBjb21taXR0ZWQgcGh5c2ljYWwKKyAg
ICAvLyBtZW1vcnkuIFdlIGNhbiBvZnRlbiBhbGxvY2F0ZSBodWdlIGFtb3VudHMgb2YgdmlydHVh
bCBtZW1vcnkgKHRoaW5rCisgICAgLy8gZ2lnYWJ5dGVzKSB3aXRob3V0IGFkdmVyc2VseSBhZmZl
Y3RpbmcgcmVndWxhciBHQydkIG1lbW9yeS4gQXQgc29tZSBwb2ludAorICAgIC8vIHRob3VnaCwg
dG9vIG11Y2ggdmlydHVhbCBtZW1vcnkgYmVjb21lcyBwcm9oaWJpdGl2ZSBhbmQgd2Ugd2FudCB0
bworICAgIC8vIGNvbGxlY3QgR0MtYWJsZSBvYmplY3RzIHdoaWNoIGtlZXAgdGhpcyB2aXJ0dWFs
IG1lbW9yeSBhbGl2ZS4KKyAgICAvLyBUaGlzIGlzIGNvdW50ZWQgaW4gbnVtYmVyIG9mIGZhc3Qg
bWVtb3JpZXMsIG5vdCBieXRlcy4KKyAgICB2b2lkIHJlcG9ydFdlYkFzc2VtYmx5RmFzdE1lbW9y
aWVzQWxsb2NhdGVkKHNpemVfdCk7CisgICAgYm9vbCB3ZWJBc3NlbWJseUZhc3RNZW1vcmllc1Ro
aXNDeWNsZUF0VGhyZXNob2xkKCkgY29uc3Q7CisKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0Up
CiAgICAgLy8gVXNlIHRoaXMgQVBJIHRvIHJlcG9ydCB0aGUgc3Vic2V0IG9mIGV4dHJhIG1lbW9y
eSB0aGF0IGxpdmVzIG91dHNpZGUgdGhpcyBwcm9jZXNzLgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CkBAIC0yNDcsNiArMjU4
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlQWxsVW5saW5rZWRDb2RlQmxvY2tzKERlbGV0
ZUFsbENvZGVFZmZvcnQpOwogCiAgICAgdm9pZCBkaWRBbGxvY2F0ZShzaXplX3QpOworICAgIHZv
aWQgZGlkQWxsb2NhdGVXZWJBc3NlbWJseUZhc3RNZW1vcmllcyhzaXplX3QpOwogICAgIGJvb2wg
aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgIAogICAgIGNvbnN0IEpJVFN0dWJSb3V0
aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiAqbV9qaXRTdHViUm91dGluZXM7IH0K
QEAgLTUyNSw2ICs1MzcsNyBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemVCZWZvcmVMYXN0
RWRlbkNvbGxlY3Q7CiAKICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZTsKKyAg
ICBzaXplX3QgbV93ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZTsKICAg
ICBzaXplX3QgbV9ieXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0OwogICAgIHNpemVf
dCBtX21heEVkZW5TaXplOwogICAgIHNpemVfdCBtX21heEhlYXBTaXplOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAppbmRl
eCBiZTZiNmYxLi43Yzg1YTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDYgKzM5
LDcgQEAKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5o
IgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNp
bmNsdWRlICJXYXNtVGh1bmtzLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVk
ZSA8bXV0ZXg+CkBAIC01OCw2ICs1OSw5IEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiAg
ICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVRocmVhZGluZ09uY2VGbGFnLCBbXXsKICAgICAg
ICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgICAgIE9wdGlvbnM6OmluaXRpYWxp
emUoKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIFdhc206Ok1lbW9yeTo6aW5p
dGlhbGl6ZVByZWFsbG9jYXRpb25zKCk7CisjZW5kaWYKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklF
Ul9QUk9GSUxJTkcpCiAgICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjppbml0aWFsaXplKCk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCA2MGNh
YWUwLi5lYTVhZGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBA
IC00MzcsOSArNDM3LDEwIEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAg
IHYoc2l6ZSwgd2ViQXNzZW1ibHlQYXJ0aWFsQ29tcGlsZUxpbWl0LCA1MDAwLCBOb3JtYWwsICJM
aW1pdCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGEgV2FzbTo6UGxhbjo6Y29tcGlsZSBzaG91bGQg
YXR0ZW1wdCBiZWZvcmUgY2hlY2tpbmcgZm9yIG90aGVyIHdvcmsuIikgXAogICAgIHYodW5zaWdu
ZWQsIHdlYkFzc2VtYmx5QjNPcHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBXZWIgQXNzZW1ibHkg
bW9kdWxlcy4iKSBcCiAgICAgXAotICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJBc3NlbWJseUxvd01l
bW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdvbid0IG1t
YXAgdGhlIGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwgYWxsb2NhdGUgdGhl
IG1pbmltdW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5
RmFzdE1lbW9yeSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGEg
MzItYml0IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJvdW5kcyBjaGVj
ayB3YXNtIG1lbW9yeS4iKSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlGYXN0TWVtb3J5
UmVkem9uZVBhZ2VzLCAxMjgsIE5vcm1hbCwgIldlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgdXNl
IDRHaUIgdmlydHVhbCBhbGxvY2F0aW9ucywgcGx1cyBhIHJlZHpvbmUgKGNvdW50ZWQgYXMgbXVs
dGlwbGUgb2YgNjRLaUIgV2ViQXNzZW1ibHkgcGFnZXMpIGF0IHRoZSBlbmQgdG8gY2F0Y2ggcmVn
K2ltbSBhY2Nlc3NlcyB3aGljaCBleGNlZWQgMzItYml0LCBhbnl0aGluZyBiZXlvbmQgdGhlIHJl
ZHpvbmUgaXMgZXhwbGljaXRseSBib3VuZHMtY2hlY2tlZCIpIFwKICAgICB2KGJvb2wsIGNyYXNo
SWZXZWJBc3NlbWJseUNhbnRGYXN0TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ug
d2lsbCBjcmFzaCBpZiB3ZSBjYW4ndCBvYnRhaW4gZmFzdCBtZW1vcnkgZm9yIHdhc20uIikgXAor
ICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQsIDQs
IE5vcm1hbCwgIldlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgY2FuIGJlIHByZS1hbGxvY2F0ZWQg
YXQgcHJvZ3JhbSBzdGFydHVwIGFuZCByZW1haW4gY2FjaGVkIHRvIGF2b2lkIGZyYWdtZW50YXRp
b24gbGVhZGluZyB0byBib3VuZHMtY2hlY2tlZCBtZW1vcnkuIFRoaXMgbnVtYmVyIGlzIGFuIHVw
cGVyIGJvdW5kIG9uIGluaXRpYWwgYWxsb2NhdGlvbiBhcyB3ZWxsIGFzIHRvdGFsIGNvdW50IG9m
IGZhc3QgbWVtb3JpZXMuIFplcm8gbWVhbnMgbm8gcHJlLWFsbG9jYXRpb24sIG5vIGNhY2hpbmcs
IGFuZCBubyBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIHJ1bnRpbWUgYWxsb2NhdGlvbnMuIikgXAog
ICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0VExTLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpZiBhdmFpbGFi
bGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggODgyZDFjNy4uNzk5OGJkMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cApAQCAtMjI3LDYgKzIyNyw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVtaXRDaGVja3NGb3JN
b2RPckRpdihCMzo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCk7CiAKKyAgICB2b2lkIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUm
LCB1aW50MzJfdCYpOworCiAgICAgVmFsdWUqIG1hdGVyaWFsaXplV2FzbUNvbnRleHQoUHJvY2Vk
dXJlJiwgQmFzaWNCbG9jayopOwogICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVy
ZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xv
YmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2Nl
ZHVyZSYsIEJhc2ljQmxvY2sqKTsKQEAgLTI0OCw2ICsyNTAsMTUgQEAgcHJpdmF0ZToKICAgICBW
YWx1ZSogbV9pbnN0YW5jZVZhbHVlOyAvLyBGSVhNRTogbWFrZSB0aGlzIGxhenkgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTc5MgogfTsKIAorLy8gTWVtb3J5IGFj
Y2Vzc2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJl
YXMgdGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK3ZvaWQgQjNJUkdlbmVy
YXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJf
dCYgb2Zmc2V0KQoreworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
IHsKKyAgICAgICAgcHRyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBBZGQsIG9yaWdpbigpLCBwdHIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAg
ICB9Cit9CisKIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjptYXRlcmlhbGl6ZVdhc21Db250ZXh0KFBy
b2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgaWYgKHVzZUZhc3RUTFNG
b3JDb250ZXh0KCkpIHsKQEAgLTMzMSw3ICszNDIsMTYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUKICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHND
aGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSLCB1
bnNpZ25lZCkgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1f
bWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgc3dpdGNoIChtX21vZGUp
IHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25h
bGluZzoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChJbnZhbGlkR1BSUmVnID09IHBp
bm5lZEdQUik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lbW9y
eU1vZGU6Ok51bWJlck9mTWVtb3J5TW9kZXM6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMtPmVtaXRF
eGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNz
KTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNTE3LDEwICs1MzcsMjAgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAt
PiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJl
cGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50
MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7Ci0g
ICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykgeworICAgIHN3aXRj
aCAobV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAg
ICAgLy8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGwsIHdlIG11c3QgdGhl
cmVmb3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRoZSBjdXJyZW50IG1l
bW9yeSBzaXplLgogICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKICAgICAgICAgQVNT
RVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0
aW9uICsgb2Zmc2V0IC0gMSwgbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgLy8gV2UndmUgdmly
dHVhbGx5IG1hcHBlZCA0R2lCK3JlZHpvbmUgZm8gdGhpcyBtZW1vcnkuIE9ubHkgdGhlIHVzZXIt
YWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJsZSwgY29udGlndW91c2x5IGluIHJhbmdlIFsw
LCBjdXJyZW50XSwgYW5kIGV2ZXJ5dGhpbmcgYWJvdmUgaXMgbWFwcGVkIFBST1RfTk9ORS4gV2Ug
ZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBleHBsaWNpdCBib3VuZHMgY2hlY2sgaW4gdGhlIDRH
aUIgcmFuZ2UgYmVjYXVzZSBXZWJBc3NlbWJseSByZWdpc3RlciBtZW1vcnkgYWNjZXNzZXMgYXJl
IDMyLWJpdC4gSG93ZXZlciBXZWJBc3NlbWJseSByZWdpc3RlcitpbW1lZGlhdGUgYWNjZXNzZXMg
cGVyZm9ybSB0aGUgYWRkaXRpb24gaW4gNjQtYml0IHdoaWNoIGNhbiBwdXNoIGFuIGFjY2VzcyBh
Ym92ZSB0aGUgMzItYml0IGxpbWl0LiBUaGUgcmVkem9uZSB3aWxsIGNhdGNoIG1vc3Qgc21hbGwg
aW1tZWRpYXRlcywgYW5kIHdlJ2xsIGV4cGxpY2l0bHkgYm91bmRzIGNoZWNrIGFueSByZWdpc3Rl
ciArIGxhcmdlIGltbWVkaWF0ZSBhY2Nlc3MuCisgICAgICAgICAgICBpZiAob2Zmc2V0ID49IE1l
bW9yeTo6ZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpKQorICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHBvaW50ZXIsIEludmFsaWRHUFJSZWcsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEsIG1f
aW5mby5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZW1vcnlN
b2RlOjpOdW1iZXJPZk1lbW9yeU1vZGVzOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KICAgICBwb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCBwb2ludGVyKTsKICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQWRkcmVzc1ZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBwb2ludGVyLCBtX21lbW9yeUJhc2VHUFIpOwpAQCAtNTYwLDYgKzU5MCw4IEBAIGlubGluZSBC
Mzo6S2luZCBCM0lSR2VuZXJhdG9yOjptZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApCiAK
IGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpCiB7CisgICAgZml4dXBQb2lu
dGVyUGx1c09mZnNldChwb2ludGVyLCBvZmZzZXQpOworCiAgICAgc3dpdGNoIChvcCkgewogICAg
IGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhTKSwg
b3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CkBAIC02OTcsNiArNzI5LDggQEAgaW5saW5lIHVp
bnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCiAKIGlubGluZSB2b2lkIEIzSVJH
ZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KQogeworICAgIGZpeHVw
UG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgb2Zmc2V0KTsKKwogICAgIHN3aXRjaCAob3ApIHsK
ICAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CiAgICAgICAgIHZhbHVlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIHZhbHVl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5jcHAKaW5kZXggNjdiYjU3ZC4uYmJhNDRlZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTcyLDcg
KzcyLDcgQEAgc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190KiBz
aWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICAgICAgICAgIGF1dG8mIGFjdGl2ZUZhc3RNZW1v
cmllcyA9IHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKTsKICAgICAgICAgICAgIGZvciAo
dm9pZCogYWN0aXZlTWVtb3J5IDogYWN0aXZlRmFzdE1lbW9yaWVzKSB7CiAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImNoZWNraW5nIGZhc3QgbWVtb3J5IGF0OiAiLCBSYXdQ
b2ludGVyKGFjdGl2ZU1lbW9yeSkpOwotICAgICAgICAgICAgICAgIGlmIChhY3RpdmVNZW1vcnkg
PD0gZmF1bHRpbmdBZGRyZXNzICYmIGZhdWx0aW5nQWRkcmVzcyA8IHN0YXRpY19jYXN0PGNoYXIq
PihhY3RpdmVNZW1vcnkpICsgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGFjdGl2ZU1lbW9yeSA8PSBmYXVsdGluZ0FkZHJlc3MgJiYgZmF1bHRpbmdBZGRyZXNz
IDwgc3RhdGljX2Nhc3Q8Y2hhcio+KGFjdGl2ZU1lbW9yeSkgKyBNZW1vcnk6OmZhc3RNYXBwZWRC
eXRlcygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IDdlZjNkNGYuLjZl
YjJmYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0z
MiwxNDYgKzMyLDI2MSBAQAogI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKICNp
bmNsdWRlICJXYXNtVGh1bmtzLmgiCiAKLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5j
bHVkZSA8YXRvbWljPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL1ZNVGFncy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogCi1uYW1lc3BhY2UgewotY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19CisvLyBGSVhN
RTogV2UgY291bGQgYmUgc21hcnRlciBhYm91dCBtZW1zZXQgLyBtbWFwIC8gbWFkdmlzZS4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM0MwogCi1zdGF0aWMgTkVW
RVJfSU5MSU5FIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3ZWJBc3NlbWJseUNvdWxkbnRH
ZXRGYXN0TWVtb3J5KCkKKy8vIEZJWE1FIGNoYW5nZSB0aGlzCitTdGF0aWNMb2NrIG1lbW9yeUxv
Y2s7CisKK3N0YXRpYyBIYXNoU2V0PHZvaWQqPiYgYWN0aXZlRmFzdE1lbW9yaWVzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJikKIHsKLSAgICBDUkFTSCgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoU2V0PHZvaWQqPj4gYWN0aXZlRmFzdE1lbW9yaWVzOworICAgIHJldHVybiBhY3RpdmVG
YXN0TWVtb3JpZXM7CiB9CiAKLWlubGluZSBib29sIG1tYXBCeXRlcyhzaXplX3QgYnl0ZXMsIHZv
aWQqJiBtZW1vcnkpCitjb25zdCBIYXNoU2V0PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmll
cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIGRhdGFMb2dJZih2ZXJib3Nl
LCAiQXR0ZW1wdGluZyB0byBtbWFwICIsIGJ5dGVzLCAiIGJ5dGVzOiAiKTsKLSAgICAvLyBGSVhN
RTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0gICAgdm9pZCog
cmVzdWx0ID0gbW1hcChudWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1B
UF9BTk9OLCAtMSwgMCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3VjY2VlZGVkIik7Ci0gICAgbWVtb3J5
ID0gcmVzdWx0OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhY3RpdmVGYXN0TWVtb3Jp
ZXMobG9ja2VyKTsKIH0KIAotY29uc3QgY2hhciogbWFrZVN0cmluZyhNZW1vcnlNb2RlIG1vZGUp
CituYW1lc3BhY2UgeworY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCisvLyBBbGxv
Y2F0ZSBmYXN0IG1lbW9yaWVzIHZlcnkgZWFybHkgYXQgcHJvZ3JhbSBzdGFydHVwIGFuZCBjYWNo
ZSB0aGVtLiBUaGUgZmFzdCBtZW1vcmllcyB1c2Ugc2lnbmlmaWNhbnQgYW1vdW50cyBvZiB2aXJ0
dWFsIHVuY29tbWl0dGVkIGFkZHJlc3Mgc3BhY2UsIHJlZHVjaW5nIHRoZSBsaWtlbGlob29kIHRo
YXQgd2UnbGwgb2J0YWluIGFueSBpZiB3ZSB3YWl0IHRvIGFsbG9jYXRlIHRoZW0uCisvLyBXZSBz
dGlsbCB0cnkgdG8gYWxsb2NhdGUgZmFzdCBtZW1vcmllcyBhdCBydW50aW1lLCBhbmQgd2lsbCBj
YWNoZSB0aGVtIHdoZW4gcmVsaW5xdWlzaGVkIHVwIHRvIHRoZSBwcmVhbGxvY2F0aW9uIGxpbWl0
LgorLy8gTm90ZSB0aGF0IHRoaXMgc3RhdGUgaXMgcGVyLXByb2Nlc3MsIG5vdCBwZXItVk0uCitj
b25zdGV4cHIgc2l6ZV90IGZhc3RNZW1vcnlDYWNoZUhhcmRMaW1pdCA9IDE2OworY29uc3RleHBy
IHNpemVfdCBmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1pdCA9IDMyOyAvLyBQcmV2ZW50cyBm
aWxsaW5nIHVwIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCitzaXplX3QgZmFzdE1lbW9yeVBy
ZWFsbG9jYXRlQ291bnQgeyAwIH07CitzdGQ6OmF0b21pYzx2b2lkKj4gZmFzdE1lbW9yeUNhY2hl
W2Zhc3RNZW1vcnlDYWNoZUhhcmRMaW1pdF0gPSB7IEFUT01JQ19WQVJfSU5JVChudWxscHRyKSB9
Oworc3RkOjphdG9taWM8c2l6ZV90PiBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMgPSBB
VE9NSUNfVkFSX0lOSVQoMCk7CitzdGQ6OmF0b21pYzxzaXplX3Q+IG9ic2VydmVkTWF4aW11bUZh
c3RNZW1vcnkgPSBBVE9NSUNfVkFSX0lOSVQoMCk7CisKK05FVkVSX0lOTElORSBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpCiB7Ci0g
ICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzog
cmV0dXJuICJCb3VuZHNDaGVja2luZyI7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6
IHJldHVybiAiU2lnbmFsaW5nIjsKLSAgICBjYXNlIE1lbW9yeU1vZGU6Ok51bWJlck9mTWVtb3J5
TW9kZXM6IGJyZWFrOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiAiIjsKKyAgICBDUkFTSCgpOwogfQogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQg
bWF4RmFzdE1lbW9yaWVzID0gNDsKLXN0YXRpYyB1bnNpZ25lZCBhbGxvY2F0ZWRGYXN0TWVtb3Jp
ZXMgeyAwIH07Ci1TdGF0aWNMb2NrIG1lbW9yeUxvY2s7Ci1pbmxpbmUgRGVxdWU8dm9pZCosIG1h
eEZhc3RNZW1vcmllcz4mIGF2YWlsYWJsZUZhc3RNZW1vcmllcyhjb25zdCBBYnN0cmFjdExvY2tl
ciYpCit2b2lkKiBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzKQogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxEZXF1ZTx2b2lkKiwgbWF4RmFzdE1lbW9yaWVzPj4gYXZhaWxhYmxlRmFzdE1lbW9y
aWVzOwotICAgIHJldHVybiBhdmFpbGFibGVGYXN0TWVtb3JpZXM7CisjaWYgT1MoREFSV0lOKQor
ICAgIGludCBmZCA9IFZNX1RBR19GT1JfV0VCQVNTRU1CTFlfTUVNT1JZOworI2Vsc2UKKyAgICBp
bnQgZmQgPSAtMTsKKyNlbmRpZgorCisgICAgdm9pZCogbG9jYXRpb24gPSBtbWFwKG51bGxwdHIs
IGJ5dGVzLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIGZkLCAwKTsKKyAgICBy
ZXR1cm4gbG9jYXRpb24gPT0gTUFQX0ZBSUxFRCA/IG51bGxwdHIgOiBsb2NhdGlvbjsKIH0KIAot
aW5saW5lIEhhc2hTZXQ8dm9pZCo+JiBhY3RpdmVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQorc3RhdGljIHZvaWQqIHRyeUdldEZhc3RNZW1vcnkoVk0mIHZtKQogewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHZvaWQqPj4gYWN0aXZlRmFzdE1lbW9yaWVzOwot
ICAgIHJldHVybiBhY3RpdmVGYXN0TWVtb3JpZXM7CisgICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0
cjsKKworICAgIGlmIChMSUtFTFkoZmFzdE1lbW9yeUVuYWJsZWQoKSkpIHsKKyAgICAgICAgLy8g
V2UncmUgYWxsb3dlZCB0byByZXRyeSByZXVzZSBvZiBjYWNoZWQgbWVtb3JpZXMgb25jZTogbWF5
YmUgdGhlIEdDIGhhc24ndCBjb2xsZWN0ZWQgcHJldmlvdXNseSB1c2VkIGZhc3QgbWVtb3JpZXMg
dGhhdCBhcmUgYWN0dWFsbHkgZGVhZC4gV2FpdGluZyBmb3IgdGhpcyBjb3VsZCBmcmVlIHVwIGEg
ZmFzdCBtZW1vcnkgZm9yIHVzLgorICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhSZXRyaWVzID0g
MTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCByZXRyeSA9IDA7IHJldHJ5IDw9IG1heFJldHJpZXM7
ICsrcmV0cnkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYXN0TWVt
b3J5UHJlYWxsb2NhdGVDb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZvaWQqIHBy
ZXZpb3VzID0gZmFzdE1lbW9yeUNhY2hlW2ldLmV4Y2hhbmdlKG51bGxwdHIsIHN0ZDo6bWVtb3J5
X29yZGVyX2FjcV9yZWwpKSB7CisgICAgICAgICAgICAgICAgICAgIG1lbW9yeSA9IHByZXZpb3Vz
OworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5R2V0RmFzdE1l
bW9yeSByZS11c2luZyAiLCBSYXdQb2ludGVyKG1lbW9yeSkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlICYmIG1lbW9yeSAmJiByZXRyeSA9PSBtYXhSZXRyaWVzLCAidHJ5
R2V0RmFzdE1lbW9yeSB3YWl0ZWQgb24gR0MgYW5kIHJldHJpZWQgc3VjY2Vzc2Z1bGx5Iik7Cisg
ICAgICAgICAgICBpZiAobWVtb3J5KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKHJldHJ5ICE9IG1heFJldHJpZXMpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBtZW1v
cnkgd2FzIGF2YWlsYWJsZSBpbiB0aGUgY2FjaGUuIE1heWJlIHdhaXRpbmcgb24gR0Mgd2lsbCBm
aW5kIGEgZnJlZSBvbmUuCisgICAgICAgICAgICAgICAgLy8gRklYTUUgY29sbGVjdFN5bmMoRnVs
bCkgYW5kIGN1c3RvbSBlYWdlciBkZXN0cnVjdGlvbiBvZiB3YXNtIG1lbW9yaWVzIGNvdWxkIGJl
IGJldHRlci4gRm9yIG5vdyB1c2UgY29sbGVjdEFsbEdhcmJhZ2UuCisgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgd2FpdGluZyBvbiBHQyBhbmQg
cmV0cnlpbmciKTsKKyAgICAgICAgICAgICAgICB2bS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgc29mdCBsaW1pdCBp
cyBpbmhlcmVudGx5IHJhY3kgYmVjYXVzZSBjaGVja2luZythbGxvY2F0aW9uIGlzbid0IGF0b21p
Yy4gRXhjZWVkaW5nIGl0IHNsaWdodGx5IGlzIGZpbmUuCisgICAgICAgIGJvb2wgYXRBbGxvY2F0
aW9uU29mdExpbWl0ID0gY3VycmVudGx5QWxsb2NhdGVkRmFzdE1lbW9yaWVzLmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCkgPj0gZmFzdE1lbW9yeUFsbG9jYXRpb25Tb2Z0TGltaXQ7Cisg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UgJiYgYXRBbGxvY2F0aW9uU29mdExpbWl0LCAidHJ5
R2V0RmFzdE1lbW9yeSByZWFjaGVkIGFsbG9jYXRpb24gc29mdCBsaW1pdCBvZiAiLCBmYXN0TWVt
b3J5QWxsb2NhdGlvblNvZnRMaW1pdCk7CisKKyAgICAgICAgaWYgKCFtZW1vcnkgJiYgIWF0QWxs
b2NhdGlvblNvZnRMaW1pdCkgeworICAgICAgICAgICAgbWVtb3J5ID0gbW1hcEJ5dGVzKE1lbW9y
eTo6ZmFzdE1hcHBlZEJ5dGVzKCkpOworICAgICAgICAgICAgaWYgKG1lbW9yeSkgeworICAgICAg
ICAgICAgICAgIHNpemVfdCBjdXJyZW50bHlBbGxvY2F0ZWQgPSAxICsgY3VycmVudGx5QWxsb2Nh
dGVkRmFzdE1lbW9yaWVzLmZldGNoX2FkZCgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3FfcmVsKTsK
KyAgICAgICAgICAgICAgICBzaXplX3QgY3VycmVudGx5T2JzZXJ2ZWRNYXhpbXVtID0gb2JzZXJ2
ZWRNYXhpbXVtRmFzdE1lbW9yeS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOworICAg
ICAgICAgICAgICAgIGlmIChjdXJyZW50bHlBbGxvY2F0ZWQgPiBjdXJyZW50bHlPYnNlcnZlZE1h
eGltdW0pIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGV4cGVjdGVkID0gY3VycmVudGx5
T2JzZXJ2ZWRNYXhpbXVtOworICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYnNl
cnZlZE1heGltdW1GYXN0TWVtb3J5LmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4cGVjdGVkLCBj
dXJyZW50bHlBbGxvY2F0ZWQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UsIHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGF4ZWQpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1v
cnkgY3VycmVudGx5IG9ic2VydmVyIG1heGltdW0gaXMgbm93ICIsIGN1cnJlbnRseUFsbG9jYXRl
ZCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBsb3N0IHRoZSB1cGRhdGUgcmFjZSwgYnV0IHRoZSBjb3VudGVyIGlzIG1vbm90b25p
YyBzbyB0aGUgd2lubmVyIG11c3QgaGF2ZSB1cGRhdGVkIHRoZSB2YWx1ZSB0byB3aGF0IHdlIHdl
cmUgZ29pbmcgdG8gdXBkYXRlIGl0IHRvLCBvciBtdWx0aXBsZSB3aW5uZXJzIGRpZCBzby4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChleHBlY3RlZCA+PSBjdXJyZW50bHlBbGxvY2F0
ZWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRGYXN0TWVtb3J5IGFsbG9jYXRlZCAi
LCBSYXdQb2ludGVyKG1lbW9yeSksICIsIGN1cnJlbnRseSBhbGxvY2F0ZWQgaXMgIiwgY3VycmVu
dGx5QWxsb2NhdGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChtZW1vcnkpIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobWVtb3J5TG9jayk7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcikuYWRkKG1lbW9yeSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkg
Y291bGRuJ3QgcmUtdXNlIG9yIGFsbG9jYXRlIGEgZmFzdCBtZW1vcnkiKTsKKyAgICAgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OmNyYXNoSWZXZWJBc3NlbWJseUNhbnRGYXN0TWVtb3J5KCkpKQor
ICAgICAgICAgICAgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpOworICAgIH0KKwor
ICAgIHJldHVybiBtZW1vcnk7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8dm9pZCo+JiB2aWV3QWN0aXZl
RmFzdE1lbW9yaWVzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCitzdGF0aWMgdm9pZCog
dHJ5R2V0U2xvd01lbW9yeShzaXplX3QgYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIGFjdGl2ZUZhc3RN
ZW1vcmllcyhsb2NrZXIpOworICAgIHZvaWQqIG1lbW9yeSA9IG1tYXBCeXRlcyhieXRlcyk7Cisg
ICAgZGF0YUxvZ0xuSWYobWVtb3J5ICYmIHZlcmJvc2UsICJPYnRhaW5lZCBzbG93IG1lbW9yeSAi
LCBSYXdQb2ludGVyKG1lbW9yeSksICIgd2l0aCBjYXBhY2l0eSAiLCBieXRlcyk7CisgICAgZGF0
YUxvZ0xuSWYoIW1lbW9yeSAmJiB2ZXJib3NlLCAiRmFpbGVkIG9idGFpbmluZyBzbG93IG1lbW9y
eSB3aXRoIGNhcGFjaXR5ICIsIGJ5dGVzKTsKKyAgICByZXR1cm4gbWVtb3J5OwogfQogCi1pbmxp
bmUgYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwgdm9pZComIG1lbW9yeSwgc2l6ZV90JiBt
YXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSYgbW9kZSkKK3N0YXRpYyB2b2lkIHJlbGlucXVpc2hN
ZW1vcnkodm9pZCogbWVtb3J5LCBzaXplX3Qgd3JpdGFibGVTaXplLCBzaXplX3QgbWFwcGVkQ2Fw
YWNpdHksIE1lbW9yeU1vZGUgbW9kZSkKIHsKLSAgICBhdXRvIGRlcXVlRmFzdE1lbW9yeSA9IFsm
XSAoKSAtPiBib29sIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHJl
dHVybiB0aGVzZSB0byB0aGUgT1MgaWYgd2UgZ28gc29tZSBudW1iZXIgb2YgR0NzCi0gICAgICAg
IC8vIHdpdGhvdXQgdXNpbmcgdGhlbS4KKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1l
bW9yeU1vZGU6OlNpZ25hbGluZzogeworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYXN0TWVtb3J5
RW5hYmxlZCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFwcGVkQ2FwYWNpdHkgPT0gTWVt
b3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CisKKyAgICAgICAgLy8gVGhpcyBtZW1vcnkgY2Fubm90
IGNhdXNlIGEgdHJhcCBhbnltb3JlLgogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtZW1vcnlM
b2NrKTsKLSAgICAgICAgaWYgKCFhdmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2VyKS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIG1lbW9yeSA9IGF2YWlsYWJsZUZhc3RNZW1vcmllcyhsb2NrZXIp
LnRha2VGaXJzdCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3Jp
ZXMobG9ja2VyKS5hZGQobWVtb3J5KTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RN
ZW1vcnlNYXBwZWRCeXRlczsKLSAgICAgICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxp
bmc7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBhY3Rp
dmVGYXN0TWVtb3JpZXMobG9ja2VyKS5yZW1vdmUobWVtb3J5KTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdCk7CisKKyAgICAgICAgLy8gV2UgbWF5IGNhY2hlIGZhc3QgbWVt
b3JpZXMuIEFzc3VtaW5nIHdlIHdpbGwsIHdlIGhhdmUgdG8gcmVzZXQgdGhlbSBiZWZvcmUgaW5z
ZXJ0aW5nIHRoZW0gaW50byB0aGUgY2FjaGUuCisgICAgICAgIGlmICh3cml0YWJsZVNpemUpIHsK
KyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJaZXJvaW5nIGFuZCB1bnByb3RlY3Rp
bmcgZmFzdCBtZW1vcnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpLCAiJ3MgaW5pdGlhbCAiLCB3cml0
YWJsZVNpemUsICIgYnl0ZXMiKTsKKyAgICAgICAgICAgIG1lbXNldChtZW1vcnksIDAsIHdyaXRh
YmxlU2l6ZSk7CisgICAgICAgICAgICBpZiAobXByb3RlY3QobWVtb3J5LCB3cml0YWJsZVNpemUs
IFBST1RfTk9ORSkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKIAotICAgIGF1dG8gZmFpbCA9IFtdICgpIC0+IGJvb2wg
ewotICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Y3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZh
c3RNZW1vcnkoKSkpCi0gICAgICAgICAgICB3ZWJBc3NlbWJseUNvdWxkbnRHZXRGYXN0TWVtb3J5
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9OworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQ7ICsraSkgeworICAgICAgICAg
ICAgdm9pZCogZXhwZWN0ZWQgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKGZhc3RNZW1vcnlD
YWNoZVtpXS5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhleHBlY3RlZCwgbWVtb3J5LCBzdGQ6Om1l
bW9yeV9vcmRlcl9hY3FfcmVsKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJyZWxpbnF1aXNoTWVtb3J5IGNhY2hlZCBmYXN0IG1lbW9yeSAiLCBSYXdQb2ludGVyKG1l
bW9yeSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogCi0gICAgLy8gV2UgbWlnaHQgR0MgaGVyZSBzbyB3ZSBzaG91bGQgYmUgaG9sZGluZyB0aGUg
QVBJIGxvY2suCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN5bmNyb25vdXNs
eSB0cmlnZ2VyIHRoZSBHQyBmcm9tIGFub3RoZXIgdGhyZWFkLgotICAgIEFTU0VSVCh2bS5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWZhc3RNZW1v
cnlFbmFibGVkKCkpKQotICAgICAgICByZXR1cm4gZmFpbCgpOworICAgICAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAicmVsaW5xdWlzaE1lbW9yeSB1bmFibGUgdG8gY2FjaGUgZmFzdCBtZW1vcnks
IGZyZWVpbmcgaW5zdGVhZCAiLCBSYXdQb2ludGVyKG1lbW9yeSkpOworICAgICAgICBpZiAobXVu
bWFwKG1lbW9yeSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSkpCisgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMuZmV0Y2hfc3ViKDEs
IHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpOwogCi0gICAgLy8gV2UgbmVlZCB0byBiZSBzdXJl
IHdlIGhhdmUgYSBzdHViIHByaW9yIHRvIHJ1bm5pbmcgY29kZS4KLSAgICBpZiAoVU5MSUtFTFko
IVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5l
cmF0b3IpKSkKLSAgICAgICAgcmV0dXJuIGZhaWwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIEFTU0VSVChhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgPD0gbWF4RmFzdE1lbW9yaWVzKTsK
LSAgICBpZiAoZGVxdWVGYXN0TWVtb3J5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGNh
c2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJyZWxpbnF1aXNoRmFzdE1lbW9yeSBmcmVlaW5nIHNsb3cgbWVtb3J5ICIsIFJhd1BvaW50
ZXIobWVtb3J5KSk7CisgICAgICAgIGlmIChtdW5tYXAobWVtb3J5LCBtYXBwZWRDYXBhY2l0eSkp
CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm47CiAKLSAgICAvLyBJZiB3ZSBo
YXZlIGFsbG9jYXRlZCBhbGwgdGhlIGZhc3QgbWVtb3JpZXMuLi4gdG9vIGJhZC4KLSAgICBpZiAo
YWxsb2NhdGVkRmFzdE1lbW9yaWVzID09IG1heEZhc3RNZW1vcmllcykgewotICAgICAgICAvLyBU
aGVyZSBpcyBhIHJlYXNvbmFibGUgY2hhbmNlIHRoYXQgYW5vdGhlciBtb2R1bGUgaGFzIGRpZWQg
YnV0IGhhcyBub3QgYmVlbiBjb2xsZWN0ZWQgeWV0LiBEb24ndCBsb3NlIGhvcGUgeWV0IQotICAg
ICAgICB2bS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7Ci0gICAgICAgIGlmIChkZXF1ZUZhc3RN
ZW1vcnkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFpbCgp
OworICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogCi0gICAgaWYgKG1tYXBCeXRlcyhmYXN0TWVtb3J5TWFwcGVkQnl0ZXMsIG1l
bW9yeSkpIHsKLSAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXM7
Ci0gICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7Ci0gICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1lbW9yeUxvY2spOwotICAgICAgICBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMrKzsK
LSAgICAgICAgYXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKS5hZGQobWVt
b3J5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGF0aWMgYm9vbCBtYWtl
TmV3TWVtb3J5UmVhZFdyaXRlT3JSZWxpbnF1aXNoKHZvaWQqIG1lbW9yeSwgc2l6ZV90IGluaXRp
YWxCeXRlcywgc2l6ZV90IG1hcHBlZENhcGFjaXR5Qnl0ZXMsIE1lbW9yeU1vZGUgbW9kZSkKK3sK
KyAgICBBU1NFUlQobWVtb3J5ICYmIGluaXRpYWxCeXRlcyA8PSBtYXBwZWRDYXBhY2l0eUJ5dGVz
KTsKKyAgICBpZiAoaW5pdGlhbEJ5dGVzKSB7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJNYXJraW5nIFdlYkFzc2VtYmx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIobWVtb3J5KSwgIidz
IGluaXRpYWwgIiwgaW5pdGlhbEJ5dGVzLCAiIGJ5dGVzIGFzIHJlYWQrd3JpdGUiKTsKKyAgICAg
ICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgaW5pdGlhbEJ5dGVzLCBQUk9UX1JFQUQgfCBQUk9UX1dS
SVRFKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogd2h5ID0gc3RyZXJyb3IoZXJybm8pOwor
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkZhaWxlZCBtYWtpbmcgbWVtb3J5ICIs
IFJhd1BvaW50ZXIobWVtb3J5KSwgIiByZWFkYWJsZSBhbmQgd3JpdGFibGU6ICIsIHdoeSk7Cisg
ICAgICAgICAgICByZWxpbnF1aXNoTWVtb3J5KG1lbW9yeSwgMCwgbWFwcGVkQ2FwYWNpdHlCeXRl
cywgbW9kZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi0gICAgaWYg
KG1lbW9yeSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gZmFpbCgpOworY29u
c3QgY2hhciogbWFrZVN0cmluZyhNZW1vcnlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2Rl
KSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogcmV0dXJuICJCb3VuZHND
aGVja2luZyI7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHJldHVybiAiU2lnbmFs
aW5nIjsKKyAgICBjYXNlIE1lbW9yeU1vZGU6Ok51bWJlck9mTWVtb3J5TW9kZXM6IGJyZWFrOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIjsK
IH0KIAotaW5saW5lIHZvaWQgcmVsZWFzZUZhc3RNZW1vcnkodm9pZComIG1lbW9yeSwgc2l6ZV90
IHdyaXRhYmxlU2l6ZSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUpCit2
b2lkIE1lbW9yeTo6aW5pdGlhbGl6ZVByZWFsbG9jYXRpb25zKCkKIHsKLSAgICBpZiAobW9kZSAh
PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcgfHwgIW1lbW9yeSkKLSAgICAgICAgcmV0dXJuOworICAg
IC8vIFJhY2VzIGNhbm5vdCBvY2N1ciBpbiB0aGlzIGZ1bmN0aW9uOiBpdCBpcyBvbmx5IGNhbGxl
ZCBhdCBwcm9ncmFtIGluaXRpYWxpemF0aW9uLCBiZWZvcmUgV2ViQXNzZW1ibHkgY2FuIGJlIGlu
dm9rZWQuCisKKyAgICBjb25zdCBhdXRvIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygp
OworICAgIGNvbnN0IHNpemVfdCBkZXNpcmVkRmFzdE1lbW9yaWVzID0gc3RkOjptaW48c2l6ZV90
PihPcHRpb25zOjp3ZWJBc3NlbWJseUZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50KCksIGZhc3RN
ZW1vcnlDYWNoZUhhcmRMaW1pdCk7CisKKyAgICAvLyBTdGFydCBvZmYgdHJ5aW5nIHRvIGFsbG9j
YXRlIGZhc3QgbWVtb3JpZXMgY29udGlndW91c2x5IHNvIHRoZXkgZG9uJ3QgZnJhZ21lbnQgZWFj
aCBvdGhlci4gVGhpcyBjYW4gZmFpbCBpZiB0aGUgYWRkcmVzcyBzcGFjZSBpcyBvdGhlcndpc2Ug
ZnJhZ21lbnRlZC4gSW4gdGhhdCBjYXNlLCBnbyBmb3Igc21hbGxlciBjb250aWd1b3VzIGFsbG9j
YXRpb25zLiBXZSdsbCBldmVudHVhbGx5IGdldCBpbmRpdmlkdWFsIG5vbi1jb250aWd1b3VzIGZh
c3QgbWVtb3JpZXMgYWxsb2NhdGVkLCBvciB3ZSdsbCBqdXN0IGJlIHVuYWJsZSB0byBmaXQgYSBz
aW5nbGUgb25lIGF0IHdoaWNoIHBvaW50IHdlIGdpdmUgdXAuCisgICAgYXV0byBhbGxvY2F0ZUNv
bnRpZ3VvdXNGYXN0TWVtb3JpZXMgPSBbJl0gKHNpemVfdCBudW1Db250aWd1b3VzKSAtPiBib29s
IHsKKyAgICAgICAgaWYgKHZvaWQgKm1lbW9yeSA9IG1tYXBCeXRlcyhNZW1vcnk6OmZhc3RNYXBw
ZWRCeXRlcygpICogbnVtQ29udGlndW91cykpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IHN1
Yk1lbW9yeSA9IDA7IHN1Yk1lbW9yeSA8IG51bUNvbnRpZ3VvdXM7ICsrc3ViTWVtb3J5KSB7Cisg
ICAgICAgICAgICAgICAgdm9pZCogc3RhcnRBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4obWVtb3J5KSArIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkgKiBzdWJNZW1vcnkgKyBzdWJN
ZW1vcnk7CisgICAgICAgICAgICAgICAgYm9vbCBpbnNlcnRlZCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGNhY2hlRW50cnkgPSAwOyBjYWNoZUVudHJ5IDwgZmFzdE1lbW9y
eUNhY2hlSGFyZExpbWl0OyArK2NhY2hlRW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGZhc3RNZW1vcnlDYWNoZVtjYWNoZUVudHJ5XS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4
ZWQpID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhc3RNZW1vcnlDYWNo
ZVtjYWNoZUVudHJ5XS5zdG9yZShzdGFydEFkZHJlc3MsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4
ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zZXJ0ZWQpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CiAKLSAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkgJiYgbWFwcGVk
Q2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKTsKLSAgICBBU1NFUlQoZmFzdE1lbW9y
eUVuYWJsZWQoKSk7CisgICAgc2l6ZV90IGZyYWdtZW50cyA9IDA7CisgICAgc2l6ZV90IG51bUZh
c3RNZW1vcmllcyA9IDA7CisgICAgc2l6ZV90IGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0
ZW1wdCA9IGRlc2lyZWRGYXN0TWVtb3JpZXM7CisgICAgd2hpbGUgKG51bUZhc3RNZW1vcmllcyAh
PSBkZXNpcmVkRmFzdE1lbW9yaWVzICYmIGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1w
dCAhPSAwKSB7CisgICAgICAgIGlmIChhbGxvY2F0ZUNvbnRpZ3VvdXNGYXN0TWVtb3JpZXMoY29u
dGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0KSkgeworICAgICAgICAgICAgbnVtRmFzdE1l
bW9yaWVzICs9IGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdDsKKyAgICAgICAgICAg
IGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdCA9IHN0ZDo6bWluKGNvbnRpZ3VvdXNN
ZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdCAtIDEsIGRlc2lyZWRGYXN0TWVtb3JpZXMgLSBudW1GYXN0
TWVtb3JpZXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIC0tY29udGlndW91c01lbW9y
eUFsbG9jYXRpb25BdHRlbXB0OworICAgICAgICArK2ZyYWdtZW50czsKKyAgICB9CisKKyAgICBm
YXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCA9IG51bUZhc3RNZW1vcmllczsKKyAgICBjdXJyZW50
bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMuc3RvcmUoZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQs
IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIG9ic2VydmVkTWF4aW11bUZhc3RNZW1v
cnkuc3RvcmUoZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQpOwogCi0gICAgbWVtc2V0KG1lbW9yeSwgMCwgd3JpdGFibGVTaXplKTsKLSAgICBpZiAo
bXByb3RlY3QobWVtb3J5LCB3cml0YWJsZVNpemUsIFBST1RfTk9ORSkpCi0gICAgICAgIENSQVNI
KCk7CisgICAgY29uc3QgYXV0byBlbmRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtZW1vcnlMb2NrKTsKLSAgICBib29sIHJlc3VsdCA9IGFjdGl2
ZUZhc3RNZW1vcmllcyhsb2NrZXIpLnJlbW92ZShtZW1vcnkpOwotICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCByZXN1bHQpOwotICAgIEFTU0VSVChhdmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2Vy
KS5zaXplKCkgPCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMpOwotICAgIGF2YWlsYWJsZUZhc3RNZW1v
cmllcyhsb2NrZXIpLmFwcGVuZChtZW1vcnkpOwotICAgIG1lbW9yeSA9IG51bGxwdHI7CisgICAg
Zm9yIChzaXplX3QgY2FjaGVFbnRyeSA9IDA7IGNhY2hlRW50cnkgPCBmYXN0TWVtb3J5UHJlYWxs
b2NhdGVDb3VudDsgKytjYWNoZUVudHJ5KSB7CisgICAgICAgIHZvaWQqIHN0YXJ0QWRkcmVzcyA9
IGZhc3RNZW1vcnlDYWNoZVtjYWNoZUVudHJ5XS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4
ZWQpOworICAgICAgICBBU1NFUlQoc3RhcnRBZGRyZXNzKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIlByZS1hbGxvY2F0aW9uIG9mIFdlYkFzc2VtYmx5IGZhc3QgbWVtb3J5IGF0ICIs
IFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSk7CisgICAgfQorICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJQcmUtYWxsb2NhdGVkICIsIGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50LCAiIFdlYkFz
c2VtYmx5IGZhc3QgbWVtb3JpZXMgaW4gIiwgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQgPT0g
MCA/IDAgOiBmcmFnbWVudHMsIGZyYWdtZW50cyA9PSAxID8gIiBmcmFnbWVudCwgdG9vayAiIDog
IiBmcmFnbWVudHMsIHRvb2sgIiwgZW5kVGltZSAtIHN0YXJ0VGltZSk7CiB9CiAKIE1lbW9yeTo6
TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKQEAgLTE5Niw4NyAr
MzExLDk4IEBAIE1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkCiAKIFJlZlB0cjxNZW1vcnk+IE1lbW9y
eTo6Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11
bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZXF1aXJlZE1vZGUpCiB7CisgICAgQVNTRVJU
KGluaXRpYWwpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5p
dGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KIAorICAg
IGNvbnN0IHNpemVfdCBpbml0aWFsQnl0ZXMgPSBpbml0aWFsLmJ5dGVzKCk7CisgICAgY29uc3Qg
c2l6ZV90IG1heGltdW1CeXRlcyA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiAwOworICAg
IGNvbnN0IGJvb2wgY2FuVXNlRmFzdE1lbW9yeSA9ICFyZXF1aXJlZE1vZGUgfHwgcmVxdWlyZWRN
b2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZzsKICAgICBNZW1vcnlNb2RlIG1vZGUgPSByZXF1
aXJlZE1vZGUgPyAqcmVxdWlyZWRNb2RlIDogTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7Ci0g
ICAgY29uc3Qgc2l6ZV90IHNpemUgPSBpbml0aWFsLmJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1hcHBl
ZENhcGFjaXR5ID0gbWF4aW11bSA/IG1heGltdW0uYnl0ZXMoKSA6IFBhZ2VDb3VudDo6bWF4KCku
Ynl0ZXMoKTsKLSAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOworICAgIHNpemVfdCBtYXBwZWRD
YXBhY2l0eUJ5dGVzID0gMDsKKworICAgIC8vIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBoYXZlIGEg
c3R1YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCisgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNp
bmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBtYWtlRW1wdHlNZW1vcnkgPSBbJl0g
KCkgLT4gUmVmUHRyPE1lbW9yeT4geworICAgIGlmIChtYXhpbXVtICYmICFtYXhpbXVtQnl0ZXMp
IHsKKyAgICAgICAgLy8gVXNlciBzcGVjaWZpZWQgYSB6ZXJvIG1heGltdW0sIGluaXRpYWwgc2l6
ZSBtdXN0IGFsc28gYmUgemVyby4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWluaXRpYWxCeXRl
cyk7CiAgICAgICAgIGlmIChtb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZykKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5
KGluaXRpYWwsIG1heGltdW0pKTsKLSAgICB9OwotCi0gICAgaWYgKCFtYXBwZWRDYXBhY2l0eSkg
ewotICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIHNwZWNpZmllZCBhIHplcm8gYXMgbWF4aW11bSAo
d2hpY2ggbWVhbnMgd2UgYWxzbyBoYXZlIHplcm8gYXMgaW5pdGlhbCBzaXplKS4KLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIXNpemUpOwotICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVt
b3J5OjpjcmVhdGUgYWxsb2NhdGluZyBub3RoaW5nIik7Ci0gICAgICAgIHJldHVybiBtYWtlRW1w
dHlNZW1vcnkoKTsKICAgICB9CiAKLSAgICBib29sIGNhblVzZUZhc3RNZW1vcnkgPSAhcmVxdWly
ZWRNb2RlIHx8IHJlcXVpcmVkTW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7Ci0gICAgaWYg
KCFjYW5Vc2VGYXN0TWVtb3J5IHx8ICF0cnlHZXRGYXN0TWVtb3J5KHZtLCBtZW1vcnksIG1hcHBl
ZENhcGFjaXR5LCBtb2RlKSkgewotICAgICAgICBpZiAobW9kZSA9PSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB2b2lkKiBtZW1vcnkgPSBu
dWxscHRyOworICAgIGlmIChjYW5Vc2VGYXN0TWVtb3J5KSB7CisgICAgICAgIG1lbW9yeSA9IHRy
eUdldEZhc3RNZW1vcnkodm0pOworICAgICAgICBpZiAobWVtb3J5KSB7CisgICAgICAgICAgICBt
YXBwZWRDYXBhY2l0eUJ5dGVzID0gTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKTsKKyAgICAgICAg
ICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7CisgICAgICAgIH0KKyAgICB9CiAKLSAg
ICAgICAgaWYgKE9wdGlvbnM6OnNpbXVsYXRlV2ViQXNzZW1ibHlMb3dNZW1vcnkoKSA/IHRydWUg
OiAhbW1hcEJ5dGVzKG1hcHBlZENhcGFjaXR5LCBtZW1vcnkpKSB7Ci0gICAgICAgICAgICAvLyBU
cnkgYWdhaW4gd2l0aCBhIGRpZmZlcmVudCBudW1iZXIuCi0gICAgICAgICAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBmYWlsZWQgb25jZSBmb3IgY2FwYWNpdHks
IHRyeWluZyBhZ2FpbiIpOwotICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBzaXplOwotICAg
ICAgICAgICAgaWYgKCFtYXBwZWRDYXBhY2l0eSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIG5vdCB0cnlpbmcgYWdhaW4gYmVjYXVz
ZSBzaXplIGlzIHplcm8iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUVtcHR5TWVtb3J5
KCk7Ci0gICAgICAgICAgICB9CisgICAgaWYgKCFtZW1vcnkgJiYgbW9kZSA9PSBNZW1vcnlNb2Rl
OjpTaWduYWxpbmcpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICBpZiAo
IW1tYXBCeXRlcyhtYXBwZWRDYXBhY2l0eSwgbWVtb3J5KSkgewotICAgICAgICAgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIGZhaWxlZCB0d2ljZSIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgfQorICAgIGlmICgh
bWVtb3J5ICYmIG1heGltdW0pIHsKKyAgICAgICAgbWVtb3J5ID0gdHJ5R2V0U2xvd01lbW9yeSht
YXhpbXVtQnl0ZXMpOworICAgICAgICBpZiAobWVtb3J5KSB7CisgICAgICAgICAgICBtYXBwZWRD
YXBhY2l0eUJ5dGVzID0gbWF4aW11bUJ5dGVzOworICAgICAgICAgICAgbW9kZSA9IE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nOwogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKG1lbW9y
eSAmJiBzaXplIDw9IG1hcHBlZENhcGFjaXR5KTsKLSAgICBpZiAobXByb3RlY3QobWVtb3J5LCBz
aXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgewotICAgICAgICAvLyBGSVhNRTogc2hvdWxk
IHRoaXMgZXZlciBvY2N1cj8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2OTg5MAotICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbXBy
b3RlY3QgZmFpbGVkIik7Ci0gICAgICAgIHJlbGVhc2VGYXN0TWVtb3J5KG1lbW9yeSwgMCwgbWFw
cGVkQ2FwYWNpdHksIG1vZGUpOworICAgIGlmICghbWVtb3J5KSB7CisgICAgICAgIG1lbW9yeSA9
IHRyeUdldFNsb3dNZW1vcnkoaW5pdGlhbEJ5dGVzKTsKICAgICAgICAgaWYgKG1lbW9yeSkgewot
ICAgICAgICAgICAgaWYgKG11bm1hcChtZW1vcnksIG1hcHBlZENhcGFjaXR5KSkKLSAgICAgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHlCeXRlcyA9IGluaXRp
YWxCeXRlczsKKyAgICAgICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBzdWNjZWVkZWQiKTsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE1lbW9yeShtZW1vcnksIGluaXRpYWwsIG1heGltdW0sIG1hcHBlZENh
cGFjaXR5LCBtb2RlKSk7CisgICAgaWYgKCFtZW1vcnkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKCFtYWtlTmV3TWVtb3J5UmVhZFdyaXRlT3JSZWxpbnF1aXNoKG1lbW9yeSwg
aW5pdGlhbEJ5dGVzLCBtYXBwZWRDYXBhY2l0eUJ5dGVzLCBtb2RlKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShtZW1vcnksIGluaXRp
YWwsIG1heGltdW0sIG1hcHBlZENhcGFjaXR5Qnl0ZXMsIG1vZGUpKTsKIH0KIAogUmVmUHRyPE1l
bW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gbW9kZSkKIHsKLSAgICBSRUxFQVNF
X0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBi
ZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCiAgICAgUmVmUHRyPE1lbW9yeT4gcmVzdWx0ID0g
Y3JlYXRlSW1wbCh2bSwgaW5pdGlhbCwgbWF4aW11bSwgbW9kZSk7Ci0gICAgaWYgKHJlc3VsdCkg
ewotICAgICAgICBpZiAocmVzdWx0LT5tb2RlKCkgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LT5tX21hcHBlZENhcGFjaXR5ID09IGZh
c3RNZW1vcnlNYXBwZWRCeXRlcyk7Ci0gICAgICAgIGlmIChtb2RlKQotICAgICAgICAgICAgQVNT
RVJUKCptb2RlID09IHJlc3VsdC0+bW9kZSgpKTsKLSAgICB9CisgICAgaWYgKHJlc3VsdCAmJiBt
b2RlKQorICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIE1lbW9yeTo6fk1lbW9yeSgpCiB7Ci0gICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgIk1lbW9yeTo6fk1lbW9yeSAiLCAqdGhpcyk7Ci0gICAgcmVsZWFzZUZhc3RNZW1vcnko
bV9tZW1vcnksIG1fc2l6ZSwgbV9tYXBwZWRDYXBhY2l0eSwgbV9tb2RlKTsKICAgICBpZiAobV9t
ZW1vcnkpIHsKLSAgICAgICAgaWYgKG11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSkp
Ci0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVt
b3J5Ojp+TWVtb3J5ICIsICp0aGlzKTsKKyAgICAgICAgcmVsaW5xdWlzaE1lbW9yeShtX21lbW9y
eSwgbV9zaXplLCBtX21hcHBlZENhcGFjaXR5LCBtX21vZGUpOwogICAgIH0KIH0KIAorc2l6ZV90
IE1lbW9yeTo6ZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpCit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHNpemVfdD4oUGFnZUNvdW50OjpwYWdlU2l6ZSkgKiBPcHRpb25zOjp3ZWJBc3NlbWJseUZh
c3RNZW1vcnlSZWR6b25lUGFnZXMoKTsKK30KKworc2l6ZV90IE1lbW9yeTo6ZmFzdE1hcHBlZEJ5
dGVzKCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKHNp
emVfdCksICJXZSByZWx5IG9uIGFsbG93aW5nIHRoZSBtYXhpbXVtIHNpemUgb2YgTWVtb3J5IHdl
IG1hcCB0byBiZSAyXjMyICsgcmVkem9uZSB3aGljaCBpcyBsYXJnZXIgdGhhbiBmaXRzIGluIGEg
MzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3RlY3QgaWYgdGhpcyBkaWRuJ3Qg
aG9sZC4iKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCkpICsgZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpOworfQorCitz
aXplX3QgTWVtb3J5OjptYXhGYXN0TWVtb3J5Q291bnQoKQoreworICAgIC8vIFRoZSBvcmRlciBj
YW4gYmUgcmVsYXhlZCBoZXJlIGJlY2F1c2Ugd2UgcHJvdmlkZSBhIG1vbm90b25pY2FsbHktaW5j
cmVhc2luZyBlc3RpbWF0ZS4gQSBjb25jdXJyZW50IG9ic2VydmVyIGNvdWxkIHNlZSBhIHNsaWdo
dGx5IG91dC1vZi1kYXRlIHZhbHVlIGJ1dCBjYW4ndCB0ZWxsIHRoYXQgdGhleSBkaWQuCisgICAg
cmV0dXJuIG9ic2VydmVkTWF4aW11bUZhc3RNZW1vcnkubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkKTsKK30KKwogYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSkp
OwpAQCAtMzAxLDggKzQyNywxMSBAQCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6
ZSkKICAgICB9CiAKICAgICBpZiAobV9tZW1vcnkgJiYgZGVzaXJlZFNpemUgPD0gbV9tYXBwZWRD
YXBhY2l0eSkgewotICAgICAgICBpZiAobXByb3RlY3Qoc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1f
bWVtb3J5KSArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkZXNpcmVkU2l6ZSAtIG1fc2l6
ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogc2hv
dWxkIHRoaXMgZXZlciBvY2N1cj8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2OTg5MAorICAgICAgICB1aW50OF90KiBzdGFydEFkZHJlc3MgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4obV9tZW1vcnkpICsgbV9zaXplOworICAgICAgICBzaXplX3QgZXh0cmFCeXRlcyA9
IGRlc2lyZWRTaXplIC0gbV9zaXplOworICAgICAgICBSRUxFQVNFX0FTU0VSVChleHRyYUJ5dGVz
KTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1hcmtpbmcgV2ViQXNzZW1ibHkgbWVt
b3J5J3MgIiwgUmF3UG9pbnRlcihtX21lbW9yeSksICIgYXMgcmVhZCt3cml0ZSBpbiByYW5nZSBb
IiwgUmF3UG9pbnRlcihzdGFydEFkZHJlc3MpLCAiLCAiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVz
cyArIGV4dHJhQnl0ZXMpLCAiKSIpOworICAgICAgICBpZiAobXByb3RlY3Qoc3RhcnRBZGRyZXNz
LCBleHRyYUJ5dGVzLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgewogICAgICAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyBpbi1wbGFjZSBmYWlsZWQgIiwgKnRoaXMp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0zMTYsMTYgKzQ0NSwx
OSBAQCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKICAgICBSRUxFQVNFX0FT
U0VSVChtb2RlKCkgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKTsKIAogICAgIC8vIE90aGVyd2lz
ZSwgbGV0J3MgdHJ5IHRvIG1ha2Ugc29tZSBuZXcgbWVtb3J5LgotICAgIC8vIEZJWE1FOiBJdCB3
b3VsZCBiZSBuaWNlIGlmIHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKLSAgICB2b2lkKiBuZXdNZW1v
cnkgPSBtbWFwKG51bGxwdHIsIGRlc2lyZWRTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBN
QVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAgaWYgKG5ld01lbW9yeSA9PSBNQVBf
RkFJTEVEKQorICAgIC8vIEZJWE1FIG1yZW1hcCB3b3VsZCBiZSBuaWNlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NTcKKyAgICB2b2lkKiBuZXdNZW1vcnkgPSB0
cnlHZXRTbG93TWVtb3J5KGRlc2lyZWRTaXplKTsKKyAgICBpZiAoIW5ld01lbW9yeSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtYWtlTmV3TWVtb3J5UmVhZFdyaXRlT3JSZWxp
bnF1aXNoKG5ld01lbW9yeSwgZGVzaXJlZFNpemUsIGRlc2lyZWRTaXplLCBtb2RlKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9tZW1vcnkpIHsKICAgICAgICAgbWVtY3B5
KG5ld01lbW9yeSwgbV9tZW1vcnksIG1fc2l6ZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9ICFt
dW5tYXAobV9tZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdWNjZXNzKTsKKyAgICAgICAgcmVsaW5xdWlzaE1lbW9yeShtX21lbW9yeSwgbV9zaXplLCBt
X3NpemUsIG1fbW9kZSk7CiAgICAgfQorCiAgICAgbV9tZW1vcnkgPSBuZXdNZW1vcnk7CiAgICAg
bV9tYXBwZWRDYXBhY2l0eSA9IGRlc2lyZWRTaXplOwogICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXpl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCmluZGV4IGIwMjQ1MWQuLjAx
YmYzN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTYxLDEx
ICs2MSwxNiBAQCBwdWJsaWM6CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISFtX21lbW9yeTsgfQogCi0gICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0
ZShWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25h
bDxNZW1vcnlNb2RlPiByZXF1aXJlZE1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemVQcmVhbGxvY2F0aW9ucygpOworICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5
PiBjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0
ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKIAog
ICAgIE1lbW9yeSgpID0gZGVmYXVsdDsKICAgICB+TWVtb3J5KCk7CiAKKyAgICBzdGF0aWMgc2l6
ZV90IGZhc3RNYXBwZWRSZWR6b25lQnl0ZXMoKTsKKyAgICBzdGF0aWMgc2l6ZV90IGZhc3RNYXBw
ZWRCeXRlcygpOyAvLyBJbmNsdWRlcyByZWR6b25lLgorICAgIHN0YXRpYyBzaXplX3QgbWF4RmFz
dE1lbW9yeUNvdW50KCk7CisKICAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21l
bW9yeTsgfQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAg
UGFnZUNvdW50IHNpemVJblBhZ2VzKCkgY29uc3QgeyByZXR1cm4gUGFnZUNvdW50Ojpmcm9tQnl0
ZXMobV9zaXplKTsgfQpAQCAtODEsNyArODYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNoZWNr
KCkgeyAgQVNTRVJUKCFkZWxldGlvbkhhc0JlZ3VuKCkpOyB9CiBwcml2YXRlOgotICAgIHN0YXRp
YyBSZWZQdHI8TWVtb3J5PiBjcmVhdGVJbXBsKFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VD
b3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVpcmVkTW9kZSA9IHN0
ZDo6bnVsbG9wdCk7CisgICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZUltcGwoVk0mIHZt
LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVt
b3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKICAgICBNZW1vcnkodm9pZCog
bWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBw
ZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7CiAgICAgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQ
YWdlQ291bnQgbWF4aW11bSk7CiAKQEAgLTk0LDEyICs5OSwxNiBAQCBwcml2YXRlOgogICAgIE1l
bW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKIH07CiAKLXN0
YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkg
b24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzMg
d2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBw
YXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7Ci0KLWNvbnN0IHNpemVfdCBm
YXN0TWVtb3J5TWFwcGVkQnl0ZXMgPSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpICsgMSkgKiAyOyAvLyBwb2ludGVyIG1heCArIG9mZnNl
dCBtYXguIFRoaXMgaXMgYWxsIHdlIG5lZWQgc2luY2UgYSBsb2FkIHN0cmFkZGxpbmcgcmVhZGFi
bGUgbWVtb3J5IHdpbGwgdHJhcC4KIGV4dGVybiBTdGF0aWNMb2NrIG1lbW9yeUxvY2s7CiBjb25z
dCBIYXNoU2V0PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmllcyhjb25zdCBBYnN0cmFjdExv
Y2tlciYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCisjZWxzZQorCitjbGFzcyBN
ZW1vcnkgeworcHVibGljOgorICAgIHN0YXRpYyBzaXplX3QgbWF4RmFzdE1lbW9yeUNvdW50KCkg
eyByZXR1cm4gMDsgfQorfTsKKwogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHAKaW5kZXggNjU0N2Q2Mi4uOWNkNDdkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC02Myw3ICs2
Myw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogCiAgICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBtb2R1bGUpOwotICAgIGNvbnN0
IHNpemVfdCBleHRyYU1lbW9yeVNpemUgPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xv
YmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGNvbnN0IHNpemVfdCBleHRyYU1l
bW9yeVNpemUgPSBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpOwogICAgIG1fZ2xvYmFscyA9IE1hbGxv
Y1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwogICAgIGhlYXAoKS0+cmVw
b3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsKIApAQCAtODksNyArODks
NyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fbWVtb3J5KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3RhYmxlKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7Ci0gICAgdmlzaXRvci5yZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0
aW9uKCkuZ2xvYmFscy5zaXplKCkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKHRoaXNPYmplY3QtPmdsb2JhbE1lbW9yeUJ5dGVTaXplKCkpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1bmN0aW9uczsgKytpKQogICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbnMoKVtpXSk7CiB9
CkBAIC0zNTAsNiArMzUwLDEwIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgcmV0dXJu
IGluc3RhbmNlOwogfQogCitzaXplX3QgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpnbG9iYWxNZW1v
cnlCeXRlU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpLmdsb2JhbHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKK30KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggODU1MWZlOC4uNTNlZDk5ZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
CkBAIC05Miw2ICs5Miw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgVk0qIG1fdm07CiAg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0
d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KKyAgICBzaXplX3QgZ2xvYmFsTWVt
b3J5Qnl0ZVNpemUoKSBjb25zdDsKIAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9k
dWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4g
bV9jb2RlQmxvY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuY3BwCmluZGV4IDMzNjljMGUuLmM2ZDc4Y2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3Bw
CkBAIC0xMTcsNiArMTE3LDcgQEAgV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6
Omdyb3coVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHQKICAgICB9CiAKICAg
ICBtZW1vcnkoKS5jaGVjaygpOworICAgIC8vIEZJWE1FIFNob3VsZCB3ZSByZXBvcnQgZXh0cmEg
bWVtb3J5IHRvIHRoZSBHQyBvbiBhbGxvY2F0aW9uIC8gZ3JvdyAvIHZpc2l0PyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjkwCiAgICAgcmV0dXJuIG9sZFBhZ2VD
b3VudDsKIH0KIApAQCAtMTI0LDYgKzEyNSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAgIC8vIEZJWE1FIFNob3VsZCB3
ZSByZXBvcnQgZXh0cmEgbWVtb3J5IHRvIHRoZSBHQyBvbiBhbGxvY2F0aW9uIC8gZ3JvdyAvIHZp
c2l0PyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjkwCisgICAg
dm0uaGVhcC5yZXBvcnRXZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZCgxKTsKIH0KIAog
dm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTE0MSw2
ICsxNDQsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9i
dWZmZXJXcmFwcGVyKTsKKyAgICAvLyBGSVhNRSBTaG91bGQgd2UgcmVwb3J0IGV4dHJhIG1lbW9y
eSB0byB0aGUgR0Mgb24gYWxsb2NhdGlvbiAvIGdyb3cgLyB2aXNpdD8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDY5MAogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmggYi9Tb3VyY2UvV1RGL3d0
Zi9PU0FsbG9jYXRvci5oCmluZGV4IGM5Y2IxNTUuLmQ3Njc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3Iu
aApAQCAtMzYsNyArMzYsNiBAQCBwdWJsaWM6CiAgICAgZW51bSBVc2FnZSB7CiAgICAgICAgIFVu
a25vd25Vc2FnZSA9IC0xLAogICAgICAgICBGYXN0TWFsbG9jUGFnZXMgPSBWTV9UQUdfRk9SX1RD
TUFMTE9DX01FTU9SWSwKLSAgICAgICAgSlNHQ0hlYXBQYWdlcyA9IFZNX1RBR19GT1JfQ09MTEVD
VE9SX01FTU9SWSwKICAgICAgICAgSlNWTVN0YWNrUGFnZXMgPSBWTV9UQUdfRk9SX1JFR0lTVEVS
RklMRV9NRU1PUlksCiAgICAgICAgIEpTSklUQ29kZVBhZ2VzID0gVk1fVEFHX0ZPUl9FWEVDVVRB
QkxFQUxMT0NBVE9SX01FTU9SWSwKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
Vk1UYWdzLmggYi9Tb3VyY2UvV1RGL3d0Zi9WTVRhZ3MuaAppbmRleCBhZWYwNWQyLi4yN2ZjMGRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9WTVRhZ3MuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9WTVRhZ3MuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTEsMTUgKzUxLDE1IEBACiAjZW5kaWYgLy8gZGVmaW5lZChWTV9NRU1PUllf
SkFWQVNDUklQVF9KSVRfUkVHSVNURVJfRklMRSkKIAogI2lmIGRlZmluZWQoVk1fTUVNT1JZX0pB
VkFTQ1JJUFRfQ09SRSkKLSNkZWZpbmUgVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZIFZNX01B
S0VfVEFHKFZNX01FTU9SWV9KQVZBU0NSSVBUX0NPUkUpCisjZGVmaW5lIFZNX1RBR19GT1JfV0VC
QVNTRU1CTFlfTUVNT1JZIFZNX01BS0VfVEFHKFZNX01FTU9SWV9KQVZBU0NSSVBUX0NPUkUpCiAj
ZWxzZQotI2RlZmluZSBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlkgVk1fTUFLRV9UQUcoNjMp
CisjZGVmaW5lIFZNX1RBR19GT1JfV0VCQVNTRU1CTFlfTUVNT1JZIFZNX01BS0VfVEFHKDYzKQog
I2VuZGlmIC8vIGRlZmluZWQoVk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRSkKIAogI2Vsc2UgLy8g
T1MoREFSV0lOKQogCiAjZGVmaW5lIFZNX1RBR19GT1JfVENNQUxMT0NfTUVNT1JZIC0xCi0jZGVm
aW5lIFZNX1RBR19GT1JfQ09MTEVDVE9SX01FTU9SWSAtMQorI2RlZmluZSBWTV9UQUdfRk9SX1dF
QkFTU0VNQkxZX01FTU9SWSAtMQogI2RlZmluZSBWTV9UQUdfRk9SX0VYRUNVVEFCTEVBTExPQ0FU
T1JfTUVNT1JZIC0xCiAjZGVmaW5lIFZNX1RBR19GT1JfUkVHSVNURVJGSUxFX01FTU9SWSAtMQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwCmluZGV4IDU5MTJiMDUu
LjdhMTcwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0
LDYgKzM0LDcgQEAgUmVzb3VyY2VVc2FnZURhdGE6OlJlc291cmNlVXNhZ2VEYXRhKCkKIHsKICAg
ICAvLyBWTSB0YWcgY2F0ZWdvcmllcy4KICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpK
U0pJVF0gPSBNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkpTSklUKTsKKyAgICBj
YXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpXZWJBc3NlbWJseV0gPSBNZW1vcnlDYXRlZ29yeUlu
Zm8oTWVtb3J5Q2F0ZWdvcnk6OldlYkFzc2VtYmx5KTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNh
dGVnb3J5OjpJbWFnZXNdID0gTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpJbWFn
ZXMpOwogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkxheWVyc10gPSBNZW1vcnlDYXRl
Z29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkxheWVycyk7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlD
YXRlZ29yeTo6TGliY01hbGxvY10gPSBNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6
OkxpYmNNYWxsb2MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVz
YWdlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5oCmluZGV4
IDcyMzY5NmYuLjlmZjg2YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3Vy
Y2VVc2FnZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRh
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsMTIgKzM1LDEzIEBAIG5hbWVzcGFjZSBNZW1vcnlDYXRlZ29yeSB7CiBzdGF0aWMgY29u
c3QgdW5zaWduZWQgYm1hbGxvYyA9IDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgTGliY01hbGxv
YyA9IDE7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgSlNKSVQgPSAyOwotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIEltYWdlcyA9IDM7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgR0NIZWFwID0gNDsKLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBHQ093bmVkID0gNTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBP
dGhlciA9IDY7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgTGF5ZXJzID0gNzsKLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBOdW1iZXJPZkNhdGVnb3JpZXMgPSA4Oworc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFdlYkFzc2VtYmx5ID0gMzsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBJbWFnZXMgPSA0Oworc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIEdDSGVhcCA9IDU7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgR0NP
d25lZCA9IDY7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgT3RoZXIgPSA3Oworc3RhdGljIGNvbnN0
IHVuc2lnbmVkIExheWVycyA9IDg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgTnVtYmVyT2ZDYXRl
Z29yaWVzID0gOTsKIH0KIAogc3RydWN0IE1lbW9yeUNhdGVnb3J5SW5mbyB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0K
aW5kZXggMzY2NjAxZS4uOTczYjg2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9j
b2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTYyLDYgKzE2Miw3IEBAIEhp
c3RvcmljUmVzb3VyY2VVc2FnZURhdGE6Okhpc3RvcmljUmVzb3VyY2VVc2FnZURhdGEoKQogewog
ICAgIC8vIFZNIHRhZyBjYXRlZ29yaWVzLgogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6
OkpTSklUXSA9IEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpKU0pJ
VCwgMHhGRkZGNjBGRiwgIkpTIEpJVCIpOworICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6
OldlYkFzc2VtYmx5XSA9IEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5
OjpXZWJBc3NlbWJseSwgMHhGRjY1NEZGMCwgIldlYkFzc2VtYmx5Iik7CiAgICAgY2F0ZWdvcmll
c1tNZW1vcnlDYXRlZ29yeTo6SW1hZ2VzXSA9IEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKE1l
bW9yeUNhdGVnb3J5OjpJbWFnZXMsIDB4RkZGRkZGMDAsICJJbWFnZXMiKTsKICAgICBjYXRlZ29y
aWVzW01lbW9yeUNhdGVnb3J5OjpMYXllcnNdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8o
TWVtb3J5Q2F0ZWdvcnk6OkxheWVycywgMHhGRjAwRkZGRiwgIkxheWVycyIpOwogICAgIGNhdGVn
b3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkxpYmNNYWxsb2NdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29y
eUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkxpYmNNYWxsb2MsIDB4RkYwMEZGMDAsICJsaWJjIG1hbGxv
YyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdl
VGhyZWFkQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VU
aHJlYWRDb2NvYS5tbQppbmRleCAwNjRhNjFhLi5hMzBlZjIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNiAr
ODAsNyBAQCBjb25zdCBjaGFyKiBkaXNwbGF5TmFtZUZvclZNVGFnKHVuc2lnbmVkIHRhZykKICAg
ICBjYXNlIFZNX01FTU9SWV9JTUFHRUlPOiByZXR1cm4gIkltYWdlSU8iOwogICAgIGNhc2UgVk1f
TUVNT1JZX0NHSU1BR0U6IHJldHVybiAiQ0cgaW1hZ2UiOwogICAgIGNhc2UgVk1fTUVNT1JZX0pB
VkFTQ1JJUFRfSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SOiByZXR1cm4gIkpTQyBKSVQiOworICAg
IGNhc2UgVk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRTogcmV0dXJuICJXZWJBc3NlbWJseSI7CiAg
ICAgY2FzZSBWTV9NRU1PUllfTUFMTE9DOiByZXR1cm4gIm1hbGxvYyI7CiAgICAgY2FzZSBWTV9N
RU1PUllfTUFMTE9DX0hVR0U6IHJldHVybiAibWFsbG9jIChodWdlKSI7CiAgICAgY2FzZSBWTV9N
RU1PUllfTUFMTE9DX0xBUkdFOiByZXR1cm4gIm1hbGxvYyAobGFyZ2UpIjsKQEAgLTE4MSw2ICsx
ODIsOCBAQCBzdGF0aWMgdW5zaWduZWQgY2F0ZWdvcnlGb3JWTVRhZyh1bnNpZ25lZCB0YWcpCiAg
ICAgICAgIHJldHVybiBNZW1vcnlDYXRlZ29yeTo6SW1hZ2VzOwogICAgIGNhc2UgVk1fTUVNT1JZ
X0pBVkFTQ1JJUFRfSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SOgogICAgICAgICByZXR1cm4gTWVt
b3J5Q2F0ZWdvcnk6OkpTSklUOworICAgIGNhc2UgVk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRToK
KyAgICAgICAgcmV0dXJuIE1lbW9yeUNhdGVnb3J5OjpXZWJBc3NlbWJseTsKICAgICBjYXNlIFZN
X01FTU9SWV9NQUxMT0M6CiAgICAgY2FzZSBWTV9NRU1PUllfTUFMTE9DX0hVR0U6CiAgICAgY2Fz
ZSBWTV9NRU1PUllfTUFMTE9DX0xBUkdFOgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9y
Zy9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sIGIvV2Vic2l0ZXMvd2Vi
a2l0Lm9yZy9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCmluZGV4IDIw
YjU5YjUuLjFhNTk4YTUgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9p
bnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbAorKysgYi9XZWJzaXRlcy93ZWJraXQub3Jn
L2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwKQEAgLTY1NCw5ICs2NTQs
OSBAQCBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICA8ZGQ+U3BlY2lhbCBXYXNtIG9w
Y29kZS4gVGhpcyBicmFuY2hlcyBvbiB0aGUgZmlyc3QgY2hpbGQuIElmIHRoZSBmaXJzdCBjaGls
ZCBwbHVzIHRoZSBvZmZzZXQKICAgICAgICAgcHJvZHVjZXMgYSBJbnQ2NCBsZXNzIHRoYW4gdG8g
dGhlIHBpbm5lZEdQUiB0aGlzIGZhbGxzIHRocm91Z2guIE90aGVyd2lzZSwgaXQgYnJhbmNoZXMg
dG8KICAgICAgICAgdGhlIGV4aXQgcGF0aCBnZW5lcmF0ZWQgYnkgdGhlIHBhc3NlZCBnZW5lcmF0
b3IuIFVubGlrZSB0aGUgUGF0Y2gvQ2hlY2sgZmFtaWx5LCB0aGUKLSAgICAgICAgZ2VuZXJhdG9y
IHVzZWQgYnkgV2FzbUJvdW5kc0NoZWNrIHNvdWxkIGJlIHNldCBvbiB0aGUgUHJvY3VkZXIgaXRz
ZWxmLiBUaGUgR1JQUmVnIHBhc3NlZCBpbgorICAgICAgICBnZW5lcmF0b3IgdXNlZCBieSBXYXNt
Qm91bmRzQ2hlY2sgc2hvdWxkIGJlIHNldCBvbiB0aGUgUHJvY2VkdXJlIGl0c2VsZi4gVGhlIEdS
UFJlZyBwYXNzZWQgaW4KICAgICAgICAgcGlubmVkR1BSIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMg
cGlubmVkIGJ5IGNhbGxpbmcgdGhlIFByb2NlZHVyZSdzIHBpbm5pbmcgQVBJLiBCMyBhc3N1bWVz
Ci0gICAgICAgIHRoZSBXYXNtQm91bmRzQ2hlY2sgd2lsbCBzaWRlLWV4aXQgd2hlbiB0aGUgaXQg
YnJhbmNoZXMsIHNvIHRoZSBnZW5lcmF0b3IgbXVzdCBkbyBzb21lIGtpbmQKKyAgICAgICAgdGhl
IFdhc21Cb3VuZHNDaGVjayB3aWxsIHNpZGUtZXhpdCB3aGVuIGl0IGJyYW5jaGVzLCBzbyB0aGUg
Z2VuZXJhdG9yIG11c3QgZG8gc29tZSBraW5kCiAgICAgICAgIG9mIHRlcm1pbmF0aW9uLiBJbiBX
YXNtIHRoaXMgaXMgdXNlZCB0byB0cmFwIGFuZCB1bndpbmQgYmFjayB0byBKUy4gTXVzdCB1c2Ug
dGhlCiAgICAgICAgIFdhc21Cb3VuZHNDaGVja1ZhbHVlIGNsYXNzLjwvZGQ+CiAKLS0gCjIuMTAu
MQoK
</data>
<flag name="commit-queue"
          id="328101"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306873</attachid>
            <date>2017-04-11 16:48:32 -0700</date>
            <delta_ts>2017-04-12 10:25:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-fast-memories-everywhere.patch</filename>
            <type>text/plain</type>
            <size>96444</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA5MzRiNDM1MTFlOGY3NjY5MDA0MmFhYjk1ZmE1NDNkOTAxOWU4ZTI0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDYgQXByIDIwMTcgMTU6MTQ6NDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBmYXN0LW1l
bW9yaWVzLWV2ZXJ5d2hlcmUKCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMzAgKysKIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICstCiBKU1Rlc3RzL3dhc20vV0FTTS5qcyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMCArKwogLi4uL3dhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMgfCAxMzAgKysrKysrCiBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanMgICAgICAgICB8ICAxOCArCiBKU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQuanMgICB8IDExNyArKysrKysKIEpT
VGVzdHMvd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMgICAgICAgIHwgIDE1ICsK
IEpTVGVzdHMvd2FzbS91dGlsaXRpZXMuanMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2
ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgIHwg
MTI0ICsrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgICAg
ICAgICAgfCAgMzQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcCAg
ICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAg
ICAgICAgICAgICAgICB8ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuY3BwICAgfCAgMjEgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dh
c21Cb3VuZHNDaGVja1ZhbHVlLmggIHwgIDE0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckN1c3RvbS5jcHAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwICAgICAgICAgICAgICAgIHwgIDMxICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmggICAgICAgICAgICAgICAgICB8ICAxMyArCiAuLi4vSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgICAgICAgICAgfCAgIDkgKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDUgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgIDQ2
ICsrLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAg
fCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwICAgICAg
ICAgIHwgNDU5ICsrKysrKysrKysrKysrLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgMjMgKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5jcHAgICAgICAgICAgICAgIHwgICA4ICstCiAuLi4vSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCB8ICAgMSArCiAuLi4vSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcCB8ICAgNCArCiBTb3VyY2UvV1RG
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMCArCiBTb3VyY2Uv
V1RGL3d0Zi9PU0FsbG9jYXRvci5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSAtCiBTb3Vy
Y2UvV1RGL3d0Zi9WTVRhZ3MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCArLQog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjYg
KysKIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwICAgICAgICAgIHwg
ICAzICstCiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmggICAgICAgICAg
ICB8ICAxNSArLQogLi4uL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbSAg
ICAgICAgfCAgIDMgKy0KIC4uLi9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVh
ZENvY29hLm1tIHwgICA1ICstCiBXZWJzaXRlcy93ZWJraXQub3JnL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICB8ICAgOSArCiAuLi4vZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50
YXRpb24uaHRtbCAgICAgICB8ICAgNCArLQogMzggZmlsZXMgY2hhbmdlZCwgMTA1NiBpbnNlcnRp
b25zKCspLCAyMTcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3MtcGFzdC00Z2liLmpzCiBjcmVhdGUgbW9kZSAx
MDA2NDQgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1tYW55LmpzCiBjcmVhdGUg
bW9kZSAxMDA2NDQgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1tdWx0aWFnZW50
LmpzCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwpp
bmRleCBlZWY5ZmMwLi45MGE0YjdhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE3LTA0LTExICBKRiBCYXN0
aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogbWFuYWdl
IG1lbW9yeSBiZXR0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MDYyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd2FzbS9CdWlsZGVyLmpzOiBtb3ZlIGEgaGVscGVyIG91dCBzbyB0ZXN0cyBjYW4g
dXNlIGl0CisgICAgICAgIChleHBvcnQuZGVmYXVsdC5CdWlsZGVyLnByb3RvdHlwZS5fcmVnaXN0
ZXJTZWN0aW9uQnVpbGRlcnMuY29uc3Quc2VjdGlvbi5pbi5XQVNNLmRlc2NyaXB0aW9uLnNlY3Rp
b24uc3dpdGNoLnNlY3Rpb24uY2FzZS5zdHJpbmdfYXBwZWFyZWRfaGVyZS50aGlzLnNlY3Rpb24p
OgorICAgICAgICAqIHdhc20vV0FTTS5qczogYWRkIHV0aWxpdGllcyB0byBjbGFzc2lmeSBvcGNv
ZGVzCisgICAgICAgIChleHBvcnQub3Bjb2Rlcyk6CisgICAgICAgIChleHBvcnQuY29uc3QubWVt
b3J5QWNjZXNzSW5mby5vcC5jb25zdC5zaWduKToKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRl
c3RzL21lbW9yeS1hY2Nlc3MtcGFzdC00Z2liLmpzOiBBZGRlZC4gVGhpcyB0ZXN0CisgICAgICAg
IGZhaWxzIGJlZm9yZSB0aGlzIHBhdGNoLgorICAgICAgICAoY29uc3Qub3Aub2YuV0FTTS5vcGNv
ZGVzKToKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1tYW55LmpzOiBBZGRl
ZC4gVGhpcyBzaW1wbGUgdGVzdHMKKyAgICAgICAganVzdCBzaG91bGRuJ3QgY3Jhc2guIEluIHZl
cmJvc2UgbW9kZSBpdCdzIHVzZWZ1bCBhdCBkZXRlcm1pbmluZworICAgICAgICBpZiB0aGUgR0Mg
ZmFsbHMgYmVoaW5kIG9yIG5vdC4KKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9y
eS1tdWx0aWFnZW50LmpzOiBBZGRlZC4gRW11bGF0ZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKGNv
bnN0LnN0YXJ0QWdlbnRzLm51bUFnZW50c1RvU3RhcnQuYS5hZ2VudC5yZWNlaXZlQnJvYWRjYXN0
KToKKyAgICAgICAgKGNvbnN0LnN0YXJ0QWdlbnRzLm51bUFnZW50c1RvU3RhcnQuYS53cml0ZS5j
b25zdC5pZHguTWF0aC5yYW5kb20pOgorICAgICAgICAoY29uc3QuYnJvYWRjYXN0VG9BZ2VudHMp
OgorICAgICAgICAqIHdhc20vanMtYXBpL2V4dGVuc2lvbi1NZW1vcnlNb2RlLmpzOiB2ZXJib3Nl
IGxvZ2dpbmcuCisgICAgICAgICh0ZXN0TWVtb3J5Tm9NYXgpOgorICAgICAgICAodGVzdE1lbW9y
eSk6CisgICAgICAgICh0ZXN0SW5zdGFuY2VOb01lbW9yeSk6CisgICAgICAgICh0ZXN0SW5zdGFu
Y2VOb01heCk6CisgICAgICAgICh0ZXN0SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vdXRpbGl0
aWVzLmpzOiBtb3ZlIGEgdXRpbGl0eSBoZXJlLgorCiAyMDE3LTA0LTA2ICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIENhbm5vdCBPYmplY3Quc2VhbCgpIG9y
IE9iamVjdC5mcmVlemUoKSBnbG9iYWwgInRoaXMiCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
QnVpbGRlci5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCmluZGV4IDhmZjVkY2UuLmRlZTc4
NmQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCkBAIC0yNywxMiArMjcsNyBAQCBpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAn
YXNzZXJ0LmpzJzsKIGltcG9ydCAqIGFzIEJ1aWxkV2ViQXNzZW1ibHkgZnJvbSAnQnVpbGRlcl9X
ZWJBc3NlbWJseUJpbmFyeS5qcyc7CiBpbXBvcnQgKiBhcyBMTEIgZnJvbSAnTG93TGV2ZWxCaW5h
cnkuanMnOwogaW1wb3J0ICogYXMgV0FTTSBmcm9tICdXQVNNLmpzJzsKLQotY29uc3QgX3RvSmF2
YVNjcmlwdE5hbWUgPSBuYW1lID0+IHsKLSAgICBjb25zdCBjYW1lbENhc2UgPSBuYW1lLnJlcGxh
Y2UoLyhbXmEtejAtOV0uKS9nLCBjID0+IGNbMV0udG9VcHBlckNhc2UoKSk7Ci0gICAgY29uc3Qg
Q2FtZWxDYXNlID0gY2FtZWxDYXNlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY2FtZWxDYXNl
LnNsaWNlKDEpOwotICAgIHJldHVybiBDYW1lbENhc2U7Ci19OworaW1wb3J0ICogYXMgdXRpbCBm
cm9tICd1dGlsaXRpZXMuanMnOwogCiBjb25zdCBfaXNWYWxpZFZhbHVlID0gKHZhbHVlLCB0eXBl
KSA9PiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0yMjUsNyArMjIwLDcgQEAgY29uc3QgX2lt
cG9ydEdsb2JhbENvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikg
PT4gewogICAgICAgICAgICAgRW5kOiAoKSA9PiBuZXh0QnVpbGRlcgogICAgICAgICB9OwogICAg
ICAgICBmb3IgKGxldCBvcCBvZiBXQVNNLmRlc2NyaXB0aW9uLnZhbHVlX3R5cGUpIHsKLSAgICAg
ICAgICAgIGdsb2JhbEJ1aWxkZXJbX3RvSmF2YVNjcmlwdE5hbWUob3ApXSA9IChtb2R1bGUsIGZp
ZWxkLCBtdXRhYmlsaXR5KSA9PiB7CisgICAgICAgICAgICBnbG9iYWxCdWlsZGVyW3V0aWwudG9K
YXZhU2NyaXB0TmFtZShvcCldID0gKG1vZHVsZSwgZmllbGQsIG11dGFiaWxpdHkpID0+IHsKICAg
ICAgICAgICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IGdsb2JhbCBtb2R1
bGUgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7bW9kdWxlfSJgKTsKICAgICAgICAgICAgICAg
ICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgZ2xvYmFsIGZpZWxkIHNob3VsZCBiZSBh
IHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuaXNTdHJp
bmcobXV0YWJpbGl0eSwgYEltcG9ydCBnbG9iYWwgbXV0YWJpbGl0eSBzaG91bGQgYmUgYSBzdHJp
bmcsIGdvdCAiJHttdXRhYmlsaXR5fSJgKTsKQEAgLTMxOCw3ICszMTMsNyBAQCBjb25zdCBfY2hl
Y2tJbW1zID0gKG9wLCBpbW1zLCBleHBlY3RlZEltbXMsIHJldCkgPT4gewogY29uc3QgX2NyZWF0
ZUZ1bmN0aW9uQnVpbGRlciA9IChmdW5jLCBidWlsZGVyLCBwcmV2aW91c0J1aWxkZXIpID0+IHsK
ICAgICBsZXQgZnVuY3Rpb25CdWlsZGVyID0ge307CiAgICAgZm9yIChjb25zdCBvcCBpbiBXQVNN
LmRlc2NyaXB0aW9uLm9wY29kZSkgewotICAgICAgICBjb25zdCBuYW1lID0gX3RvSmF2YVNjcmlw
dE5hbWUob3ApOworICAgICAgICBjb25zdCBuYW1lID0gdXRpbC50b0phdmFTY3JpcHROYW1lKG9w
KTsKICAgICAgICAgY29uc3QgdmFsdWUgPSBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF0udmFs
dWU7CiAgICAgICAgIGNvbnN0IHJldCA9IFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlW29wXVsicmV0
dXJuIl07CiAgICAgICAgIGNvbnN0IHBhcmFtID0gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbb3Bd
LnBhcmFtZXRlcjsKQEAgLTU0Miw3ICs1MzcsNyBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWls
ZGVyIHsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgb3Agb2YgV0FTTS5kZXNjcmlwdGlvbi52YWx1
ZV90eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxCdWlsZGVyW190b0phdmFT
Y3JpcHROYW1lKG9wKV0gPSAoaW5pdFZhbHVlLCBtdXRhYmlsaXR5KSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBnbG9iYWxCdWlsZGVyW3V0aWwudG9KYXZhU2NyaXB0TmFtZShvcCldID0g
KGluaXRWYWx1ZSwgbXV0YWJpbGl0eSkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHMuZGF0YS5wdXNoKHsgdHlwZTogb3AsIG9wOiBvcCArICIuY29uc3QiLCBtdXRhYmlsaXR5OiBf
bm9ybWFsaXplTXV0YWJpbGl0eShtdXRhYmlsaXR5KSwgaW5pdFZhbHVlIH0pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3JIYW5kbGluZ1Byb3h5Rm9yKGdsb2JhbEJ1
aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9XQVNNLmpzIGIvSlNUZXN0cy93YXNtL1dBU00uanMKaW5kZXggMWJiNzliOC4uMWU2NGNh
ZSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL1dBU00uanMKKysrIGIvSlNUZXN0cy93YXNtL1dB
U00uanMKQEAgLTQ0LDMgKzQ0LDMzIEBAIGV4cG9ydCBjb25zdCBpc1ZhbGlkQmxvY2tUeXBlID0g
diA9PiBfYmxvY2tUeXBlU2V0Lmhhcyh2KTsKIGV4cG9ydCBjb25zdCBleHRlcm5hbEtpbmRWYWx1
ZSA9IF9tYXBWYWx1ZXMoZGVzY3JpcHRpb24uZXh0ZXJuYWxfa2luZCk7CiBleHBvcnQgY29uc3Qg
c2VjdGlvbnMgPSBPYmplY3Qua2V5cyhkZXNjcmlwdGlvbi5zZWN0aW9uKTsKIGV4cG9ydCBjb25z
dCBzZWN0aW9uRW5jb2RpbmdUeXBlID0gZGVzY3JpcHRpb24uc2VjdGlvbltzZWN0aW9uc1swXV0u
dHlwZTsKKworZXhwb3J0IGZ1bmN0aW9uKiBvcGNvZGVzKGNhdGVnb3J5ID0gdW5kZWZpbmVkKSB7
CisgICAgZm9yIChsZXQgb3AgaW4gZGVzY3JpcHRpb24ub3Bjb2RlKQorICAgICAgICBpZiAoY2F0
ZWdvcnkgIT09IHVuZGVmaW5lZCAmJiBkZXNjcmlwdGlvbi5vcGNvZGVbb3BdLmNhdGVnb3J5ID09
PSBjYXRlZ29yeSkKKyAgICAgICAgICAgIHlpZWxkIHsgbmFtZTogb3AsIG9wY29kZTogZGVzY3Jp
cHRpb24ub3Bjb2RlW29wXSB9OworfTsKK2V4cG9ydCBjb25zdCBtZW1vcnlBY2Nlc3NJbmZvID0g
b3AgPT4geworICAgIC8vICAgICAgICAgICAgICAgIDwtLS0tLS0tLS0tLXZhbHVlVHlwZS0tLS0t
LS0tLS0tPiAgPC0tLS0tLS10eXBlLS0tLS0tLT48LS0tLS0tLS0td2lkdGgtLS0tLS0tLT4gIDwt
LXNpZ24tLT4KKyAgICBjb25zdCBjbGFzc2lmeSA9IC8oKD86aTMyKXwoPzppNjQpfCg/OmYzMil8
KD86ZjY0KSlcLigoPzpsb2FkKXwoPzpzdG9yZSkpKCg/OjgpP3woPzoxNik/fCg/OjMyKT8pXz8o
KD86c3x1KT8pLzsKKyAgICBjb25zdCBmb3VuZCA9IG9wLm5hbWUubWF0Y2goY2xhc3NpZnkpOwor
ICAgIGNvbnN0IHZhbHVlVHlwZSA9IGZvdW5kWzFdOworICAgIGNvbnN0IHR5cGUgPSBmb3VuZFsy
XTsKKyAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KGZvdW5kWzNdID8gZm91bmRbM10gOiB2YWx1
ZVR5cGUuc2xpY2UoMSkpOworICAgIGNvbnN0IHNpZ24gPSAoKCkgPT4geworICAgICAgICBzd2l0
Y2ggKGZvdW5kWzRdKSB7CisgICAgICAgIGNhc2UgInMiOiByZXR1cm4gInNpZ25lZCI7CisgICAg
ICAgIGNhc2UgInUiOiByZXR1cm4gInVuc2lnbmVkIjsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJu
ICJhZ25vc3RpYyI7CisgICAgICAgIH0KKyAgICB9KSgpOworICAgIHJldHVybiB7IHZhbHVlVHlw
ZSwgdHlwZSwgd2lkdGgsIHNpZ24gfTsKK307CisKK2V4cG9ydCBjb25zdCBjb25zdEZvclZhbHVl
VHlwZSA9IHZhbHVlVHlwZSA9PiB7CisgICAgZm9yIChsZXQgb3AgaW4gZGVzY3JpcHRpb24ub3Bj
b2RlKQorICAgICAgICBpZiAob3AuZW5kc1dpdGgoIi5jb25zdCIpICYmIGRlc2NyaXB0aW9uLm9w
Y29kZVtvcF1bInJldHVybiJdID09IHZhbHVlVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBvcDsK
KyAgICB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IG5vIGNvbnN0IHR5
cGUgZm9yICR7dmFsdWVUeXBlfWApOworfTsKKwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3MtcGFzdC00Z2liLmpzIGIvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3MtcGFzdC00Z2liLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmQxYTVmMDMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMKQEAgLTAsMCArMSwx
MzAgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworaW1wb3J0ICogYXMg
YXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CitpbXBvcnQgKiBhcyBMTEIgZnJvbSAnLi4vTG93
TGV2ZWxCaW5hcnkuanMnOworaW1wb3J0ICogYXMgV0FTTSBmcm9tICcuLi9XQVNNLmpzJzsKK2lt
cG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbGl0aWVzLmpzJzsKKworY29uc3QgdmVyYm9zZSA9
IGZhbHNlOworCitjb25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKK2NvbnN0IGZvdXJHaUIgPSBw
YWdlU2l6ZSAqIDY1NTM2OworY29uc3QgaW5pdGlhbCA9IDY0OworY29uc3QgbWF4aW11bSA9IDEy
ODsKKworLy8gV2hlbiB1c2luZyBmYXN0IG1lbW9yaWVzLCB3ZSBhbGxvY2F0ZSBhIHJlZHpvbmUg
YWZ0ZXIgdGhlIDRHaUIgaHVnZQorLy8gYWxsb2NhdGlvbi4gVGhpcyByZWR6b25lIGlzIHVzZWQg
dG8gdHJhcCByZWcraW1tIGFjY2Vzc2VzIHdoaWNoIGV4Y2VlZAorLy8gMzItYml0cy4gQW55dGhp
bmcgcGFzdCA0R2lCIG11c3QgdHJhcCwgYnV0IHdlIGNhbm5vdCBrbm93IHN0YXRpY2FsbHkgdGhh
dCBpdAorLy8gd2lsbC4KKworY29uc3Qgb2Zmc2V0cyA9IFsKKyAgICAwLAorICAgIDEsCisgICAg
MiwKKyAgICAxMDI0LAorICAgIHBhZ2VTaXplLAorICAgIHBhZ2VTaXplICsgcGFnZVNpemUgLyAy
LAorICAgIHBhZ2VTaXplICogOCwKKyAgICBwYWdlU2l6ZSAqIDE2LAorICAgIHBhZ2VTaXplICog
MTI4LAorICAgIHBhZ2VTaXplICogNTEyLAorICAgIGZvdXJHaUIgLyA0IC0gNCwKKyAgICBmb3Vy
R2lCIC8gNCAtIDMsCisgICAgZm91ckdpQiAvIDQgLSAyLAorICAgIGZvdXJHaUIgLyA0IC0gMSwK
KyAgICBmb3VyR2lCIC8gNCwKKyAgICBmb3VyR2lCIC8gNCArIDEsCisgICAgZm91ckdpQiAvIDQg
KyAyLAorICAgIGZvdXJHaUIgLyA0ICsgMywKKyAgICBmb3VyR2lCIC8gNCArIDQsCisgICAgZm91
ckdpQiAvIDIgLSA0LAorICAgIGZvdXJHaUIgLyAyIC0gMywKKyAgICBmb3VyR2lCIC8gMiAtIDIs
CisgICAgZm91ckdpQiAvIDIgLSAxLAorICAgIGZvdXJHaUIgLyAyLAorICAgIGZvdXJHaUIgLyAy
ICsgMSwKKyAgICBmb3VyR2lCIC8gMiArIDIsCisgICAgZm91ckdpQiAvIDIgKyAzLAorICAgIGZv
dXJHaUIgLyAyICsgNCwKKyAgICAoZm91ckdpQiAvIDQpICogMywKKyAgICBmb3VyR2lCIC0gNCwK
KyAgICBmb3VyR2lCIC0gMywKKyAgICBmb3VyR2lCIC0gMiwKKyAgICBmb3VyR2lCIC0gMSwKK107
CisKK2ZvciAobGV0IG1lbW9yeURlY2xhcmF0aW9uIG9mIFt7IGluaXRpYWw6IGluaXRpYWwgfSwg
eyBpbml0aWFsOiBpbml0aWFsLCBtYXhpbXVtOiBtYXhpbXVtIH1dKSB7CisgICAgZnVsbEdDKCk7
CisKKyAgICAvLyBSZS11c2UgYSBzaW5nbGUgbWVtb3J5IHNvIHRlc3RzIGFyZSBtb3JlIGxpa2Vs
eSB0byBnZXQgYSBmYXN0IG1lbW9yeS4KKyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1i
bHkuTWVtb3J5KG1lbW9yeURlY2xhcmF0aW9uKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
cHJpbnQoV2ViQXNzZW1ibHlNZW1vcnlNb2RlKG1lbW9yeSkpOworICAgIGNvbnN0IGJ1ZiA9IG5l
dyBVaW50OEFycmF5KG1lbW9yeS5idWZmZXIpOworCisgICAgLy8gRW51bWVyYXRlIGFsbCBtZW1v
cnkgYWNjZXNzIHR5cGVzLgorICAgIGZvciAoY29uc3Qgb3Agb2YgV0FTTS5vcGNvZGVzKCJtZW1v
cnkiKSkgeworICAgICAgICBjb25zdCBpbmZvID0gV0FTTS5tZW1vcnlBY2Nlc3NJbmZvKG9wKTsK
KworICAgICAgICAvLyBUaGUgYWNjZXNzZXMgc2hvdWxkIGZhdWx0IGV2ZW4gaWYgb25seSB0aGUg
bGFzdCBieXRlIGlzIG9mZiB0aGUgZW5kLgorICAgICAgICBsZXQgd2lnZ2xlcyA9IFswXTsKKyAg
ICAgICAgZm9yIChsZXQgd2lnZ2xlID0gMDsgd2lnZ2xlICE9PSBpbmZvLndpZHRoIC8gODsgKyt3
aWdnbGUpCisgICAgICAgICAgICB3aWdnbGVzLnB1c2god2lnZ2xlKTsKKworICAgICAgICBsZXQg
YnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAg
ICAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlY2xhcmF0
aW9uKS5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5F
eHBvcnQoKTsKKworICAgICAgICBmb3IgKGxldCBvZmZzZXQgb2Ygb2Zmc2V0cykKKyAgICAgICAg
ICAgIHN3aXRjaCAoaW5mby50eXBlKSB7CisgICAgICAgICAgICBjYXNlICJsb2FkIjogYnVpbGRl
ciA9IGJ1aWxkZXIuRnVuY3Rpb24oImdldF8iICsgb2Zmc2V0KTsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlICJzdG9yZSI6IGJ1aWxkZXIgPSBidWlsZGVyLkZ1bmN0aW9uKCJzZXRfIiArIG9mZnNl
dCk7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1l
bnRhdGlvbiBwcm9ibGVtOiB1bmtub3duIG1lbW9yeSBhY2Nlc3MgdHlwZSAke2luZm8udHlwZX1g
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBidWlsZGVyID0gYnVpbGRlci5FbmQoKS5Db2Rl
KCk7CisKKyAgICAgICAgY29uc3QgYWxpZ24gPSAzOyAvLyBObyBuZWVkIHRvIGJlIHByZWNpc2Us
IGl0J3MganVzdCBhIGhpbnQuCisgICAgICAgIGNvbnN0IGNvbnN0SW5zdHIgPSB1dGlsLnRvSmF2
YVNjcmlwdE5hbWUoV0FTTS5jb25zdEZvclZhbHVlVHlwZShpbmZvLnZhbHVlVHlwZSkpOworICAg
ICAgICBjb25zdCBpbnN0ciA9IHV0aWwudG9KYXZhU2NyaXB0TmFtZShvcC5uYW1lKTsKKyAgICAg
ICAgZm9yIChsZXQgb2Zmc2V0IG9mIG9mZnNldHMpCisgICAgICAgICAgICBzd2l0Y2ggKGluZm8u
dHlwZSkgeworICAgICAgICAgICAgY2FzZSAibG9hZCI6CisgICAgICAgICAgICAgICAgYnVpbGRl
ciA9IGJ1aWxkZXIuRnVuY3Rpb24oImdldF8iICsgb2Zmc2V0LCB7IHBhcmFtczogWyJpMzIiXSB9
KS5HZXRMb2NhbCgwKVtpbnN0cl0oYWxpZ24sIG9mZnNldCkuRHJvcCgpLkVuZCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAic3RvcmUiOgorICAgICAgICAgICAg
ICAgIGJ1aWxkZXIgPSBidWlsZGVyLkZ1bmN0aW9uKCJzZXRfIiArIG9mZnNldCwgeyBwYXJhbXM6
IFsiaTMyIl0gfSkuR2V0TG9jYWwoMClbY29uc3RJbnN0cl0oMHhkZWFkKVtpbnN0cl0oYWxpZ24s
IG9mZnNldCkuRW5kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJv
YmxlbTogdW5rbm93biBtZW1vcnkgYWNjZXNzIHR5cGUgJHtpbmZvLnR5cGV9YCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBidWlsZGVyID0gYnVpbGRlci5FbmQoKTsKKworICAg
ICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIHsgaW1wOiB7IG1lbW9y
eTogbWVtb3J5IH0gfSk7CisKKyAgICAgICAgZm9yIChsZXQgb2Zmc2V0IG9mIG9mZnNldHMpIHsK
KyAgICAgICAgICAgIGZvciAobGV0IHdpZ2dsZSBvZiB3aWdnbGVzKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgYWRkcmVzcyA9IExMQi52YXJ1aW50MzJNYXggLSBvZmZzZXQgLSB3aWdnbGU7Cisg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIHByaW50KGAk
e29wLm5hbWUucGFkU3RhcnQoMTYsICcgJyl9OiBiYXNlIGFkZHJlc3MgJHthZGRyZXNzID4gMCA/
ICcweCcgOiAnICAnfSR7YWRkcmVzcy50b1N0cmluZygxNikucGFkU3RhcnQoOCwgYWRkcmVzcyA+
IDAgPyAnMCcgOiAnICcpfSArIG9mZnNldCAweCR7b2Zmc2V0LnRvU3RyaW5nKDE2KS5wYWRTdGFy
dCg4LCAnMCcpfSAtIHdpZ2dsZSAke3dpZ2dsZX0gPSBlZmZlY3RpdmUgYWRkcmVzcyAweCR7KGFk
ZHJlc3MgKyBvZmZzZXQgLSB3aWdnbGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwgJzAnKX1g
KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGluZm8udHlwZSkgeworICAgICAgICAgICAgICAg
IGNhc2UgImxvYWQiOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGlu
c3RhbmNlLmV4cG9ydHNbImdldF8iICsgb2Zmc2V0XShhZGRyZXNzKSwgV2ViQXNzZW1ibHkuUnVu
dGltZUVycm9yLCBgT3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzYCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgInN0b3JlIjoKKyAgICAgICAgICAg
ICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzWyJzZXRfIiArIG9m
ZnNldF0oYWRkcmVzcyksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgYE91dCBvZiBib3VuZHMg
bWVtb3J5IGFjY2Vzc2ApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVu
a25vd24gbWVtb3J5IGFjY2VzcyB0eXBlICR7aW5mby50eXBlfWApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bGxHQygpOworICAgIH0K
KworICAgIC8vIE9ubHkgY2hlY2sgdGhhdCB0aGUgbWVtb3J5IHdhcyB1bnRvdWNoZWQgYXQgdGhl
IHZlcnkgZW5kLCBiZWZvcmUgdGhyb3dpbmcgaXQgYXdheSBlbnRpcmVseS4KKyAgICBmb3IgKGxl
dCBpZHggPSAwOyBpZHggPCBidWYuYnl0ZUxlbmd0aDsgKytpZHgpCisgICAgICAgIGFzc2VydC5l
cShidWZbaWR4XSwgMCk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LW1hbnkuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1h
bnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE0M2M2MgotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktbWFueS5qcwpA
QCAtMCwwICsxLDE4IEBACitjb25zdCBtZW1vcmllcyA9IDEyODsKK2NvbnN0IHZlcmJvc2UgPSBm
YWxzZTsKK2NvbnN0IGluaXRpYWwgPSAxOworCitsZXQgdHlwZXMgPSB7fTsKKworZm9yIChsZXQg
bSA9IDA7IG0gPCBtZW1vcmllczsgKyttKSB7CisgICAgbGV0IG1lbW9yeSA9IG5ldyBXZWJBc3Nl
bWJseS5NZW1vcnkoeyBpbml0aWFsOiBpbml0aWFsIH0pOworICAgIGxldCB0eXBlID0gV2ViQXNz
ZW1ibHlNZW1vcnlNb2RlKG1lbW9yeSk7CisgICAgdHlwZXNbdHlwZV0gPSB0eXBlc1t0eXBlXSA/
IHR5cGVzW3R5cGVdICsgMSA6IDE7Cit9CisKK2lmICh2ZXJib3NlKSB7CisgICAgbGV0IGdvdCA9
ICJHb3Q6ICI7CisgICAgZm9yIChsZXQgcCBpbiB0eXBlcykKKyAgICAgICAgZ290ICs9IGAgJHt0
eXBlc1twXX06ICR7cH1gOworICAgIHByaW50KGdvdCk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQuanMgYi9KU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNGViMmQzNAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9m
dW5jdGlvbi10ZXN0cy9tZW1vcnktbXVsdGlhZ2VudC5qcwpAQCAtMCwwICsxLDExNyBAQAorY29u
c3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7CisKK2NvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKworLy8g
U3RhcnQgbXVsdGlwbGUgYWdlbnRzIGFuZCBjcmVhdGUgV2ViQXNzZW1ibHkuTWVtb3J5IGZyb20g
ZWFjaCBvZgorLy8gdGhlbS4gUGVyZm9ybSB3cml0ZXMgaW50byBlYWNoIG1lbW9yeSwgYW5kIHRo
ZW4gY2hlY2sgdGhhdCB0aGUgbWVtb3J5IG9ubHkKKy8vIGNvbnRhaW5zIHRoYXQgYWdlbnQncyB3
cml0ZXMuIFRoaXMgd291bGQgZmluZCBidWdzIHdoZXJlIGFuIGltcGxlbWVudGF0aW9uJ3MKKy8v
IG1lbW9yeSByZXVzZSBpcyBidWdneS4KKworLy8gVXNlIHRoZSBhZ2VudCBzdXBwb3J0IGZyb20g
dGVzdDI2MjogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvdGVzdDI2Mi9ibG9iL21hc3Rlci9JTlRF
UlBSRVRJTkcubWQjaG9zdC1kZWZpbmVkLWZ1bmN0aW9ucworCitjb25zdCB0ZXN0SXRlcmF0aW9u
cyA9IDI7Citjb25zdCBudW1BZ2VudHMgPSA4OworY29uc3QgaW5pdGlhbFBhZ2VzID0gNjQ7Citj
b25zdCBudW1Xcml0ZXMgPSAxMDI0OworCitjb25zdCBzdGF0ZVdhaXQgPSAwOworY29uc3Qgc3Rh
dGVSZWFkeSA9IDE7Citjb25zdCBzdGF0ZUNoZWNrID0gMjsKKworY29uc3Qgc3RhcnRBZ2VudHMg
PSBudW1BZ2VudHNUb1N0YXJ0ID0+IHsKKyAgICBmb3IgKGxldCBhID0gMDsgYSA8IG51bUFnZW50
c1RvU3RhcnQ7ICsrYSkgeworICAgICAgICBjb25zdCBhZ2VudFNjcmlwdCA9IGAKKyAgICAgICAg
bGV0IHN0YXRlID0gJHtzdGF0ZVdhaXR9OworICAgICAgICBsZXQgdTg7CisKKyAgICAgICAgaWYg
KCR7dmVyYm9zZX0pCisgICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSBzdGFydGVkIik7Cisg
ICAgICAgICQuYWdlbnQucmVwb3J0KCJBZ2VudCAke2F9IHN0YXJ0ZWQiKTsKKworICAgICAgICAk
LmFnZW50LnJlY2VpdmVCcm9hZGNhc3QoKHNhYiwgbmV3U3RhdGUpID0+IHsKKyAgICAgICAgICAg
IGlmICgke3ZlcmJvc2V9KQorICAgICAgICAgICAgICAgIHByaW50KCJBZ2VudCAke2F9IHJlY2Vp
dmVkIGJyb2FkY2FzdCIpOworICAgICAgICAgICAgdTggPSBuZXcgVWludDhBcnJheShzYWIpOwor
ICAgICAgICAgICAgc3RhdGUgPSBuZXdTdGF0ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29u
c3QgYnVzeVdhaXRGb3JWYWx1ZSA9IHZhbHVlID0+IHsKKyAgICAgICAgICAgIC8vIEJ1c3ktd2Fp
dCBzbyB0aGF0IG9uY2UgdGhlIFNBQiB3cml0ZSBvY2N1cnMgYWxsIGFnZW50cyB0cnkgdG8gY3Jl
YXRlIGEgbWVtb3J5IGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICB3aGlsZSAoQXRvbWlj
cy5sb2FkKHU4LCAwKSAhPT0gdmFsdWUpIDsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoJHt2
ZXJib3NlfSkKKyAgICAgICAgICAgIHByaW50KCJBZ2VudCAke2F9IHdhaXRzIik7CisgICAgICAg
ICQuYWdlbnQucmVwb3J0KCJBZ2VudCAke2F9IHdhaXRzIik7CisgICAgICAgIHdoaWxlIChzdGF0
ZSA9PT0gJHtzdGF0ZVdhaXR9KSA7CisgICAgICAgICQuYWdlbnQucmVwb3J0KCJBZ2VudCAke2F9
IHJlY2VpdmVkIFNBQiIpOworICAgICAgICAvLyBVc2UgaXQgZm9yIGZhc3RlciBzdGF0ZSBjaGFu
Z2Ugc28gYWxsIGFnZW50cyBhcmUgbW9yZSBsaWtlbHkgdG8gZXhlY3V0ZSBhdCB0aGUgc2FtZSB0
aW1lLgorICAgICAgICBidXN5V2FpdEZvclZhbHVlKCR7c3RhdGVSZWFkeX0pOworCisgICAgICAg
IGxldCB3YXNtTWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6ICR7aW5p
dGlhbFBhZ2VzfSB9KTsKKyAgICAgICAgbGV0IG1lbW9yeSA9IG5ldyBVaW50OEFycmF5KCh3YXNt
TWVtb3J5KS5idWZmZXIpOworICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAgICAgIHBy
aW50KCJBZ2VudCAke2F9IHBlcmZvcm1pbmcgd3JpdGVzIik7CisgICAgICAgIGZvciAobGV0IHdy
aXRlID0gMDsgd3JpdGUgPCAke251bVdyaXRlc307ICsrd3JpdGUpIHsKKyAgICAgICAgICAgIC8v
IFBlcmZvcm0gd3JpdGVzIG9mIG91ciBhZ2VudCBudW1iZXIgYXQgYSByYW5kb20gbG9jYXRpb24u
IFRoaXMgbWVtb3J5IHNob3VsZCBub3QgYmUgc2hhcmVkLCBpZiB3ZSBzZWUgd3JpdGVzIG9mIG90
aGVyIHZhbHVlcyB0aGVuIHNvbWV0aGluZyB3ZW50IHdyb25nLgorICAgICAgICAgICAgY29uc3Qg
aWR4ID0gKE1hdGgucmFuZG9tKCkgKiAke3BhZ2VTaXplfSAqICR7aW5pdGlhbFBhZ2VzfSkgfCAw
OworICAgICAgICAgICAgbWVtb3J5W2lkeF0gPSAke2F9OworICAgICAgICB9CisgICAgICAgIGlm
ICgke3ZlcmJvc2V9KQorICAgICAgICAgICAgcHJpbnQoIkFnZW50ICR7YX0gd3JpdGVzIHBlcmZv
cm1lZCIpOworICAgICAgICAkLmFnZW50LnJlcG9ydCgiQWdlbnQgJHthfSBwZXJmb3JtZWQgd3Jp
dGVzIik7CisgICAgICAgIGJ1c3lXYWl0Rm9yVmFsdWUoJHtzdGF0ZUNoZWNrfSk7CisKKyAgICAg
ICAgaWYgKCR7dmVyYm9zZX0pCisgICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSBjaGVja2lu
ZyIpOworICAgICAgICAvLyBDaGVjayB0aGF0IG91ciBtZW1vcnkgb25seSBjb250YWlucyAwIGFu
ZCBvdXIgYWdlbnQgbnVtYmVyLgorICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCAke3Bh
Z2VTaXplfSAqICR7aW5pdGlhbFBhZ2VzfTsgKytpZHgpCisgICAgICAgICAgICBpZiAobWVtb3J5
W2lkeF0gIT09IDAgJiYgbWVtb3J5W2lkeF0gIT09ICR7YX0pCisgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJBZ2VudCAke2F9IGZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUgIiArIG1lbW9y
eVtpZHhdICsgIiBhdCBsb2NhdGlvbiAiICsgaWR4KTsKKyAgICAgICAgJC5hZ2VudC5yZXBvcnQo
IkFnZW50ICR7YX0gY2hlY2tzIG91dCBPSyIpOworICAgICAgICAkLmFnZW50LmxlYXZpbmcoKTsK
KyAgICAgICAgYDsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIHByaW50KGBT
dGFydGluZyBhZ2VudCAke2F9YCk7CisgICAgICAgICQuYWdlbnQuc3RhcnQoYWdlbnRTY3JpcHQp
OworICAgIH0KK307CisKK2NvbnN0IHdhaXRGb3JBZ2VudHMgPSBudW1BZ2VudHNUb1dhaXRGb3Ig
PT4geworICAgIGZvciAobGV0IGEgPSAwOyBhIDwgbnVtQWdlbnRzVG9XYWl0Rm9yOyArK2EpIHsK
KyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGNvbnN0IHJlcG9ydCA9ICQuYWdl
bnQuZ2V0UmVwb3J0KCk7CisgICAgICAgICAgICBpZiAocmVwb3J0ID09PSBudWxsKSB7CisgICAg
ICAgICAgICAgICAgJC5hZ2VudC5zbGVlcCgxKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IHByaW50KGBSZWNlaXZlZDogJHtyZXBvcnR9YCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KK307CisKK2NvbnN0IGJyb2FkY2FzdFRvQWdlbnRzID0gKHNhYiwgbmV3U3Rh
dGUpID0+IHsKKyAgICAkLmFnZW50LmJyb2FkY2FzdChzYWIsIG5ld1N0YXRlKTsKK307CisKK2Nv
bnN0IHNhYiA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcigxMDI0KTsKK2NvbnN0IHU4ID0gbmV3IFVp
bnQ4QXJyYXkoc2FiKTsKKworZm9yIChsZXQgaXQgPSAwOyBpdCA8IHRlc3RJdGVyYXRpb25zOyAr
K2l0KSB7CisgICAgc3RhcnRBZ2VudHMobnVtQWdlbnRzKTsKKyAgICB3YWl0Rm9yQWdlbnRzKG51
bUFnZW50cyk7CisgICAgYnJvYWRjYXN0VG9BZ2VudHMoc2FiLCBzdGF0ZVJlYWR5KTsKKyAgICB3
YWl0Rm9yQWdlbnRzKG51bUFnZW50cyk7CisgICAgJC5hZ2VudC5zbGVlcCgxKTsKKyAgICBBdG9t
aWNzLnN0b3JlKHU4LCAwLCBzdGF0ZVJlYWR5KTsKKyAgICB3YWl0Rm9yQWdlbnRzKG51bUFnZW50
cyk7CisgICAgJC5hZ2VudC5zbGVlcCgxKTsKKyAgICBBdG9taWNzLnN0b3JlKHU4LCAwLCBzdGF0
ZUNoZWNrKTsKKyAgICB3YWl0Rm9yQWdlbnRzKG51bUFnZW50cyk7CisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIHByaW50KCJFdmVyeXRpbmcgd2FzIGZpbmUiKTsKKyAgICAkLmFnZW50LnNsZWVw
KDEpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5
TW9kZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMKaW5k
ZXggOTE5MWNlYzQuLjU2MDg1MjYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZXh0
ZW5zaW9uLU1lbW9yeU1vZGUuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24t
TWVtb3J5TW9kZS5qcwpAQCAtMiw2ICsyLDcgQEAgaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVp
bGRlci5qcyc7CiBpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKIAogY29u
c3QgaXRlcmF0aW9ucyA9IDMyOworY29uc3QgdmVyYm9zZSA9IGZhbHNlOwogCiAvLyBUaGlzIEFQ
SSBpc24ndCBwYXJ0IG9mIFdlYkFzc2VtYmx5J3Mgb2ZmaWNpYWwgc3BlYy4gSXQgaXMgdXNlIGZv
ciB0ZXN0aW5nIHdpdGhpbiB0aGUgc2hlbGwuCiAKQEAgLTIxLDYgKzIyLDggQEAgYXNzZXJ0LnRo
cm93cygoKSA9PiBXZWJBc3NlbWJseU1lbW9yeU1vZGUobmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtp
bml0aWFsOiAxLCBlbGUKIAogY29uc3QgdmFsaWRhdGVNb2RlID0gd2hhdCA9PiB7CiAgICAgY29u
c3QgbW9kZSA9IFdlYkFzc2VtYmx5TWVtb3J5TW9kZSh3aGF0KTsKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgcHJpbnQoYCAgICAke21vZGV9YCk7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAg
Y2FzZSAiU2lnbmFsaW5nIjoKICAgICAgICAgYnJlYWs7CkBAIC0zOSw2ICs0Miw4IEBAIGNvbnN0
IGluc3RhbnRpYXRlID0gYnVpbGRlciA9PiB7CiB9OwogCiAoZnVuY3Rpb24gdGVzdE1lbW9yeU5v
TWF4KCkgeworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdE1lbW9yeU5vTWF4
YCk7CiAgICAgbGV0IG1lbW9yaWVzID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRl
cmF0aW9uczsgKytpKQogICAgICAgICBtZW1vcmllcy5wdXNoKHZhbGlkYXRlTW9kZShuZXcgV2Vi
QXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogaSB9KSkpOwpAQCAtNDgsNiArNTMsOCBAQCBjb25z
dCBpbnN0YW50aWF0ZSA9IGJ1aWxkZXIgPT4gewogZnVsbEdDKCk7CiAKIChmdW5jdGlvbiB0ZXN0
TWVtb3J5KCkgeworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdE1lbW9yeWAp
OwogICAgIGxldCBtZW1vcmllcyA9IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJh
dGlvbnM7ICsraSkKICAgICAgICAgbWVtb3JpZXMucHVzaCh2YWxpZGF0ZU1vZGUobmV3IFdlYkFz
c2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6IGksIG1heGltdW06IGkgfSkpKTsKQEAgLTU3LDYgKzY0
LDggQEAgZnVsbEdDKCk7CiBmdWxsR0MoKTsKIAogKGZ1bmN0aW9uIHRlc3RJbnN0YW5jZU5vTWVt
b3J5KCkgeworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgdGVzdEluc3RhbmNlTm9N
ZW1vcnlgKTsKICAgICBsZXQgaW5zdGFuY2VzID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7IGkg
IT0gaXRlcmF0aW9uczsgKytpKSB7CiAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxk
ZXIoKSkKQEAgLTY2LDYgKzc1LDggQEAgZnVsbEdDKCk7CiAgICAgICAgIGNvbnN0IGluc3RhbmNl
ID0gaW5zdGFudGlhdGUoYnVpbGRlcik7CiAgICAgICAgIC8vIE5vLW1lbW9yeSBpbnN0YW5jZXMg
c2hvdWxkIG5ldmVyIGJlIFNpZ25hbGluZzogaXQgd291bGQgYmUgd2FzdGVmdWwuCiAgICAgICAg
IGFzc2VydC5lcShXZWJBc3NlbWJseU1lbW9yeU1vZGUoaW5zdGFuY2UpLCAiQm91bmRzQ2hlY2tp
bmciKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBwcmludChgICAgICR7V2Vi
QXNzZW1ibHlNZW1vcnlNb2RlKGluc3RhbmNlKX1gKTsKICAgICAgICAgaW5zdGFuY2VzLnB1c2go
aW5zdGFuY2UpOwogICAgIH0KICAgICByZXR1cm4gaW5zdGFuY2VzOwpAQCAtNzQsNiArODUsOCBA
QCBmdWxsR0MoKTsKIGZ1bGxHQygpOwogCiAoZnVuY3Rpb24gdGVzdEluc3RhbmNlTm9NYXgoKSB7
CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGB0ZXN0SW5zdGFuY2VOb01heGApOwog
ICAgIGxldCBpbnN0YW5jZXMgPSBbXTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBpdGVyYXRp
b25zOyArK2kpIHsKICAgICAgICAgLy8gTm90ZTogbm90IGV4cG9ydGVkISBUaGUgaW50ZXJuYWwg
QVBJIGNhbiBzdGlsbCBhY2Nlc3MuCkBAIC04OSw2ICsxMDIsOCBAQCBmdWxsR0MoKTsKIGZ1bGxH
QygpOwogCiAoZnVuY3Rpb24gdGVzdEluc3RhbmNlKCkgeworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBwcmludChgdGVzdEluc3RhbmNlYCk7CiAgICAgbGV0IGluc3RhbmNlcyA9IFtdOwogICAg
IGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlvbnM7ICsraSkgewogICAgICAgICAvLyBOb3Rl
OiBub3QgZXhwb3J0ZWQhIFRoZSBpbnRlcm5hbCBBUEkgY2FuIHN0aWxsIGFjY2Vzcy4KZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS91dGlsaXRpZXMuanMgYi9KU1Rlc3RzL3dhc20vdXRpbGl0aWVz
LmpzCmluZGV4IDE5ZjliNGUuLmJjNjlhZDcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS91dGls
aXRpZXMuanMKKysrIGIvSlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcwpAQCAtNzksNiArNzksMTIg
QEAgY29uc3QgX2R1bXAgPSAod2hhdCwgbmFtZSwgcGFkID0gJyAgICAnKSA9PiB7CiAgICAgcmV0
dXJuIHM7CiB9OwogCitleHBvcnQgY29uc3QgdG9KYXZhU2NyaXB0TmFtZSA9IG5hbWUgPT4gewor
ICAgIGNvbnN0IGNhbWVsQ2FzZSA9IG5hbWUucmVwbGFjZSgvKFteYS16MC05XS4pL2csIGMgPT4g
Y1sxXS50b1VwcGVyQ2FzZSgpKTsKKyAgICBjb25zdCBDYW1lbENhc2UgPSBjYW1lbENhc2UuY2hh
ckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjYW1lbENhc2Uuc2xpY2UoMSk7CisgICAgcmV0dXJuIENh
bWVsQ2FzZTsKK307CisKIC8vIFVzZSB1bmRlcnNjb3JlIG5hbWVzIHRvIGF2b2lkIGNsYXNoaW5n
IHdpdGggYnVpbHRpbiBuYW1lcy4KIGV4cG9ydCB7CiAgICAgX2R1bXAgYXMgZHVtcCwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCmluZGV4IDBmN2YzNTUuLjkyMWNjYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAxNy0wNC0xMSAgSkYgQmFzdGllbiAgPGpmYmFz
dGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG1hbmFnZSBtZW1vcnkgYmV0
dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJB
c3NlbWJseSBmYXN0IG1lbW9yaWVzIHdlcmVuJ3QgbWFuYWdlZCB2ZXJ5IHdlbGwuIFRoaXMgcGF0
Y2gKKyAgICAgICAgcmVmYWN0b3JzIGl0IGFuZCBwdXRzIHVzIGluIGEgZ29vZCBwb3NpdGlvbiB0
byBmdXJ0aGVyIGltcHJvdmUgb3VyCisgICAgICAgIGZhc3QgbWVtb3J5IGhhbmRsaW5nIGluIHRo
ZSBmdXR1cmUuCisKKyAgICAgICAgV2Ugbm93IGNhY2hlIGZhc3QgbWVtb3JpZXMgYXQgYSBwcm9j
ZXNzIGdyYW51bGFyaXR5LCBidXQgbWFrZSBzdXJlCisgICAgICAgIHRoYXQgdGhleSBkb24ndCBj
b25zdW1lIGRpcnR5IHBhZ2VzLiBXZSBhZGQgYSBjYXAgdG8gdGhlIHRvdGFsCisgICAgICAgIG51
bWJlciBvZiBhbGxvY2F0ZWQgZmFzdCBtZW1vcmllcyB0byBhdm9pZCBBU0xSIGRlZ3JhZGF0aW9u
LgorCisgICAgICAgIFdlIHRlYWNoIHRoZSBHQyBhYm91dCBtZW1vcmllcyBhcyBhIGtpbmQgb2Yg
cmVzb3VyY2UgaXQgc2hvdWxkCisgICAgICAgIGNhcmUgYWJvdXQgYmVjYXVzZSBpdCBkaWRuJ3Qg
aGF2ZSB2aXNpYmlsaXR5IGludG8gdGhlIGFtb3VudCBvZgorICAgICAgICBtZW1vcnkgZWFjaCBy
ZXByZXNlbnRlZC4gVGhpcyBhbGxvd3MgYmVuY2htYXJrcyB3aGljaCBhbGxvY2F0ZQorICAgICAg
ICBtZW1vcmllcyBiYWNrLXRvLWJhY2sgdG8gcmVsaWFibHkgZ2V0IGZhc3QgbWVtb3JpZXMgMTAw
JSBvZiB0aGUKKyAgICAgICAgdGltZSwgZXZlbiBvbiBhIHN5c3RlbSB1bmRlciBsb2FkLCB3aGlj
aCB3YXNuJ3QgdGhlIGNhc2UKKyAgICAgICAgYmVmb3JlLiBUaGlzIHJlbGlhYmlsaXR5IHlpZWxk
cyByb3VnaGx5IDglIHBlcmYgYnVtcCBvbiB4ODYtNjQKKyAgICAgICAgV2FzbUJlbmNoLgorCisg
ICAgICAgIFRoZSBHQyBoZXVyaXN0aWMgaXMgYXMgZm9sbG93czogZWFjaCB0aW1lIHdlIGFsbG9j
YXRlIGEgZmFzdAorICAgICAgICBtZW1vcnkgd2Ugbm90aWZ5IHRoZSBHQywgd2hpY2ggdGhlbiBr
ZWVwcyB0cmFjayBvZiB0aGUgdG90YWwKKyAgICAgICAgbnVtYmVyIG9mIGZhc3QgbWVtb3JpZXMg
YWxsb2NhdGVkIHNpbmNlIGl0IGxhc3QgR0MnZC4gV2UKKyAgICAgICAgc2VwYXJhdGVseSBrZWVw
IHRyYWNrIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgZmFzdCBtZW1vcmllcyB3aGljaAorICAgICAg
ICBoYXZlIGV2ZXIgZXhpc3RlZCBhdCBhbnkgcG9pbnQgaW4gdGltZSAoY2FjaGVkICsgYWxsb2Nh
dGVkKS4gVGhpcworICAgICAgICBpcyBhIG1vbm90b25pY2FsbHktaW5jcmVhc2luZyBoaWdoIHdh
dGVybWFyay4gVGhlIEdDIHdpbGwgZm9yY2UgYQorICAgICAgICBmdWxsIGNvbGxlY3Rpb24gaWYs
IHNpbmNlIGl0IGxhc3QgcmFuLCBoYWxmIG9yIG1vcmUgb2YgdGhlIGhpZ2gKKyAgICAgICAgd2F0
ZXJtYXJrIG9mIGZhc3QgbWVtb3JpZXMgd2FzIGFsbG9jYXRlZC4KKworICAgICAgICBBdCB0aGUg
c2FtZSB0aW1lLCBpZiB3ZSBmYWlsIG9idGFpbmluZyBhIGZhc3QgbWVtb3J5IGZyb20gdGhlCisg
ICAgICAgIGNhY2hlIHdlIGRvIGEgR0MgdG8gdHJ5IHRvIGZpbmQgb25lLiBJZiB0aGF0IGZhaWxz
IHdlJ2xsIGFsbG9jYXRlCisgICAgICAgIGEgbmV3IG9uZS4gVGhpcyBjYW4gYWxzbyBiZSBpbXBy
b3ZlZCwgYnV0IGl0J3MgYSBnb29kIHN0YXJ0LgorCisgICAgICAgIFRoaXMgY3VycmVudGx5IGRp
c2FibGVzIGZhc3QgbWVtb3JpZXMgb24gaU9TIGJlY2F1c2UgZ2V0dGluZyBmYXN0CisgICAgICAg
IG1lbW9yaWVzIGlzbid0IGEgZ3VhcmFudGVlZCB0aGluZy4gUmF0aGVyLCB3ZSBnZXQgcXVpdGUg
YSBmZXcgb2YKKyAgICAgICAgdGhlbSBhbmQgYWNoaWV2ZSBzaWduaWZpY2FudCBzcGVlZHVwcywg
YnV0IGJlbmNobWFya3Mgd2hpY2gKKyAgICAgICAgYWxsb2NhdGUgbWVtb3JpZXMgYmFjay10by1i
YWNrIGVuZCB1cCBmYWxsaW5nIGJlaGluZCBiZWNhdXNlIHRoZQorICAgICAgICBHQyBjYW4gY29u
c2VydmF0aXZlbHkgaG9sZCBvbnRvIG1lbW9yaWVzLCB3aGljaCB0aGVuIHlpZWxkcyBhIHBlcmYK
KyAgICAgICAgY2xpZmYuIFRoYXQgY2xpZmYgaXNuJ3QgcmVsaWFibGUsIFdhc21CZW5jaCBnZXRz
IHJvdWdobHkgMTAgb2YgMTgKKyAgICAgICAgZmFzdCBtZW1vcmllcyB3aGVuIGluIHRoZW9yeSBp
dCBzaG91bGQgZ2V0IGFsbCBvZiB0aGVtIGZhc3QgKGFzCisgICAgICAgIE1hY09TIGRvZXMpLiBU
aGUgcGF0Y2ggc2lnbmlmaWNhbnRseSBpbXByb3ZlcyB0aGUgc3RhdGUgb2YgaU9TCisgICAgICAg
IHRob3VnaCwgYW5kIGluIGEgZm9sbG93LXVwIHdlIGNvdWxkIHJlLWVuYWJsZSBmYXN0IG1lbW9y
aWVzLgorCisgICAgICAgIFBhcnQgb2YgdGhpcyBnb29kIHBvc2l0aW9uaW5nIGlzIGEgZmFjaWxp
dHkgdG8gcHJlLWFsbG9jYXRlIGZhc3QKKyAgICAgICAgbWVtb3JpZXMgdmVyeSBlYXJseSBhdCBz
dGFydHVwLCBiZWZvcmUgYW55IGZyYWdtZW50YXRpb24KKyAgICAgICAgb2NjdXJzLiBUaGlzIGlz
IGN1cnJlbnRseSBkaXNhYmxlZCBidXQgd29ya2VkIGV4dHJlbWVseSByZWxpYWJseQorICAgICAg
ICBvbiBpT1MuIE9uY2Ugd2UgZml4IHRoIGFib3ZlIGlzc3VlcyB3ZSdsbCB3YW50IHRvIHJlLXZp
c2l0IGFuZAorICAgICAgICB0dXJuIG9uIHByZS1hbGxvY2F0aW9uLgorCisgICAgICAgIFdlIGFs
c28gYXZvaWQgbG9ja2luZyBmb3IgZmFzdCBtZW1vcnkgaWRlbnRpZmljYXRpb24gd2hlbgorICAg
ICAgICBwZXJmb3JtaW5nIHNpZ25hbCBoYW5kbGluZy4KKworICAgICAgICBXZSBub3cgb25seSBh
bGxvY2F0ZSA0R2lCICsgcmVkem9uZSBvZiA2NGsgKiAxMjggZm9yIGZhc3QgbWVtb3JpZXMKKyAg
ICAgICAgaW5zdGVhZCBvZiA4R2lCLiBUaGlzIHBhdGNoIHJldXNlcyB0aGUgbG9naWMgZnJvbQor
ICAgICAgICBCMzo6V2FzbUJvdW5kc0NoZWNrIHRvIHBlcmZvcm0gYm91bmRzIGNoZWNrcyB3aGVu
IGFjY2Vzc2VzIGNvdWxkCisgICAgICAgIGV4Y2VlZCB0aGUgcmVkem9uZS4gV2UnbGwgdGhlcmVm
b3JlIGJlbmVmaXQgZnJvbSBDU0UgZ29vZG5lc3Mgd2hlbgorICAgICAgICBpdCByZWFjaGVzIFdh
c21Cb3VuZHNDaGVjay4gU2VlIGJ1ZyAjMTYzNDY5LgorCisgICAgICAgICogYjMvQjNMb3dlclRv
QWlyLmNwcDogZml4IGEgYmFhYWFkZGQgYnVnIHdoZXJlIHVuc2lnbmVkLT5zaWduZWQKKyAgICAg
ICAgY29udmVyc2lvbiBhbGxvd2VkIG91dC1vZi1ib3VuZHMgcmVhZHMgYnkgLTJHaUIuIEknbGwg
Zm9sbG93LXVwIGluCisgICAgICAgIGJ1ZyAjMTcwNjkyIHRvIHByZXZlbnQgdGhpcyB0eXBlIG9m
IGJ1ZyBvbmNlIGFuZCBmb3IgYWxsLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWly
Ojpsb3dlcik6CisgICAgICAgICogYjMvQjNWYWxpZGF0ZS5jcHA6IHVwZGF0ZSBXYXNtQm91bmRz
Q2hlY2sgdmFsaWRhdGlvbi4KKyAgICAgICAgKiBiMy9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjplZmZlY3RzKTogdXBkYXRlIFdhc21Cb3VuZHNDaGVjayBlZmZlY3RzLgor
ICAgICAgICAqIGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6V2FzbUJvdW5kc0NoZWNrVmFsdWU6Oldhc21Cb3VuZHNDaGVja1ZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6Oldhc21Cb3VuZHNDaGVja1ZhbHVlOjpyZWR6b25lTGltaXQpOgorICAgICAgICAo
SlNDOjpCMzo6V2FzbUJvdW5kc0NoZWNrVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmg6CisgICAgICAgIChKU0M6OkIzOjpXYXNtQm91bmRzQ2hl
Y2tWYWx1ZTo6bWF4aW11bSk6CisgICAgICAgICogYjMvYWlyL0FpckN1c3RvbS5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Oldhc21Cb3VuZHNDaGVja0N1c3RvbTo6aXNWYWxpZEZvcm0pOgor
ICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0V2FzbUJvdW5k
c0NoZWNrKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpI
ZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0V2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNB
bGxvY2F0ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjp3ZWJBc3NlbWJseUZhc3RNZW1vcmllc1Ro
aXNDeWNsZUF0VGhyZXNob2xkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dXBkYXRlQWxsb2NhdGlv
bkxpbWl0cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmRpZEFsbG9jYXRlV2ViQXNzZW1ibHlGYXN0
TWVtb3JpZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpzaG91bGREb0Z1bGxDb2xsZWN0aW9uKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcik6CisgICAgICAg
ICogaGVhcC9IZWFwLmg6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgICogcnVudGlt
ZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiB3
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmVtaXRMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjplbWl0U3RvcmVPcCk6CisgICAgICAgIChKU0M6Oldhc206OmNyZWF0ZUpTVG9XYXNtV3Jh
cHBlcik6CisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5j
cHA6IFJld3JpdGUuCisgICAgICAgIChKU0M6Oldhc206Om1ha2VTdHJpbmcpOgorICAgICAgICAo
SlNDOjpXYXNtOjpNZW1vcnk6OmluaXRpYWxpemVQcmVhbGxvY2F0aW9ucyk6CisgICAgICAgIChK
U0M6Oldhc206Ok1lbW9yeTo6Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9y
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9y
eTo6YWRkcmVzc0lzSW5BY3RpdmVGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVt
b3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAgKE1lbW9y
eTo6bWF4RmFzdE1lbW9yeUNvdW50KToKKyAgICAgICAgKE1lbW9yeTo6YWRkcmVzc0lzSW5BY3Rp
dmVGYXN0TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5j
cHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Omdsb2JhbE1lbW9yeUJ5dGVTaXpl
KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNZW1vcnk6Omdyb3cpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0
Q2hpbGRyZW4pOgorCiAyMDE3LTA0LTA3ICBZdWljaGlybyBLaWt1cmEgIDx5Lmtpa3VyYUBnbWFp
bC5jb20+CiAKICAgICAgICAgV2ViR1BVOiBpbXBsZW1lbnQgQ29tcHV0ZUNvbW1hbmRFbmNvZGVy
IGFuZCByZWxhdGVkIGNvbXBvbmVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAKaW5kZXggODIwZDRjMS4uYjVlYzdmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTMxNDQsMjIgKzMxNDQsNDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2UgQjM6Oldhc21Cb3VuZHNDaGVjazogeworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKICAgICAgICAgICAgIFdhc21Cb3VuZHNDaGVja1ZhbHVlKiB2YWx1ZSA9
IG1fdmFsdWUtPmFzPFdhc21Cb3VuZHNDaGVja1ZhbHVlPigpOwogCiAgICAgICAgICAgICBWYWx1
ZSogcHRyID0gdmFsdWUtPmNoaWxkKDApOwogCi0gICAgICAgICAgICBBcmcgdGVtcCA9IG1fY29k
ZS5uZXdUbXAoR1ApOwotICAgICAgICAgICAgYXBwZW5kKEluc3QoTW92ZTMyLCB2YWx1ZSwgdG1w
KHB0ciksIHRlbXApKTsKKyAgICAgICAgICAgIEFyZyBwdHJQbHVzSW1tID0gbV9jb2RlLm5ld1Rt
cChHUCk7CisgICAgICAgICAgICBhcHBlbmQoSW5zdChNb3ZlMzIsIHZhbHVlLCB0bXAocHRyKSwg
cHRyUGx1c0ltbSkpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5vZmZzZXQoKSkgewogICAgICAg
ICAgICAgICAgIGlmIChpbW0odmFsdWUtPm9mZnNldCgpKSkKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kKEFkZDY0LCBpbW0odmFsdWUtPm9mZnNldCgpKSwgdGVtcCk7CisgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tKHZhbHVlLT5vZmZzZXQoKSksIHB0clBsdXNJbW0pOwog
ICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBcmcgYmlnSW1tID0g
bV9jb2RlLm5ld1RtcChHUCk7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmJpZ0ltbSh2YWx1ZS0+b2Zmc2V0KCkpLCBiaWdJbW0pOwotICAgICAgICAgICAgICAgICAgICBh
cHBlbmQoQWRkNjQsIGJpZ0ltbSwgdGVtcCk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChB
ZGQ2NCwgYmlnSW1tLCBwdHJQbHVzSW1tKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBhcHBlbmQoSW5zdChBaXI6Oldhc21Cb3VuZHNDaGVjaywgdmFsdWUs
IHRlbXAsIEFyZyh2YWx1ZS0+cGlubmVkR1BSKCkpKSk7CisKKyAgICAgICAgICAgIEFyZyBsaW1p
dDsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+cGlubmVkR1BSKCkgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgICAgICAgICBsaW1pdCA9IEFyZyh2YWx1ZS0+cGlubmVkR1BSKCkpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU2lnbmFsaW5nIG1lbW9yaWVzIGRvbid0
IHBpbiBhIHJlZ2lzdGVyIGJlY2F1c2Ugb25seSB0aGUgYWNjZXNzZXMgd2hvc2UgcmVnK2ltbSBj
b3VsZCBldmVyIG92ZXJmbG93IDRHaUIrcmVkem9uZSBuZWVkIHRvIGJlIGNoZWNrZWQsCisgICAg
ICAgICAgICAgICAgLy8gYW5kIHdlIGRvbid0IHRoaW5rIHRoZXNlIHdpbGwgYmUgZnJlcXVlbnQu
IEFsbCBvdGhlciBhY2Nlc3NlcyB3aWxsIHRyYXAgZHVlIHRvIFBST1RfTk9ORSBwYWdlcy4KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIElmIHdlIGdvdCBoZXJlIGl0J3Mg
YmVjYXVzZSBhIG1lbW9yeSBhY2Nlc3MgaGFkIGEgdmVyeSBsYXJnZSBvZmZzZXQuIFdlIGNvdWxk
IGNoZWNrIHRoYXQgaXQgZG9lc24ndCBleGNlZWQgNEdpQityZWR6b25lIHNpbmNlIHRoYXQncwor
ICAgICAgICAgICAgICAgIC8vIHRlY2huaWNhbGx5IHRoZSBsaW1pdCB3ZSBuZWVkIHRvIGF2b2lk
IG92ZXJmbG93aW5nLCBidXQgaXQncyBiZXR0ZXIgaWYgd2UgdXNlIGEgc21hbGxlciBpbW1lZGlh
dGUgd2hpY2ggY29kZWdlbnMgbW9yZSBlYXNpbHkuCisgICAgICAgICAgICAgICAgLy8gV2Uga25v
dyB0aGF0IGFueXRoaW5nIGFib3ZlIHRoZSBkZWNsYXJlZCAnbWF4aW11bScgd2lsbCB0cmFwLCBz
byB3ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgbnVtYmVyLiBJZiB0aGVyZSB3YXMgbm8gZGVj
bGFyZWQKKyAgICAgICAgICAgICAgICAvLyAnbWF4aW11bScgdGhlbiB3ZSBzdGlsbCBrbm93IHRo
YXQgYW55IGFjY2VzcyBhYm92ZSA0R2lCIHdpbGwgdHJhcCwgbm8gbmVlZCB0byBhZGQgdGhlIHJl
ZHpvbmUuCisgICAgICAgICAgICAgICAgbGltaXQgPSBtX2NvZGUubmV3VG1wKEdQKTsKKyAgICAg
ICAgICAgICAgICBzaXplX3QgbGltaXRWYWx1ZSA9IHZhbHVlLT5tYXhpbXVtKCkgPyB2YWx1ZS0+
bWF4aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGltaXRWYWx1ZSA8PSB2YWx1ZS0+cmVk
em9uZUxpbWl0KCkpOworICAgICAgICAgICAgICAgIGlmIChpbW0obGltaXRWYWx1ZSkpCisgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBpbW0obGltaXRWYWx1ZSksIGxpbWl0KTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmJpZ0ltbShsaW1pdFZhbHVlKSwgbGltaXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YXBwZW5kKEluc3QoQWlyOjpXYXNtQm91bmRzQ2hlY2ssIHZhbHVlLCBwdHJQbHVzSW1tLCBsaW1p
dCkpOworI2Vsc2UKKyAgICAgICAgICAgIGFwcGVuZChBaXI6Ok9vcHMpOworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKaW5kZXggNmU2YTkzZC4uY2MzYTU2ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcApAQCAtNDcwLDcgKzQ3MCw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNF
eHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2
YWx1ZSkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKG1fcHJvY2VkdXJlLmNvZGUoKS5pc1Bp
bm5lZCh2YWx1ZS0+YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCktPnBpbm5lZEdQUigpKSwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmFzPFdhc21Cb3VuZHND
aGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURShtX3Byb2NlZHVyZS5jb2RlKCkuaXNQaW5uZWQodmFsdWUtPmFzPFdh
c21Cb3VuZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSksICgiQXQgIiwgKnZhbHVlKSk7CiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUobV9wcm9jZWR1cmUuY29kZSgpLndhc21Cb3VuZHNDaGVj
a0dlbmVyYXRvcigpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3Bw
CmluZGV4IDhjOTEwYWEuLjY1YjE3ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5j
cHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogI2luY2x1
ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgiCisj
aW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVBy
aW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5n
UHJpbnRTdHJlYW0uaD4KQEAgLTY2NCw3ICs2NjUsOCBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3Rz
KCkgY29uc3QKICAgICAgICAgcmVzdWx0ID0gRWZmZWN0czo6Zm9yQ2hlY2soKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBXYXNtQm91bmRzQ2hlY2s6Ci0gICAgICAgIHJlc3VsdC5yZWFkc1Bp
bm5lZCA9IHRydWU7CisgICAgICAgIGlmIChhczxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4oKS0+cGlu
bmVkR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5l
ZCA9IHRydWU7CiAgICAgICAgIHJlc3VsdC5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBVcHNpbG9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwCmluZGV4IGIzYTMyOTAuLjhhZWNjMWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKIAogI2lmIEVO
QUJMRShCM19KSVQpCiAKQEAgLTM0LDEwICszNSwxMSBAQCBXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6
fldhc21Cb3VuZHNDaGVja1ZhbHVlKCkKIHsKIH0KIAotV2FzbUJvdW5kc0NoZWNrVmFsdWU6Oldh
c21Cb3VuZHNDaGVja1ZhbHVlKE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwdHIsIEdQUlJlZyBwaW5u
ZWRHUFIsIHVuc2lnbmVkIG9mZnNldCkKK1dhc21Cb3VuZHNDaGVja1ZhbHVlOjpXYXNtQm91bmRz
Q2hlY2tWYWx1ZShPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcgcGlubmVkR1BSLCB1
bnNpZ25lZCBvZmZzZXQsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgIDogVmFsdWUoQ2hlY2tlZE9w
Y29kZSwgV2FzbUJvdW5kc0NoZWNrLCBvcmlnaW4sIHB0cikKICAgICAsIG1fcGlubmVkR1BSKHBp
bm5lZEdQUikKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAsIG1fbWF4aW11bShtYXhpbXVt
KQogewogfQogCkBAIC00Niw5ICs0OCwyMiBAQCBWYWx1ZSogV2FzbUJvdW5kc0NoZWNrVmFsdWU6
OmNsb25lSW1wbCgpIGNvbnN0CiAgICAgcmV0dXJuIG5ldyBXYXNtQm91bmRzQ2hlY2tWYWx1ZSgq
dGhpcyk7CiB9CiAKK3NpemVfdCBXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6cmVkem9uZUxpbWl0KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9waW5uZWRHUFIgPT0gSW52YWxpZEdQUlJlZyk7CisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSArIFdhc206Ok1lbW9yeTo6ZmFzdE1h
cHBlZFJlZHpvbmVCeXRlcygpOworI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2VuZGlmCit9CisKIHZvaWQgV2FzbUJvdW5kc0NoZWNrVmFsdWU6OmR1bXBNZXRhKENv
bW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnBy
aW50KGNvbW1hLCAic2l6ZVJlZ2lzdGVyID0gIiwgbV9waW5uZWRHUFIsICIsIG9mZnNldCA9ICIs
IG1fb2Zmc2V0KTsKKyAgICBpZiAobV9waW5uZWRHUFIgPT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAicmVkem9uZUxpbWl0ID0gIiwgcmVkem9uZUxpbWl0KCksICIs
IG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludChjb21t
YSwgInNpemVSZWdpc3RlciA9ICIsIG1fcGlubmVkR1BSLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNl
dCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgKaW5kZXggY2NjNTRiOC4uMTEwZTcx
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNr
VmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQjNWYWx1ZS5oIgogI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTQ2LDggKzQ3LDE2IEBAIHB1YmxpYzoKICAg
ICAKICAgICB+V2FzbUJvdW5kc0NoZWNrVmFsdWUoKTsKIAorI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICB0eXBlZGVmIFdhc206OlBhZ2VDb3VudCBQYWdlQ291bnQ7CisjZWxzZQorICAgIHR5
cGVkZWYgY2hhciBQYWdlQ291bnQ7CisjZW5kaWYKKwogICAgIEdQUlJlZyBwaW5uZWRHUFIoKSBj
b25zdCB7IHJldHVybiBtX3Bpbm5lZEdQUjsgfQogICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgc2l6ZV90IHJlZHpvbmVMaW1pdCgpIGNvbnN0Owor
ICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9CiAKIHBy
b3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC01NywxMCArNjYsMTEgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgV2Fz
bUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcgcGlubmVkR1BSLCB1
bnNpZ25lZCBvZmZzZXQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhc21Cb3VuZHNDaGVja1Zh
bHVlKE9yaWdpbiwgVmFsdWUqIHB0ciwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQgb2Zmc2V0
LCBQYWdlQ291bnQgbWF4aW11bSk7CiAKICAgICBHUFJSZWcgbV9waW5uZWRHUFI7CiAgICAgdW5z
aWduZWQgbV9vZmZzZXQ7CisgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKIH07CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDdXN0b20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20u
Y3BwCmluZGV4IDdlZTdmM2MuLjQ5Y2E1NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckN1c3RvbS5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCBib29sIFdhc21Cb3VuZHNDaGVj
a0N1c3RvbTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKICAgICBpZiAoIWluc3QuYXJnc1swXS5p
c1RtcCgpICYmICFpbnN0LmFyZ3NbMF0uaXNTb21lSW1tKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHJldHVybiBpbnN0LmFyZ3NbMV0uaXNSZWcoKTsKKyAgICByZXR1cm4gaW5zdC5h
cmdzWzFdLmlzUmVnKCkgfHwgaW5zdC5hcmdzWzFdLmlzVG1wKCkgfHwgaW5zdC5hcmdzWzFdLmlz
U29tZUltbSgpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKaW5kZXggMDE5
OTZhZi4uYTZmNjkxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKQEAgLTE1MTg1
LDcgKzE1MTg1LDggQEAgdm9pZCB0ZXN0V2FzbUJvdW5kc0NoZWNrKHVuc2lnbmVkIG9mZnNldCkK
ICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBpZiAocG9pbnRlclR5cGUo
KSAhPSBJbnQzMikKICAgICAgICAgbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
VHJ1bmMsIE9yaWdpbigpLCBsZWZ0KTsKLSAgICByb290LT5hcHBlbmROZXc8V2FzbUJvdW5kc0No
ZWNrVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsZWZ0LCBwaW5uZWQsIG9mZnNldCk7CisgICAgV2Fz
bTo6UGFnZUNvdW50IG1heGltdW07CisgICAgcm9vdC0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVj
a1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbGVmdCwgcGlubmVkLCBvZmZzZXQsIG1heGltdW0pOwog
ICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgMHg0Mik7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
aW5kZXggM2FlZTMwMS4uZWMzMWVjMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
QEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRl
ICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV2FzbU1l
bW9yeS5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMjUwLDYgKzI1MSw3IEBAIEhlYXA6
OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fc2l6ZUFmdGVyTGFzdEVk
ZW5Db2xsZWN0KDApCiAgICAgLCBtX3NpemVCZWZvcmVMYXN0RWRlbkNvbGxlY3QoMCkKICAgICAs
IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKKyAgICAsIG1fd2ViQXNzZW1ibHlGYXN0TWVt
b3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKICAgICAsIG1fYnl0ZXNBYmFuZG9uZWRTaW5jZUxh
c3RGdWxsQ29sbGVjdCgwKQogICAgICwgbV9tYXhFZGVuU2l6ZShtX21pbkJ5dGVzUGVyQ3ljbGUp
CiAgICAgLCBtX21heEhlYXBTaXplKG1fbWluQnl0ZXNQZXJDeWNsZSkKQEAgLTQ2Niw2ICs0Njgs
MjMgQEAgdm9pZCBIZWFwOjpkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnlTbG93Q2FzZShzaXpl
X3Qgc2l6ZSkKICAgICByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZFNsb3dDYXNlKHNpemUpOwog
fQogCit2b2lkIEhlYXA6OnJlcG9ydFdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkKHNp
emVfdCBjb3VudCkKK3sKKyAgICBkaWRBbGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzKGNv
dW50KTsKKyAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7Cit9CisKK2Jvb2wgSGVhcDo6
d2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCgpIGNvbnN0Cit7Cisg
ICAgLy8gV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcyB1c2UgbGFyZ2UgYW1vdW50cyBvZiB2aXJ0
dWFsIG1lbW9yeSBhbmQgd2UKKyAgICAvLyBkb24ndCBrbm93IGhvdyBtYW55IGNhbiBleGlzdCBp
biB0aGlzIHByb2Nlc3MuIFdlIGtlZXAgdHJhY2sgb2YgdGhlIG1vc3QKKyAgICAvLyBmYXN0IG1l
bW9yaWVzIHRoYXQgaGF2ZSBleGlzdGVkIGF0IGFueSBwb2ludCBpbiB0aW1lLiBUaGUgR0MgdXNl
cyB0aGlzCisgICAgLy8gdG9wIHdhdGVybWFyayBhcyBhbiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIg
cmVjZW50IGFsbG9jYXRpb25zIHNob3VsZCBjYXVzZQorICAgIC8vIGEgY29sbGVjdGlvbjogZ2V0
IHRvbyBjbG9zZSBhbmQgd2UgbWF5IGJlIGNsb3NlIHRvIHRoZSBhY3R1YWwgbGltaXQuCisgICAg
c2l6ZV90IGZhc3RNZW1vcnlUaHJlc2hvbGQgPSBzdGQ6Om1heDxzaXplX3Q+KDEsIFdhc206Ok1l
bW9yeTo6bWF4RmFzdE1lbW9yeUNvdW50KCkgLyAyKTsKKyAgICByZXR1cm4gbV93ZWJBc3NlbWJs
eUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSA+IGZhc3RNZW1vcnlUaHJlc2hvbGQ7Cit9
CisKIHZvaWQgSGVhcDo6cmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKQogewogICAgIC8vIE91
ciBjbGllbnRzIGRvbid0IGtub3cgZXhhY3RseSBob3cgbXVjaCBtZW1vcnkgdGhleQpAQCAtMjEw
Myw2ICsyMTIyLDcgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICBp
ZiAodmVyYm9zZSkgewogICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgICAgICBkYXRhTG9nKCJi
eXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9ICIsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUsICJc
biIpOworICAgICAgICBkYXRhTG9nKCJ3ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRo
aXNDeWNsZSA9ICIsIG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGUs
ICJcbiIpOwogICAgIH0KICAgICAKICAgICAvLyBDYWxjdWxhdGUgb3VyIGN1cnJlbnQgaGVhcCBz
aXplIHRocmVzaG9sZCBmb3IgdGhlIHB1cnBvc2Ugb2YgZmlndXJpbmcgb3V0IHdoZW4gd2Ugc2hv
dWxkCkBAIC0yMTgwLDYgKzIyMDAsNyBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1p
dHMoKQogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJzaXplQWZ0ZXJMYXN0Q29s
bGVjdCA9ICIsIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QsICJcbiIpOwogICAgIG1fYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGUgPSAwOworICAgIG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0
ZWRUaGlzQ3ljbGUgPSAwOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRh
dGFMb2coIj0+ICIsIGN1cnJlbnRIZWFwU2l6ZSAvIDEwMjQsICJrYiwgIik7CkBAIC0yMjUzLDYg
KzIyNzQsMTEgQEAgdm9pZCBIZWFwOjpkaWRBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiAgICAgcGVy
Zm9ybUluY3JlbWVudChieXRlcyk7CiB9CiAKK3ZvaWQgSGVhcDo6ZGlkQWxsb2NhdGVXZWJBc3Nl
bWJseUZhc3RNZW1vcmllcyhzaXplX3QgY291bnQpCit7CisgICAgbV93ZWJBc3NlbWJseUZhc3RN
ZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSArPSBjb3VudDsKK30KKwogYm9vbCBIZWFwOjppc1Zh
bGlkQWxsb2NhdGlvbihzaXplX3QpCiB7CiAgICAgaWYgKCFpc1ZhbGlkVGhyZWFkU3RhdGUobV92
bSkpCkBAIC0yMzA1LDcgKzIzMzEsNyBAQCBib29sIEhlYXA6OnNob3VsZERvRnVsbENvbGxlY3Rp
b24oc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHNjb3BlKSBjb25zdAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIGlmICghc2NvcGUpCi0gICAgICAgIHJldHVybiBtX3Nob3VsZERv
RnVsbENvbGxlY3Rpb247CisgICAgICAgIHJldHVybiBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24g
fHwgd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCgpOwogICAgIHJl
dHVybiAqc2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsOwogfQogCkBAIC0yNDU2LDcgKzI0
ODIsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCkKICAgICAgICAgaWYgKG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgPD0gT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIDw9IG1f
bWF4RWRlblNpemUpCisgICAgICAgIGlmICghd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3lj
bGVBdFRocmVzaG9sZCgpCisgICAgICAgICAgICAmJiBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
IDw9IG1fbWF4RWRlblNpemUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKaW5kZXggZDA2NTcwMS4uNGIxNTlmZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaApAQCAtMTk4LDYgKzE5OCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3QpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAKKyAgICAvLyBTYW1lIGFzIGFi
b3ZlLCBidXQgZm9yIHVuY29tbWl0dGVkIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb25zIGNhdXNl
ZCBieQorICAgIC8vIFdlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMuIFRoaXMgaXMgY291bnRlZCBz
ZXBhcmF0ZWx5IGJlY2F1c2UgdmlydHVhbAorICAgIC8vIG1lbW9yeSBpcyBsb2dpY2FsbHkgYSBk
aWZmZXJlbnQgdHlwZSBvZiByZXNvdXJjZSB0aGFuIGNvbW1pdHRlZCBwaHlzaWNhbAorICAgIC8v
IG1lbW9yeS4gV2UgY2FuIG9mdGVuIGFsbG9jYXRlIGh1Z2UgYW1vdW50cyBvZiB2aXJ0dWFsIG1l
bW9yeSAodGhpbmsKKyAgICAvLyBnaWdhYnl0ZXMpIHdpdGhvdXQgYWR2ZXJzZWx5IGFmZmVjdGlu
ZyByZWd1bGFyIEdDJ2QgbWVtb3J5LiBBdCBzb21lIHBvaW50CisgICAgLy8gdGhvdWdoLCB0b28g
bXVjaCB2aXJ0dWFsIG1lbW9yeSBiZWNvbWVzIHByb2hpYml0aXZlIGFuZCB3ZSB3YW50IHRvCisg
ICAgLy8gY29sbGVjdCBHQy1hYmxlIG9iamVjdHMgd2hpY2gga2VlcCB0aGlzIHZpcnR1YWwgbWVt
b3J5IGFsaXZlLgorICAgIC8vIFRoaXMgaXMgY291bnRlZCBpbiBudW1iZXIgb2YgZmFzdCBtZW1v
cmllcywgbm90IGJ5dGVzLgorICAgIHZvaWQgcmVwb3J0V2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNB
bGxvY2F0ZWQoc2l6ZV90KTsKKyAgICBib29sIHdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzVGhpc0N5
Y2xlQXRUaHJlc2hvbGQoKSBjb25zdDsKKwogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAg
ICAvLyBVc2UgdGhpcyBBUEkgdG8gcmVwb3J0IHRoZSBzdWJzZXQgb2YgZXh0cmEgbWVtb3J5IHRo
YXQgbGl2ZXMgb3V0c2lkZSB0aGlzIHByb2Nlc3MuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKQEAgLTI0Nyw2ICsyNTgsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVBbGxVbmxpbmtlZENvZGVCbG9ja3MoRGVsZXRlQWxs
Q29kZUVmZm9ydCk7CiAKICAgICB2b2lkIGRpZEFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9pZCBk
aWRBbGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzKHNpemVfdCk7CiAgICAgYm9vbCBpc1Bh
Z2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAgCiAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVT
ZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0dXJuICptX2ppdFN0dWJSb3V0aW5lczsgfQpAQCAt
NTI1LDYgKzUzNyw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fc2l6ZUJlZm9yZUxhc3RFZGVu
Q29sbGVjdDsKIAogICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOworICAgIHNp
emVfdCBtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlOwogICAgIHNp
emVfdCBtX2J5dGVzQWJhbmRvbmVkU2luY2VMYXN0RnVsbENvbGxlY3Q7CiAgICAgc2l6ZV90IG1f
bWF4RWRlblNpemU7CiAgICAgc2l6ZV90IG1fbWF4SGVhcFNpemU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCmluZGV4IGJl
NmI2ZjEuLjdjODVhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNiArMzksNyBA
QAogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCiAj
aW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1
ZGUgIldhc21UaHVua3MuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDxt
dXRleD4KQEAgLTU4LDYgKzU5LDkgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKICAgICBz
dGQ6OmNhbGxfb25jZShpbml0aWFsaXplVGhyZWFkaW5nT25jZUZsYWcsIFtdewogICAgICAgICBX
VEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICAgICAgT3B0aW9uczo6aW5pdGlhbGl6ZSgp
OworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgV2FzbTo6TWVtb3J5Ojppbml0aWFs
aXplUHJlYWxsb2NhdGlvbnMoKTsKKyNlbmRpZgogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BS
T0ZJTElORykKICAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmluaXRpYWxpemUoKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCBkY2M5
NDZkLi42YWJjZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNw
cApAQCAtNTksNiArNTksMTUgQEAgYm9vbCByZXN0cmljdGVkT3B0aW9uc0VuYWJsZWQgPSBmYWxz
ZTsKICNlbHNlCiBib29sIHJlc3RyaWN0ZWRPcHRpb25zRW5hYmxlZCA9IHRydWU7CiAjZW5kaWYK
KworQUxXQVlTX0lOTElORSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAg
cmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQogfQogCiB2
b2lkIE9wdGlvbnM6OmVuYWJsZVJlc3RyaWN0ZWRPcHRpb25zKGJvb2wgZW5hYmxlT3JOb3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggNjBjYWFlMC4uYTIxNzk2
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDM3LDkgKzQz
NywxMCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHNpemUsIHdl
YkFzc2VtYmx5UGFydGlhbENvbXBpbGVMaW1pdCwgNTAwMCwgTm9ybWFsLCAiTGltaXQgb24gdGhl
IG51bWJlciBvZiBieXRlcyBhIFdhc206OlBsYW46OmNvbXBpbGUgc2hvdWxkIGF0dGVtcHQgYmVm
b3JlIGNoZWNraW5nIGZvciBvdGhlciB3b3JrLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3Nl
bWJseUIzT3B0aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5v
cm1hbCwgIkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgV2ViIEFzc2VtYmx5IG1vZHVsZXMuIikg
XAogICAgIFwKLSAgICB2KGJvb2wsIHNpbXVsYXRlV2ViQXNzZW1ibHlMb3dNZW1vcnksIGZhbHNl
LCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgTWVtb3J5IG9iamVjdCB3b24ndCBtbWFwIHRoZSBmdWxs
ICdtYXhpbXVtJyByYW5nZSBhbmQgaW5zdGVhZCB3aWxsIGFsbG9jYXRlIHRoZSBtaW5pbXVtIHJl
cXVpcmVkIGFtb3VudC4iKSBcCi0gICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnks
IHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBhIDMyLWJpdCBhZGRy
ZXNzIHNwYWNlIHdpdGggYSBzaWduYWwgaGFuZGxlciB0byBib3VuZHMgY2hlY2sgd2FzbSBtZW1v
cnkuIikgXAorICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5LCAhaXNJT1MoKSwg
Tm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGEgMzItYml0IGFkZHJlc3Mgc3Bh
Y2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJvdW5kcyBjaGVjayB3YXNtIG1lbW9yeS4iKSBc
CisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlGYXN0TWVtb3J5UmVkem9uZVBhZ2VzLCAxMjgs
IE5vcm1hbCwgIldlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgdXNlIDRHaUIgdmlydHVhbCBhbGxv
Y2F0aW9ucywgcGx1cyBhIHJlZHpvbmUgKGNvdW50ZWQgYXMgbXVsdGlwbGUgb2YgNjRLaUIgV2Vi
QXNzZW1ibHkgcGFnZXMpIGF0IHRoZSBlbmQgdG8gY2F0Y2ggcmVnK2ltbSBhY2Nlc3NlcyB3aGlj
aCBleGNlZWQgMzItYml0LCBhbnl0aGluZyBiZXlvbmQgdGhlIHJlZHpvbmUgaXMgZXhwbGljaXRs
eSBib3VuZHMtY2hlY2tlZCIpIFwKICAgICB2KGJvb2wsIGNyYXNoSWZXZWJBc3NlbWJseUNhbnRG
YXN0TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBjcmFzaCBpZiB3ZSBj
YW4ndCBvYnRhaW4gZmFzdCBtZW1vcnkgZm9yIHdhc20uIikgXAorICAgIHYodW5zaWduZWQsIHdl
YkFzc2VtYmx5RmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQsIDAsIE5vcm1hbCwgIldlYkFzc2Vt
Ymx5IGZhc3QgbWVtb3JpZXMgY2FuIGJlIHByZS1hbGxvY2F0ZWQgYXQgcHJvZ3JhbSBzdGFydHVw
IGFuZCByZW1haW4gY2FjaGVkIHRvIGF2b2lkIGZyYWdtZW50YXRpb24gbGVhZGluZyB0byBib3Vu
ZHMtY2hlY2tlZCBtZW1vcnkuIFRoaXMgbnVtYmVyIGlzIGFuIHVwcGVyIGJvdW5kIG9uIGluaXRp
YWwgYWxsb2NhdGlvbiBhcyB3ZWxsIGFzIHRvdGFsIGNvdW50IG9mIGZhc3QgbWVtb3JpZXMuIFpl
cm8gbWVhbnMgbm8gcHJlLWFsbG9jYXRpb24sIG5vIGNhY2hpbmcsIGFuZCBubyBsaW1pdCB0byB0
aGUgbnVtYmVyIG9mIHJ1bnRpbWUgYWxsb2NhdGlvbnMuIikgXAogICAgIHYoYm9vbCwgdXNlV2Vi
QXNzZW1ibHlGYXN0VExTLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1
c2UgZmFzdCB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpZiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQg
cGxhdGZvcm0uIikKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKaW5kZXggODgyZDFjNy4uZDNmYmUzMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMjI3LDYgKzIyNyw4
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2Rl
LCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCk7CiAKKyAgICB2b2lk
IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCYpOworCiAg
ICAgVmFsdWUqIG1hdGVyaWFsaXplV2FzbUNvbnRleHQoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayop
OwogICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBW
YWx1ZSopOwogICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVt
b3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sq
KTsKQEAgLTI0OCw2ICsyNTAsMTUgQEAgcHJpdmF0ZToKICAgICBWYWx1ZSogbV9pbnN0YW5jZVZh
bHVlOyAvLyBGSVhNRTogbWFrZSB0aGlzIGxhenkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2OTc5MgogfTsKIAorLy8gTWVtb3J5IGFjY2Vzc2VzIGluIFdlYkFzc2Vt
Ymx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMgdGhleSBoYXZlIHNpZ25l
ZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK3ZvaWQgQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVy
UGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCYgb2Zmc2V0KQoreworICAg
IGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpIHsKKyAgICAgICAgcHRyID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBw
dHIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCBvZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICB9Cit9CisKIFZhbHVlKiBC
M0lSR2VuZXJhdG9yOjptYXRlcmlhbGl6ZVdhc21Db250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFz
aWNCbG9jayogYmxvY2spCiB7CiAgICAgaWYgKHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKQEAg
LTMzMSw3ICszNDIsMTYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICBpZiAoaW5mby5t
ZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSLCB1bnNpZ25lZCkgewogICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwot
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBw
aW5uZWRHUFIpOworICAgICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChJbnZhbGlkR1BSUmVnID09IHBpbm5lZEdQUik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lbW9yeU1vZGU6Ok51bWJlck9mTWVt
b3J5TW9kZXM6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQs
IEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAgICAgICAgfSk7CiAg
ICAgfQpAQCAtNTE3LDEwICs1MzcsMjAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlubGlu
ZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRp
b24pCiB7CiAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7Ci0gICAgaWYgKG1fbW9kZSA9PSBN
ZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykgeworICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAg
Y2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgLy8gV2UncmUgbm90IHVz
aW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGwsIHdlIG11c3QgdGhlcmVmb3JlIGNoZWNrIHRoYXQg
bm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRoZSBjdXJyZW50IG1lbW9yeSBzaXplLgogICAgICAg
ICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKICAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlv
biArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5
U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSwg
bV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lbW9y
eU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgLy8gV2UndmUgdmlydHVhbGx5IG1hcHBlZCA0R2lC
K3JlZHpvbmUgZm8gdGhpcyBtZW1vcnkuIE9ubHkgdGhlIHVzZXItYWxsb2NhdGVkIHBhZ2VzIGFy
ZSBhZGRyZXNzYWJsZSwgY29udGlndW91c2x5IGluIHJhbmdlIFswLCBjdXJyZW50XSwgYW5kIGV2
ZXJ5dGhpbmcgYWJvdmUgaXMgbWFwcGVkIFBST1RfTk9ORS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJm
b3JtIGFueSBleHBsaWNpdCBib3VuZHMgY2hlY2sgaW4gdGhlIDRHaUIgcmFuZ2UgYmVjYXVzZSBX
ZWJBc3NlbWJseSByZWdpc3RlciBtZW1vcnkgYWNjZXNzZXMgYXJlIDMyLWJpdC4gSG93ZXZlciBX
ZWJBc3NlbWJseSByZWdpc3RlcitpbW1lZGlhdGUgYWNjZXNzZXMgcGVyZm9ybSB0aGUgYWRkaXRp
b24gaW4gNjQtYml0IHdoaWNoIGNhbiBwdXNoIGFuIGFjY2VzcyBhYm92ZSB0aGUgMzItYml0IGxp
bWl0LiBUaGUgcmVkem9uZSB3aWxsIGNhdGNoIG1vc3Qgc21hbGwgaW1tZWRpYXRlcywgYW5kIHdl
J2xsIGV4cGxpY2l0bHkgYm91bmRzIGNoZWNrIGFueSByZWdpc3RlciArIGxhcmdlIGltbWVkaWF0
ZSBhY2Nlc3MuCisgICAgICAgICAgICBpZiAob2Zmc2V0ID49IE1lbW9yeTo6ZmFzdE1hcHBlZFJl
ZHpvbmVCeXRlcygpKQorICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIEludmFsaWRH
UFJSZWcsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEsIG1faW5mby5tZW1vcnkubWF4aW11
bSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9y
eU1vZGVzOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAg
ICBwb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0
MzIsIG9yaWdpbigpLCBwb2ludGVyKTsKICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxXYXNtQWRkcmVzc1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyLCBtX21lbW9y
eUJhc2VHUFIpOwpAQCAtNTYwLDYgKzU5MCw4IEBAIGlubGluZSBCMzo6S2luZCBCM0lSR2VuZXJh
dG9yOjptZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApCiAKIGlubGluZSBWYWx1ZSogQjNJ
UkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCB1aW50MzJfdCBvZmZzZXQpCiB7CisgICAgZml4dXBQb2ludGVyUGx1c09mZnNldChwb2lu
dGVyLCBvZmZzZXQpOworCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDhTOiB7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhTKSwgb3JpZ2luKCksIHBvaW50ZXIs
IG9mZnNldCk7CkBAIC02OTcsNiArNzI5LDggQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3Jl
T3AoU3RvcmVPcFR5cGUgb3ApCiAKIGlubGluZSB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRTdG9y
ZU9wKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlw
ZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KQogeworICAgIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQo
cG9pbnRlciwgb2Zmc2V0KTsKKwogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIFN0b3JlT3BU
eXBlOjpJNjRTdG9yZTg6CiAgICAgICAgIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIHZhbHVlKTsKQEAgLTEyNTMsNiArMTI4
NywxMiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250
ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIFdhc21JbgogCiAgICAgY29tcGlsYXRpb25Db250ZXh0
LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsID0gaml0LmNhbGwoKTsKIAorICAgIGlm
ICghIWluZm8ubWVtb3J5KSB7CisgICAgICAgIC8vIFJlc2V0dGluZyB0aGUgcmVnaXN0ZXIgcHJl
dmVudHMgdGhlIEdDIGZyb20gbWlzdGFrZW5seSB0aGlua2luZyB0aGF0IHRoZSBjb250ZXh0IGlz
IHN0aWxsIGxpdmUuCisgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNl
TWVtb3J5UG9pbnRlcjsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMCksIGJhc2VNZW1vcnkpOworICAgIH0KKwogICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CiAgICAgICAgIEdQUlJlZyBy
ZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKICAgICAgICAgQVNTRVJUKHJlZyAhPSBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCmluZGV4IDY3YmI1N2QuLmQzNTVlODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuY3BwCkBAIC02OCwxNSArNjgsNyBAQCBzdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQg
c2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQogICAgICAgICB7CiAg
ICAgICAgICAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgPSBzaWdJbmZvLT5zaV9hZGRyOwogICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImNoZWNraW5nIGZhdWx0aW5nIGFkZHJlc3M6
ICIsIFJhd1BvaW50ZXIoZmF1bHRpbmdBZGRyZXNzKSwgIiBpcyBpbiBhbiBhY3RpdmUgZmFzdCBt
ZW1vcnkiKTsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1lbW9yeUxvY2spOwotICAg
ICAgICAgICAgYXV0byYgYWN0aXZlRmFzdE1lbW9yaWVzID0gdmlld0FjdGl2ZUZhc3RNZW1vcmll
cyhsb2NrZXIpOwotICAgICAgICAgICAgZm9yICh2b2lkKiBhY3RpdmVNZW1vcnkgOiBhY3RpdmVG
YXN0TWVtb3JpZXMpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiY2hl
Y2tpbmcgZmFzdCBtZW1vcnkgYXQ6ICIsIFJhd1BvaW50ZXIoYWN0aXZlTWVtb3J5KSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFjdGl2ZU1lbW9yeSA8PSBmYXVsdGluZ0FkZHJlc3MgJiYgZmF1bHRp
bmdBZGRyZXNzIDwgc3RhdGljX2Nhc3Q8Y2hhcio+KGFjdGl2ZU1lbW9yeSkgKyBmYXN0TWVtb3J5
TWFwcGVkQnl0ZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgZmF1bHRlZEluQWN0aXZlRmFzdE1l
bW9yeSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkg
PSBXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeShmYXVsdGluZ0FkZHJl
c3MpOwogICAgICAgICB9CiAgICAgICAgIGlmIChmYXVsdGVkSW5BY3RpdmVGYXN0TWVtb3J5KSB7
CiAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZm91bmQgYWN0aXZlIGZhc3QgbWVt
b3J5IGZvciBmYXVsdGluZyBhZGRyZXNzIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuY3BwCmluZGV4IDdlZjNkNGYuLjQwMzEwZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0yOSwxNDkgKzI5LDI4MCBAQAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIlZNLmgiCi0jaW5jbHVkZSAiV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5oIgogI2luY2x1ZGUgIldhc21UaHVua3MuaCIKIAotI2luY2x1ZGUgPHd0Zi9I
ZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDxhdG9taWM+CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1Rp
bWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKLW5hbWVzcGFjZSB7Ci1jb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKLX0KKy8vIEZJWE1FOiBXZSBjb3VsZCBiZSBzbWFydGVyIGFib3V0IG1lbXNldCAvIG1t
YXAgLyBtYWR2aXNlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcw
MzQzCiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdl
YkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKQorbmFtZXNwYWNlIHsKK2NvbnN0ZXhwciBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKKworLy8gQWxsb2NhdGUgZmFzdCBtZW1vcmllcyB2ZXJ5IGVh
cmx5IGF0IHByb2dyYW0gc3RhcnR1cCBhbmQgY2FjaGUgdGhlbS4gVGhlIGZhc3QgbWVtb3JpZXMg
dXNlIHNpZ25pZmljYW50IGFtb3VudHMgb2YgdmlydHVhbCB1bmNvbW1pdHRlZCBhZGRyZXNzIHNw
YWNlLCByZWR1Y2luZyB0aGUgbGlrZWxpaG9vZCB0aGF0IHdlJ2xsIG9idGFpbiBhbnkgaWYgd2Ug
d2FpdCB0byBhbGxvY2F0ZSB0aGVtLgorLy8gV2Ugc3RpbGwgdHJ5IHRvIGFsbG9jYXRlIGZhc3Qg
bWVtb3JpZXMgYXQgcnVudGltZSwgYW5kIHdpbGwgY2FjaGUgdGhlbSB3aGVuIHJlbGlucXVpc2hl
ZCB1cCB0byB0aGUgcHJlYWxsb2NhdGlvbiBsaW1pdC4KKy8vIE5vdGUgdGhhdCB0aGlzIHN0YXRl
IGlzIHBlci1wcm9jZXNzLCBub3QgcGVyLVZNLgorY29uc3RleHByIHNpemVfdCBmYXN0TWVtb3J5
Q2FjaGVIYXJkTGltaXQgeyAxNn07Citjb25zdGV4cHIgc2l6ZV90IGZhc3RNZW1vcnlBbGxvY2F0
aW9uU29mdExpbWl0IHsgMzIgfTsgLy8gUHJldmVudHMgZmlsbGluZyB1cCB0aGUgdmlydHVhbCBh
ZGRyZXNzIHNwYWNlLgorc3RhdGljX2Fzc2VydChmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1p
dCA+PSBmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQsICJUaGUgY2FjaGUgc2hvdWxkbid0IGJlIGJp
Z2dlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgd2UnbGwgZXZlciBhbGxvY2F0ZSIpOworc2l6ZV90
IGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50IHsgMCB9Oworc3RkOjphdG9taWM8dm9pZCo+IGZh
c3RNZW1vcnlDYWNoZVtmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXRdID0geyBBVE9NSUNfVkFSX0lO
SVQobnVsbHB0cikgfTsKK3N0ZDo6YXRvbWljPHZvaWQqPiBjdXJyZW50bHlBY3RpdmVGYXN0TWVt
b3JpZXNbZmFzdE1lbW9yeUFsbG9jYXRpb25Tb2Z0TGltaXRdID0geyBBVE9NSUNfVkFSX0lOSVQo
bnVsbHB0cikgfTsKK3N0ZDo6YXRvbWljPHNpemVfdD4gY3VycmVudGx5QWxsb2NhdGVkRmFzdE1l
bW9yaWVzID0gQVRPTUlDX1ZBUl9JTklUKDApOworc3RkOjphdG9taWM8c2l6ZV90PiBvYnNlcnZl
ZE1heGltdW1GYXN0TWVtb3J5ID0gQVRPTUlDX1ZBUl9JTklUKDApOworCitORVZFUl9JTkxJTkUg
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1v
cnkoKQogewogICAgIENSQVNIKCk7CiB9CiAKLWlubGluZSBib29sIG1tYXBCeXRlcyhzaXplX3Qg
Ynl0ZXMsIHZvaWQqJiBtZW1vcnkpCit2b2lkKiBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzKQogewot
ICAgIGRhdGFMb2dJZih2ZXJib3NlLCAiQXR0ZW1wdGluZyB0byBtbWFwICIsIGJ5dGVzLCAiIGJ5
dGVzOiAiKTsKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0
YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYzNjAwCi0gICAgdm9pZCogcmVzdWx0ID0gbW1hcChudWxscHRyLCBieXRlcywgUFJPVF9O
T05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBN
QVBfRkFJTEVEKSB7Ci0gICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmYWlsZWQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3Vj
Y2VlZGVkIik7Ci0gICAgbWVtb3J5ID0gcmVzdWx0OwotICAgIHJldHVybiB0cnVlOworI2lmIE9T
KERBUldJTikKKyAgICBpbnQgZmQgPSBWTV9UQUdfRk9SX1dFQkFTU0VNQkxZX01FTU9SWTsKKyNl
bHNlCisgICAgaW50IGZkID0gLTE7CisjZW5kaWYKKworICAgIHZvaWQqIGxvY2F0aW9uID0gbW1h
cChudWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCBmZCwg
MCk7CisgICAgcmV0dXJuIGxvY2F0aW9uID09IE1BUF9GQUlMRUQgPyBudWxscHRyIDogbG9jYXRp
b247CiB9CiAKLWNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQordm9pZCBt
dW5tYXBCeXRlcyh2b2lkKiBtZW1vcnksIHNpemVfdCBzaXplKQogewotICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRz
Q2hlY2tpbmciOwotICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25h
bGluZyI7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9yeU1vZGVzOiBicmVhazsK
LSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gIiI7
CisgICAgaWYgKG11bm1hcChtZW1vcnksIHNpemUpKQorICAgICAgICBDUkFTSCgpOwogfQogCi1z
dGF0aWMgY29uc3QgdW5zaWduZWQgbWF4RmFzdE1lbW9yaWVzID0gNDsKLXN0YXRpYyB1bnNpZ25l
ZCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgeyAwIH07Ci1TdGF0aWNMb2NrIG1lbW9yeUxvY2s7Ci1p
bmxpbmUgRGVxdWU8dm9pZCosIG1heEZhc3RNZW1vcmllcz4mIGF2YWlsYWJsZUZhc3RNZW1vcmll
cyhjb25zdCBBYnN0cmFjdExvY2tlciYpCit2b2lkKiB0cnlHZXRDYWNoZWRGYXN0TWVtb3J5KCkK
IHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGVxdWU8dm9pZCosIG1heEZhc3RNZW1vcmll
cz4+IGF2YWlsYWJsZUZhc3RNZW1vcmllczsKLSAgICByZXR1cm4gYXZhaWxhYmxlRmFzdE1lbW9y
aWVzOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwgZmFzdE1lbW9yeVByZWFsbG9j
YXRlQ291bnQ7ICsraWR4KQorICAgICAgICBpZiAodm9pZCogcHJldmlvdXMgPSBmYXN0TWVtb3J5
Q2FjaGVbaWR4XS5leGNoYW5nZShudWxscHRyLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3FfcmVsKSkK
KyAgICAgICAgICAgIHJldHVybiBwcmV2aW91czsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
aW5saW5lIEhhc2hTZXQ8dm9pZCo+JiBhY3RpdmVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQorYm9vbCB0cnlBZGRUb0N1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllcyh2b2lkKiBt
ZW1vcnkpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8dm9pZCo+PiBhY3Rp
dmVGYXN0TWVtb3JpZXM7Ci0gICAgcmV0dXJuIGFjdGl2ZUZhc3RNZW1vcmllczsKKyAgICBmb3Ig
KHNpemVfdCBpZHggPSAwOyBpZHggPCBmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1pdDsgKytp
ZHgpIHsKKyAgICAgICAgdm9pZCogZXhwZWN0ZWQgPSBudWxscHRyOworICAgICAgICBpZiAoY3Vy
cmVudGx5QWN0aXZlRmFzdE1lbW9yaWVzW2lkeF0uY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhw
ZWN0ZWQsIG1lbW9yeSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsYXhlZCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1jb25zdCBIYXNoU2V0PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmll
cyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQordm9pZCByZW1vdmVGcm9tQ3VycmVudGx5
QWN0aXZlRmFzdE1lbW9yaWVzKHZvaWQqIG1lbW9yeSkKIHsKLSAgICByZXR1cm4gYWN0aXZlRmFz
dE1lbW9yaWVzKGxvY2tlcik7CisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgZmFzdE1l
bW9yeUFsbG9jYXRpb25Tb2Z0TGltaXQ7ICsraWR4KSB7CisgICAgICAgIHZvaWQqIGV4cGVjdGVk
ID0gbWVtb3J5OworICAgICAgICBpZiAoY3VycmVudGx5QWN0aXZlRmFzdE1lbW9yaWVzW2lkeF0u
Y29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhwZWN0ZWQsIG51bGxwdHIsIHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcV9yZWwsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1pbmxp
bmUgYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwgdm9pZComIG1lbW9yeSwgc2l6ZV90JiBt
YXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSYgbW9kZSkKK3ZvaWQqIHRyeUdldEZhc3RNZW1vcnko
Vk0mIHZtKQogewotICAgIGF1dG8gZGVxdWVGYXN0TWVtb3J5ID0gWyZdICgpIC0+IGJvb2wgewot
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmV0dXJuIHRoZXNlIHRvIHRo
ZSBPUyBpZiB3ZSBnbyBzb21lIG51bWJlciBvZiBHQ3MKLSAgICAgICAgLy8gd2l0aG91dCB1c2lu
ZyB0aGVtLgotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtZW1vcnlMb2NrKTsKLSAgICAgICAg
aWYgKCFhdmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2VyKS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIG1lbW9yeSA9IGF2YWlsYWJsZUZhc3RNZW1vcmllcyhsb2NrZXIpLnRha2VGaXJzdCgpOwot
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKS5hZGQo
bWVtb3J5KTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdF
bnRyeSk7Ci0gICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBwZWRCeXRl
czsKLSAgICAgICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOworCisgICAgaWYgKExJ
S0VMWShPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKSkpIHsKKyAgICAgICAgbWVt
b3J5ID0gdHJ5R2V0Q2FjaGVkRmFzdE1lbW9yeSgpOworICAgICAgICBpZiAobWVtb3J5KQorICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgcmUtdXNpbmcg
IiwgUmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBO
byBtZW1vcnkgd2FzIGF2YWlsYWJsZSBpbiB0aGUgY2FjaGUuIE1heWJlIHdhaXRpbmcgb24gR0Mg
d2lsbCBmaW5kIGEgZnJlZSBvbmUuCisgICAgICAgICAgICAvLyBGSVhNRSBjb2xsZWN0U3luYyhG
dWxsKSBhbmQgY3VzdG9tIGVhZ2VyIGRlc3RydWN0aW9uIG9mIHdhc20gbWVtb3JpZXMgY291bGQg
YmUgYmV0dGVyLiBGb3Igbm93IHVzZSBjb2xsZWN0QWxsR2FyYmFnZS4gQWxzbywgbm90aGluZyB0
ZWxscyB1cyB0aGUgY3VycmVudCBWTSBpcyBob2xkaW5nIG9udG8gZmFzdCBtZW1vcmllcy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc0OAorICAgICAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgd2FpdGluZyBvbiBHQyBhbmQg
cmV0cnlpbmciKTsKKyAgICAgICAgICAgIHZtLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAg
ICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UgJiYgbWVtb3J5LCAidHJ5R2V0RmFzdE1lbW9y
eSB3YWl0ZWQgb24gR0MgYW5kIHJldHJpZWQgc3VjY2Vzc2Z1bGx5Iik7CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07CiAKLSAgICBhdXRvIGZhaWwgPSBbXSAoKSAtPiBi
b29sIHsKKyAgICAgICAgLy8gVGhlIHNvZnQgbGltaXQgaXMgaW5oZXJlbnRseSByYWN5IGJlY2F1
c2UgY2hlY2tpbmcrYWxsb2NhdGlvbiBpc24ndCBhdG9taWMuIEV4Y2VlZGluZyBpdCBzbGlnaHRs
eSBpcyBmaW5lLgorICAgICAgICBib29sIGF0QWxsb2NhdGlvblNvZnRMaW1pdCA9IGN1cnJlbnRs
eUFsbG9jYXRlZEZhc3RNZW1vcmllcy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpID49
IGZhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0OworICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlICYmIGF0QWxsb2NhdGlvblNvZnRMaW1pdCwgInRyeUdldEZhc3RNZW1vcnkgcmVhY2hlZCBh
bGxvY2F0aW9uIHNvZnQgbGltaXQgb2YgIiwgZmFzdE1lbW9yeUFsbG9jYXRpb25Tb2Z0TGltaXQp
OworCisgICAgICAgIGlmICghbWVtb3J5ICYmICFhdEFsbG9jYXRpb25Tb2Z0TGltaXQpIHsKKyAg
ICAgICAgICAgIG1lbW9yeSA9IG1tYXBCeXRlcyhNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsK
KyAgICAgICAgICAgIGlmIChtZW1vcnkpIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgY3VycmVu
dGx5QWxsb2NhdGVkID0gMSArIGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcy5mZXRjaF9h
ZGQoMSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisgICAgICAgICAgICAgICAgc2l6ZV90
IGN1cnJlbnRseU9ic2VydmVkTWF4aW11bSA9IG9ic2VydmVkTWF4aW11bUZhc3RNZW1vcnkubG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dGx5QWxsb2NhdGVkID4gY3VycmVudGx5T2JzZXJ2ZWRNYXhpbXVtKSB7CisgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBleHBlY3RlZCA9IGN1cnJlbnRseU9ic2VydmVkTWF4aW11bTsKKyAgICAg
ICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JzZXJ2ZWRNYXhpbXVtRmFzdE1lbW9yeS5j
b21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhleHBlY3RlZCwgY3VycmVudGx5QWxsb2NhdGVkLCBzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxlYXNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRGYXN0TWVtb3J5IGN1cnJlbnRseSBvYnNlcnZlciBt
YXhpbXVtIGlzIG5vdyAiLCBjdXJyZW50bHlBbGxvY2F0ZWQpOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbG9zdCB0aGUgdXBkYXRl
IHJhY2UsIGJ1dCB0aGUgY291bnRlciBpcyBtb25vdG9uaWMgc28gdGhlIHdpbm5lciBtdXN0IGhh
dmUgdXBkYXRlZCB0aGUgdmFsdWUgdG8gd2hhdCB3ZSB3ZXJlIGdvaW5nIHRvIHVwZGF0ZSBpdCB0
bywgb3IgbXVsdGlwbGUgd2lubmVycyBkaWQgc28uCisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoZXhwZWN0ZWQgPj0gY3VycmVudGx5QWxsb2NhdGVkKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAidHJ5R2V0RmFzdE1lbW9yeSBhbGxvY2F0ZWQgIiwgUmF3UG9pbnRlcihtZW1vcnkpLCAi
LCBjdXJyZW50bHkgYWxsb2NhdGVkIGlzICIsIGN1cnJlbnRseUFsbG9jYXRlZCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWVtb3J5KSB7CisgICAgICAgIGlm
IChVTkxJS0VMWSghdHJ5QWRkVG9DdXJyZW50bHlBY3RpdmVGYXN0TWVtb3JpZXMobWVtb3J5KSkp
IHsKKyAgICAgICAgICAgIC8vIFdlIGdvdCBhIG1lbW9yeSwgYnV0IHJlYWNoZWQgdGhlIGFsbG9j
YXRpb24gc29mdCBsaW1pdCAqYW5kKiBhbGwgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcmllcyBhcmUg
YWN0aXZlLiBUaGF0J3MgYSBidW1tZXIsIHdlIGhhdmUgdG8gZ2V0IHJpZCBvZiBvdXIgbWVtb3J5
LgorICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgZm91
bmQgYSBmYXN0IG1lbW9yeSBidXQgaGFkIHRvIGdpdmUgaXQgdXAiKTsKKyAgICAgICAgICAgIG11
bm1hcEJ5dGVzKG1lbW9yeSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CisgICAgICAgICAg
ICBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMuZmV0Y2hfc3ViKDEsIHN0ZDo6bWVtb3J5
X29yZGVyX2FjcV9yZWwpOworICAgICAgICAgICAgbWVtb3J5ID0gbnVsbHB0cjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghbWVtb3J5KSB7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJ0cnlHZXRGYXN0TWVtb3J5IGNvdWxkbid0IHJlLXVzZSBvciBhbGxvY2F0ZSBhIGZhc3Qg
bWVtb3J5Iik7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpjcmFzaElmV2ViQXNzZW1i
bHlDYW50RmFzdE1lbW9yeSgpKSkKICAgICAgICAgICAgIHdlYkFzc2VtYmx5Q291bGRudEdldEZh
c3RNZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07CisgICAgfQogCi0gICAg
Ly8gV2UgbWlnaHQgR0MgaGVyZSBzbyB3ZSBzaG91bGQgYmUgaG9sZGluZyB0aGUgQVBJIGxvY2su
Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN5bmNyb25vdXNseSB0cmlnZ2Vy
IHRoZSBHQyBmcm9tIGFub3RoZXIgdGhyZWFkLgotICAgIEFTU0VSVCh2bS5jdXJyZW50VGhyZWFk
SXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWZhc3RNZW1vcnlFbmFibGVk
KCkpKQotICAgICAgICByZXR1cm4gZmFpbCgpOworICAgIHJldHVybiBtZW1vcnk7Cit9CiAKLSAg
ICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgaGF2ZSBhIHN0dWIgcHJpb3IgdG8gcnVubmluZyBj
b2RlLgotICAgIGlmIChVTkxJS0VMWSghVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhj
ZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikpKQotICAgICAgICByZXR1cm4gZmFpbCgpOwor
dm9pZCogdHJ5R2V0U2xvd01lbW9yeShzaXplX3QgYnl0ZXMpCit7CisgICAgdm9pZCogbWVtb3J5
ID0gbW1hcEJ5dGVzKGJ5dGVzKTsKKyAgICBkYXRhTG9nTG5JZihtZW1vcnkgJiYgdmVyYm9zZSwg
Ik9idGFpbmVkIHNsb3cgbWVtb3J5ICIsIFJhd1BvaW50ZXIobWVtb3J5KSwgIiB3aXRoIGNhcGFj
aXR5ICIsIGJ5dGVzKTsKKyAgICBkYXRhTG9nTG5JZighbWVtb3J5ICYmIHZlcmJvc2UsICJGYWls
ZWQgb2J0YWluaW5nIHNsb3cgbWVtb3J5IHdpdGggY2FwYWNpdHkgIiwgYnl0ZXMpOworICAgIHJl
dHVybiBtZW1vcnk7Cit9CiAKLSAgICBBU1NFUlQoYWxsb2NhdGVkRmFzdE1lbW9yaWVzIDw9IG1h
eEZhc3RNZW1vcmllcyk7Ci0gICAgaWYgKGRlcXVlRmFzdE1lbW9yeSgpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKK3ZvaWQgcmVsaW5xdWlzaE1lbW9yeSh2b2lkKiBtZW1vcnksIHNpemVfdCB3cml0
YWJsZVNpemUsIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSBtb2RlKQoreworICAg
IHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFwcGVkQ2FwYWNpdHkgPT0gTWVtb3J5OjpmYXN0TWFw
cGVkQnl0ZXMoKSk7CisKKyAgICAgICAgLy8gVGhpcyBtZW1vcnkgY2Fubm90IGNhdXNlIGEgdHJh
cCBhbnltb3JlLgorICAgICAgICByZW1vdmVGcm9tQ3VycmVudGx5QWN0aXZlRmFzdE1lbW9yaWVz
KG1lbW9yeSk7CisKKyAgICAgICAgLy8gV2UgbWF5IGNhY2hlIGZhc3QgbWVtb3JpZXMuIEFzc3Vt
aW5nIHdlIHdpbGwsIHdlIGhhdmUgdG8gcmVzZXQgdGhlbSBiZWZvcmUgaW5zZXJ0aW5nIHRoZW0g
aW50byB0aGUgY2FjaGUuCisgICAgICAgIGlmICh3cml0YWJsZVNpemUpIHsKKyAgICAgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJaZXJvaW5nIGFuZCB1bnByb3RlY3RpbmcgZmFzdCBtZW1v
cnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpLCAiJ3MgaW5pdGlhbCAiLCB3cml0YWJsZVNpemUsICIg
Ynl0ZXMiKTsKKyAgICAgICAgICAgIG1lbXNldChtZW1vcnksIDAsIHdyaXRhYmxlU2l6ZSk7Cisg
ICAgICAgICAgICBpZiAobXByb3RlY3QobWVtb3J5LCB3cml0YWJsZVNpemUsIFBST1RfTk9ORSkp
CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQogCi0gICAgLy8gSWYgd2UgaGF2
ZSBhbGxvY2F0ZWQgYWxsIHRoZSBmYXN0IG1lbW9yaWVzLi4uIHRvbyBiYWQuCi0gICAgaWYgKGFs
bG9jYXRlZEZhc3RNZW1vcmllcyA9PSBtYXhGYXN0TWVtb3JpZXMpIHsKLSAgICAgICAgLy8gVGhl
cmUgaXMgYSByZWFzb25hYmxlIGNoYW5jZSB0aGF0IGFub3RoZXIgbW9kdWxlIGhhcyBkaWVkIGJ1
dCBoYXMgbm90IGJlZW4gY29sbGVjdGVkIHlldC4gRG9uJ3QgbG9zZSBob3BlIHlldCEKLSAgICAg
ICAgdm0uaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwotICAgICAgICBpZiAoZGVxdWVGYXN0TWVt
b3J5KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhaWwoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIHZvaWQqIGV4cGVjdGVkID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIGlmIChmYXN0TWVtb3J5Q2FjaGVbaV0uY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhw
ZWN0ZWQsIG1lbW9yeSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCkpIHsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAicmVsaW5xdWlzaE1lbW9yeSBjYWNoZWQgZmFzdCBt
ZW1vcnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
cmVsaW5xdWlzaE1lbW9yeSB1bmFibGUgdG8gY2FjaGUgZmFzdCBtZW1vcnksIGZyZWVpbmcgaW5z
dGVhZCAiLCBSYXdQb2ludGVyKG1lbW9yeSkpOworICAgICAgICBtdW5tYXBCeXRlcyhtZW1vcnks
IE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkpOworICAgICAgICBjdXJyZW50bHlBbGxvY2F0ZWRG
YXN0TWVtb3JpZXMuZmV0Y2hfc3ViKDEsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpOworCisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobW1hcEJ5dGVzKGZhc3RNZW1vcnlNYXBw
ZWRCeXRlcywgbWVtb3J5KSkgewotICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlN
YXBwZWRCeXRlczsKLSAgICAgICAgbW9kZSA9IE1lbW9yeU1vZGU6OlNpZ25hbGluZzsKLSAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobWVtb3J5TG9jayk7Ci0gICAgICAgIGFsbG9jYXRlZEZhc3RN
ZW1vcmllcysrOwotICAgICAgICBhdXRvIHJlc3VsdCA9IGFjdGl2ZUZhc3RNZW1vcmllcyhsb2Nr
ZXIpLmFkZChtZW1vcnkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0Lmlz
TmV3RW50cnkpOworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJyZWxpbnF1aXNoRmFzdE1lbW9yeSBmcmVlaW5nIHNsb3cg
bWVtb3J5ICIsIFJhd1BvaW50ZXIobWVtb3J5KSk7CisgICAgICAgIG11bm1hcEJ5dGVzKG1lbW9y
eSwgbWFwcGVkQ2FwYWNpdHkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE1lbW9yeU1v
ZGU6Ok51bWJlck9mTWVtb3J5TW9kZXM6CisgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlm
IChtZW1vcnkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK2Jvb2wgbWFrZU5ld01lbW9yeVJlYWRXcml0ZU9yUmVsaW5xdWlzaCh2
b2lkKiBtZW1vcnksIHNpemVfdCBpbml0aWFsQnl0ZXMsIHNpemVfdCBtYXBwZWRDYXBhY2l0eUJ5
dGVzLCBNZW1vcnlNb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKG1lbW9yeSAmJiBpbml0aWFsQnl0
ZXMgPD0gbWFwcGVkQ2FwYWNpdHlCeXRlcyk7CisgICAgaWYgKGluaXRpYWxCeXRlcykgeworICAg
ICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWFya2luZyBXZWJBc3NlbWJseSBtZW1vcnkncyAi
LCBSYXdQb2ludGVyKG1lbW9yeSksICIncyBpbml0aWFsICIsIGluaXRpYWxCeXRlcywgIiBieXRl
cyBhcyByZWFkK3dyaXRlIik7CisgICAgICAgIGlmIChtcHJvdGVjdChtZW1vcnksIGluaXRpYWxC
eXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHdoeSA9IHN0cmVycm9yKGVycm5vKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJGYWlsZWQgbWFraW5nIG1lbW9yeSAiLCBSYXdQb2ludGVyKG1lbW9yeSksICIgcmVhZGFibGUg
YW5kIHdyaXRhYmxlOiAiLCB3aHkpOworICAgICAgICAgICAgcmVsaW5xdWlzaE1lbW9yeShtZW1v
cnksIDAsIG1hcHBlZENhcGFjaXR5Qnl0ZXMsIG1vZGUpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKwogCi0gICAgcmV0dXJuIGZhaWwoKTsKK2NvbnN0IGNoYXIqIG1ha2VT
dHJpbmcoTWVtb3J5TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
TWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOworICAg
IGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7CisgICAgY2Fz
ZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9yeU1vZGVzOiBicmVhazsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiI7CiB9CiAKLWlubGluZSB2
b2lkIHJlbGVhc2VGYXN0TWVtb3J5KHZvaWQqJiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUs
IHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSBtb2RlKQordm9pZCBNZW1vcnk6Omlu
aXRpYWxpemVQcmVhbGxvY2F0aW9ucygpCiB7Ci0gICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6
U2lnbmFsaW5nIHx8ICFtZW1vcnkpCisgICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VXZWJB
c3NlbWJseUZhc3RNZW1vcnkoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJFTEVBU0VfQVNT
RVJUKG1lbW9yeSAmJiBtYXBwZWRDYXBhY2l0eSA9PSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMpOwot
ICAgIEFTU0VSVChmYXN0TWVtb3J5RW5hYmxlZCgpKTsKKyAgICAvLyBSYWNlcyBjYW5ub3Qgb2Nj
dXIgaW4gdGhpcyBmdW5jdGlvbjogaXQgaXMgb25seSBjYWxsZWQgYXQgcHJvZ3JhbSBpbml0aWFs
aXphdGlvbiwgYmVmb3JlIFdlYkFzc2VtYmx5IGNhbiBiZSBpbnZva2VkLgorCisgICAgY29uc3Qg
YXV0byBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBjb25zdCBzaXplX3Qg
ZGVzaXJlZEZhc3RNZW1vcmllcyA9IHN0ZDo6bWluPHNpemVfdD4oT3B0aW9uczo6d2ViQXNzZW1i
bHlGYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCgpLCBmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQp
OworCisgICAgLy8gU3RhcnQgb2ZmIHRyeWluZyB0byBhbGxvY2F0ZSBmYXN0IG1lbW9yaWVzIGNv
bnRpZ3VvdXNseSBzbyB0aGV5IGRvbid0IGZyYWdtZW50IGVhY2ggb3RoZXIuIFRoaXMgY2FuIGZh
aWwgaWYgdGhlIGFkZHJlc3Mgc3BhY2UgaXMgb3RoZXJ3aXNlIGZyYWdtZW50ZWQuIEluIHRoYXQg
Y2FzZSwgZ28gZm9yIHNtYWxsZXIgY29udGlndW91cyBhbGxvY2F0aW9ucy4gV2UnbGwgZXZlbnR1
YWxseSBnZXQgaW5kaXZpZHVhbCBub24tY29udGlndW91cyBmYXN0IG1lbW9yaWVzIGFsbG9jYXRl
ZCwgb3Igd2UnbGwganVzdCBiZSB1bmFibGUgdG8gZml0IGEgc2luZ2xlIG9uZSBhdCB3aGljaCBw
b2ludCB3ZSBnaXZlIHVwLgorICAgIGF1dG8gYWxsb2NhdGVDb250aWd1b3VzRmFzdE1lbW9yaWVz
ID0gWyZdIChzaXplX3QgbnVtQ29udGlndW91cykgLT4gYm9vbCB7CisgICAgICAgIGlmICh2b2lk
ICptZW1vcnkgPSBtbWFwQnl0ZXMoTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSAqIG51bUNvbnRp
Z3VvdXMpKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBzdWJNZW1vcnkgPSAwOyBzdWJNZW1v
cnkgPCBudW1Db250aWd1b3VzOyArK3N1Yk1lbW9yeSkgeworICAgICAgICAgICAgICAgIHZvaWQq
IHN0YXJ0QWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1lbW9yeSkgKyBNZW1vcnk6
OmZhc3RNYXBwZWRCeXRlcygpICogc3ViTWVtb3J5ICsgc3ViTWVtb3J5OworICAgICAgICAgICAg
ICAgIGJvb2wgaW5zZXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBj
YWNoZUVudHJ5ID0gMDsgY2FjaGVFbnRyeSA8IGZhc3RNZW1vcnlDYWNoZUhhcmRMaW1pdDsgKytj
YWNoZUVudHJ5KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmYXN0TWVtb3J5Q2FjaGVbY2Fj
aGVFbnRyeV0ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSA9PSBudWxscHRyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmYXN0TWVtb3J5Q2FjaGVbY2FjaGVFbnRyeV0uc3RvcmUo
c3RhcnRBZGRyZXNzLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGluc2VydGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Owog
Ci0gICAgbWVtc2V0KG1lbW9yeSwgMCwgd3JpdGFibGVTaXplKTsKLSAgICBpZiAobXByb3RlY3Qo
bWVtb3J5LCB3cml0YWJsZVNpemUsIFBST1RfTk9ORSkpCi0gICAgICAgIENSQVNIKCk7CisgICAg
c2l6ZV90IGZyYWdtZW50cyA9IDA7CisgICAgc2l6ZV90IG51bUZhc3RNZW1vcmllcyA9IDA7Cisg
ICAgc2l6ZV90IGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdCA9IGRlc2lyZWRGYXN0
TWVtb3JpZXM7CisgICAgd2hpbGUgKG51bUZhc3RNZW1vcmllcyAhPSBkZXNpcmVkRmFzdE1lbW9y
aWVzICYmIGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdCAhPSAwKSB7CisgICAgICAg
IGlmIChhbGxvY2F0ZUNvbnRpZ3VvdXNGYXN0TWVtb3JpZXMoY29udGlndW91c01lbW9yeUFsbG9j
YXRpb25BdHRlbXB0KSkgeworICAgICAgICAgICAgbnVtRmFzdE1lbW9yaWVzICs9IGNvbnRpZ3Vv
dXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdDsKKyAgICAgICAgICAgIGNvbnRpZ3VvdXNNZW1vcnlB
bGxvY2F0aW9uQXR0ZW1wdCA9IHN0ZDo6bWluKGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0
ZW1wdCAtIDEsIGRlc2lyZWRGYXN0TWVtb3JpZXMgLSBudW1GYXN0TWVtb3JpZXMpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIC0tY29udGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0
OworICAgICAgICArK2ZyYWdtZW50czsKKyAgICB9CisKKyAgICBmYXN0TWVtb3J5UHJlYWxsb2Nh
dGVDb3VudCA9IG51bUZhc3RNZW1vcmllczsKKyAgICBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVt
b3JpZXMuc3RvcmUoZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpOworICAgIG9ic2VydmVkTWF4aW11bUZhc3RNZW1vcnkuc3RvcmUoZmFzdE1lbW9y
eVByZWFsbG9jYXRlQ291bnQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworCisgICAgY29u
c3QgYXV0byBlbmRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKLSAgICBMb2NrSG9sZGVy
IGxvY2tlcihtZW1vcnlMb2NrKTsKLSAgICBib29sIHJlc3VsdCA9IGFjdGl2ZUZhc3RNZW1vcmll
cyhsb2NrZXIpLnJlbW92ZShtZW1vcnkpOwotICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQpOwotICAgIEFTU0VSVChhdmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2VyKS5zaXplKCkgPCBh
bGxvY2F0ZWRGYXN0TWVtb3JpZXMpOwotICAgIGF2YWlsYWJsZUZhc3RNZW1vcmllcyhsb2NrZXIp
LmFwcGVuZChtZW1vcnkpOwotICAgIG1lbW9yeSA9IG51bGxwdHI7CisgICAgZm9yIChzaXplX3Qg
Y2FjaGVFbnRyeSA9IDA7IGNhY2hlRW50cnkgPCBmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudDsg
KytjYWNoZUVudHJ5KSB7CisgICAgICAgIHZvaWQqIHN0YXJ0QWRkcmVzcyA9IGZhc3RNZW1vcnlD
YWNoZVtjYWNoZUVudHJ5XS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAg
ICBBU1NFUlQoc3RhcnRBZGRyZXNzKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlBy
ZS1hbGxvY2F0aW9uIG9mIFdlYkFzc2VtYmx5IGZhc3QgbWVtb3J5IGF0ICIsIFJhd1BvaW50ZXIo
c3RhcnRBZGRyZXNzKSk7CisgICAgfQorICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcmUtYWxs
b2NhdGVkICIsIGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50LCAiIFdlYkFzc2VtYmx5IGZhc3Qg
bWVtb3JpZXMgaW4gIiwgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQgPT0gMCA/IDAgOiBmcmFn
bWVudHMsIGZyYWdtZW50cyA9PSAxID8gIiBmcmFnbWVudCwgdG9vayAiIDogIiBmcmFnbWVudHMs
IHRvb2sgIiwgZW5kVGltZSAtIHN0YXJ0VGltZSk7CiB9CiAKIE1lbW9yeTo6TWVtb3J5KFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKQEAgLTE5Niw4NSArMzI3LDEwNyBAQCBN
ZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwgc2l6ZV90IG1hcHBlZAogCiBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZUlt
cGwoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0
aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlKQogeworICAgIEFTU0VSVChpbml0aWFsKTsK
ICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBU
aGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCiAKKyAgICBjb25zdCBzaXpl
X3QgaW5pdGlhbEJ5dGVzID0gaW5pdGlhbC5ieXRlcygpOworICAgIGNvbnN0IHNpemVfdCBtYXhp
bXVtQnl0ZXMgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogMDsKKyAgICBjb25zdCBib29s
IGNhblVzZUZhc3RNZW1vcnkgPSAhcmVxdWlyZWRNb2RlIHx8IHJlcXVpcmVkTW9kZSA9PSBNZW1v
cnlNb2RlOjpTaWduYWxpbmc7CiAgICAgTWVtb3J5TW9kZSBtb2RlID0gcmVxdWlyZWRNb2RlID8g
KnJlcXVpcmVkTW9kZSA6IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOwotICAgIGNvbnN0IHNp
emVfdCBzaXplID0gaW5pdGlhbC5ieXRlcygpOwotICAgIHNpemVfdCBtYXBwZWRDYXBhY2l0eSA9
IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdlQ291bnQ6Om1heCgpLmJ5dGVzKCk7Ci0g
ICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0cjsKKyAgICBzaXplX3QgbWFwcGVkQ2FwYWNpdHlCeXRl
cyA9IDA7CisKKyAgICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgaGF2ZSBhIHN0dWIgcHJpb3Ig
dG8gcnVubmluZyBjb2RlLgorICAgIGlmIChVTkxJS0VMWSghVGh1bmtzOjpzaW5nbGV0b24oKS5z
dHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gbWFrZUVtcHR5TWVtb3J5ID0gWyZdICgpIC0+IFJlZlB0
cjxNZW1vcnk+IHsKKyAgICBpZiAobWF4aW11bSAmJiAhbWF4aW11bUJ5dGVzKSB7CisgICAgICAg
IC8vIFVzZXIgc3BlY2lmaWVkIGEgemVybyBtYXhpbXVtLCBpbml0aWFsIHNpemUgbXVzdCBhbHNv
IGJlIHplcm8uCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbml0aWFsQnl0ZXMpOwogICAgICAg
ICBpZiAobW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBt
YXhpbXVtKSk7Ci0gICAgfTsKLQotICAgIGlmICghbWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAgICAg
Ly8gVGhpcyBtZWFucyB3ZSBzcGVjaWZpZWQgYSB6ZXJvIGFzIG1heGltdW0gKHdoaWNoIG1lYW5z
IHdlIGFsc28gaGF2ZSB6ZXJvIGFzIGluaXRpYWwgc2l6ZSkuCi0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFzaXplKTsKLSAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRl
IGFsbG9jYXRpbmcgbm90aGluZyIpOwotICAgICAgICByZXR1cm4gbWFrZUVtcHR5TWVtb3J5KCk7
CiAgICAgfQogCi0gICAgYm9vbCBjYW5Vc2VGYXN0TWVtb3J5ID0gIXJlcXVpcmVkTW9kZSB8fCBy
ZXF1aXJlZE1vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nOwotICAgIGlmICghY2FuVXNlRmFz
dE1lbW9yeSB8fCAhdHJ5R2V0RmFzdE1lbW9yeSh2bSwgbWVtb3J5LCBtYXBwZWRDYXBhY2l0eSwg
bW9kZSkpIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0cjsKKyAg
ICBpZiAoY2FuVXNlRmFzdE1lbW9yeSkgeworICAgICAgICBtZW1vcnkgPSB0cnlHZXRGYXN0TWVt
b3J5KHZtKTsKKyAgICAgICAgaWYgKG1lbW9yeSkgeworICAgICAgICAgICAgbWFwcGVkQ2FwYWNp
dHlCeXRlcyA9IE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCk7CisgICAgICAgICAgICBtb2RlID0g
TWVtb3J5TW9kZTo6U2lnbmFsaW5nOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlmIChP
cHRpb25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkgPyB0cnVlIDogIW1tYXBCeXRl
cyhtYXBwZWRDYXBhY2l0eSwgbWVtb3J5KSkgewotICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdp
dGggYSBkaWZmZXJlbnQgbnVtYmVyLgotICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
Ik1lbW9yeTo6Y3JlYXRlIG1tYXAgZmFpbGVkIG9uY2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcgYWdh
aW4iKTsKLSAgICAgICAgICAgIG1hcHBlZENhcGFjaXR5ID0gc2l6ZTsKLSAgICAgICAgICAgIGlm
ICghbWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBub3QgdHJ5aW5nIGFnYWluIGJlY2F1c2Ugc2l6ZSBpcyB6
ZXJvIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1lbW9yeSgpOwotICAgICAg
ICAgICAgfQorICAgIGlmICghbWVtb3J5ICYmIG1vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5n
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgaWYgKCFtbWFwQnl0ZXMo
bWFwcGVkQ2FwYWNpdHksIG1lbW9yeSkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBmYWlsZWQgdHdpY2UiKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoIW1lbW9yeSAmJiBt
YXhpbXVtKSB7CisgICAgICAgIG1lbW9yeSA9IHRyeUdldFNsb3dNZW1vcnkobWF4aW11bUJ5dGVz
KTsKKyAgICAgICAgaWYgKG1lbW9yeSkgeworICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHlCeXRl
cyA9IG1heGltdW1CeXRlczsKKyAgICAgICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZzsKICAgICAgICAgfQogICAgIH0KIAotICAgIEFTU0VSVChtZW1vcnkgJiYgc2l6ZSA8
PSBtYXBwZWRDYXBhY2l0eSk7Ci0gICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgc2l6ZSwgUFJPVF9S
RUFEIHwgUFJPVF9XUklURSkpIHsKLSAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGV2ZXIg
b2NjdXI/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4OTAKLSAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1wcm90ZWN0IGZhaWxl
ZCIpOwotICAgICAgICByZWxlYXNlRmFzdE1lbW9yeShtZW1vcnksIDAsIG1hcHBlZENhcGFjaXR5
LCBtb2RlKTsKKyAgICBpZiAoIW1lbW9yeSkgeworICAgICAgICBtZW1vcnkgPSB0cnlHZXRTbG93
TWVtb3J5KGluaXRpYWxCeXRlcyk7CiAgICAgICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgICAg
IGlmIChtdW5tYXAobWVtb3J5LCBtYXBwZWRDYXBhY2l0eSkpCi0gICAgICAgICAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgICAgIG1hcHBlZENhcGFjaXR5Qnl0ZXMgPSBpbml0aWFsQnl0ZXM7Cisg
ICAgICAgICAgICBtb2RlID0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAgc3VjY2VlZGVkIik7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBNZW1vcnkobWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBtYXBwZWRDYXBhY2l0eSwgbW9k
ZSkpOworICAgIGlmICghbWVtb3J5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlm
ICghbWFrZU5ld01lbW9yeVJlYWRXcml0ZU9yUmVsaW5xdWlzaChtZW1vcnksIGluaXRpYWxCeXRl
cywgbWFwcGVkQ2FwYWNpdHlCeXRlcywgbW9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkobWVtb3J5LCBpbml0aWFsLCBtYXhpbXVt
LCBtYXBwZWRDYXBhY2l0eUJ5dGVzLCBtb2RlKSk7CiB9CiAKIFJlZlB0cjxNZW1vcnk+IE1lbW9y
eTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBz
dGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IG1vZGUpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1h
eGltdW0gfHwgbWF4aW11bSA+PSBpbml0aWFsKTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVl
ZCBieSBvdXIgY2FsbGVyLgogICAgIFJlZlB0cjxNZW1vcnk+IHJlc3VsdCA9IGNyZWF0ZUltcGwo
dm0sIGluaXRpYWwsIG1heGltdW0sIG1vZGUpOwotICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAg
aWYgKHJlc3VsdC0+bW9kZSgpID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZykKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC0+bV9tYXBwZWRDYXBhY2l0eSA9PSBmYXN0TWVtb3J5TWFw
cGVkQnl0ZXMpOwotICAgICAgICBpZiAobW9kZSkKLSAgICAgICAgICAgIEFTU0VSVCgqbW9kZSA9
PSByZXN1bHQtPm1vZGUoKSk7Ci0gICAgfQorICAgIGlmIChyZXN1bHQgJiYgbW9kZSkKKyAgICAg
ICAgQVNTRVJUKCptb2RlID09IHJlc3VsdC0+bW9kZSgpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBNZW1vcnk6On5NZW1vcnkoKQogewotICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1v
cnk6On5NZW1vcnkgIiwgKnRoaXMpOwotICAgIHJlbGVhc2VGYXN0TWVtb3J5KG1fbWVtb3J5LCBt
X3NpemUsIG1fbWFwcGVkQ2FwYWNpdHksIG1fbW9kZSk7CiAgICAgaWYgKG1fbWVtb3J5KSB7Ci0g
ICAgICAgIGlmIChtdW5tYXAobV9tZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkpKQotICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6fk1lbW9y
eSAiLCAqdGhpcyk7CisgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobV9tZW1vcnksIG1fc2l6ZSwg
bV9tYXBwZWRDYXBhY2l0eSwgbV9tb2RlKTsKKyAgICB9Cit9CisKK3NpemVfdCBNZW1vcnk6OmZh
c3RNYXBwZWRSZWR6b25lQnl0ZXMoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+
KFBhZ2VDb3VudDo6cGFnZVNpemUpICogT3B0aW9uczo6d2ViQXNzZW1ibHlGYXN0TWVtb3J5UmVk
em9uZVBhZ2VzKCk7Cit9CisKK3NpemVfdCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpCit7Cisg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YodWludDY0X3QpID09IHNpemVvZihzaXplX3QpLCAiV2Ug
cmVseSBvbiBhbGxvd2luZyB0aGUgbWF4aW11bSBzaXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUg
Ml4zMiArIHJlZHpvbmUgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRl
Z2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpKSArIGZhc3RNYXBwZWRSZWR6b25lQnl0ZXMoKTsKK30KKworc2l6ZV90IE1lbW9y
eTo6bWF4RmFzdE1lbW9yeUNvdW50KCkKK3sKKyAgICAvLyBUaGUgb3JkZXIgY2FuIGJlIHJlbGF4
ZWQgaGVyZSBiZWNhdXNlIHdlIHByb3ZpZGUgYSBtb25vdG9uaWNhbGx5LWluY3JlYXNpbmcgZXN0
aW1hdGUuIEEgY29uY3VycmVudCBvYnNlcnZlciBjb3VsZCBzZWUgYSBzbGlnaHRseSBvdXQtb2Yt
ZGF0ZSB2YWx1ZSBidXQgY2FuJ3QgdGVsbCB0aGF0IHRoZXkgZGlkLgorICAgIHJldHVybiBvYnNl
cnZlZE1heGltdW1GYXN0TWVtb3J5LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Cit9
CisKK2Jvb2wgTWVtb3J5OjphZGRyZXNzSXNJbkFjdGl2ZUZhc3RNZW1vcnkodm9pZCogYWRkcmVz
cykKK3sKKyAgICAvLyBUaGlzIGNhbm5vdCByYWNlIGluIGFueSBtZWFuaW5nZnVsIHdheTogdGhl
IHRocmVhZCB3aGljaCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdhbnRzIHRvIGtub3cgaWYgYSBmYXVs
dCBpdCByZWNlaXZlZCBhdCBhIHBhcnRpY3VsYXIgYWRkcmVzcyBpcyBpbiBhIGZhc3QgbWVtb3J5
LiBUaGF0IGZhc3QgbWVtb3J5IG11c3QgdGhlcmVmb3JlIGJlIGFjdGl2ZSBpbiB0aGF0IHRocmVh
ZC4gSXQgY2Fubm90IGJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvZiBjdXJyZW50
bHkgYWN0aXZlIGZhc3QgbWVtb3JpZXMuIE90aGVyIG1lbW9yaWVzIGJlaW5nIGFkZGVkIC8gcmVt
b3ZlZCBjb25jdXJyZW50bHkgYXJlIGluY29uc2VxdWVudGlhbC4KKyAgICBmb3IgKHNpemVfdCBp
ZHggPSAwOyBpZHggPCBmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1pdDsgKytpZHgpIHsKKyAg
ICAgICAgY2hhciogc3RhcnQgPSBzdGF0aWNfY2FzdDxjaGFyKj4oY3VycmVudGx5QWN0aXZlRmFz
dE1lbW9yaWVzW2lkeF0ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSk7CisgICAgICAg
IGlmIChzdGFydCA8PSBhZGRyZXNzICYmIGFkZHJlc3MgPD0gc3RhcnQgKyBmYXN0TWFwcGVkQnl0
ZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQpAQCAtMzAxLDggKzQ1
NCwxMSBAQCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKICAgICB9CiAKICAg
ICBpZiAobV9tZW1vcnkgJiYgZGVzaXJlZFNpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSkgewotICAg
ICAgICBpZiAobXByb3RlY3Qoc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6
ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkZXNpcmVkU2l6ZSAtIG1fc2l6ZSksIFBST1RfUkVBRCB8
IFBST1RfV1JJVEUpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgZXZlciBv
Y2N1cj8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTg5MAorICAg
ICAgICB1aW50OF90KiBzdGFydEFkZHJlc3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9tZW1v
cnkpICsgbV9zaXplOworICAgICAgICBzaXplX3QgZXh0cmFCeXRlcyA9IGRlc2lyZWRTaXplIC0g
bV9zaXplOworICAgICAgICBSRUxFQVNFX0FTU0VSVChleHRyYUJ5dGVzKTsKKyAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIk1hcmtpbmcgV2ViQXNzZW1ibHkgbWVtb3J5J3MgIiwgUmF3UG9p
bnRlcihtX21lbW9yeSksICIgYXMgcmVhZCt3cml0ZSBpbiByYW5nZSBbIiwgUmF3UG9pbnRlcihz
dGFydEFkZHJlc3MpLCAiLCAiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcyArIGV4dHJhQnl0ZXMp
LCAiKSIpOworICAgICAgICBpZiAobXByb3RlY3Qoc3RhcnRBZGRyZXNzLCBleHRyYUJ5dGVzLCBQ
Uk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIk1lbW9yeTo6Z3JvdyBpbi1wbGFjZSBmYWlsZWQgIiwgKnRoaXMpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0zMTYsMTYgKzQ3MiwxOSBAQCBib29sIE1lbW9y
eTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKICAgICBSRUxFQVNFX0FTU0VSVChtb2RlKCkgIT0g
TWVtb3J5TW9kZTo6U2lnbmFsaW5nKTsKIAogICAgIC8vIE90aGVyd2lzZSwgbGV0J3MgdHJ5IHRv
IG1ha2Ugc29tZSBuZXcgbWVtb3J5LgotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIGlm
IHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKLSAgICB2b2lkKiBuZXdNZW1vcnkgPSBtbWFwKG51bGxw
dHIsIGRlc2lyZWRTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1B
UF9BTk9OLCAtMSwgMCk7Ci0gICAgaWYgKG5ld01lbW9yeSA9PSBNQVBfRkFJTEVEKQorICAgIC8v
IEZJWE1FIG1yZW1hcCB3b3VsZCBiZSBuaWNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzA1NTcKKyAgICB2b2lkKiBuZXdNZW1vcnkgPSB0cnlHZXRTbG93TWVtb3J5
KGRlc2lyZWRTaXplKTsKKyAgICBpZiAoIW5ld01lbW9yeSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFtYWtlTmV3TWVtb3J5UmVhZFdyaXRlT3JSZWxpbnF1aXNoKG5ld01lbW9y
eSwgZGVzaXJlZFNpemUsIGRlc2lyZWRTaXplLCBtb2RlKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBpZiAobV9tZW1vcnkpIHsKICAgICAgICAgbWVtY3B5KG5ld01lbW9yeSwgbV9t
ZW1vcnksIG1fc2l6ZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9ICFtdW5tYXAobV9tZW1vcnks
IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzKTsKKyAg
ICAgICAgcmVsaW5xdWlzaE1lbW9yeShtX21lbW9yeSwgbV9zaXplLCBtX3NpemUsIG1fbW9kZSk7
CiAgICAgfQorCiAgICAgbV9tZW1vcnkgPSBuZXdNZW1vcnk7CiAgICAgbV9tYXBwZWRDYXBhY2l0
eSA9IGRlc2lyZWRTaXplOwogICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCmluZGV4IGIwMjQ1MWQuLjA0M2E5ZWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2lu
Y2x1ZGUgIldhc21QYWdlQ291bnQuaCIKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CkBAIC02MSwxMSArNjAsMTcgQEAgcHVibGljOgogCiAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9tZW1vcnk7IH0KIAotICAg
IHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlID0g
c3RkOjpudWxsb3B0KTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplUHJlYWxsb2NhdGlvbnMo
KTsKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGlu
aXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVp
cmVkTW9kZSA9IHN0ZDo6bnVsbG9wdCk7CiAKICAgICBNZW1vcnkoKSA9IGRlZmF1bHQ7CiAgICAg
fk1lbW9yeSgpOwogCisgICAgc3RhdGljIHNpemVfdCBmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCk7
CisgICAgc3RhdGljIHNpemVfdCBmYXN0TWFwcGVkQnl0ZXMoKTsgLy8gSW5jbHVkZXMgcmVkem9u
ZS4KKyAgICBzdGF0aWMgc2l6ZV90IG1heEZhc3RNZW1vcnlDb3VudCgpOworICAgIHN0YXRpYyBi
b29sIGFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSh2b2lkKik7CisKICAgICB2b2lkKiBtZW1v
cnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeTsgfQogICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CiAgICAgUGFnZUNvdW50IHNpemVJblBhZ2VzKCkgY29uc3QgeyBy
ZXR1cm4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKTsgfQpAQCAtODEsNyArODYsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGNoZWNrKCkgeyAgQVNTRVJUKCFkZWxldGlvbkhhc0JlZ3VuKCkp
OyB9CiBwcml2YXRlOgotICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGVJbXBsKFZNJiwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9y
eU1vZGU+IHJlcXVpcmVkTW9kZSA9IHN0ZDo6bnVsbG9wdCk7CisgICAgc3RhdGljIFJlZlB0cjxN
ZW1vcnk+IGNyZWF0ZUltcGwoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1h
eGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxs
b3B0KTsKICAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNv
dW50IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7CiAgICAgTWVt
b3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CiAKQEAgLTk0LDEyICs5
OSwxNCBAQCBwcml2YXRlOgogICAgIE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmcgfTsKIH07CiAKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBz
aXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBN
ZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzMgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMy
LWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhv
bGQuIik7Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCi1jb25zdCBzaXplX3QgZmFzdE1l
bW9yeU1hcHBlZEJ5dGVzID0gKHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpKSArIDEpICogMjsgLy8gcG9pbnRlciBtYXggKyBvZmZzZXQgbWF4
LiBUaGlzIGlzIGFsbCB3ZSBuZWVkIHNpbmNlIGEgbG9hZCBzdHJhZGRsaW5nIHJlYWRhYmxlIG1l
bW9yeSB3aWxsIHRyYXAuCi1leHRlcm4gU3RhdGljTG9jayBtZW1vcnlMb2NrOwotY29uc3QgSGFz
aFNldDx2b2lkKj4mIHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RMb2NrZXIm
KTsKKyNlbHNlCiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCitjbGFzcyBNZW1vcnkgewor
cHVibGljOgorICAgIHN0YXRpYyBzaXplX3QgbWF4RmFzdE1lbW9yeUNvdW50KCkgeyByZXR1cm4g
MDsgfQorICAgIHN0YXRpYyBib29sIGFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSh2b2lkKikg
eyByZXR1cm4gZmFsc2U7IH0KK307CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1MWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwCmluZGV4IDY1NDdkNjIuLjljZDQ3ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtNjMs
NyArNjMsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKIAogICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKLSAgICBj
b25zdCBzaXplX3QgZXh0cmFNZW1vcnlTaXplID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
Lmdsb2JhbHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBjb25zdCBzaXplX3QgZXh0
cmFNZW1vcnlTaXplID0gZ2xvYmFsTWVtb3J5Qnl0ZVNpemUoKTsKICAgICBtX2dsb2JhbHMgPSBN
YWxsb2NQdHI8dWludDY0X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKICAgICBoZWFwKCkt
PnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7CiAKQEAgLTg5LDcg
Kzg5LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX21lbW9yeSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YWJsZSk7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUpOwotICAgIHZpc2l0b3Iu
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1vZHVsZSgpLT5tb2R1bGVJbmZv
cm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpKTsKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZCh0aGlzT2JqZWN0LT5nbG9iYWxNZW1vcnlCeXRlU2l6ZSgpKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkK
ICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb25zKClbaV0p
OwogfQpAQCAtMzUwLDYgKzM1MCwxMCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIHJl
dHVybiBpbnN0YW5jZTsKIH0KIAorc2l6ZV90IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Z2xvYmFs
TWVtb3J5Qnl0ZVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX21vZHVsZS0+bW9kdWxlSW5m
b3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSAqIHNpemVvZihSZWdpc3Rlcik7Cit9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCmluZGV4IDg1NTFmZTguLjUzZWQ5OWY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaApAQCAtOTIsNiArOTIsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIFZNKiBtX3Zt
OwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGltcG9ydEZ1bmN0aW9ucygpIHsgcmV0dXJu
IGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Kj4oYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkpOyB9CisgICAgc2l6ZV90IGdsb2Jh
bE1lbW9yeUJ5dGVTaXplKCkgY29uc3Q7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJs
eU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s+IG1fY29kZUJsb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAppbmRleCAzMzY5YzBlLi5jNmQ3OGNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmNwcApAQCAtMTE3LDYgKzExNyw3IEBAIFdhc206OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVt
b3J5Ojpncm93KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0CiAgICAgfQog
CiAgICAgbWVtb3J5KCkuY2hlY2soKTsKKyAgICAvLyBGSVhNRSBTaG91bGQgd2UgcmVwb3J0IGV4
dHJhIG1lbW9yeSB0byB0aGUgR0Mgb24gYWxsb2NhdGlvbiAvIGdyb3cgLyB2aXNpdD8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDY5MAogICAgIHJldHVybiBvbGRQ
YWdlQ291bnQ7CiB9CiAKQEAgLTEyNCw2ICsxMjUsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1v
cnk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICAvLyBGSVhNRSBTaG91
bGQgd2UgcmVwb3J0IGV4dHJhIG1lbW9yeSB0byB0aGUgR0Mgb24gYWxsb2NhdGlvbiAvIGdyb3cg
LyB2aXNpdD8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDY5MAor
ICAgIHZtLmhlYXAucmVwb3J0V2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWQoMSk7CiB9
CiAKIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0x
NDEsNiArMTQ0LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fYnVmZmVyV3JhcHBlcik7CisgICAgLy8gRklYTUUgU2hvdWxkIHdlIHJlcG9ydCBleHRyYSBt
ZW1vcnkgdG8gdGhlIEdDIG9uIGFsbG9jYXRpb24gLyBncm93IC8gdmlzaXQ/IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2OTAKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCmluZGV4IGQ2N2UwNjUuLmViMjc4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTctMDQt
MTEgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2Vt
Ymx5OiBtYW5hZ2UgbWVtb3J5IGJldHRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmUtdXNlIGEgVk0gdGFnIHdoaWNoIHdhcyBpbnRlbmRlZCBmb3Ig
SmF2YVNjcmlwdCBjb3JlLCB3YXMgdGhlbgorICAgICAgICB1c2VkIGJ5IG91ciBHQywgYW5kIGlz
IG5vdyB1bnVzZWQuIElmIEkgZG9uJ3QgZG8gdGhpcyB0aGVuCisgICAgICAgIFdlYkFzc2VtYmx5
IGZhc3QgbWVtb3JpZXMgd2lsbCBtYWtlIHZtbWFwIGxvb2sgc3VwZXIgd2VpcmQgYmVjYXVzZQor
ICAgICAgICBpdCdsbCBsb29rIGxpa2UgbXVsdGktZ2lnYWJ5dGUgb2YgdmlydHVhbCBtZW1vcnkg
YXJlIGFsbG9jYXRlZCBhcworICAgICAgICBwYXJ0IG9mIG91ciBwcm9jZXNzJyByZWd1bGFyIG1l
bW9yeSEKKworICAgICAgICBTZXBhcmF0ZWx5IEkgbmVlZCB0byB1cGRhdGUgdm1tYXAgYW5kIG90
aGVyIHRvb2xzIHRvIHByaW50IHRoZQorICAgICAgICByaWdodCBuYW1lLiBSaWdodCBub3cgdGhp
cyB0YWcgZ2V0cyBpZGVudGlmaWVkIGFzICJKUyBnYXJiYWdlCisgICAgICAgIGNvbGxlY3RvciIu
CisKKyAgICAgICAgKiB3dGYvT1NBbGxvY2F0b3IuaDoKKyAgICAgICAgKiB3dGYvVk1UYWdzLmg6
CisKIDIwMTctMDQtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBVc2UgYXVkaXRfdG9rZW5fdCBpbnN0ZWFkIG9mIHBpZF90IGZvciBjaGVj
a2luZyBzYW5kYm94IG9mIG90aGVyIHByb2Nlc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvT1NBbGxvY2F0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKaW5kZXggYzlj
YjE1NS4uZDc2NzhiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCkBAIC0zNiw3ICszNiw2IEBAIHB1Ymxp
YzoKICAgICBlbnVtIFVzYWdlIHsKICAgICAgICAgVW5rbm93blVzYWdlID0gLTEsCiAgICAgICAg
IEZhc3RNYWxsb2NQYWdlcyA9IFZNX1RBR19GT1JfVENNQUxMT0NfTUVNT1JZLAotICAgICAgICBK
U0dDSGVhcFBhZ2VzID0gVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZLAogICAgICAgICBKU1ZN
U3RhY2tQYWdlcyA9IFZNX1RBR19GT1JfUkVHSVNURVJGSUxFX01FTU9SWSwKICAgICAgICAgSlNK
SVRDb2RlUGFnZXMgPSBWTV9UQUdfRk9SX0VYRUNVVEFCTEVBTExPQ0FUT1JfTUVNT1JZLAogICAg
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WTVRhZ3MuaCBiL1NvdXJjZS9XVEYvd3Rm
L1ZNVGFncy5oCmluZGV4IGFlZjA1ZDIuLjI3ZmMwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1ZNVGFncy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZNVGFncy5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwxNSArNTEsMTUg
QEAKICNlbmRpZiAvLyBkZWZpbmVkKFZNX01FTU9SWV9KQVZBU0NSSVBUX0pJVF9SRUdJU1RFUl9G
SUxFKQogCiAjaWYgZGVmaW5lZChWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFKQotI2RlZmluZSBW
TV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlkgVk1fTUFLRV9UQUcoVk1fTUVNT1JZX0pBVkFTQ1JJ
UFRfQ09SRSkKKyNkZWZpbmUgVk1fVEFHX0ZPUl9XRUJBU1NFTUJMWV9NRU1PUlkgVk1fTUFLRV9U
QUcoVk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRSkKICNlbHNlCi0jZGVmaW5lIFZNX1RBR19GT1Jf
Q09MTEVDVE9SX01FTU9SWSBWTV9NQUtFX1RBRyg2MykKKyNkZWZpbmUgVk1fVEFHX0ZPUl9XRUJB
U1NFTUJMWV9NRU1PUlkgVk1fTUFLRV9UQUcoNjMpCiAjZW5kaWYgLy8gZGVmaW5lZChWTV9NRU1P
UllfSkFWQVNDUklQVF9DT1JFKQogCiAjZWxzZSAvLyBPUyhEQVJXSU4pCiAKICNkZWZpbmUgVk1f
VEFHX0ZPUl9UQ01BTExPQ19NRU1PUlkgLTEKLSNkZWZpbmUgVk1fVEFHX0ZPUl9DT0xMRUNUT1Jf
TUVNT1JZIC0xCisjZGVmaW5lIFZNX1RBR19GT1JfV0VCQVNTRU1CTFlfTUVNT1JZIC0xCiAjZGVm
aW5lIFZNX1RBR19GT1JfRVhFQ1VUQUJMRUFMTE9DQVRPUl9NRU1PUlkgLTEKICNkZWZpbmUgVk1f
VEFHX0ZPUl9SRUdJU1RFUkZJTEVfTUVNT1JZIC0xCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyZjk5MDliLi42
OTNjMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTctMDQtMTEgIEpGIEJhc3Rp
ZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBtYW5hZ2Ug
bWVtb3J5IGJldHRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwNjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmUtdXNlIGEgVk0gdGFnIHdoaWNoIHdhcyBpbnRlbmRlZCBmb3IgSmF2YVNjcmlwdCBj
b3JlLCB3YXMgdGhlbgorICAgICAgICB1c2VkIGJ5IG91ciBHQywgYW5kIGlzIG5vdyB1bnVzZWQu
IElmIEkgZG9uJ3QgZG8gdGhpcyB0aGVuCisgICAgICAgIFdlYkFzc2VtYmx5IGZhc3QgbWVtb3Jp
ZXMgd2lsbCBtYWtlIHZtbWFwIGxvb2sgc3VwZXIgd2VpcmQgYmVjYXVzZQorICAgICAgICBpdCds
bCBsb29rIGxpa2UgbXVsdGktZ2lnYWJ5dGUgb2YgdmlydHVhbCBtZW1vcnkgYXJlIGFsbG9jYXRl
ZCBhcworICAgICAgICBwYXJ0IG9mIG91ciBwcm9jZXNzJyByZWd1bGFyIG1lbW9yeSEKKworICAg
ICAgICBTZXBhcmF0ZWx5IEkgbmVlZCB0byB1cGRhdGUgdm1tYXAgYW5kIG90aGVyIHRvb2xzIHRv
IHByaW50IHRoZQorICAgICAgICByaWdodCBuYW1lLiBSaWdodCBub3cgdGhpcyB0YWcgZ2V0cyBp
ZGVudGlmaWVkIGFzICJKUyBnYXJiYWdlCisgICAgICAgIGNvbGxlY3RvciIuCisKKyAgICAgICAg
KiBwYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
VXNhZ2VEYXRhOjpSZXNvdXJjZVVzYWdlRGF0YSk6CisgICAgICAgICogcGFnZS9SZXNvdXJjZVVz
YWdlRGF0YS5oOgorICAgICAgICAqIHBhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2Nv
YS5tbToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcmljUmVzb3VyY2VVc2FnZURhdGE6Okhpc3Rv
cmljUmVzb3VyY2VVc2FnZURhdGEpOgorICAgICAgICAqIHBhZ2UvY29jb2EvUmVzb3VyY2VVc2Fn
ZVRocmVhZENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGxheU5hbWVGb3JWTVRhZyk6
CisgICAgICAgIChXZWJDb3JlOjpjYXRlZ29yeUZvclZNVGFnKToKKwogMjAxNy0wNC0wNyAgWXVp
Y2hpcm8gS2lrdXJhICA8eS5raWt1cmFAZ21haWwuY29tPgogCiAgICAgICAgIFdlYkdQVTogaW1w
bGVtZW50IENvbXB1dGVDb21tYW5kRW5jb2RlciBhbmQgcmVsYXRlZCBjb21wb25lbnRzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwCmluZGV4IDU5MTJiMDUuLjdhMTcw
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0
LDcgQEAgUmVzb3VyY2VVc2FnZURhdGE6OlJlc291cmNlVXNhZ2VEYXRhKCkKIHsKICAgICAvLyBW
TSB0YWcgY2F0ZWdvcmllcy4KICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpKU0pJVF0g
PSBNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkpTSklUKTsKKyAgICBjYXRlZ29y
aWVzW01lbW9yeUNhdGVnb3J5OjpXZWJBc3NlbWJseV0gPSBNZW1vcnlDYXRlZ29yeUluZm8oTWVt
b3J5Q2F0ZWdvcnk6OldlYkFzc2VtYmx5KTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5
OjpJbWFnZXNdID0gTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpJbWFnZXMpOwog
ICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkxheWVyc10gPSBNZW1vcnlDYXRlZ29yeUlu
Zm8oTWVtb3J5Q2F0ZWdvcnk6OkxheWVycyk7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29y
eTo6TGliY01hbGxvY10gPSBNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkxpYmNN
YWxsb2MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0
YS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5oCmluZGV4IDcyMzY5
NmYuLjlmZjg2YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2Fn
ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUs
MTIgKzM1LDEzIEBAIG5hbWVzcGFjZSBNZW1vcnlDYXRlZ29yeSB7CiBzdGF0aWMgY29uc3QgdW5z
aWduZWQgYm1hbGxvYyA9IDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgTGliY01hbGxvYyA9IDE7
CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgSlNKSVQgPSAyOwotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IEltYWdlcyA9IDM7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgR0NIZWFwID0gNDsKLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBHQ093bmVkID0gNTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdGhlciA9
IDY7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgTGF5ZXJzID0gNzsKLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBOdW1iZXJPZkNhdGVnb3JpZXMgPSA4Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIFdlYkFz
c2VtYmx5ID0gMzsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBJbWFnZXMgPSA0Oworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIEdDSGVhcCA9IDU7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgR0NPd25lZCA9
IDY7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgT3RoZXIgPSA3Oworc3RhdGljIGNvbnN0IHVuc2ln
bmVkIExheWVycyA9IDg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgTnVtYmVyT2ZDYXRlZ29yaWVz
ID0gOTsKIH0KIAogc3RydWN0IE1lbW9yeUNhdGVnb3J5SW5mbyB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KaW5kZXgg
MzY2NjAxZS4uOTczYjg2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9S
ZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29j
b2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTYyLDYgKzE2Miw3IEBAIEhpc3Rvcmlj
UmVzb3VyY2VVc2FnZURhdGE6Okhpc3RvcmljUmVzb3VyY2VVc2FnZURhdGEoKQogewogICAgIC8v
IFZNIHRhZyBjYXRlZ29yaWVzLgogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkpTSklU
XSA9IEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpKU0pJVCwgMHhG
RkZGNjBGRiwgIkpTIEpJVCIpOworICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OldlYkFz
c2VtYmx5XSA9IEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpXZWJB
c3NlbWJseSwgMHhGRjY1NEZGMCwgIldlYkFzc2VtYmx5Iik7CiAgICAgY2F0ZWdvcmllc1tNZW1v
cnlDYXRlZ29yeTo6SW1hZ2VzXSA9IEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNh
dGVnb3J5OjpJbWFnZXMsIDB4RkZGRkZGMDAsICJJbWFnZXMiKTsKICAgICBjYXRlZ29yaWVzW01l
bW9yeUNhdGVnb3J5OjpMYXllcnNdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5
Q2F0ZWdvcnk6OkxheWVycywgMHhGRjAwRkZGRiwgIkxheWVycyIpOwogICAgIGNhdGVnb3JpZXNb
TWVtb3J5Q2F0ZWdvcnk6OkxpYmNNYWxsb2NdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8o
TWVtb3J5Q2F0ZWdvcnk6OkxpYmNNYWxsb2MsIDB4RkYwMEZGMDAsICJsaWJjIG1hbGxvYyIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFk
Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRD
b2NvYS5tbQppbmRleCAwNjRhNjFhLi5hMzBlZjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNiArODAsNyBA
QCBjb25zdCBjaGFyKiBkaXNwbGF5TmFtZUZvclZNVGFnKHVuc2lnbmVkIHRhZykKICAgICBjYXNl
IFZNX01FTU9SWV9JTUFHRUlPOiByZXR1cm4gIkltYWdlSU8iOwogICAgIGNhc2UgVk1fTUVNT1JZ
X0NHSU1BR0U6IHJldHVybiAiQ0cgaW1hZ2UiOwogICAgIGNhc2UgVk1fTUVNT1JZX0pBVkFTQ1JJ
UFRfSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SOiByZXR1cm4gIkpTQyBKSVQiOworICAgIGNhc2Ug
Vk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRTogcmV0dXJuICJXZWJBc3NlbWJseSI7CiAgICAgY2Fz
ZSBWTV9NRU1PUllfTUFMTE9DOiByZXR1cm4gIm1hbGxvYyI7CiAgICAgY2FzZSBWTV9NRU1PUllf
TUFMTE9DX0hVR0U6IHJldHVybiAibWFsbG9jIChodWdlKSI7CiAgICAgY2FzZSBWTV9NRU1PUllf
TUFMTE9DX0xBUkdFOiByZXR1cm4gIm1hbGxvYyAobGFyZ2UpIjsKQEAgLTE4MSw2ICsxODIsOCBA
QCBzdGF0aWMgdW5zaWduZWQgY2F0ZWdvcnlGb3JWTVRhZyh1bnNpZ25lZCB0YWcpCiAgICAgICAg
IHJldHVybiBNZW1vcnlDYXRlZ29yeTo6SW1hZ2VzOwogICAgIGNhc2UgVk1fTUVNT1JZX0pBVkFT
Q1JJUFRfSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SOgogICAgICAgICByZXR1cm4gTWVtb3J5Q2F0
ZWdvcnk6OkpTSklUOworICAgIGNhc2UgVk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRToKKyAgICAg
ICAgcmV0dXJuIE1lbW9yeUNhdGVnb3J5OjpXZWJBc3NlbWJseTsKICAgICBjYXNlIFZNX01FTU9S
WV9NQUxMT0M6CiAgICAgY2FzZSBWTV9NRU1PUllfTUFMTE9DX0hVR0U6CiAgICAgY2FzZSBWTV9N
RU1PUllfTUFMTE9DX0xBUkdFOgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9DaGFu
Z2VMb2cgYi9XZWJzaXRlcy93ZWJraXQub3JnL0NoYW5nZUxvZwppbmRleCA2MzIxZDU3Li4wZDMy
MWI2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy93ZWJraXQub3JnL0NoYW5nZUxvZworKysgYi9XZWJz
aXRlcy93ZWJraXQub3JnL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE3LTA0LTExICBK
RiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTog
bWFuYWdlIG1lbW9yeSBiZXR0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MDYyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbDog
dHlwb3MKKwogMjAxNy0wNC0wNiAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4IGJyb2tlbiBsaW5rLgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9k
b2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sIGIvV2Vic2l0ZXMvd2Via2l0
Lm9yZy9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCmluZGV4IDIwYjU5
YjUuLjFhNTk4YTUgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9pbnRl
cm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbAorKysgYi9XZWJzaXRlcy93ZWJraXQub3JnL2Rv
Y3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwKQEAgLTY1NCw5ICs2NTQsOSBA
QCBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICA8ZGQ+U3BlY2lhbCBXYXNtIG9wY29k
ZS4gVGhpcyBicmFuY2hlcyBvbiB0aGUgZmlyc3QgY2hpbGQuIElmIHRoZSBmaXJzdCBjaGlsZCBw
bHVzIHRoZSBvZmZzZXQKICAgICAgICAgcHJvZHVjZXMgYSBJbnQ2NCBsZXNzIHRoYW4gdG8gdGhl
IHBpbm5lZEdQUiB0aGlzIGZhbGxzIHRocm91Z2guIE90aGVyd2lzZSwgaXQgYnJhbmNoZXMgdG8K
ICAgICAgICAgdGhlIGV4aXQgcGF0aCBnZW5lcmF0ZWQgYnkgdGhlIHBhc3NlZCBnZW5lcmF0b3Iu
IFVubGlrZSB0aGUgUGF0Y2gvQ2hlY2sgZmFtaWx5LCB0aGUKLSAgICAgICAgZ2VuZXJhdG9yIHVz
ZWQgYnkgV2FzbUJvdW5kc0NoZWNrIHNvdWxkIGJlIHNldCBvbiB0aGUgUHJvY3VkZXIgaXRzZWxm
LiBUaGUgR1JQUmVnIHBhc3NlZCBpbgorICAgICAgICBnZW5lcmF0b3IgdXNlZCBieSBXYXNtQm91
bmRzQ2hlY2sgc2hvdWxkIGJlIHNldCBvbiB0aGUgUHJvY2VkdXJlIGl0c2VsZi4gVGhlIEdSUFJl
ZyBwYXNzZWQgaW4KICAgICAgICAgcGlubmVkR1BSIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgcGlu
bmVkIGJ5IGNhbGxpbmcgdGhlIFByb2NlZHVyZSdzIHBpbm5pbmcgQVBJLiBCMyBhc3N1bWVzCi0g
ICAgICAgIHRoZSBXYXNtQm91bmRzQ2hlY2sgd2lsbCBzaWRlLWV4aXQgd2hlbiB0aGUgaXQgYnJh
bmNoZXMsIHNvIHRoZSBnZW5lcmF0b3IgbXVzdCBkbyBzb21lIGtpbmQKKyAgICAgICAgdGhlIFdh
c21Cb3VuZHNDaGVjayB3aWxsIHNpZGUtZXhpdCB3aGVuIGl0IGJyYW5jaGVzLCBzbyB0aGUgZ2Vu
ZXJhdG9yIG11c3QgZG8gc29tZSBraW5kCiAgICAgICAgIG9mIHRlcm1pbmF0aW9uLiBJbiBXYXNt
IHRoaXMgaXMgdXNlZCB0byB0cmFwIGFuZCB1bndpbmQgYmFjayB0byBKUy4gTXVzdCB1c2UgdGhl
CiAgICAgICAgIFdhc21Cb3VuZHNDaGVja1ZhbHVlIGNsYXNzLjwvZGQ+CiAKLS0gCjIuMTAuMQoK
</data>
<flag name="review"
          id="328195"
          type_id="1"
          status="-"
          setter="keith_miller"
    />
    <flag name="commit-queue"
          id="328196"
          type_id="3"
          status="-"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306919</attachid>
            <date>2017-04-12 10:25:13 -0700</date>
            <delta_ts>2017-04-12 14:12:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-fast-memories-everywhere.patch</filename>
            <type>text/plain</type>
            <size>99336</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBkM2M0ZTEzMGI2MmYwMjg0MmExODk4ODVhZDFkYWQ4MGY0MWQ3OTExIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDYgQXByIDIwMTcgMTU6MTQ6NDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBmYXN0LW1l
bW9yaWVzLWV2ZXJ5d2hlcmUKCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMzAgKysKIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICstCiBKU1Rlc3RzL3dhc20vV0FTTS5qcyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMCArKwogLi4uL3dhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMgfCAxMzAgKysrKysrCiBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanMgICAgICAgICB8ICAxOCArCiBKU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQuanMgICB8IDExNyArKysrKwogSlNU
ZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcyAgICAgICAgfCAgMTUgKwog
SlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYg
KwogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAx
NDUgKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgICAg
ICAgICAgfCAgMzQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcCAg
ICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAg
ICAgICAgICAgICAgICB8ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuY3BwICAgfCAgMjEgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dh
c21Cb3VuZHNDaGVja1ZhbHVlLmggIHwgIDE0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckN1c3RvbS5jcHAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwICAgICAgICAgICAgICAgIHwgIDMxICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmggICAgICAgICAgICAgICAgICB8ICAxMyArCiAuLi4vSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgICAgICAgICAgfCAgIDkgKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDYgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgIDQ2
ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCB8
ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAg
ICAgfCA0NzAgKysrKysrKysrKysrKystLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmggICAgICAgICAgICB8ICAyMSArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcCAgICAgICAgICAgICAgfCAgIDggKy0KIC4uLi9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgICAxICsKIC4uLi9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIHwgICA0ICsKIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIwICsKIFNvdXJjZS9X
VEYvd3RmL09TQWxsb2NhdG9yLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxIC0KIFNvdXJj
ZS9XVEYvd3RmL1ZNVGFncy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICstCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyNiAr
KwogU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAgICAgICAgICAgfCAg
IDMgKy0KIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuaCAgICAgICAgICAg
IHwgIDE1ICstCiAuLi4vcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tICAg
ICAgICB8ICAgMyArLQogLi4uL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFk
Q29jb2EubW0gfCAgIDUgKy0KIFdlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgIHwgICA5ICsKIC4uLi9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRh
dGlvbi5odG1sICAgICAgIHwgIDEyICstCiAzOCBmaWxlcyBjaGFuZ2VkLCAxMDk4IGluc2VydGlv
bnMoKyksIDIxNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQu
anMKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGVlZjlmYzAuLjkwYTRiN2EgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTctMDQtMTEgIEpGIEJhc3Rp
ZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBtYW5hZ2Ug
bWVtb3J5IGJldHRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwNjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3YXNtL0J1aWxkZXIuanM6IG1vdmUgYSBoZWxwZXIgb3V0IHNvIHRlc3RzIGNhbiB1
c2UgaXQKKyAgICAgICAgKGV4cG9ydC5kZWZhdWx0LkJ1aWxkZXIucHJvdG90eXBlLl9yZWdpc3Rl
clNlY3Rpb25CdWlsZGVycy5jb25zdC5zZWN0aW9uLmluLldBU00uZGVzY3JpcHRpb24uc2VjdGlv
bi5zd2l0Y2guc2VjdGlvbi5jYXNlLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRoaXMuc2VjdGlvbik6
CisgICAgICAgICogd2FzbS9XQVNNLmpzOiBhZGQgdXRpbGl0aWVzIHRvIGNsYXNzaWZ5IG9wY29k
ZXMKKyAgICAgICAgKGV4cG9ydC5vcGNvZGVzKToKKyAgICAgICAgKGV4cG9ydC5jb25zdC5tZW1v
cnlBY2Nlc3NJbmZvLm9wLmNvbnN0LnNpZ24pOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanM6IEFkZGVkLiBUaGlzIHRlc3QKKyAgICAgICAg
ZmFpbHMgYmVmb3JlIHRoaXMgcGF0Y2guCisgICAgICAgIChjb25zdC5vcC5vZi5XQVNNLm9wY29k
ZXMpOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanM6IEFkZGVk
LiBUaGlzIHNpbXBsZSB0ZXN0cworICAgICAgICBqdXN0IHNob3VsZG4ndCBjcmFzaC4gSW4gdmVy
Ym9zZSBtb2RlIGl0J3MgdXNlZnVsIGF0IGRldGVybWluaW5nCisgICAgICAgIGlmIHRoZSBHQyBm
YWxscyBiZWhpbmQgb3Igbm90LgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5
LW11bHRpYWdlbnQuanM6IEFkZGVkLiBFbXVsYXRlIHBvc3RNZXNzYWdlLgorICAgICAgICAoY29u
c3Quc3RhcnRBZ2VudHMubnVtQWdlbnRzVG9TdGFydC5hLmFnZW50LnJlY2VpdmVCcm9hZGNhc3Qp
OgorICAgICAgICAoY29uc3Quc3RhcnRBZ2VudHMubnVtQWdlbnRzVG9TdGFydC5hLndyaXRlLmNv
bnN0LmlkeC5NYXRoLnJhbmRvbSk6CisgICAgICAgIChjb25zdC5icm9hZGNhc3RUb0FnZW50cyk6
CisgICAgICAgICogd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanM6IHZlcmJvc2Ug
bG9nZ2luZy4KKyAgICAgICAgKHRlc3RNZW1vcnlOb01heCk6CisgICAgICAgICh0ZXN0TWVtb3J5
KToKKyAgICAgICAgKHRlc3RJbnN0YW5jZU5vTWVtb3J5KToKKyAgICAgICAgKHRlc3RJbnN0YW5j
ZU5vTWF4KToKKyAgICAgICAgKHRlc3RJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS91dGlsaXRp
ZXMuanM6IG1vdmUgYSB1dGlsaXR5IGhlcmUuCisKIDIwMTctMDQtMDYgIE1pY2hhZWwgU2Fib2Zm
ICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2Fubm90IE9iamVjdC5zZWFsKCkgb3Ig
T2JqZWN0LmZyZWV6ZSgpIGdsb2JhbCAidGhpcyIKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9C
dWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKaW5kZXggOGZmNWRjZS4uZGVlNzg2
ZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKKysrIGIvSlNUZXN0cy93YXNt
L0J1aWxkZXIuanMKQEAgLTI3LDEyICsyNyw3IEBAIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdh
c3NlcnQuanMnOwogaW1wb3J0ICogYXMgQnVpbGRXZWJBc3NlbWJseSBmcm9tICdCdWlsZGVyX1dl
YkFzc2VtYmx5QmluYXJ5LmpzJzsKIGltcG9ydCAqIGFzIExMQiBmcm9tICdMb3dMZXZlbEJpbmFy
eS5qcyc7CiBpbXBvcnQgKiBhcyBXQVNNIGZyb20gJ1dBU00uanMnOwotCi1jb25zdCBfdG9KYXZh
U2NyaXB0TmFtZSA9IG5hbWUgPT4gewotICAgIGNvbnN0IGNhbWVsQ2FzZSA9IG5hbWUucmVwbGFj
ZSgvKFteYS16MC05XS4pL2csIGMgPT4gY1sxXS50b1VwcGVyQ2FzZSgpKTsKLSAgICBjb25zdCBD
YW1lbENhc2UgPSBjYW1lbENhc2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjYW1lbENhc2Uu
c2xpY2UoMSk7Ci0gICAgcmV0dXJuIENhbWVsQ2FzZTsKLX07CitpbXBvcnQgKiBhcyB1dGlsIGZy
b20gJ3V0aWxpdGllcy5qcyc7CiAKIGNvbnN0IF9pc1ZhbGlkVmFsdWUgPSAodmFsdWUsIHR5cGUp
ID0+IHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTIyNSw3ICsyMjAsNyBAQCBjb25zdCBfaW1w
b3J0R2xvYmFsQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9
PiB7CiAgICAgICAgICAgICBFbmQ6ICgpID0+IG5leHRCdWlsZGVyCiAgICAgICAgIH07CiAgICAg
ICAgIGZvciAobGV0IG9wIG9mIFdBU00uZGVzY3JpcHRpb24udmFsdWVfdHlwZSkgewotICAgICAg
ICAgICAgZ2xvYmFsQnVpbGRlcltfdG9KYXZhU2NyaXB0TmFtZShvcCldID0gKG1vZHVsZSwgZmll
bGQsIG11dGFiaWxpdHkpID0+IHsKKyAgICAgICAgICAgIGdsb2JhbEJ1aWxkZXJbdXRpbC50b0ph
dmFTY3JpcHROYW1lKG9wKV0gPSAobW9kdWxlLCBmaWVsZCwgbXV0YWJpbGl0eSkgPT4gewogICAg
ICAgICAgICAgICAgIGFzc2VydC5pc1N0cmluZyhtb2R1bGUsIGBJbXBvcnQgZ2xvYmFsIG1vZHVs
ZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOwogICAgICAgICAgICAgICAg
IGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEltcG9ydCBnbG9iYWwgZmllbGQgc2hvdWxkIGJlIGEg
c3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOwogICAgICAgICAgICAgICAgIGFzc2VydC5pc1N0cmlu
ZyhtdXRhYmlsaXR5LCBgSW1wb3J0IGdsb2JhbCBtdXRhYmlsaXR5IHNob3VsZCBiZSBhIHN0cmlu
ZywgZ290ICIke211dGFiaWxpdHl9ImApOwpAQCAtMzE4LDcgKzMxMyw3IEBAIGNvbnN0IF9jaGVj
a0ltbXMgPSAob3AsIGltbXMsIGV4cGVjdGVkSW1tcywgcmV0KSA9PiB7CiBjb25zdCBfY3JlYXRl
RnVuY3Rpb25CdWlsZGVyID0gKGZ1bmMsIGJ1aWxkZXIsIHByZXZpb3VzQnVpbGRlcikgPT4gewog
ICAgIGxldCBmdW5jdGlvbkJ1aWxkZXIgPSB7fTsKICAgICBmb3IgKGNvbnN0IG9wIGluIFdBU00u
ZGVzY3JpcHRpb24ub3Bjb2RlKSB7Ci0gICAgICAgIGNvbnN0IG5hbWUgPSBfdG9KYXZhU2NyaXB0
TmFtZShvcCk7CisgICAgICAgIGNvbnN0IG5hbWUgPSB1dGlsLnRvSmF2YVNjcmlwdE5hbWUob3Ap
OwogICAgICAgICBjb25zdCB2YWx1ZSA9IFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlW29wXS52YWx1
ZTsKICAgICAgICAgY29uc3QgcmV0ID0gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbb3BdWyJyZXR1
cm4iXTsKICAgICAgICAgY29uc3QgcGFyYW0gPSBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF0u
cGFyYW1ldGVyOwpAQCAtNTQyLDcgKzUzNyw3IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxk
ZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Owog
ICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBvcCBvZiBXQVNNLmRlc2NyaXB0aW9uLnZhbHVl
X3R5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEJ1aWxkZXJbX3RvSmF2YVNj
cmlwdE5hbWUob3ApXSA9IChpbml0VmFsdWUsIG11dGFiaWxpdHkpID0+IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdsb2JhbEJ1aWxkZXJbdXRpbC50b0phdmFTY3JpcHROYW1lKG9wKV0gPSAo
aW5pdFZhbHVlLCBtdXRhYmlsaXR5KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cy5kYXRhLnB1c2goeyB0eXBlOiBvcCwgb3A6IG9wICsgIi5jb25zdCIsIG11dGFiaWxpdHk6IF9u
b3JtYWxpemVNdXRhYmlsaXR5KG11dGFiaWxpdHkpLCBpbml0VmFsdWUgfSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IoZ2xvYmFsQnVp
bGRlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtL1dBU00uanMgYi9KU1Rlc3RzL3dhc20vV0FTTS5qcwppbmRleCAxYmI3OWI4Li4xZTY0Y2Fl
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vV0FTTS5qcworKysgYi9KU1Rlc3RzL3dhc20vV0FT
TS5qcwpAQCAtNDQsMyArNDQsMzMgQEAgZXhwb3J0IGNvbnN0IGlzVmFsaWRCbG9ja1R5cGUgPSB2
ID0+IF9ibG9ja1R5cGVTZXQuaGFzKHYpOwogZXhwb3J0IGNvbnN0IGV4dGVybmFsS2luZFZhbHVl
ID0gX21hcFZhbHVlcyhkZXNjcmlwdGlvbi5leHRlcm5hbF9raW5kKTsKIGV4cG9ydCBjb25zdCBz
ZWN0aW9ucyA9IE9iamVjdC5rZXlzKGRlc2NyaXB0aW9uLnNlY3Rpb24pOwogZXhwb3J0IGNvbnN0
IHNlY3Rpb25FbmNvZGluZ1R5cGUgPSBkZXNjcmlwdGlvbi5zZWN0aW9uW3NlY3Rpb25zWzBdXS50
eXBlOworCitleHBvcnQgZnVuY3Rpb24qIG9wY29kZXMoY2F0ZWdvcnkgPSB1bmRlZmluZWQpIHsK
KyAgICBmb3IgKGxldCBvcCBpbiBkZXNjcmlwdGlvbi5vcGNvZGUpCisgICAgICAgIGlmIChjYXRl
Z29yeSAhPT0gdW5kZWZpbmVkICYmIGRlc2NyaXB0aW9uLm9wY29kZVtvcF0uY2F0ZWdvcnkgPT09
IGNhdGVnb3J5KQorICAgICAgICAgICAgeWllbGQgeyBuYW1lOiBvcCwgb3Bjb2RlOiBkZXNjcmlw
dGlvbi5vcGNvZGVbb3BdIH07Cit9OworZXhwb3J0IGNvbnN0IG1lbW9yeUFjY2Vzc0luZm8gPSBv
cCA9PiB7CisgICAgLy8gICAgICAgICAgICAgICAgPC0tLS0tLS0tLS0tdmFsdWVUeXBlLS0tLS0t
LS0tLS0+ICA8LS0tLS0tLXR5cGUtLS0tLS0tPjwtLS0tLS0tLS13aWR0aC0tLS0tLS0tPiAgPC0t
c2lnbi0tPgorICAgIGNvbnN0IGNsYXNzaWZ5ID0gLygoPzppMzIpfCg/Omk2NCl8KD86ZjMyKXwo
PzpmNjQpKVwuKCg/OmxvYWQpfCg/OnN0b3JlKSkoKD86OCk/fCg/OjE2KT98KD86MzIpPylfPygo
PzpzfHUpPykvOworICAgIGNvbnN0IGZvdW5kID0gb3AubmFtZS5tYXRjaChjbGFzc2lmeSk7Cisg
ICAgY29uc3QgdmFsdWVUeXBlID0gZm91bmRbMV07CisgICAgY29uc3QgdHlwZSA9IGZvdW5kWzJd
OworICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQoZm91bmRbM10gPyBmb3VuZFszXSA6IHZhbHVl
VHlwZS5zbGljZSgxKSk7CisgICAgY29uc3Qgc2lnbiA9ICgoKSA9PiB7CisgICAgICAgIHN3aXRj
aCAoZm91bmRbNF0pIHsKKyAgICAgICAgY2FzZSAicyI6IHJldHVybiAic2lnbmVkIjsKKyAgICAg
ICAgY2FzZSAidSI6IHJldHVybiAidW5zaWduZWQiOworICAgICAgICBkZWZhdWx0OiByZXR1cm4g
ImFnbm9zdGljIjsKKyAgICAgICAgfQorICAgIH0pKCk7CisgICAgcmV0dXJuIHsgdmFsdWVUeXBl
LCB0eXBlLCB3aWR0aCwgc2lnbiB9OworfTsKKworZXhwb3J0IGNvbnN0IGNvbnN0Rm9yVmFsdWVU
eXBlID0gdmFsdWVUeXBlID0+IHsKKyAgICBmb3IgKGxldCBvcCBpbiBkZXNjcmlwdGlvbi5vcGNv
ZGUpCisgICAgICAgIGlmIChvcC5lbmRzV2l0aCgiLmNvbnN0IikgJiYgZGVzY3JpcHRpb24ub3Bj
b2RlW29wXVsicmV0dXJuIl0gPT0gdmFsdWVUeXBlKQorICAgICAgICAgICAgcmV0dXJuIG9wOwor
ICAgIHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogbm8gY29uc3QgdHlw
ZSBmb3IgJHt2YWx1ZVR5cGV9YCk7Cit9OworCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMgYi9KU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDFhNWYwMwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2Fz
bS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcwpAQCAtMCwwICsxLDEz
MCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CitpbXBvcnQgKiBhcyBh
c3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCAqIGFzIExMQiBmcm9tICcuLi9Mb3dM
ZXZlbEJpbmFyeS5qcyc7CitpbXBvcnQgKiBhcyBXQVNNIGZyb20gJy4uL1dBU00uanMnOworaW1w
b3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsaXRpZXMuanMnOworCitjb25zdCB2ZXJib3NlID0g
ZmFsc2U7CisKK2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0OworY29uc3QgZm91ckdpQiA9IHBh
Z2VTaXplICogNjU1MzY7Citjb25zdCBpbml0aWFsID0gNjQ7Citjb25zdCBtYXhpbXVtID0gMTI4
OworCisvLyBXaGVuIHVzaW5nIGZhc3QgbWVtb3JpZXMsIHdlIGFsbG9jYXRlIGEgcmVkem9uZSBh
ZnRlciB0aGUgNEdpQiBodWdlCisvLyBhbGxvY2F0aW9uLiBUaGlzIHJlZHpvbmUgaXMgdXNlZCB0
byB0cmFwIHJlZytpbW0gYWNjZXNzZXMgd2hpY2ggZXhjZWVkCisvLyAzMi1iaXRzLiBBbnl0aGlu
ZyBwYXN0IDRHaUIgbXVzdCB0cmFwLCBidXQgd2UgY2Fubm90IGtub3cgc3RhdGljYWxseSB0aGF0
IGl0CisvLyB3aWxsLgorCitjb25zdCBvZmZzZXRzID0gWworICAgIDAsCisgICAgMSwKKyAgICAy
LAorICAgIDEwMjQsCisgICAgcGFnZVNpemUsCisgICAgcGFnZVNpemUgKyBwYWdlU2l6ZSAvIDIs
CisgICAgcGFnZVNpemUgKiA4LAorICAgIHBhZ2VTaXplICogMTYsCisgICAgcGFnZVNpemUgKiAx
MjgsCisgICAgcGFnZVNpemUgKiA1MTIsCisgICAgZm91ckdpQiAvIDQgLSA0LAorICAgIGZvdXJH
aUIgLyA0IC0gMywKKyAgICBmb3VyR2lCIC8gNCAtIDIsCisgICAgZm91ckdpQiAvIDQgLSAxLAor
ICAgIGZvdXJHaUIgLyA0LAorICAgIGZvdXJHaUIgLyA0ICsgMSwKKyAgICBmb3VyR2lCIC8gNCAr
IDIsCisgICAgZm91ckdpQiAvIDQgKyAzLAorICAgIGZvdXJHaUIgLyA0ICsgNCwKKyAgICBmb3Vy
R2lCIC8gMiAtIDQsCisgICAgZm91ckdpQiAvIDIgLSAzLAorICAgIGZvdXJHaUIgLyAyIC0gMiwK
KyAgICBmb3VyR2lCIC8gMiAtIDEsCisgICAgZm91ckdpQiAvIDIsCisgICAgZm91ckdpQiAvIDIg
KyAxLAorICAgIGZvdXJHaUIgLyAyICsgMiwKKyAgICBmb3VyR2lCIC8gMiArIDMsCisgICAgZm91
ckdpQiAvIDIgKyA0LAorICAgIChmb3VyR2lCIC8gNCkgKiAzLAorICAgIGZvdXJHaUIgLSA0LAor
ICAgIGZvdXJHaUIgLSAzLAorICAgIGZvdXJHaUIgLSAyLAorICAgIGZvdXJHaUIgLSAxLAorXTsK
KworZm9yIChsZXQgbWVtb3J5RGVjbGFyYXRpb24gb2YgW3sgaW5pdGlhbDogaW5pdGlhbCB9LCB7
IGluaXRpYWw6IGluaXRpYWwsIG1heGltdW06IG1heGltdW0gfV0pIHsKKyAgICBmdWxsR0MoKTsK
KworICAgIC8vIFJlLXVzZSBhIHNpbmdsZSBtZW1vcnkgc28gdGVzdHMgYXJlIG1vcmUgbGlrZWx5
IHRvIGdldCBhIGZhc3QgbWVtb3J5LgorICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJs
eS5NZW1vcnkobWVtb3J5RGVjbGFyYXRpb24pOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBw
cmludChXZWJBc3NlbWJseU1lbW9yeU1vZGUobWVtb3J5KSk7CisgICAgY29uc3QgYnVmID0gbmV3
IFVpbnQ4QXJyYXkobWVtb3J5LmJ1ZmZlcik7CisKKyAgICAvLyBFbnVtZXJhdGUgYWxsIG1lbW9y
eSBhY2Nlc3MgdHlwZXMuCisgICAgZm9yIChjb25zdCBvcCBvZiBXQVNNLm9wY29kZXMoIm1lbW9y
eSIpKSB7CisgICAgICAgIGNvbnN0IGluZm8gPSBXQVNNLm1lbW9yeUFjY2Vzc0luZm8ob3ApOwor
CisgICAgICAgIC8vIFRoZSBhY2Nlc3NlcyBzaG91bGQgZmF1bHQgZXZlbiBpZiBvbmx5IHRoZSBs
YXN0IGJ5dGUgaXMgb2ZmIHRoZSBlbmQuCisgICAgICAgIGxldCB3aWdnbGVzID0gWzBdOworICAg
ICAgICBmb3IgKGxldCB3aWdnbGUgPSAwOyB3aWdnbGUgIT09IGluZm8ud2lkdGggLyA4OyArK3dp
Z2dsZSkKKyAgICAgICAgICAgIHdpZ2dsZXMucHVzaCh3aWdnbGUpOworCisgICAgICAgIGxldCBi
dWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAg
ICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5RGVjbGFyYXRp
b24pLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAgICAgLkV4
cG9ydCgpOworCisgICAgICAgIGZvciAobGV0IG9mZnNldCBvZiBvZmZzZXRzKQorICAgICAgICAg
ICAgc3dpdGNoIChpbmZvLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgImxvYWQiOiBidWlsZGVy
ID0gYnVpbGRlci5GdW5jdGlvbigiZ2V0XyIgKyBvZmZzZXQpOyBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgInN0b3JlIjogYnVpbGRlciA9IGJ1aWxkZXIuRnVuY3Rpb24oInNldF8iICsgb2Zmc2V0
KTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVu
dGF0aW9uIHByb2JsZW06IHVua25vd24gbWVtb3J5IGFjY2VzcyB0eXBlICR7aW5mby50eXBlfWAp
OworICAgICAgICAgICAgfQorCisgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLkVuZCgpLkNvZGUo
KTsKKworICAgICAgICBjb25zdCBhbGlnbiA9IDM7IC8vIE5vIG5lZWQgdG8gYmUgcHJlY2lzZSwg
aXQncyBqdXN0IGEgaGludC4KKyAgICAgICAgY29uc3QgY29uc3RJbnN0ciA9IHV0aWwudG9KYXZh
U2NyaXB0TmFtZShXQVNNLmNvbnN0Rm9yVmFsdWVUeXBlKGluZm8udmFsdWVUeXBlKSk7CisgICAg
ICAgIGNvbnN0IGluc3RyID0gdXRpbC50b0phdmFTY3JpcHROYW1lKG9wLm5hbWUpOworICAgICAg
ICBmb3IgKGxldCBvZmZzZXQgb2Ygb2Zmc2V0cykKKyAgICAgICAgICAgIHN3aXRjaCAoaW5mby50
eXBlKSB7CisgICAgICAgICAgICBjYXNlICJsb2FkIjoKKyAgICAgICAgICAgICAgICBidWlsZGVy
ID0gYnVpbGRlci5GdW5jdGlvbigiZ2V0XyIgKyBvZmZzZXQsIHsgcGFyYW1zOiBbImkzMiJdIH0p
LkdldExvY2FsKDApW2luc3RyXShhbGlnbiwgb2Zmc2V0KS5Ecm9wKCkuRW5kKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJzdG9yZSI6CisgICAgICAgICAgICAg
ICAgYnVpbGRlciA9IGJ1aWxkZXIuRnVuY3Rpb24oInNldF8iICsgb2Zmc2V0LCB7IHBhcmFtczog
WyJpMzIiXSB9KS5HZXRMb2NhbCgwKVtjb25zdEluc3RyXSgweGRlYWQpW2luc3RyXShhbGlnbiwg
b2Zmc2V0KS5FbmQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9i
bGVtOiB1bmtub3duIG1lbW9yeSBhY2Nlc3MgdHlwZSAke2luZm8udHlwZX1gKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLkVuZCgpOworCisgICAg
ICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgeyBpbXA6IHsgbWVtb3J5
OiBtZW1vcnkgfSB9KTsKKworICAgICAgICBmb3IgKGxldCBvZmZzZXQgb2Ygb2Zmc2V0cykgewor
ICAgICAgICAgICAgZm9yIChsZXQgd2lnZ2xlIG9mIHdpZ2dsZXMpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBhZGRyZXNzID0gTExCLnZhcnVpbnQzMk1heCAtIG9mZnNldCAtIHdpZ2dsZTsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCR7
b3AubmFtZS5wYWRTdGFydCgxNiwgJyAnKX06IGJhc2UgYWRkcmVzcyAke2FkZHJlc3MgPiAwID8g
JzB4JyA6ICcgICd9JHthZGRyZXNzLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBhZGRyZXNzID4g
MCA/ICcwJyA6ICcgJyl9ICsgb2Zmc2V0IDB4JHtvZmZzZXQudG9TdHJpbmcoMTYpLnBhZFN0YXJ0
KDgsICcwJyl9IC0gd2lnZ2xlICR7d2lnZ2xlfSA9IGVmZmVjdGl2ZSBhZGRyZXNzIDB4JHsoYWRk
cmVzcyArIG9mZnNldCAtIHdpZ2dsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCAnMCcpfWAp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5mby50eXBlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAibG9hZCI6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW5z
dGFuY2UuZXhwb3J0c1siZ2V0XyIgKyBvZmZzZXRdKGFkZHJlc3MpLCBXZWJBc3NlbWJseS5SdW50
aW1lRXJyb3IsIGBPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3NgKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAic3RvcmUiOgorICAgICAgICAgICAg
ICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHNbInNldF8iICsgb2Zm
c2V0XShhZGRyZXNzKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCBgT3V0IG9mIGJvdW5kcyBt
ZW1vcnkgYWNjZXNzYCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogdW5r
bm93biBtZW1vcnkgYWNjZXNzIHR5cGUgJHtpbmZvLnR5cGV9YCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVsbEdDKCk7CisgICAgfQor
CisgICAgLy8gT25seSBjaGVjayB0aGF0IHRoZSBtZW1vcnkgd2FzIHVudG91Y2hlZCBhdCB0aGUg
dmVyeSBlbmQsIGJlZm9yZSB0aHJvd2luZyBpdCBhd2F5IGVudGlyZWx5LgorICAgIGZvciAobGV0
IGlkeCA9IDA7IGlkeCA8IGJ1Zi5ieXRlTGVuZ3RoOyArK2lkeCkKKyAgICAgICAgYXNzZXJ0LmVx
KGJ1ZltpZHhdLCAwKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0
cy9tZW1vcnktbWFueS5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktbWFu
eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQzYzYyCi0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1tYW55LmpzCkBA
IC0wLDAgKzEsMTggQEAKK2NvbnN0IG1lbW9yaWVzID0gMTI4OworY29uc3QgdmVyYm9zZSA9IGZh
bHNlOworY29uc3QgaW5pdGlhbCA9IDE7CisKK2xldCB0eXBlcyA9IHt9OworCitmb3IgKGxldCBt
ID0gMDsgbSA8IG1lbW9yaWVzOyArK20pIHsKKyAgICBsZXQgbWVtb3J5ID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1lbW9yeSh7IGluaXRpYWw6IGluaXRpYWwgfSk7CisgICAgbGV0IHR5cGUgPSBXZWJBc3Nl
bWJseU1lbW9yeU1vZGUobWVtb3J5KTsKKyAgICB0eXBlc1t0eXBlXSA9IHR5cGVzW3R5cGVdID8g
dHlwZXNbdHlwZV0gKyAxIDogMTsKK30KKworaWYgKHZlcmJvc2UpIHsKKyAgICBsZXQgZ290ID0g
IkdvdDogIjsKKyAgICBmb3IgKGxldCBwIGluIHR5cGVzKQorICAgICAgICBnb3QgKz0gYCAke3R5
cGVzW3BdfTogJHtwfWA7CisgICAgcHJpbnQoZ290KTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktbXVsdGlhZ2VudC5qcyBiL0pTVGVzdHMvd2FzbS9m
dW5jdGlvbi10ZXN0cy9tZW1vcnktbXVsdGlhZ2VudC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40ZWIyZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1tdWx0aWFnZW50LmpzCkBAIC0wLDAgKzEsMTE3IEBACitjb25z
dCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKKworY29uc3QgdmVyYm9zZSA9IGZhbHNlOworCisvLyBT
dGFydCBtdWx0aXBsZSBhZ2VudHMgYW5kIGNyZWF0ZSBXZWJBc3NlbWJseS5NZW1vcnkgZnJvbSBl
YWNoIG9mCisvLyB0aGVtLiBQZXJmb3JtIHdyaXRlcyBpbnRvIGVhY2ggbWVtb3J5LCBhbmQgdGhl
biBjaGVjayB0aGF0IHRoZSBtZW1vcnkgb25seQorLy8gY29udGFpbnMgdGhhdCBhZ2VudCdzIHdy
aXRlcy4gVGhpcyB3b3VsZCBmaW5kIGJ1Z3Mgd2hlcmUgYW4gaW1wbGVtZW50YXRpb24ncworLy8g
bWVtb3J5IHJldXNlIGlzIGJ1Z2d5LgorCisvLyBVc2UgdGhlIGFnZW50IHN1cHBvcnQgZnJvbSB0
ZXN0MjYyOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2IvbWFzdGVyL0lOVEVS
UFJFVElORy5tZCNob3N0LWRlZmluZWQtZnVuY3Rpb25zCisKK2NvbnN0IHRlc3RJdGVyYXRpb25z
ID0gMjsKK2NvbnN0IG51bUFnZW50cyA9IDg7Citjb25zdCBpbml0aWFsUGFnZXMgPSA2NDsKK2Nv
bnN0IG51bVdyaXRlcyA9IDEwMjQ7CisKK2NvbnN0IHN0YXRlV2FpdCA9IDA7Citjb25zdCBzdGF0
ZVJlYWR5ID0gMTsKK2NvbnN0IHN0YXRlQ2hlY2sgPSAyOworCitjb25zdCBzdGFydEFnZW50cyA9
IG51bUFnZW50c1RvU3RhcnQgPT4geworICAgIGZvciAobGV0IGEgPSAwOyBhIDwgbnVtQWdlbnRz
VG9TdGFydDsgKythKSB7CisgICAgICAgIGNvbnN0IGFnZW50U2NyaXB0ID0gYAorICAgICAgICBs
ZXQgc3RhdGUgPSAke3N0YXRlV2FpdH07CisgICAgICAgIGxldCB1ODsKKworICAgICAgICBpZiAo
JHt2ZXJib3NlfSkKKyAgICAgICAgICAgIHByaW50KCJBZ2VudCAke2F9IHN0YXJ0ZWQiKTsKKyAg
ICAgICAgJC5hZ2VudC5yZXBvcnQoIkFnZW50ICR7YX0gc3RhcnRlZCIpOworCisgICAgICAgICQu
YWdlbnQucmVjZWl2ZUJyb2FkY2FzdCgoc2FiLCBuZXdTdGF0ZSkgPT4geworICAgICAgICAgICAg
aWYgKCR7dmVyYm9zZX0pCisgICAgICAgICAgICAgICAgcHJpbnQoIkFnZW50ICR7YX0gcmVjZWl2
ZWQgYnJvYWRjYXN0Iik7CisgICAgICAgICAgICB1OCA9IG5ldyBVaW50OEFycmF5KHNhYik7Cisg
ICAgICAgICAgICBzdGF0ZSA9IG5ld1N0YXRlOworICAgICAgICB9KTsKKworICAgICAgICBjb25z
dCBidXN5V2FpdEZvclZhbHVlID0gdmFsdWUgPT4geworICAgICAgICAgICAgLy8gQnVzeS13YWl0
IHNvIHRoYXQgb25jZSB0aGUgU0FCIHdyaXRlIG9jY3VycyBhbGwgYWdlbnRzIHRyeSB0byBjcmVh
dGUgYSBtZW1vcnkgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIHdoaWxlIChBdG9taWNz
LmxvYWQodTgsIDApICE9PSB2YWx1ZSkgOworICAgICAgICB9OworCisgICAgICAgIGlmICgke3Zl
cmJvc2V9KQorICAgICAgICAgICAgcHJpbnQoIkFnZW50ICR7YX0gd2FpdHMiKTsKKyAgICAgICAg
JC5hZ2VudC5yZXBvcnQoIkFnZW50ICR7YX0gd2FpdHMiKTsKKyAgICAgICAgd2hpbGUgKHN0YXRl
ID09PSAke3N0YXRlV2FpdH0pIDsKKyAgICAgICAgJC5hZ2VudC5yZXBvcnQoIkFnZW50ICR7YX0g
cmVjZWl2ZWQgU0FCIik7CisgICAgICAgIC8vIFVzZSBpdCBmb3IgZmFzdGVyIHN0YXRlIGNoYW5n
ZSBzbyBhbGwgYWdlbnRzIGFyZSBtb3JlIGxpa2VseSB0byBleGVjdXRlIGF0IHRoZSBzYW1lIHRp
bWUuCisgICAgICAgIGJ1c3lXYWl0Rm9yVmFsdWUoJHtzdGF0ZVJlYWR5fSk7CisKKyAgICAgICAg
bGV0IHdhc21NZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogJHtpbml0
aWFsUGFnZXN9IH0pOworICAgICAgICBsZXQgbWVtb3J5ID0gbmV3IFVpbnQ4QXJyYXkoKHdhc21N
ZW1vcnkpLmJ1ZmZlcik7CisgICAgICAgIGlmICgke3ZlcmJvc2V9KQorICAgICAgICAgICAgcHJp
bnQoIkFnZW50ICR7YX0gcGVyZm9ybWluZyB3cml0ZXMiKTsKKyAgICAgICAgZm9yIChsZXQgd3Jp
dGUgPSAwOyB3cml0ZSA8ICR7bnVtV3JpdGVzfTsgKyt3cml0ZSkgeworICAgICAgICAgICAgLy8g
UGVyZm9ybSB3cml0ZXMgb2Ygb3VyIGFnZW50IG51bWJlciBhdCBhIHJhbmRvbSBsb2NhdGlvbi4g
VGhpcyBtZW1vcnkgc2hvdWxkIG5vdCBiZSBzaGFyZWQsIGlmIHdlIHNlZSB3cml0ZXMgb2Ygb3Ro
ZXIgdmFsdWVzIHRoZW4gc29tZXRoaW5nIHdlbnQgd3JvbmcuCisgICAgICAgICAgICBjb25zdCBp
ZHggPSAoTWF0aC5yYW5kb20oKSAqICR7cGFnZVNpemV9ICogJHtpbml0aWFsUGFnZXN9KSB8IDA7
CisgICAgICAgICAgICBtZW1vcnlbaWR4XSA9ICR7YX07CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCR7dmVyYm9zZX0pCisgICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSB3cml0ZXMgcGVyZm9y
bWVkIik7CisgICAgICAgICQuYWdlbnQucmVwb3J0KCJBZ2VudCAke2F9IHBlcmZvcm1lZCB3cml0
ZXMiKTsKKyAgICAgICAgYnVzeVdhaXRGb3JWYWx1ZSgke3N0YXRlQ2hlY2t9KTsKKworICAgICAg
ICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAgICAgIHByaW50KCJBZ2VudCAke2F9IGNoZWNraW5n
Iik7CisgICAgICAgIC8vIENoZWNrIHRoYXQgb3VyIG1lbW9yeSBvbmx5IGNvbnRhaW5zIDAgYW5k
IG91ciBhZ2VudCBudW1iZXIuCisgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8ICR7cGFn
ZVNpemV9ICogJHtpbml0aWFsUGFnZXN9OyArK2lkeCkKKyAgICAgICAgICAgIGlmIChtZW1vcnlb
aWR4XSAhPT0gMCAmJiBtZW1vcnlbaWR4XSAhPT0gJHthfSkKKyAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkFnZW50ICR7YX0gZm91bmQgdW5leHBlY3RlZCB2YWx1ZSAiICsgbWVtb3J5
W2lkeF0gKyAiIGF0IGxvY2F0aW9uICIgKyBpZHgpOworICAgICAgICAkLmFnZW50LnJlcG9ydCgi
QWdlbnQgJHthfSBjaGVja3Mgb3V0IE9LIik7CisgICAgICAgICQuYWdlbnQubGVhdmluZygpOwor
ICAgICAgICBgOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgcHJpbnQoYFN0
YXJ0aW5nIGFnZW50ICR7YX1gKTsKKyAgICAgICAgJC5hZ2VudC5zdGFydChhZ2VudFNjcmlwdCk7
CisgICAgfQorfTsKKworY29uc3Qgd2FpdEZvckFnZW50cyA9IG51bUFnZW50c1RvV2FpdEZvciA9
PiB7CisgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBudW1BZ2VudHNUb1dhaXRGb3I7ICsrYSkgewor
ICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgY29uc3QgcmVwb3J0ID0gJC5hZ2Vu
dC5nZXRSZXBvcnQoKTsKKyAgICAgICAgICAgIGlmIChyZXBvcnQgPT09IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICAkLmFnZW50LnNsZWVwKDEpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
cHJpbnQoYFJlY2VpdmVkOiAke3JlcG9ydH1gKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorfTsKKworY29uc3QgYnJvYWRjYXN0VG9BZ2VudHMgPSAoc2FiLCBuZXdTdGF0
ZSkgPT4geworICAgICQuYWdlbnQuYnJvYWRjYXN0KHNhYiwgbmV3U3RhdGUpOworfTsKKworY29u
c3Qgc2FiID0gbmV3IFNoYXJlZEFycmF5QnVmZmVyKDEwMjQpOworY29uc3QgdTggPSBuZXcgVWlu
dDhBcnJheShzYWIpOworCitmb3IgKGxldCBpdCA9IDA7IGl0IDwgdGVzdEl0ZXJhdGlvbnM7ICsr
aXQpIHsKKyAgICBzdGFydEFnZW50cyhudW1BZ2VudHMpOworICAgIHdhaXRGb3JBZ2VudHMobnVt
QWdlbnRzKTsKKyAgICBicm9hZGNhc3RUb0FnZW50cyhzYWIsIHN0YXRlUmVhZHkpOworICAgIHdh
aXRGb3JBZ2VudHMobnVtQWdlbnRzKTsKKyAgICAkLmFnZW50LnNsZWVwKDEpOworICAgIEF0b21p
Y3Muc3RvcmUodTgsIDAsIHN0YXRlUmVhZHkpOworICAgIHdhaXRGb3JBZ2VudHMobnVtQWdlbnRz
KTsKKyAgICAkLmFnZW50LnNsZWVwKDEpOworICAgIEF0b21pY3Muc3RvcmUodTgsIDAsIHN0YXRl
Q2hlY2spOworICAgIHdhaXRGb3JBZ2VudHMobnVtQWdlbnRzKTsKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgcHJpbnQoIkV2ZXJ5dGluZyB3YXMgZmluZSIpOworICAgICQuYWdlbnQuc2xlZXAo
MSk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL2V4dGVuc2lvbi1NZW1vcnlN
b2RlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcwppbmRl
eCA5MTkxY2VjNC4uNTYwODUyNiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRl
bnNpb24tTWVtb3J5TW9kZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2V4dGVuc2lvbi1N
ZW1vcnlNb2RlLmpzCkBAIC0yLDYgKzIsNyBAQCBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWls
ZGVyLmpzJzsKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOwogCiBjb25z
dCBpdGVyYXRpb25zID0gMzI7Citjb25zdCB2ZXJib3NlID0gZmFsc2U7CiAKIC8vIFRoaXMgQVBJ
IGlzbid0IHBhcnQgb2YgV2ViQXNzZW1ibHkncyBvZmZpY2lhbCBzcGVjLiBJdCBpcyB1c2UgZm9y
IHRlc3Rpbmcgd2l0aGluIHRoZSBzaGVsbC4KIApAQCAtMjEsNiArMjIsOCBAQCBhc3NlcnQudGhy
b3dzKCgpID0+IFdlYkFzc2VtYmx5TWVtb3J5TW9kZShuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2lu
aXRpYWw6IDEsIGVsZQogCiBjb25zdCB2YWxpZGF0ZU1vZGUgPSB3aGF0ID0+IHsKICAgICBjb25z
dCBtb2RlID0gV2ViQXNzZW1ibHlNZW1vcnlNb2RlKHdoYXQpOworICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBwcmludChgICAgICR7bW9kZX1gKTsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBj
YXNlICJTaWduYWxpbmciOgogICAgICAgICBicmVhazsKQEAgLTM5LDYgKzQyLDggQEAgY29uc3Qg
aW5zdGFudGlhdGUgPSBidWlsZGVyID0+IHsKIH07CiAKIChmdW5jdGlvbiB0ZXN0TWVtb3J5Tm9N
YXgoKSB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGB0ZXN0TWVtb3J5Tm9NYXhg
KTsKICAgICBsZXQgbWVtb3JpZXMgPSBbXTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBpdGVy
YXRpb25zOyArK2kpCiAgICAgICAgIG1lbW9yaWVzLnB1c2godmFsaWRhdGVNb2RlKG5ldyBXZWJB
c3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiBpIH0pKSk7CkBAIC00OCw2ICs1Myw4IEBAIGNvbnN0
IGluc3RhbnRpYXRlID0gYnVpbGRlciA9PiB7CiBmdWxsR0MoKTsKIAogKGZ1bmN0aW9uIHRlc3RN
ZW1vcnkoKSB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGB0ZXN0TWVtb3J5YCk7
CiAgICAgbGV0IG1lbW9yaWVzID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0
aW9uczsgKytpKQogICAgICAgICBtZW1vcmllcy5wdXNoKHZhbGlkYXRlTW9kZShuZXcgV2ViQXNz
ZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogaSwgbWF4aW11bTogaSB9KSkpOwpAQCAtNTcsNiArNjQs
OCBAQCBmdWxsR0MoKTsKIGZ1bGxHQygpOwogCiAoZnVuY3Rpb24gdGVzdEluc3RhbmNlTm9NZW1v
cnkoKSB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGB0ZXN0SW5zdGFuY2VOb01l
bW9yeWApOwogICAgIGxldCBpbnN0YW5jZXMgPSBbXTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAh
PSBpdGVyYXRpb25zOyArK2kpIHsKICAgICAgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRl
cigpKQpAQCAtNjYsNiArNzUsOCBAQCBmdWxsR0MoKTsKICAgICAgICAgY29uc3QgaW5zdGFuY2Ug
PSBpbnN0YW50aWF0ZShidWlsZGVyKTsKICAgICAgICAgLy8gTm8tbWVtb3J5IGluc3RhbmNlcyBz
aG91bGQgbmV2ZXIgYmUgU2lnbmFsaW5nOiBpdCB3b3VsZCBiZSB3YXN0ZWZ1bC4KICAgICAgICAg
YXNzZXJ0LmVxKFdlYkFzc2VtYmx5TWVtb3J5TW9kZShpbnN0YW5jZSksICJCb3VuZHNDaGVja2lu
ZyIpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIHByaW50KGAgICAgJHtXZWJB
c3NlbWJseU1lbW9yeU1vZGUoaW5zdGFuY2UpfWApOwogICAgICAgICBpbnN0YW5jZXMucHVzaChp
bnN0YW5jZSk7CiAgICAgfQogICAgIHJldHVybiBpbnN0YW5jZXM7CkBAIC03NCw2ICs4NSw4IEBA
IGZ1bGxHQygpOwogZnVsbEdDKCk7CiAKIChmdW5jdGlvbiB0ZXN0SW5zdGFuY2VOb01heCgpIHsK
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYHRlc3RJbnN0YW5jZU5vTWF4YCk7CiAg
ICAgbGV0IGluc3RhbmNlcyA9IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlv
bnM7ICsraSkgewogICAgICAgICAvLyBOb3RlOiBub3QgZXhwb3J0ZWQhIFRoZSBpbnRlcm5hbCBB
UEkgY2FuIHN0aWxsIGFjY2Vzcy4KQEAgLTg5LDYgKzEwMiw4IEBAIGZ1bGxHQygpOwogZnVsbEdD
KCk7CiAKIChmdW5jdGlvbiB0ZXN0SW5zdGFuY2UoKSB7CisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIHByaW50KGB0ZXN0SW5zdGFuY2VgKTsKICAgICBsZXQgaW5zdGFuY2VzID0gW107CiAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0aW9uczsgKytpKSB7CiAgICAgICAgIC8vIE5vdGU6
IG5vdCBleHBvcnRlZCEgVGhlIGludGVybmFsIEFQSSBjYW4gc3RpbGwgYWNjZXNzLgpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcyBiL0pTVGVzdHMvd2FzbS91dGlsaXRpZXMu
anMKaW5kZXggMTlmOWI0ZS4uYmM2OWFkNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL3V0aWxp
dGllcy5qcworKysgYi9KU1Rlc3RzL3dhc20vdXRpbGl0aWVzLmpzCkBAIC03OSw2ICs3OSwxMiBA
QCBjb25zdCBfZHVtcCA9ICh3aGF0LCBuYW1lLCBwYWQgPSAnICAgICcpID0+IHsKICAgICByZXR1
cm4gczsKIH07CiAKK2V4cG9ydCBjb25zdCB0b0phdmFTY3JpcHROYW1lID0gbmFtZSA9PiB7Cisg
ICAgY29uc3QgY2FtZWxDYXNlID0gbmFtZS5yZXBsYWNlKC8oW15hLXowLTldLikvZywgYyA9PiBj
WzFdLnRvVXBwZXJDYXNlKCkpOworICAgIGNvbnN0IENhbWVsQ2FzZSA9IGNhbWVsQ2FzZS5jaGFy
QXQoMCkudG9VcHBlckNhc2UoKSArIGNhbWVsQ2FzZS5zbGljZSgxKTsKKyAgICByZXR1cm4gQ2Ft
ZWxDYXNlOworfTsKKwogLy8gVXNlIHVuZGVyc2NvcmUgbmFtZXMgdG8gYXZvaWQgY2xhc2hpbmcg
d2l0aCBidWlsdGluIG5hbWVzLgogZXhwb3J0IHsKICAgICBfZHVtcCBhcyBkdW1wLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMGY3ZjM1NS4uOWNjMWJhMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQ4IEBACisyMDE3LTA0LTExICBKRiBCYXN0aWVuICA8amZiYXN0
aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogbWFuYWdlIG1lbW9yeSBiZXR0
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDYy
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkFz
c2VtYmx5IGZhc3QgbWVtb3JpZXMgd2VyZW4ndCBtYW5hZ2VkIHZlcnkgd2VsbC4gVGhpcyBwYXRj
aAorICAgICAgICByZWZhY3RvcnMgaXQgYW5kIHB1dHMgdXMgaW4gYSBnb29kIHBvc2l0aW9uIHRv
IGZ1cnRoZXIgaW1wcm92ZSBvdXIKKyAgICAgICAgZmFzdCBtZW1vcnkgaGFuZGxpbmcgaW4gdGhl
IGZ1dHVyZS4KKworICAgICAgICBXZSBub3cgY2FjaGUgZmFzdCBtZW1vcmllcyBhdCBhIHByb2Nl
c3MgZ3JhbnVsYXJpdHksIGJ1dCBtYWtlIHN1cmUKKyAgICAgICAgdGhhdCB0aGV5IGRvbid0IGNv
bnN1bWUgZGlydHkgcGFnZXMuIFdlIGFkZCBhIGNhcCB0byB0aGUgdG90YWwKKyAgICAgICAgbnVt
YmVyIG9mIGFsbG9jYXRlZCBmYXN0IG1lbW9yaWVzIHRvIGF2b2lkIEFTTFIgZGVncmFkYXRpb24u
CisKKyAgICAgICAgV2UgdGVhY2ggdGhlIEdDIGFib3V0IG1lbW9yaWVzIGFzIGEga2luZCBvZiBy
ZXNvdXJjZSBpdCBzaG91bGQKKyAgICAgICAgY2FyZSBhYm91dCBiZWNhdXNlIGl0IGRpZG4ndCBo
YXZlIHZpc2liaWxpdHkgaW50byB0aGUgYW1vdW50IG9mCisgICAgICAgIG1lbW9yeSBlYWNoIHJl
cHJlc2VudGVkLiBUaGlzIGFsbG93cyBiZW5jaG1hcmtzIHdoaWNoIGFsbG9jYXRlCisgICAgICAg
IG1lbW9yaWVzIGJhY2stdG8tYmFjayB0byByZWxpYWJseSBnZXQgZmFzdCBtZW1vcmllcyAxMDAl
IG9mIHRoZQorICAgICAgICB0aW1lLCBldmVuIG9uIGEgc3lzdGVtIHVuZGVyIGxvYWQsIHdoaWNo
IHdhc24ndCB0aGUgY2FzZQorICAgICAgICBiZWZvcmUuIFRoaXMgcmVsaWFiaWxpdHkgeWllbGRz
IHJvdWdobHkgOCUgcGVyZiBidW1wIG9uIHg4Ni02NAorICAgICAgICBXYXNtQmVuY2guCisKKyAg
ICAgICAgVGhlIEdDIGhldXJpc3RpYyBpcyBhcyBmb2xsb3dzOiBlYWNoIHRpbWUgd2UgYWxsb2Nh
dGUgYSBmYXN0CisgICAgICAgIG1lbW9yeSB3ZSBub3RpZnkgdGhlIEdDLCB3aGljaCB0aGVuIGtl
ZXBzIHRyYWNrIG9mIHRoZSB0b3RhbAorICAgICAgICBudW1iZXIgb2YgZmFzdCBtZW1vcmllcyBh
bGxvY2F0ZWQgc2luY2UgaXQgbGFzdCBHQydkLiBXZQorICAgICAgICBzZXBhcmF0ZWx5IGtlZXAg
dHJhY2sgb2YgdGhlIHRvdGFsIG51bWJlciBvZiBmYXN0IG1lbW9yaWVzIHdoaWNoCisgICAgICAg
IGhhdmUgZXZlciBleGlzdGVkIGF0IGFueSBwb2ludCBpbiB0aW1lIChjYWNoZWQgKyBhbGxvY2F0
ZWQpLiBUaGlzCisgICAgICAgIGlzIGEgbW9ub3RvbmljYWxseS1pbmNyZWFzaW5nIGhpZ2ggd2F0
ZXJtYXJrLiBUaGUgR0Mgd2lsbCBmb3JjZSBhCisgICAgICAgIGZ1bGwgY29sbGVjdGlvbiBpZiwg
c2luY2UgaXQgbGFzdCByYW4sIGhhbGYgb3IgbW9yZSBvZiB0aGUgaGlnaAorICAgICAgICB3YXRl
cm1hcmsgb2YgZmFzdCBtZW1vcmllcyB3YXMgYWxsb2NhdGVkLgorCisgICAgICAgIEF0IHRoZSBz
YW1lIHRpbWUsIGlmIHdlIGZhaWwgb2J0YWluaW5nIGEgZmFzdCBtZW1vcnkgZnJvbSB0aGUKKyAg
ICAgICAgY2FjaGUgd2UgZG8gYSBHQyB0byB0cnkgdG8gZmluZCBvbmUuIElmIHRoYXQgZmFpbHMg
d2UnbGwgYWxsb2NhdGUKKyAgICAgICAgYSBuZXcgb25lICh0aGlzIGNhbiBhbHNvIGZhaWwsIHRo
ZW4gd2UgZ28gdG8gc2xvdyBtZW1vcnkpLiBUaGlzCisgICAgICAgIGNhbiBhbHNvIGJlIGltcHJv
dmVkLCBidXQgaXQncyBhIGdvb2Qgc3RhcnQuCisKKyAgICAgICAgVGhpcyBjdXJyZW50bHkgZGlz
YWJsZXMgZmFzdCBtZW1vcmllcyBvbiBpT1MgYmVjYXVzZSBnZXR0aW5nIGZhc3QKKyAgICAgICAg
bWVtb3JpZXMgaXNuJ3QgYSBndWFyYW50ZWVkIHRoaW5nLiBSYXRoZXIsIHdlIGdldCBxdWl0ZSBh
IGZldyBvZgorICAgICAgICB0aGVtIGFuZCBhY2hpZXZlIHNpZ25pZmljYW50IHNwZWVkdXBzLCBi
dXQgYmVuY2htYXJrcyB3aGljaAorICAgICAgICBhbGxvY2F0ZSBtZW1vcmllcyBiYWNrLXRvLWJh
Y2sgZW5kIHVwIGZhbGxpbmcgYmVoaW5kIGJlY2F1c2UgdGhlCisgICAgICAgIEdDIGNhbiBjb25z
ZXJ2YXRpdmVseSBob2xkIG9udG8gbWVtb3JpZXMsIHdoaWNoIHRoZW4geWllbGRzIGEgcGVyZgor
ICAgICAgICBjbGlmZi4gVGhhdCBjbGlmZiBpc24ndCByZWxpYWJsZSwgV2FzbUJlbmNoIGdldHMg
cm91Z2hseSAxMCBvZiAxOAorICAgICAgICBmYXN0IG1lbW9yaWVzIHdoZW4gaW4gdGhlb3J5IGl0
IHNob3VsZCBnZXQgYWxsIG9mIHRoZW0gZmFzdCAoYXMKKyAgICAgICAgTWFjT1MgZG9lcykuIFRo
ZSBwYXRjaCBzaWduaWZpY2FudGx5IGltcHJvdmVzIHRoZSBzdGF0ZSBvZiBpT1MKKyAgICAgICAg
dGhvdWdoLCBhbmQgaW4gYSBmb2xsb3ctdXAgd2UgY291bGQgcmUtZW5hYmxlIGZhc3QgbWVtb3Jp
ZXMuCisKKyAgICAgICAgUGFydCBvZiB0aGlzIGdvb2QgcG9zaXRpb25pbmcgaXMgYSBmYWNpbGl0
eSB0byBwcmUtYWxsb2NhdGUgZmFzdAorICAgICAgICBtZW1vcmllcyB2ZXJ5IGVhcmx5IGF0IHN0
YXJ0dXAsIGJlZm9yZSBhbnkgZnJhZ21lbnRhdGlvbgorICAgICAgICBvY2N1cnMuIFRoaXMgaXMg
Y3VycmVudGx5IGRpc2FibGVkIGJ1dCB3b3JrZWQgZXh0cmVtZWx5IHJlbGlhYmx5CisgICAgICAg
IG9uIGlPUy4gT25jZSB3ZSBmaXggdGhlIGFib3ZlIGlzc3VlcyB3ZSdsbCB3YW50IHRvIHJlLXZp
c2l0IGFuZAorICAgICAgICB0dXJuIG9uIHByZS1hbGxvY2F0aW9uLgorCisgICAgICAgIFdlIGFs
c28gYXZvaWQgbG9ja2luZyBmb3IgZmFzdCBtZW1vcnkgaWRlbnRpZmljYXRpb24gd2hlbgorICAg
ICAgICBwZXJmb3JtaW5nIHNpZ25hbCBoYW5kbGluZy4gSSdtIHZlcnkgbmVydm91cyBhYm91dCBh
Y3F1aXJpbmcgbG9ja3MKKyAgICAgICAgaW4gYSBzaWduYWwgaGFuZGxlciBiZWNhdXNlIGluIGdl
bmVyYWwgc2lnbmFscyBzaG91bGQgaGFwcGVuIHdoZW4KKyAgICAgICAgd2UndmUgbWVzc2VkIHVw
LiBUaGlzIGlzbid0IHRoZSBjYXNlIHdpdGggZmFzdCBtZW1vcmllczogd2UncmUKKyAgICAgICAg
cmFpc2luZyBhIHNpZ25hbCBvbiBwdXJwb3NlIGFuZCBoYW5kbGluZyBpdC4gSG93ZXZlciB0aGlz
IHdoaWNoCisgICAgICAgIGRvZXNuJ3QgbWVhbiB3ZSB3b24ndCBtZXNzIHVwIGVsc2V3aGVyZSEg
VGhpcyB3aWxsIGdldCBtb3JlCisgICAgICAgIGNvbXBsaWNhdGVkIG9uY2Ugd2UgYWRkIHN1cHBv
cnQgZm9yIG11bHRpcGxlIHRocmVhZHMgc2hhcmluZworICAgICAgICBtZW1vcmllcyBhbmQgYmVp
bmcgYWJsZSB0byBncm93IHRoZWlyIG1lbW9yaWVzLiBPbmUgZXhhbXBsZTogdGhlCisgICAgICAg
IGNvZGUgY2FsbHMgQ1JBU0goKSwgd2hpY2ggZXhlY3V0ZXMgdGhlIGZvbGxvd2luZyBjb2RlIGlu
IHJlbGVhc2U6CisKKyAgICAgICAgICAgICooaW50ICopKHVpbnRwdHJfdCkweGJiYWRiZWVmID0g
MDsKKworICAgICAgICBUaGlzIGlzIGEgc2VnZmF1bHQsIHdoaWNoIG91ciBmYXN0IG1lbW9yeSBz
aWduYWwgaGFuZGxlciB0cmllcyB0bworICAgICAgICBoYW5kbGUuIEl0IGRvZXMgc28gYnkgZmly
c3QgZmlndXJpbmcgb3V0IHdoZXRoZXIgMHhiYmFkYmVlZiBpcyBpbgorICAgICAgICBhIGZhc3Qg
bWVtb3J5IHJlZ2lvbiwgcmVxaXJpbmcgYSBsb2NrLiBJZiB3ZSBDUkFTSCgpIHdoaWxlIGhvbGRp
bmcKKyAgICAgICAgdGhlIGxvY2sgdGhlbiBvdXIgdGhyZWFkIHNlbGYtZGVhZGxvY2tzLCBnaXZp
bmcgdXMgbm8gY3Jhc2ggcmVwb3J0CisgICAgICAgIGFuZCBhIGJhZCB1c2VyIGV4cGVyaWVuY2Uu
CisKKyAgICAgICAgQXZvaWRpbmcgYSBsb2NrIHRoZXJlZm9yZSBpdCdzIG5vdCBhYm91dCBzcGVl
ZCBvciByZWR1Y2VkCisgICAgICAgIGNvbnRlbnRpb24uIEluIGZhY3QsIEknZCB1c2Ugc29tZXRo
aW5nIGVsc2UgdGhhbiBhIEZJRk8gaWYgdGhlc2UKKyAgICAgICAgd2VyZSBhIGNvbmNlcm4uIFdl
J3JlIGFsc28gZG9pbmcgc3lzY2FsbHMsIHdoaWNoIGR3YXJmIGFueSBsb2NraW5nCisgICAgICAg
IGNvc3QuCisKKyAgICAgICAgV2Ugbm93IG9ubHkgYWxsb2NhdGUgNEdpQiArIHJlZHpvbmUgb2Yg
NjRrICogMTI4IGZvciBmYXN0IG1lbW9yaWVzCisgICAgICAgIGluc3RlYWQgb2YgOEdpQi4gVGhp
cyBwYXRjaCByZXVzZXMgdGhlIGxvZ2ljIGZyb20KKyAgICAgICAgQjM6Oldhc21Cb3VuZHNDaGVj
ayB0byBwZXJmb3JtIGJvdW5kcyBjaGVja3Mgd2hlbiBhY2Nlc3NlcyBjb3VsZAorICAgICAgICBl
eGNlZWQgdGhlIHJlZHpvbmUuIFdlJ2xsIHRoZXJlZm9yZSBiZW5lZml0IGZyb20gQ1NFIGdvb2Ru
ZXNzIHdoZW4KKyAgICAgICAgaXQgcmVhY2hlcyBXYXNtQm91bmRzQ2hlY2suIFNlZSBidWcgIzE2
MzQ2OS4KKworICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6IGZpeCBhIGJhYWFhZGRkIGJ1
ZyB3aGVyZSB1bnNpZ25lZC0+c2lnbmVkCisgICAgICAgIGNvbnZlcnNpb24gYWxsb3dlZCBvdXQt
b2YtYm91bmRzIHJlYWRzIGJ5IC0yR2lCLiBJJ2xsIGZvbGxvdy11cCBpbgorICAgICAgICBidWcg
IzE3MDY5MiB0byBwcmV2ZW50IHRoaXMgdHlwZSBvZiBidWcgb25jZSBhbmQgZm9yIGFsbC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL0Iz
VmFsaWRhdGUuY3BwOiB1cGRhdGUgV2FzbUJvdW5kc0NoZWNrIHZhbGlkYXRpb24uCisgICAgICAg
ICogYjMvQjNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6ZWZmZWN0cyk6IHVw
ZGF0ZSBXYXNtQm91bmRzQ2hlY2sgZWZmZWN0cy4KKyAgICAgICAgKiBiMy9CM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6Oldhc21Cb3VuZHNDaGVja1ZhbHVlOjpX
YXNtQm91bmRzQ2hlY2tWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpXYXNtQm91bmRzQ2hlY2tW
YWx1ZTo6cmVkem9uZUxpbWl0KToKKyAgICAgICAgKEpTQzo6QjM6Oldhc21Cb3VuZHNDaGVja1Zh
bHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOgor
ICAgICAgICAoSlNDOjpCMzo6V2FzbUJvdW5kc0NoZWNrVmFsdWU6Om1heGltdW0pOgorICAgICAg
ICAqIGIzL2Fpci9BaXJDdXN0b20uY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpXYXNtQm91
bmRzQ2hlY2tDdXN0b206OmlzVmFsaWRGb3JtKToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdFdhc21Cb3VuZHNDaGVjayk6CisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6
OnJlcG9ydFdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6d2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCk6CisgICAg
ICAgIChKU0M6OkhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1pdHMpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpkaWRBbGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6c2hvdWxkRG9GdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAq
IHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxp
emVUaHJlYWRpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBv
aW50ZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0TG9hZE9wKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vV2Fz
bUZhdWx0U2lnbmFsSGFuZGxlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyYXBIYW5kbGVy
KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOiBSZXdyaXRlLgorICAgICAgICAoSlND
OjpXYXNtOjptYWtlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojppbml0aWFs
aXplUHJlYWxsb2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmNyZWF0ZUlt
cGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeTo6fk1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6ZmFz
dE1hcHBlZFJlZHpvbmVCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6ZmFzdE1h
cHBlZEJ5dGVzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjptYXhGYXN0TWVtb3J5Q291
bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1l
bW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisgICAgICAgICogd2Fz
bS9XYXNtTWVtb3J5Lmg6CisgICAgICAgIChNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCk6Cisg
ICAgICAgIChNZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSk6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpnbG9iYWxNZW1vcnlCeXRlU2l6ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1v
cnkuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKToKKwogMjAxNy0wNC0wNyAg
WXVpY2hpcm8gS2lrdXJhICA8eS5raWt1cmFAZ21haWwuY29tPgogCiAgICAgICAgIFdlYkdQVTog
aW1wbGVtZW50IENvbXB1dGVDb21tYW5kRW5jb2RlciBhbmQgcmVsYXRlZCBjb21wb25lbnRzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDgyMGQ0YzEuLjVi
YTVhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0z
MTQ0LDIyICszMTQ0LDQ2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEIz
OjpXYXNtQm91bmRzQ2hlY2s6IHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgICAg
ICBXYXNtQm91bmRzQ2hlY2tWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5hczxXYXNtQm91bmRzQ2hl
Y2tWYWx1ZT4oKTsKIAogICAgICAgICAgICAgVmFsdWUqIHB0ciA9IHZhbHVlLT5jaGlsZCgwKTsK
IAotICAgICAgICAgICAgQXJnIHRlbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKLSAgICAgICAgICAg
IGFwcGVuZChJbnN0KE1vdmUzMiwgdmFsdWUsIHRtcChwdHIpLCB0ZW1wKSk7CisgICAgICAgICAg
ICBBcmcgcHRyUGx1c0ltbSA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAgYXBwZW5k
KEluc3QoTW92ZTMyLCB2YWx1ZSwgdG1wKHB0ciksIHB0clBsdXNJbW0pKTsKICAgICAgICAgICAg
IGlmICh2YWx1ZS0+b2Zmc2V0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaW1tKHZhbHVlLT5v
ZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tKHZhbHVlLT5v
ZmZzZXQoKSksIHRlbXApOworICAgICAgICAgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIGltbSh2
YWx1ZS0+b2Zmc2V0KCkpLCBwdHJQbHVzSW1tKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgQXJnIGJpZ0ltbSA9IG1fY29kZS5uZXdUbXAoR1ApOwogICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUtPm9mZnNldCgpKSwg
YmlnSW1tKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKEFkZDY0LCBiaWdJbW0sIHRlbXAp
OworICAgICAgICAgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIGJpZ0ltbSwgcHRyUGx1c0ltbSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kKElu
c3QoQWlyOjpXYXNtQm91bmRzQ2hlY2ssIHZhbHVlLCB0ZW1wLCBBcmcodmFsdWUtPnBpbm5lZEdQ
UigpKSkpOworCisgICAgICAgICAgICBBcmcgbGltaXQ7CisgICAgICAgICAgICBpZiAodmFsdWUt
PnBpbm5lZEdQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgbGltaXQgPSBB
cmcodmFsdWUtPnBpbm5lZEdQUigpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIFNpZ25hbGluZyBtZW1vcmllcyBkb24ndCBwaW4gYSByZWdpc3RlciBiZWNhdXNlIG9u
bHkgdGhlIGFjY2Vzc2VzIHdob3NlIHJlZytpbW0gY291bGQgZXZlciBvdmVyZmxvdyA0R2lCK3Jl
ZHpvbmUgbmVlZCB0byBiZSBjaGVja2VkLAorICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBkb24n
dCB0aGluayB0aGVzZSB3aWxsIGJlIGZyZXF1ZW50LiBBbGwgb3RoZXIgYWNjZXNzZXMgd2lsbCB0
cmFwIGR1ZSB0byBQUk9UX05PTkUgcGFnZXMuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSBnb3QgaGVyZSBpdCdzIGJlY2F1c2UgYSBtZW1vcnkgYWNjZXNzIGhh
ZCBhIHZlcnkgbGFyZ2Ugb2Zmc2V0LiBXZSBjb3VsZCBjaGVjayB0aGF0IGl0IGRvZXNuJ3QgZXhj
ZWVkIDRHaUIrcmVkem9uZSBzaW5jZSB0aGF0J3MKKyAgICAgICAgICAgICAgICAvLyB0ZWNobmlj
YWxseSB0aGUgbGltaXQgd2UgbmVlZCB0byBhdm9pZCBvdmVyZmxvd2luZywgYnV0IGl0J3MgYmV0
dGVyIGlmIHdlIHVzZSBhIHNtYWxsZXIgaW1tZWRpYXRlIHdoaWNoIGNvZGVnZW5zIG1vcmUgZWFz
aWx5LgorICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCBhbnl0aGluZyBhYm92ZSB0aGUg
ZGVjbGFyZWQgJ21heGltdW0nIHdpbGwgdHJhcCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0
aGF0IG51bWJlci4gSWYgdGhlcmUgd2FzIG5vIGRlY2xhcmVkCisgICAgICAgICAgICAgICAgLy8g
J21heGltdW0nIHRoZW4gd2Ugc3RpbGwga25vdyB0aGF0IGFueSBhY2Nlc3MgYWJvdmUgNEdpQiB3
aWxsIHRyYXAsIG5vIG5lZWQgdG8gYWRkIHRoZSByZWR6b25lLgorICAgICAgICAgICAgICAgIGxp
bWl0ID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICAgICAgc2l6ZV90IGxpbWl0VmFs
dWUgPSB2YWx1ZS0+bWF4aW11bSgpID8gdmFsdWUtPm1heGltdW0oKS5ieXRlcygpIDogc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChs
aW1pdFZhbHVlIDw9IHZhbHVlLT5yZWR6b25lTGltaXQoKSk7CisgICAgICAgICAgICAgICAgaWYg
KGltbShsaW1pdFZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGltbShs
aW1pdFZhbHVlKSwgbGltaXQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKGxpbWl0VmFsdWUpLCBsaW1pdCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQoSW5zdChBaXI6Oldhc21Cb3VuZHNDaGVjaywg
dmFsdWUsIHB0clBsdXNJbW0sIGxpbWl0KSk7CisjZWxzZQorICAgICAgICAgICAgYXBwZW5kKEFp
cjo6T29wcyk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcApp
bmRleCA2ZTZhOTNkLi5jYzNhNTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuY3BwCkBAIC00NzAsNyArNDcwLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElE
QVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwg
KnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBl
KCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUo
bV9wcm9jZWR1cmUuY29kZSgpLmlzUGlubmVkKHZhbHVlLT5hczxXYXNtQm91bmRzQ2hlY2tWYWx1
ZT4oKS0+cGlubmVkR1BSKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCktPnBpbm5lZEdQUigpICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKG1fcHJvY2VkdXJlLmNvZGUo
KS5pc1Bpbm5lZCh2YWx1ZS0+YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCktPnBpbm5lZEdQUigp
KSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURShtX3Byb2NlZHVy
ZS5jb2RlKCkud2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKCksICgiQXQgIiwgKnZhbHVlKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFVwc2lsb246CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKaW5kZXggOGM5MTBhYS4uNjViMTdlMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIkIz
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleUlubGluZXMuaCIKICNpbmNsdWRl
ICJCM1ZhcmlhYmxlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgi
CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtNjY0LDcgKzY2NSw4IEBA
IEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgICAgICByZXN1bHQgPSBFZmZlY3Rz
Ojpmb3JDaGVjaygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc21Cb3VuZHNDaGVjazoK
LSAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKGFzPFdhc21C
b3VuZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LmV4aXRzU2lk
ZXdheXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFVwc2lsb246CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAKaW5k
ZXggYjNhMzI5MC4uOGFlY2MxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIApAQCAtMzQsMTAgKzM1LDExIEBA
IFdhc21Cb3VuZHNDaGVja1ZhbHVlOjp+V2FzbUJvdW5kc0NoZWNrVmFsdWUoKQogewogfQogCi1X
YXNtQm91bmRzQ2hlY2tWYWx1ZTo6V2FzbUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHB0ciwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQgb2Zmc2V0KQorV2FzbUJvdW5k
c0NoZWNrVmFsdWU6Oldhc21Cb3VuZHNDaGVja1ZhbHVlKE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBw
dHIsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkIG9mZnNldCwgUGFnZUNvdW50IG1heGltdW0p
CiAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBXYXNtQm91bmRzQ2hlY2ssIG9yaWdpbiwgcHRy
KQogICAgICwgbV9waW5uZWRHUFIocGlubmVkR1BSKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQor
ICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiB7CiB9CiAKQEAgLTQ2LDkgKzQ4LDIyIEBAIFZhbHVl
KiBXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3
IFdhc21Cb3VuZHNDaGVja1ZhbHVlKCp0aGlzKTsKIH0KIAorc2l6ZV90IFdhc21Cb3VuZHNDaGVj
a1ZhbHVlOjpyZWR6b25lTGltaXQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3Bpbm5lZEdQUiA9
PSBJbnZhbGlkR1BSUmVnKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkp
ICsgV2FzbTo6TWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCk7CisjZWxzZQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogdm9pZCBXYXNtQm91bmRz
Q2hlY2tWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoY29tbWEsICJzaXplUmVnaXN0ZXIgPSAiLCBtX3Bp
bm5lZEdQUiwgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworICAgIGlmIChtX3Bpbm5lZEdQUiA9
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyZWR6b25lTGltaXQg
PSAiLCByZWR6b25lTGltaXQoKSwgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworICAgIGVsc2UK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic2l6ZVJlZ2lzdGVyID0gIiwgbV9waW5uZWRHUFIs
ICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aAppbmRleCBjY2M1NGI4Li4xMTBlNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNs
dWRlICJCM1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2Fz
bVBhZ2VDb3VudC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIApAQCAtNDYs
OCArNDcsMTYgQEAgcHVibGljOgogICAgIAogICAgIH5XYXNtQm91bmRzQ2hlY2tWYWx1ZSgpOwog
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHR5cGVkZWYgV2FzbTo6UGFnZUNvdW50IFBh
Z2VDb3VudDsKKyNlbHNlCisgICAgdHlwZWRlZiBjaGFyIFBhZ2VDb3VudDsKKyNlbmRpZgorCiAg
ICAgR1BSUmVnIHBpbm5lZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fcGlubmVkR1BSOyB9CiAgICAg
dW5zaWduZWQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBzaXplX3Qg
cmVkem9uZUxpbWl0KCkgY29uc3Q7CisgICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJl
dHVybiBtX21heGltdW07IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQ
cmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKQEAgLTU3LDEwICs2NiwxMSBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBXYXNtQm91bmRzQ2hlY2tWYWx1ZShPcmlnaW4sIFZhbHVlKiBw
dHIsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgV2FzbUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcgcGlu
bmVkR1BSLCB1bnNpZ25lZCBvZmZzZXQsIFBhZ2VDb3VudCBtYXhpbXVtKTsKIAogICAgIEdQUlJl
ZyBtX3Bpbm5lZEdQUjsKICAgICB1bnNpZ25lZCBtX29mZnNldDsKKyAgICBQYWdlQ291bnQgbV9t
YXhpbXVtOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKaW5kZXggN2VlN2YzYy4uNDljYTU0YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcApAQCAtMTg1LDcgKzE4NSw3
IEBAIGJvb2wgV2FzbUJvdW5kc0NoZWNrQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQog
ICAgIGlmICghaW5zdC5hcmdzWzBdLmlzVG1wKCkgJiYgIWluc3QuYXJnc1swXS5pc1NvbWVJbW0o
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGluc3QuYXJnc1sxXS5pc1Jl
ZygpOworICAgIHJldHVybiBpbnN0LmFyZ3NbMV0uaXNSZWcoKSB8fCBpbnN0LmFyZ3NbMV0uaXNU
bXAoKSB8fCBpbnN0LmFyZ3NbMV0uaXNTb21lSW1tKCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAppbmRleCAwMTk5NmFmLi5hNmY2OTFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcApAQCAtMTUxODUsNyArMTUxODUsOCBAQCB2b2lkIHRlc3RXYXNtQm91bmRz
Q2hlY2sodW5zaWduZWQgb2Zmc2V0KQogICAgIFZhbHVlKiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogICAgIGlmIChwb2ludGVyVHlwZSgpICE9IEludDMyKQogICAgICAgICBsZWZ0ID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGxlZnQpOwotICAgIHJvb3Qt
PmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxlZnQsIHBp
bm5lZCwgb2Zmc2V0KTsKKyAgICBXYXNtOjpQYWdlQ291bnQgbWF4aW11bTsKKyAgICByb290LT5h
cHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsZWZ0LCBwaW5u
ZWQsIG9mZnNldCwgbWF4aW11bSk7CiAgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAweDQyKTsKICAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCAzYWVlMzAxLi5lYzMxZWMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIlR5cGVQ
cm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
Vk0uaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2Vha1NldElubGluZXMu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBA
IC0yNTAsNiArMjUxLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQog
ICAgICwgbV9zaXplQWZ0ZXJMYXN0RWRlbkNvbGxlY3QoMCkKICAgICAsIG1fc2l6ZUJlZm9yZUxh
c3RFZGVuQ29sbGVjdCgwKQogICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSgwKQorICAg
ICwgbV93ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSgwKQogICAgICwg
bV9ieXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0KDApCiAgICAgLCBtX21heEVkZW5T
aXplKG1fbWluQnl0ZXNQZXJDeWNsZSkKICAgICAsIG1fbWF4SGVhcFNpemUobV9taW5CeXRlc1Bl
ckN5Y2xlKQpAQCAtNDY2LDYgKzQ2OCwyMyBAQCB2b2lkIEhlYXA6OmRlcHJlY2F0ZWRSZXBvcnRF
eHRyYU1lbW9yeVNsb3dDYXNlKHNpemVfdCBzaXplKQogICAgIHJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkU2xvd0Nhc2Uoc2l6ZSk7CiB9CiAKK3ZvaWQgSGVhcDo6cmVwb3J0V2ViQXNzZW1ibHlG
YXN0TWVtb3JpZXNBbGxvY2F0ZWQoc2l6ZV90IGNvdW50KQoreworICAgIGRpZEFsbG9jYXRlV2Vi
QXNzZW1ibHlGYXN0TWVtb3JpZXMoY291bnQpOworICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVm
ZXIoKTsKK30KKworYm9vbCBIZWFwOjp3ZWJBc3NlbWJseUZhc3RNZW1vcmllc1RoaXNDeWNsZUF0
VGhyZXNob2xkKCkgY29uc3QKK3sKKyAgICAvLyBXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIHVz
ZSBsYXJnZSBhbW91bnRzIG9mIHZpcnR1YWwgbWVtb3J5IGFuZCB3ZQorICAgIC8vIGRvbid0IGtu
b3cgaG93IG1hbnkgY2FuIGV4aXN0IGluIHRoaXMgcHJvY2Vzcy4gV2Uga2VlcCB0cmFjayBvZiB0
aGUgbW9zdAorICAgIC8vIGZhc3QgbWVtb3JpZXMgdGhhdCBoYXZlIGV4aXN0ZWQgYXQgYW55IHBv
aW50IGluIHRpbWUuIFRoZSBHQyB1c2VzIHRoaXMKKyAgICAvLyB0b3Agd2F0ZXJtYXJrIGFzIGFu
IGluZGljYXRpb24gb2Ygd2hldGhlciByZWNlbnQgYWxsb2NhdGlvbnMgc2hvdWxkIGNhdXNlCisg
ICAgLy8gYSBjb2xsZWN0aW9uOiBnZXQgdG9vIGNsb3NlIGFuZCB3ZSBtYXkgYmUgY2xvc2UgdG8g
dGhlIGFjdHVhbCBsaW1pdC4KKyAgICBzaXplX3QgZmFzdE1lbW9yeVRocmVzaG9sZCA9IHN0ZDo6
bWF4PHNpemVfdD4oMSwgV2FzbTo6TWVtb3J5OjptYXhGYXN0TWVtb3J5Q291bnQoKSAvIDIpOwor
ICAgIHJldHVybiBtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlID4g
ZmFzdE1lbW9yeVRocmVzaG9sZDsKK30KKwogdm9pZCBIZWFwOjpyZXBvcnRBYmFuZG9uZWRPYmpl
Y3RHcmFwaCgpCiB7CiAgICAgLy8gT3VyIGNsaWVudHMgZG9uJ3Qga25vdyBleGFjdGx5IGhvdyBt
dWNoIG1lbW9yeSB0aGV5CkBAIC0yMTAzLDYgKzIxMjIsNyBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFs
bG9jYXRpb25MaW1pdHMoKQogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIlxu
Iik7CiAgICAgICAgIGRhdGFMb2coImJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gIiwgbV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIndlYkFzc2VtYmx5
RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gIiwgbV93ZWJBc3NlbWJseUZhc3RNZW1v
cmllc0FsbG9jYXRlZFRoaXNDeWNsZSwgIlxuIik7CiAgICAgfQogICAgIAogICAgIC8vIENhbGN1
bGF0ZSBvdXIgY3VycmVudCBoZWFwIHNpemUgdGhyZXNob2xkIGZvciB0aGUgcHVycG9zZSBvZiBm
aWd1cmluZyBvdXQgd2hlbiB3ZSBzaG91bGQKQEAgLTIxODAsNiArMjIwMCw3IEBAIHZvaWQgSGVh
cDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRh
dGFMb2coInNpemVBZnRlckxhc3RDb2xsZWN0ID0gIiwgbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCwg
IlxuIik7CiAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9IDA7CisgICAgbV93ZWJBc3Nl
bWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSA9IDA7CiAKICAgICBpZiAoT3B0aW9u
czo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiPT4gIiwgY3VycmVudEhlYXBTaXplIC8gMTAy
NCwgImtiLCAiKTsKQEAgLTIyNTMsNiArMjI3NCwxMSBAQCB2b2lkIEhlYXA6OmRpZEFsbG9jYXRl
KHNpemVfdCBieXRlcykKICAgICBwZXJmb3JtSW5jcmVtZW50KGJ5dGVzKTsKIH0KIAordm9pZCBI
ZWFwOjpkaWRBbGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzKHNpemVfdCBjb3VudCkKK3sK
KyAgICBtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlICs9IGNvdW50
OworfQorCiBib29sIEhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKHNpemVfdCkKIHsKICAgICBpZiAo
IWlzVmFsaWRUaHJlYWRTdGF0ZShtX3ZtKSkKQEAgLTIzMDUsNyArMjMzMSw3IEBAIGJvb2wgSGVh
cDo6c2hvdWxkRG9GdWxsQ29sbGVjdGlvbihzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4g
c2NvcGUpIGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKCFzY29wZSkKLSAg
ICAgICAgcmV0dXJuIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlvbjsKKyAgICAgICAgcmV0dXJuIG1f
c2hvdWxkRG9GdWxsQ29sbGVjdGlvbiB8fCB3ZWJBc3NlbWJseUZhc3RNZW1vcmllc1RoaXNDeWNs
ZUF0VGhyZXNob2xkKCk7CiAgICAgcmV0dXJuICpzY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1
bGw7CiB9CiAKQEAgLTI0NTYsNyArMjQ4Miw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdElmTmVjZXNz
YXJ5T3JEZWZlcihHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogICAgICAgICBp
ZiAobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA8PSBPcHRpb25zOjpnY01heEhlYXBTaXplKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGUgPD0gbV9tYXhFZGVuU2l6ZSkKKyAgICAgICAgaWYgKCF3ZWJBc3Nl
bWJseUZhc3RNZW1vcmllc1RoaXNDeWNsZUF0VGhyZXNob2xkKCkKKyAgICAgICAgICAgICYmIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPD0gbV9tYXhFZGVuU2l6ZSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCBkMDY1NzAxLi40
YjE1OWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC0xOTgsNiArMTk4LDE3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90
KTsKIAorICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBmb3IgdW5jb21taXR0ZWQgdmlydHVhbCBt
ZW1vcnkgYWxsb2NhdGlvbnMgY2F1c2VkIGJ5CisgICAgLy8gV2ViQXNzZW1ibHkgZmFzdCBtZW1v
cmllcy4gVGhpcyBpcyBjb3VudGVkIHNlcGFyYXRlbHkgYmVjYXVzZSB2aXJ0dWFsCisgICAgLy8g
bWVtb3J5IGlzIGxvZ2ljYWxseSBhIGRpZmZlcmVudCB0eXBlIG9mIHJlc291cmNlIHRoYW4gY29t
bWl0dGVkIHBoeXNpY2FsCisgICAgLy8gbWVtb3J5LiBXZSBjYW4gb2Z0ZW4gYWxsb2NhdGUgaHVn
ZSBhbW91bnRzIG9mIHZpcnR1YWwgbWVtb3J5ICh0aGluaworICAgIC8vIGdpZ2FieXRlcykgd2l0
aG91dCBhZHZlcnNlbHkgYWZmZWN0aW5nIHJlZ3VsYXIgR0MnZCBtZW1vcnkuIEF0IHNvbWUgcG9p
bnQKKyAgICAvLyB0aG91Z2gsIHRvbyBtdWNoIHZpcnR1YWwgbWVtb3J5IGJlY29tZXMgcHJvaGli
aXRpdmUgYW5kIHdlIHdhbnQgdG8KKyAgICAvLyBjb2xsZWN0IEdDLWFibGUgb2JqZWN0cyB3aGlj
aCBrZWVwIHRoaXMgdmlydHVhbCBtZW1vcnkgYWxpdmUuCisgICAgLy8gVGhpcyBpcyBjb3VudGVk
IGluIG51bWJlciBvZiBmYXN0IG1lbW9yaWVzLCBub3QgYnl0ZXMuCisgICAgdm9pZCByZXBvcnRX
ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZChzaXplX3QpOworICAgIGJvb2wgd2ViQXNz
ZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCgpIGNvbnN0OworCiAjaWYgRU5B
QkxFKFJFU09VUkNFX1VTQUdFKQogICAgIC8vIFVzZSB0aGlzIEFQSSB0byByZXBvcnQgdGhlIHN1
YnNldCBvZiBleHRyYSBtZW1vcnkgdGhhdCBsaXZlcyBvdXRzaWRlIHRoaXMgcHJvY2Vzcy4KICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXpl
X3QpOwpAQCAtMjQ3LDYgKzI1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZUFsbFVubGlu
a2VkQ29kZUJsb2NrcyhEZWxldGVBbGxDb2RlRWZmb3J0KTsKIAogICAgIHZvaWQgZGlkQWxsb2Nh
dGUoc2l6ZV90KTsKKyAgICB2b2lkIGRpZEFsbG9jYXRlV2ViQXNzZW1ibHlGYXN0TWVtb3JpZXMo
c2l6ZV90KTsKICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKICAgICAKICAg
ICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKCkgeyByZXR1cm4gKm1f
aml0U3R1YlJvdXRpbmVzOyB9CkBAIC01MjUsNiArNTM3LDcgQEAgcHJpdmF0ZToKICAgICBzaXpl
X3QgbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0OwogCiAgICAgc2l6ZV90IG1fYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGU7CisgICAgc2l6ZV90IG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGU7CiAgICAgc2l6ZV90IG1fYnl0ZXNBYmFuZG9uZWRTaW5jZUxhc3RGdWxs
Q29sbGVjdDsKICAgICBzaXplX3QgbV9tYXhFZGVuU2l6ZTsKICAgICBzaXplX3QgbV9tYXhIZWFw
U2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxp
emVUaHJlYWRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAKaW5kZXggYmU2YjZmMS4uN2M4NWExMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKKyNpbmNsdWRl
ICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogI2luY2x1ZGUgIldyaXRl
QmFycmllci5oIgogI2luY2x1ZGUgPG11dGV4PgpAQCAtNTgsNiArNTksOSBAQCB2b2lkIGluaXRp
YWxpemVUaHJlYWRpbmcoKQogICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVUaHJlYWRpbmdP
bmNlRmxhZywgW117CiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgICAg
ICBPcHRpb25zOjppbml0aWFsaXplKCk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAg
ICBXYXNtOjpNZW1vcnk6OmluaXRpYWxpemVQcmVhbGxvY2F0aW9ucygpOworI2VuZGlmCiAjaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgICAgICBXcml0ZUJhcnJpZXJDb3Vu
dGVyczo6aW5pdGlhbGl6ZSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCmluZGV4IGRjYzk0NmQuLjZhYmNmNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC01OSw2ICs1OSwxNSBAQCBib29sIHJlc3RyaWN0
ZWRPcHRpb25zRW5hYmxlZCA9IGZhbHNlOwogI2Vsc2UKIGJvb2wgcmVzdHJpY3RlZE9wdGlvbnNF
bmFibGVkID0gdHJ1ZTsKICNlbmRpZgorCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNJT1MoKQorewor
I2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCit9CiB9CiAKIHZvaWQgT3B0aW9uczo6ZW5hYmxlUmVzdHJpY3RlZE9wdGlv
bnMoYm9vbCBlbmFibGVPck5vdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAppbmRleCA2MGNhYWUwLi4yYTM0Y2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCkBAIC00MzcsOSArNDM3LDExIEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9u
U3RyaW5nOwogICAgIHYoc2l6ZSwgd2ViQXNzZW1ibHlQYXJ0aWFsQ29tcGlsZUxpbWl0LCA1MDAw
LCBOb3JtYWwsICJMaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGEgV2FzbTo6UGxhbjo6Y29t
cGlsZSBzaG91bGQgYXR0ZW1wdCBiZWZvcmUgY2hlY2tpbmcgZm9yIG90aGVyIHdvcmsuIikgXAog
ICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5QjNPcHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6
ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBX
ZWIgQXNzZW1ibHkgbW9kdWxlcy4iKSBcCiAgICAgXAotICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJB
c3NlbWJseUxvd01lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2Jq
ZWN0IHdvbid0IG1tYXAgdGhlIGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwg
YWxsb2NhdGUgdGhlIG1pbmltdW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKLSAgICB2KGJvb2wsIHVz
ZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0
cnkgdG8gdXNlIGEgMzItYml0IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRv
IGJvdW5kcyBjaGVjayB3YXNtIG1lbW9yeS4iKSBcCisgICAgLyogRklYTUU6IGVuYWJsZSBmYXN0
IG1lbW9yaWVzIG9uIGlPUyBhbmQgcHJlLWFsbG9jYXRlIHRoZW0uIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NzQgKi8gXAorICAgIHYoYm9vbCwgdXNlV2ViQXNz
ZW1ibHlGYXN0TWVtb3J5LCAhaXNJT1MoKSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkg
dG8gdXNlIGEgMzItYml0IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJv
dW5kcyBjaGVjayB3YXNtIG1lbW9yeS4iKSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlG
YXN0TWVtb3J5UmVkem9uZVBhZ2VzLCAxMjgsIE5vcm1hbCwgIldlYkFzc2VtYmx5IGZhc3QgbWVt
b3JpZXMgdXNlIDRHaUIgdmlydHVhbCBhbGxvY2F0aW9ucywgcGx1cyBhIHJlZHpvbmUgKGNvdW50
ZWQgYXMgbXVsdGlwbGUgb2YgNjRLaUIgV2ViQXNzZW1ibHkgcGFnZXMpIGF0IHRoZSBlbmQgdG8g
Y2F0Y2ggcmVnK2ltbSBhY2Nlc3NlcyB3aGljaCBleGNlZWQgMzItYml0LCBhbnl0aGluZyBiZXlv
bmQgdGhlIHJlZHpvbmUgaXMgZXhwbGljaXRseSBib3VuZHMtY2hlY2tlZCIpIFwKICAgICB2KGJv
b2wsIGNyYXNoSWZXZWJBc3NlbWJseUNhbnRGYXN0TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYg
dHJ1ZSwgd2Ugd2lsbCBjcmFzaCBpZiB3ZSBjYW4ndCBvYnRhaW4gZmFzdCBtZW1vcnkgZm9yIHdh
c20uIikgXAorICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVByZWFsbG9jYXRl
Q291bnQsIDAsIE5vcm1hbCwgIldlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgY2FuIGJlIHByZS1h
bGxvY2F0ZWQgYXQgcHJvZ3JhbSBzdGFydHVwIGFuZCByZW1haW4gY2FjaGVkIHRvIGF2b2lkIGZy
YWdtZW50YXRpb24gbGVhZGluZyB0byBib3VuZHMtY2hlY2tlZCBtZW1vcnkuIFRoaXMgbnVtYmVy
IGlzIGFuIHVwcGVyIGJvdW5kIG9uIGluaXRpYWwgYWxsb2NhdGlvbiBhcyB3ZWxsIGFzIHRvdGFs
IGNvdW50IG9mIGZhc3QgbWVtb3JpZXMuIFplcm8gbWVhbnMgbm8gcHJlLWFsbG9jYXRpb24sIG5v
IGNhY2hpbmcsIGFuZCBubyBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIHJ1bnRpbWUgYWxsb2NhdGlv
bnMuIikgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0VExTLCB0cnVlLCBOb3JtYWws
ICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJlYWQtbG9jYWwgc3RvcmFnZSBp
ZiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikKIAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggODgyZDFjNy4u
MTdlMWNmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcApAQCAtMjI3LDYgKzIyNyw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVtaXRD
aGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCk7CiAKKyAgICB2b2lkIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVz
c2lvblR5cGUmLCB1aW50MzJfdCYpOworCiAgICAgVmFsdWUqIG1hdGVyaWFsaXplV2FzbUNvbnRl
eHQoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOwogICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0
KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVzdG9yZVdlYkFz
c2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFu
Y2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKQEAgLTI0OCw2ICsyNTAsMTUgQEAgcHJpdmF0
ZToKICAgICBWYWx1ZSogbV9pbnN0YW5jZVZhbHVlOyAvLyBGSVhNRTogbWFrZSB0aGlzIGxhenkg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTc5MgogfTsKIAorLy8g
TWVtb3J5IGFjY2Vzc2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNl
dHMsIHdoZXJlYXMgdGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK3ZvaWQg
QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRy
LCB1aW50MzJfdCYgb2Zmc2V0KQoreworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zm
c2V0KSA+IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKSkpIHsKKyAgICAgICAgcHRyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBwdHIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0
ID0gMDsKKyAgICB9Cit9CisKIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjptYXRlcmlhbGl6ZVdhc21D
b250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgaWYgKHVz
ZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKQEAgLTMzMSw3ICszNDIsMTYgQEAgQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUKICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdh
c21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlu
bmVkR1BSLCB1bnNpZ25lZCkgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5u
ZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgc3dpdGNo
IChtX21vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6
CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQ
UiA9PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChw
aW5uZWRHUFIsIEludmFsaWRHUFJSZWcgPT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91
dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNTE3LDEwICs1
MzcsMjAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVy
YXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
dWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJU
KG1fbWVtb3J5QmFzZUdQUik7Ci0gICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZykgeworICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpC
b3VuZHNDaGVja2luZzoKKyAgICAgICAgLy8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGlu
ZyBhdCBhbGwsIHdlIG11c3QgdGhlcmVmb3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBl
eGNlZWRzIHRoZSBjdXJyZW50IG1lbW9yeSBzaXplLgogICAgICAgICBBU1NFUlQobV9tZW1vcnlT
aXplR1BSKTsKICAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNl
dCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3Bl
cmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5
U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSwgbV9pbmZvLm1lbW9yeS5tYXhp
bXVtKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoK
KyAgICAgICAgLy8gV2UndmUgdmlydHVhbGx5IG1hcHBlZCA0R2lCK3JlZHpvbmUgZm8gdGhpcyBt
ZW1vcnkuIE9ubHkgdGhlIHVzZXItYWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJsZSwgY29u
dGlndW91c2x5IGluIHJhbmdlIFswLCBjdXJyZW50XSwgYW5kIGV2ZXJ5dGhpbmcgYWJvdmUgaXMg
bWFwcGVkIFBST1RfTk9ORS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBleHBsaWNpdCBi
b3VuZHMgY2hlY2sgaW4gdGhlIDRHaUIgcmFuZ2UgYmVjYXVzZSBXZWJBc3NlbWJseSByZWdpc3Rl
ciBtZW1vcnkgYWNjZXNzZXMgYXJlIDMyLWJpdC4gSG93ZXZlciBXZWJBc3NlbWJseSByZWdpc3Rl
citpbW1lZGlhdGUgYWNjZXNzZXMgcGVyZm9ybSB0aGUgYWRkaXRpb24gaW4gNjQtYml0IHdoaWNo
IGNhbiBwdXNoIGFuIGFjY2VzcyBhYm92ZSB0aGUgMzItYml0IGxpbWl0LiBUaGUgcmVkem9uZSB3
aWxsIGNhdGNoIG1vc3Qgc21hbGwgaW1tZWRpYXRlcywgYW5kIHdlJ2xsIGV4cGxpY2l0bHkgYm91
bmRzIGNoZWNrIGFueSByZWdpc3RlciArIGxhcmdlIGltbWVkaWF0ZSBhY2Nlc3MuCisgICAgICAg
IGlmIChvZmZzZXQgPj0gTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkpCisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBwb2ludGVyLCBJbnZhbGlkR1BSUmVnLCBzaXplT2ZPcGVyYXRpb24gKyBv
ZmZzZXQgLSAxLCBtX2luZm8ubWVtb3J5Lm1heGltdW0oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgcG9pbnRlciA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgcG9pbnRlcik7CiAg
ICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUFkZHJlc3NWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlCYXNlR1BSKTsKQEAgLTU2MCw2ICs1OTAs
OCBAQCBpbmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2Rl
IG1lbW9yeU9wKQogCiBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9h
ZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KQogewor
ICAgIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgb2Zmc2V0KTsKKwogICAgIHN3aXRj
aCAob3ApIHsKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzogewogICAgICAgICByZXR1
cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlL
aW5kKExvYWQ4UyksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwpAQCAtNjk3LDYgKzcyOSw4
IEBAIGlubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBlIG9wKQogCiBpbmxp
bmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkK
IHsKKyAgICBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIG9mZnNldCk7CisKICAgICBz
d2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgogICAgICAgICB2
YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9y
aWdpbigpLCB2YWx1ZSk7CkBAIC0xMjUzLDYgKzEyODcsMTIgQEAgc3RhdGljIHZvaWQgY3JlYXRl
SlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBX
YXNtSW4KIAogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBv
aW50Q2FsbCA9IGppdC5jYWxsKCk7CiAKKyAgICBpZiAoISFpbmZvLm1lbW9yeSkgeworICAgICAg
ICAvLyBSZXNldHRpbmcgdGhlIHJlZ2lzdGVyIHByZXZlbnRzIHRoZSBHQyBmcm9tIG1pc3Rha2Vu
bHkgdGhpbmtpbmcgdGhhdCB0aGUgY29udGV4dCBpcyBzdGlsbCBsaXZlLgorICAgICAgICBHUFJS
ZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBiYXNlTWVtb3J5KTsKKyAgICB9
CisKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0
ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3By
KCk7CiAgICAgICAgIEFTU0VSVChyZWcgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmNwcAppbmRleCA2N2JiNTdkLi5kMzU1ZTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApAQCAtNjgsMTUgKzY4LDcg
QEAgc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZv
LCB2b2lkKiB1Y29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgdm9pZCogZmF1bHRpbmdB
ZGRyZXNzID0gc2lnSW5mby0+c2lfYWRkcjsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJjaGVja2luZyBmYXVsdGluZyBhZGRyZXNzOiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nQWRk
cmVzcyksICIgaXMgaW4gYW4gYWN0aXZlIGZhc3QgbWVtb3J5Iik7Ci0gICAgICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtZW1vcnlMb2NrKTsKLSAgICAgICAgICAgIGF1dG8mIGFjdGl2ZUZhc3RN
ZW1vcmllcyA9IHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKTsKLSAgICAgICAgICAgIGZv
ciAodm9pZCogYWN0aXZlTWVtb3J5IDogYWN0aXZlRmFzdE1lbW9yaWVzKSB7Ci0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImNoZWNraW5nIGZhc3QgbWVtb3J5IGF0OiAiLCBS
YXdQb2ludGVyKGFjdGl2ZU1lbW9yeSkpOwotICAgICAgICAgICAgICAgIGlmIChhY3RpdmVNZW1v
cnkgPD0gZmF1bHRpbmdBZGRyZXNzICYmIGZhdWx0aW5nQWRkcmVzcyA8IHN0YXRpY19jYXN0PGNo
YXIqPihhY3RpdmVNZW1vcnkpICsgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBmYXVsdGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gV2FzbTo6TWVtb3J5OjphZGRyZXNzSXNJ
bkFjdGl2ZUZhc3RNZW1vcnkoZmF1bHRpbmdBZGRyZXNzKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoZmF1bHRlZEluQWN0aXZlRmFzdE1lbW9yeSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgImZvdW5kIGFjdGl2ZSBmYXN0IG1lbW9yeSBmb3IgZmF1bHRpbmcgYWRkcmVzcyIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCA3ZWYzZDRm
Li4zNzk4ZDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApA
QCAtMjksMTQ5ICsyOSwyOTcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRl
ICJWTS5oIgotI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKICNpbmNsdWRlICJX
YXNtVGh1bmtzLmgiCiAKLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8YXRv
bWljPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL1ZNVGFncy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCisvLyBG
SVhNRTogV2UgY291bGQgYmUgc21hcnRlciBhYm91dCBtZW1zZXQgLyBtbWFwIC8gbWFkdmlzZS4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM0MworLy8gRklYTUU6
IEdpdmUgdXAgc29tZSBvZiB0aGUgY2FjaGVkIGZhc3QgbWVtb3JpZXMgaWYgdGhlIEdDIGRldGVy
bWluZXMgaXQncyBlYXN5IHRvIGdldCB0aGVtIGJhY2ssIGFuZCB0aGV5IGhhdmVuJ3QgYmVlbiB1
c2VkIGluIGEgd2hpbGUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzA3NzMKKworCiBuYW1lc3BhY2UgewotY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Citjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK05FVkVSX0lOTElORSBOT19SRVRVUk5fRFVF
X1RPX0NSQVNIIHZvaWQgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpIHsgQ1JBU0go
KTsgfQorTkVWRVJfSU5MSU5FIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3ZWJBc3NlbWJs
eUNvdWxkbnRVbm1hcE1lbW9yeUJ5dGVzKCkgeyBDUkFTSCgpOyB9CitORVZFUl9JTkxJTkUgTk9f
UkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRudFVucHJvdGVjdE1lbW9y
eSgpIHsgQ1JBU0goKTsgfQorCit2b2lkKiBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzKQoreworI2lm
IE9TKERBUldJTikKKyAgICBpbnQgZmQgPSBWTV9UQUdfRk9SX1dFQkFTU0VNQkxZX01FTU9SWTsK
KyNlbHNlCisgICAgaW50IGZkID0gLTE7CisjZW5kaWYKKworICAgIHZvaWQqIGxvY2F0aW9uID0g
bW1hcChudWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCBm
ZCwgMCk7CisgICAgcmV0dXJuIGxvY2F0aW9uID09IE1BUF9GQUlMRUQgPyBudWxscHRyIDogbG9j
YXRpb247CiB9CiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2
b2lkIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKQordm9pZCBtdW5tYXBCeXRlcyh2
b2lkKiBtZW1vcnksIHNpemVfdCBzaXplKQogewotICAgIENSQVNIKCk7CisgICAgaWYgKFVOTElL
RUxZKG11bm1hcChtZW1vcnksIHNpemUpKSkKKyAgICAgICAgd2ViQXNzZW1ibHlDb3VsZG50VW5t
YXBNZW1vcnlCeXRlcygpOwogfQogCi1pbmxpbmUgYm9vbCBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVz
LCB2b2lkKiYgbWVtb3J5KQordm9pZCB6ZXJvQW5kVW5wcm90ZWN0Qnl0ZXModm9pZCogc3RhcnQs
IHNpemVfdCBieXRlcykKIHsKLSAgICBkYXRhTG9nSWYodmVyYm9zZSwgIkF0dGVtcHRpbmcgdG8g
bW1hcCAiLCBieXRlcywgIiBieXRlczogIik7Ci0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5p
Y2UgaWYgd2UgaGFkIGEgVk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzYwMAotICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobnVs
bHB0ciwgYnl0ZXMsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwot
ICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYnl0ZXMpIHsK
KyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlplcm9pbmcgYW5kIHVucHJvdGVjdGluZyAi
LCBieXRlcywgIiBmcm9tICIsIFJhd1BvaW50ZXIoc3RhcnQpKTsKKyAgICAgICAgLy8gRklYTUU6
IFdlIGNvdWxkIGJlIHNtYXJ0ZXIgYWJvdXQgbWVtc2V0IC8gbW1hcCAvIG1hZHZpc2UuIEhlcmUs
IHdlIG1heSBub3QgbmVlZCB0byBhY3Qgc3luY2hyb25vdXNseSwgb3IgbWF5YmUgd2UgY2FuIG1l
bXNldCt1bnByb3RlY3Qgc21hbGxlciByYW5nZXMgb2YgbWVtb3J5ICh3aGljaCB3b3VsZCBwYXkg
b2ZmIGlmIG5vdCBhbGwgdGhlIHdyaXRhYmxlIG1lbW9yeSB3YXMgYWN0dWFsbHkgcGh5c2ljYWxs
eSBiYWNrZWQ6IG1lbXNldCBmb3JjZXMgcGh5c2ljYWwgYmFja2luZyBvbmx5IHRvIHVucHJvdGVj
dCBpdCByaWdodCBhZnRlcikuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzAzNDMKKyAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCBieXRlcyk7CisgICAgICAgIGlmIChV
TkxJS0VMWShtcHJvdGVjdChzdGFydCwgYnl0ZXMsIFBST1RfTk9ORSkpKQorICAgICAgICAgICAg
d2ViQXNzZW1ibHlDb3VsZG50VW5wcm90ZWN0TWVtb3J5KCk7CiAgICAgfQotICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJzdWNjZWVkZWQiKTsKLSAgICBtZW1vcnkgPSByZXN1bHQ7Ci0gICAgcmV0
dXJuIHRydWU7CiB9CiAKLWNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQor
Ly8gQWxsb2NhdGUgZmFzdCBtZW1vcmllcyB2ZXJ5IGVhcmx5IGF0IHByb2dyYW0gc3RhcnR1cCBh
bmQgY2FjaGUgdGhlbS4gVGhlIGZhc3QgbWVtb3JpZXMgdXNlIHNpZ25pZmljYW50IGFtb3VudHMg
b2YgdmlydHVhbCB1bmNvbW1pdHRlZCBhZGRyZXNzIHNwYWNlLCByZWR1Y2luZyB0aGUgbGlrZWxp
aG9vZCB0aGF0IHdlJ2xsIG9idGFpbiBhbnkgaWYgd2Ugd2FpdCB0byBhbGxvY2F0ZSB0aGVtLgor
Ly8gV2Ugc3RpbGwgdHJ5IHRvIGFsbG9jYXRlIGZhc3QgbWVtb3JpZXMgYXQgcnVudGltZSwgYW5k
IHdpbGwgY2FjaGUgdGhlbSB3aGVuIHJlbGlucXVpc2hlZCB1cCB0byB0aGUgcHJlYWxsb2NhdGlv
biBsaW1pdC4KKy8vIE5vdGUgdGhhdCB0aGlzIHN0YXRlIGlzIHBlci1wcm9jZXNzLCBub3QgcGVy
LVZNLgorLy8gV2UgdXNlIHNpbXBsZSBzdGF0aWMgZ2xvYmFscyB3aGljaCBkb24ndCBhbGxvY2F0
ZSB0byBhdm9pZCBlYXJseSBmcmFnbWVudGF0aW9uIGFuZCB0byBrZWVwIG1hbmFnZW1lbnQgdG8g
dGhlIGJhcmUgbWluaW11bS4gV2UgYXZvaWQgbG9ja2luZyBiZWNhdXNlIGZhc3QgbWVtb3JpZXMg
dXNlIHNlZ2ZhdWx0IHNpZ25hbCBoYW5kbGluZyB0byBoYW5kbGUgb3V0LW9mLWJvdW5kcyBhY2Nl
c3Nlcy4gVGhpcyByZXF1aXJlcyBpZGVudGlmeWluZyBpZiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBp
cyBpbiBhIGZhc3QgbWVtb3J5IHJhbmdlLCB3aGljaCBzaG91bGQgYXZvaWQgYWNxdWlyaW5nIGEg
bG9jayBsZXN0IHRoZSBhY3R1YWwgc2lnbmFsIHdhcyBjYXVzZWQgYnkgdGhpcyB2ZXJ5IGNvZGUg
d2hpbGUgaXQgYWxyZWFkeSBoZWxkIHRoZSBsb2NrLgorLy8gU3BlZWQgYW5kIGNvbnRlbnRpb24g
ZG9uJ3QgcmVhbGx5IG1hdHRlciBoZXJlLCBidXQgc2ltcGxpY2l0eSBkb2VzLiBXZSB0aGVyZWZv
cmUgdXNlIHN0cmFpZ2h0Zm9yd2FyZCBGSUZPcyBmb3Igb3VyIGNhY2hlLCBhbmQgbGluZWFyIHRy
YXZlcnNhbCBmb3IgdGhlIGxpc3Qgb2YgY3VycmVudGx5IGFjdGl2ZSBmYXN0IG1lbW9yaWVzLgor
Y29uc3RleHByIHNpemVfdCBmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQgeyAxNiB9OworY29uc3Rl
eHByIHNpemVfdCBmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1pdCB7IDMyIH07IC8vIFByZXZl
bnRzIGZpbGxpbmcgdXAgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KK3N0YXRpY19hc3NlcnQo
ZmFzdE1lbW9yeUFsbG9jYXRpb25Tb2Z0TGltaXQgPj0gZmFzdE1lbW9yeUNhY2hlSGFyZExpbWl0
LCAiVGhlIGNhY2hlIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIHdl
J2xsIGV2ZXIgYWxsb2NhdGUiKTsKK3NpemVfdCBmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCB7
IDAgfTsKK3N0ZDo6YXRvbWljPHZvaWQqPiBmYXN0TWVtb3J5Q2FjaGVbZmFzdE1lbW9yeUNhY2hl
SGFyZExpbWl0XSA9IHsgQVRPTUlDX1ZBUl9JTklUKG51bGxwdHIpIH07CitzdGQ6OmF0b21pYzx2
b2lkKj4gY3VycmVudGx5QWN0aXZlRmFzdE1lbW9yaWVzW2Zhc3RNZW1vcnlBbGxvY2F0aW9uU29m
dExpbWl0XSA9IHsgQVRPTUlDX1ZBUl9JTklUKG51bGxwdHIpIH07CitzdGQ6OmF0b21pYzxzaXpl
X3Q+IGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcyA9IEFUT01JQ19WQVJfSU5JVCgwKTsK
K3N0ZDo6YXRvbWljPHNpemVfdD4gb2JzZXJ2ZWRNYXhpbXVtRmFzdE1lbW9yeSA9IEFUT01JQ19W
QVJfSU5JVCgwKTsKKwordm9pZCogdHJ5R2V0Q2FjaGVkRmFzdE1lbW9yeSgpCiB7Ci0gICAgc3dp
dGNoIChtb2RlKSB7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogcmV0dXJu
ICJCb3VuZHNDaGVja2luZyI7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHJldHVy
biAiU2lnbmFsaW5nIjsKLSAgICBjYXNlIE1lbW9yeU1vZGU6Ok51bWJlck9mTWVtb3J5TW9kZXM6
IGJyZWFrOworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwgZmFzdE1lbW9yeVByZWFs
bG9jYXRlQ291bnQ7ICsraWR4KSB7CisgICAgICAgIGlmICh2b2lkKiBwcmV2aW91cyA9IGZhc3RN
ZW1vcnlDYWNoZVtpZHhdLmV4Y2hhbmdlKG51bGxwdHIsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9y
ZWwpKQorICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwogICAgIH0KLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEZhc3RNZW1vcmllcyA9IDQ7Ci1zdGF0aWMg
dW5zaWduZWQgYWxsb2NhdGVkRmFzdE1lbW9yaWVzIHsgMCB9OwotU3RhdGljTG9jayBtZW1vcnlM
b2NrOwotaW5saW5lIERlcXVlPHZvaWQqLCBtYXhGYXN0TWVtb3JpZXM+JiBhdmFpbGFibGVGYXN0
TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RMb2NrZXImKQorYm9vbCB0cnlBZGRUb0NhY2hlZEZhc3RN
ZW1vcnkodm9pZCogbWVtb3J5KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEZXF1ZTx2
b2lkKiwgbWF4RmFzdE1lbW9yaWVzPj4gYXZhaWxhYmxlRmFzdE1lbW9yaWVzOwotICAgIHJldHVy
biBhdmFpbGFibGVGYXN0TWVtb3JpZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZh
c3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50OyArK2kpIHsKKyAgICAgICAgdm9pZCogZXhwZWN0ZWQg
PSBudWxscHRyOworICAgICAgICBpZiAoZmFzdE1lbW9yeUNhY2hlW2ldLmNvbXBhcmVfZXhjaGFu
Z2Vfc3Ryb25nKGV4cGVjdGVkLCBtZW1vcnksIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKSB7
CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiQ2FjaGVkIGZhc3QgbWVtb3J5ICIs
IFJhd1BvaW50ZXIobWVtb3J5KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBIYXNoU2V0PHZvaWQqPiYg
YWN0aXZlRmFzdE1lbW9yaWVzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgdHJ5QWRkVG9D
dXJyZW50bHlBY3RpdmVGYXN0TWVtb3JpZXModm9pZCogbWVtb3J5KQogewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PHZvaWQqPj4gYWN0aXZlRmFzdE1lbW9yaWVzOwotICAgIHJl
dHVybiBhY3RpdmVGYXN0TWVtb3JpZXM7CisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwg
ZmFzdE1lbW9yeUFsbG9jYXRpb25Tb2Z0TGltaXQ7ICsraWR4KSB7CisgICAgICAgIHZvaWQqIGV4
cGVjdGVkID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGN1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmll
c1tpZHhdLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4cGVjdGVkLCBtZW1vcnksIHN0ZDo6bWVt
b3J5X29yZGVyX2FjcV9yZWwpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKIH0KIAotY29uc3QgSGFzaFNldDx2b2lkKj4mIHZpZXdBY3RpdmVGYXN0
TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKK3ZvaWQgcmVtb3ZlRnJvbUN1
cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllcyh2b2lkKiBtZW1vcnkpCiB7Ci0gICAgcmV0dXJuIGFj
dGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpOworICAgIGZvciAoc2l6ZV90IGlkeCA9IDA7IGlkeCA8
IGZhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0OyArK2lkeCkgeworICAgICAgICB2b2lkKiBl
eHBlY3RlZCA9IG1lbW9yeTsKKyAgICAgICAgaWYgKGN1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmll
c1tpZHhdLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4cGVjdGVkLCBudWxscHRyLCBzdGQ6Om1l
bW9yeV9vcmRlcl9hY3FfcmVsKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotaW5saW5lIGJvb2wgdHJ5R2V0RmFzdE1l
bW9yeShWTSYgdm0sIHZvaWQqJiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHksIE1lbW9y
eU1vZGUmIG1vZGUpCit2b2lkKiB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSkKIHsKLSAgICBhdXRv
IGRlcXVlRmFzdE1lbW9yeSA9IFsmXSAoKSAtPiBib29sIHsKLSAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBldmVudHVhbGx5IHJldHVybiB0aGVzZSB0byB0aGUgT1MgaWYgd2UgZ28gc29tZSBu
dW1iZXIgb2YgR0NzCi0gICAgICAgIC8vIHdpdGhvdXQgdXNpbmcgdGhlbS4KLSAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobWVtb3J5TG9jayk7Ci0gICAgICAgIGlmICghYXZhaWxhYmxlRmFzdE1l
bW9yaWVzKGxvY2tlcikuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtZW1vcnkgPSBhdmFpbGFi
bGVGYXN0TWVtb3JpZXMobG9ja2VyKS50YWtlRmlyc3QoKTsKLSAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcikuYWRkKG1lbW9yeSk7Ci0gICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotICAgICAgICAgICAg
bWFwcGVkQ2FwYWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXM7Ci0gICAgICAgICAgICBtb2Rl
ID0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
dm9pZCogbWVtb3J5ID0gbnVsbHB0cjsKKworICAgIGlmIChMSUtFTFkoT3B0aW9uczo6dXNlV2Vi
QXNzZW1ibHlGYXN0TWVtb3J5KCkpKSB7CisgICAgICAgIG1lbW9yeSA9IHRyeUdldENhY2hlZEZh
c3RNZW1vcnkoKTsKKyAgICAgICAgaWYgKG1lbW9yeSkKKyAgICAgICAgICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJ0cnlHZXRGYXN0TWVtb3J5IHJlLXVzaW5nICIsIFJhd1BvaW50ZXIobWVtb3J5
KSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gTm8gbWVtb3J5IHdhcyBhdmFpbGFi
bGUgaW4gdGhlIGNhY2hlLiBNYXliZSB3YWl0aW5nIG9uIEdDIHdpbGwgZmluZCBhIGZyZWUgb25l
LgorICAgICAgICAgICAgLy8gRklYTUUgY29sbGVjdFN5bmMoRnVsbCkgYW5kIGN1c3RvbSBlYWdl
ciBkZXN0cnVjdGlvbiBvZiB3YXNtIG1lbW9yaWVzIGNvdWxkIGJlIGJldHRlci4gRm9yIG5vdyB1
c2UgY29sbGVjdEFsbEdhcmJhZ2UuIEFsc28sIG5vdGhpbmcgdGVsbHMgdXMgdGhlIGN1cnJlbnQg
Vk0gaXMgaG9sZGluZyBvbnRvIGZhc3QgbWVtb3JpZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzA3NDgKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJ0cnlHZXRGYXN0TWVtb3J5IHdhaXRpbmcgb24gR0MgYW5kIHJldHJ5aW5nIik7CisgICAgICAg
ICAgICB2bS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CisgICAgICAgICAgICBtZW1vcnkgPSB0
cnlHZXRDYWNoZWRGYXN0TWVtb3J5KCk7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
ICYmIG1lbW9yeSwgInRyeUdldEZhc3RNZW1vcnkgd2FpdGVkIG9uIEdDIGFuZCByZXRyaWVkIHN1
Y2Nlc3NmdWxseSIpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Owog
Ci0gICAgYXV0byBmYWlsID0gW10gKCkgLT4gYm9vbCB7CisgICAgICAgIC8vIFRoZSBzb2Z0IGxp
bWl0IGlzIGluaGVyZW50bHkgcmFjeSBiZWNhdXNlIGNoZWNraW5nK2FsbG9jYXRpb24gaXNuJ3Qg
YXRvbWljLiBFeGNlZWRpbmcgaXQgc2xpZ2h0bHkgaXMgZmluZS4KKyAgICAgICAgYm9vbCBhdEFs
bG9jYXRpb25Tb2Z0TGltaXQgPSBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMubG9hZChz
dGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSA+PSBmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1p
dDsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSAmJiBhdEFsbG9jYXRpb25Tb2Z0TGltaXQs
ICJ0cnlHZXRGYXN0TWVtb3J5IHJlYWNoZWQgYWxsb2NhdGlvbiBzb2Z0IGxpbWl0IG9mICIsIGZh
c3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0KTsKKworICAgICAgICBpZiAoIW1lbW9yeSAmJiAh
YXRBbGxvY2F0aW9uU29mdExpbWl0KSB7CisgICAgICAgICAgICBtZW1vcnkgPSBtbWFwQnl0ZXMo
TWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CisgICAgICAgICAgICBpZiAobWVtb3J5KSB7Cisg
ICAgICAgICAgICAgICAgc2l6ZV90IGN1cnJlbnRseUFsbG9jYXRlZCA9IDEgKyBjdXJyZW50bHlB
bGxvY2F0ZWRGYXN0TWVtb3JpZXMuZmV0Y2hfYWRkKDEsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9y
ZWwpOworICAgICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50bHlPYnNlcnZlZE1heGltdW0gPSBv
YnNlcnZlZE1heGltdW1GYXN0TWVtb3J5LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7
CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRseUFsbG9jYXRlZCA+IGN1cnJlbnRseU9ic2Vy
dmVkTWF4aW11bSkgeworICAgICAgICAgICAgICAgICAgICBzaXplX3QgZXhwZWN0ZWQgPSBjdXJy
ZW50bHlPYnNlcnZlZE1heGltdW07CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IG9ic2VydmVkTWF4aW11bUZhc3RNZW1vcnkuY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhwZWN0
ZWQsIGN1cnJlbnRseUFsbG9jYXRlZCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgY3VycmVudGx5IG9ic2VydmVyIG1h
eGltdW0gaXMgbm93ICIsIGN1cnJlbnRseUFsbG9jYXRlZCk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGxvc3QgdGhlIHVwZGF0ZSByYWNl
LCBidXQgdGhlIGNvdW50ZXIgaXMgbW9ub3RvbmljIHNvIHRoZSB3aW5uZXIgbXVzdCBoYXZlIHVw
ZGF0ZWQgdGhlIHZhbHVlIHRvIHdoYXQgd2Ugd2VyZSBnb2luZyB0byB1cGRhdGUgaXQgdG8sIG9y
IG11bHRpcGxlIHdpbm5lcnMgZGlkIHNvLgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGV4cGVjdGVkID49IGN1cnJlbnRseUFsbG9jYXRlZCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRGYXN0TWVtb3J5IGFsbG9j
YXRlZCAiLCBSYXdQb2ludGVyKG1lbW9yeSksICIsIGN1cnJlbnRseSBhbGxvY2F0ZWQgaXMgIiwg
Y3VycmVudGx5QWxsb2NhdGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChtZW1vcnkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0cnlBZGRUb0N1cnJlbnRs
eUFjdGl2ZUZhc3RNZW1vcmllcyhtZW1vcnkpKSkgeworICAgICAgICAgICAgLy8gV2UgZ290IGEg
bWVtb3J5LCBidXQgcmVhY2hlZCB0aGUgYWxsb2NhdGlvbiBzb2Z0IGxpbWl0ICphbmQqIGFsbCBv
ZiB0aGUgYWxsb2NhdGVkIG1lbW9yaWVzIGFyZSBhY3RpdmUsIG5vbmUgYXJlIGNhY2hlZC4gVGhh
dCdzIGEgYnVtbWVyLCB3ZSBoYXZlIHRvIGdldCByaWQgb2Ygb3VyIG1lbW9yeS4gV2UgY2FuJ3Qg
anVzdCBob2xkIG9uIHRvIGl0IGJlY2F1c2UgdGhlIGxpc3Qgb2YgYWN0aXZlIGZhc3QgbWVtb3Jp
ZXMgbXVzdCBiZSBwcmVjaXNlLgorICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRy
eUdldEZhc3RNZW1vcnkgZm91bmQgYSBmYXN0IG1lbW9yeSBidXQgaGFkIHRvIGdpdmUgaXQgdXAi
KTsKKyAgICAgICAgICAgIG11bm1hcEJ5dGVzKG1lbW9yeSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0
ZXMoKSk7CisgICAgICAgICAgICBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMuZmV0Y2hf
c3ViKDEsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpOworICAgICAgICAgICAgbWVtb3J5ID0g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbWVtb3J5KSB7CisgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRGYXN0TWVtb3J5IGNvdWxkbid0IHJlLXVzZSBv
ciBhbGxvY2F0ZSBhIGZhc3QgbWVtb3J5Iik7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25z
OjpjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSgpKSkKICAgICAgICAgICAgIHdlYkFz
c2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH07CisgICAgfQogCi0gICAgLy8gV2UgbWlnaHQgR0MgaGVyZSBzbyB3ZSBzaG91bGQgYmUgaG9s
ZGluZyB0aGUgQVBJIGxvY2suCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN5
bmNyb25vdXNseSB0cmlnZ2VyIHRoZSBHQyBmcm9tIGFub3RoZXIgdGhyZWFkLgotICAgIEFTU0VS
VCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBpZiAoVU5MSUtFTFko
IWZhc3RNZW1vcnlFbmFibGVkKCkpKQotICAgICAgICByZXR1cm4gZmFpbCgpOworICAgIHJldHVy
biBtZW1vcnk7Cit9CiAKLSAgICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgaGF2ZSBhIHN0dWIg
cHJpb3IgdG8gcnVubmluZyBjb2RlLgotICAgIGlmIChVTkxJS0VMWSghVGh1bmtzOjpzaW5nbGV0
b24oKS5zdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikpKQotICAgICAg
ICByZXR1cm4gZmFpbCgpOwordm9pZCogdHJ5R2V0U2xvd01lbW9yeShzaXplX3QgYnl0ZXMpCit7
CisgICAgdm9pZCogbWVtb3J5ID0gbW1hcEJ5dGVzKGJ5dGVzKTsKKyAgICBkYXRhTG9nTG5JZiht
ZW1vcnkgJiYgdmVyYm9zZSwgIk9idGFpbmVkIHNsb3cgbWVtb3J5ICIsIFJhd1BvaW50ZXIobWVt
b3J5KSwgIiB3aXRoIGNhcGFjaXR5ICIsIGJ5dGVzKTsKKyAgICBkYXRhTG9nTG5JZighbWVtb3J5
ICYmIHZlcmJvc2UsICJGYWlsZWQgb2J0YWluaW5nIHNsb3cgbWVtb3J5IHdpdGggY2FwYWNpdHkg
IiwgYnl0ZXMpOworICAgIHJldHVybiBtZW1vcnk7Cit9CiAKLSAgICBBU1NFUlQoYWxsb2NhdGVk
RmFzdE1lbW9yaWVzIDw9IG1heEZhc3RNZW1vcmllcyk7Ci0gICAgaWYgKGRlcXVlRmFzdE1lbW9y
eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgcmVsaW5xdWlzaE1lbW9yeSh2b2lkKiBt
ZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUsIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5
TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6
U2lnbmFsaW5nOiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZVdlYkFzc2Vt
Ymx5RmFzdE1lbW9yeSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFwcGVkQ2FwYWNpdHkg
PT0gTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CiAKLSAgICAvLyBJZiB3ZSBoYXZlIGFsbG9j
YXRlZCBhbGwgdGhlIGZhc3QgbWVtb3JpZXMuLi4gdG9vIGJhZC4KLSAgICBpZiAoYWxsb2NhdGVk
RmFzdE1lbW9yaWVzID09IG1heEZhc3RNZW1vcmllcykgewotICAgICAgICAvLyBUaGVyZSBpcyBh
IHJlYXNvbmFibGUgY2hhbmNlIHRoYXQgYW5vdGhlciBtb2R1bGUgaGFzIGRpZWQgYnV0IGhhcyBu
b3QgYmVlbiBjb2xsZWN0ZWQgeWV0LiBEb24ndCBsb3NlIGhvcGUgeWV0IQotICAgICAgICB2bS5o
ZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7Ci0gICAgICAgIGlmIChkZXF1ZUZhc3RNZW1vcnkoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFpbCgpOworICAgICAg
ICAvLyBUaGlzIG1lbW9yeSBjYW5ub3QgY2F1c2UgYSB0cmFwIGFueW1vcmUuCisgICAgICAgIHJl
bW92ZUZyb21DdXJyZW50bHlBY3RpdmVGYXN0TWVtb3JpZXMobWVtb3J5KTsKKworICAgICAgICAv
LyBXZSBtYXkgY2FjaGUgZmFzdCBtZW1vcmllcy4gQXNzdW1pbmcgd2Ugd2lsbCwgd2UgaGF2ZSB0
byByZXNldCB0aGVtIGJlZm9yZSBpbnNlcnRpbmcgdGhlbSBpbnRvIHRoZSBjYWNoZS4KKyAgICAg
ICAgemVyb0FuZFVucHJvdGVjdEJ5dGVzKG1lbW9yeSwgd3JpdGFibGVTaXplKTsKKworICAgICAg
ICBpZiAodHJ5QWRkVG9DYWNoZWRGYXN0TWVtb3J5KG1lbW9yeSkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInJlbGlucXVpc2hNZW1vcnkgdW5h
YmxlIHRvIGNhY2hlIGZhc3QgbWVtb3J5LCBmcmVlaW5nIGluc3RlYWQgIiwgUmF3UG9pbnRlciht
ZW1vcnkpKTsKKyAgICAgICAgbXVubWFwQnl0ZXMobWVtb3J5LCBNZW1vcnk6OmZhc3RNYXBwZWRC
eXRlcygpKTsKKyAgICAgICAgY3VycmVudGx5QWxsb2NhdGVkRmFzdE1lbW9yaWVzLmZldGNoX3N1
YigxLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKworICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKG1tYXBCeXRlcyhmYXN0TWVtb3J5TWFwcGVkQnl0ZXMsIG1lbW9yeSkpIHsK
LSAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXM7Ci0gICAgICAg
IG1vZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1lbW9yeUxvY2spOwotICAgICAgICBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMrKzsKLSAgICAgICAg
YXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKS5hZGQobWVtb3J5KTsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBjYXNl
IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAicmVsaW5xdWlzaEZhc3RNZW1vcnkgZnJlZWluZyBzbG93IG1lbW9yeSAiLCBSYXdQb2ludGVy
KG1lbW9yeSkpOworICAgICAgICBtdW5tYXBCeXRlcyhtZW1vcnksIG1hcHBlZENhcGFjaXR5KTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9yeU1v
ZGVzOgorICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobWVtb3J5KQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29s
IG1ha2VOZXdNZW1vcnlSZWFkV3JpdGVPclJlbGlucXVpc2godm9pZCogbWVtb3J5LCBzaXplX3Qg
aW5pdGlhbEJ5dGVzLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHlCeXRlcywgTWVtb3J5TW9kZSBtb2Rl
KQoreworICAgIEFTU0VSVChtZW1vcnkgJiYgaW5pdGlhbEJ5dGVzIDw9IG1hcHBlZENhcGFjaXR5
Qnl0ZXMpOworICAgIGlmIChpbml0aWFsQnl0ZXMpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgIk1hcmtpbmcgV2ViQXNzZW1ibHkgbWVtb3J5J3MgIiwgUmF3UG9pbnRlcihtZW1vcnkp
LCAiJ3MgaW5pdGlhbCAiLCBpbml0aWFsQnl0ZXMsICIgYnl0ZXMgYXMgcmVhZCt3cml0ZSIpOwor
ICAgICAgICBpZiAobXByb3RlY3QobWVtb3J5LCBpbml0aWFsQnl0ZXMsIFBST1RfUkVBRCB8IFBS
T1RfV1JJVEUpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiB3aHkgPSBzdHJlcnJvcihlcnJu
byk7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRmFpbGVkIG1ha2luZyBtZW1v
cnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpLCAiIHJlYWRhYmxlIGFuZCB3cml0YWJsZTogIiwgd2h5
KTsKKyAgICAgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobWVtb3J5LCAwLCBtYXBwZWRDYXBhY2l0
eUJ5dGVzLCBtb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIAot
ICAgIHJldHVybiBmYWlsKCk7Citjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9k
ZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNp
Z25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVy
T2ZNZW1vcnlNb2RlczogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuICIiOwogfQogCi1pbmxpbmUgdm9pZCByZWxlYXNlRmFzdE1lbW9y
eSh2b2lkKiYgbWVtb3J5LCBzaXplX3Qgd3JpdGFibGVTaXplLCBzaXplX3QgbWFwcGVkQ2FwYWNp
dHksIE1lbW9yeU1vZGUgbW9kZSkKK3ZvaWQgTWVtb3J5Ojppbml0aWFsaXplUHJlYWxsb2NhdGlv
bnMoKQogewotICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCAhbWVtb3J5
KQorICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCkp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkgJiYgbWFwcGVk
Q2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKTsKLSAgICBBU1NFUlQoZmFzdE1lbW9y
eUVuYWJsZWQoKSk7CisgICAgLy8gUmFjZXMgY2Fubm90IG9jY3VyIGluIHRoaXMgZnVuY3Rpb246
IGl0IGlzIG9ubHkgY2FsbGVkIGF0IHByb2dyYW0gaW5pdGlhbGl6YXRpb24sIGJlZm9yZSBXZWJB
c3NlbWJseSBjYW4gYmUgaW52b2tlZC4KKworICAgIGNvbnN0IGF1dG8gc3RhcnRUaW1lID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CisgICAgY29uc3Qgc2l6ZV90IGRlc2lyZWRGYXN0TWVtb3JpZXMg
PSBzdGQ6Om1pbjxzaXplX3Q+KE9wdGlvbnM6OndlYkFzc2VtYmx5RmFzdE1lbW9yeVByZWFsbG9j
YXRlQ291bnQoKSwgZmFzdE1lbW9yeUNhY2hlSGFyZExpbWl0KTsKKworICAgIC8vIFN0YXJ0IG9m
ZiB0cnlpbmcgdG8gYWxsb2NhdGUgZmFzdCBtZW1vcmllcyBjb250aWd1b3VzbHkgc28gdGhleSBk
b24ndCBmcmFnbWVudCBlYWNoIG90aGVyLiBUaGlzIGNhbiBmYWlsIGlmIHRoZSBhZGRyZXNzIHNw
YWNlIGlzIG90aGVyd2lzZSBmcmFnbWVudGVkLiBJbiB0aGF0IGNhc2UsIGdvIGZvciBzbWFsbGVy
IGNvbnRpZ3VvdXMgYWxsb2NhdGlvbnMuIFdlJ2xsIGV2ZW50dWFsbHkgZ2V0IGluZGl2aWR1YWwg
bm9uLWNvbnRpZ3VvdXMgZmFzdCBtZW1vcmllcyBhbGxvY2F0ZWQsIG9yIHdlJ2xsIGp1c3QgYmUg
dW5hYmxlIHRvIGZpdCBhIHNpbmdsZSBvbmUgYXQgd2hpY2ggcG9pbnQgd2UgZ2l2ZSB1cC4KKyAg
ICBhdXRvIGFsbG9jYXRlQ29udGlndW91c0Zhc3RNZW1vcmllcyA9IFsmXSAoc2l6ZV90IG51bUNv
bnRpZ3VvdXMpIC0+IGJvb2wgeworICAgICAgICBpZiAodm9pZCAqbWVtb3J5ID0gbW1hcEJ5dGVz
KE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkgKiBudW1Db250aWd1b3VzKSkgeworICAgICAgICAg
ICAgZm9yIChzaXplX3Qgc3ViTWVtb3J5ID0gMDsgc3ViTWVtb3J5IDwgbnVtQ29udGlndW91czsg
KytzdWJNZW1vcnkpIHsKKyAgICAgICAgICAgICAgICB2b2lkKiBzdGFydEFkZHJlc3MgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSAq
IHN1Yk1lbW9yeSArIHN1Yk1lbW9yeTsKKyAgICAgICAgICAgICAgICBib29sIGluc2VydGVkID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY2FjaGVFbnRyeSA9IDA7IGNhY2hl
RW50cnkgPCBmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQ7ICsrY2FjaGVFbnRyeSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCkgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLnN0b3JlKHN0YXJ0QWRkcmVzcywgc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bnNlcnRlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIHNpemVfdCBmcmFnbWVu
dHMgPSAwOworICAgIHNpemVfdCBudW1GYXN0TWVtb3JpZXMgPSAwOworICAgIHNpemVfdCBjb250
aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQgPSBkZXNpcmVkRmFzdE1lbW9yaWVzOworICAg
IHdoaWxlIChudW1GYXN0TWVtb3JpZXMgIT0gZGVzaXJlZEZhc3RNZW1vcmllcyAmJiBjb250aWd1
b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQgIT0gMCkgeworICAgICAgICBpZiAoYWxsb2NhdGVD
b250aWd1b3VzRmFzdE1lbW9yaWVzKGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdCkp
IHsKKyAgICAgICAgICAgIG51bUZhc3RNZW1vcmllcyArPSBjb250aWd1b3VzTWVtb3J5QWxsb2Nh
dGlvbkF0dGVtcHQ7CisgICAgICAgICAgICBjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVt
cHQgPSBzdGQ6Om1pbihjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQgLSAxLCBkZXNp
cmVkRmFzdE1lbW9yaWVzIC0gbnVtRmFzdE1lbW9yaWVzKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAtLWNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdDsKKyAgICAgICAgKytm
cmFnbWVudHM7CisgICAgfQorCisgICAgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQgPSBudW1G
YXN0TWVtb3JpZXM7CisgICAgY3VycmVudGx5QWxsb2NhdGVkRmFzdE1lbW9yaWVzLnN0b3JlKGZh
c3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAg
ICBvYnNlcnZlZE1heGltdW1GYXN0TWVtb3J5LnN0b3JlKGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNv
dW50LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIAotICAgIG1lbXNldChtZW1vcnksIDAs
IHdyaXRhYmxlU2l6ZSk7Ci0gICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgd3JpdGFibGVTaXplLCBQ
Uk9UX05PTkUpKQotICAgICAgICBDUkFTSCgpOworICAgIGNvbnN0IGF1dG8gZW5kVGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOwogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIobWVtb3J5TG9jayk7
Ci0gICAgYm9vbCByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKS5yZW1vdmUobWVt
b3J5KTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKLSAgICBBU1NFUlQoYXZh
aWxhYmxlRmFzdE1lbW9yaWVzKGxvY2tlcikuc2l6ZSgpIDwgYWxsb2NhdGVkRmFzdE1lbW9yaWVz
KTsKLSAgICBhdmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2VyKS5hcHBlbmQobWVtb3J5KTsKLSAg
ICBtZW1vcnkgPSBudWxscHRyOworICAgIGZvciAoc2l6ZV90IGNhY2hlRW50cnkgPSAwOyBjYWNo
ZUVudHJ5IDwgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQ7ICsrY2FjaGVFbnRyeSkgeworICAg
ICAgICB2b2lkKiBzdGFydEFkZHJlc3MgPSBmYXN0TWVtb3J5Q2FjaGVbY2FjaGVFbnRyeV0ubG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgQVNTRVJUKHN0YXJ0QWRkcmVz
cyk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcmUtYWxsb2NhdGlvbiBvZiBXZWJB
c3NlbWJseSBmYXN0IG1lbW9yeSBhdCAiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcykpOworICAg
IH0KKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJlLWFsbG9jYXRlZCAiLCBmYXN0TWVtb3J5
UHJlYWxsb2NhdGVDb3VudCwgIiBXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIGluICIsIGZhc3RN
ZW1vcnlQcmVhbGxvY2F0ZUNvdW50ID09IDAgPyAwIDogZnJhZ21lbnRzLCBmcmFnbWVudHMgPT0g
MSA/ICIgZnJhZ21lbnQsIHRvb2sgIiA6ICIgZnJhZ21lbnRzLCB0b29rICIsIGVuZFRpbWUgLSBz
dGFydFRpbWUpOwogfQogCiBNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNv
dW50IG1heGltdW0pCkBAIC0xOTYsODUgKzM0NCwxMDcgQEAgTWVtb3J5OjpNZW1vcnkodm9pZCog
bWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBw
ZWQKIAogUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJbXBsKFZNJiB2bSwgUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJl
cXVpcmVkTW9kZSkKIHsKKyAgICBBU1NFUlQoaW5pdGlhbCk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
IW1heGltdW0gfHwgbWF4aW11bSA+PSBpbml0aWFsKTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFu
dGVlZCBieSBvdXIgY2FsbGVyLgogCisgICAgY29uc3Qgc2l6ZV90IGluaXRpYWxCeXRlcyA9IGlu
aXRpYWwuYnl0ZXMoKTsKKyAgICBjb25zdCBzaXplX3QgbWF4aW11bUJ5dGVzID0gbWF4aW11bSA/
IG1heGltdW0uYnl0ZXMoKSA6IDA7CisgICAgY29uc3QgYm9vbCBjYW5Vc2VGYXN0TWVtb3J5ID0g
IXJlcXVpcmVkTW9kZSB8fCByZXF1aXJlZE1vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nOwog
ICAgIE1lbW9yeU1vZGUgbW9kZSA9IHJlcXVpcmVkTW9kZSA/ICpyZXF1aXJlZE1vZGUgOiBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZzsKLSAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IGluaXRpYWwu
Ynl0ZXMoKTsKLSAgICBzaXplX3QgbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5i
eXRlcygpIDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpOwotICAgIHZvaWQqIG1lbW9yeSA9IG51
bGxwdHI7CisgICAgc2l6ZV90IG1hcHBlZENhcGFjaXR5Qnl0ZXMgPSAwOworCisgICAgLy8gV2Ug
bmVlZCB0byBiZSBzdXJlIHdlIGhhdmUgYSBzdHViIHByaW9yIHRvIHJ1bm5pbmcgY29kZS4KKyAg
ICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBh
dXRvIG1ha2VFbXB0eU1lbW9yeSA9IFsmXSAoKSAtPiBSZWZQdHI8TWVtb3J5PiB7CisgICAgaWYg
KG1heGltdW0gJiYgIW1heGltdW1CeXRlcykgeworICAgICAgICAvLyBVc2VyIHNwZWNpZmllZCBh
IHplcm8gbWF4aW11bSwgaW5pdGlhbCBzaXplIG11c3QgYWxzbyBiZSB6ZXJvLgorICAgICAgICBS
RUxFQVNFX0FTU0VSVCghaW5pdGlhbEJ5dGVzKTsKICAgICAgICAgaWYgKG1vZGUgPT0gTWVtb3J5
TW9kZTo6U2lnbmFsaW5nKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSkpOwotICAgIH07Ci0K
LSAgICBpZiAoIW1hcHBlZENhcGFjaXR5KSB7Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugc3Bl
Y2lmaWVkIGEgemVybyBhcyBtYXhpbXVtICh3aGljaCBtZWFucyB3ZSBhbHNvIGhhdmUgemVybyBh
cyBpbml0aWFsIHNpemUpLgotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc2l6ZSk7Ci0gICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBhbGxvY2F0aW5nIG5vdGhpbmci
KTsKLSAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1lbW9yeSgpOwogICAgIH0KIAotICAgIGJvb2wg
Y2FuVXNlRmFzdE1lbW9yeSA9ICFyZXF1aXJlZE1vZGUgfHwgcmVxdWlyZWRNb2RlID09IE1lbW9y
eU1vZGU6OlNpZ25hbGluZzsKLSAgICBpZiAoIWNhblVzZUZhc3RNZW1vcnkgfHwgIXRyeUdldEZh
c3RNZW1vcnkodm0sIG1lbW9yeSwgbWFwcGVkQ2FwYWNpdHksIG1vZGUpKSB7Ci0gICAgICAgIGlm
IChtb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZykKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7CisgICAgaWYgKGNhblVzZUZhc3RNZW1v
cnkpIHsKKyAgICAgICAgbWVtb3J5ID0gdHJ5R2V0RmFzdE1lbW9yeSh2bSk7CisgICAgICAgIGlm
IChtZW1vcnkpIHsKKyAgICAgICAgICAgIG1hcHBlZENhcGFjaXR5Qnl0ZXMgPSBNZW1vcnk6OmZh
c3RNYXBwZWRCeXRlcygpOworICAgICAgICAgICAgbW9kZSA9IE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZzsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAoT3B0aW9uczo6c2ltdWxhdGVXZWJB
c3NlbWJseUxvd01lbW9yeSgpID8gdHJ1ZSA6ICFtbWFwQnl0ZXMobWFwcGVkQ2FwYWNpdHksIG1l
bW9yeSkpIHsKLSAgICAgICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJl
ci4KLSAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFw
IGZhaWxlZCBvbmNlIGZvciBjYXBhY2l0eSwgdHJ5aW5nIGFnYWluIik7Ci0gICAgICAgICAgICBt
YXBwZWRDYXBhY2l0eSA9IHNpemU7Ci0gICAgICAgICAgICBpZiAoIW1hcHBlZENhcGFjaXR5KSB7
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1t
YXAgbm90IHRyeWluZyBhZ2FpbiBiZWNhdXNlIHNpemUgaXMgemVybyIpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlRW1wdHlNZW1vcnkoKTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoIW1l
bW9yeSAmJiBtb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZykKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICAgICAgICAgIGlmICghbW1hcEJ5dGVzKG1hcHBlZENhcGFjaXR5LCBtZW1v
cnkpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3Jl
YXRlIG1tYXAgZmFpbGVkIHR3aWNlIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICB9CisgICAgaWYgKCFtZW1vcnkgJiYgbWF4aW11bSkgeworICAgICAgICBt
ZW1vcnkgPSB0cnlHZXRTbG93TWVtb3J5KG1heGltdW1CeXRlcyk7CisgICAgICAgIGlmIChtZW1v
cnkpIHsKKyAgICAgICAgICAgIG1hcHBlZENhcGFjaXR5Qnl0ZXMgPSBtYXhpbXVtQnl0ZXM7Cisg
ICAgICAgICAgICBtb2RlID0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBBU1NFUlQobWVtb3J5ICYmIHNpemUgPD0gbWFwcGVkQ2FwYWNpdHkpOwot
ICAgIGlmIChtcHJvdGVjdChtZW1vcnksIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBldmVyIG9jY3VyPyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5ODkwCi0gICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtcHJvdGVjdCBmYWlsZWQiKTsKLSAgICAgICAgcmVsZWFz
ZUZhc3RNZW1vcnkobWVtb3J5LCAwLCBtYXBwZWRDYXBhY2l0eSwgbW9kZSk7CisgICAgaWYgKCFt
ZW1vcnkpIHsKKyAgICAgICAgbWVtb3J5ID0gdHJ5R2V0U2xvd01lbW9yeShpbml0aWFsQnl0ZXMp
OwogICAgICAgICBpZiAobWVtb3J5KSB7Ci0gICAgICAgICAgICBpZiAobXVubWFwKG1lbW9yeSwg
bWFwcGVkQ2FwYWNpdHkpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBt
YXBwZWRDYXBhY2l0eUJ5dGVzID0gaW5pdGlhbEJ5dGVzOworICAgICAgICAgICAgbW9kZSA9IE1l
bW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAotICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBt
bWFwIHN1Y2NlZWRlZCIpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KG1lbW9yeSwg
aW5pdGlhbCwgbWF4aW11bSwgbWFwcGVkQ2FwYWNpdHksIG1vZGUpKTsKKyAgICBpZiAoIW1lbW9y
eSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIW1ha2VOZXdNZW1vcnlSZWFk
V3JpdGVPclJlbGlucXVpc2gobWVtb3J5LCBpbml0aWFsQnl0ZXMsIG1hcHBlZENhcGFjaXR5Qnl0
ZXMsIG1vZGUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTWVtb3J5KG1lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgbWFwcGVkQ2FwYWNpdHlCeXRl
cywgbW9kZSkpOwogfQogCiBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlN
b2RlPiBtb2RlKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0g
aW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KICAg
ICBSZWZQdHI8TWVtb3J5PiByZXN1bHQgPSBjcmVhdGVJbXBsKHZtLCBpbml0aWFsLCBtYXhpbXVt
LCBtb2RlKTsKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9
PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQtPm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKTsKLSAgICAgICAg
aWYgKG1vZGUpCi0gICAgICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpOwot
ICAgIH0KKyAgICBpZiAocmVzdWx0ICYmIG1vZGUpCisgICAgICAgIEFTU0VSVCgqbW9kZSA9PSBy
ZXN1bHQtPm1vZGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogTWVtb3J5Ojp+TWVtb3J5
KCkKIHsKLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojp+TWVtb3J5ICIsICp0aGlz
KTsKLSAgICByZWxlYXNlRmFzdE1lbW9yeShtX21lbW9yeSwgbV9zaXplLCBtX21hcHBlZENhcGFj
aXR5LCBtX21vZGUpOwogICAgIGlmIChtX21lbW9yeSkgewotICAgICAgICBpZiAobXVubWFwKG1f
bWVtb3J5LCBtX21hcHBlZENhcGFjaXR5KSkKLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6On5NZW1vcnkgIiwgKnRoaXMpOworICAgICAg
ICByZWxpbnF1aXNoTWVtb3J5KG1fbWVtb3J5LCBtX3NpemUsIG1fbWFwcGVkQ2FwYWNpdHksIG1f
bW9kZSk7CisgICAgfQorfQorCitzaXplX3QgTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVz
KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihQYWdlQ291bnQ6OnBhZ2VTaXpl
KSAqIE9wdGlvbnM6OndlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcygpOworfQorCitz
aXplX3QgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhl
IG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzIgKyByZWR6b25lIHdoaWNo
IGlzIGxhcmdlciB0aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2QgcGFzcyB0
byBtcHJvdGVjdCBpZiB0aGlzIGRpZG4ndCBob2xkLiIpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgKyBmYXN0TWFw
cGVkUmVkem9uZUJ5dGVzKCk7Cit9CisKK3NpemVfdCBNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3Vu
dCgpCit7CisgICAgLy8gVGhlIG9yZGVyIGNhbiBiZSByZWxheGVkIGhlcmUgYmVjYXVzZSB3ZSBw
cm92aWRlIGEgbW9ub3RvbmljYWxseS1pbmNyZWFzaW5nIGVzdGltYXRlLiBBIGNvbmN1cnJlbnQg
b2JzZXJ2ZXIgY291bGQgc2VlIGEgc2xpZ2h0bHkgb3V0LW9mLWRhdGUgdmFsdWUgYnV0IGNhbid0
IHRlbGwgdGhhdCB0aGV5IGRpZC4KKyAgICByZXR1cm4gb2JzZXJ2ZWRNYXhpbXVtRmFzdE1lbW9y
eS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworfQorCitib29sIE1lbW9yeTo6YWRk
cmVzc0lzSW5BY3RpdmVGYXN0TWVtb3J5KHZvaWQqIGFkZHJlc3MpCit7CisgICAgLy8gVGhpcyBj
YW5ub3QgcmFjZSBpbiBhbnkgbWVhbmluZ2Z1bCB3YXk6IHRoZSB0aHJlYWQgd2hpY2ggY2FsbHMg
dGhpcyBmdW5jdGlvbiB3YW50cyB0byBrbm93IGlmIGEgZmF1bHQgaXQgcmVjZWl2ZWQgYXQgYSBw
YXJ0aWN1bGFyIGFkZHJlc3MgaXMgaW4gYSBmYXN0IG1lbW9yeS4gVGhhdCBmYXN0IG1lbW9yeSBt
dXN0IHRoZXJlZm9yZSBiZSBhY3RpdmUgaW4gdGhhdCB0aHJlYWQuIEl0IGNhbm5vdCBiZSBhZGRl
ZCBvciByZW1vdmVkIGZyb20gdGhlIGxpc3Qgb2YgY3VycmVudGx5IGFjdGl2ZSBmYXN0IG1lbW9y
aWVzLiBPdGhlciBtZW1vcmllcyBiZWluZyBhZGRlZCAvIHJlbW92ZWQgY29uY3VycmVudGx5IGFy
ZSBpbmNvbnNlcXVlbnRpYWwuCisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgZmFzdE1l
bW9yeUFsbG9jYXRpb25Tb2Z0TGltaXQ7ICsraWR4KSB7CisgICAgICAgIGNoYXIqIHN0YXJ0ID0g
c3RhdGljX2Nhc3Q8Y2hhcio+KGN1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllc1tpZHhdLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpOworICAgICAgICBpZiAoc3RhcnQgPD0gYWRkcmVz
cyAmJiBhZGRyZXNzIDw9IHN0YXJ0ICsgZmFzdE1hcHBlZEJ5dGVzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIE1lbW9yeTo6
Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKQEAgLTMwMSw4ICs0NzEsMTEgQEAgYm9vbCBNZW1vcnk6
Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiAgICAgfQogCiAgICAgaWYgKG1fbWVtb3J5ICYmIGRl
c2lyZWRTaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgaWYgKG1wcm90ZWN0KHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihtX21lbW9yeSkgKyBtX3NpemUsIHN0YXRpY19jYXN0PHNpemVf
dD4oZGVzaXJlZFNpemUgLSBtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGV2ZXIgb2NjdXI/IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4OTAKKyAgICAgICAgdWludDhfdCogc3RhcnRB
ZGRyZXNzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6ZTsKKyAgICAg
ICAgc2l6ZV90IGV4dHJhQnl0ZXMgPSBkZXNpcmVkU2l6ZSAtIG1fc2l6ZTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZXh0cmFCeXRlcyk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJN
YXJraW5nIFdlYkFzc2VtYmx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiIGFz
IHJlYWQrd3JpdGUgaW4gcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwg
UmF3UG9pbnRlcihzdGFydEFkZHJlc3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKKyAgICAgICAgaWYg
KG1wcm90ZWN0KHN0YXJ0QWRkcmVzcywgZXh0cmFCeXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklU
RSkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4t
cGxhY2UgZmFpbGVkICIsICp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpAQCAtMzE2LDE2ICs0ODksMTkgQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50IG5l
d1NpemUpCiAgICAgUkVMRUFTRV9BU1NFUlQobW9kZSgpICE9IE1lbW9yeU1vZGU6OlNpZ25hbGlu
Zyk7CiAKICAgICAvLyBPdGhlcndpc2UsIGxldCdzIHRyeSB0byBtYWtlIHNvbWUgbmV3IG1lbW9y
eS4KLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9y
IHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYz
NjAwCi0gICAgdm9pZCogbmV3TWVtb3J5ID0gbW1hcChudWxscHRyLCBkZXNpcmVkU2l6ZSwgUFJP
VF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwotICAg
IGlmIChuZXdNZW1vcnkgPT0gTUFQX0ZBSUxFRCkKKyAgICAvLyBGSVhNRSBtcmVtYXAgd291bGQg
YmUgbmljZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTU3Cisg
ICAgdm9pZCogbmV3TWVtb3J5ID0gdHJ5R2V0U2xvd01lbW9yeShkZXNpcmVkU2l6ZSk7CisgICAg
aWYgKCFuZXdNZW1vcnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbWFrZU5l
d01lbW9yeVJlYWRXcml0ZU9yUmVsaW5xdWlzaChuZXdNZW1vcnksIGRlc2lyZWRTaXplLCBkZXNp
cmVkU2l6ZSwgbW9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fbWVt
b3J5KSB7CiAgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUpOwotICAg
ICAgICBib29sIHN1Y2Nlc3MgPSAhbXVubWFwKG1fbWVtb3J5LCBtX21hcHBlZENhcGFjaXR5KTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CisgICAgICAgIHJlbGlucXVpc2hNZW1v
cnkobV9tZW1vcnksIG1fc2l6ZSwgbV9zaXplLCBtX21vZGUpOwogICAgIH0KKwogICAgIG1fbWVt
b3J5ID0gbmV3TWVtb3J5OwogICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBkZXNpcmVkU2l6ZTsKICAg
ICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuaAppbmRleCBiMDI0NTFkLi42N2ZhMjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeS5oCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50
LmgiCiAKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpA
QCAtNjEsMTEgKzYwLDE3IEBAIHB1YmxpYzoKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9CiAKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFs
aXplUHJlYWxsb2NhdGlvbnMoKTsKICAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlKFZN
JiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1l
bW9yeU1vZGU+IHJlcXVpcmVkTW9kZSA9IHN0ZDo6bnVsbG9wdCk7CiAKICAgICBNZW1vcnkoKSA9
IGRlZmF1bHQ7CiAgICAgfk1lbW9yeSgpOwogCisgICAgc3RhdGljIHNpemVfdCBmYXN0TWFwcGVk
UmVkem9uZUJ5dGVzKCk7CisgICAgc3RhdGljIHNpemVfdCBmYXN0TWFwcGVkQnl0ZXMoKTsgLy8g
SW5jbHVkZXMgcmVkem9uZS4KKyAgICBzdGF0aWMgc2l6ZV90IG1heEZhc3RNZW1vcnlDb3VudCgp
OworICAgIHN0YXRpYyBib29sIGFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSh2b2lkKik7CisK
ICAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeTsgfQogICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgUGFnZUNvdW50IHNpemVJblBh
Z2VzKCkgY29uc3QgeyByZXR1cm4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKTsgfQpAQCAt
OTQsMTEgKzk5LDE3IEBAIHByaXZhdGU6CiAgICAgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlN
b2RlOjpCb3VuZHNDaGVja2luZyB9OwogfTsKIAotc3RhdGljX2Fzc2VydChzaXplb2YodWludDY0
X3QpID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVseSBvbiBhbGxvd2luZyB0aGUgbWF4aW11bSBz
aXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4zMyB3aGljaCBpcyBsYXJnZXIgdGhhbiBmaXRz
IGluIGEgMzItYml0IGludGVnZXIgdGhhdCB3ZSdkIHBhc3MgdG8gbXByb3RlY3QgaWYgdGhpcyBk
aWRuJ3QgaG9sZC4iKTsKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbHNlCiAKLWNv
bnN0IHNpemVfdCBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMgPSAoc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpICsgMSkgKiAyOyAvLyBwb2ludGVy
IG1heCArIG9mZnNldCBtYXguIFRoaXMgaXMgYWxsIHdlIG5lZWQgc2luY2UgYSBsb2FkIHN0cmFk
ZGxpbmcgcmVhZGFibGUgbWVtb3J5IHdpbGwgdHJhcC4KLWV4dGVybiBTdGF0aWNMb2NrIG1lbW9y
eUxvY2s7Ci1jb25zdCBIYXNoU2V0PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmllcyhjb25z
dCBBYnN0cmFjdExvY2tlciYpOworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwor
Y2xhc3MgTWVtb3J5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc2l6ZV90IG1heEZhc3RNZW1vcnlD
b3VudCgpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgYm9vbCBhZGRyZXNzSXNJbkFjdGl2ZUZh
c3RNZW1vcnkodm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9Cit9OwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCA2NTQ3ZDYyLi45Y2Q0N2Q4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKICAgICBtX21vZHVsZS5zZXQodm0sIHRoaXMs
IG1vZHVsZSk7Ci0gICAgY29uc3Qgc2l6ZV90IGV4dHJhTWVtb3J5U2l6ZSA9IG1vZHVsZS0+bW9k
dWxlSW5mb3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAg
Y29uc3Qgc2l6ZV90IGV4dHJhTWVtb3J5U2l6ZSA9IGdsb2JhbE1lbW9yeUJ5dGVTaXplKCk7CiAg
ICAgbV9nbG9iYWxzID0gTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGV4dHJhTWVtb3J5U2l6
ZSk7CiAgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChleHRyYU1lbW9yeVNp
emUpOwogCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fdGFibGUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVl
KTsKLSAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tb2R1
bGUoKS0+bW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSk7CisgICAgdmlzaXRvci5y
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+Z2xvYmFsTWVtb3J5Qnl0ZVNpemUo
KSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbnVtSW1wb3J0
RnVuY3Rpb25zOyArK2kpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9y
dEZ1bmN0aW9ucygpW2ldKTsKIH0KQEAgLTM1MCw2ICszNTAsMTAgQEAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgSlMKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKK3NpemVfdCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Omdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9t
b2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0
ZXIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAppbmRleCA4NTUxZmU4Li41
M2VkOTlmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTkyLDYgKzkyLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0
ZToKICAgICBWTSogbV92bTsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRGdW5j
dGlvbnMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+KGJp
dHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsgfQor
ICAgIHNpemVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0OwogCiAgICAgV3JpdGVCYXJy
aWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKaW5kZXggMzM2OWMwZS4u
YzZkNzhjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1lbW9yeS5jcHAKQEAgLTExNyw2ICsxMTcsNyBAQCBXYXNtOjpQYWdlQ291bnQg
SlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWludDMy
X3QgZGVsdAogICAgIH0KIAogICAgIG1lbW9yeSgpLmNoZWNrKCk7CisgICAgLy8gRklYTUUgU2hv
dWxkIHdlIHJlcG9ydCBleHRyYSBtZW1vcnkgdG8gdGhlIEdDIG9uIGFsbG9jYXRpb24gLyBncm93
IC8gdmlzaXQ/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2OTAK
ICAgICByZXR1cm4gb2xkUGFnZUNvdW50OwogfQogCkBAIC0xMjQsNiArMTI1LDggQEAgdm9pZCBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Cisg
ICAgLy8gRklYTUUgU2hvdWxkIHdlIHJlcG9ydCBleHRyYSBtZW1vcnkgdG8gdGhlIEdDIG9uIGFs
bG9jYXRpb24gLyBncm93IC8gdmlzaXQ/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzA2OTAKKyAgICB2bS5oZWFwLnJlcG9ydFdlYkFzc2VtYmx5RmFzdE1lbW9yaWVz
QWxsb2NhdGVkKDEpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQpAQCAtMTQxLDYgKzE0NCw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX2J1ZmZlcldyYXBwZXIpOworICAgIC8vIEZJWE1FIFNob3VsZCB3
ZSByZXBvcnQgZXh0cmEgbWVtb3J5IHRvIHRoZSBHQyBvbiBhbGxvY2F0aW9uIC8gZ3JvdyAvIHZp
c2l0PyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjkwCiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBkNjdlMDY1Li5lYjI3ODlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIzIEBACisyMDE3LTA0LTExICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWJBc3NlbWJseTogbWFuYWdlIG1lbW9yeSBiZXR0ZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDYyOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlLXVzZSBhIFZNIHRhZyB3aGljaCB3
YXMgaW50ZW5kZWQgZm9yIEphdmFTY3JpcHQgY29yZSwgd2FzIHRoZW4KKyAgICAgICAgdXNlZCBi
eSBvdXIgR0MsIGFuZCBpcyBub3cgdW51c2VkLiBJZiBJIGRvbid0IGRvIHRoaXMgdGhlbgorICAg
ICAgICBXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIHdpbGwgbWFrZSB2bW1hcCBsb29rIHN1cGVy
IHdlaXJkIGJlY2F1c2UKKyAgICAgICAgaXQnbGwgbG9vayBsaWtlIG11bHRpLWdpZ2FieXRlIG9m
IHZpcnR1YWwgbWVtb3J5IGFyZSBhbGxvY2F0ZWQgYXMKKyAgICAgICAgcGFydCBvZiBvdXIgcHJv
Y2VzcycgcmVndWxhciBtZW1vcnkhCisKKyAgICAgICAgU2VwYXJhdGVseSBJIG5lZWQgdG8gdXBk
YXRlIHZtbWFwIGFuZCBvdGhlciB0b29scyB0byBwcmludCB0aGUKKyAgICAgICAgcmlnaHQgbmFt
ZS4gUmlnaHQgbm93IHRoaXMgdGFnIGdldHMgaWRlbnRpZmllZCBhcyAiSlMgZ2FyYmFnZQorICAg
ICAgICBjb2xsZWN0b3IiLgorCisgICAgICAgICogd3RmL09TQWxsb2NhdG9yLmg6CisgICAgICAg
ICogd3RmL1ZNVGFncy5oOgorCiAyMDE3LTA0LTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXNlIGF1ZGl0X3Rva2VuX3QgaW5zdGVhZCBv
ZiBwaWRfdCBmb3IgY2hlY2tpbmcgc2FuZGJveCBvZiBvdGhlciBwcm9jZXNzZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9j
YXRvci5oCmluZGV4IGM5Y2IxNTUuLmQ3Njc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L09TQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaApAQCAtMzYs
NyArMzYsNiBAQCBwdWJsaWM6CiAgICAgZW51bSBVc2FnZSB7CiAgICAgICAgIFVua25vd25Vc2Fn
ZSA9IC0xLAogICAgICAgICBGYXN0TWFsbG9jUGFnZXMgPSBWTV9UQUdfRk9SX1RDTUFMTE9DX01F
TU9SWSwKLSAgICAgICAgSlNHQ0hlYXBQYWdlcyA9IFZNX1RBR19GT1JfQ09MTEVDVE9SX01FTU9S
WSwKICAgICAgICAgSlNWTVN0YWNrUGFnZXMgPSBWTV9UQUdfRk9SX1JFR0lTVEVSRklMRV9NRU1P
UlksCiAgICAgICAgIEpTSklUQ29kZVBhZ2VzID0gVk1fVEFHX0ZPUl9FWEVDVVRBQkxFQUxMT0NB
VE9SX01FTU9SWSwKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVk1UYWdzLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9WTVRhZ3MuaAppbmRleCBhZWYwNWQyLi4yN2ZjMGRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9WTVRhZ3MuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WTVRhZ3Mu
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTEsMTUgKzUxLDE1IEBACiAjZW5kaWYgLy8gZGVmaW5lZChWTV9NRU1PUllfSkFWQVNDUklQ
VF9KSVRfUkVHSVNURVJfRklMRSkKIAogI2lmIGRlZmluZWQoVk1fTUVNT1JZX0pBVkFTQ1JJUFRf
Q09SRSkKLSNkZWZpbmUgVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZIFZNX01BS0VfVEFHKFZN
X01FTU9SWV9KQVZBU0NSSVBUX0NPUkUpCisjZGVmaW5lIFZNX1RBR19GT1JfV0VCQVNTRU1CTFlf
TUVNT1JZIFZNX01BS0VfVEFHKFZNX01FTU9SWV9KQVZBU0NSSVBUX0NPUkUpCiAjZWxzZQotI2Rl
ZmluZSBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlkgVk1fTUFLRV9UQUcoNjMpCisjZGVmaW5l
IFZNX1RBR19GT1JfV0VCQVNTRU1CTFlfTUVNT1JZIFZNX01BS0VfVEFHKDYzKQogI2VuZGlmIC8v
IGRlZmluZWQoVk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRSkKIAogI2Vsc2UgLy8gT1MoREFSV0lO
KQogCiAjZGVmaW5lIFZNX1RBR19GT1JfVENNQUxMT0NfTUVNT1JZIC0xCi0jZGVmaW5lIFZNX1RB
R19GT1JfQ09MTEVDVE9SX01FTU9SWSAtMQorI2RlZmluZSBWTV9UQUdfRk9SX1dFQkFTU0VNQkxZ
X01FTU9SWSAtMQogI2RlZmluZSBWTV9UQUdfRk9SX0VYRUNVVEFCTEVBTExPQ0FUT1JfTUVNT1JZ
IC0xCiAjZGVmaW5lIFZNX1RBR19GT1JfUkVHSVNURVJGSUxFX01FTU9SWSAtMQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggMmY5OTA5Yi4uNjkzYzJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE3
LTA0LTExICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJB
c3NlbWJseTogbWFuYWdlIG1lbW9yeSBiZXR0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDYyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlLXVzZSBhIFZNIHRhZyB3aGljaCB3YXMgaW50ZW5kZWQg
Zm9yIEphdmFTY3JpcHQgY29yZSwgd2FzIHRoZW4KKyAgICAgICAgdXNlZCBieSBvdXIgR0MsIGFu
ZCBpcyBub3cgdW51c2VkLiBJZiBJIGRvbid0IGRvIHRoaXMgdGhlbgorICAgICAgICBXZWJBc3Nl
bWJseSBmYXN0IG1lbW9yaWVzIHdpbGwgbWFrZSB2bW1hcCBsb29rIHN1cGVyIHdlaXJkIGJlY2F1
c2UKKyAgICAgICAgaXQnbGwgbG9vayBsaWtlIG11bHRpLWdpZ2FieXRlIG9mIHZpcnR1YWwgbWVt
b3J5IGFyZSBhbGxvY2F0ZWQgYXMKKyAgICAgICAgcGFydCBvZiBvdXIgcHJvY2VzcycgcmVndWxh
ciBtZW1vcnkhCisKKyAgICAgICAgU2VwYXJhdGVseSBJIG5lZWQgdG8gdXBkYXRlIHZtbWFwIGFu
ZCBvdGhlciB0b29scyB0byBwcmludCB0aGUKKyAgICAgICAgcmlnaHQgbmFtZS4gUmlnaHQgbm93
IHRoaXMgdGFnIGdldHMgaWRlbnRpZmllZCBhcyAiSlMgZ2FyYmFnZQorICAgICAgICBjb2xsZWN0
b3IiLgorCisgICAgICAgICogcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVVzYWdlRGF0YTo6UmVzb3VyY2VVc2FnZURhdGEpOgorICAgICAgICAq
IHBhZ2UvUmVzb3VyY2VVc2FnZURhdGEuaDoKKyAgICAgICAgKiBwYWdlL2NvY29hL1Jlc291cmNl
VXNhZ2VPdmVybGF5Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3JpY1Jlc291cmNl
VXNhZ2VEYXRhOjpIaXN0b3JpY1Jlc291cmNlVXNhZ2VEYXRhKToKKyAgICAgICAgKiBwYWdlL2Nv
Y29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3Bs
YXlOYW1lRm9yVk1UYWcpOgorICAgICAgICAoV2ViQ29yZTo6Y2F0ZWdvcnlGb3JWTVRhZyk6CisK
IDIwMTctMDQtMDcgIFl1aWNoaXJvIEtpa3VyYSAgPHkua2lrdXJhQGdtYWlsLmNvbT4KIAogICAg
ICAgICBXZWJHUFU6IGltcGxlbWVudCBDb21wdXRlQ29tbWFuZEVuY29kZXIgYW5kIHJlbGF0ZWQg
Y29tcG9uZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdl
RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmNwcAppbmRl
eCA1OTEyYjA1Li43YTE3MDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291
cmNlVXNhZ2VEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VE
YXRhLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNCw2ICszNCw3IEBAIFJlc291cmNlVXNhZ2VEYXRhOjpSZXNvdXJjZVVzYWdlRGF0
YSgpCiB7CiAgICAgLy8gVk0gdGFnIGNhdGVnb3JpZXMuCiAgICAgY2F0ZWdvcmllc1tNZW1vcnlD
YXRlZ29yeTo6SlNKSVRdID0gTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpKU0pJ
VCk7CisgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6V2ViQXNzZW1ibHldID0gTWVtb3J5
Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpXZWJBc3NlbWJseSk7CiAgICAgY2F0ZWdvcmll
c1tNZW1vcnlDYXRlZ29yeTo6SW1hZ2VzXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRl
Z29yeTo6SW1hZ2VzKTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMYXllcnNdID0g
TWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpMYXllcnMpOwogICAgIGNhdGVnb3Jp
ZXNbTWVtb3J5Q2F0ZWdvcnk6OkxpYmNNYWxsb2NdID0gTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9y
eUNhdGVnb3J5OjpMaWJjTWFsbG9jKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzb3VyY2VVc2FnZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURh
dGEuaAppbmRleCA3MjM2OTZmLi45ZmY4NmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1Jlc291cmNlVXNhZ2VEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJj
ZVVzYWdlRGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM1LDEyICszNSwxMyBAQCBuYW1lc3BhY2UgTWVtb3J5Q2F0ZWdvcnkgewog
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGJtYWxsb2MgPSAwOwogc3RhdGljIGNvbnN0IHVuc2lnbmVk
IExpYmNNYWxsb2MgPSAxOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIEpTSklUID0gMjsKLXN0YXRp
YyBjb25zdCB1bnNpZ25lZCBJbWFnZXMgPSAzOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEdDSGVh
cCA9IDQ7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgR0NPd25lZCA9IDU7Ci1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgT3RoZXIgPSA2Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIExheWVycyA9IDc7Ci1z
dGF0aWMgY29uc3QgdW5zaWduZWQgTnVtYmVyT2ZDYXRlZ29yaWVzID0gODsKK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBXZWJBc3NlbWJseSA9IDM7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgSW1hZ2Vz
ID0gNDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBHQ0hlYXAgPSA1Oworc3RhdGljIGNvbnN0IHVu
c2lnbmVkIEdDT3duZWQgPSA2Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIE90aGVyID0gNzsKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBMYXllcnMgPSA4Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIE51
bWJlck9mQ2F0ZWdvcmllcyA9IDk7CiB9CiAKIHN0cnVjdCBNZW1vcnlDYXRlZ29yeUluZm8gewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3Zlcmxh
eUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3Zlcmxh
eUNvY29hLm1tCmluZGV4IDM2NjYwMWUuLjk3M2I4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2Miw2ICsx
NjIsNyBAQCBIaXN0b3JpY1Jlc291cmNlVXNhZ2VEYXRhOjpIaXN0b3JpY1Jlc291cmNlVXNhZ2VE
YXRhKCkKIHsKICAgICAvLyBWTSB0YWcgY2F0ZWdvcmllcy4KICAgICBjYXRlZ29yaWVzW01lbW9y
eUNhdGVnb3J5OjpKU0pJVF0gPSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRl
Z29yeTo6SlNKSVQsIDB4RkZGRjYwRkYsICJKUyBKSVQiKTsKKyAgICBjYXRlZ29yaWVzW01lbW9y
eUNhdGVnb3J5OjpXZWJBc3NlbWJseV0gPSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1v
cnlDYXRlZ29yeTo6V2ViQXNzZW1ibHksIDB4RkY2NTRGRjAsICJXZWJBc3NlbWJseSIpOwogICAg
IGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkltYWdlc10gPSBIaXN0b3JpY01lbW9yeUNhdGVn
b3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6SW1hZ2VzLCAweEZGRkZGRjAwLCAiSW1hZ2VzIik7CiAg
ICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6TGF5ZXJzXSA9IEhpc3RvcmljTWVtb3J5Q2F0
ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpMYXllcnMsIDB4RkYwMEZGRkYsICJMYXllcnMiKTsK
ICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMaWJjTWFsbG9jXSA9IEhpc3RvcmljTWVt
b3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpMaWJjTWFsbG9jLCAweEZGMDBGRjAwLCAi
bGliYyBtYWxsb2MiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVz
b3VyY2VVc2FnZVRocmVhZENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNv
dXJjZVVzYWdlVGhyZWFkQ29jb2EubW0KaW5kZXggMDY0YTYxYS4uYTMwZWYyMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2Eu
bW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTgwLDYgKzgwLDcgQEAgY29uc3QgY2hhciogZGlzcGxheU5hbWVGb3JWTVRhZyh1bnNpZ25l
ZCB0YWcpCiAgICAgY2FzZSBWTV9NRU1PUllfSU1BR0VJTzogcmV0dXJuICJJbWFnZUlPIjsKICAg
ICBjYXNlIFZNX01FTU9SWV9DR0lNQUdFOiByZXR1cm4gIkNHIGltYWdlIjsKICAgICBjYXNlIFZN
X01FTU9SWV9KQVZBU0NSSVBUX0pJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUjogcmV0dXJuICJKU0Mg
SklUIjsKKyAgICBjYXNlIFZNX01FTU9SWV9KQVZBU0NSSVBUX0NPUkU6IHJldHVybiAiV2ViQXNz
ZW1ibHkiOwogICAgIGNhc2UgVk1fTUVNT1JZX01BTExPQzogcmV0dXJuICJtYWxsb2MiOwogICAg
IGNhc2UgVk1fTUVNT1JZX01BTExPQ19IVUdFOiByZXR1cm4gIm1hbGxvYyAoaHVnZSkiOwogICAg
IGNhc2UgVk1fTUVNT1JZX01BTExPQ19MQVJHRTogcmV0dXJuICJtYWxsb2MgKGxhcmdlKSI7CkBA
IC0xODEsNiArMTgyLDggQEAgc3RhdGljIHVuc2lnbmVkIGNhdGVnb3J5Rm9yVk1UYWcodW5zaWdu
ZWQgdGFnKQogICAgICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdvcnk6OkltYWdlczsKICAgICBjYXNl
IFZNX01FTU9SWV9KQVZBU0NSSVBUX0pJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUjoKICAgICAgICAg
cmV0dXJuIE1lbW9yeUNhdGVnb3J5OjpKU0pJVDsKKyAgICBjYXNlIFZNX01FTU9SWV9KQVZBU0NS
SVBUX0NPUkU6CisgICAgICAgIHJldHVybiBNZW1vcnlDYXRlZ29yeTo6V2ViQXNzZW1ibHk7CiAg
ICAgY2FzZSBWTV9NRU1PUllfTUFMTE9DOgogICAgIGNhc2UgVk1fTUVNT1JZX01BTExPQ19IVUdF
OgogICAgIGNhc2UgVk1fTUVNT1JZX01BTExPQ19MQVJHRToKZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L3dlYmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9DaGFuZ2VMb2cKaW5k
ZXggNjMyMWQ1Ny4uMGQzMjFiNiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9DaGFu
Z2VMb2cKKysrIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBA
QAorMjAxNy0wNC0xMSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgV2ViQXNzZW1ibHk6IG1hbmFnZSBtZW1vcnkgYmV0dGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2MjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJl
c2VudGF0aW9uLmh0bWw6IHR5cG9zCisKIDIwMTctMDQtMDYgIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBicm9rZW4gbGluay4KZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbCBi
L1dlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24u
aHRtbAppbmRleCAyMGI1OWI1Li5hZGEwMmE3IDEwMDY0NAotLS0gYS9XZWJzaXRlcy93ZWJraXQu
b3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwKKysrIGIvV2Vic2l0
ZXMvd2Via2l0Lm9yZy9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCkBA
IC02NTQsMTEgKzY1NCwxMyBAQCBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICA8ZGQ+
U3BlY2lhbCBXYXNtIG9wY29kZS4gVGhpcyBicmFuY2hlcyBvbiB0aGUgZmlyc3QgY2hpbGQuIElm
IHRoZSBmaXJzdCBjaGlsZCBwbHVzIHRoZSBvZmZzZXQKICAgICAgICAgcHJvZHVjZXMgYSBJbnQ2
NCBsZXNzIHRoYW4gdG8gdGhlIHBpbm5lZEdQUiB0aGlzIGZhbGxzIHRocm91Z2guIE90aGVyd2lz
ZSwgaXQgYnJhbmNoZXMgdG8KICAgICAgICAgdGhlIGV4aXQgcGF0aCBnZW5lcmF0ZWQgYnkgdGhl
IHBhc3NlZCBnZW5lcmF0b3IuIFVubGlrZSB0aGUgUGF0Y2gvQ2hlY2sgZmFtaWx5LCB0aGUKLSAg
ICAgICAgZ2VuZXJhdG9yIHVzZWQgYnkgV2FzbUJvdW5kc0NoZWNrIHNvdWxkIGJlIHNldCBvbiB0
aGUgUHJvY3VkZXIgaXRzZWxmLiBUaGUgR1JQUmVnIHBhc3NlZCBpbgotICAgICAgICBwaW5uZWRH
UFIgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBwaW5uZWQgYnkgY2FsbGluZyB0aGUgUHJvY2VkdXJl
J3MgcGlubmluZyBBUEkuIEIzIGFzc3VtZXMKLSAgICAgICAgdGhlIFdhc21Cb3VuZHNDaGVjayB3
aWxsIHNpZGUtZXhpdCB3aGVuIHRoZSBpdCBicmFuY2hlcywgc28gdGhlIGdlbmVyYXRvciBtdXN0
IGRvIHNvbWUga2luZAotICAgICAgICBvZiB0ZXJtaW5hdGlvbi4gSW4gV2FzbSB0aGlzIGlzIHVz
ZWQgdG8gdHJhcCBhbmQgdW53aW5kIGJhY2sgdG8gSlMuIE11c3QgdXNlIHRoZQotICAgICAgICBX
YXNtQm91bmRzQ2hlY2tWYWx1ZSBjbGFzcy48L2RkPgorICAgICAgICBnZW5lcmF0b3IgdXNlZCBi
eSBXYXNtQm91bmRzQ2hlY2sgc2hvdWxkIGJlIHNldCBvbiB0aGUgUHJvY2VkdXJlIGl0c2VsZi4g
VGhlIEdSUFJlZyBwYXNzZWQgaW4KKyAgICAgICAgcGlubmVkR1BSIG11c3QgYWxzbyBiZSBtYXJr
ZWQgYXMgcGlubmVkIGJ5IGNhbGxpbmcgdGhlIFByb2NlZHVyZSdzIHBpbm5pbmcgQVBJLCBvciBp
dCBtdXN0IGJlCisgICAgICAgIEludmFsaWRHUFIgaW4gd2hpY2ggY2FzZSB0aGUgb3V0LW9mLWJv
dW5kcyBsaW1pdCBpcyA0R2lCLiBJbiB0aGUgbGF0ZXIgY2FzZSBhIG1heGltdW0gcGFyYW1ldGVy
CisgICAgICAgIGNhbiBiZSBwcm92aWRlZCwgdG8gZnVydGhlciBjb25zdHJhaW4gdGhlIG91dC1v
Zi1ib3VuZHMgbGltaXQgYW5kIGhlbHAgZ2VuZXJhdGUgc21hbGxlcgorICAgICAgICBpbW1lZGlh
dGVzLiBCMyBhc3N1bWVzIHRoZSBXYXNtQm91bmRzQ2hlY2sgd2lsbCBzaWRlLWV4aXQgd2hlbiBp
dCBicmFuY2hlcywgc28gdGhlIGdlbmVyYXRvcgorICAgICAgICBtdXN0IGRvIHNvbWUga2luZCBv
ZiB0ZXJtaW5hdGlvbi4gSW4gV2FzbSB0aGlzIGlzIHVzZWQgdG8gdHJhcCBhbmQgdW53aW5kIGJh
Y2sgdG8gSlMuIE11c3QgdXNlCisgICAgICAgIHRoZSBXYXNtQm91bmRzQ2hlY2tWYWx1ZSBjbGFz
cy48L2RkPgogCiAgICAgICA8ZHQ+Vm9pZCBVcHNpbG9uKFQsIF5waGkpPC9kdD4KICAgICAgIDxk
ZD5CMyB1c2VzIFNTQS4gIFNTQSByZXF1aXJlcyB0aGF0IGVhY2ggdmFyaWFibGUgZ2V0cyBhc3Np
Z25lZCB0byBvbmx5IG9uY2UgYW55d2hlcmUgaW4KLS0gCjIuMTAuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306933</attachid>
            <date>2017-04-12 14:12:06 -0700</date>
            <delta_ts>2017-04-13 14:00:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-fast-memories-everywhere.patch</filename>
            <type>text/plain</type>
            <size>100123</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA3NDdiNGY3NjhjNDA1YWFkZTMyYmVjY2M2ZDczMzFmMGViOGJiZWY2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDYgQXByIDIwMTcgMTU6MTQ6NDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBmYXN0LW1l
bW9yaWVzLWV2ZXJ5d2hlcmUKCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMzAgKysKIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICstCiBKU1Rlc3RzL3dhc20vV0FTTS5qcyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMCArKwogLi4uL3dhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMgfCAxMzAgKysrKysrCiBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanMgICAgICAgICB8ICAxOCArCiBKU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQuanMgICB8IDExNyArKysrKwogSlNU
ZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcyAgICAgICAgfCAgMTUgKwog
SlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYg
KwogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAx
NDUgKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgICAg
ICAgICAgfCAgMzQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcCAg
ICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAg
ICAgICAgICAgICAgICB8ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuY3BwICAgfCAgMjEgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dh
c21Cb3VuZHNDaGVja1ZhbHVlLmggIHwgIDE0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckN1c3RvbS5jcHAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwICAgICAgICAgICAgICAgIHwgIDMxICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmggICAgICAgICAgICAgICAgICB8ICAxMyArCiAuLi4vSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgICAgICAgICAgfCAgIDkgKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDYgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgIDQ2
ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCB8
ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAg
ICAgfCA0NzUgKysrKysrKysrKysrKystLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmggICAgICAgICAgICB8ICAyNSArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcCAgICAgICAgICAgICAgfCAgIDggKy0KIC4uLi9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgICAxICsKIC4uLi9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIHwgICA0ICsKIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIwICsKIFNvdXJjZS9X
VEYvd3RmL09TQWxsb2NhdG9yLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxIC0KIFNvdXJj
ZS9XVEYvd3RmL1ZNVGFncy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICstCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyNiAr
KwogU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAgICAgICAgICAgfCAg
IDMgKy0KIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuaCAgICAgICAgICAg
IHwgIDE1ICstCiAuLi4vcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tICAg
ICAgICB8ICAgMyArLQogLi4uL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFk
Q29jb2EubW0gfCAgIDUgKy0KIFdlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgIHwgICA5ICsKIC4uLi9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRh
dGlvbi5odG1sICAgICAgIHwgIDEyICstCiAzOCBmaWxlcyBjaGFuZ2VkLCAxMDk1IGluc2VydGlv
bnMoKyksIDIyNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQu
anMKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGVlZjlmYzAuLjkwYTRiN2EgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTctMDQtMTEgIEpGIEJhc3Rp
ZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBtYW5hZ2Ug
bWVtb3J5IGJldHRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwNjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3YXNtL0J1aWxkZXIuanM6IG1vdmUgYSBoZWxwZXIgb3V0IHNvIHRlc3RzIGNhbiB1
c2UgaXQKKyAgICAgICAgKGV4cG9ydC5kZWZhdWx0LkJ1aWxkZXIucHJvdG90eXBlLl9yZWdpc3Rl
clNlY3Rpb25CdWlsZGVycy5jb25zdC5zZWN0aW9uLmluLldBU00uZGVzY3JpcHRpb24uc2VjdGlv
bi5zd2l0Y2guc2VjdGlvbi5jYXNlLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRoaXMuc2VjdGlvbik6
CisgICAgICAgICogd2FzbS9XQVNNLmpzOiBhZGQgdXRpbGl0aWVzIHRvIGNsYXNzaWZ5IG9wY29k
ZXMKKyAgICAgICAgKGV4cG9ydC5vcGNvZGVzKToKKyAgICAgICAgKGV4cG9ydC5jb25zdC5tZW1v
cnlBY2Nlc3NJbmZvLm9wLmNvbnN0LnNpZ24pOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanM6IEFkZGVkLiBUaGlzIHRlc3QKKyAgICAgICAg
ZmFpbHMgYmVmb3JlIHRoaXMgcGF0Y2guCisgICAgICAgIChjb25zdC5vcC5vZi5XQVNNLm9wY29k
ZXMpOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanM6IEFkZGVk
LiBUaGlzIHNpbXBsZSB0ZXN0cworICAgICAgICBqdXN0IHNob3VsZG4ndCBjcmFzaC4gSW4gdmVy
Ym9zZSBtb2RlIGl0J3MgdXNlZnVsIGF0IGRldGVybWluaW5nCisgICAgICAgIGlmIHRoZSBHQyBm
YWxscyBiZWhpbmQgb3Igbm90LgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5
LW11bHRpYWdlbnQuanM6IEFkZGVkLiBFbXVsYXRlIHBvc3RNZXNzYWdlLgorICAgICAgICAoY29u
c3Quc3RhcnRBZ2VudHMubnVtQWdlbnRzVG9TdGFydC5hLmFnZW50LnJlY2VpdmVCcm9hZGNhc3Qp
OgorICAgICAgICAoY29uc3Quc3RhcnRBZ2VudHMubnVtQWdlbnRzVG9TdGFydC5hLndyaXRlLmNv
bnN0LmlkeC5NYXRoLnJhbmRvbSk6CisgICAgICAgIChjb25zdC5icm9hZGNhc3RUb0FnZW50cyk6
CisgICAgICAgICogd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanM6IHZlcmJvc2Ug
bG9nZ2luZy4KKyAgICAgICAgKHRlc3RNZW1vcnlOb01heCk6CisgICAgICAgICh0ZXN0TWVtb3J5
KToKKyAgICAgICAgKHRlc3RJbnN0YW5jZU5vTWVtb3J5KToKKyAgICAgICAgKHRlc3RJbnN0YW5j
ZU5vTWF4KToKKyAgICAgICAgKHRlc3RJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS91dGlsaXRp
ZXMuanM6IG1vdmUgYSB1dGlsaXR5IGhlcmUuCisKIDIwMTctMDQtMDYgIE1pY2hhZWwgU2Fib2Zm
ICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2Fubm90IE9iamVjdC5zZWFsKCkgb3Ig
T2JqZWN0LmZyZWV6ZSgpIGdsb2JhbCAidGhpcyIKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9C
dWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKaW5kZXggOGZmNWRjZS4uZGVlNzg2
ZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKKysrIGIvSlNUZXN0cy93YXNt
L0J1aWxkZXIuanMKQEAgLTI3LDEyICsyNyw3IEBAIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdh
c3NlcnQuanMnOwogaW1wb3J0ICogYXMgQnVpbGRXZWJBc3NlbWJseSBmcm9tICdCdWlsZGVyX1dl
YkFzc2VtYmx5QmluYXJ5LmpzJzsKIGltcG9ydCAqIGFzIExMQiBmcm9tICdMb3dMZXZlbEJpbmFy
eS5qcyc7CiBpbXBvcnQgKiBhcyBXQVNNIGZyb20gJ1dBU00uanMnOwotCi1jb25zdCBfdG9KYXZh
U2NyaXB0TmFtZSA9IG5hbWUgPT4gewotICAgIGNvbnN0IGNhbWVsQ2FzZSA9IG5hbWUucmVwbGFj
ZSgvKFteYS16MC05XS4pL2csIGMgPT4gY1sxXS50b1VwcGVyQ2FzZSgpKTsKLSAgICBjb25zdCBD
YW1lbENhc2UgPSBjYW1lbENhc2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjYW1lbENhc2Uu
c2xpY2UoMSk7Ci0gICAgcmV0dXJuIENhbWVsQ2FzZTsKLX07CitpbXBvcnQgKiBhcyB1dGlsIGZy
b20gJ3V0aWxpdGllcy5qcyc7CiAKIGNvbnN0IF9pc1ZhbGlkVmFsdWUgPSAodmFsdWUsIHR5cGUp
ID0+IHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTIyNSw3ICsyMjAsNyBAQCBjb25zdCBfaW1w
b3J0R2xvYmFsQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9
PiB7CiAgICAgICAgICAgICBFbmQ6ICgpID0+IG5leHRCdWlsZGVyCiAgICAgICAgIH07CiAgICAg
ICAgIGZvciAobGV0IG9wIG9mIFdBU00uZGVzY3JpcHRpb24udmFsdWVfdHlwZSkgewotICAgICAg
ICAgICAgZ2xvYmFsQnVpbGRlcltfdG9KYXZhU2NyaXB0TmFtZShvcCldID0gKG1vZHVsZSwgZmll
bGQsIG11dGFiaWxpdHkpID0+IHsKKyAgICAgICAgICAgIGdsb2JhbEJ1aWxkZXJbdXRpbC50b0ph
dmFTY3JpcHROYW1lKG9wKV0gPSAobW9kdWxlLCBmaWVsZCwgbXV0YWJpbGl0eSkgPT4gewogICAg
ICAgICAgICAgICAgIGFzc2VydC5pc1N0cmluZyhtb2R1bGUsIGBJbXBvcnQgZ2xvYmFsIG1vZHVs
ZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOwogICAgICAgICAgICAgICAg
IGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEltcG9ydCBnbG9iYWwgZmllbGQgc2hvdWxkIGJlIGEg
c3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOwogICAgICAgICAgICAgICAgIGFzc2VydC5pc1N0cmlu
ZyhtdXRhYmlsaXR5LCBgSW1wb3J0IGdsb2JhbCBtdXRhYmlsaXR5IHNob3VsZCBiZSBhIHN0cmlu
ZywgZ290ICIke211dGFiaWxpdHl9ImApOwpAQCAtMzE4LDcgKzMxMyw3IEBAIGNvbnN0IF9jaGVj
a0ltbXMgPSAob3AsIGltbXMsIGV4cGVjdGVkSW1tcywgcmV0KSA9PiB7CiBjb25zdCBfY3JlYXRl
RnVuY3Rpb25CdWlsZGVyID0gKGZ1bmMsIGJ1aWxkZXIsIHByZXZpb3VzQnVpbGRlcikgPT4gewog
ICAgIGxldCBmdW5jdGlvbkJ1aWxkZXIgPSB7fTsKICAgICBmb3IgKGNvbnN0IG9wIGluIFdBU00u
ZGVzY3JpcHRpb24ub3Bjb2RlKSB7Ci0gICAgICAgIGNvbnN0IG5hbWUgPSBfdG9KYXZhU2NyaXB0
TmFtZShvcCk7CisgICAgICAgIGNvbnN0IG5hbWUgPSB1dGlsLnRvSmF2YVNjcmlwdE5hbWUob3Ap
OwogICAgICAgICBjb25zdCB2YWx1ZSA9IFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlW29wXS52YWx1
ZTsKICAgICAgICAgY29uc3QgcmV0ID0gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbb3BdWyJyZXR1
cm4iXTsKICAgICAgICAgY29uc3QgcGFyYW0gPSBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF0u
cGFyYW1ldGVyOwpAQCAtNTQyLDcgKzUzNyw3IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxk
ZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Owog
ICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBvcCBvZiBXQVNNLmRlc2NyaXB0aW9uLnZhbHVl
X3R5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEJ1aWxkZXJbX3RvSmF2YVNj
cmlwdE5hbWUob3ApXSA9IChpbml0VmFsdWUsIG11dGFiaWxpdHkpID0+IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdsb2JhbEJ1aWxkZXJbdXRpbC50b0phdmFTY3JpcHROYW1lKG9wKV0gPSAo
aW5pdFZhbHVlLCBtdXRhYmlsaXR5KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cy5kYXRhLnB1c2goeyB0eXBlOiBvcCwgb3A6IG9wICsgIi5jb25zdCIsIG11dGFiaWxpdHk6IF9u
b3JtYWxpemVNdXRhYmlsaXR5KG11dGFiaWxpdHkpLCBpbml0VmFsdWUgfSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlGb3IoZ2xvYmFsQnVp
bGRlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtL1dBU00uanMgYi9KU1Rlc3RzL3dhc20vV0FTTS5qcwppbmRleCAxYmI3OWI4Li4xZTY0Y2Fl
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vV0FTTS5qcworKysgYi9KU1Rlc3RzL3dhc20vV0FT
TS5qcwpAQCAtNDQsMyArNDQsMzMgQEAgZXhwb3J0IGNvbnN0IGlzVmFsaWRCbG9ja1R5cGUgPSB2
ID0+IF9ibG9ja1R5cGVTZXQuaGFzKHYpOwogZXhwb3J0IGNvbnN0IGV4dGVybmFsS2luZFZhbHVl
ID0gX21hcFZhbHVlcyhkZXNjcmlwdGlvbi5leHRlcm5hbF9raW5kKTsKIGV4cG9ydCBjb25zdCBz
ZWN0aW9ucyA9IE9iamVjdC5rZXlzKGRlc2NyaXB0aW9uLnNlY3Rpb24pOwogZXhwb3J0IGNvbnN0
IHNlY3Rpb25FbmNvZGluZ1R5cGUgPSBkZXNjcmlwdGlvbi5zZWN0aW9uW3NlY3Rpb25zWzBdXS50
eXBlOworCitleHBvcnQgZnVuY3Rpb24qIG9wY29kZXMoY2F0ZWdvcnkgPSB1bmRlZmluZWQpIHsK
KyAgICBmb3IgKGxldCBvcCBpbiBkZXNjcmlwdGlvbi5vcGNvZGUpCisgICAgICAgIGlmIChjYXRl
Z29yeSAhPT0gdW5kZWZpbmVkICYmIGRlc2NyaXB0aW9uLm9wY29kZVtvcF0uY2F0ZWdvcnkgPT09
IGNhdGVnb3J5KQorICAgICAgICAgICAgeWllbGQgeyBuYW1lOiBvcCwgb3Bjb2RlOiBkZXNjcmlw
dGlvbi5vcGNvZGVbb3BdIH07Cit9OworZXhwb3J0IGNvbnN0IG1lbW9yeUFjY2Vzc0luZm8gPSBv
cCA9PiB7CisgICAgLy8gICAgICAgICAgICAgICAgPC0tLS0tLS0tLS0tdmFsdWVUeXBlLS0tLS0t
LS0tLS0+ICA8LS0tLS0tLXR5cGUtLS0tLS0tPjwtLS0tLS0tLS13aWR0aC0tLS0tLS0tPiAgPC0t
c2lnbi0tPgorICAgIGNvbnN0IGNsYXNzaWZ5ID0gLygoPzppMzIpfCg/Omk2NCl8KD86ZjMyKXwo
PzpmNjQpKVwuKCg/OmxvYWQpfCg/OnN0b3JlKSkoKD86OCk/fCg/OjE2KT98KD86MzIpPylfPygo
PzpzfHUpPykvOworICAgIGNvbnN0IGZvdW5kID0gb3AubmFtZS5tYXRjaChjbGFzc2lmeSk7Cisg
ICAgY29uc3QgdmFsdWVUeXBlID0gZm91bmRbMV07CisgICAgY29uc3QgdHlwZSA9IGZvdW5kWzJd
OworICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQoZm91bmRbM10gPyBmb3VuZFszXSA6IHZhbHVl
VHlwZS5zbGljZSgxKSk7CisgICAgY29uc3Qgc2lnbiA9ICgoKSA9PiB7CisgICAgICAgIHN3aXRj
aCAoZm91bmRbNF0pIHsKKyAgICAgICAgY2FzZSAicyI6IHJldHVybiAic2lnbmVkIjsKKyAgICAg
ICAgY2FzZSAidSI6IHJldHVybiAidW5zaWduZWQiOworICAgICAgICBkZWZhdWx0OiByZXR1cm4g
ImFnbm9zdGljIjsKKyAgICAgICAgfQorICAgIH0pKCk7CisgICAgcmV0dXJuIHsgdmFsdWVUeXBl
LCB0eXBlLCB3aWR0aCwgc2lnbiB9OworfTsKKworZXhwb3J0IGNvbnN0IGNvbnN0Rm9yVmFsdWVU
eXBlID0gdmFsdWVUeXBlID0+IHsKKyAgICBmb3IgKGxldCBvcCBpbiBkZXNjcmlwdGlvbi5vcGNv
ZGUpCisgICAgICAgIGlmIChvcC5lbmRzV2l0aCgiLmNvbnN0IikgJiYgZGVzY3JpcHRpb24ub3Bj
b2RlW29wXVsicmV0dXJuIl0gPT0gdmFsdWVUeXBlKQorICAgICAgICAgICAgcmV0dXJuIG9wOwor
ICAgIHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogbm8gY29uc3QgdHlw
ZSBmb3IgJHt2YWx1ZVR5cGV9YCk7Cit9OworCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMgYi9KU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDFhNWYwMwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2Fz
bS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcwpAQCAtMCwwICsxLDEz
MCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CitpbXBvcnQgKiBhcyBh
c3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCAqIGFzIExMQiBmcm9tICcuLi9Mb3dM
ZXZlbEJpbmFyeS5qcyc7CitpbXBvcnQgKiBhcyBXQVNNIGZyb20gJy4uL1dBU00uanMnOworaW1w
b3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsaXRpZXMuanMnOworCitjb25zdCB2ZXJib3NlID0g
ZmFsc2U7CisKK2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0OworY29uc3QgZm91ckdpQiA9IHBh
Z2VTaXplICogNjU1MzY7Citjb25zdCBpbml0aWFsID0gNjQ7Citjb25zdCBtYXhpbXVtID0gMTI4
OworCisvLyBXaGVuIHVzaW5nIGZhc3QgbWVtb3JpZXMsIHdlIGFsbG9jYXRlIGEgcmVkem9uZSBh
ZnRlciB0aGUgNEdpQiBodWdlCisvLyBhbGxvY2F0aW9uLiBUaGlzIHJlZHpvbmUgaXMgdXNlZCB0
byB0cmFwIHJlZytpbW0gYWNjZXNzZXMgd2hpY2ggZXhjZWVkCisvLyAzMi1iaXRzLiBBbnl0aGlu
ZyBwYXN0IDRHaUIgbXVzdCB0cmFwLCBidXQgd2UgY2Fubm90IGtub3cgc3RhdGljYWxseSB0aGF0
IGl0CisvLyB3aWxsLgorCitjb25zdCBvZmZzZXRzID0gWworICAgIDAsCisgICAgMSwKKyAgICAy
LAorICAgIDEwMjQsCisgICAgcGFnZVNpemUsCisgICAgcGFnZVNpemUgKyBwYWdlU2l6ZSAvIDIs
CisgICAgcGFnZVNpemUgKiA4LAorICAgIHBhZ2VTaXplICogMTYsCisgICAgcGFnZVNpemUgKiAx
MjgsCisgICAgcGFnZVNpemUgKiA1MTIsCisgICAgZm91ckdpQiAvIDQgLSA0LAorICAgIGZvdXJH
aUIgLyA0IC0gMywKKyAgICBmb3VyR2lCIC8gNCAtIDIsCisgICAgZm91ckdpQiAvIDQgLSAxLAor
ICAgIGZvdXJHaUIgLyA0LAorICAgIGZvdXJHaUIgLyA0ICsgMSwKKyAgICBmb3VyR2lCIC8gNCAr
IDIsCisgICAgZm91ckdpQiAvIDQgKyAzLAorICAgIGZvdXJHaUIgLyA0ICsgNCwKKyAgICBmb3Vy
R2lCIC8gMiAtIDQsCisgICAgZm91ckdpQiAvIDIgLSAzLAorICAgIGZvdXJHaUIgLyAyIC0gMiwK
KyAgICBmb3VyR2lCIC8gMiAtIDEsCisgICAgZm91ckdpQiAvIDIsCisgICAgZm91ckdpQiAvIDIg
KyAxLAorICAgIGZvdXJHaUIgLyAyICsgMiwKKyAgICBmb3VyR2lCIC8gMiArIDMsCisgICAgZm91
ckdpQiAvIDIgKyA0LAorICAgIChmb3VyR2lCIC8gNCkgKiAzLAorICAgIGZvdXJHaUIgLSA0LAor
ICAgIGZvdXJHaUIgLSAzLAorICAgIGZvdXJHaUIgLSAyLAorICAgIGZvdXJHaUIgLSAxLAorXTsK
KworZm9yIChsZXQgbWVtb3J5RGVjbGFyYXRpb24gb2YgW3sgaW5pdGlhbDogaW5pdGlhbCB9LCB7
IGluaXRpYWw6IGluaXRpYWwsIG1heGltdW06IG1heGltdW0gfV0pIHsKKyAgICBmdWxsR0MoKTsK
KworICAgIC8vIFJlLXVzZSBhIHNpbmdsZSBtZW1vcnkgc28gdGVzdHMgYXJlIG1vcmUgbGlrZWx5
IHRvIGdldCBhIGZhc3QgbWVtb3J5LgorICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJs
eS5NZW1vcnkobWVtb3J5RGVjbGFyYXRpb24pOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBw
cmludChXZWJBc3NlbWJseU1lbW9yeU1vZGUobWVtb3J5KSk7CisgICAgY29uc3QgYnVmID0gbmV3
IFVpbnQ4QXJyYXkobWVtb3J5LmJ1ZmZlcik7CisKKyAgICAvLyBFbnVtZXJhdGUgYWxsIG1lbW9y
eSBhY2Nlc3MgdHlwZXMuCisgICAgZm9yIChjb25zdCBvcCBvZiBXQVNNLm9wY29kZXMoIm1lbW9y
eSIpKSB7CisgICAgICAgIGNvbnN0IGluZm8gPSBXQVNNLm1lbW9yeUFjY2Vzc0luZm8ob3ApOwor
CisgICAgICAgIC8vIFRoZSBhY2Nlc3NlcyBzaG91bGQgZmF1bHQgZXZlbiBpZiBvbmx5IHRoZSBs
YXN0IGJ5dGUgaXMgb2ZmIHRoZSBlbmQuCisgICAgICAgIGxldCB3aWdnbGVzID0gWzBdOworICAg
ICAgICBmb3IgKGxldCB3aWdnbGUgPSAwOyB3aWdnbGUgIT09IGluZm8ud2lkdGggLyA4OyArK3dp
Z2dsZSkKKyAgICAgICAgICAgIHdpZ2dsZXMucHVzaCh3aWdnbGUpOworCisgICAgICAgIGxldCBi
dWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAg
ICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5RGVjbGFyYXRp
b24pLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAgICAgLkV4
cG9ydCgpOworCisgICAgICAgIGZvciAobGV0IG9mZnNldCBvZiBvZmZzZXRzKQorICAgICAgICAg
ICAgc3dpdGNoIChpbmZvLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgImxvYWQiOiBidWlsZGVy
ID0gYnVpbGRlci5GdW5jdGlvbigiZ2V0XyIgKyBvZmZzZXQpOyBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgInN0b3JlIjogYnVpbGRlciA9IGJ1aWxkZXIuRnVuY3Rpb24oInNldF8iICsgb2Zmc2V0
KTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVu
dGF0aW9uIHByb2JsZW06IHVua25vd24gbWVtb3J5IGFjY2VzcyB0eXBlICR7aW5mby50eXBlfWAp
OworICAgICAgICAgICAgfQorCisgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLkVuZCgpLkNvZGUo
KTsKKworICAgICAgICBjb25zdCBhbGlnbiA9IDM7IC8vIE5vIG5lZWQgdG8gYmUgcHJlY2lzZSwg
aXQncyBqdXN0IGEgaGludC4KKyAgICAgICAgY29uc3QgY29uc3RJbnN0ciA9IHV0aWwudG9KYXZh
U2NyaXB0TmFtZShXQVNNLmNvbnN0Rm9yVmFsdWVUeXBlKGluZm8udmFsdWVUeXBlKSk7CisgICAg
ICAgIGNvbnN0IGluc3RyID0gdXRpbC50b0phdmFTY3JpcHROYW1lKG9wLm5hbWUpOworICAgICAg
ICBmb3IgKGxldCBvZmZzZXQgb2Ygb2Zmc2V0cykKKyAgICAgICAgICAgIHN3aXRjaCAoaW5mby50
eXBlKSB7CisgICAgICAgICAgICBjYXNlICJsb2FkIjoKKyAgICAgICAgICAgICAgICBidWlsZGVy
ID0gYnVpbGRlci5GdW5jdGlvbigiZ2V0XyIgKyBvZmZzZXQsIHsgcGFyYW1zOiBbImkzMiJdIH0p
LkdldExvY2FsKDApW2luc3RyXShhbGlnbiwgb2Zmc2V0KS5Ecm9wKCkuRW5kKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJzdG9yZSI6CisgICAgICAgICAgICAg
ICAgYnVpbGRlciA9IGJ1aWxkZXIuRnVuY3Rpb24oInNldF8iICsgb2Zmc2V0LCB7IHBhcmFtczog
WyJpMzIiXSB9KS5HZXRMb2NhbCgwKVtjb25zdEluc3RyXSgweGRlYWQpW2luc3RyXShhbGlnbiwg
b2Zmc2V0KS5FbmQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9i
bGVtOiB1bmtub3duIG1lbW9yeSBhY2Nlc3MgdHlwZSAke2luZm8udHlwZX1gKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLkVuZCgpOworCisgICAg
ICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgeyBpbXA6IHsgbWVtb3J5
OiBtZW1vcnkgfSB9KTsKKworICAgICAgICBmb3IgKGxldCBvZmZzZXQgb2Ygb2Zmc2V0cykgewor
ICAgICAgICAgICAgZm9yIChsZXQgd2lnZ2xlIG9mIHdpZ2dsZXMpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBhZGRyZXNzID0gTExCLnZhcnVpbnQzMk1heCAtIG9mZnNldCAtIHdpZ2dsZTsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCR7
b3AubmFtZS5wYWRTdGFydCgxNiwgJyAnKX06IGJhc2UgYWRkcmVzcyAke2FkZHJlc3MgPiAwID8g
JzB4JyA6ICcgICd9JHthZGRyZXNzLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBhZGRyZXNzID4g
MCA/ICcwJyA6ICcgJyl9ICsgb2Zmc2V0IDB4JHtvZmZzZXQudG9TdHJpbmcoMTYpLnBhZFN0YXJ0
KDgsICcwJyl9IC0gd2lnZ2xlICR7d2lnZ2xlfSA9IGVmZmVjdGl2ZSBhZGRyZXNzIDB4JHsoYWRk
cmVzcyArIG9mZnNldCAtIHdpZ2dsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCAnMCcpfWAp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5mby50eXBlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAibG9hZCI6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW5z
dGFuY2UuZXhwb3J0c1siZ2V0XyIgKyBvZmZzZXRdKGFkZHJlc3MpLCBXZWJBc3NlbWJseS5SdW50
aW1lRXJyb3IsIGBPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3NgKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAic3RvcmUiOgorICAgICAgICAgICAg
ICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHNbInNldF8iICsgb2Zm
c2V0XShhZGRyZXNzKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCBgT3V0IG9mIGJvdW5kcyBt
ZW1vcnkgYWNjZXNzYCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogdW5r
bm93biBtZW1vcnkgYWNjZXNzIHR5cGUgJHtpbmZvLnR5cGV9YCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVsbEdDKCk7CisgICAgfQor
CisgICAgLy8gT25seSBjaGVjayB0aGF0IHRoZSBtZW1vcnkgd2FzIHVudG91Y2hlZCBhdCB0aGUg
dmVyeSBlbmQsIGJlZm9yZSB0aHJvd2luZyBpdCBhd2F5IGVudGlyZWx5LgorICAgIGZvciAobGV0
IGlkeCA9IDA7IGlkeCA8IGJ1Zi5ieXRlTGVuZ3RoOyArK2lkeCkKKyAgICAgICAgYXNzZXJ0LmVx
KGJ1ZltpZHhdLCAwKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0
cy9tZW1vcnktbWFueS5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktbWFu
eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQzYzYyCi0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1tYW55LmpzCkBA
IC0wLDAgKzEsMTggQEAKK2NvbnN0IG1lbW9yaWVzID0gMTI4OworY29uc3QgdmVyYm9zZSA9IGZh
bHNlOworY29uc3QgaW5pdGlhbCA9IDE7CisKK2xldCB0eXBlcyA9IHt9OworCitmb3IgKGxldCBt
ID0gMDsgbSA8IG1lbW9yaWVzOyArK20pIHsKKyAgICBsZXQgbWVtb3J5ID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1lbW9yeSh7IGluaXRpYWw6IGluaXRpYWwgfSk7CisgICAgbGV0IHR5cGUgPSBXZWJBc3Nl
bWJseU1lbW9yeU1vZGUobWVtb3J5KTsKKyAgICB0eXBlc1t0eXBlXSA9IHR5cGVzW3R5cGVdID8g
dHlwZXNbdHlwZV0gKyAxIDogMTsKK30KKworaWYgKHZlcmJvc2UpIHsKKyAgICBsZXQgZ290ID0g
IkdvdDogIjsKKyAgICBmb3IgKGxldCBwIGluIHR5cGVzKQorICAgICAgICBnb3QgKz0gYCAke3R5
cGVzW3BdfTogJHtwfWA7CisgICAgcHJpbnQoZ290KTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktbXVsdGlhZ2VudC5qcyBiL0pTVGVzdHMvd2FzbS9m
dW5jdGlvbi10ZXN0cy9tZW1vcnktbXVsdGlhZ2VudC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40ZWIyZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1tdWx0aWFnZW50LmpzCkBAIC0wLDAgKzEsMTE3IEBACitjb25z
dCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKKworY29uc3QgdmVyYm9zZSA9IGZhbHNlOworCisvLyBT
dGFydCBtdWx0aXBsZSBhZ2VudHMgYW5kIGNyZWF0ZSBXZWJBc3NlbWJseS5NZW1vcnkgZnJvbSBl
YWNoIG9mCisvLyB0aGVtLiBQZXJmb3JtIHdyaXRlcyBpbnRvIGVhY2ggbWVtb3J5LCBhbmQgdGhl
biBjaGVjayB0aGF0IHRoZSBtZW1vcnkgb25seQorLy8gY29udGFpbnMgdGhhdCBhZ2VudCdzIHdy
aXRlcy4gVGhpcyB3b3VsZCBmaW5kIGJ1Z3Mgd2hlcmUgYW4gaW1wbGVtZW50YXRpb24ncworLy8g
bWVtb3J5IHJldXNlIGlzIGJ1Z2d5LgorCisvLyBVc2UgdGhlIGFnZW50IHN1cHBvcnQgZnJvbSB0
ZXN0MjYyOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2IvbWFzdGVyL0lOVEVS
UFJFVElORy5tZCNob3N0LWRlZmluZWQtZnVuY3Rpb25zCisKK2NvbnN0IHRlc3RJdGVyYXRpb25z
ID0gMjsKK2NvbnN0IG51bUFnZW50cyA9IDg7Citjb25zdCBpbml0aWFsUGFnZXMgPSA2NDsKK2Nv
bnN0IG51bVdyaXRlcyA9IDEwMjQ7CisKK2NvbnN0IHN0YXRlV2FpdCA9IDA7Citjb25zdCBzdGF0
ZVJlYWR5ID0gMTsKK2NvbnN0IHN0YXRlQ2hlY2sgPSAyOworCitjb25zdCBzdGFydEFnZW50cyA9
IG51bUFnZW50c1RvU3RhcnQgPT4geworICAgIGZvciAobGV0IGEgPSAwOyBhIDwgbnVtQWdlbnRz
VG9TdGFydDsgKythKSB7CisgICAgICAgIGNvbnN0IGFnZW50U2NyaXB0ID0gYAorICAgICAgICBs
ZXQgc3RhdGUgPSAke3N0YXRlV2FpdH07CisgICAgICAgIGxldCB1ODsKKworICAgICAgICBpZiAo
JHt2ZXJib3NlfSkKKyAgICAgICAgICAgIHByaW50KCJBZ2VudCAke2F9IHN0YXJ0ZWQiKTsKKyAg
ICAgICAgJC5hZ2VudC5yZXBvcnQoIkFnZW50ICR7YX0gc3RhcnRlZCIpOworCisgICAgICAgICQu
YWdlbnQucmVjZWl2ZUJyb2FkY2FzdCgoc2FiLCBuZXdTdGF0ZSkgPT4geworICAgICAgICAgICAg
aWYgKCR7dmVyYm9zZX0pCisgICAgICAgICAgICAgICAgcHJpbnQoIkFnZW50ICR7YX0gcmVjZWl2
ZWQgYnJvYWRjYXN0Iik7CisgICAgICAgICAgICB1OCA9IG5ldyBVaW50OEFycmF5KHNhYik7Cisg
ICAgICAgICAgICBzdGF0ZSA9IG5ld1N0YXRlOworICAgICAgICB9KTsKKworICAgICAgICBjb25z
dCBidXN5V2FpdEZvclZhbHVlID0gdmFsdWUgPT4geworICAgICAgICAgICAgLy8gQnVzeS13YWl0
IHNvIHRoYXQgb25jZSB0aGUgU0FCIHdyaXRlIG9jY3VycyBhbGwgYWdlbnRzIHRyeSB0byBjcmVh
dGUgYSBtZW1vcnkgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIHdoaWxlIChBdG9taWNz
LmxvYWQodTgsIDApICE9PSB2YWx1ZSkgOworICAgICAgICB9OworCisgICAgICAgIGlmICgke3Zl
cmJvc2V9KQorICAgICAgICAgICAgcHJpbnQoIkFnZW50ICR7YX0gd2FpdHMiKTsKKyAgICAgICAg
JC5hZ2VudC5yZXBvcnQoIkFnZW50ICR7YX0gd2FpdHMiKTsKKyAgICAgICAgd2hpbGUgKHN0YXRl
ID09PSAke3N0YXRlV2FpdH0pIDsKKyAgICAgICAgJC5hZ2VudC5yZXBvcnQoIkFnZW50ICR7YX0g
cmVjZWl2ZWQgU0FCIik7CisgICAgICAgIC8vIFVzZSBpdCBmb3IgZmFzdGVyIHN0YXRlIGNoYW5n
ZSBzbyBhbGwgYWdlbnRzIGFyZSBtb3JlIGxpa2VseSB0byBleGVjdXRlIGF0IHRoZSBzYW1lIHRp
bWUuCisgICAgICAgIGJ1c3lXYWl0Rm9yVmFsdWUoJHtzdGF0ZVJlYWR5fSk7CisKKyAgICAgICAg
bGV0IHdhc21NZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogJHtpbml0
aWFsUGFnZXN9IH0pOworICAgICAgICBsZXQgbWVtb3J5ID0gbmV3IFVpbnQ4QXJyYXkoKHdhc21N
ZW1vcnkpLmJ1ZmZlcik7CisgICAgICAgIGlmICgke3ZlcmJvc2V9KQorICAgICAgICAgICAgcHJp
bnQoIkFnZW50ICR7YX0gcGVyZm9ybWluZyB3cml0ZXMiKTsKKyAgICAgICAgZm9yIChsZXQgd3Jp
dGUgPSAwOyB3cml0ZSA8ICR7bnVtV3JpdGVzfTsgKyt3cml0ZSkgeworICAgICAgICAgICAgLy8g
UGVyZm9ybSB3cml0ZXMgb2Ygb3VyIGFnZW50IG51bWJlciBhdCBhIHJhbmRvbSBsb2NhdGlvbi4g
VGhpcyBtZW1vcnkgc2hvdWxkIG5vdCBiZSBzaGFyZWQsIGlmIHdlIHNlZSB3cml0ZXMgb2Ygb3Ro
ZXIgdmFsdWVzIHRoZW4gc29tZXRoaW5nIHdlbnQgd3JvbmcuCisgICAgICAgICAgICBjb25zdCBp
ZHggPSAoTWF0aC5yYW5kb20oKSAqICR7cGFnZVNpemV9ICogJHtpbml0aWFsUGFnZXN9KSB8IDA7
CisgICAgICAgICAgICBtZW1vcnlbaWR4XSA9ICR7YX07CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCR7dmVyYm9zZX0pCisgICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSB3cml0ZXMgcGVyZm9y
bWVkIik7CisgICAgICAgICQuYWdlbnQucmVwb3J0KCJBZ2VudCAke2F9IHBlcmZvcm1lZCB3cml0
ZXMiKTsKKyAgICAgICAgYnVzeVdhaXRGb3JWYWx1ZSgke3N0YXRlQ2hlY2t9KTsKKworICAgICAg
ICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAgICAgIHByaW50KCJBZ2VudCAke2F9IGNoZWNraW5n
Iik7CisgICAgICAgIC8vIENoZWNrIHRoYXQgb3VyIG1lbW9yeSBvbmx5IGNvbnRhaW5zIDAgYW5k
IG91ciBhZ2VudCBudW1iZXIuCisgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8ICR7cGFn
ZVNpemV9ICogJHtpbml0aWFsUGFnZXN9OyArK2lkeCkKKyAgICAgICAgICAgIGlmIChtZW1vcnlb
aWR4XSAhPT0gMCAmJiBtZW1vcnlbaWR4XSAhPT0gJHthfSkKKyAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkFnZW50ICR7YX0gZm91bmQgdW5leHBlY3RlZCB2YWx1ZSAiICsgbWVtb3J5
W2lkeF0gKyAiIGF0IGxvY2F0aW9uICIgKyBpZHgpOworICAgICAgICAkLmFnZW50LnJlcG9ydCgi
QWdlbnQgJHthfSBjaGVja3Mgb3V0IE9LIik7CisgICAgICAgICQuYWdlbnQubGVhdmluZygpOwor
ICAgICAgICBgOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgcHJpbnQoYFN0
YXJ0aW5nIGFnZW50ICR7YX1gKTsKKyAgICAgICAgJC5hZ2VudC5zdGFydChhZ2VudFNjcmlwdCk7
CisgICAgfQorfTsKKworY29uc3Qgd2FpdEZvckFnZW50cyA9IG51bUFnZW50c1RvV2FpdEZvciA9
PiB7CisgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBudW1BZ2VudHNUb1dhaXRGb3I7ICsrYSkgewor
ICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgY29uc3QgcmVwb3J0ID0gJC5hZ2Vu
dC5nZXRSZXBvcnQoKTsKKyAgICAgICAgICAgIGlmIChyZXBvcnQgPT09IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICAkLmFnZW50LnNsZWVwKDEpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
cHJpbnQoYFJlY2VpdmVkOiAke3JlcG9ydH1gKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorfTsKKworY29uc3QgYnJvYWRjYXN0VG9BZ2VudHMgPSAoc2FiLCBuZXdTdGF0
ZSkgPT4geworICAgICQuYWdlbnQuYnJvYWRjYXN0KHNhYiwgbmV3U3RhdGUpOworfTsKKworY29u
c3Qgc2FiID0gbmV3IFNoYXJlZEFycmF5QnVmZmVyKDEwMjQpOworY29uc3QgdTggPSBuZXcgVWlu
dDhBcnJheShzYWIpOworCitmb3IgKGxldCBpdCA9IDA7IGl0IDwgdGVzdEl0ZXJhdGlvbnM7ICsr
aXQpIHsKKyAgICBzdGFydEFnZW50cyhudW1BZ2VudHMpOworICAgIHdhaXRGb3JBZ2VudHMobnVt
QWdlbnRzKTsKKyAgICBicm9hZGNhc3RUb0FnZW50cyhzYWIsIHN0YXRlUmVhZHkpOworICAgIHdh
aXRGb3JBZ2VudHMobnVtQWdlbnRzKTsKKyAgICAkLmFnZW50LnNsZWVwKDEpOworICAgIEF0b21p
Y3Muc3RvcmUodTgsIDAsIHN0YXRlUmVhZHkpOworICAgIHdhaXRGb3JBZ2VudHMobnVtQWdlbnRz
KTsKKyAgICAkLmFnZW50LnNsZWVwKDEpOworICAgIEF0b21pY3Muc3RvcmUodTgsIDAsIHN0YXRl
Q2hlY2spOworICAgIHdhaXRGb3JBZ2VudHMobnVtQWdlbnRzKTsKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgcHJpbnQoIkV2ZXJ5dGluZyB3YXMgZmluZSIpOworICAgICQuYWdlbnQuc2xlZXAo
MSk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL2V4dGVuc2lvbi1NZW1vcnlN
b2RlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcwppbmRl
eCA5MTkxY2VjNC4uNTYwODUyNiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRl
bnNpb24tTWVtb3J5TW9kZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2V4dGVuc2lvbi1N
ZW1vcnlNb2RlLmpzCkBAIC0yLDYgKzIsNyBAQCBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWls
ZGVyLmpzJzsKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOwogCiBjb25z
dCBpdGVyYXRpb25zID0gMzI7Citjb25zdCB2ZXJib3NlID0gZmFsc2U7CiAKIC8vIFRoaXMgQVBJ
IGlzbid0IHBhcnQgb2YgV2ViQXNzZW1ibHkncyBvZmZpY2lhbCBzcGVjLiBJdCBpcyB1c2UgZm9y
IHRlc3Rpbmcgd2l0aGluIHRoZSBzaGVsbC4KIApAQCAtMjEsNiArMjIsOCBAQCBhc3NlcnQudGhy
b3dzKCgpID0+IFdlYkFzc2VtYmx5TWVtb3J5TW9kZShuZXcgV2ViQXNzZW1ibHkuVGFibGUoe2lu
aXRpYWw6IDEsIGVsZQogCiBjb25zdCB2YWxpZGF0ZU1vZGUgPSB3aGF0ID0+IHsKICAgICBjb25z
dCBtb2RlID0gV2ViQXNzZW1ibHlNZW1vcnlNb2RlKHdoYXQpOworICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBwcmludChgICAgICR7bW9kZX1gKTsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBj
YXNlICJTaWduYWxpbmciOgogICAgICAgICBicmVhazsKQEAgLTM5LDYgKzQyLDggQEAgY29uc3Qg
aW5zdGFudGlhdGUgPSBidWlsZGVyID0+IHsKIH07CiAKIChmdW5jdGlvbiB0ZXN0TWVtb3J5Tm9N
YXgoKSB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGB0ZXN0TWVtb3J5Tm9NYXhg
KTsKICAgICBsZXQgbWVtb3JpZXMgPSBbXTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBpdGVy
YXRpb25zOyArK2kpCiAgICAgICAgIG1lbW9yaWVzLnB1c2godmFsaWRhdGVNb2RlKG5ldyBXZWJB
c3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiBpIH0pKSk7CkBAIC00OCw2ICs1Myw4IEBAIGNvbnN0
IGluc3RhbnRpYXRlID0gYnVpbGRlciA9PiB7CiBmdWxsR0MoKTsKIAogKGZ1bmN0aW9uIHRlc3RN
ZW1vcnkoKSB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGB0ZXN0TWVtb3J5YCk7
CiAgICAgbGV0IG1lbW9yaWVzID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0
aW9uczsgKytpKQogICAgICAgICBtZW1vcmllcy5wdXNoKHZhbGlkYXRlTW9kZShuZXcgV2ViQXNz
ZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogaSwgbWF4aW11bTogaSB9KSkpOwpAQCAtNTcsNiArNjQs
OCBAQCBmdWxsR0MoKTsKIGZ1bGxHQygpOwogCiAoZnVuY3Rpb24gdGVzdEluc3RhbmNlTm9NZW1v
cnkoKSB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGB0ZXN0SW5zdGFuY2VOb01l
bW9yeWApOwogICAgIGxldCBpbnN0YW5jZXMgPSBbXTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAh
PSBpdGVyYXRpb25zOyArK2kpIHsKICAgICAgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRl
cigpKQpAQCAtNjYsNiArNzUsOCBAQCBmdWxsR0MoKTsKICAgICAgICAgY29uc3QgaW5zdGFuY2Ug
PSBpbnN0YW50aWF0ZShidWlsZGVyKTsKICAgICAgICAgLy8gTm8tbWVtb3J5IGluc3RhbmNlcyBz
aG91bGQgbmV2ZXIgYmUgU2lnbmFsaW5nOiBpdCB3b3VsZCBiZSB3YXN0ZWZ1bC4KICAgICAgICAg
YXNzZXJ0LmVxKFdlYkFzc2VtYmx5TWVtb3J5TW9kZShpbnN0YW5jZSksICJCb3VuZHNDaGVja2lu
ZyIpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIHByaW50KGAgICAgJHtXZWJB
c3NlbWJseU1lbW9yeU1vZGUoaW5zdGFuY2UpfWApOwogICAgICAgICBpbnN0YW5jZXMucHVzaChp
bnN0YW5jZSk7CiAgICAgfQogICAgIHJldHVybiBpbnN0YW5jZXM7CkBAIC03NCw2ICs4NSw4IEBA
IGZ1bGxHQygpOwogZnVsbEdDKCk7CiAKIChmdW5jdGlvbiB0ZXN0SW5zdGFuY2VOb01heCgpIHsK
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYHRlc3RJbnN0YW5jZU5vTWF4YCk7CiAg
ICAgbGV0IGluc3RhbmNlcyA9IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlv
bnM7ICsraSkgewogICAgICAgICAvLyBOb3RlOiBub3QgZXhwb3J0ZWQhIFRoZSBpbnRlcm5hbCBB
UEkgY2FuIHN0aWxsIGFjY2Vzcy4KQEAgLTg5LDYgKzEwMiw4IEBAIGZ1bGxHQygpOwogZnVsbEdD
KCk7CiAKIChmdW5jdGlvbiB0ZXN0SW5zdGFuY2UoKSB7CisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIHByaW50KGB0ZXN0SW5zdGFuY2VgKTsKICAgICBsZXQgaW5zdGFuY2VzID0gW107CiAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0aW9uczsgKytpKSB7CiAgICAgICAgIC8vIE5vdGU6
IG5vdCBleHBvcnRlZCEgVGhlIGludGVybmFsIEFQSSBjYW4gc3RpbGwgYWNjZXNzLgpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcyBiL0pTVGVzdHMvd2FzbS91dGlsaXRpZXMu
anMKaW5kZXggMTlmOWI0ZS4uYmM2OWFkNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL3V0aWxp
dGllcy5qcworKysgYi9KU1Rlc3RzL3dhc20vdXRpbGl0aWVzLmpzCkBAIC03OSw2ICs3OSwxMiBA
QCBjb25zdCBfZHVtcCA9ICh3aGF0LCBuYW1lLCBwYWQgPSAnICAgICcpID0+IHsKICAgICByZXR1
cm4gczsKIH07CiAKK2V4cG9ydCBjb25zdCB0b0phdmFTY3JpcHROYW1lID0gbmFtZSA9PiB7Cisg
ICAgY29uc3QgY2FtZWxDYXNlID0gbmFtZS5yZXBsYWNlKC8oW15hLXowLTldLikvZywgYyA9PiBj
WzFdLnRvVXBwZXJDYXNlKCkpOworICAgIGNvbnN0IENhbWVsQ2FzZSA9IGNhbWVsQ2FzZS5jaGFy
QXQoMCkudG9VcHBlckNhc2UoKSArIGNhbWVsQ2FzZS5zbGljZSgxKTsKKyAgICByZXR1cm4gQ2Ft
ZWxDYXNlOworfTsKKwogLy8gVXNlIHVuZGVyc2NvcmUgbmFtZXMgdG8gYXZvaWQgY2xhc2hpbmcg
d2l0aCBidWlsdGluIG5hbWVzLgogZXhwb3J0IHsKICAgICBfZHVtcCBhcyBkdW1wLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMGY3ZjM1NS4uYTBiMjFlYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQ4IEBACisyMDE3LTA0LTExICBKRiBCYXN0aWVuICA8amZiYXN0
aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogbWFuYWdlIG1lbW9yeSBiZXR0
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDYy
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkFz
c2VtYmx5IGZhc3QgbWVtb3JpZXMgd2VyZW4ndCBtYW5hZ2VkIHZlcnkgd2VsbC4gVGhpcyBwYXRj
aAorICAgICAgICByZWZhY3RvcnMgaXQgYW5kIHB1dHMgdXMgaW4gYSBnb29kIHBvc2l0aW9uIHRv
IGZ1cnRoZXIgaW1wcm92ZSBvdXIKKyAgICAgICAgZmFzdCBtZW1vcnkgaGFuZGxpbmcgaW4gdGhl
IGZ1dHVyZS4KKworICAgICAgICBXZSBub3cgY2FjaGUgZmFzdCBtZW1vcmllcyBhdCBhIHByb2Nl
c3MgZ3JhbnVsYXJpdHksIGJ1dCBtYWtlIHN1cmUKKyAgICAgICAgdGhhdCB0aGV5IGRvbid0IGNv
bnN1bWUgZGlydHkgcGFnZXMuIFdlIGFkZCBhIGNhcCB0byB0aGUgdG90YWwKKyAgICAgICAgbnVt
YmVyIG9mIGFsbG9jYXRlZCBmYXN0IG1lbW9yaWVzIHRvIGF2b2lkIEFTTFIgZGVncmFkYXRpb24u
CisKKyAgICAgICAgV2UgdGVhY2ggdGhlIEdDIGFib3V0IG1lbW9yaWVzIGFzIGEga2luZCBvZiBy
ZXNvdXJjZSBpdCBzaG91bGQKKyAgICAgICAgY2FyZSBhYm91dCBiZWNhdXNlIGl0IGRpZG4ndCBo
YXZlIHZpc2liaWxpdHkgaW50byB0aGUgYW1vdW50IG9mCisgICAgICAgIG1lbW9yeSBlYWNoIHJl
cHJlc2VudGVkLiBUaGlzIGFsbG93cyBiZW5jaG1hcmtzIHdoaWNoIGFsbG9jYXRlCisgICAgICAg
IG1lbW9yaWVzIGJhY2stdG8tYmFjayB0byByZWxpYWJseSBnZXQgZmFzdCBtZW1vcmllcyAxMDAl
IG9mIHRoZQorICAgICAgICB0aW1lLCBldmVuIG9uIGEgc3lzdGVtIHVuZGVyIGxvYWQsIHdoaWNo
IHdhc24ndCB0aGUgY2FzZQorICAgICAgICBiZWZvcmUuIFRoaXMgcmVsaWFiaWxpdHkgeWllbGRz
IHJvdWdobHkgOCUgcGVyZiBidW1wIG9uIHg4Ni02NAorICAgICAgICBXYXNtQmVuY2guCisKKyAg
ICAgICAgVGhlIEdDIGhldXJpc3RpYyBpcyBhcyBmb2xsb3dzOiBlYWNoIHRpbWUgd2UgYWxsb2Nh
dGUgYSBmYXN0CisgICAgICAgIG1lbW9yeSB3ZSBub3RpZnkgdGhlIEdDLCB3aGljaCB0aGVuIGtl
ZXBzIHRyYWNrIG9mIHRoZSB0b3RhbAorICAgICAgICBudW1iZXIgb2YgZmFzdCBtZW1vcmllcyBh
bGxvY2F0ZWQgc2luY2UgaXQgbGFzdCBHQydkLiBXZQorICAgICAgICBzZXBhcmF0ZWx5IGtlZXAg
dHJhY2sgb2YgdGhlIHRvdGFsIG51bWJlciBvZiBmYXN0IG1lbW9yaWVzIHdoaWNoCisgICAgICAg
IGhhdmUgZXZlciBleGlzdGVkIGF0IGFueSBwb2ludCBpbiB0aW1lIChjYWNoZWQgKyBhbGxvY2F0
ZWQpLiBUaGlzCisgICAgICAgIGlzIGEgbW9ub3RvbmljYWxseS1pbmNyZWFzaW5nIGhpZ2ggd2F0
ZXJtYXJrLiBUaGUgR0Mgd2lsbCBmb3JjZSBhCisgICAgICAgIGZ1bGwgY29sbGVjdGlvbiBpZiwg
c2luY2UgaXQgbGFzdCByYW4sIGhhbGYgb3IgbW9yZSBvZiB0aGUgaGlnaAorICAgICAgICB3YXRl
cm1hcmsgb2YgZmFzdCBtZW1vcmllcyB3YXMgYWxsb2NhdGVkLgorCisgICAgICAgIEF0IHRoZSBz
YW1lIHRpbWUsIGlmIHdlIGZhaWwgb2J0YWluaW5nIGEgZmFzdCBtZW1vcnkgZnJvbSB0aGUKKyAg
ICAgICAgY2FjaGUgd2UgZG8gYSBHQyB0byB0cnkgdG8gZmluZCBvbmUuIElmIHRoYXQgZmFpbHMg
d2UnbGwgYWxsb2NhdGUKKyAgICAgICAgYSBuZXcgb25lICh0aGlzIGNhbiBhbHNvIGZhaWwsIHRo
ZW4gd2UgZ28gdG8gc2xvdyBtZW1vcnkpLiBUaGlzCisgICAgICAgIGNhbiBhbHNvIGJlIGltcHJv
dmVkLCBidXQgaXQncyBhIGdvb2Qgc3RhcnQuCisKKyAgICAgICAgVGhpcyBjdXJyZW50bHkgZGlz
YWJsZXMgZmFzdCBtZW1vcmllcyBvbiBpT1MgYmVjYXVzZSBnZXR0aW5nIGZhc3QKKyAgICAgICAg
bWVtb3JpZXMgaXNuJ3QgYSBndWFyYW50ZWVkIHRoaW5nLiBSYXRoZXIsIHdlIGdldCBxdWl0ZSBh
IGZldyBvZgorICAgICAgICB0aGVtIGFuZCBhY2hpZXZlIHNpZ25pZmljYW50IHNwZWVkdXBzLCBi
dXQgYmVuY2htYXJrcyB3aGljaAorICAgICAgICBhbGxvY2F0ZSBtZW1vcmllcyBiYWNrLXRvLWJh
Y2sgZW5kIHVwIGZhbGxpbmcgYmVoaW5kIGJlY2F1c2UgdGhlCisgICAgICAgIEdDIGNhbiBjb25z
ZXJ2YXRpdmVseSBob2xkIG9udG8gbWVtb3JpZXMsIHdoaWNoIHRoZW4geWllbGRzIGEgcGVyZgor
ICAgICAgICBjbGlmZi4gVGhhdCBjbGlmZiBpc24ndCByZWxpYWJsZSwgV2FzbUJlbmNoIGdldHMg
cm91Z2hseSAxMCBvZiAxOAorICAgICAgICBmYXN0IG1lbW9yaWVzIHdoZW4gaW4gdGhlb3J5IGl0
IHNob3VsZCBnZXQgYWxsIG9mIHRoZW0gZmFzdCAoYXMKKyAgICAgICAgTWFjT1MgZG9lcykuIFRo
ZSBwYXRjaCBzaWduaWZpY2FudGx5IGltcHJvdmVzIHRoZSBzdGF0ZSBvZiBpT1MKKyAgICAgICAg
dGhvdWdoLCBhbmQgaW4gYSBmb2xsb3ctdXAgd2UgY291bGQgcmUtZW5hYmxlIGZhc3QgbWVtb3Jp
ZXMuCisKKyAgICAgICAgUGFydCBvZiB0aGlzIGdvb2QgcG9zaXRpb25pbmcgaXMgYSBmYWNpbGl0
eSB0byBwcmUtYWxsb2NhdGUgZmFzdAorICAgICAgICBtZW1vcmllcyB2ZXJ5IGVhcmx5IGF0IHN0
YXJ0dXAsIGJlZm9yZSBhbnkgZnJhZ21lbnRhdGlvbgorICAgICAgICBvY2N1cnMuIFRoaXMgaXMg
Y3VycmVudGx5IGRpc2FibGVkIGJ1dCB3b3JrZWQgZXh0cmVtZWx5IHJlbGlhYmx5CisgICAgICAg
IG9uIGlPUy4gT25jZSB3ZSBmaXggdGhlIGFib3ZlIGlzc3VlcyB3ZSdsbCB3YW50IHRvIHJlLXZp
c2l0IGFuZAorICAgICAgICB0dXJuIG9uIHByZS1hbGxvY2F0aW9uLgorCisgICAgICAgIFdlIGFs
c28gYXZvaWQgbG9ja2luZyBmb3IgZmFzdCBtZW1vcnkgaWRlbnRpZmljYXRpb24gd2hlbgorICAg
ICAgICBwZXJmb3JtaW5nIHNpZ25hbCBoYW5kbGluZy4gSSdtIHZlcnkgbmVydm91cyBhYm91dCBh
Y3F1aXJpbmcgbG9ja3MKKyAgICAgICAgaW4gYSBzaWduYWwgaGFuZGxlciBiZWNhdXNlIGluIGdl
bmVyYWwgc2lnbmFscyBjYW4gaGFwcGVuIHdoZW4KKyAgICAgICAgd2UndmUgbWVzc2VkIHVwLiBU
aGlzIGlzbid0IHRoZSBjYXNlIHdpdGggZmFzdCBtZW1vcmllczogd2UncmUKKyAgICAgICAgcmFp
c2luZyBhIHNpZ25hbCBvbiBwdXJwb3NlIGFuZCBoYW5kbGluZyBpdC4gSG93ZXZlciB0aGlzIGRv
ZXNuJ3QKKyAgICAgICAgbWVhbiB3ZSB3b24ndCBtZXNzIHVwIGVsc2V3aGVyZSEgVGhpcyB3aWxs
IGdldCBtb3JlIGNvbXBsaWNhdGVkCisgICAgICAgIG9uY2Ugd2UgYWRkIHN1cHBvcnQgZm9yIG11
bHRpcGxlIHRocmVhZHMgc2hhcmluZyBtZW1vcmllcyBhbmQKKyAgICAgICAgYmVpbmcgYWJsZSB0
byBncm93IHRoZWlyIG1lbW9yaWVzLiBPbmUgZXhhbXBsZTogdGhlIGNvZGUgY2FsbHMKKyAgICAg
ICAgQ1JBU0goKSwgd2hpY2ggZXhlY3V0ZXMgdGhlIGZvbGxvd2luZyBjb2RlIGluIHJlbGVhc2U6
CisKKyAgICAgICAgICAgICooaW50ICopKHVpbnRwdHJfdCkweGJiYWRiZWVmID0gMDsKKworICAg
ICAgICBUaGlzIGlzIGEgc2VnZmF1bHQsIHdoaWNoIG91ciBmYXN0IG1lbW9yeSBzaWduYWwgaGFu
ZGxlciB0cmllcyB0bworICAgICAgICBoYW5kbGUuIEl0IGRvZXMgc28gYnkgZmlyc3QgZmlndXJp
bmcgb3V0IHdoZXRoZXIgMHhiYmFkYmVlZiBpcyBpbgorICAgICAgICBhIGZhc3QgbWVtb3J5IHJl
Z2lvbiwgcmVxaXJpbmcgYSBsb2NrLiBJZiB3ZSBDUkFTSCgpIHdoaWxlIGhvbGRpbmcKKyAgICAg
ICAgdGhlIGxvY2sgdGhlbiBvdXIgdGhyZWFkIHNlbGYtZGVhZGxvY2tzLCBnaXZpbmcgdXMgbm8g
Y3Jhc2ggcmVwb3J0CisgICAgICAgIGFuZCBhIGJhZCB1c2VyIGV4cGVyaWVuY2UuCisKKyAgICAg
ICAgQXZvaWRpbmcgYSBsb2NrIHRoZXJlZm9yZSBpdCdzIG5vdCBhYm91dCBzcGVlZCBvciByZWR1
Y2VkCisgICAgICAgIGNvbnRlbnRpb24uIEluIGZhY3QsIEknZCB1c2Ugc29tZXRoaW5nIGVsc2Ug
dGhhbiBhIEZJRk8gaWYgdGhlc2UKKyAgICAgICAgd2VyZSBhIGNvbmNlcm4uIFdlJ3JlIGFsc28g
ZG9pbmcgc3lzY2FsbHMsIHdoaWNoIGR3YXJmIGFueSBsb2NraW5nCisgICAgICAgIGNvc3QuCisK
KyAgICAgICAgV2Ugbm93IG9ubHkgYWxsb2NhdGUgNEdpQiArIHJlZHpvbmUgb2YgNjRrICogMTI4
IGZvciBmYXN0IG1lbW9yaWVzCisgICAgICAgIGluc3RlYWQgb2YgOEdpQi4gVGhpcyBwYXRjaCBy
ZXVzZXMgdGhlIGxvZ2ljIGZyb20KKyAgICAgICAgQjM6Oldhc21Cb3VuZHNDaGVjayB0byBwZXJm
b3JtIGJvdW5kcyBjaGVja3Mgd2hlbiBhY2Nlc3NlcyBjb3VsZAorICAgICAgICBleGNlZWQgdGhl
IHJlZHpvbmUuIFdlJ2xsIHRoZXJlZm9yZSBiZW5lZml0IGZyb20gQ1NFIGdvb2RuZXNzIHdoZW4K
KyAgICAgICAgaXQgcmVhY2hlcyBXYXNtQm91bmRzQ2hlY2suIFNlZSBidWcgIzE2MzQ2OS4KKwor
ICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6IGZpeCBhIGJhYWFhZGRkIGJ1ZyB3aGVyZSB1
bnNpZ25lZC0+c2lnbmVkCisgICAgICAgIGNvbnZlcnNpb24gYWxsb3dlZCBvdXQtb2YtYm91bmRz
IHJlYWRzIGJ5IC0yR2lCLiBJJ2xsIGZvbGxvdy11cCBpbgorICAgICAgICBidWcgIzE3MDY5MiB0
byBwcmV2ZW50IHRoaXMgdHlwZSBvZiBidWcgb25jZSBhbmQgZm9yIGFsbC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUu
Y3BwOiB1cGRhdGUgV2FzbUJvdW5kc0NoZWNrIHZhbGlkYXRpb24uCisgICAgICAgICogYjMvQjNW
YWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6ZWZmZWN0cyk6IHVwZGF0ZSBXYXNt
Qm91bmRzQ2hlY2sgZWZmZWN0cy4KKyAgICAgICAgKiBiMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVl
LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6Oldhc21Cb3VuZHNDaGVja1ZhbHVlOjpXYXNtQm91bmRz
Q2hlY2tWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6cmVk
em9uZUxpbWl0KToKKyAgICAgICAgKEpTQzo6QjM6Oldhc21Cb3VuZHNDaGVja1ZhbHVlOjpkdW1w
TWV0YSk6CisgICAgICAgICogYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oOgorICAgICAgICAo
SlNDOjpCMzo6V2FzbUJvdW5kc0NoZWNrVmFsdWU6Om1heGltdW0pOgorICAgICAgICAqIGIzL2Fp
ci9BaXJDdXN0b20uY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpXYXNtQm91bmRzQ2hlY2tD
dXN0b206OmlzVmFsaWRGb3JtKToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdFdhc21Cb3VuZHNDaGVjayk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlcG9ydFdl
YkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6d2Vi
QXNzZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCk6CisgICAgICAgIChKU0M6
OkhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1pdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRB
bGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2hv
dWxkRG9GdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIHJ1bnRpbWUv
SW5pdGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVUaHJlYWRp
bmcpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgICogcnVudGltZS9P
cHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0TG9hZE9wKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3ApOgorICAgICAgICAoSlNDOjpX
YXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyYXBIYW5kbGVyKToKKyAgICAg
ICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOiBSZXdyaXRlLgorICAgICAgICAoSlNDOjpXYXNtOjpt
YWtlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojppbml0aWFsaXplUHJlYWxs
b2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmNyZWF0ZUltcGwpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1l
bW9yeTo6fk1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6ZmFzdE1hcHBlZFJl
ZHpvbmVCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVz
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjptYXhGYXN0TWVtb3J5Q291bnQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisgICAgICAgICogd2FzbS9XYXNtTWVt
b3J5Lmg6CisgICAgICAgIChNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCk6CisgICAgICAgIChN
ZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNl
OjpnbG9iYWxNZW1vcnlCeXRlU2l6ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKToKKwogMjAxNy0wNC0wNyAgWXVpY2hpcm8g
S2lrdXJhICA8eS5raWt1cmFAZ21haWwuY29tPgogCiAgICAgICAgIFdlYkdQVTogaW1wbGVtZW50
IENvbXB1dGVDb21tYW5kRW5jb2RlciBhbmQgcmVsYXRlZCBjb21wb25lbnRzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDgyMGQ0YzEuLjViYTVhZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0zMTQ0LDIyICsz
MTQ0LDQ2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEIzOjpXYXNtQm91
bmRzQ2hlY2s6IHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgICAgICBXYXNtQm91
bmRzQ2hlY2tWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5hczxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4o
KTsKIAogICAgICAgICAgICAgVmFsdWUqIHB0ciA9IHZhbHVlLT5jaGlsZCgwKTsKIAotICAgICAg
ICAgICAgQXJnIHRlbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKLSAgICAgICAgICAgIGFwcGVuZChJ
bnN0KE1vdmUzMiwgdmFsdWUsIHRtcChwdHIpLCB0ZW1wKSk7CisgICAgICAgICAgICBBcmcgcHRy
UGx1c0ltbSA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAgYXBwZW5kKEluc3QoTW92
ZTMyLCB2YWx1ZSwgdG1wKHB0ciksIHB0clBsdXNJbW0pKTsKICAgICAgICAgICAgIGlmICh2YWx1
ZS0+b2Zmc2V0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaW1tKHZhbHVlLT5vZmZzZXQoKSkp
Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tKHZhbHVlLT5vZmZzZXQoKSks
IHRlbXApOworICAgICAgICAgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIGltbSh2YWx1ZS0+b2Zm
c2V0KCkpLCBwdHJQbHVzSW1tKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgQXJnIGJpZ0ltbSA9IG1fY29kZS5uZXdUbXAoR1ApOwogICAgICAgICAgICAgICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUtPm9mZnNldCgpKSwgYmlnSW1tKTsK
LSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKEFkZDY0LCBiaWdJbW0sIHRlbXApOworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIGJpZ0ltbSwgcHRyUGx1c0ltbSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kKEluc3QoQWlyOjpX
YXNtQm91bmRzQ2hlY2ssIHZhbHVlLCB0ZW1wLCBBcmcodmFsdWUtPnBpbm5lZEdQUigpKSkpOwor
CisgICAgICAgICAgICBBcmcgbGltaXQ7CisgICAgICAgICAgICBpZiAodmFsdWUtPnBpbm5lZEdQ
UigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgbGltaXQgPSBBcmcodmFsdWUt
PnBpbm5lZEdQUigpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFNp
Z25hbGluZyBtZW1vcmllcyBkb24ndCBwaW4gYSByZWdpc3RlciBiZWNhdXNlIG9ubHkgdGhlIGFj
Y2Vzc2VzIHdob3NlIHJlZytpbW0gY291bGQgZXZlciBvdmVyZmxvdyA0R2lCK3JlZHpvbmUgbmVl
ZCB0byBiZSBjaGVja2VkLAorICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBkb24ndCB0aGluayB0
aGVzZSB3aWxsIGJlIGZyZXF1ZW50LiBBbGwgb3RoZXIgYWNjZXNzZXMgd2lsbCB0cmFwIGR1ZSB0
byBQUk9UX05PTkUgcGFnZXMuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBnb3QgaGVyZSBpdCdzIGJlY2F1c2UgYSBtZW1vcnkgYWNjZXNzIGhhZCBhIHZlcnkg
bGFyZ2Ugb2Zmc2V0LiBXZSBjb3VsZCBjaGVjayB0aGF0IGl0IGRvZXNuJ3QgZXhjZWVkIDRHaUIr
cmVkem9uZSBzaW5jZSB0aGF0J3MKKyAgICAgICAgICAgICAgICAvLyB0ZWNobmljYWxseSB0aGUg
bGltaXQgd2UgbmVlZCB0byBhdm9pZCBvdmVyZmxvd2luZywgYnV0IGl0J3MgYmV0dGVyIGlmIHdl
IHVzZSBhIHNtYWxsZXIgaW1tZWRpYXRlIHdoaWNoIGNvZGVnZW5zIG1vcmUgZWFzaWx5LgorICAg
ICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCBhbnl0aGluZyBhYm92ZSB0aGUgZGVjbGFyZWQg
J21heGltdW0nIHdpbGwgdHJhcCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0aGF0IG51bWJl
ci4gSWYgdGhlcmUgd2FzIG5vIGRlY2xhcmVkCisgICAgICAgICAgICAgICAgLy8gJ21heGltdW0n
IHRoZW4gd2Ugc3RpbGwga25vdyB0aGF0IGFueSBhY2Nlc3MgYWJvdmUgNEdpQiB3aWxsIHRyYXAs
IG5vIG5lZWQgdG8gYWRkIHRoZSByZWR6b25lLgorICAgICAgICAgICAgICAgIGxpbWl0ID0gbV9j
b2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICAgICAgc2l6ZV90IGxpbWl0VmFsdWUgPSB2YWx1
ZS0+bWF4aW11bSgpID8gdmFsdWUtPm1heGltdW0oKS5ieXRlcygpIDogc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChsaW1pdFZhbHVl
IDw9IHZhbHVlLT5yZWR6b25lTGltaXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGltbShsaW1p
dFZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGltbShsaW1pdFZhbHVl
KSwgbGltaXQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKGxpbWl0VmFsdWUpLCBsaW1pdCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBhcHBlbmQoSW5zdChBaXI6Oldhc21Cb3VuZHNDaGVjaywgdmFsdWUsIHB0
clBsdXNJbW0sIGxpbWl0KSk7CisjZWxzZQorICAgICAgICAgICAgYXBwZW5kKEFpcjo6T29wcyk7
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAppbmRleCA2ZTZh
OTNkLi5jYzNhNTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxp
ZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCkBA
IC00NzAsNyArNDcwLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1
ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gSW50
MzIsICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUobV9wcm9jZWR1
cmUuY29kZSgpLmlzUGlubmVkKHZhbHVlLT5hczxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4oKS0+cGlu
bmVkR1BSKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+
YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCktPnBpbm5lZEdQUigpICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKG1fcHJvY2VkdXJlLmNvZGUoKS5pc1Bpbm5l
ZCh2YWx1ZS0+YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCktPnBpbm5lZEdQUigpKSwgKCJBdCAi
LCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURShtX3Byb2NlZHVyZS5jb2RlKCku
d2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFVwc2lsb246CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5jcHAKaW5kZXggOGM5MTBhYS4uNjViMTdlMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleUlubGluZXMuaCIKICNpbmNsdWRlICJCM1Zhcmlh
YmxlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgiCiAjaW5jbHVk
ZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogI2luY2x1
ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtNjY0LDcgKzY2NSw4IEBAIEVmZmVjdHMg
VmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgICAgICByZXN1bHQgPSBFZmZlY3RzOjpmb3JDaGVj
aygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc21Cb3VuZHNDaGVjazoKLSAgICAgICAg
cmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKGFzPFdhc21Cb3VuZHNDaGVj
a1ZhbHVlPigpLT5waW5uZWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmVz
dWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LmV4aXRzU2lkZXdheXMgPSB0
cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFVwc2lsb246CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAKaW5kZXggYjNhMzI5
MC4uOGFlY2MxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJv
dW5kc0NoZWNrVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21C
b3VuZHNDaGVja1ZhbHVlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9y
eS5oIgogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIApAQCAtMzQsMTAgKzM1LDExIEBAIFdhc21Cb3Vu
ZHNDaGVja1ZhbHVlOjp+V2FzbUJvdW5kc0NoZWNrVmFsdWUoKQogewogfQogCi1XYXNtQm91bmRz
Q2hlY2tWYWx1ZTo6V2FzbUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHB0
ciwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQgb2Zmc2V0KQorV2FzbUJvdW5kc0NoZWNrVmFs
dWU6Oldhc21Cb3VuZHNDaGVja1ZhbHVlKE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwdHIsIEdQUlJl
ZyBwaW5uZWRHUFIsIHVuc2lnbmVkIG9mZnNldCwgUGFnZUNvdW50IG1heGltdW0pCiAgICAgOiBW
YWx1ZShDaGVja2VkT3Bjb2RlLCBXYXNtQm91bmRzQ2hlY2ssIG9yaWdpbiwgcHRyKQogICAgICwg
bV9waW5uZWRHUFIocGlubmVkR1BSKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICwgbV9t
YXhpbXVtKG1heGltdW0pCiB7CiB9CiAKQEAgLTQ2LDkgKzQ4LDIyIEBAIFZhbHVlKiBXYXNtQm91
bmRzQ2hlY2tWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3IFdhc21Cb3Vu
ZHNDaGVja1ZhbHVlKCp0aGlzKTsKIH0KIAorc2l6ZV90IFdhc21Cb3VuZHNDaGVja1ZhbHVlOjpy
ZWR6b25lTGltaXQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3Bpbm5lZEdQUiA9PSBJbnZhbGlk
R1BSUmVnKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpICsgV2FzbTo6
TWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCk7CisjZWxzZQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogdm9pZCBXYXNtQm91bmRzQ2hlY2tWYWx1
ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
IHsKLSAgICBvdXQucHJpbnQoY29tbWEsICJzaXplUmVnaXN0ZXIgPSAiLCBtX3Bpbm5lZEdQUiwg
Iiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworICAgIGlmIChtX3Bpbm5lZEdQUiA9PSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyZWR6b25lTGltaXQgPSAiLCByZWR6
b25lTGltaXQoKSwgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworICAgIGVsc2UKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAic2l6ZVJlZ2lzdGVyID0gIiwgbV9waW5uZWRHUFIsICIsIG9mZnNl
dCA9ICIsIG1fb2Zmc2V0KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaAppbmRleCBj
Y2M1NGI4Li4xMTBlNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNX
YXNtQm91bmRzQ2hlY2tWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dh
c21Cb3VuZHNDaGVja1ZhbHVlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJCM1Zh
bHVlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbVBhZ2VDb3Vu
dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIApAQCAtNDYsOCArNDcsMTYg
QEAgcHVibGljOgogICAgIAogICAgIH5XYXNtQm91bmRzQ2hlY2tWYWx1ZSgpOwogCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorICAgIHR5cGVkZWYgV2FzbTo6UGFnZUNvdW50IFBhZ2VDb3VudDsK
KyNlbHNlCisgICAgdHlwZWRlZiBjaGFyIFBhZ2VDb3VudDsKKyNlbmRpZgorCiAgICAgR1BSUmVn
IHBpbm5lZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fcGlubmVkR1BSOyB9CiAgICAgdW5zaWduZWQg
b2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBzaXplX3QgcmVkem9uZUxp
bWl0KCkgY29uc3Q7CisgICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21h
eGltdW07IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwg
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKQEAgLTU3LDEwICs2NiwxMSBAQCBwcm90ZWN0
ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBXYXNtQm91bmRzQ2hlY2tWYWx1ZShPcmlnaW4sIFZhbHVlKiBwdHIsIEdQUlJl
ZyBwaW5uZWRHUFIsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgV2Fz
bUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcgcGlubmVkR1BSLCB1
bnNpZ25lZCBvZmZzZXQsIFBhZ2VDb3VudCBtYXhpbXVtKTsKIAogICAgIEdQUlJlZyBtX3Bpbm5l
ZEdQUjsKICAgICB1bnNpZ25lZCBtX29mZnNldDsKKyAgICBQYWdlQ291bnQgbV9tYXhpbXVtOwog
fTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckN1c3RvbS5jcHAKaW5kZXggN2VlN2YzYy4uNDljYTU0YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcApAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wg
V2FzbUJvdW5kc0NoZWNrQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQogICAgIGlmICgh
aW5zdC5hcmdzWzBdLmlzVG1wKCkgJiYgIWluc3QuYXJnc1swXS5pc1NvbWVJbW0oKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGluc3QuYXJnc1sxXS5pc1JlZygpOworICAg
IHJldHVybiBpbnN0LmFyZ3NbMV0uaXNSZWcoKSB8fCBpbnN0LmFyZ3NbMV0uaXNUbXAoKSB8fCBp
bnN0LmFyZ3NbMV0uaXNTb21lSW1tKCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAppbmRleCAwMTk5NmFmLi5hNmY2OTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcApAQCAtMTUxODUsNyArMTUxODUsOCBAQCB2b2lkIHRlc3RXYXNtQm91bmRzQ2hlY2sodW5z
aWduZWQgb2Zmc2V0KQogICAgIFZhbHVlKiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGlm
IChwb2ludGVyVHlwZSgpICE9IEludDMyKQogICAgICAgICBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGxlZnQpOwotICAgIHJvb3QtPmFwcGVuZE5l
dzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxlZnQsIHBpbm5lZCwgb2Zm
c2V0KTsKKyAgICBXYXNtOjpQYWdlQ291bnQgbWF4aW11bTsKKyAgICByb290LT5hcHBlbmROZXc8
V2FzbUJvdW5kc0NoZWNrVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsZWZ0LCBwaW5uZWQsIG9mZnNl
dCwgbWF4aW11bSk7CiAgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAweDQyKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9s
VmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAppbmRleCAzYWVlMzAxLi5lYzMxZWMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxv
Zy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNp
bmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2Vha1NldElubGluZXMuaCIKICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0yNTAsNiAr
MjUxLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9z
aXplQWZ0ZXJMYXN0RWRlbkNvbGxlY3QoMCkKICAgICAsIG1fc2l6ZUJlZm9yZUxhc3RFZGVuQ29s
bGVjdCgwKQogICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSgwKQorICAgICwgbV93ZWJB
c3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSgwKQogICAgICwgbV9ieXRlc0Fi
YW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0KDApCiAgICAgLCBtX21heEVkZW5TaXplKG1fbWlu
Qnl0ZXNQZXJDeWNsZSkKICAgICAsIG1fbWF4SGVhcFNpemUobV9taW5CeXRlc1BlckN5Y2xlKQpA
QCAtNDY2LDYgKzQ2OCwyMyBAQCB2b2lkIEhlYXA6OmRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9y
eVNsb3dDYXNlKHNpemVfdCBzaXplKQogICAgIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkU2xv
d0Nhc2Uoc2l6ZSk7CiB9CiAKK3ZvaWQgSGVhcDo6cmVwb3J0V2ViQXNzZW1ibHlGYXN0TWVtb3Jp
ZXNBbGxvY2F0ZWQoc2l6ZV90IGNvdW50KQoreworICAgIGRpZEFsbG9jYXRlV2ViQXNzZW1ibHlG
YXN0TWVtb3JpZXMoY291bnQpOworICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKK30K
KworYm9vbCBIZWFwOjp3ZWJBc3NlbWJseUZhc3RNZW1vcmllc1RoaXNDeWNsZUF0VGhyZXNob2xk
KCkgY29uc3QKK3sKKyAgICAvLyBXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIHVzZSBsYXJnZSBh
bW91bnRzIG9mIHZpcnR1YWwgbWVtb3J5IGFuZCB3ZQorICAgIC8vIGRvbid0IGtub3cgaG93IG1h
bnkgY2FuIGV4aXN0IGluIHRoaXMgcHJvY2Vzcy4gV2Uga2VlcCB0cmFjayBvZiB0aGUgbW9zdAor
ICAgIC8vIGZhc3QgbWVtb3JpZXMgdGhhdCBoYXZlIGV4aXN0ZWQgYXQgYW55IHBvaW50IGluIHRp
bWUuIFRoZSBHQyB1c2VzIHRoaXMKKyAgICAvLyB0b3Agd2F0ZXJtYXJrIGFzIGFuIGluZGljYXRp
b24gb2Ygd2hldGhlciByZWNlbnQgYWxsb2NhdGlvbnMgc2hvdWxkIGNhdXNlCisgICAgLy8gYSBj
b2xsZWN0aW9uOiBnZXQgdG9vIGNsb3NlIGFuZCB3ZSBtYXkgYmUgY2xvc2UgdG8gdGhlIGFjdHVh
bCBsaW1pdC4KKyAgICBzaXplX3QgZmFzdE1lbW9yeVRocmVzaG9sZCA9IHN0ZDo6bWF4PHNpemVf
dD4oMSwgV2FzbTo6TWVtb3J5OjptYXhGYXN0TWVtb3J5Q291bnQoKSAvIDIpOworICAgIHJldHVy
biBtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlID4gZmFzdE1lbW9y
eVRocmVzaG9sZDsKK30KKwogdm9pZCBIZWFwOjpyZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgp
CiB7CiAgICAgLy8gT3VyIGNsaWVudHMgZG9uJ3Qga25vdyBleGFjdGx5IGhvdyBtdWNoIG1lbW9y
eSB0aGV5CkBAIC0yMTAzLDYgKzIxMjIsNyBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRpb25M
aW1pdHMoKQogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAg
ICAgIGRhdGFMb2coImJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gIiwgbV9ieXRlc0FsbG9jYXRl
ZFRoaXNDeWNsZSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIndlYkFzc2VtYmx5RmFzdE1lbW9y
aWVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gIiwgbV93ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9j
YXRlZFRoaXNDeWNsZSwgIlxuIik7CiAgICAgfQogICAgIAogICAgIC8vIENhbGN1bGF0ZSBvdXIg
Y3VycmVudCBoZWFwIHNpemUgdGhyZXNob2xkIGZvciB0aGUgcHVycG9zZSBvZiBmaWd1cmluZyBv
dXQgd2hlbiB3ZSBzaG91bGQKQEAgLTIxODAsNiArMjIwMCw3IEBAIHZvaWQgSGVhcDo6dXBkYXRl
QWxsb2NhdGlvbkxpbWl0cygpCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coInNp
emVBZnRlckxhc3RDb2xsZWN0ID0gIiwgbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCwgIlxuIik7CiAg
ICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9IDA7CisgICAgbV93ZWJBc3NlbWJseUZhc3RN
ZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSA9IDA7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkKICAgICAgICAgZGF0YUxvZygiPT4gIiwgY3VycmVudEhlYXBTaXplIC8gMTAyNCwgImtiLCAi
KTsKQEAgLTIyNTMsNiArMjI3NCwxMSBAQCB2b2lkIEhlYXA6OmRpZEFsbG9jYXRlKHNpemVfdCBi
eXRlcykKICAgICBwZXJmb3JtSW5jcmVtZW50KGJ5dGVzKTsKIH0KIAordm9pZCBIZWFwOjpkaWRB
bGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzKHNpemVfdCBjb3VudCkKK3sKKyAgICBtX3dl
YkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlICs9IGNvdW50OworfQorCiBi
b29sIEhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKHNpemVfdCkKIHsKICAgICBpZiAoIWlzVmFsaWRU
aHJlYWRTdGF0ZShtX3ZtKSkKQEAgLTIzMDUsNyArMjMzMSw3IEBAIGJvb2wgSGVhcDo6c2hvdWxk
RG9GdWxsQ29sbGVjdGlvbihzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gc2NvcGUpIGNv
bnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKCFzY29wZSkKLSAgICAgICAgcmV0
dXJuIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlvbjsKKyAgICAgICAgcmV0dXJuIG1fc2hvdWxkRG9G
dWxsQ29sbGVjdGlvbiB8fCB3ZWJBc3NlbWJseUZhc3RNZW1vcmllc1RoaXNDeWNsZUF0VGhyZXNo
b2xkKCk7CiAgICAgcmV0dXJuICpzY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGw7CiB9CiAK
QEAgLTI0NTYsNyArMjQ4Miw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cihHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogICAgICAgICBpZiAobV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZSA8PSBPcHRpb25zOjpnY01heEhlYXBTaXplKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGUgPD0gbV9tYXhFZGVuU2l6ZSkKKyAgICAgICAgaWYgKCF3ZWJBc3NlbWJseUZhc3RN
ZW1vcmllc1RoaXNDeWNsZUF0VGhyZXNob2xkKCkKKyAgICAgICAgICAgICYmIG1fYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGUgPD0gbV9tYXhFZGVuU2l6ZSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCBkMDY1NzAxLi40YjE1OWZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC0xOTgsNiArMTk4LDE3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKIAorICAg
IC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBmb3IgdW5jb21taXR0ZWQgdmlydHVhbCBtZW1vcnkgYWxs
b2NhdGlvbnMgY2F1c2VkIGJ5CisgICAgLy8gV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcy4gVGhp
cyBpcyBjb3VudGVkIHNlcGFyYXRlbHkgYmVjYXVzZSB2aXJ0dWFsCisgICAgLy8gbWVtb3J5IGlz
IGxvZ2ljYWxseSBhIGRpZmZlcmVudCB0eXBlIG9mIHJlc291cmNlIHRoYW4gY29tbWl0dGVkIHBo
eXNpY2FsCisgICAgLy8gbWVtb3J5LiBXZSBjYW4gb2Z0ZW4gYWxsb2NhdGUgaHVnZSBhbW91bnRz
IG9mIHZpcnR1YWwgbWVtb3J5ICh0aGluaworICAgIC8vIGdpZ2FieXRlcykgd2l0aG91dCBhZHZl
cnNlbHkgYWZmZWN0aW5nIHJlZ3VsYXIgR0MnZCBtZW1vcnkuIEF0IHNvbWUgcG9pbnQKKyAgICAv
LyB0aG91Z2gsIHRvbyBtdWNoIHZpcnR1YWwgbWVtb3J5IGJlY29tZXMgcHJvaGliaXRpdmUgYW5k
IHdlIHdhbnQgdG8KKyAgICAvLyBjb2xsZWN0IEdDLWFibGUgb2JqZWN0cyB3aGljaCBrZWVwIHRo
aXMgdmlydHVhbCBtZW1vcnkgYWxpdmUuCisgICAgLy8gVGhpcyBpcyBjb3VudGVkIGluIG51bWJl
ciBvZiBmYXN0IG1lbW9yaWVzLCBub3QgYnl0ZXMuCisgICAgdm9pZCByZXBvcnRXZWJBc3NlbWJs
eUZhc3RNZW1vcmllc0FsbG9jYXRlZChzaXplX3QpOworICAgIGJvb2wgd2ViQXNzZW1ibHlGYXN0
TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCgpIGNvbnN0OworCiAjaWYgRU5BQkxFKFJFU09V
UkNFX1VTQUdFKQogICAgIC8vIFVzZSB0aGlzIEFQSSB0byByZXBvcnQgdGhlIHN1YnNldCBvZiBl
eHRyYSBtZW1vcnkgdGhhdCBsaXZlcyBvdXRzaWRlIHRoaXMgcHJvY2Vzcy4KICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOwpAQCAt
MjQ3LDYgKzI1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZUFsbFVubGlua2VkQ29kZUJs
b2NrcyhEZWxldGVBbGxDb2RlRWZmb3J0KTsKIAogICAgIHZvaWQgZGlkQWxsb2NhdGUoc2l6ZV90
KTsKKyAgICB2b2lkIGRpZEFsbG9jYXRlV2ViQXNzZW1ibHlGYXN0TWVtb3JpZXMoc2l6ZV90KTsK
ICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKICAgICAKICAgICBjb25zdCBK
SVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKCkgeyByZXR1cm4gKm1faml0U3R1YlJv
dXRpbmVzOyB9CkBAIC01MjUsNiArNTM3LDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9zaXpl
QmVmb3JlTGFzdEVkZW5Db2xsZWN0OwogCiAgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGU7CisgICAgc2l6ZV90IG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlz
Q3ljbGU7CiAgICAgc2l6ZV90IG1fYnl0ZXNBYmFuZG9uZWRTaW5jZUxhc3RGdWxsQ29sbGVjdDsK
ICAgICBzaXplX3QgbV9tYXhFZGVuU2l6ZTsKICAgICBzaXplX3QgbV9tYXhIZWFwU2l6ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHAKaW5kZXggYmU2YjZmMS4uN2M4NWExMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZUlEVGFibGUuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKKyNpbmNsdWRlICJXYXNtTWVt
b3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgogI2luY2x1ZGUgPG11dGV4PgpAQCAtNTgsNiArNTksOSBAQCB2b2lkIGluaXRpYWxpemVUaHJl
YWRpbmcoKQogICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVUaHJlYWRpbmdPbmNlRmxhZywg
W117CiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgICAgICBPcHRpb25z
Ojppbml0aWFsaXplKCk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBXYXNtOjpN
ZW1vcnk6OmluaXRpYWxpemVQcmVhbGxvY2F0aW9ucygpOworI2VuZGlmCiAjaWYgRU5BQkxFKFdS
SVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6aW5p
dGlhbGl6ZSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCmluZGV4IGRjYzk0NmQuLjZhYmNmNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCkBAIC01OSw2ICs1OSwxNSBAQCBib29sIHJlc3RyaWN0ZWRPcHRpb25z
RW5hYmxlZCA9IGZhbHNlOwogI2Vsc2UKIGJvb2wgcmVzdHJpY3RlZE9wdGlvbnNFbmFibGVkID0g
dHJ1ZTsKICNlbmRpZgorCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNJT1MoKQoreworI2lmIFBMQVRG
T1JNKElPUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CiB9CiAKIHZvaWQgT3B0aW9uczo6ZW5hYmxlUmVzdHJpY3RlZE9wdGlvbnMoYm9vbCBl
bmFibGVPck5vdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCA2
MGNhYWUwLi4yYTM0Y2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CkBAIC00MzcsOSArNDM3LDExIEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwog
ICAgIHYoc2l6ZSwgd2ViQXNzZW1ibHlQYXJ0aWFsQ29tcGlsZUxpbWl0LCA1MDAwLCBOb3JtYWws
ICJMaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGEgV2FzbTo6UGxhbjo6Y29tcGlsZSBzaG91
bGQgYXR0ZW1wdCBiZWZvcmUgY2hlY2tpbmcgZm9yIG90aGVyIHdvcmsuIikgXAogICAgIHYodW5z
aWduZWQsIHdlYkFzc2VtYmx5QjNPcHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIz
T3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBXZWIgQXNzZW1i
bHkgbW9kdWxlcy4iKSBcCiAgICAgXAotICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJBc3NlbWJseUxv
d01lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdvbid0
IG1tYXAgdGhlIGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwgYWxsb2NhdGUg
dGhlIG1pbmltdW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKLSAgICB2KGJvb2wsIHVzZVdlYkFzc2Vt
Ymx5RmFzdE1lbW9yeSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNl
IGEgMzItYml0IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJvdW5kcyBj
aGVjayB3YXNtIG1lbW9yeS4iKSBcCisgICAgLyogRklYTUU6IGVuYWJsZSBmYXN0IG1lbW9yaWVz
IG9uIGlPUyBhbmQgcHJlLWFsbG9jYXRlIHRoZW0uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA3NzQgKi8gXAorICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0
TWVtb3J5LCAhaXNJT1MoKSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNlIGEg
MzItYml0IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJvdW5kcyBjaGVj
ayB3YXNtIG1lbW9yeS4iKSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlGYXN0TWVtb3J5
UmVkem9uZVBhZ2VzLCAxMjgsIE5vcm1hbCwgIldlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgdXNl
IDRHaUIgdmlydHVhbCBhbGxvY2F0aW9ucywgcGx1cyBhIHJlZHpvbmUgKGNvdW50ZWQgYXMgbXVs
dGlwbGUgb2YgNjRLaUIgV2ViQXNzZW1ibHkgcGFnZXMpIGF0IHRoZSBlbmQgdG8gY2F0Y2ggcmVn
K2ltbSBhY2Nlc3NlcyB3aGljaCBleGNlZWQgMzItYml0LCBhbnl0aGluZyBiZXlvbmQgdGhlIHJl
ZHpvbmUgaXMgZXhwbGljaXRseSBib3VuZHMtY2hlY2tlZCIpIFwKICAgICB2KGJvb2wsIGNyYXNo
SWZXZWJBc3NlbWJseUNhbnRGYXN0TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ug
d2lsbCBjcmFzaCBpZiB3ZSBjYW4ndCBvYnRhaW4gZmFzdCBtZW1vcnkgZm9yIHdhc20uIikgXAor
ICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQsIDAs
IE5vcm1hbCwgIldlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgY2FuIGJlIHByZS1hbGxvY2F0ZWQg
YXQgcHJvZ3JhbSBzdGFydHVwIGFuZCByZW1haW4gY2FjaGVkIHRvIGF2b2lkIGZyYWdtZW50YXRp
b24gbGVhZGluZyB0byBib3VuZHMtY2hlY2tlZCBtZW1vcnkuIFRoaXMgbnVtYmVyIGlzIGFuIHVw
cGVyIGJvdW5kIG9uIGluaXRpYWwgYWxsb2NhdGlvbiBhcyB3ZWxsIGFzIHRvdGFsIGNvdW50IG9m
IGZhc3QgbWVtb3JpZXMuIFplcm8gbWVhbnMgbm8gcHJlLWFsbG9jYXRpb24sIG5vIGNhY2hpbmcs
IGFuZCBubyBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIHJ1bnRpbWUgYWxsb2NhdGlvbnMuIikgXAog
ICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0VExTLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpZiBhdmFpbGFi
bGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggODgyZDFjNy4uMTdlMWNmNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cApAQCAtMjI3LDYgKzIyNyw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVtaXRDaGVja3NGb3JN
b2RPckRpdihCMzo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCk7CiAKKyAgICB2b2lkIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUm
LCB1aW50MzJfdCYpOworCiAgICAgVmFsdWUqIG1hdGVyaWFsaXplV2FzbUNvbnRleHQoUHJvY2Vk
dXJlJiwgQmFzaWNCbG9jayopOwogICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVy
ZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xv
YmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2Nl
ZHVyZSYsIEJhc2ljQmxvY2sqKTsKQEAgLTI0OCw2ICsyNTAsMTUgQEAgcHJpdmF0ZToKICAgICBW
YWx1ZSogbV9pbnN0YW5jZVZhbHVlOyAvLyBGSVhNRTogbWFrZSB0aGlzIGxhenkgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTc5MgogfTsKIAorLy8gTWVtb3J5IGFj
Y2Vzc2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJl
YXMgdGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK3ZvaWQgQjNJUkdlbmVy
YXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJf
dCYgb2Zmc2V0KQoreworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
IHsKKyAgICAgICAgcHRyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBBZGQsIG9yaWdpbigpLCBwdHIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAg
ICB9Cit9CisKIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjptYXRlcmlhbGl6ZVdhc21Db250ZXh0KFBy
b2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgaWYgKHVzZUZhc3RUTFNG
b3JDb250ZXh0KCkpIHsKQEAgLTMzMSw3ICszNDIsMTYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUKICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHND
aGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSLCB1
bnNpZ25lZCkgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1f
bWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgc3dpdGNoIChtX21vZGUp
IHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5u
ZWRHUFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZW1vcnlN
b2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIs
IEludmFsaWRHUFJSZWcgPT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRz
TWVtb3J5QWNjZXNzKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNTE3LDEwICs1MzcsMjAgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6ZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qg
b2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1fbWVtb3J5
QmFzZUdQUik7Ci0gICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykg
eworICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZzoKKyAgICAgICAgLy8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGws
IHdlIG11c3QgdGhlcmVmb3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRo
ZSBjdXJyZW50IG1lbW9yeSBzaXplLgogICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsK
ICAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7Ci0gICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsg
b2Zmc2V0IC0gMSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5k
c0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwg
c2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSwgbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAg
Ly8gV2UndmUgdmlydHVhbGx5IG1hcHBlZCA0R2lCK3JlZHpvbmUgZm8gdGhpcyBtZW1vcnkuIE9u
bHkgdGhlIHVzZXItYWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJsZSwgY29udGlndW91c2x5
IGluIHJhbmdlIFswLCBjdXJyZW50XSwgYW5kIGV2ZXJ5dGhpbmcgYWJvdmUgaXMgbWFwcGVkIFBS
T1RfTk9ORS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBleHBsaWNpdCBib3VuZHMgY2hl
Y2sgaW4gdGhlIDRHaUIgcmFuZ2UgYmVjYXVzZSBXZWJBc3NlbWJseSByZWdpc3RlciBtZW1vcnkg
YWNjZXNzZXMgYXJlIDMyLWJpdC4gSG93ZXZlciBXZWJBc3NlbWJseSByZWdpc3RlcitpbW1lZGlh
dGUgYWNjZXNzZXMgcGVyZm9ybSB0aGUgYWRkaXRpb24gaW4gNjQtYml0IHdoaWNoIGNhbiBwdXNo
IGFuIGFjY2VzcyBhYm92ZSB0aGUgMzItYml0IGxpbWl0LiBUaGUgcmVkem9uZSB3aWxsIGNhdGNo
IG1vc3Qgc21hbGwgaW1tZWRpYXRlcywgYW5kIHdlJ2xsIGV4cGxpY2l0bHkgYm91bmRzIGNoZWNr
IGFueSByZWdpc3RlciArIGxhcmdlIGltbWVkaWF0ZSBhY2Nlc3MuCisgICAgICAgIGlmIChvZmZz
ZXQgPj0gTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkpCisgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCBwb2ludGVyLCBJbnZhbGlkR1BSUmVnLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgLSAx
LCBtX2luZm8ubWVtb3J5Lm1heGltdW0oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVt
b3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CiAgICAgcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgcG9pbnRlcik7CiAgICAgcmV0dXJu
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUFkZHJlc3NWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgcG9pbnRlciwgbV9tZW1vcnlCYXNlR1BSKTsKQEAgLTU2MCw2ICs1OTAsOCBAQCBpbmxp
bmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9w
KQogCiBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBv
cCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KQogeworICAgIGZpeHVw
UG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgb2Zmc2V0KTsKKwogICAgIHN3aXRjaCAob3ApIHsK
ICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzogewogICAgICAgICByZXR1cm4gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQ4
UyksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwpAQCAtNjk3LDYgKzcyOSw4IEBAIGlubGlu
ZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBlIG9wKQogCiBpbmxpbmUgdm9pZCBC
M0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkKIHsKKyAgICBm
aXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIG9mZnNldCk7CisKICAgICBzd2l0Y2ggKG9w
KSB7CiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgogICAgICAgICB2YWx1ZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbigpLCB2
YWx1ZSk7CkBAIC0xMjUzLDYgKzEyODcsMTIgQEAgc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dhc21X
cmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBXYXNtSW4KIAog
ICAgIGNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCA9
IGppdC5jYWxsKCk7CiAKKyAgICBpZiAoISFpbmZvLm1lbW9yeSkgeworICAgICAgICAvLyBSZXNl
dHRpbmcgdGhlIHJlZ2lzdGVyIHByZXZlbnRzIHRoZSBHQyBmcm9tIG1pc3Rha2VubHkgdGhpbmtp
bmcgdGhhdCB0aGUgY29udGV4dCBpcyBzdGlsbCBsaXZlLgorICAgICAgICBHUFJSZWcgYmFzZU1l
bW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBiYXNlTWVtb3J5KTsKKyAgICB9CisKICAgICBm
b3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGls
bCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CiAgICAg
ICAgIEFTU0VSVChyZWcgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAppbmRl
eCA2N2JiNTdkLi5kMzU1ZTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApAQCAtNjgsMTUgKzY4LDcgQEAgc3RhdGlj
IHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1
Y29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzID0g
c2lnSW5mby0+c2lfYWRkcjsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJjaGVj
a2luZyBmYXVsdGluZyBhZGRyZXNzOiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nQWRkcmVzcyksICIg
aXMgaW4gYW4gYWN0aXZlIGZhc3QgbWVtb3J5Iik7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtZW1vcnlMb2NrKTsKLSAgICAgICAgICAgIGF1dG8mIGFjdGl2ZUZhc3RNZW1vcmllcyA9
IHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKTsKLSAgICAgICAgICAgIGZvciAodm9pZCog
YWN0aXZlTWVtb3J5IDogYWN0aXZlRmFzdE1lbW9yaWVzKSB7Ci0gICAgICAgICAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgImNoZWNraW5nIGZhc3QgbWVtb3J5IGF0OiAiLCBSYXdQb2ludGVy
KGFjdGl2ZU1lbW9yeSkpOwotICAgICAgICAgICAgICAgIGlmIChhY3RpdmVNZW1vcnkgPD0gZmF1
bHRpbmdBZGRyZXNzICYmIGZhdWx0aW5nQWRkcmVzcyA8IHN0YXRpY19jYXN0PGNoYXIqPihhY3Rp
dmVNZW1vcnkpICsgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmYXVs
dGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gV2FzbTo6TWVtb3J5OjphZGRyZXNzSXNJbkFjdGl2ZUZh
c3RNZW1vcnkoZmF1bHRpbmdBZGRyZXNzKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZmF1bHRl
ZEluQWN0aXZlRmFzdE1lbW9yeSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
ImZvdW5kIGFjdGl2ZSBmYXN0IG1lbW9yeSBmb3IgZmF1bHRpbmcgYWRkcmVzcyIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCA3ZWYzZDRmLi5iNGY5Y2Ey
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApAQCAtMjksMTQ5
ICsyOSwyOTcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJWTS5oIgot
I2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKICNpbmNsdWRlICJXYXNtVGh1bmtz
LmgiCiAKLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8YXRvbWljPgorI2lu
Y2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZNVGFn
cy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCisvLyBGSVhNRTogV2Ug
Y291bGQgYmUgc21hcnRlciBhYm91dCBtZW1zZXQgLyBtbWFwIC8gbWFkdmlzZS4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM0MworLy8gRklYTUU6IEdpdmUgdXAg
c29tZSBvZiB0aGUgY2FjaGVkIGZhc3QgbWVtb3JpZXMgaWYgdGhlIEdDIGRldGVybWluZXMgaXQn
cyBlYXN5IHRvIGdldCB0aGVtIGJhY2ssIGFuZCB0aGV5IGhhdmVuJ3QgYmVlbiB1c2VkIGluIGEg
d2hpbGUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NzMKKwor
CiBuYW1lc3BhY2UgewotY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Citjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisKK05FVkVSX0lOTElORSBOT19SRVRVUk5fRFVFX1RPX0NSQVNI
IHZvaWQgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpIHsgQ1JBU0goKTsgfQorTkVW
RVJfSU5MSU5FIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3ZWJBc3NlbWJseUNvdWxkbnRV
bm1hcE1lbW9yeUJ5dGVzKCkgeyBDUkFTSCgpOyB9CitORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRudFVucHJvdGVjdE1lbW9yeSgpIHsgQ1JB
U0goKTsgfQorCit2b2lkKiBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzKQoreworI2lmIE9TKERBUldJ
TikKKyAgICBpbnQgZmQgPSBWTV9UQUdfRk9SX1dFQkFTU0VNQkxZX01FTU9SWTsKKyNlbHNlCisg
ICAgaW50IGZkID0gLTE7CisjZW5kaWYKKworICAgIHZvaWQqIGxvY2F0aW9uID0gbW1hcChudWxs
cHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCBmZCwgMCk7Cisg
ICAgcmV0dXJuIGxvY2F0aW9uID09IE1BUF9GQUlMRUQgPyBudWxscHRyIDogbG9jYXRpb247CiB9
CiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdlYkFz
c2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKQordm9pZCBtdW5tYXBCeXRlcyh2b2lkKiBtZW1v
cnksIHNpemVfdCBzaXplKQogewotICAgIENSQVNIKCk7CisgICAgaWYgKFVOTElLRUxZKG11bm1h
cChtZW1vcnksIHNpemUpKSkKKyAgICAgICAgd2ViQXNzZW1ibHlDb3VsZG50VW5tYXBNZW1vcnlC
eXRlcygpOwogfQogCi1pbmxpbmUgYm9vbCBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzLCB2b2lkKiYg
bWVtb3J5KQordm9pZCB6ZXJvQW5kVW5wcm90ZWN0Qnl0ZXModm9pZCogc3RhcnQsIHNpemVfdCBi
eXRlcykKIHsKLSAgICBkYXRhTG9nSWYodmVyYm9zZSwgIkF0dGVtcHRpbmcgdG8gbW1hcCAiLCBi
eXRlcywgIiBieXRlczogIik7Ci0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2Ug
aGFkIGEgVk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MzYwMAotICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwgYnl0
ZXMsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwotICAgIGlmIChy
ZXN1bHQgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZmFp
bGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYnl0ZXMpIHsKKyAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlplcm9pbmcgYW5kIHVucHJvdGVjdGluZyAiLCBieXRlcywg
IiBmcm9tICIsIFJhd1BvaW50ZXIoc3RhcnQpKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxk
IGJlIHNtYXJ0ZXIgYWJvdXQgbWVtc2V0IC8gbW1hcCAvIG1hZHZpc2UuIEhlcmUsIHdlIG1heSBu
b3QgbmVlZCB0byBhY3Qgc3luY2hyb25vdXNseSwgb3IgbWF5YmUgd2UgY2FuIG1lbXNldCt1bnBy
b3RlY3Qgc21hbGxlciByYW5nZXMgb2YgbWVtb3J5ICh3aGljaCB3b3VsZCBwYXkgb2ZmIGlmIG5v
dCBhbGwgdGhlIHdyaXRhYmxlIG1lbW9yeSB3YXMgYWN0dWFsbHkgcGh5c2ljYWxseSBiYWNrZWQ6
IG1lbXNldCBmb3JjZXMgcGh5c2ljYWwgYmFja2luZyBvbmx5IHRvIHVucHJvdGVjdCBpdCByaWdo
dCBhZnRlcikuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAzNDMK
KyAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCBieXRlcyk7CisgICAgICAgIGlmIChVTkxJS0VMWSht
cHJvdGVjdChzdGFydCwgYnl0ZXMsIFBST1RfTk9ORSkpKQorICAgICAgICAgICAgd2ViQXNzZW1i
bHlDb3VsZG50VW5wcm90ZWN0TWVtb3J5KCk7CiAgICAgfQotICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJzdWNjZWVkZWQiKTsKLSAgICBtZW1vcnkgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHRydWU7
CiB9CiAKLWNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQorLy8gQWxsb2Nh
dGUgZmFzdCBtZW1vcmllcyB2ZXJ5IGVhcmx5IGF0IHByb2dyYW0gc3RhcnR1cCBhbmQgY2FjaGUg
dGhlbS4gVGhlIGZhc3QgbWVtb3JpZXMgdXNlIHNpZ25pZmljYW50IGFtb3VudHMgb2YgdmlydHVh
bCB1bmNvbW1pdHRlZCBhZGRyZXNzIHNwYWNlLCByZWR1Y2luZyB0aGUgbGlrZWxpaG9vZCB0aGF0
IHdlJ2xsIG9idGFpbiBhbnkgaWYgd2Ugd2FpdCB0byBhbGxvY2F0ZSB0aGVtLgorLy8gV2Ugc3Rp
bGwgdHJ5IHRvIGFsbG9jYXRlIGZhc3QgbWVtb3JpZXMgYXQgcnVudGltZSwgYW5kIHdpbGwgY2Fj
aGUgdGhlbSB3aGVuIHJlbGlucXVpc2hlZCB1cCB0byB0aGUgcHJlYWxsb2NhdGlvbiBsaW1pdC4K
Ky8vIE5vdGUgdGhhdCB0aGlzIHN0YXRlIGlzIHBlci1wcm9jZXNzLCBub3QgcGVyLVZNLgorLy8g
V2UgdXNlIHNpbXBsZSBzdGF0aWMgZ2xvYmFscyB3aGljaCBkb24ndCBhbGxvY2F0ZSB0byBhdm9p
ZCBlYXJseSBmcmFnbWVudGF0aW9uIGFuZCB0byBrZWVwIG1hbmFnZW1lbnQgdG8gdGhlIGJhcmUg
bWluaW11bS4gV2UgYXZvaWQgbG9ja2luZyBiZWNhdXNlIGZhc3QgbWVtb3JpZXMgdXNlIHNlZ2Zh
dWx0IHNpZ25hbCBoYW5kbGluZyB0byBoYW5kbGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gVGhp
cyByZXF1aXJlcyBpZGVudGlmeWluZyBpZiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpcyBpbiBhIGZh
c3QgbWVtb3J5IHJhbmdlLCB3aGljaCBzaG91bGQgYXZvaWQgYWNxdWlyaW5nIGEgbG9jayBsZXN0
IHRoZSBhY3R1YWwgc2lnbmFsIHdhcyBjYXVzZWQgYnkgdGhpcyB2ZXJ5IGNvZGUgd2hpbGUgaXQg
YWxyZWFkeSBoZWxkIHRoZSBsb2NrLgorLy8gU3BlZWQgYW5kIGNvbnRlbnRpb24gZG9uJ3QgcmVh
bGx5IG1hdHRlciBoZXJlLCBidXQgc2ltcGxpY2l0eSBkb2VzLiBXZSB0aGVyZWZvcmUgdXNlIHN0
cmFpZ2h0Zm9yd2FyZCBGSUZPcyBmb3Igb3VyIGNhY2hlLCBhbmQgbGluZWFyIHRyYXZlcnNhbCBm
b3IgdGhlIGxpc3Qgb2YgY3VycmVudGx5IGFjdGl2ZSBmYXN0IG1lbW9yaWVzLgorY29uc3RleHBy
IHNpemVfdCBmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQgeyAxNiB9OworY29uc3RleHByIHNpemVf
dCBmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1pdCB7IDMyIH07IC8vIFByZXZlbnRzIGZpbGxp
bmcgdXAgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KK3N0YXRpY19hc3NlcnQoZmFzdE1lbW9y
eUFsbG9jYXRpb25Tb2Z0TGltaXQgPj0gZmFzdE1lbW9yeUNhY2hlSGFyZExpbWl0LCAiVGhlIGNh
Y2hlIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIHdlJ2xsIGV2ZXIg
YWxsb2NhdGUiKTsKK3NpemVfdCBmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCB7IDAgfTsKK3N0
ZDo6YXRvbWljPHZvaWQqPiBmYXN0TWVtb3J5Q2FjaGVbZmFzdE1lbW9yeUNhY2hlSGFyZExpbWl0
XSA9IHsgQVRPTUlDX1ZBUl9JTklUKG51bGxwdHIpIH07CitzdGQ6OmF0b21pYzx2b2lkKj4gY3Vy
cmVudGx5QWN0aXZlRmFzdE1lbW9yaWVzW2Zhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0XSA9
IHsgQVRPTUlDX1ZBUl9JTklUKG51bGxwdHIpIH07CitzdGQ6OmF0b21pYzxzaXplX3Q+IGN1cnJl
bnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcyA9IEFUT01JQ19WQVJfSU5JVCgwKTsKK3N0ZDo6YXRv
bWljPHNpemVfdD4gb2JzZXJ2ZWRNYXhpbXVtRmFzdE1lbW9yeSA9IEFUT01JQ19WQVJfSU5JVCgw
KTsKKwordm9pZCogdHJ5R2V0Q2FjaGVkRmFzdE1lbW9yeSgpCiB7Ci0gICAgc3dpdGNoIChtb2Rl
KSB7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogcmV0dXJuICJCb3VuZHND
aGVja2luZyI7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHJldHVybiAiU2lnbmFs
aW5nIjsKLSAgICBjYXNlIE1lbW9yeU1vZGU6Ok51bWJlck9mTWVtb3J5TW9kZXM6IGJyZWFrOwor
ICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291
bnQ7ICsraWR4KSB7CisgICAgICAgIGlmICh2b2lkKiBwcmV2aW91cyA9IGZhc3RNZW1vcnlDYWNo
ZVtpZHhdLmV4Y2hhbmdlKG51bGxwdHIsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKQorICAg
ICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwogICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heEZhc3RNZW1vcmllcyA9IDQ7Ci1zdGF0aWMgdW5zaWduZWQg
YWxsb2NhdGVkRmFzdE1lbW9yaWVzIHsgMCB9OwotU3RhdGljTG9jayBtZW1vcnlMb2NrOwotaW5s
aW5lIERlcXVlPHZvaWQqLCBtYXhGYXN0TWVtb3JpZXM+JiBhdmFpbGFibGVGYXN0TWVtb3JpZXMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImKQorYm9vbCB0cnlBZGRUb0NhY2hlZEZhc3RNZW1vcnkodm9p
ZCogbWVtb3J5KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEZXF1ZTx2b2lkKiwgbWF4
RmFzdE1lbW9yaWVzPj4gYXZhaWxhYmxlRmFzdE1lbW9yaWVzOwotICAgIHJldHVybiBhdmFpbGFi
bGVGYXN0TWVtb3JpZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhc3RNZW1vcnlQ
cmVhbGxvY2F0ZUNvdW50OyArK2kpIHsKKyAgICAgICAgdm9pZCogZXhwZWN0ZWQgPSBudWxscHRy
OworICAgICAgICBpZiAoZmFzdE1lbW9yeUNhY2hlW2ldLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25n
KGV4cGVjdGVkLCBtZW1vcnksIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKSB7CisgICAgICAg
ICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiQ2FjaGVkIGZhc3QgbWVtb3J5ICIsIFJhd1BvaW50
ZXIobWVtb3J5KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBIYXNoU2V0PHZvaWQqPiYgYWN0aXZlRmFz
dE1lbW9yaWVzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgdHJ5QWRkVG9DdXJyZW50bHlB
Y3RpdmVGYXN0TWVtb3JpZXModm9pZCogbWVtb3J5KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxIYXNoU2V0PHZvaWQqPj4gYWN0aXZlRmFzdE1lbW9yaWVzOwotICAgIHJldHVybiBhY3Rp
dmVGYXN0TWVtb3JpZXM7CisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgZmFzdE1lbW9y
eUFsbG9jYXRpb25Tb2Z0TGltaXQ7ICsraWR4KSB7CisgICAgICAgIHZvaWQqIGV4cGVjdGVkID0g
bnVsbHB0cjsKKyAgICAgICAgaWYgKGN1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllc1tpZHhdLmNv
bXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4cGVjdGVkLCBtZW1vcnksIHN0ZDo6bWVtb3J5X29yZGVy
X2FjcV9yZWwpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKIH0KIAotY29uc3QgSGFzaFNldDx2b2lkKj4mIHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKK3ZvaWQgcmVtb3ZlRnJvbUN1cnJlbnRseUFj
dGl2ZUZhc3RNZW1vcmllcyh2b2lkKiBtZW1vcnkpCiB7Ci0gICAgcmV0dXJuIGFjdGl2ZUZhc3RN
ZW1vcmllcyhsb2NrZXIpOworICAgIGZvciAoc2l6ZV90IGlkeCA9IDA7IGlkeCA8IGZhc3RNZW1v
cnlBbGxvY2F0aW9uU29mdExpbWl0OyArK2lkeCkgeworICAgICAgICB2b2lkKiBleHBlY3RlZCA9
IG1lbW9yeTsKKyAgICAgICAgaWYgKGN1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllc1tpZHhdLmNv
bXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4cGVjdGVkLCBudWxscHRyLCBzdGQ6Om1lbW9yeV9vcmRl
cl9hY3FfcmVsKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotaW5saW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYg
dm0sIHZvaWQqJiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUmIG1v
ZGUpCit2b2lkKiB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSkKIHsKLSAgICBhdXRvIGRlcXVlRmFz
dE1lbW9yeSA9IFsmXSAoKSAtPiBib29sIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBl
dmVudHVhbGx5IHJldHVybiB0aGVzZSB0byB0aGUgT1MgaWYgd2UgZ28gc29tZSBudW1iZXIgb2Yg
R0NzCi0gICAgICAgIC8vIHdpdGhvdXQgdXNpbmcgdGhlbS4KLSAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobWVtb3J5TG9jayk7Ci0gICAgICAgIGlmICghYXZhaWxhYmxlRmFzdE1lbW9yaWVzKGxv
Y2tlcikuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtZW1vcnkgPSBhdmFpbGFibGVGYXN0TWVt
b3JpZXMobG9ja2VyKS50YWtlRmlyc3QoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWN0
aXZlRmFzdE1lbW9yaWVzKGxvY2tlcikuYWRkKG1lbW9yeSk7Ci0gICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotICAgICAgICAgICAgbWFwcGVkQ2Fw
YWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXM7Ci0gICAgICAgICAgICBtb2RlID0gTWVtb3J5
TW9kZTo6U2lnbmFsaW5nOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgdm9pZCogbWVt
b3J5ID0gbnVsbHB0cjsKKworICAgIGlmIChMSUtFTFkoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlG
YXN0TWVtb3J5KCkpKSB7CisgICAgICAgIG1lbW9yeSA9IHRyeUdldENhY2hlZEZhc3RNZW1vcnko
KTsKKyAgICAgICAgaWYgKG1lbW9yeSkKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJ0cnlHZXRGYXN0TWVtb3J5IHJlLXVzaW5nICIsIFJhd1BvaW50ZXIobWVtb3J5KSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLy8gTm8gbWVtb3J5IHdhcyBhdmFpbGFibGUgaW4gdGhl
IGNhY2hlLiBNYXliZSB3YWl0aW5nIG9uIEdDIHdpbGwgZmluZCBhIGZyZWUgb25lLgorICAgICAg
ICAgICAgLy8gRklYTUUgY29sbGVjdFN5bmMoRnVsbCkgYW5kIGN1c3RvbSBlYWdlciBkZXN0cnVj
dGlvbiBvZiB3YXNtIG1lbW9yaWVzIGNvdWxkIGJlIGJldHRlci4gRm9yIG5vdyB1c2UgY29sbGVj
dEFsbEdhcmJhZ2UuIEFsc28sIG5vdGhpbmcgdGVsbHMgdXMgdGhlIGN1cnJlbnQgVk0gaXMgaG9s
ZGluZyBvbnRvIGZhc3QgbWVtb3JpZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzA3NDgKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRG
YXN0TWVtb3J5IHdhaXRpbmcgb24gR0MgYW5kIHJldHJ5aW5nIik7CisgICAgICAgICAgICB2bS5o
ZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CisgICAgICAgICAgICBtZW1vcnkgPSB0cnlHZXRDYWNo
ZWRGYXN0TWVtb3J5KCk7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5R2V0
RmFzdE1lbW9yeSB3YWl0ZWQgb24gR0MgYW5kIHJldHJpZWQgIiwgbWVtb3J5PyAic3VjY2Vzc2Z1
bGx5IiA6ICJ1bnNlY2Nlc3NmdWxseSIpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9OwogCi0gICAgYXV0byBmYWlsID0gW10gKCkgLT4gYm9vbCB7CisgICAgICAgIC8v
IFRoZSBzb2Z0IGxpbWl0IGlzIGluaGVyZW50bHkgcmFjeSBiZWNhdXNlIGNoZWNraW5nK2FsbG9j
YXRpb24gaXNuJ3QgYXRvbWljLiBFeGNlZWRpbmcgaXQgc2xpZ2h0bHkgaXMgZmluZS4KKyAgICAg
ICAgYm9vbCBhdEFsbG9jYXRpb25Tb2Z0TGltaXQgPSBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVt
b3JpZXMubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSA+PSBmYXN0TWVtb3J5QWxsb2Nh
dGlvblNvZnRMaW1pdDsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSAmJiBhdEFsbG9jYXRp
b25Tb2Z0TGltaXQsICJ0cnlHZXRGYXN0TWVtb3J5IHJlYWNoZWQgYWxsb2NhdGlvbiBzb2Z0IGxp
bWl0IG9mICIsIGZhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0KTsKKworICAgICAgICBpZiAo
IW1lbW9yeSAmJiAhYXRBbGxvY2F0aW9uU29mdExpbWl0KSB7CisgICAgICAgICAgICBtZW1vcnkg
PSBtbWFwQnl0ZXMoTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CisgICAgICAgICAgICBpZiAo
bWVtb3J5KSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IGN1cnJlbnRseUFsbG9jYXRlZCA9IDEg
KyBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMuZmV0Y2hfYWRkKDEsIHN0ZDo6bWVtb3J5
X29yZGVyX2FjcV9yZWwpOworICAgICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50bHlPYnNlcnZl
ZE1heGltdW0gPSBvYnNlcnZlZE1heGltdW1GYXN0TWVtb3J5LmxvYWQoc3RkOjptZW1vcnlfb3Jk
ZXJfYWNxdWlyZSk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRseUFsbG9jYXRlZCA+IGN1
cnJlbnRseU9ic2VydmVkTWF4aW11bSkgeworICAgICAgICAgICAgICAgICAgICBzaXplX3QgZXhw
ZWN0ZWQgPSBjdXJyZW50bHlPYnNlcnZlZE1heGltdW07CisgICAgICAgICAgICAgICAgICAgIGJv
b2wgc3VjY2VzcyA9IG9ic2VydmVkTWF4aW11bUZhc3RNZW1vcnkuY29tcGFyZV9leGNoYW5nZV9z
dHJvbmcoZXhwZWN0ZWQsIGN1cnJlbnRseUFsbG9jYXRlZCwgc3RkOjptZW1vcnlfb3JkZXJfYWNx
X3JlbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgY3VycmVudGx5
IG9ic2VydmVkIG1heGltdW0gaXMgbm93ICIsIGN1cnJlbnRseUFsbG9jYXRlZCk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGxvc3QgdGhl
IHVwZGF0ZSByYWNlLCBidXQgdGhlIGNvdW50ZXIgaXMgbW9ub3RvbmljIHNvIHRoZSB3aW5uZXIg
bXVzdCBoYXZlIHVwZGF0ZWQgdGhlIHZhbHVlIHRvIHdoYXQgd2Ugd2VyZSBnb2luZyB0byB1cGRh
dGUgaXQgdG8sIG9yIG11bHRpcGxlIHdpbm5lcnMgZGlkIHNvLgorICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGV4cGVjdGVkID49IGN1cnJlbnRseUFsbG9jYXRlZCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRGYXN0
TWVtb3J5IGFsbG9jYXRlZCAiLCBSYXdQb2ludGVyKG1lbW9yeSksICIsIGN1cnJlbnRseSBhbGxv
Y2F0ZWQgaXMgIiwgY3VycmVudGx5QWxsb2NhdGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChtZW1vcnkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0cnlB
ZGRUb0N1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllcyhtZW1vcnkpKSkgeworICAgICAgICAgICAg
Ly8gV2UgZ290IGEgbWVtb3J5LCBidXQgcmVhY2hlZCB0aGUgYWxsb2NhdGlvbiBzb2Z0IGxpbWl0
ICphbmQqIGFsbCBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yaWVzIGFyZSBhY3RpdmUsIG5vbmUgYXJl
IGNhY2hlZC4gVGhhdCdzIGEgYnVtbWVyLCB3ZSBoYXZlIHRvIGdldCByaWQgb2Ygb3VyIG1lbW9y
eS4gV2UgY2FuJ3QganVzdCBob2xkIG9uIHRvIGl0IGJlY2F1c2UgdGhlIGxpc3Qgb2YgYWN0aXZl
IGZhc3QgbWVtb3JpZXMgbXVzdCBiZSBwcmVjaXNlLgorICAgICAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgZm91bmQgYSBmYXN0IG1lbW9yeSBidXQgaGFkIHRv
IGdpdmUgaXQgdXAiKTsKKyAgICAgICAgICAgIG11bm1hcEJ5dGVzKG1lbW9yeSwgTWVtb3J5Ojpm
YXN0TWFwcGVkQnl0ZXMoKSk7CisgICAgICAgICAgICBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVt
b3JpZXMuZmV0Y2hfc3ViKDEsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpOworICAgICAgICAg
ICAgbWVtb3J5ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbWVtb3J5
KSB7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRGYXN0TWVtb3J5IGNvdWxk
bid0IHJlLXVzZSBvciBhbGxvY2F0ZSBhIGZhc3QgbWVtb3J5Iik7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSgpKSkKICAgICAg
ICAgICAgIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH07CisgICAgfQogCi0gICAgLy8gV2UgbWlnaHQgR0MgaGVyZSBzbyB3ZSBz
aG91bGQgYmUgaG9sZGluZyB0aGUgQVBJIGxvY2suCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBi
ZSBhYmxlIHRvIHN5bmNyb25vdXNseSB0cmlnZ2VyIHRoZSBHQyBmcm9tIGFub3RoZXIgdGhyZWFk
LgotICAgIEFTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBp
ZiAoVU5MSUtFTFkoIWZhc3RNZW1vcnlFbmFibGVkKCkpKQotICAgICAgICByZXR1cm4gZmFpbCgp
OworICAgIHJldHVybiBtZW1vcnk7Cit9CiAKLSAgICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUgd2Ug
aGF2ZSBhIHN0dWIgcHJpb3IgdG8gcnVubmluZyBjb2RlLgotICAgIGlmIChVTkxJS0VMWSghVGh1
bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRv
cikpKQotICAgICAgICByZXR1cm4gZmFpbCgpOwordm9pZCogdHJ5R2V0U2xvd01lbW9yeShzaXpl
X3QgYnl0ZXMpCit7CisgICAgdm9pZCogbWVtb3J5ID0gbW1hcEJ5dGVzKGJ5dGVzKTsKKyAgICBk
YXRhTG9nTG5JZihtZW1vcnkgJiYgdmVyYm9zZSwgIk9idGFpbmVkIHNsb3cgbWVtb3J5ICIsIFJh
d1BvaW50ZXIobWVtb3J5KSwgIiB3aXRoIGNhcGFjaXR5ICIsIGJ5dGVzKTsKKyAgICBkYXRhTG9n
TG5JZighbWVtb3J5ICYmIHZlcmJvc2UsICJGYWlsZWQgb2J0YWluaW5nIHNsb3cgbWVtb3J5IHdp
dGggY2FwYWNpdHkgIiwgYnl0ZXMpOworICAgIHJldHVybiBtZW1vcnk7Cit9CiAKLSAgICBBU1NF
UlQoYWxsb2NhdGVkRmFzdE1lbW9yaWVzIDw9IG1heEZhc3RNZW1vcmllcyk7Ci0gICAgaWYgKGRl
cXVlRmFzdE1lbW9yeSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgcmVsaW5xdWlzaE1l
bW9yeSh2b2lkKiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUsIHNpemVfdCBtYXBwZWRDYXBh
Y2l0eSwgTWVtb3J5TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
TWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6
OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWFw
cGVkQ2FwYWNpdHkgPT0gTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CiAKLSAgICAvLyBJZiB3
ZSBoYXZlIGFsbG9jYXRlZCBhbGwgdGhlIGZhc3QgbWVtb3JpZXMuLi4gdG9vIGJhZC4KLSAgICBp
ZiAoYWxsb2NhdGVkRmFzdE1lbW9yaWVzID09IG1heEZhc3RNZW1vcmllcykgewotICAgICAgICAv
LyBUaGVyZSBpcyBhIHJlYXNvbmFibGUgY2hhbmNlIHRoYXQgYW5vdGhlciBtb2R1bGUgaGFzIGRp
ZWQgYnV0IGhhcyBub3QgYmVlbiBjb2xsZWN0ZWQgeWV0LiBEb24ndCBsb3NlIGhvcGUgeWV0IQot
ICAgICAgICB2bS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7Ci0gICAgICAgIGlmIChkZXF1ZUZh
c3RNZW1vcnkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFp
bCgpOworICAgICAgICAvLyBUaGlzIG1lbW9yeSBjYW5ub3QgY2F1c2UgYSB0cmFwIGFueW1vcmUu
CisgICAgICAgIHJlbW92ZUZyb21DdXJyZW50bHlBY3RpdmVGYXN0TWVtb3JpZXMobWVtb3J5KTsK
KworICAgICAgICAvLyBXZSBtYXkgY2FjaGUgZmFzdCBtZW1vcmllcy4gQXNzdW1pbmcgd2Ugd2ls
bCwgd2UgaGF2ZSB0byByZXNldCB0aGVtIGJlZm9yZSBpbnNlcnRpbmcgdGhlbSBpbnRvIHRoZSBj
YWNoZS4KKyAgICAgICAgemVyb0FuZFVucHJvdGVjdEJ5dGVzKG1lbW9yeSwgd3JpdGFibGVTaXpl
KTsKKworICAgICAgICBpZiAodHJ5QWRkVG9DYWNoZWRGYXN0TWVtb3J5KG1lbW9yeSkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInJlbGlucXVp
c2hNZW1vcnkgdW5hYmxlIHRvIGNhY2hlIGZhc3QgbWVtb3J5LCBmcmVlaW5nIGluc3RlYWQgIiwg
UmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAgICAgbXVubWFwQnl0ZXMobWVtb3J5LCBNZW1vcnk6
OmZhc3RNYXBwZWRCeXRlcygpKTsKKyAgICAgICAgY3VycmVudGx5QWxsb2NhdGVkRmFzdE1lbW9y
aWVzLmZldGNoX3N1YigxLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1tYXBCeXRlcyhmYXN0TWVtb3J5TWFwcGVkQnl0ZXMs
IG1lbW9yeSkpIHsKLSAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVkQnl0
ZXM7Ci0gICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7Ci0gICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1lbW9yeUxvY2spOwotICAgICAgICBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMr
KzsKLSAgICAgICAgYXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKS5hZGQo
bWVtb3J5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAicmVsaW5xdWlzaEZhc3RNZW1vcnkgZnJlZWluZyBzbG93IG1lbW9yeSAi
LCBSYXdQb2ludGVyKG1lbW9yeSkpOworICAgICAgICBtdW5tYXBCeXRlcyhtZW1vcnksIG1hcHBl
ZENhcGFjaXR5KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1i
ZXJPZk1lbW9yeU1vZGVzOgorICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobWVtb3J5
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitib29sIG1ha2VOZXdNZW1vcnlSZWFkV3JpdGVPclJlbGlucXVpc2godm9pZCogbWVt
b3J5LCBzaXplX3QgaW5pdGlhbEJ5dGVzLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHlCeXRlcywgTWVt
b3J5TW9kZSBtb2RlKQoreworICAgIEFTU0VSVChtZW1vcnkgJiYgaW5pdGlhbEJ5dGVzIDw9IG1h
cHBlZENhcGFjaXR5Qnl0ZXMpOworICAgIGlmIChpbml0aWFsQnl0ZXMpIHsKKyAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIk1hcmtpbmcgV2ViQXNzZW1ibHkgbWVtb3J5J3MgIiwgUmF3UG9p
bnRlcihtZW1vcnkpLCAiJ3MgaW5pdGlhbCAiLCBpbml0aWFsQnl0ZXMsICIgYnl0ZXMgYXMgcmVh
ZCt3cml0ZSIpOworICAgICAgICBpZiAobXByb3RlY3QobWVtb3J5LCBpbml0aWFsQnl0ZXMsIFBS
T1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiB3aHkgPSBz
dHJlcnJvcihlcnJubyk7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRmFpbGVk
IG1ha2luZyBtZW1vcnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpLCAiIHJlYWRhYmxlIGFuZCB3cml0
YWJsZTogIiwgd2h5KTsKKyAgICAgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobWVtb3J5LCAwLCBt
YXBwZWRDYXBhY2l0eUJ5dGVzLCBtb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCiAKLSAgICByZXR1cm4gZmFpbCgpOworCitjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1l
bW9yeU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAgICBjYXNlIE1l
bW9yeU1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOworICAgIGNhc2UgTWVtb3J5
TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOwogfQogCi1pbmxpbmUgdm9pZCByZWxl
YXNlRmFzdE1lbW9yeSh2b2lkKiYgbWVtb3J5LCBzaXplX3Qgd3JpdGFibGVTaXplLCBzaXplX3Qg
bWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUgbW9kZSkKK3ZvaWQgTWVtb3J5Ojppbml0aWFsaXpl
UHJlYWxsb2NhdGlvbnMoKQogewotICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZyB8fCAhbWVtb3J5KQorICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlG
YXN0TWVtb3J5KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSRUxFQVNFX0FTU0VSVChtZW1v
cnkgJiYgbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKTsKLSAgICBBU1NF
UlQoZmFzdE1lbW9yeUVuYWJsZWQoKSk7CisgICAgLy8gUmFjZXMgY2Fubm90IG9jY3VyIGluIHRo
aXMgZnVuY3Rpb246IGl0IGlzIG9ubHkgY2FsbGVkIGF0IHByb2dyYW0gaW5pdGlhbGl6YXRpb24s
IGJlZm9yZSBXZWJBc3NlbWJseSBjYW4gYmUgaW52b2tlZC4KKworICAgIGNvbnN0IGF1dG8gc3Rh
cnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgY29uc3Qgc2l6ZV90IGRlc2lyZWRG
YXN0TWVtb3JpZXMgPSBzdGQ6Om1pbjxzaXplX3Q+KE9wdGlvbnM6OndlYkFzc2VtYmx5RmFzdE1l
bW9yeVByZWFsbG9jYXRlQ291bnQoKSwgZmFzdE1lbW9yeUNhY2hlSGFyZExpbWl0KTsKKworICAg
IC8vIFN0YXJ0IG9mZiB0cnlpbmcgdG8gYWxsb2NhdGUgZmFzdCBtZW1vcmllcyBjb250aWd1b3Vz
bHkgc28gdGhleSBkb24ndCBmcmFnbWVudCBlYWNoIG90aGVyLiBUaGlzIGNhbiBmYWlsIGlmIHRo
ZSBhZGRyZXNzIHNwYWNlIGlzIG90aGVyd2lzZSBmcmFnbWVudGVkLiBJbiB0aGF0IGNhc2UsIGdv
IGZvciBzbWFsbGVyIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbnMuIFdlJ2xsIGV2ZW50dWFsbHkgZ2V0
IGluZGl2aWR1YWwgbm9uLWNvbnRpZ3VvdXMgZmFzdCBtZW1vcmllcyBhbGxvY2F0ZWQsIG9yIHdl
J2xsIGp1c3QgYmUgdW5hYmxlIHRvIGZpdCBhIHNpbmdsZSBvbmUgYXQgd2hpY2ggcG9pbnQgd2Ug
Z2l2ZSB1cC4KKyAgICBhdXRvIGFsbG9jYXRlQ29udGlndW91c0Zhc3RNZW1vcmllcyA9IFsmXSAo
c2l6ZV90IG51bUNvbnRpZ3VvdXMpIC0+IGJvb2wgeworICAgICAgICBpZiAodm9pZCAqbWVtb3J5
ID0gbW1hcEJ5dGVzKE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkgKiBudW1Db250aWd1b3VzKSkg
eworICAgICAgICAgICAgZm9yIChzaXplX3Qgc3ViTWVtb3J5ID0gMDsgc3ViTWVtb3J5IDwgbnVt
Q29udGlndW91czsgKytzdWJNZW1vcnkpIHsKKyAgICAgICAgICAgICAgICB2b2lkKiBzdGFydEFk
ZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5OjpmYXN0TWFw
cGVkQnl0ZXMoKSAqIHN1Yk1lbW9yeSArIHN1Yk1lbW9yeTsKKyAgICAgICAgICAgICAgICBib29s
IGluc2VydGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY2FjaGVFbnRy
eSA9IDA7IGNhY2hlRW50cnkgPCBmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQ7ICsrY2FjaGVFbnRy
eSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnld
LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkgPT0gbnVsbHB0cikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLnN0b3JlKHN0YXJ0QWRk
cmVzcywgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChpbnNlcnRlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIHNp
emVfdCBmcmFnbWVudHMgPSAwOworICAgIHNpemVfdCBudW1GYXN0TWVtb3JpZXMgPSAwOworICAg
IHNpemVfdCBjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQgPSBkZXNpcmVkRmFzdE1l
bW9yaWVzOworICAgIHdoaWxlIChudW1GYXN0TWVtb3JpZXMgIT0gZGVzaXJlZEZhc3RNZW1vcmll
cyAmJiBjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQgIT0gMCkgeworICAgICAgICBp
ZiAoYWxsb2NhdGVDb250aWd1b3VzRmFzdE1lbW9yaWVzKGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0
aW9uQXR0ZW1wdCkpIHsKKyAgICAgICAgICAgIG51bUZhc3RNZW1vcmllcyArPSBjb250aWd1b3Vz
TWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQ7CisgICAgICAgICAgICBjb250aWd1b3VzTWVtb3J5QWxs
b2NhdGlvbkF0dGVtcHQgPSBzdGQ6Om1pbihjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVt
cHQgLSAxLCBkZXNpcmVkRmFzdE1lbW9yaWVzIC0gbnVtRmFzdE1lbW9yaWVzKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAtLWNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdDsK
KyAgICAgICAgKytmcmFnbWVudHM7CisgICAgfQorCisgICAgZmFzdE1lbW9yeVByZWFsbG9jYXRl
Q291bnQgPSBudW1GYXN0TWVtb3JpZXM7CisgICAgY3VycmVudGx5QWxsb2NhdGVkRmFzdE1lbW9y
aWVzLnN0b3JlKGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50LCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkKTsKKyAgICBvYnNlcnZlZE1heGltdW1GYXN0TWVtb3J5LnN0b3JlKGZhc3RNZW1vcnlQ
cmVhbGxvY2F0ZUNvdW50LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIAotICAgIG1lbXNl
dChtZW1vcnksIDAsIHdyaXRhYmxlU2l6ZSk7Ci0gICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgd3Jp
dGFibGVTaXplLCBQUk9UX05PTkUpKQotICAgICAgICBDUkFTSCgpOworICAgIGNvbnN0IGF1dG8g
ZW5kVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIo
bWVtb3J5TG9jayk7Ci0gICAgYm9vbCByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2Vy
KS5yZW1vdmUobWVtb3J5KTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKLSAg
ICBBU1NFUlQoYXZhaWxhYmxlRmFzdE1lbW9yaWVzKGxvY2tlcikuc2l6ZSgpIDwgYWxsb2NhdGVk
RmFzdE1lbW9yaWVzKTsKLSAgICBhdmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2VyKS5hcHBlbmQo
bWVtb3J5KTsKLSAgICBtZW1vcnkgPSBudWxscHRyOworICAgIGZvciAoc2l6ZV90IGNhY2hlRW50
cnkgPSAwOyBjYWNoZUVudHJ5IDwgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQ7ICsrY2FjaGVF
bnRyeSkgeworICAgICAgICB2b2lkKiBzdGFydEFkZHJlc3MgPSBmYXN0TWVtb3J5Q2FjaGVbY2Fj
aGVFbnRyeV0ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgQVNTRVJU
KHN0YXJ0QWRkcmVzcyk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcmUtYWxsb2Nh
dGlvbiBvZiBXZWJBc3NlbWJseSBmYXN0IG1lbW9yeSBhdCAiLCBSYXdQb2ludGVyKHN0YXJ0QWRk
cmVzcykpOworICAgIH0KKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJlLWFsbG9jYXRlZCAi
LCBmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCwgIiBXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVz
IGluICIsIGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50ID09IDAgPyAwIDogZnJhZ21lbnRzLCBm
cmFnbWVudHMgPT0gMSA/ICIgZnJhZ21lbnQsIHRvb2sgIiA6ICIgZnJhZ21lbnRzLCB0b29rICIs
IGVuZFRpbWUgLSBzdGFydFRpbWUpOwogfQogCiBNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0pCkBAIC0xOTQsODcgKzM0Miw5NiBAQCBNZW1vcnk6Ok1l
bW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwg
c2l6ZV90IG1hcHBlZAogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Ok1lbW9yeSBh
bGxvY2F0aW5nICIsICp0aGlzKTsKIH0KIAotUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJ
bXBsKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9w
dGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVpcmVkTW9kZSkKK1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6
Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQogewor
ICAgIEFTU0VSVChpbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhp
bXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxs
ZXIuCiAKLSAgICBNZW1vcnlNb2RlIG1vZGUgPSByZXF1aXJlZE1vZGUgPyAqcmVxdWlyZWRNb2Rl
IDogTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7Ci0gICAgY29uc3Qgc2l6ZV90IHNpemUgPSBp
bml0aWFsLmJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1hcHBlZENhcGFjaXR5ID0gbWF4aW11bSA/IG1h
eGltdW0uYnl0ZXMoKSA6IFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKTsKLSAgICB2b2lkKiBtZW1v
cnkgPSBudWxscHRyOworICAgIGNvbnN0IHNpemVfdCBpbml0aWFsQnl0ZXMgPSBpbml0aWFsLmJ5
dGVzKCk7CisgICAgY29uc3Qgc2l6ZV90IG1heGltdW1CeXRlcyA9IG1heGltdW0gPyBtYXhpbXVt
LmJ5dGVzKCkgOiAwOworICAgIHNpemVfdCBtYXBwZWRDYXBhY2l0eUJ5dGVzID0gMDsKKyAgICBN
ZW1vcnlNb2RlIG1vZGU7CiAKLSAgICBhdXRvIG1ha2VFbXB0eU1lbW9yeSA9IFsmXSAoKSAtPiBS
ZWZQdHI8TWVtb3J5PiB7Ci0gICAgICAgIGlmIChtb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIFdlIG5lZWQgdG8gYmUgc3Vy
ZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCisgICAgaWYgKFVOTElLRUxZ
KCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2Vu
ZXJhdG9yKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgaWYgKG1heGltdW0gJiYg
IW1heGltdW1CeXRlcykgeworICAgICAgICAvLyBVc2VyIHNwZWNpZmllZCBhIHplcm8gbWF4aW11
bSwgaW5pdGlhbCBzaXplIG11c3QgYWxzbyBiZSB6ZXJvLgorICAgICAgICBSRUxFQVNFX0FTU0VS
VCghaW5pdGlhbEJ5dGVzKTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5p
dGlhbCwgbWF4aW11bSkpOwotICAgIH07Ci0KLSAgICBpZiAoIW1hcHBlZENhcGFjaXR5KSB7Ci0g
ICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugc3BlY2lmaWVkIGEgemVybyBhcyBtYXhpbXVtICh3aGlj
aCBtZWFucyB3ZSBhbHNvIGhhdmUgemVybyBhcyBpbml0aWFsIHNpemUpLgotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghc2l6ZSk7Ci0gICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6
OmNyZWF0ZSBhbGxvY2F0aW5nIG5vdGhpbmciKTsKLSAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1l
bW9yeSgpOwogICAgIH0KIAotICAgIGJvb2wgY2FuVXNlRmFzdE1lbW9yeSA9ICFyZXF1aXJlZE1v
ZGUgfHwgcmVxdWlyZWRNb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZzsKLSAgICBpZiAoIWNh
blVzZUZhc3RNZW1vcnkgfHwgIXRyeUdldEZhc3RNZW1vcnkodm0sIG1lbW9yeSwgbWFwcGVkQ2Fw
YWNpdHksIG1vZGUpKSB7Ci0gICAgICAgIGlmIChtb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGlmIChPcHRpb25zOjpz
aW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkgPyB0cnVlIDogIW1tYXBCeXRlcyhtYXBwZWRD
YXBhY2l0eSwgbWVtb3J5KSkgewotICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBkaWZm
ZXJlbnQgbnVtYmVyLgotICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6
Y3JlYXRlIG1tYXAgZmFpbGVkIG9uY2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcgYWdhaW4iKTsKLSAg
ICAgICAgICAgIG1hcHBlZENhcGFjaXR5ID0gc2l6ZTsKLSAgICAgICAgICAgIGlmICghbWFwcGVk
Q2FwYWNpdHkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5
OjpjcmVhdGUgbW1hcCBub3QgdHJ5aW5nIGFnYWluIGJlY2F1c2Ugc2l6ZSBpcyB6ZXJvIik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1lbW9yeSgpOwotICAgICAgICAgICAgfQor
ICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7CiAKLSAgICAgICAgICAgIGlmICghbW1hcEJ5dGVz
KG1hcHBlZENhcGFjaXR5LCBtZW1vcnkpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAgZmFpbGVkIHR3aWNlIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9CisgICAgLy8gRmlyc3QgdHJ5IGZh
c3QgbWVtb3J5LCBiZWNhdXNlIHRoZXkncmUgZmFzdC4gRmFzdCBtZW1vcnkgaXMgc3VpdGFibGUg
Zm9yIGFueSBpbml0aWFsIC8gbWF4aW11bS4KKyAgICBtZW1vcnkgPSB0cnlHZXRGYXN0TWVtb3J5
KHZtKTsKKyAgICBpZiAobWVtb3J5KSB7CisgICAgICAgIG1hcHBlZENhcGFjaXR5Qnl0ZXMgPSBN
ZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpOworICAgICAgICBtb2RlID0gTWVtb3J5TW9kZTo6U2ln
bmFsaW5nOworICAgIH0KKworICAgIC8vIElmIHdlIGNhbid0IGdldCBhIGZhc3QgbWVtb3J5IGJ1
dCB0aGUgdXNlciBleHByZXNzZWQgdGhlIGludGVudCB0byBncm93IG1lbW9yeSB1cCB0byBhIGNl
cnRhaW4gbWF4aW11bSB0aGVuIHdlIHNob3VsZCB0cnkgdG8gaG9ub3IgdGhhdCBkZXNpcmUuIEl0
J2xsIG1lYW4gdGhhdCBncm93IGlzIG1vcmUgbGlrZWx5IHRvIHN1Y2NlZWQsIGFuZCB3b24ndCBy
ZXF1aXJlIHJlbWFwcGluZy4KKyAgICBpZiAoIW1lbW9yeSAmJiBtYXhpbXVtKSB7CisgICAgICAg
IG1lbW9yeSA9IHRyeUdldFNsb3dNZW1vcnkobWF4aW11bUJ5dGVzKTsKKyAgICAgICAgaWYgKG1l
bW9yeSkgeworICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHlCeXRlcyA9IG1heGltdW1CeXRlczsK
KyAgICAgICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzsKICAgICAgICAg
fQogICAgIH0KIAotICAgIEFTU0VSVChtZW1vcnkgJiYgc2l6ZSA8PSBtYXBwZWRDYXBhY2l0eSk7
Ci0gICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkp
IHsKLSAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGV2ZXIgb2NjdXI/IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4OTAKLSAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1wcm90ZWN0IGZhaWxlZCIpOwotICAgICAgICByZWxl
YXNlRmFzdE1lbW9yeShtZW1vcnksIDAsIG1hcHBlZENhcGFjaXR5LCBtb2RlKTsKKyAgICAvLyBX
ZSdyZSBzdHVjayB3aXRoIGEgc2xvdyBtZW1vcnkgd2hpY2ggbWF5IGJlIHNsb3dlciBvciBpbXBv
c3NpYmxlIHRvIGdyb3cuCisgICAgaWYgKCFtZW1vcnkpIHsKKyAgICAgICAgbWVtb3J5ID0gdHJ5
R2V0U2xvd01lbW9yeShpbml0aWFsQnl0ZXMpOwogICAgICAgICBpZiAobWVtb3J5KSB7Ci0gICAg
ICAgICAgICBpZiAobXVubWFwKG1lbW9yeSwgbWFwcGVkQ2FwYWNpdHkpKQotICAgICAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgICAgICBtYXBwZWRDYXBhY2l0eUJ5dGVzID0gaW5pdGlhbEJ5
dGVzOworICAgICAgICAgICAgbW9kZSA9IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIHN1Y2NlZWRlZCIpOwotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTWVtb3J5KG1lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgbWFwcGVkQ2FwYWNp
dHksIG1vZGUpKTsKKyAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBpZiAoIW1ha2VOZXdNZW1vcnlSZWFkV3JpdGVPclJlbGlucXVpc2gobWVtb3J5LCBpbml0
aWFsQnl0ZXMsIG1hcHBlZENhcGFjaXR5Qnl0ZXMsIG1vZGUpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KG1lbW9yeSwgaW5pdGlhbCwg
bWF4aW11bSwgbWFwcGVkQ2FwYWNpdHlCeXRlcywgbW9kZSkpOwogfQogCi1SZWZQdHI8TWVtb3J5
PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiBtb2RlKQorTWVtb3J5Ojp+TWVtb3J5KCkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAv
LyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCi0gICAgUmVmUHRyPE1l
bW9yeT4gcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgaW5pdGlhbCwgbWF4aW11bSwgbW9kZSk7Ci0g
ICAgaWYgKHJlc3VsdCkgewotICAgICAgICBpZiAocmVzdWx0LT5tb2RlKCkgPT0gTWVtb3J5TW9k
ZTo6U2lnbmFsaW5nKQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LT5tX21hcHBl
ZENhcGFjaXR5ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRlcyk7Ci0gICAgICAgIGlmIChtb2RlKQot
ICAgICAgICAgICAgQVNTRVJUKCptb2RlID09IHJlc3VsdC0+bW9kZSgpKTsKKyAgICBpZiAobV9t
ZW1vcnkpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6fk1lbW9yeSAi
LCAqdGhpcyk7CisgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobV9tZW1vcnksIG1fc2l6ZSwgbV9t
YXBwZWRDYXBhY2l0eSwgbV9tb2RlKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
TWVtb3J5Ojp+TWVtb3J5KCkKK3NpemVfdCBNZW1vcnk6OmZhc3RNYXBwZWRSZWR6b25lQnl0ZXMo
KQogewotICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6On5NZW1vcnkgIiwgKnRoaXMp
OwotICAgIHJlbGVhc2VGYXN0TWVtb3J5KG1fbWVtb3J5LCBtX3NpemUsIG1fbWFwcGVkQ2FwYWNp
dHksIG1fbW9kZSk7Ci0gICAgaWYgKG1fbWVtb3J5KSB7Ci0gICAgICAgIGlmIChtdW5tYXAobV9t
ZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkpKQotICAgICAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihQYWdlQ291bnQ6OnBhZ2VTaXplKSAqIE9wdGlvbnM6Ondl
YkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcygpOworfQorCitzaXplX3QgTWVtb3J5Ojpm
YXN0TWFwcGVkQnl0ZXMoKQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9
PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBv
ZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzIgKyByZWR6b25lIHdoaWNoIGlzIGxhcmdlciB0aGFu
IGZpdHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2QgcGFzcyB0byBtcHJvdGVjdCBpZiB0
aGlzIGRpZG4ndCBob2xkLiIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgKyBmYXN0TWFwcGVkUmVkem9uZUJ5dGVz
KCk7Cit9CisKK3NpemVfdCBNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCgpCit7CisgICAgLy8g
VGhlIG9yZGVyIGNhbiBiZSByZWxheGVkIGhlcmUgYmVjYXVzZSB3ZSBwcm92aWRlIGEgbW9ub3Rv
bmljYWxseS1pbmNyZWFzaW5nIGVzdGltYXRlLiBBIGNvbmN1cnJlbnQgb2JzZXJ2ZXIgY291bGQg
c2VlIGEgc2xpZ2h0bHkgb3V0LW9mLWRhdGUgdmFsdWUgYnV0IGNhbid0IHRlbGwgdGhhdCB0aGV5
IGRpZC4KKyAgICByZXR1cm4gb2JzZXJ2ZWRNYXhpbXVtRmFzdE1lbW9yeS5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOworfQorCitib29sIE1lbW9yeTo6YWRkcmVzc0lzSW5BY3RpdmVG
YXN0TWVtb3J5KHZvaWQqIGFkZHJlc3MpCit7CisgICAgLy8gVGhpcyBjYW5ub3QgcmFjZSBpbiBh
bnkgbWVhbmluZ2Z1bCB3YXk6IHRoZSB0aHJlYWQgd2hpY2ggY2FsbHMgdGhpcyBmdW5jdGlvbiB3
YW50cyB0byBrbm93IGlmIGEgZmF1bHQgaXQgcmVjZWl2ZWQgYXQgYSBwYXJ0aWN1bGFyIGFkZHJl
c3MgaXMgaW4gYSBmYXN0IG1lbW9yeS4gVGhhdCBmYXN0IG1lbW9yeSBtdXN0IHRoZXJlZm9yZSBi
ZSBhY3RpdmUgaW4gdGhhdCB0aHJlYWQuIEl0IGNhbm5vdCBiZSBhZGRlZCBvciByZW1vdmVkIGZy
b20gdGhlIGxpc3Qgb2YgY3VycmVudGx5IGFjdGl2ZSBmYXN0IG1lbW9yaWVzLiBPdGhlciBtZW1v
cmllcyBiZWluZyBhZGRlZCAvIHJlbW92ZWQgY29uY3VycmVudGx5IGFyZSBpbmNvbnNlcXVlbnRp
YWwuCisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgZmFzdE1lbW9yeUFsbG9jYXRpb25T
b2Z0TGltaXQ7ICsraWR4KSB7CisgICAgICAgIGNoYXIqIHN0YXJ0ID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KGN1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllc1tpZHhdLmxvYWQoc3RkOjptZW1vcnlfb3Jk
ZXJfYWNxdWlyZSkpOworICAgICAgICBpZiAoc3RhcnQgPD0gYWRkcmVzcyAmJiBhZGRyZXNzIDw9
IHN0YXJ0ICsgZmFzdE1hcHBlZEJ5dGVzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQg
bmV3U2l6ZSkKQEAgLTMwMSw4ICs0NTgsMTEgQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50
IG5ld1NpemUpCiAgICAgfQogCiAgICAgaWYgKG1fbWVtb3J5ICYmIGRlc2lyZWRTaXplIDw9IG1f
bWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihtX21lbW9yeSkgKyBtX3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZGVzaXJlZFNpemUg
LSBtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgewotICAgICAgICAgICAgLy8gRklY
TUU6IHNob3VsZCB0aGlzIGV2ZXIgb2NjdXI/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjk4OTAKKyAgICAgICAgdWludDhfdCogc3RhcnRBZGRyZXNzID0gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6ZTsKKyAgICAgICAgc2l6ZV90IGV4dHJh
Qnl0ZXMgPSBkZXNpcmVkU2l6ZSAtIG1fc2l6ZTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXh0
cmFCeXRlcyk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJraW5nIFdlYkFzc2Vt
Ymx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiIGFzIHJlYWQrd3JpdGUgaW4g
cmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3UG9pbnRlcihzdGFy
dEFkZHJlc3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKKyAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXJ0
QWRkcmVzcywgZXh0cmFCeXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxhY2UgZmFpbGVkICIs
ICp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMzE2LDE2
ICs0NzYsMTkgQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiAgICAgUkVM
RUFTRV9BU1NFUlQobW9kZSgpICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZyk7CiAKICAgICAvLyBP
dGhlcndpc2UsIGxldCdzIHRyeSB0byBtYWtlIHNvbWUgbmV3IG1lbW9yeS4KLSAgICAvLyBGSVhN
RTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0gICAgdm9pZCog
bmV3TWVtb3J5ID0gbW1hcChudWxscHRyLCBkZXNpcmVkU2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9X
UklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwotICAgIGlmIChuZXdNZW1vcnkg
PT0gTUFQX0ZBSUxFRCkKKyAgICAvLyBGSVhNRSBtcmVtYXAgd291bGQgYmUgbmljZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTU3CisgICAgdm9pZCogbmV3TWVt
b3J5ID0gdHJ5R2V0U2xvd01lbW9yeShkZXNpcmVkU2l6ZSk7CisgICAgaWYgKCFuZXdNZW1vcnkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbWFrZU5ld01lbW9yeVJlYWRXcml0
ZU9yUmVsaW5xdWlzaChuZXdNZW1vcnksIGRlc2lyZWRTaXplLCBkZXNpcmVkU2l6ZSwgbW9kZSgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fbWVtb3J5KSB7CiAgICAgICAg
IG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUpOwotICAgICAgICBib29sIHN1Y2Nl
c3MgPSAhbXVubWFwKG1fbWVtb3J5LCBtX21hcHBlZENhcGFjaXR5KTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3VjY2Vzcyk7CisgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobV9tZW1vcnksIG1f
c2l6ZSwgbV9zaXplLCBtX21vZGUpOwogICAgIH0KKwogICAgIG1fbWVtb3J5ID0gbmV3TWVtb3J5
OwogICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBkZXNpcmVkU2l6ZTsKICAgICBtX3NpemUgPSBkZXNp
cmVkU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCBiMDI0
NTFkLi41NTM0NWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBA
IC0yOSw4ICsyOSw2IEBACiAKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAKLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC02MSwxMSArNTks
MTcgQEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICEhbV9tZW1vcnk7IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUoVk0m
LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVt
b3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKKyAgICBzdGF0aWMgdm9pZCBp
bml0aWFsaXplUHJlYWxsb2NhdGlvbnMoKTsKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3Jl
YXRlKFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKTsKIAogICAgIE1l
bW9yeSgpID0gZGVmYXVsdDsKICAgICB+TWVtb3J5KCk7CiAKKyAgICBzdGF0aWMgc2l6ZV90IGZh
c3RNYXBwZWRSZWR6b25lQnl0ZXMoKTsKKyAgICBzdGF0aWMgc2l6ZV90IGZhc3RNYXBwZWRCeXRl
cygpOyAvLyBJbmNsdWRlcyByZWR6b25lLgorICAgIHN0YXRpYyBzaXplX3QgbWF4RmFzdE1lbW9y
eUNvdW50KCk7CisgICAgc3RhdGljIGJvb2wgYWRkcmVzc0lzSW5BY3RpdmVGYXN0TWVtb3J5KHZv
aWQqKTsKKwogICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9CiAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBQYWdlQ291bnQg
c2l6ZUluUGFnZXMoKSBjb25zdCB7IHJldHVybiBQYWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUp
OyB9CkBAIC04MSw3ICs4NSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NF
UlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7IH0KIHByaXZhdGU6Ci0gICAgc3RhdGljIFJlZlB0cjxN
ZW1vcnk+IGNyZWF0ZUltcGwoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0
KTsKICAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7CiAgICAgTWVtb3J5
KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CiAKQEAgLTk0LDExICs5Nywx
NyBAQCBwcml2YXRlOgogICAgIE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmcgfTsKIH07CiAKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXpl
b2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBNZW1v
cnkgd2UgbWFwIHRvIGJlIDJeMzMgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJp
dCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQu
Iik7Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZWxzZQogCi1jb25zdCBzaXplX3Qg
ZmFzdE1lbW9yeU1hcHBlZEJ5dGVzID0gKHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKSArIDEpICogMjsgLy8gcG9pbnRlciBtYXggKyBvZmZz
ZXQgbWF4LiBUaGlzIGlzIGFsbCB3ZSBuZWVkIHNpbmNlIGEgbG9hZCBzdHJhZGRsaW5nIHJlYWRh
YmxlIG1lbW9yeSB3aWxsIHRyYXAuCi1leHRlcm4gU3RhdGljTG9jayBtZW1vcnlMb2NrOwotY29u
c3QgSGFzaFNldDx2b2lkKj4mIHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RM
b2NrZXImKTsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIE1lbW9y
eSB7CitwdWJsaWM6CisgICAgc3RhdGljIHNpemVfdCBtYXhGYXN0TWVtb3J5Q291bnQoKSB7IHJl
dHVybiAwOyB9CisgICAgc3RhdGljIGJvb2wgYWRkcmVzc0lzSW5BY3RpdmVGYXN0TWVtb3J5KHZv
aWQqKSB7IHJldHVybiBmYWxzZTsgfQorfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5jcHAKaW5kZXggNjU0N2Q2Mi4uOWNkNDdkOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBA
IC02Myw3ICs2Myw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogCiAgICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBtb2R1bGUpOwot
ICAgIGNvbnN0IHNpemVfdCBleHRyYU1lbW9yeVNpemUgPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0
aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGNvbnN0IHNpemVf
dCBleHRyYU1lbW9yeVNpemUgPSBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpOwogICAgIG1fZ2xvYmFs
cyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwogICAgIGhl
YXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsKIApAQCAt
ODksNyArODksNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fbWVtb3J5KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Rh
YmxlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7Ci0gICAgdmlz
aXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bW9kdWxlKCktPm1vZHVs
ZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPmdsb2JhbE1lbW9yeUJ5dGVTaXplKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1bmN0aW9uczsg
KytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbnMo
KVtpXSk7CiB9CkBAIC0zNTAsNiArMzUwLDEwIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAg
ICAgcmV0dXJuIGluc3RhbmNlOwogfQogCitzaXplX3QgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpn
bG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKK30KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggODU1MWZlOC4uNTNlZDk5ZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5oCkBAIC05Miw2ICs5Miw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgVk0q
IG1fdm07CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KKyAgICBzaXplX3Qg
Z2xvYmFsTWVtb3J5Qnl0ZVNpemUoKSBjb25zdDsKIAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFz
c2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNv
ZGVCbG9jaz4gbV9jb2RlQmxvY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCmluZGV4IDMzNjljMGUuLmM2ZDc4Y2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1v
cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
ZW1vcnkuY3BwCkBAIC0xMTcsNiArMTE3LDcgQEAgV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1i
bHlNZW1vcnk6Omdyb3coVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHQKICAg
ICB9CiAKICAgICBtZW1vcnkoKS5jaGVjaygpOworICAgIC8vIEZJWE1FIFNob3VsZCB3ZSByZXBv
cnQgZXh0cmEgbWVtb3J5IHRvIHRoZSBHQyBvbiBhbGxvY2F0aW9uIC8gZ3JvdyAvIHZpc2l0PyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjkwCiAgICAgcmV0dXJu
IG9sZFBhZ2VDb3VudDsKIH0KIApAQCAtMTI0LDYgKzEyNSw4IEBAIHZvaWQgSlNXZWJBc3NlbWJs
eU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAgIC8vIEZJWE1F
IFNob3VsZCB3ZSByZXBvcnQgZXh0cmEgbWVtb3J5IHRvIHRoZSBHQyBvbiBhbGxvY2F0aW9uIC8g
Z3JvdyAvIHZpc2l0PyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcw
NjkwCisgICAgdm0uaGVhcC5yZXBvcnRXZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZCgx
KTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
QEAgLTE0MSw2ICsxNDQsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9idWZmZXJXcmFwcGVyKTsKKyAgICAvLyBGSVhNRSBTaG91bGQgd2UgcmVwb3J0IGV4
dHJhIG1lbW9yeSB0byB0aGUgR0Mgb24gYWxsb2NhdGlvbiAvIGdyb3cgLyB2aXNpdD8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDY5MAogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKaW5kZXggZDY3ZTA2NS4uZWIyNzg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAx
Ny0wNC0xMSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2Vi
QXNzZW1ibHk6IG1hbmFnZSBtZW1vcnkgYmV0dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZS11c2UgYSBWTSB0YWcgd2hpY2ggd2FzIGludGVuZGVk
IGZvciBKYXZhU2NyaXB0IGNvcmUsIHdhcyB0aGVuCisgICAgICAgIHVzZWQgYnkgb3VyIEdDLCBh
bmQgaXMgbm93IHVudXNlZC4gSWYgSSBkb24ndCBkbyB0aGlzIHRoZW4KKyAgICAgICAgV2ViQXNz
ZW1ibHkgZmFzdCBtZW1vcmllcyB3aWxsIG1ha2Ugdm1tYXAgbG9vayBzdXBlciB3ZWlyZCBiZWNh
dXNlCisgICAgICAgIGl0J2xsIGxvb2sgbGlrZSBtdWx0aS1naWdhYnl0ZSBvZiB2aXJ0dWFsIG1l
bW9yeSBhcmUgYWxsb2NhdGVkIGFzCisgICAgICAgIHBhcnQgb2Ygb3VyIHByb2Nlc3MnIHJlZ3Vs
YXIgbWVtb3J5IQorCisgICAgICAgIFNlcGFyYXRlbHkgSSBuZWVkIHRvIHVwZGF0ZSB2bW1hcCBh
bmQgb3RoZXIgdG9vbHMgdG8gcHJpbnQgdGhlCisgICAgICAgIHJpZ2h0IG5hbWUuIFJpZ2h0IG5v
dyB0aGlzIHRhZyBnZXRzIGlkZW50aWZpZWQgYXMgIkpTIGdhcmJhZ2UKKyAgICAgICAgY29sbGVj
dG9yIi4KKworICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAqIHd0Zi9WTVRh
Z3MuaDoKKwogMjAxNy0wNC0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVzZSBhdWRpdF90b2tlbl90IGluc3RlYWQgb2YgcGlkX3QgZm9y
IGNoZWNraW5nIHNhbmRib3ggb2Ygb3RoZXIgcHJvY2Vzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9PU0FsbG9jYXRvci5oIGIvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAppbmRl
eCBjOWNiMTU1Li5kNzY3OGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRv
ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKQEAgLTM2LDcgKzM2LDYgQEAg
cHVibGljOgogICAgIGVudW0gVXNhZ2UgewogICAgICAgICBVbmtub3duVXNhZ2UgPSAtMSwKICAg
ICAgICAgRmFzdE1hbGxvY1BhZ2VzID0gVk1fVEFHX0ZPUl9UQ01BTExPQ19NRU1PUlksCi0gICAg
ICAgIEpTR0NIZWFwUGFnZXMgPSBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlksCiAgICAgICAg
IEpTVk1TdGFja1BhZ2VzID0gVk1fVEFHX0ZPUl9SRUdJU1RFUkZJTEVfTUVNT1JZLAogICAgICAg
ICBKU0pJVENvZGVQYWdlcyA9IFZNX1RBR19GT1JfRVhFQ1VUQUJMRUFMTE9DQVRPUl9NRU1PUlks
CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZNVGFncy5oIGIvU291cmNlL1dU
Ri93dGYvVk1UYWdzLmgKaW5kZXggYWVmMDVkMi4uMjdmYzBkZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvVk1UYWdzLmgKKysrIGIvU291cmNlL1dURi93dGYvVk1UYWdzLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDE1ICs1
MSwxNSBAQAogI2VuZGlmIC8vIGRlZmluZWQoVk1fTUVNT1JZX0pBVkFTQ1JJUFRfSklUX1JFR0lT
VEVSX0ZJTEUpCiAKICNpZiBkZWZpbmVkKFZNX01FTU9SWV9KQVZBU0NSSVBUX0NPUkUpCi0jZGVm
aW5lIFZNX1RBR19GT1JfQ09MTEVDVE9SX01FTU9SWSBWTV9NQUtFX1RBRyhWTV9NRU1PUllfSkFW
QVNDUklQVF9DT1JFKQorI2RlZmluZSBWTV9UQUdfRk9SX1dFQkFTU0VNQkxZX01FTU9SWSBWTV9N
QUtFX1RBRyhWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFKQogI2Vsc2UKLSNkZWZpbmUgVk1fVEFH
X0ZPUl9DT0xMRUNUT1JfTUVNT1JZIFZNX01BS0VfVEFHKDYzKQorI2RlZmluZSBWTV9UQUdfRk9S
X1dFQkFTU0VNQkxZX01FTU9SWSBWTV9NQUtFX1RBRyg2MykKICNlbmRpZiAvLyBkZWZpbmVkKFZN
X01FTU9SWV9KQVZBU0NSSVBUX0NPUkUpCiAKICNlbHNlIC8vIE9TKERBUldJTikKIAogI2RlZmlu
ZSBWTV9UQUdfRk9SX1RDTUFMTE9DX01FTU9SWSAtMQotI2RlZmluZSBWTV9UQUdfRk9SX0NPTExF
Q1RPUl9NRU1PUlkgLTEKKyNkZWZpbmUgVk1fVEFHX0ZPUl9XRUJBU1NFTUJMWV9NRU1PUlkgLTEK
ICNkZWZpbmUgVk1fVEFHX0ZPUl9FWEVDVVRBQkxFQUxMT0NBVE9SX01FTU9SWSAtMQogI2RlZmlu
ZSBWTV9UQUdfRk9SX1JFR0lTVEVSRklMRV9NRU1PUlkgLTEKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDJmOTkw
OWIuLjY5M2MyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxNy0wNC0xMSAgSkYg
QmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG1h
bmFnZSBtZW1vcnkgYmV0dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzA2MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZS11c2UgYSBWTSB0YWcgd2hpY2ggd2FzIGludGVuZGVkIGZvciBKYXZhU2Ny
aXB0IGNvcmUsIHdhcyB0aGVuCisgICAgICAgIHVzZWQgYnkgb3VyIEdDLCBhbmQgaXMgbm93IHVu
dXNlZC4gSWYgSSBkb24ndCBkbyB0aGlzIHRoZW4KKyAgICAgICAgV2ViQXNzZW1ibHkgZmFzdCBt
ZW1vcmllcyB3aWxsIG1ha2Ugdm1tYXAgbG9vayBzdXBlciB3ZWlyZCBiZWNhdXNlCisgICAgICAg
IGl0J2xsIGxvb2sgbGlrZSBtdWx0aS1naWdhYnl0ZSBvZiB2aXJ0dWFsIG1lbW9yeSBhcmUgYWxs
b2NhdGVkIGFzCisgICAgICAgIHBhcnQgb2Ygb3VyIHByb2Nlc3MnIHJlZ3VsYXIgbWVtb3J5IQor
CisgICAgICAgIFNlcGFyYXRlbHkgSSBuZWVkIHRvIHVwZGF0ZSB2bW1hcCBhbmQgb3RoZXIgdG9v
bHMgdG8gcHJpbnQgdGhlCisgICAgICAgIHJpZ2h0IG5hbWUuIFJpZ2h0IG5vdyB0aGlzIHRhZyBn
ZXRzIGlkZW50aWZpZWQgYXMgIkpTIGdhcmJhZ2UKKyAgICAgICAgY29sbGVjdG9yIi4KKworICAg
ICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VVc2FnZURhdGE6OlJlc291cmNlVXNhZ2VEYXRhKToKKyAgICAgICAgKiBwYWdlL1Jlc291
cmNlVXNhZ2VEYXRhLmg6CisgICAgICAgICogcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3Zlcmxh
eUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yaWNSZXNvdXJjZVVzYWdlRGF0YTo6
SGlzdG9yaWNSZXNvdXJjZVVzYWdlRGF0YSk6CisgICAgICAgICogcGFnZS9jb2NvYS9SZXNvdXJj
ZVVzYWdlVGhyZWFkQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpkaXNwbGF5TmFtZUZvclZN
VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OmNhdGVnb3J5Rm9yVk1UYWcpOgorCiAyMDE3LTA0LTA3
ICBZdWljaGlybyBLaWt1cmEgIDx5Lmtpa3VyYUBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViR1BV
OiBpbXBsZW1lbnQgQ29tcHV0ZUNvbW1hbmRFbmNvZGVyIGFuZCByZWxhdGVkIGNvbXBvbmVudHMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAKaW5kZXggNTkxMmIwNS4u
N2ExNzAwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQs
NiArMzQsNyBAQCBSZXNvdXJjZVVzYWdlRGF0YTo6UmVzb3VyY2VVc2FnZURhdGEoKQogewogICAg
IC8vIFZNIHRhZyBjYXRlZ29yaWVzLgogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkpT
SklUXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6SlNKSVQpOworICAgIGNh
dGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OldlYkFzc2VtYmx5XSA9IE1lbW9yeUNhdGVnb3J5SW5m
byhNZW1vcnlDYXRlZ29yeTo6V2ViQXNzZW1ibHkpOwogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0
ZWdvcnk6OkltYWdlc10gPSBNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkltYWdl
cyk7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6TGF5ZXJzXSA9IE1lbW9yeUNhdGVn
b3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGF5ZXJzKTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNh
dGVnb3J5OjpMaWJjTWFsbG9jXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6
TGliY01hbGxvYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNh
Z2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmgKaW5kZXgg
NzIzNjk2Zi4uOWZmODZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJj
ZVVzYWdlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEu
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNSwxMiArMzUsMTMgQEAgbmFtZXNwYWNlIE1lbW9yeUNhdGVnb3J5IHsKIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBibWFsbG9jID0gMDsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBMaWJjTWFsbG9j
ID0gMTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBKU0pJVCA9IDI7Ci1zdGF0aWMgY29uc3QgdW5z
aWduZWQgSW1hZ2VzID0gMzsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBHQ0hlYXAgPSA0Owotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIEdDT3duZWQgPSA1Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIE90
aGVyID0gNjsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBMYXllcnMgPSA3Owotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIE51bWJlck9mQ2F0ZWdvcmllcyA9IDg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQg
V2ViQXNzZW1ibHkgPSAzOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIEltYWdlcyA9IDQ7CitzdGF0
aWMgY29uc3QgdW5zaWduZWQgR0NIZWFwID0gNTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBHQ093
bmVkID0gNjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBPdGhlciA9IDc7CitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgTGF5ZXJzID0gODsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBOdW1iZXJPZkNhdGVn
b3JpZXMgPSA5OwogfQogCiBzdHJ1Y3QgTWVtb3J5Q2F0ZWdvcnlJbmZvIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQpp
bmRleCAzNjY2MDFlLi45NzNiODZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nv
Y29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjIsNiArMTYyLDcgQEAgSGlz
dG9yaWNSZXNvdXJjZVVzYWdlRGF0YTo6SGlzdG9yaWNSZXNvdXJjZVVzYWdlRGF0YSgpCiB7CiAg
ICAgLy8gVk0gdGFnIGNhdGVnb3JpZXMuCiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6
SlNKSVRdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkpTSklU
LCAweEZGRkY2MEZGLCAiSlMgSklUIik7CisgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6
V2ViQXNzZW1ibHldID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6
OldlYkFzc2VtYmx5LCAweEZGNjU0RkYwLCAiV2ViQXNzZW1ibHkiKTsKICAgICBjYXRlZ29yaWVz
W01lbW9yeUNhdGVnb3J5OjpJbWFnZXNdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVt
b3J5Q2F0ZWdvcnk6OkltYWdlcywgMHhGRkZGRkYwMCwgIkltYWdlcyIpOwogICAgIGNhdGVnb3Jp
ZXNbTWVtb3J5Q2F0ZWdvcnk6OkxheWVyc10gPSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhN
ZW1vcnlDYXRlZ29yeTo6TGF5ZXJzLCAweEZGMDBGRkZGLCAiTGF5ZXJzIik7CiAgICAgY2F0ZWdv
cmllc1tNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxvY10gPSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5
SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxvYywgMHhGRjAwRkYwMCwgImxpYmMgbWFsbG9j
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VU
aHJlYWRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRo
cmVhZENvY29hLm1tCmluZGV4IDA2NGE2MWEuLmEzMGVmMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw2ICs4
MCw3IEBAIGNvbnN0IGNoYXIqIGRpc3BsYXlOYW1lRm9yVk1UYWcodW5zaWduZWQgdGFnKQogICAg
IGNhc2UgVk1fTUVNT1JZX0lNQUdFSU86IHJldHVybiAiSW1hZ2VJTyI7CiAgICAgY2FzZSBWTV9N
RU1PUllfQ0dJTUFHRTogcmV0dXJuICJDRyBpbWFnZSI7CiAgICAgY2FzZSBWTV9NRU1PUllfSkFW
QVNDUklQVF9KSVRfRVhFQ1VUQUJMRV9BTExPQ0FUT1I6IHJldHVybiAiSlNDIEpJVCI7CisgICAg
Y2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFOiByZXR1cm4gIldlYkFzc2VtYmx5IjsKICAg
ICBjYXNlIFZNX01FTU9SWV9NQUxMT0M6IHJldHVybiAibWFsbG9jIjsKICAgICBjYXNlIFZNX01F
TU9SWV9NQUxMT0NfSFVHRTogcmV0dXJuICJtYWxsb2MgKGh1Z2UpIjsKICAgICBjYXNlIFZNX01F
TU9SWV9NQUxMT0NfTEFSR0U6IHJldHVybiAibWFsbG9jIChsYXJnZSkiOwpAQCAtMTgxLDYgKzE4
Miw4IEBAIHN0YXRpYyB1bnNpZ25lZCBjYXRlZ29yeUZvclZNVGFnKHVuc2lnbmVkIHRhZykKICAg
ICAgICAgcmV0dXJuIE1lbW9yeUNhdGVnb3J5OjpJbWFnZXM7CiAgICAgY2FzZSBWTV9NRU1PUllf
SkFWQVNDUklQVF9KSVRfRVhFQ1VUQUJMRV9BTExPQ0FUT1I6CiAgICAgICAgIHJldHVybiBNZW1v
cnlDYXRlZ29yeTo6SlNKSVQ7CisgICAgY2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFOgor
ICAgICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdvcnk6OldlYkFzc2VtYmx5OwogICAgIGNhc2UgVk1f
TUVNT1JZX01BTExPQzoKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0NfSFVHRToKICAgICBjYXNl
IFZNX01FTU9SWV9NQUxMT0NfTEFSR0U6CmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3Jn
L0NoYW5nZUxvZyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCmluZGV4IDYzMjFkNTcu
LjBkMzIxYjYgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBi
L1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTctMDQt
MTEgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2Vt
Ymx5OiBtYW5hZ2UgbWVtb3J5IGJldHRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBkb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5o
dG1sOiB0eXBvcworCiAyMDE3LTA0LTA2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4K
IAogICAgICAgICBGaXggYnJva2VuIGxpbmsuCmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQu
b3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwgYi9XZWJzaXRlcy93
ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwKaW5kZXgg
MjBiNTliNS4uYWRhMDJhNyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kb2NzL2Iz
L2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5v
cmcvZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbApAQCAtNjU0LDExICs2
NTQsMTMgQEAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgPGRkPlNwZWNpYWwgV2Fz
bSBvcGNvZGUuIFRoaXMgYnJhbmNoZXMgb24gdGhlIGZpcnN0IGNoaWxkLiBJZiB0aGUgZmlyc3Qg
Y2hpbGQgcGx1cyB0aGUgb2Zmc2V0CiAgICAgICAgIHByb2R1Y2VzIGEgSW50NjQgbGVzcyB0aGFu
IHRvIHRoZSBwaW5uZWRHUFIgdGhpcyBmYWxscyB0aHJvdWdoLiBPdGhlcndpc2UsIGl0IGJyYW5j
aGVzIHRvCiAgICAgICAgIHRoZSBleGl0IHBhdGggZ2VuZXJhdGVkIGJ5IHRoZSBwYXNzZWQgZ2Vu
ZXJhdG9yLiBVbmxpa2UgdGhlIFBhdGNoL0NoZWNrIGZhbWlseSwgdGhlCi0gICAgICAgIGdlbmVy
YXRvciB1c2VkIGJ5IFdhc21Cb3VuZHNDaGVjayBzb3VsZCBiZSBzZXQgb24gdGhlIFByb2N1ZGVy
IGl0c2VsZi4gVGhlIEdSUFJlZyBwYXNzZWQgaW4KLSAgICAgICAgcGlubmVkR1BSIG11c3QgYWxz
byBiZSBtYXJrZWQgYXMgcGlubmVkIGJ5IGNhbGxpbmcgdGhlIFByb2NlZHVyZSdzIHBpbm5pbmcg
QVBJLiBCMyBhc3N1bWVzCi0gICAgICAgIHRoZSBXYXNtQm91bmRzQ2hlY2sgd2lsbCBzaWRlLWV4
aXQgd2hlbiB0aGUgaXQgYnJhbmNoZXMsIHNvIHRoZSBnZW5lcmF0b3IgbXVzdCBkbyBzb21lIGtp
bmQKLSAgICAgICAgb2YgdGVybWluYXRpb24uIEluIFdhc20gdGhpcyBpcyB1c2VkIHRvIHRyYXAg
YW5kIHVud2luZCBiYWNrIHRvIEpTLiBNdXN0IHVzZSB0aGUKLSAgICAgICAgV2FzbUJvdW5kc0No
ZWNrVmFsdWUgY2xhc3MuPC9kZD4KKyAgICAgICAgZ2VuZXJhdG9yIHVzZWQgYnkgV2FzbUJvdW5k
c0NoZWNrIHNob3VsZCBiZSBzZXQgb24gdGhlIFByb2NlZHVyZSBpdHNlbGYuIFRoZSBHUlBSZWcg
cGFzc2VkIGluCisgICAgICAgIHBpbm5lZEdQUiBtdXN0IGFsc28gYmUgbWFya2VkIGFzIHBpbm5l
ZCBieSBjYWxsaW5nIHRoZSBQcm9jZWR1cmUncyBwaW5uaW5nIEFQSSwgb3IgaXQgbXVzdCBiZQor
ICAgICAgICBJbnZhbGlkR1BSIGluIHdoaWNoIGNhc2UgdGhlIG91dC1vZi1ib3VuZHMgbGltaXQg
aXMgNEdpQi4gSW4gdGhlIGxhdGVyIGNhc2UgYSBtYXhpbXVtIHBhcmFtZXRlcgorICAgICAgICBj
YW4gYmUgcHJvdmlkZWQsIHRvIGZ1cnRoZXIgY29uc3RyYWluIHRoZSBvdXQtb2YtYm91bmRzIGxp
bWl0IGFuZCBoZWxwIGdlbmVyYXRlIHNtYWxsZXIKKyAgICAgICAgaW1tZWRpYXRlcy4gQjMgYXNz
dW1lcyB0aGUgV2FzbUJvdW5kc0NoZWNrIHdpbGwgc2lkZS1leGl0IHdoZW4gaXQgYnJhbmNoZXMs
IHNvIHRoZSBnZW5lcmF0b3IKKyAgICAgICAgbXVzdCBkbyBzb21lIGtpbmQgb2YgdGVybWluYXRp
b24uIEluIFdhc20gdGhpcyBpcyB1c2VkIHRvIHRyYXAgYW5kIHVud2luZCBiYWNrIHRvIEpTLiBN
dXN0IHVzZQorICAgICAgICB0aGUgV2FzbUJvdW5kc0NoZWNrVmFsdWUgY2xhc3MuPC9kZD4KIAog
ICAgICAgPGR0PlZvaWQgVXBzaWxvbihULCBecGhpKTwvZHQ+CiAgICAgICA8ZGQ+QjMgdXNlcyBT
U0EuICBTU0EgcmVxdWlyZXMgdGhhdCBlYWNoIHZhcmlhYmxlIGdldHMgYXNzaWduZWQgdG8gb25s
eSBvbmNlIGFueXdoZXJlIGluCi0tIAoyLjEwLjEKCg==
</data>
<flag name="review"
          id="328249"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
    <flag name="commit-queue"
          id="328250"
          type_id="3"
          status="-"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307020</attachid>
            <date>2017-04-13 14:00:26 -0700</date>
            <delta_ts>2017-04-13 14:05:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-fast-memories-everywhere.patch</filename>
            <type>text/plain</type>
            <size>100328</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBmMGQ1NGE0ZDVkOGQxMzk3YmYxOTBkNGYwYWY1NzhlMmEyMzA4NTk3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDYgQXByIDIwMTcgMTU6MTQ6NDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBmYXN0LW1l
bW9yaWVzLWV2ZXJ5d2hlcmUKCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMzAgKysKIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICstCiBKU1Rlc3RzL3dhc20vV0FTTS5qcyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMCArKwogLi4uL3dhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMgfCAxMzAgKysrKysrCiBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanMgICAgICAgICB8ICAxOCArCiBKU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQuanMgICB8IDExNyArKysrKwogSlNU
ZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcyAgICAgICAgfCAgMTUgKwog
SlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYg
KwogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAx
NDUgKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgICAg
ICAgICAgfCAgMzQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcCAg
ICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAg
ICAgICAgICAgICAgICB8ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuY3BwICAgfCAgMjEgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dh
c21Cb3VuZHNDaGVja1ZhbHVlLmggIHwgIDE0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckN1c3RvbS5jcHAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwICAgICAgICAgICAgICAgIHwgIDMxICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmggICAgICAgICAgICAgICAgICB8ICAxMyArCiAuLi4vSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgICAgICAgICAgfCAgIDkgKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDYgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgIDQ2
ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCB8
ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAg
ICAgfCA0NzYgKysrKysrKysrKysrKystLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmggICAgICAgICAgICB8ICAyNSArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcCAgICAgICAgICAgICAgfCAgIDggKy0KIC4uLi9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgICAxICsKIC4uLi9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIHwgICA0ICsKIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIwICsKIFNvdXJjZS9X
VEYvd3RmL09TQWxsb2NhdG9yLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxIC0KIFNvdXJj
ZS9XVEYvd3RmL1ZNVGFncy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICstCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyNiAr
KwogU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAgICAgICAgICAgfCAg
IDMgKy0KIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuaCAgICAgICAgICAg
IHwgIDE1ICstCiAuLi4vcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tICAg
ICAgICB8ICAgMyArLQogLi4uL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFk
Q29jb2EubW0gfCAgIDUgKy0KIFdlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgIHwgICA5ICsKIC4uLi9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRh
dGlvbi5odG1sICAgICAgIHwgIDEyICstCiAzOCBmaWxlcyBjaGFuZ2VkLCAxMDk2IGluc2VydGlv
bnMoKyksIDIyNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQu
anMKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDRhNjAwNjguLjhhNTEyNjEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTctMDQtMTEgIEpGIEJhc3Rp
ZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBtYW5hZ2Ug
bWVtb3J5IGJldHRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwNjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3YXNtL0J1aWxkZXIuanM6IG1vdmUgYSBoZWxwZXIgb3V0IHNvIHRlc3RzIGNhbiB1
c2UgaXQKKyAgICAgICAgKGV4cG9ydC5kZWZhdWx0LkJ1aWxkZXIucHJvdG90eXBlLl9yZWdpc3Rl
clNlY3Rpb25CdWlsZGVycy5jb25zdC5zZWN0aW9uLmluLldBU00uZGVzY3JpcHRpb24uc2VjdGlv
bi5zd2l0Y2guc2VjdGlvbi5jYXNlLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRoaXMuc2VjdGlvbik6
CisgICAgICAgICogd2FzbS9XQVNNLmpzOiBhZGQgdXRpbGl0aWVzIHRvIGNsYXNzaWZ5IG9wY29k
ZXMKKyAgICAgICAgKGV4cG9ydC5vcGNvZGVzKToKKyAgICAgICAgKGV4cG9ydC5jb25zdC5tZW1v
cnlBY2Nlc3NJbmZvLm9wLmNvbnN0LnNpZ24pOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanM6IEFkZGVkLiBUaGlzIHRlc3QKKyAgICAgICAg
ZmFpbHMgYmVmb3JlIHRoaXMgcGF0Y2guCisgICAgICAgIChjb25zdC5vcC5vZi5XQVNNLm9wY29k
ZXMpOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanM6IEFkZGVk
LiBUaGlzIHNpbXBsZSB0ZXN0cworICAgICAgICBqdXN0IHNob3VsZG4ndCBjcmFzaC4gSW4gdmVy
Ym9zZSBtb2RlIGl0J3MgdXNlZnVsIGF0IGRldGVybWluaW5nCisgICAgICAgIGlmIHRoZSBHQyBm
YWxscyBiZWhpbmQgb3Igbm90LgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5
LW11bHRpYWdlbnQuanM6IEFkZGVkLiBFbXVsYXRlIHBvc3RNZXNzYWdlLgorICAgICAgICAoY29u
c3Quc3RhcnRBZ2VudHMubnVtQWdlbnRzVG9TdGFydC5hLmFnZW50LnJlY2VpdmVCcm9hZGNhc3Qp
OgorICAgICAgICAoY29uc3Quc3RhcnRBZ2VudHMubnVtQWdlbnRzVG9TdGFydC5hLndyaXRlLmNv
bnN0LmlkeC5NYXRoLnJhbmRvbSk6CisgICAgICAgIChjb25zdC5icm9hZGNhc3RUb0FnZW50cyk6
CisgICAgICAgICogd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanM6IHZlcmJvc2Ug
bG9nZ2luZy4KKyAgICAgICAgKHRlc3RNZW1vcnlOb01heCk6CisgICAgICAgICh0ZXN0TWVtb3J5
KToKKyAgICAgICAgKHRlc3RJbnN0YW5jZU5vTWVtb3J5KToKKyAgICAgICAgKHRlc3RJbnN0YW5j
ZU5vTWF4KToKKyAgICAgICAgKHRlc3RJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS91dGlsaXRp
ZXMuanM6IG1vdmUgYSB1dGlsaXR5IGhlcmUuCisKIDIwMTctMDQtMTIgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICB0ZXN0MjYyOiB0ZXN0MjYyL3Rlc3Qv
YnVpbHQtaW5zL05hdGl2ZUVycm9ycy9FdmFsRXJyb3IvcHJvdG8uanMKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9CdWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKaW5kZXggOGZm
NWRjZS4uZGVlNzg2ZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKKysrIGIv
SlNUZXN0cy93YXNtL0J1aWxkZXIuanMKQEAgLTI3LDEyICsyNyw3IEBAIGltcG9ydCAqIGFzIGFz
c2VydCBmcm9tICdhc3NlcnQuanMnOwogaW1wb3J0ICogYXMgQnVpbGRXZWJBc3NlbWJseSBmcm9t
ICdCdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzJzsKIGltcG9ydCAqIGFzIExMQiBmcm9tICdM
b3dMZXZlbEJpbmFyeS5qcyc7CiBpbXBvcnQgKiBhcyBXQVNNIGZyb20gJ1dBU00uanMnOwotCi1j
b25zdCBfdG9KYXZhU2NyaXB0TmFtZSA9IG5hbWUgPT4gewotICAgIGNvbnN0IGNhbWVsQ2FzZSA9
IG5hbWUucmVwbGFjZSgvKFteYS16MC05XS4pL2csIGMgPT4gY1sxXS50b1VwcGVyQ2FzZSgpKTsK
LSAgICBjb25zdCBDYW1lbENhc2UgPSBjYW1lbENhc2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkg
KyBjYW1lbENhc2Uuc2xpY2UoMSk7Ci0gICAgcmV0dXJuIENhbWVsQ2FzZTsKLX07CitpbXBvcnQg
KiBhcyB1dGlsIGZyb20gJ3V0aWxpdGllcy5qcyc7CiAKIGNvbnN0IF9pc1ZhbGlkVmFsdWUgPSAo
dmFsdWUsIHR5cGUpID0+IHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTIyNSw3ICsyMjAsNyBA
QCBjb25zdCBfaW1wb3J0R2xvYmFsQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5l
eHRCdWlsZGVyKSA9PiB7CiAgICAgICAgICAgICBFbmQ6ICgpID0+IG5leHRCdWlsZGVyCiAgICAg
ICAgIH07CiAgICAgICAgIGZvciAobGV0IG9wIG9mIFdBU00uZGVzY3JpcHRpb24udmFsdWVfdHlw
ZSkgewotICAgICAgICAgICAgZ2xvYmFsQnVpbGRlcltfdG9KYXZhU2NyaXB0TmFtZShvcCldID0g
KG1vZHVsZSwgZmllbGQsIG11dGFiaWxpdHkpID0+IHsKKyAgICAgICAgICAgIGdsb2JhbEJ1aWxk
ZXJbdXRpbC50b0phdmFTY3JpcHROYW1lKG9wKV0gPSAobW9kdWxlLCBmaWVsZCwgbXV0YWJpbGl0
eSkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5pc1N0cmluZyhtb2R1bGUsIGBJbXBvcnQg
Z2xvYmFsIG1vZHVsZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOwogICAg
ICAgICAgICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEltcG9ydCBnbG9iYWwgZmllbGQg
c2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOwogICAgICAgICAgICAgICAgIGFz
c2VydC5pc1N0cmluZyhtdXRhYmlsaXR5LCBgSW1wb3J0IGdsb2JhbCBtdXRhYmlsaXR5IHNob3Vs
ZCBiZSBhIHN0cmluZywgZ290ICIke211dGFiaWxpdHl9ImApOwpAQCAtMzE4LDcgKzMxMyw3IEBA
IGNvbnN0IF9jaGVja0ltbXMgPSAob3AsIGltbXMsIGV4cGVjdGVkSW1tcywgcmV0KSA9PiB7CiBj
b25zdCBfY3JlYXRlRnVuY3Rpb25CdWlsZGVyID0gKGZ1bmMsIGJ1aWxkZXIsIHByZXZpb3VzQnVp
bGRlcikgPT4gewogICAgIGxldCBmdW5jdGlvbkJ1aWxkZXIgPSB7fTsKICAgICBmb3IgKGNvbnN0
IG9wIGluIFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlKSB7Ci0gICAgICAgIGNvbnN0IG5hbWUgPSBf
dG9KYXZhU2NyaXB0TmFtZShvcCk7CisgICAgICAgIGNvbnN0IG5hbWUgPSB1dGlsLnRvSmF2YVNj
cmlwdE5hbWUob3ApOwogICAgICAgICBjb25zdCB2YWx1ZSA9IFdBU00uZGVzY3JpcHRpb24ub3Bj
b2RlW29wXS52YWx1ZTsKICAgICAgICAgY29uc3QgcmV0ID0gV0FTTS5kZXNjcmlwdGlvbi5vcGNv
ZGVbb3BdWyJyZXR1cm4iXTsKICAgICAgICAgY29uc3QgcGFyYW0gPSBXQVNNLmRlc2NyaXB0aW9u
Lm9wY29kZVtvcF0ucGFyYW1ldGVyOwpAQCAtNTQyLDcgKzUzNyw3IEBAIGV4cG9ydCBkZWZhdWx0
IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBvcCBvZiBXQVNNLmRlc2Ny
aXB0aW9uLnZhbHVlX3R5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEJ1aWxk
ZXJbX3RvSmF2YVNjcmlwdE5hbWUob3ApXSA9IChpbml0VmFsdWUsIG11dGFiaWxpdHkpID0+IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEJ1aWxkZXJbdXRpbC50b0phdmFTY3JpcHRO
YW1lKG9wKV0gPSAoaW5pdFZhbHVlLCBtdXRhYmlsaXR5KSA9PiB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcy5kYXRhLnB1c2goeyB0eXBlOiBvcCwgb3A6IG9wICsgIi5jb25zdCIsIG11
dGFiaWxpdHk6IF9ub3JtYWxpemVNdXRhYmlsaXR5KG11dGFiaWxpdHkpLCBpbml0VmFsdWUgfSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lcnJvckhhbmRsaW5nUHJveHlG
b3IoZ2xvYmFsQnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9OwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy93YXNtL1dBU00uanMgYi9KU1Rlc3RzL3dhc20vV0FTTS5qcwppbmRleCAxYmI3
OWI4Li4xZTY0Y2FlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vV0FTTS5qcworKysgYi9KU1Rl
c3RzL3dhc20vV0FTTS5qcwpAQCAtNDQsMyArNDQsMzMgQEAgZXhwb3J0IGNvbnN0IGlzVmFsaWRC
bG9ja1R5cGUgPSB2ID0+IF9ibG9ja1R5cGVTZXQuaGFzKHYpOwogZXhwb3J0IGNvbnN0IGV4dGVy
bmFsS2luZFZhbHVlID0gX21hcFZhbHVlcyhkZXNjcmlwdGlvbi5leHRlcm5hbF9raW5kKTsKIGV4
cG9ydCBjb25zdCBzZWN0aW9ucyA9IE9iamVjdC5rZXlzKGRlc2NyaXB0aW9uLnNlY3Rpb24pOwog
ZXhwb3J0IGNvbnN0IHNlY3Rpb25FbmNvZGluZ1R5cGUgPSBkZXNjcmlwdGlvbi5zZWN0aW9uW3Nl
Y3Rpb25zWzBdXS50eXBlOworCitleHBvcnQgZnVuY3Rpb24qIG9wY29kZXMoY2F0ZWdvcnkgPSB1
bmRlZmluZWQpIHsKKyAgICBmb3IgKGxldCBvcCBpbiBkZXNjcmlwdGlvbi5vcGNvZGUpCisgICAg
ICAgIGlmIChjYXRlZ29yeSAhPT0gdW5kZWZpbmVkICYmIGRlc2NyaXB0aW9uLm9wY29kZVtvcF0u
Y2F0ZWdvcnkgPT09IGNhdGVnb3J5KQorICAgICAgICAgICAgeWllbGQgeyBuYW1lOiBvcCwgb3Bj
b2RlOiBkZXNjcmlwdGlvbi5vcGNvZGVbb3BdIH07Cit9OworZXhwb3J0IGNvbnN0IG1lbW9yeUFj
Y2Vzc0luZm8gPSBvcCA9PiB7CisgICAgLy8gICAgICAgICAgICAgICAgPC0tLS0tLS0tLS0tdmFs
dWVUeXBlLS0tLS0tLS0tLS0+ICA8LS0tLS0tLXR5cGUtLS0tLS0tPjwtLS0tLS0tLS13aWR0aC0t
LS0tLS0tPiAgPC0tc2lnbi0tPgorICAgIGNvbnN0IGNsYXNzaWZ5ID0gLygoPzppMzIpfCg/Omk2
NCl8KD86ZjMyKXwoPzpmNjQpKVwuKCg/OmxvYWQpfCg/OnN0b3JlKSkoKD86OCk/fCg/OjE2KT98
KD86MzIpPylfPygoPzpzfHUpPykvOworICAgIGNvbnN0IGZvdW5kID0gb3AubmFtZS5tYXRjaChj
bGFzc2lmeSk7CisgICAgY29uc3QgdmFsdWVUeXBlID0gZm91bmRbMV07CisgICAgY29uc3QgdHlw
ZSA9IGZvdW5kWzJdOworICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQoZm91bmRbM10gPyBmb3Vu
ZFszXSA6IHZhbHVlVHlwZS5zbGljZSgxKSk7CisgICAgY29uc3Qgc2lnbiA9ICgoKSA9PiB7Cisg
ICAgICAgIHN3aXRjaCAoZm91bmRbNF0pIHsKKyAgICAgICAgY2FzZSAicyI6IHJldHVybiAic2ln
bmVkIjsKKyAgICAgICAgY2FzZSAidSI6IHJldHVybiAidW5zaWduZWQiOworICAgICAgICBkZWZh
dWx0OiByZXR1cm4gImFnbm9zdGljIjsKKyAgICAgICAgfQorICAgIH0pKCk7CisgICAgcmV0dXJu
IHsgdmFsdWVUeXBlLCB0eXBlLCB3aWR0aCwgc2lnbiB9OworfTsKKworZXhwb3J0IGNvbnN0IGNv
bnN0Rm9yVmFsdWVUeXBlID0gdmFsdWVUeXBlID0+IHsKKyAgICBmb3IgKGxldCBvcCBpbiBkZXNj
cmlwdGlvbi5vcGNvZGUpCisgICAgICAgIGlmIChvcC5lbmRzV2l0aCgiLmNvbnN0IikgJiYgZGVz
Y3JpcHRpb24ub3Bjb2RlW29wXVsicmV0dXJuIl0gPT0gdmFsdWVUeXBlKQorICAgICAgICAgICAg
cmV0dXJuIG9wOworICAgIHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTog
bm8gY29uc3QgdHlwZSBmb3IgJHt2YWx1ZVR5cGV9YCk7Cit9OworCmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMgYi9KU1Rl
c3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhNWYwMwotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qcwpA
QCAtMCwwICsxLDEzMCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7Citp
bXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCAqIGFzIExMQiBm
cm9tICcuLi9Mb3dMZXZlbEJpbmFyeS5qcyc7CitpbXBvcnQgKiBhcyBXQVNNIGZyb20gJy4uL1dB
U00uanMnOworaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsaXRpZXMuanMnOworCitjb25z
dCB2ZXJib3NlID0gZmFsc2U7CisKK2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0OworY29uc3Qg
Zm91ckdpQiA9IHBhZ2VTaXplICogNjU1MzY7Citjb25zdCBpbml0aWFsID0gNjQ7Citjb25zdCBt
YXhpbXVtID0gMTI4OworCisvLyBXaGVuIHVzaW5nIGZhc3QgbWVtb3JpZXMsIHdlIGFsbG9jYXRl
IGEgcmVkem9uZSBhZnRlciB0aGUgNEdpQiBodWdlCisvLyBhbGxvY2F0aW9uLiBUaGlzIHJlZHpv
bmUgaXMgdXNlZCB0byB0cmFwIHJlZytpbW0gYWNjZXNzZXMgd2hpY2ggZXhjZWVkCisvLyAzMi1i
aXRzLiBBbnl0aGluZyBwYXN0IDRHaUIgbXVzdCB0cmFwLCBidXQgd2UgY2Fubm90IGtub3cgc3Rh
dGljYWxseSB0aGF0IGl0CisvLyB3aWxsLgorCitjb25zdCBvZmZzZXRzID0gWworICAgIDAsCisg
ICAgMSwKKyAgICAyLAorICAgIDEwMjQsCisgICAgcGFnZVNpemUsCisgICAgcGFnZVNpemUgKyBw
YWdlU2l6ZSAvIDIsCisgICAgcGFnZVNpemUgKiA4LAorICAgIHBhZ2VTaXplICogMTYsCisgICAg
cGFnZVNpemUgKiAxMjgsCisgICAgcGFnZVNpemUgKiA1MTIsCisgICAgZm91ckdpQiAvIDQgLSA0
LAorICAgIGZvdXJHaUIgLyA0IC0gMywKKyAgICBmb3VyR2lCIC8gNCAtIDIsCisgICAgZm91ckdp
QiAvIDQgLSAxLAorICAgIGZvdXJHaUIgLyA0LAorICAgIGZvdXJHaUIgLyA0ICsgMSwKKyAgICBm
b3VyR2lCIC8gNCArIDIsCisgICAgZm91ckdpQiAvIDQgKyAzLAorICAgIGZvdXJHaUIgLyA0ICsg
NCwKKyAgICBmb3VyR2lCIC8gMiAtIDQsCisgICAgZm91ckdpQiAvIDIgLSAzLAorICAgIGZvdXJH
aUIgLyAyIC0gMiwKKyAgICBmb3VyR2lCIC8gMiAtIDEsCisgICAgZm91ckdpQiAvIDIsCisgICAg
Zm91ckdpQiAvIDIgKyAxLAorICAgIGZvdXJHaUIgLyAyICsgMiwKKyAgICBmb3VyR2lCIC8gMiAr
IDMsCisgICAgZm91ckdpQiAvIDIgKyA0LAorICAgIChmb3VyR2lCIC8gNCkgKiAzLAorICAgIGZv
dXJHaUIgLSA0LAorICAgIGZvdXJHaUIgLSAzLAorICAgIGZvdXJHaUIgLSAyLAorICAgIGZvdXJH
aUIgLSAxLAorXTsKKworZm9yIChsZXQgbWVtb3J5RGVjbGFyYXRpb24gb2YgW3sgaW5pdGlhbDog
aW5pdGlhbCB9LCB7IGluaXRpYWw6IGluaXRpYWwsIG1heGltdW06IG1heGltdW0gfV0pIHsKKyAg
ICBmdWxsR0MoKTsKKworICAgIC8vIFJlLXVzZSBhIHNpbmdsZSBtZW1vcnkgc28gdGVzdHMgYXJl
IG1vcmUgbGlrZWx5IHRvIGdldCBhIGZhc3QgbWVtb3J5LgorICAgIGNvbnN0IG1lbW9yeSA9IG5l
dyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5RGVjbGFyYXRpb24pOworICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICBwcmludChXZWJBc3NlbWJseU1lbW9yeU1vZGUobWVtb3J5KSk7CisgICAgY29u
c3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkobWVtb3J5LmJ1ZmZlcik7CisKKyAgICAvLyBFbnVtZXJh
dGUgYWxsIG1lbW9yeSBhY2Nlc3MgdHlwZXMuCisgICAgZm9yIChjb25zdCBvcCBvZiBXQVNNLm9w
Y29kZXMoIm1lbW9yeSIpKSB7CisgICAgICAgIGNvbnN0IGluZm8gPSBXQVNNLm1lbW9yeUFjY2Vz
c0luZm8ob3ApOworCisgICAgICAgIC8vIFRoZSBhY2Nlc3NlcyBzaG91bGQgZmF1bHQgZXZlbiBp
ZiBvbmx5IHRoZSBsYXN0IGJ5dGUgaXMgb2ZmIHRoZSBlbmQuCisgICAgICAgIGxldCB3aWdnbGVz
ID0gWzBdOworICAgICAgICBmb3IgKGxldCB3aWdnbGUgPSAwOyB3aWdnbGUgIT09IGluZm8ud2lk
dGggLyA4OyArK3dpZ2dsZSkKKyAgICAgICAgICAgIHdpZ2dsZXMucHVzaCh3aWdnbGUpOworCisg
ICAgICAgIGxldCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgICAgICAuVHlwZSgp
LkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVt
b3J5RGVjbGFyYXRpb24pLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAgICAgLkV4cG9ydCgpOworCisgICAgICAgIGZvciAobGV0IG9mZnNldCBvZiBvZmZzZXRz
KQorICAgICAgICAgICAgc3dpdGNoIChpbmZvLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgImxv
YWQiOiBidWlsZGVyID0gYnVpbGRlci5GdW5jdGlvbigiZ2V0XyIgKyBvZmZzZXQpOyBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgInN0b3JlIjogYnVpbGRlciA9IGJ1aWxkZXIuRnVuY3Rpb24oInNl
dF8iICsgb2Zmc2V0KTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJy
b3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVua25vd24gbWVtb3J5IGFjY2VzcyB0eXBlICR7
aW5mby50eXBlfWApOworICAgICAgICAgICAgfQorCisgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVy
LkVuZCgpLkNvZGUoKTsKKworICAgICAgICBjb25zdCBhbGlnbiA9IDM7IC8vIE5vIG5lZWQgdG8g
YmUgcHJlY2lzZSwgaXQncyBqdXN0IGEgaGludC4KKyAgICAgICAgY29uc3QgY29uc3RJbnN0ciA9
IHV0aWwudG9KYXZhU2NyaXB0TmFtZShXQVNNLmNvbnN0Rm9yVmFsdWVUeXBlKGluZm8udmFsdWVU
eXBlKSk7CisgICAgICAgIGNvbnN0IGluc3RyID0gdXRpbC50b0phdmFTY3JpcHROYW1lKG9wLm5h
bWUpOworICAgICAgICBmb3IgKGxldCBvZmZzZXQgb2Ygb2Zmc2V0cykKKyAgICAgICAgICAgIHN3
aXRjaCAoaW5mby50eXBlKSB7CisgICAgICAgICAgICBjYXNlICJsb2FkIjoKKyAgICAgICAgICAg
ICAgICBidWlsZGVyID0gYnVpbGRlci5GdW5jdGlvbigiZ2V0XyIgKyBvZmZzZXQsIHsgcGFyYW1z
OiBbImkzMiJdIH0pLkdldExvY2FsKDApW2luc3RyXShhbGlnbiwgb2Zmc2V0KS5Ecm9wKCkuRW5k
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJzdG9yZSI6Cisg
ICAgICAgICAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIuRnVuY3Rpb24oInNldF8iICsgb2Zmc2V0
LCB7IHBhcmFtczogWyJpMzIiXSB9KS5HZXRMb2NhbCgwKVtjb25zdEluc3RyXSgweGRlYWQpW2lu
c3RyXShhbGlnbiwgb2Zmc2V0KS5FbmQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1l
bnRhdGlvbiBwcm9ibGVtOiB1bmtub3duIG1lbW9yeSBhY2Nlc3MgdHlwZSAke2luZm8udHlwZX1g
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLkVu
ZCgpOworCisgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl
KG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgeyBp
bXA6IHsgbWVtb3J5OiBtZW1vcnkgfSB9KTsKKworICAgICAgICBmb3IgKGxldCBvZmZzZXQgb2Yg
b2Zmc2V0cykgeworICAgICAgICAgICAgZm9yIChsZXQgd2lnZ2xlIG9mIHdpZ2dsZXMpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gTExCLnZhcnVpbnQzMk1heCAtIG9mZnNldCAt
IHdpZ2dsZTsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgcHJpbnQoYCR7b3AubmFtZS5wYWRTdGFydCgxNiwgJyAnKX06IGJhc2UgYWRkcmVzcyAke2Fk
ZHJlc3MgPiAwID8gJzB4JyA6ICcgICd9JHthZGRyZXNzLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4
LCBhZGRyZXNzID4gMCA/ICcwJyA6ICcgJyl9ICsgb2Zmc2V0IDB4JHtvZmZzZXQudG9TdHJpbmco
MTYpLnBhZFN0YXJ0KDgsICcwJyl9IC0gd2lnZ2xlICR7d2lnZ2xlfSA9IGVmZmVjdGl2ZSBhZGRy
ZXNzIDB4JHsoYWRkcmVzcyArIG9mZnNldCAtIHdpZ2dsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0
KDE2LCAnMCcpfWApOworICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5mby50eXBlKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSAibG9hZCI6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0c1siZ2V0XyIgKyBvZmZzZXRdKGFkZHJlc3MpLCBXZWJB
c3NlbWJseS5SdW50aW1lRXJyb3IsIGBPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3NgKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAic3RvcmUiOgor
ICAgICAgICAgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHNb
InNldF8iICsgb2Zmc2V0XShhZGRyZXNzKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCBgT3V0
IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzYCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24g
cHJvYmxlbTogdW5rbm93biBtZW1vcnkgYWNjZXNzIHR5cGUgJHtpbmZvLnR5cGV9YCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVsbEdD
KCk7CisgICAgfQorCisgICAgLy8gT25seSBjaGVjayB0aGF0IHRoZSBtZW1vcnkgd2FzIHVudG91
Y2hlZCBhdCB0aGUgdmVyeSBlbmQsIGJlZm9yZSB0aHJvd2luZyBpdCBhd2F5IGVudGlyZWx5Lgor
ICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGJ1Zi5ieXRlTGVuZ3RoOyArK2lkeCkKKyAgICAg
ICAgYXNzZXJ0LmVxKGJ1ZltpZHhdLCAwKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9m
dW5jdGlvbi10ZXN0cy9tZW1vcnktbWFueS5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0
cy9tZW1vcnktbWFueS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQz
YzYyCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9y
eS1tYW55LmpzCkBAIC0wLDAgKzEsMTggQEAKK2NvbnN0IG1lbW9yaWVzID0gMTI4OworY29uc3Qg
dmVyYm9zZSA9IGZhbHNlOworY29uc3QgaW5pdGlhbCA9IDE7CisKK2xldCB0eXBlcyA9IHt9Owor
Citmb3IgKGxldCBtID0gMDsgbSA8IG1lbW9yaWVzOyArK20pIHsKKyAgICBsZXQgbWVtb3J5ID0g
bmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6IGluaXRpYWwgfSk7CisgICAgbGV0IHR5
cGUgPSBXZWJBc3NlbWJseU1lbW9yeU1vZGUobWVtb3J5KTsKKyAgICB0eXBlc1t0eXBlXSA9IHR5
cGVzW3R5cGVdID8gdHlwZXNbdHlwZV0gKyAxIDogMTsKK30KKworaWYgKHZlcmJvc2UpIHsKKyAg
ICBsZXQgZ290ID0gIkdvdDogIjsKKyAgICBmb3IgKGxldCBwIGluIHR5cGVzKQorICAgICAgICBn
b3QgKz0gYCAke3R5cGVzW3BdfTogJHtwfWA7CisgICAgcHJpbnQoZ290KTsKK30KZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktbXVsdGlhZ2VudC5qcyBiL0pT
VGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktbXVsdGlhZ2VudC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWIyZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1tdWx0aWFnZW50LmpzCkBAIC0wLDAgKzEs
MTE3IEBACitjb25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKKworY29uc3QgdmVyYm9zZSA9IGZh
bHNlOworCisvLyBTdGFydCBtdWx0aXBsZSBhZ2VudHMgYW5kIGNyZWF0ZSBXZWJBc3NlbWJseS5N
ZW1vcnkgZnJvbSBlYWNoIG9mCisvLyB0aGVtLiBQZXJmb3JtIHdyaXRlcyBpbnRvIGVhY2ggbWVt
b3J5LCBhbmQgdGhlbiBjaGVjayB0aGF0IHRoZSBtZW1vcnkgb25seQorLy8gY29udGFpbnMgdGhh
dCBhZ2VudCdzIHdyaXRlcy4gVGhpcyB3b3VsZCBmaW5kIGJ1Z3Mgd2hlcmUgYW4gaW1wbGVtZW50
YXRpb24ncworLy8gbWVtb3J5IHJldXNlIGlzIGJ1Z2d5LgorCisvLyBVc2UgdGhlIGFnZW50IHN1
cHBvcnQgZnJvbSB0ZXN0MjYyOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2Iv
bWFzdGVyL0lOVEVSUFJFVElORy5tZCNob3N0LWRlZmluZWQtZnVuY3Rpb25zCisKK2NvbnN0IHRl
c3RJdGVyYXRpb25zID0gMjsKK2NvbnN0IG51bUFnZW50cyA9IDg7Citjb25zdCBpbml0aWFsUGFn
ZXMgPSA2NDsKK2NvbnN0IG51bVdyaXRlcyA9IDEwMjQ7CisKK2NvbnN0IHN0YXRlV2FpdCA9IDA7
Citjb25zdCBzdGF0ZVJlYWR5ID0gMTsKK2NvbnN0IHN0YXRlQ2hlY2sgPSAyOworCitjb25zdCBz
dGFydEFnZW50cyA9IG51bUFnZW50c1RvU3RhcnQgPT4geworICAgIGZvciAobGV0IGEgPSAwOyBh
IDwgbnVtQWdlbnRzVG9TdGFydDsgKythKSB7CisgICAgICAgIGNvbnN0IGFnZW50U2NyaXB0ID0g
YAorICAgICAgICBsZXQgc3RhdGUgPSAke3N0YXRlV2FpdH07CisgICAgICAgIGxldCB1ODsKKwor
ICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAgICAgIHByaW50KCJBZ2VudCAke2F9IHN0
YXJ0ZWQiKTsKKyAgICAgICAgJC5hZ2VudC5yZXBvcnQoIkFnZW50ICR7YX0gc3RhcnRlZCIpOwor
CisgICAgICAgICQuYWdlbnQucmVjZWl2ZUJyb2FkY2FzdCgoc2FiLCBuZXdTdGF0ZSkgPT4gewor
ICAgICAgICAgICAgaWYgKCR7dmVyYm9zZX0pCisgICAgICAgICAgICAgICAgcHJpbnQoIkFnZW50
ICR7YX0gcmVjZWl2ZWQgYnJvYWRjYXN0Iik7CisgICAgICAgICAgICB1OCA9IG5ldyBVaW50OEFy
cmF5KHNhYik7CisgICAgICAgICAgICBzdGF0ZSA9IG5ld1N0YXRlOworICAgICAgICB9KTsKKwor
ICAgICAgICBjb25zdCBidXN5V2FpdEZvclZhbHVlID0gdmFsdWUgPT4geworICAgICAgICAgICAg
Ly8gQnVzeS13YWl0IHNvIHRoYXQgb25jZSB0aGUgU0FCIHdyaXRlIG9jY3VycyBhbGwgYWdlbnRz
IHRyeSB0byBjcmVhdGUgYSBtZW1vcnkgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIHdo
aWxlIChBdG9taWNzLmxvYWQodTgsIDApICE9PSB2YWx1ZSkgOworICAgICAgICB9OworCisgICAg
ICAgIGlmICgke3ZlcmJvc2V9KQorICAgICAgICAgICAgcHJpbnQoIkFnZW50ICR7YX0gd2FpdHMi
KTsKKyAgICAgICAgJC5hZ2VudC5yZXBvcnQoIkFnZW50ICR7YX0gd2FpdHMiKTsKKyAgICAgICAg
d2hpbGUgKHN0YXRlID09PSAke3N0YXRlV2FpdH0pIDsKKyAgICAgICAgJC5hZ2VudC5yZXBvcnQo
IkFnZW50ICR7YX0gcmVjZWl2ZWQgU0FCIik7CisgICAgICAgIC8vIFVzZSBpdCBmb3IgZmFzdGVy
IHN0YXRlIGNoYW5nZSBzbyBhbGwgYWdlbnRzIGFyZSBtb3JlIGxpa2VseSB0byBleGVjdXRlIGF0
IHRoZSBzYW1lIHRpbWUuCisgICAgICAgIGJ1c3lXYWl0Rm9yVmFsdWUoJHtzdGF0ZVJlYWR5fSk7
CisKKyAgICAgICAgbGV0IHdhc21NZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5p
dGlhbDogJHtpbml0aWFsUGFnZXN9IH0pOworICAgICAgICBsZXQgbWVtb3J5ID0gbmV3IFVpbnQ4
QXJyYXkoKHdhc21NZW1vcnkpLmJ1ZmZlcik7CisgICAgICAgIGlmICgke3ZlcmJvc2V9KQorICAg
ICAgICAgICAgcHJpbnQoIkFnZW50ICR7YX0gcGVyZm9ybWluZyB3cml0ZXMiKTsKKyAgICAgICAg
Zm9yIChsZXQgd3JpdGUgPSAwOyB3cml0ZSA8ICR7bnVtV3JpdGVzfTsgKyt3cml0ZSkgeworICAg
ICAgICAgICAgLy8gUGVyZm9ybSB3cml0ZXMgb2Ygb3VyIGFnZW50IG51bWJlciBhdCBhIHJhbmRv
bSBsb2NhdGlvbi4gVGhpcyBtZW1vcnkgc2hvdWxkIG5vdCBiZSBzaGFyZWQsIGlmIHdlIHNlZSB3
cml0ZXMgb2Ygb3RoZXIgdmFsdWVzIHRoZW4gc29tZXRoaW5nIHdlbnQgd3JvbmcuCisgICAgICAg
ICAgICBjb25zdCBpZHggPSAoTWF0aC5yYW5kb20oKSAqICR7cGFnZVNpemV9ICogJHtpbml0aWFs
UGFnZXN9KSB8IDA7CisgICAgICAgICAgICBtZW1vcnlbaWR4XSA9ICR7YX07CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCR7dmVyYm9zZX0pCisgICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSB3
cml0ZXMgcGVyZm9ybWVkIik7CisgICAgICAgICQuYWdlbnQucmVwb3J0KCJBZ2VudCAke2F9IHBl
cmZvcm1lZCB3cml0ZXMiKTsKKyAgICAgICAgYnVzeVdhaXRGb3JWYWx1ZSgke3N0YXRlQ2hlY2t9
KTsKKworICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAgICAgIHByaW50KCJBZ2VudCAk
e2F9IGNoZWNraW5nIik7CisgICAgICAgIC8vIENoZWNrIHRoYXQgb3VyIG1lbW9yeSBvbmx5IGNv
bnRhaW5zIDAgYW5kIG91ciBhZ2VudCBudW1iZXIuCisgICAgICAgIGZvciAobGV0IGlkeCA9IDA7
IGlkeCA8ICR7cGFnZVNpemV9ICogJHtpbml0aWFsUGFnZXN9OyArK2lkeCkKKyAgICAgICAgICAg
IGlmIChtZW1vcnlbaWR4XSAhPT0gMCAmJiBtZW1vcnlbaWR4XSAhPT0gJHthfSkKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFnZW50ICR7YX0gZm91bmQgdW5leHBlY3RlZCB2YWx1
ZSAiICsgbWVtb3J5W2lkeF0gKyAiIGF0IGxvY2F0aW9uICIgKyBpZHgpOworICAgICAgICAkLmFn
ZW50LnJlcG9ydCgiQWdlbnQgJHthfSBjaGVja3Mgb3V0IE9LIik7CisgICAgICAgICQuYWdlbnQu
bGVhdmluZygpOworICAgICAgICBgOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgcHJpbnQoYFN0YXJ0aW5nIGFnZW50ICR7YX1gKTsKKyAgICAgICAgJC5hZ2VudC5zdGFydChh
Z2VudFNjcmlwdCk7CisgICAgfQorfTsKKworY29uc3Qgd2FpdEZvckFnZW50cyA9IG51bUFnZW50
c1RvV2FpdEZvciA9PiB7CisgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBudW1BZ2VudHNUb1dhaXRG
b3I7ICsrYSkgeworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgY29uc3QgcmVw
b3J0ID0gJC5hZ2VudC5nZXRSZXBvcnQoKTsKKyAgICAgICAgICAgIGlmIChyZXBvcnQgPT09IG51
bGwpIHsKKyAgICAgICAgICAgICAgICAkLmFnZW50LnNsZWVwKDEpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgcHJpbnQoYFJlY2VpdmVkOiAke3JlcG9ydH1gKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfTsKKworY29uc3QgYnJvYWRjYXN0VG9BZ2VudHMgPSAo
c2FiLCBuZXdTdGF0ZSkgPT4geworICAgICQuYWdlbnQuYnJvYWRjYXN0KHNhYiwgbmV3U3RhdGUp
OworfTsKKworY29uc3Qgc2FiID0gbmV3IFNoYXJlZEFycmF5QnVmZmVyKDEwMjQpOworY29uc3Qg
dTggPSBuZXcgVWludDhBcnJheShzYWIpOworCitmb3IgKGxldCBpdCA9IDA7IGl0IDwgdGVzdEl0
ZXJhdGlvbnM7ICsraXQpIHsKKyAgICBzdGFydEFnZW50cyhudW1BZ2VudHMpOworICAgIHdhaXRG
b3JBZ2VudHMobnVtQWdlbnRzKTsKKyAgICBicm9hZGNhc3RUb0FnZW50cyhzYWIsIHN0YXRlUmVh
ZHkpOworICAgIHdhaXRGb3JBZ2VudHMobnVtQWdlbnRzKTsKKyAgICAkLmFnZW50LnNsZWVwKDEp
OworICAgIEF0b21pY3Muc3RvcmUodTgsIDAsIHN0YXRlUmVhZHkpOworICAgIHdhaXRGb3JBZ2Vu
dHMobnVtQWdlbnRzKTsKKyAgICAkLmFnZW50LnNsZWVwKDEpOworICAgIEF0b21pY3Muc3RvcmUo
dTgsIDAsIHN0YXRlQ2hlY2spOworICAgIHdhaXRGb3JBZ2VudHMobnVtQWdlbnRzKTsKKyAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoIkV2ZXJ5dGluZyB3YXMgZmluZSIpOworICAgICQu
YWdlbnQuc2xlZXAoMSk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL2V4dGVu
c2lvbi1NZW1vcnlNb2RlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5
TW9kZS5qcwppbmRleCA5MTkxY2VjNC4uNTYwODUyNiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNt
L2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBp
L2V4dGVuc2lvbi1NZW1vcnlNb2RlLmpzCkBAIC0yLDYgKzIsNyBAQCBpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJzsKIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQu
anMnOwogCiBjb25zdCBpdGVyYXRpb25zID0gMzI7Citjb25zdCB2ZXJib3NlID0gZmFsc2U7CiAK
IC8vIFRoaXMgQVBJIGlzbid0IHBhcnQgb2YgV2ViQXNzZW1ibHkncyBvZmZpY2lhbCBzcGVjLiBJ
dCBpcyB1c2UgZm9yIHRlc3Rpbmcgd2l0aGluIHRoZSBzaGVsbC4KIApAQCAtMjEsNiArMjIsOCBA
QCBhc3NlcnQudGhyb3dzKCgpID0+IFdlYkFzc2VtYmx5TWVtb3J5TW9kZShuZXcgV2ViQXNzZW1i
bHkuVGFibGUoe2luaXRpYWw6IDEsIGVsZQogCiBjb25zdCB2YWxpZGF0ZU1vZGUgPSB3aGF0ID0+
IHsKICAgICBjb25zdCBtb2RlID0gV2ViQXNzZW1ibHlNZW1vcnlNb2RlKHdoYXQpOworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBwcmludChgICAgICR7bW9kZX1gKTsKICAgICBzd2l0Y2ggKG1v
ZGUpIHsKICAgICBjYXNlICJTaWduYWxpbmciOgogICAgICAgICBicmVhazsKQEAgLTM5LDYgKzQy
LDggQEAgY29uc3QgaW5zdGFudGlhdGUgPSBidWlsZGVyID0+IHsKIH07CiAKIChmdW5jdGlvbiB0
ZXN0TWVtb3J5Tm9NYXgoKSB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGB0ZXN0
TWVtb3J5Tm9NYXhgKTsKICAgICBsZXQgbWVtb3JpZXMgPSBbXTsKICAgICBmb3IgKGxldCBpID0g
MDsgaSAhPSBpdGVyYXRpb25zOyArK2kpCiAgICAgICAgIG1lbW9yaWVzLnB1c2godmFsaWRhdGVN
b2RlKG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiBpIH0pKSk7CkBAIC00OCw2ICs1
Myw4IEBAIGNvbnN0IGluc3RhbnRpYXRlID0gYnVpbGRlciA9PiB7CiBmdWxsR0MoKTsKIAogKGZ1
bmN0aW9uIHRlc3RNZW1vcnkoKSB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGB0
ZXN0TWVtb3J5YCk7CiAgICAgbGV0IG1lbW9yaWVzID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7
IGkgIT0gaXRlcmF0aW9uczsgKytpKQogICAgICAgICBtZW1vcmllcy5wdXNoKHZhbGlkYXRlTW9k
ZShuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogaSwgbWF4aW11bTogaSB9KSkpOwpA
QCAtNTcsNiArNjQsOCBAQCBmdWxsR0MoKTsKIGZ1bGxHQygpOwogCiAoZnVuY3Rpb24gdGVzdElu
c3RhbmNlTm9NZW1vcnkoKSB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGB0ZXN0
SW5zdGFuY2VOb01lbW9yeWApOwogICAgIGxldCBpbnN0YW5jZXMgPSBbXTsKICAgICBmb3IgKGxl
dCBpID0gMDsgaSAhPSBpdGVyYXRpb25zOyArK2kpIHsKICAgICAgICAgY29uc3QgYnVpbGRlciA9
IChuZXcgQnVpbGRlcigpKQpAQCAtNjYsNiArNzUsOCBAQCBmdWxsR0MoKTsKICAgICAgICAgY29u
c3QgaW5zdGFuY2UgPSBpbnN0YW50aWF0ZShidWlsZGVyKTsKICAgICAgICAgLy8gTm8tbWVtb3J5
IGluc3RhbmNlcyBzaG91bGQgbmV2ZXIgYmUgU2lnbmFsaW5nOiBpdCB3b3VsZCBiZSB3YXN0ZWZ1
bC4KICAgICAgICAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5TWVtb3J5TW9kZShpbnN0YW5jZSksICJC
b3VuZHNDaGVja2luZyIpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIHByaW50
KGAgICAgJHtXZWJBc3NlbWJseU1lbW9yeU1vZGUoaW5zdGFuY2UpfWApOwogICAgICAgICBpbnN0
YW5jZXMucHVzaChpbnN0YW5jZSk7CiAgICAgfQogICAgIHJldHVybiBpbnN0YW5jZXM7CkBAIC03
NCw2ICs4NSw4IEBAIGZ1bGxHQygpOwogZnVsbEdDKCk7CiAKIChmdW5jdGlvbiB0ZXN0SW5zdGFu
Y2VOb01heCgpIHsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYHRlc3RJbnN0YW5j
ZU5vTWF4YCk7CiAgICAgbGV0IGluc3RhbmNlcyA9IFtdOwogICAgIGZvciAobGV0IGkgPSAwOyBp
ICE9IGl0ZXJhdGlvbnM7ICsraSkgewogICAgICAgICAvLyBOb3RlOiBub3QgZXhwb3J0ZWQhIFRo
ZSBpbnRlcm5hbCBBUEkgY2FuIHN0aWxsIGFjY2Vzcy4KQEAgLTg5LDYgKzEwMiw4IEBAIGZ1bGxH
QygpOwogZnVsbEdDKCk7CiAKIChmdW5jdGlvbiB0ZXN0SW5zdGFuY2UoKSB7CisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIHByaW50KGB0ZXN0SW5zdGFuY2VgKTsKICAgICBsZXQgaW5zdGFuY2Vz
ID0gW107CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0aW9uczsgKytpKSB7CiAgICAg
ICAgIC8vIE5vdGU6IG5vdCBleHBvcnRlZCEgVGhlIGludGVybmFsIEFQSSBjYW4gc3RpbGwgYWNj
ZXNzLgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcyBiL0pTVGVzdHMvd2Fz
bS91dGlsaXRpZXMuanMKaW5kZXggMTlmOWI0ZS4uYmM2OWFkNyAxMDA2NDQKLS0tIGEvSlNUZXN0
cy93YXNtL3V0aWxpdGllcy5qcworKysgYi9KU1Rlc3RzL3dhc20vdXRpbGl0aWVzLmpzCkBAIC03
OSw2ICs3OSwxMiBAQCBjb25zdCBfZHVtcCA9ICh3aGF0LCBuYW1lLCBwYWQgPSAnICAgICcpID0+
IHsKICAgICByZXR1cm4gczsKIH07CiAKK2V4cG9ydCBjb25zdCB0b0phdmFTY3JpcHROYW1lID0g
bmFtZSA9PiB7CisgICAgY29uc3QgY2FtZWxDYXNlID0gbmFtZS5yZXBsYWNlKC8oW15hLXowLTld
LikvZywgYyA9PiBjWzFdLnRvVXBwZXJDYXNlKCkpOworICAgIGNvbnN0IENhbWVsQ2FzZSA9IGNh
bWVsQ2FzZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNhbWVsQ2FzZS5zbGljZSgxKTsKKyAg
ICByZXR1cm4gQ2FtZWxDYXNlOworfTsKKwogLy8gVXNlIHVuZGVyc2NvcmUgbmFtZXMgdG8gYXZv
aWQgY2xhc2hpbmcgd2l0aCBidWlsdGluIG5hbWVzLgogZXhwb3J0IHsKICAgICBfZHVtcCBhcyBk
dW1wLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggNzA3NzYxMS4uYzNmZTZlYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ4IEBACisyMDE3LTA0LTExICBKRiBCYXN0
aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogbWFuYWdl
IG1lbW9yeSBiZXR0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MDYyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgd2VyZW4ndCBtYW5hZ2VkIHZlcnkgd2Vs
bC4gVGhpcyBwYXRjaAorICAgICAgICByZWZhY3RvcnMgaXQgYW5kIHB1dHMgdXMgaW4gYSBnb29k
IHBvc2l0aW9uIHRvIGZ1cnRoZXIgaW1wcm92ZSBvdXIKKyAgICAgICAgZmFzdCBtZW1vcnkgaGFu
ZGxpbmcgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBXZSBub3cgY2FjaGUgZmFzdCBtZW1vcmll
cyBhdCBhIHByb2Nlc3MgZ3JhbnVsYXJpdHksIGJ1dCBtYWtlIHN1cmUKKyAgICAgICAgdGhhdCB0
aGV5IGRvbid0IGNvbnN1bWUgZGlydHkgcGFnZXMuIFdlIGFkZCBhIGNhcCB0byB0aGUgdG90YWwK
KyAgICAgICAgbnVtYmVyIG9mIGFsbG9jYXRlZCBmYXN0IG1lbW9yaWVzIHRvIGF2b2lkIEFTTFIg
ZGVncmFkYXRpb24uCisKKyAgICAgICAgV2UgdGVhY2ggdGhlIEdDIGFib3V0IG1lbW9yaWVzIGFz
IGEga2luZCBvZiByZXNvdXJjZSBpdCBzaG91bGQKKyAgICAgICAgY2FyZSBhYm91dCBiZWNhdXNl
IGl0IGRpZG4ndCBoYXZlIHZpc2liaWxpdHkgaW50byB0aGUgYW1vdW50IG9mCisgICAgICAgIG1l
bW9yeSBlYWNoIHJlcHJlc2VudGVkLiBUaGlzIGFsbG93cyBiZW5jaG1hcmtzIHdoaWNoIGFsbG9j
YXRlCisgICAgICAgIG1lbW9yaWVzIGJhY2stdG8tYmFjayB0byByZWxpYWJseSBnZXQgZmFzdCBt
ZW1vcmllcyAxMDAlIG9mIHRoZQorICAgICAgICB0aW1lLCBldmVuIG9uIGEgc3lzdGVtIHVuZGVy
IGxvYWQsIHdoaWNoIHdhc24ndCB0aGUgY2FzZQorICAgICAgICBiZWZvcmUuIFRoaXMgcmVsaWFi
aWxpdHkgeWllbGRzIHJvdWdobHkgOCUgcGVyZiBidW1wIG9uIHg4Ni02NAorICAgICAgICBXYXNt
QmVuY2guCisKKyAgICAgICAgVGhlIEdDIGhldXJpc3RpYyBpcyBhcyBmb2xsb3dzOiBlYWNoIHRp
bWUgd2UgYWxsb2NhdGUgYSBmYXN0CisgICAgICAgIG1lbW9yeSB3ZSBub3RpZnkgdGhlIEdDLCB3
aGljaCB0aGVuIGtlZXBzIHRyYWNrIG9mIHRoZSB0b3RhbAorICAgICAgICBudW1iZXIgb2YgZmFz
dCBtZW1vcmllcyBhbGxvY2F0ZWQgc2luY2UgaXQgbGFzdCBHQydkLiBXZQorICAgICAgICBzZXBh
cmF0ZWx5IGtlZXAgdHJhY2sgb2YgdGhlIHRvdGFsIG51bWJlciBvZiBmYXN0IG1lbW9yaWVzIHdo
aWNoCisgICAgICAgIGhhdmUgZXZlciBleGlzdGVkIGF0IGFueSBwb2ludCBpbiB0aW1lIChjYWNo
ZWQgKyBhbGxvY2F0ZWQpLiBUaGlzCisgICAgICAgIGlzIGEgbW9ub3RvbmljYWxseS1pbmNyZWFz
aW5nIGhpZ2ggd2F0ZXJtYXJrLiBUaGUgR0Mgd2lsbCBmb3JjZSBhCisgICAgICAgIGZ1bGwgY29s
bGVjdGlvbiBpZiwgc2luY2UgaXQgbGFzdCByYW4sIGhhbGYgb3IgbW9yZSBvZiB0aGUgaGlnaAor
ICAgICAgICB3YXRlcm1hcmsgb2YgZmFzdCBtZW1vcmllcyB3YXMgYWxsb2NhdGVkLgorCisgICAg
ICAgIEF0IHRoZSBzYW1lIHRpbWUsIGlmIHdlIGZhaWwgb2J0YWluaW5nIGEgZmFzdCBtZW1vcnkg
ZnJvbSB0aGUKKyAgICAgICAgY2FjaGUgd2UgZG8gYSBHQyB0byB0cnkgdG8gZmluZCBvbmUuIElm
IHRoYXQgZmFpbHMgd2UnbGwgYWxsb2NhdGUKKyAgICAgICAgYSBuZXcgb25lICh0aGlzIGNhbiBh
bHNvIGZhaWwsIHRoZW4gd2UgZ28gdG8gc2xvdyBtZW1vcnkpLiBUaGlzCisgICAgICAgIGNhbiBh
bHNvIGJlIGltcHJvdmVkLCBidXQgaXQncyBhIGdvb2Qgc3RhcnQuCisKKyAgICAgICAgVGhpcyBj
dXJyZW50bHkgZGlzYWJsZXMgZmFzdCBtZW1vcmllcyBvbiBpT1MgYmVjYXVzZSBnZXR0aW5nIGZh
c3QKKyAgICAgICAgbWVtb3JpZXMgaXNuJ3QgYSBndWFyYW50ZWVkIHRoaW5nLiBSYXRoZXIsIHdl
IGdldCBxdWl0ZSBhIGZldyBvZgorICAgICAgICB0aGVtIGFuZCBhY2hpZXZlIHNpZ25pZmljYW50
IHNwZWVkdXBzLCBidXQgYmVuY2htYXJrcyB3aGljaAorICAgICAgICBhbGxvY2F0ZSBtZW1vcmll
cyBiYWNrLXRvLWJhY2sgZW5kIHVwIGZhbGxpbmcgYmVoaW5kIGJlY2F1c2UgdGhlCisgICAgICAg
IEdDIGNhbiBjb25zZXJ2YXRpdmVseSBob2xkIG9udG8gbWVtb3JpZXMsIHdoaWNoIHRoZW4geWll
bGRzIGEgcGVyZgorICAgICAgICBjbGlmZi4gVGhhdCBjbGlmZiBpc24ndCByZWxpYWJsZSwgV2Fz
bUJlbmNoIGdldHMgcm91Z2hseSAxMCBvZiAxOAorICAgICAgICBmYXN0IG1lbW9yaWVzIHdoZW4g
aW4gdGhlb3J5IGl0IHNob3VsZCBnZXQgYWxsIG9mIHRoZW0gZmFzdCAoYXMKKyAgICAgICAgTWFj
T1MgZG9lcykuIFRoZSBwYXRjaCBzaWduaWZpY2FudGx5IGltcHJvdmVzIHRoZSBzdGF0ZSBvZiBp
T1MKKyAgICAgICAgdGhvdWdoLCBhbmQgaW4gYSBmb2xsb3ctdXAgd2UgY291bGQgcmUtZW5hYmxl
IGZhc3QgbWVtb3JpZXMuCisKKyAgICAgICAgUGFydCBvZiB0aGlzIGdvb2QgcG9zaXRpb25pbmcg
aXMgYSBmYWNpbGl0eSB0byBwcmUtYWxsb2NhdGUgZmFzdAorICAgICAgICBtZW1vcmllcyB2ZXJ5
IGVhcmx5IGF0IHN0YXJ0dXAsIGJlZm9yZSBhbnkgZnJhZ21lbnRhdGlvbgorICAgICAgICBvY2N1
cnMuIFRoaXMgaXMgY3VycmVudGx5IGRpc2FibGVkIGJ1dCB3b3JrZWQgZXh0cmVtZWx5IHJlbGlh
Ymx5CisgICAgICAgIG9uIGlPUy4gT25jZSB3ZSBmaXggdGhlIGFib3ZlIGlzc3VlcyB3ZSdsbCB3
YW50IHRvIHJlLXZpc2l0IGFuZAorICAgICAgICB0dXJuIG9uIHByZS1hbGxvY2F0aW9uLgorCisg
ICAgICAgIFdlIGFsc28gYXZvaWQgbG9ja2luZyBmb3IgZmFzdCBtZW1vcnkgaWRlbnRpZmljYXRp
b24gd2hlbgorICAgICAgICBwZXJmb3JtaW5nIHNpZ25hbCBoYW5kbGluZy4gSSdtIHZlcnkgbmVy
dm91cyBhYm91dCBhY3F1aXJpbmcgbG9ja3MKKyAgICAgICAgaW4gYSBzaWduYWwgaGFuZGxlciBi
ZWNhdXNlIGluIGdlbmVyYWwgc2lnbmFscyBjYW4gaGFwcGVuIHdoZW4KKyAgICAgICAgd2UndmUg
bWVzc2VkIHVwLiBUaGlzIGlzbid0IHRoZSBjYXNlIHdpdGggZmFzdCBtZW1vcmllczogd2UncmUK
KyAgICAgICAgcmFpc2luZyBhIHNpZ25hbCBvbiBwdXJwb3NlIGFuZCBoYW5kbGluZyBpdC4gSG93
ZXZlciB0aGlzIGRvZXNuJ3QKKyAgICAgICAgbWVhbiB3ZSB3b24ndCBtZXNzIHVwIGVsc2V3aGVy
ZSEgVGhpcyB3aWxsIGdldCBtb3JlIGNvbXBsaWNhdGVkCisgICAgICAgIG9uY2Ugd2UgYWRkIHN1
cHBvcnQgZm9yIG11bHRpcGxlIHRocmVhZHMgc2hhcmluZyBtZW1vcmllcyBhbmQKKyAgICAgICAg
YmVpbmcgYWJsZSB0byBncm93IHRoZWlyIG1lbW9yaWVzLiBPbmUgZXhhbXBsZTogdGhlIGNvZGUg
Y2FsbHMKKyAgICAgICAgQ1JBU0goKSwgd2hpY2ggZXhlY3V0ZXMgdGhlIGZvbGxvd2luZyBjb2Rl
IGluIHJlbGVhc2U6CisKKyAgICAgICAgICAgICooaW50ICopKHVpbnRwdHJfdCkweGJiYWRiZWVm
ID0gMDsKKworICAgICAgICBUaGlzIGlzIGEgc2VnZmF1bHQsIHdoaWNoIG91ciBmYXN0IG1lbW9y
eSBzaWduYWwgaGFuZGxlciB0cmllcyB0bworICAgICAgICBoYW5kbGUuIEl0IGRvZXMgc28gYnkg
Zmlyc3QgZmlndXJpbmcgb3V0IHdoZXRoZXIgMHhiYmFkYmVlZiBpcyBpbgorICAgICAgICBhIGZh
c3QgbWVtb3J5IHJlZ2lvbiwgcmVxaXJpbmcgYSBsb2NrLiBJZiB3ZSBDUkFTSCgpIHdoaWxlIGhv
bGRpbmcKKyAgICAgICAgdGhlIGxvY2sgdGhlbiBvdXIgdGhyZWFkIHNlbGYtZGVhZGxvY2tzLCBn
aXZpbmcgdXMgbm8gY3Jhc2ggcmVwb3J0CisgICAgICAgIGFuZCBhIGJhZCB1c2VyIGV4cGVyaWVu
Y2UuCisKKyAgICAgICAgQXZvaWRpbmcgYSBsb2NrIHRoZXJlZm9yZSBpdCdzIG5vdCBhYm91dCBz
cGVlZCBvciByZWR1Y2VkCisgICAgICAgIGNvbnRlbnRpb24uIEluIGZhY3QsIEknZCB1c2Ugc29t
ZXRoaW5nIGVsc2UgdGhhbiBhIEZJRk8gaWYgdGhlc2UKKyAgICAgICAgd2VyZSBhIGNvbmNlcm4u
IFdlJ3JlIGFsc28gZG9pbmcgc3lzY2FsbHMsIHdoaWNoIGR3YXJmIGFueSBsb2NraW5nCisgICAg
ICAgIGNvc3QuCisKKyAgICAgICAgV2Ugbm93IG9ubHkgYWxsb2NhdGUgNEdpQiArIHJlZHpvbmUg
b2YgNjRrICogMTI4IGZvciBmYXN0IG1lbW9yaWVzCisgICAgICAgIGluc3RlYWQgb2YgOEdpQi4g
VGhpcyBwYXRjaCByZXVzZXMgdGhlIGxvZ2ljIGZyb20KKyAgICAgICAgQjM6Oldhc21Cb3VuZHND
aGVjayB0byBwZXJmb3JtIGJvdW5kcyBjaGVja3Mgd2hlbiBhY2Nlc3NlcyBjb3VsZAorICAgICAg
ICBleGNlZWQgdGhlIHJlZHpvbmUuIFdlJ2xsIHRoZXJlZm9yZSBiZW5lZml0IGZyb20gQ1NFIGdv
b2RuZXNzIHdoZW4KKyAgICAgICAgaXQgcmVhY2hlcyBXYXNtQm91bmRzQ2hlY2suIFNlZSBidWcg
IzE2MzQ2OS4KKworICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6IGZpeCBhIGJhYWFhZGRk
IGJ1ZyB3aGVyZSB1bnNpZ25lZC0+c2lnbmVkCisgICAgICAgIGNvbnZlcnNpb24gYWxsb3dlZCBv
dXQtb2YtYm91bmRzIHJlYWRzIGJ5IC0yR2lCLiBJJ2xsIGZvbGxvdy11cCBpbgorICAgICAgICBi
dWcgIzE3MDY5MiB0byBwcmV2ZW50IHRoaXMgdHlwZSBvZiBidWcgb25jZSBhbmQgZm9yIGFsbC4K
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIz
L0IzVmFsaWRhdGUuY3BwOiB1cGRhdGUgV2FzbUJvdW5kc0NoZWNrIHZhbGlkYXRpb24uCisgICAg
ICAgICogYjMvQjNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6ZWZmZWN0cyk6
IHVwZGF0ZSBXYXNtQm91bmRzQ2hlY2sgZWZmZWN0cy4KKyAgICAgICAgKiBiMy9CM1dhc21Cb3Vu
ZHNDaGVja1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6Oldhc21Cb3VuZHNDaGVja1ZhbHVl
OjpXYXNtQm91bmRzQ2hlY2tWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpXYXNtQm91bmRzQ2hl
Y2tWYWx1ZTo6cmVkem9uZUxpbWl0KToKKyAgICAgICAgKEpTQzo6QjM6Oldhc21Cb3VuZHNDaGVj
a1ZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5o
OgorICAgICAgICAoSlNDOjpCMzo6V2FzbUJvdW5kc0NoZWNrVmFsdWU6Om1heGltdW0pOgorICAg
ICAgICAqIGIzL2Fpci9BaXJDdXN0b20uY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpXYXNt
Qm91bmRzQ2hlY2tDdXN0b206OmlzVmFsaWRGb3JtKToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFdhc21Cb3VuZHNDaGVjayk6CisgICAgICAgICogaGVh
cC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6Okhl
YXA6OnJlcG9ydFdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6d2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1pdHMpOgorICAgICAgICAoSlND
OjpIZWFwOjpkaWRBbGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6c2hvdWxkRG9GdWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkhlYXA6OmNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAgIChKU0M6OmluaXRp
YWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFy
ZVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0TG9hZE9w
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3ApOgorICAg
ICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20v
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyYXBIYW5k
bGVyKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOiBSZXdyaXRlLgorICAgICAgICAo
SlNDOjpXYXNtOjptYWtlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojppbml0
aWFsaXplUHJlYWxsb2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmNyZWF0
ZUltcGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6Oldhc206Ok1lbW9yeTo6fk1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6
ZmFzdE1hcHBlZFJlZHpvbmVCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6ZmFz
dE1hcHBlZEJ5dGVzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjptYXhGYXN0TWVtb3J5
Q291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFz
dE1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisgICAgICAgICog
d2FzbS9XYXNtTWVtb3J5Lmg6CisgICAgICAgIChNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCk6
CisgICAgICAgIChNZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSk6CisgICAgICAg
ICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpnbG9iYWxNZW1vcnlCeXRlU2l6ZSk6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlN
ZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKToKKwogMjAxNy0wNC0x
MyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlND
XSBVc2UgcHJvcGVyIGlmZGVmIGd1YXJkIGZvciBjb2RlIHVzaW5nIE1hY2hpbmVDb250ZXh0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDgyMGQ0YzEuLjVi
YTVhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0z
MTQ0LDIyICszMTQ0LDQ2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEIz
OjpXYXNtQm91bmRzQ2hlY2s6IHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgICAg
ICBXYXNtQm91bmRzQ2hlY2tWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5hczxXYXNtQm91bmRzQ2hl
Y2tWYWx1ZT4oKTsKIAogICAgICAgICAgICAgVmFsdWUqIHB0ciA9IHZhbHVlLT5jaGlsZCgwKTsK
IAotICAgICAgICAgICAgQXJnIHRlbXAgPSBtX2NvZGUubmV3VG1wKEdQKTsKLSAgICAgICAgICAg
IGFwcGVuZChJbnN0KE1vdmUzMiwgdmFsdWUsIHRtcChwdHIpLCB0ZW1wKSk7CisgICAgICAgICAg
ICBBcmcgcHRyUGx1c0ltbSA9IG1fY29kZS5uZXdUbXAoR1ApOworICAgICAgICAgICAgYXBwZW5k
KEluc3QoTW92ZTMyLCB2YWx1ZSwgdG1wKHB0ciksIHB0clBsdXNJbW0pKTsKICAgICAgICAgICAg
IGlmICh2YWx1ZS0+b2Zmc2V0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaW1tKHZhbHVlLT5v
ZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tKHZhbHVlLT5v
ZmZzZXQoKSksIHRlbXApOworICAgICAgICAgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIGltbSh2
YWx1ZS0+b2Zmc2V0KCkpLCBwdHJQbHVzSW1tKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgQXJnIGJpZ0ltbSA9IG1fY29kZS5uZXdUbXAoR1ApOwogICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUtPm9mZnNldCgpKSwg
YmlnSW1tKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKEFkZDY0LCBiaWdJbW0sIHRlbXAp
OworICAgICAgICAgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIGJpZ0ltbSwgcHRyUGx1c0ltbSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kKElu
c3QoQWlyOjpXYXNtQm91bmRzQ2hlY2ssIHZhbHVlLCB0ZW1wLCBBcmcodmFsdWUtPnBpbm5lZEdQ
UigpKSkpOworCisgICAgICAgICAgICBBcmcgbGltaXQ7CisgICAgICAgICAgICBpZiAodmFsdWUt
PnBpbm5lZEdQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgbGltaXQgPSBB
cmcodmFsdWUtPnBpbm5lZEdQUigpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIFNpZ25hbGluZyBtZW1vcmllcyBkb24ndCBwaW4gYSByZWdpc3RlciBiZWNhdXNlIG9u
bHkgdGhlIGFjY2Vzc2VzIHdob3NlIHJlZytpbW0gY291bGQgZXZlciBvdmVyZmxvdyA0R2lCK3Jl
ZHpvbmUgbmVlZCB0byBiZSBjaGVja2VkLAorICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBkb24n
dCB0aGluayB0aGVzZSB3aWxsIGJlIGZyZXF1ZW50LiBBbGwgb3RoZXIgYWNjZXNzZXMgd2lsbCB0
cmFwIGR1ZSB0byBQUk9UX05PTkUgcGFnZXMuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSBnb3QgaGVyZSBpdCdzIGJlY2F1c2UgYSBtZW1vcnkgYWNjZXNzIGhh
ZCBhIHZlcnkgbGFyZ2Ugb2Zmc2V0LiBXZSBjb3VsZCBjaGVjayB0aGF0IGl0IGRvZXNuJ3QgZXhj
ZWVkIDRHaUIrcmVkem9uZSBzaW5jZSB0aGF0J3MKKyAgICAgICAgICAgICAgICAvLyB0ZWNobmlj
YWxseSB0aGUgbGltaXQgd2UgbmVlZCB0byBhdm9pZCBvdmVyZmxvd2luZywgYnV0IGl0J3MgYmV0
dGVyIGlmIHdlIHVzZSBhIHNtYWxsZXIgaW1tZWRpYXRlIHdoaWNoIGNvZGVnZW5zIG1vcmUgZWFz
aWx5LgorICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCBhbnl0aGluZyBhYm92ZSB0aGUg
ZGVjbGFyZWQgJ21heGltdW0nIHdpbGwgdHJhcCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0
aGF0IG51bWJlci4gSWYgdGhlcmUgd2FzIG5vIGRlY2xhcmVkCisgICAgICAgICAgICAgICAgLy8g
J21heGltdW0nIHRoZW4gd2Ugc3RpbGwga25vdyB0aGF0IGFueSBhY2Nlc3MgYWJvdmUgNEdpQiB3
aWxsIHRyYXAsIG5vIG5lZWQgdG8gYWRkIHRoZSByZWR6b25lLgorICAgICAgICAgICAgICAgIGxp
bWl0ID0gbV9jb2RlLm5ld1RtcChHUCk7CisgICAgICAgICAgICAgICAgc2l6ZV90IGxpbWl0VmFs
dWUgPSB2YWx1ZS0+bWF4aW11bSgpID8gdmFsdWUtPm1heGltdW0oKS5ieXRlcygpIDogc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChs
aW1pdFZhbHVlIDw9IHZhbHVlLT5yZWR6b25lTGltaXQoKSk7CisgICAgICAgICAgICAgICAgaWYg
KGltbShsaW1pdFZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGltbShs
aW1pdFZhbHVlKSwgbGltaXQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKGxpbWl0VmFsdWUpLCBsaW1pdCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQoSW5zdChBaXI6Oldhc21Cb3VuZHNDaGVjaywg
dmFsdWUsIHB0clBsdXNJbW0sIGxpbWl0KSk7CisjZWxzZQorICAgICAgICAgICAgYXBwZW5kKEFp
cjo6T29wcyk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcApp
bmRleCA2ZTZhOTNkLi5jYzNhNTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuY3BwCkBAIC00NzAsNyArNDcwLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElE
QVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwg
KnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBl
KCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUo
bV9wcm9jZWR1cmUuY29kZSgpLmlzUGlubmVkKHZhbHVlLT5hczxXYXNtQm91bmRzQ2hlY2tWYWx1
ZT4oKS0+cGlubmVkR1BSKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCktPnBpbm5lZEdQUigpICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKG1fcHJvY2VkdXJlLmNvZGUo
KS5pc1Bpbm5lZCh2YWx1ZS0+YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCktPnBpbm5lZEdQUigp
KSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURShtX3Byb2NlZHVy
ZS5jb2RlKCkud2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKCksICgiQXQgIiwgKnZhbHVlKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFVwc2lsb246CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKaW5kZXggOGM5MTBhYS4uNjViMTdlMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIkIz
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleUlubGluZXMuaCIKICNpbmNsdWRl
ICJCM1ZhcmlhYmxlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgi
CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtNjY0LDcgKzY2NSw4IEBA
IEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAgICAgICByZXN1bHQgPSBFZmZlY3Rz
Ojpmb3JDaGVjaygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc21Cb3VuZHNDaGVjazoK
LSAgICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKGFzPFdhc21C
b3VuZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgcmVzdWx0LnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcmVzdWx0LmV4aXRzU2lk
ZXdheXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFVwc2lsb246CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAKaW5k
ZXggYjNhMzI5MC4uOGFlY2MxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIApAQCAtMzQsMTAgKzM1LDExIEBA
IFdhc21Cb3VuZHNDaGVja1ZhbHVlOjp+V2FzbUJvdW5kc0NoZWNrVmFsdWUoKQogewogfQogCi1X
YXNtQm91bmRzQ2hlY2tWYWx1ZTo6V2FzbUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHB0ciwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQgb2Zmc2V0KQorV2FzbUJvdW5k
c0NoZWNrVmFsdWU6Oldhc21Cb3VuZHNDaGVja1ZhbHVlKE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBw
dHIsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkIG9mZnNldCwgUGFnZUNvdW50IG1heGltdW0p
CiAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBXYXNtQm91bmRzQ2hlY2ssIG9yaWdpbiwgcHRy
KQogICAgICwgbV9waW5uZWRHUFIocGlubmVkR1BSKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQor
ICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiB7CiB9CiAKQEAgLTQ2LDkgKzQ4LDIyIEBAIFZhbHVl
KiBXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3
IFdhc21Cb3VuZHNDaGVja1ZhbHVlKCp0aGlzKTsKIH0KIAorc2l6ZV90IFdhc21Cb3VuZHNDaGVj
a1ZhbHVlOjpyZWR6b25lTGltaXQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3Bpbm5lZEdQUiA9
PSBJbnZhbGlkR1BSUmVnKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkp
ICsgV2FzbTo6TWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCk7CisjZWxzZQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogdm9pZCBXYXNtQm91bmRz
Q2hlY2tWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoY29tbWEsICJzaXplUmVnaXN0ZXIgPSAiLCBtX3Bp
bm5lZEdQUiwgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworICAgIGlmIChtX3Bpbm5lZEdQUiA9
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyZWR6b25lTGltaXQg
PSAiLCByZWR6b25lTGltaXQoKSwgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworICAgIGVsc2UK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic2l6ZVJlZ2lzdGVyID0gIiwgbV9waW5uZWRHUFIs
ICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tW
YWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aAppbmRleCBjY2M1NGI4Li4xMTBlNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNs
dWRlICJCM1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2Fz
bVBhZ2VDb3VudC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIApAQCAtNDYs
OCArNDcsMTYgQEAgcHVibGljOgogICAgIAogICAgIH5XYXNtQm91bmRzQ2hlY2tWYWx1ZSgpOwog
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHR5cGVkZWYgV2FzbTo6UGFnZUNvdW50IFBh
Z2VDb3VudDsKKyNlbHNlCisgICAgdHlwZWRlZiBjaGFyIFBhZ2VDb3VudDsKKyNlbmRpZgorCiAg
ICAgR1BSUmVnIHBpbm5lZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fcGlubmVkR1BSOyB9CiAgICAg
dW5zaWduZWQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBzaXplX3Qg
cmVkem9uZUxpbWl0KCkgY29uc3Q7CisgICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJl
dHVybiBtX21heGltdW07IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQ
cmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKQEAgLTU3LDEwICs2NiwxMSBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBXYXNtQm91bmRzQ2hlY2tWYWx1ZShPcmlnaW4sIFZhbHVlKiBw
dHIsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgV2FzbUJvdW5kc0NoZWNrVmFsdWUoT3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcgcGlu
bmVkR1BSLCB1bnNpZ25lZCBvZmZzZXQsIFBhZ2VDb3VudCBtYXhpbXVtKTsKIAogICAgIEdQUlJl
ZyBtX3Bpbm5lZEdQUjsKICAgICB1bnNpZ25lZCBtX29mZnNldDsKKyAgICBQYWdlQ291bnQgbV9t
YXhpbXVtOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAKaW5kZXggN2VlN2YzYy4uNDljYTU0YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmNwcApAQCAtMTg1LDcgKzE4NSw3
IEBAIGJvb2wgV2FzbUJvdW5kc0NoZWNrQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQog
ICAgIGlmICghaW5zdC5hcmdzWzBdLmlzVG1wKCkgJiYgIWluc3QuYXJnc1swXS5pc1NvbWVJbW0o
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGluc3QuYXJnc1sxXS5pc1Jl
ZygpOworICAgIHJldHVybiBpbnN0LmFyZ3NbMV0uaXNSZWcoKSB8fCBpbnN0LmFyZ3NbMV0uaXNU
bXAoKSB8fCBpbnN0LmFyZ3NbMV0uaXNTb21lSW1tKCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAppbmRleCBkNzhhZTk3Li44MGU3NTRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcApAQCAtMTUxODUsNyArMTUxODUsOCBAQCB2b2lkIHRlc3RXYXNtQm91bmRz
Q2hlY2sodW5zaWduZWQgb2Zmc2V0KQogICAgIFZhbHVlKiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogICAgIGlmIChwb2ludGVyVHlwZSgpICE9IEludDMyKQogICAgICAgICBsZWZ0ID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGxlZnQpOwotICAgIHJvb3Qt
PmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxlZnQsIHBp
bm5lZCwgb2Zmc2V0KTsKKyAgICBXYXNtOjpQYWdlQ291bnQgbWF4aW11bTsKKyAgICByb290LT5h
cHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsZWZ0LCBwaW5u
ZWQsIG9mZnNldCwgbWF4aW11bSk7CiAgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAweDQyKTsKICAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCA3MjIzYjIwLi44NWQzYWQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIlR5cGVQ
cm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
Vk0uaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2Vha1NldElubGluZXMu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBA
IC0yNTAsNiArMjUxLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQog
ICAgICwgbV9zaXplQWZ0ZXJMYXN0RWRlbkNvbGxlY3QoMCkKICAgICAsIG1fc2l6ZUJlZm9yZUxh
c3RFZGVuQ29sbGVjdCgwKQogICAgICwgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSgwKQorICAg
ICwgbV93ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSgwKQogICAgICwg
bV9ieXRlc0FiYW5kb25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0KDApCiAgICAgLCBtX21heEVkZW5T
aXplKG1fbWluQnl0ZXNQZXJDeWNsZSkKICAgICAsIG1fbWF4SGVhcFNpemUobV9taW5CeXRlc1Bl
ckN5Y2xlKQpAQCAtNDY2LDYgKzQ2OCwyMyBAQCB2b2lkIEhlYXA6OmRlcHJlY2F0ZWRSZXBvcnRF
eHRyYU1lbW9yeVNsb3dDYXNlKHNpemVfdCBzaXplKQogICAgIHJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkU2xvd0Nhc2Uoc2l6ZSk7CiB9CiAKK3ZvaWQgSGVhcDo6cmVwb3J0V2ViQXNzZW1ibHlG
YXN0TWVtb3JpZXNBbGxvY2F0ZWQoc2l6ZV90IGNvdW50KQoreworICAgIGRpZEFsbG9jYXRlV2Vi
QXNzZW1ibHlGYXN0TWVtb3JpZXMoY291bnQpOworICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVm
ZXIoKTsKK30KKworYm9vbCBIZWFwOjp3ZWJBc3NlbWJseUZhc3RNZW1vcmllc1RoaXNDeWNsZUF0
VGhyZXNob2xkKCkgY29uc3QKK3sKKyAgICAvLyBXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIHVz
ZSBsYXJnZSBhbW91bnRzIG9mIHZpcnR1YWwgbWVtb3J5IGFuZCB3ZQorICAgIC8vIGRvbid0IGtu
b3cgaG93IG1hbnkgY2FuIGV4aXN0IGluIHRoaXMgcHJvY2Vzcy4gV2Uga2VlcCB0cmFjayBvZiB0
aGUgbW9zdAorICAgIC8vIGZhc3QgbWVtb3JpZXMgdGhhdCBoYXZlIGV4aXN0ZWQgYXQgYW55IHBv
aW50IGluIHRpbWUuIFRoZSBHQyB1c2VzIHRoaXMKKyAgICAvLyB0b3Agd2F0ZXJtYXJrIGFzIGFu
IGluZGljYXRpb24gb2Ygd2hldGhlciByZWNlbnQgYWxsb2NhdGlvbnMgc2hvdWxkIGNhdXNlCisg
ICAgLy8gYSBjb2xsZWN0aW9uOiBnZXQgdG9vIGNsb3NlIGFuZCB3ZSBtYXkgYmUgY2xvc2UgdG8g
dGhlIGFjdHVhbCBsaW1pdC4KKyAgICBzaXplX3QgZmFzdE1lbW9yeVRocmVzaG9sZCA9IHN0ZDo6
bWF4PHNpemVfdD4oMSwgV2FzbTo6TWVtb3J5OjptYXhGYXN0TWVtb3J5Q291bnQoKSAvIDIpOwor
ICAgIHJldHVybiBtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlID4g
ZmFzdE1lbW9yeVRocmVzaG9sZDsKK30KKwogdm9pZCBIZWFwOjpyZXBvcnRBYmFuZG9uZWRPYmpl
Y3RHcmFwaCgpCiB7CiAgICAgLy8gT3VyIGNsaWVudHMgZG9uJ3Qga25vdyBleGFjdGx5IGhvdyBt
dWNoIG1lbW9yeSB0aGV5CkBAIC0yMTAzLDYgKzIxMjIsNyBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFs
bG9jYXRpb25MaW1pdHMoKQogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIlxu
Iik7CiAgICAgICAgIGRhdGFMb2coImJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gIiwgbV9ieXRl
c0FsbG9jYXRlZFRoaXNDeWNsZSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIndlYkFzc2VtYmx5
RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlID0gIiwgbV93ZWJBc3NlbWJseUZhc3RNZW1v
cmllc0FsbG9jYXRlZFRoaXNDeWNsZSwgIlxuIik7CiAgICAgfQogICAgIAogICAgIC8vIENhbGN1
bGF0ZSBvdXIgY3VycmVudCBoZWFwIHNpemUgdGhyZXNob2xkIGZvciB0aGUgcHVycG9zZSBvZiBm
aWd1cmluZyBvdXQgd2hlbiB3ZSBzaG91bGQKQEAgLTIxODAsNiArMjIwMCw3IEBAIHZvaWQgSGVh
cDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRh
dGFMb2coInNpemVBZnRlckxhc3RDb2xsZWN0ID0gIiwgbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCwg
IlxuIik7CiAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA9IDA7CisgICAgbV93ZWJBc3Nl
bWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSA9IDA7CiAKICAgICBpZiAoT3B0aW9u
czo6bG9nR0MoKSkKICAgICAgICAgZGF0YUxvZygiPT4gIiwgY3VycmVudEhlYXBTaXplIC8gMTAy
NCwgImtiLCAiKTsKQEAgLTIyNTMsNiArMjI3NCwxMSBAQCB2b2lkIEhlYXA6OmRpZEFsbG9jYXRl
KHNpemVfdCBieXRlcykKICAgICBwZXJmb3JtSW5jcmVtZW50KGJ5dGVzKTsKIH0KIAordm9pZCBI
ZWFwOjpkaWRBbGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzKHNpemVfdCBjb3VudCkKK3sK
KyAgICBtX3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlICs9IGNvdW50
OworfQorCiBib29sIEhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKHNpemVfdCkKIHsKICAgICBpZiAo
IWlzVmFsaWRUaHJlYWRTdGF0ZShtX3ZtKSkKQEAgLTIzMDUsNyArMjMzMSw3IEBAIGJvb2wgSGVh
cDo6c2hvdWxkRG9GdWxsQ29sbGVjdGlvbihzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4g
c2NvcGUpIGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKCFzY29wZSkKLSAg
ICAgICAgcmV0dXJuIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlvbjsKKyAgICAgICAgcmV0dXJuIG1f
c2hvdWxkRG9GdWxsQ29sbGVjdGlvbiB8fCB3ZWJBc3NlbWJseUZhc3RNZW1vcmllc1RoaXNDeWNs
ZUF0VGhyZXNob2xkKCk7CiAgICAgcmV0dXJuICpzY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1
bGw7CiB9CiAKQEAgLTI0NTYsNyArMjQ4Miw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdElmTmVjZXNz
YXJ5T3JEZWZlcihHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogICAgICAgICBp
ZiAobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSA8PSBPcHRpb25zOjpnY01heEhlYXBTaXplKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGUgPD0gbV9tYXhFZGVuU2l6ZSkKKyAgICAgICAgaWYgKCF3ZWJBc3Nl
bWJseUZhc3RNZW1vcmllc1RoaXNDeWNsZUF0VGhyZXNob2xkKCkKKyAgICAgICAgICAgICYmIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPD0gbV9tYXhFZGVuU2l6ZSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCBkNjc4MzdhLi40
YjYzZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC0xOTksNiArMTk5LDE3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90
KTsKIAorICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBmb3IgdW5jb21taXR0ZWQgdmlydHVhbCBt
ZW1vcnkgYWxsb2NhdGlvbnMgY2F1c2VkIGJ5CisgICAgLy8gV2ViQXNzZW1ibHkgZmFzdCBtZW1v
cmllcy4gVGhpcyBpcyBjb3VudGVkIHNlcGFyYXRlbHkgYmVjYXVzZSB2aXJ0dWFsCisgICAgLy8g
bWVtb3J5IGlzIGxvZ2ljYWxseSBhIGRpZmZlcmVudCB0eXBlIG9mIHJlc291cmNlIHRoYW4gY29t
bWl0dGVkIHBoeXNpY2FsCisgICAgLy8gbWVtb3J5LiBXZSBjYW4gb2Z0ZW4gYWxsb2NhdGUgaHVn
ZSBhbW91bnRzIG9mIHZpcnR1YWwgbWVtb3J5ICh0aGluaworICAgIC8vIGdpZ2FieXRlcykgd2l0
aG91dCBhZHZlcnNlbHkgYWZmZWN0aW5nIHJlZ3VsYXIgR0MnZCBtZW1vcnkuIEF0IHNvbWUgcG9p
bnQKKyAgICAvLyB0aG91Z2gsIHRvbyBtdWNoIHZpcnR1YWwgbWVtb3J5IGJlY29tZXMgcHJvaGli
aXRpdmUgYW5kIHdlIHdhbnQgdG8KKyAgICAvLyBjb2xsZWN0IEdDLWFibGUgb2JqZWN0cyB3aGlj
aCBrZWVwIHRoaXMgdmlydHVhbCBtZW1vcnkgYWxpdmUuCisgICAgLy8gVGhpcyBpcyBjb3VudGVk
IGluIG51bWJlciBvZiBmYXN0IG1lbW9yaWVzLCBub3QgYnl0ZXMuCisgICAgdm9pZCByZXBvcnRX
ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZChzaXplX3QpOworICAgIGJvb2wgd2ViQXNz
ZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCgpIGNvbnN0OworCiAjaWYgRU5B
QkxFKFJFU09VUkNFX1VTQUdFKQogICAgIC8vIFVzZSB0aGlzIEFQSSB0byByZXBvcnQgdGhlIHN1
YnNldCBvZiBleHRyYSBtZW1vcnkgdGhhdCBsaXZlcyBvdXRzaWRlIHRoaXMgcHJvY2Vzcy4KICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXpl
X3QpOwpAQCAtMjQ4LDYgKzI1OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZUFsbFVubGlu
a2VkQ29kZUJsb2NrcyhEZWxldGVBbGxDb2RlRWZmb3J0KTsKIAogICAgIHZvaWQgZGlkQWxsb2Nh
dGUoc2l6ZV90KTsKKyAgICB2b2lkIGRpZEFsbG9jYXRlV2ViQXNzZW1ibHlGYXN0TWVtb3JpZXMo
c2l6ZV90KTsKICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKICAgICAKICAg
ICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKCkgeyByZXR1cm4gKm1f
aml0U3R1YlJvdXRpbmVzOyB9CkBAIC01MjYsNiArNTM4LDcgQEAgcHJpdmF0ZToKICAgICBzaXpl
X3QgbV9zaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0OwogCiAgICAgc2l6ZV90IG1fYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGU7CisgICAgc2l6ZV90IG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGU7CiAgICAgc2l6ZV90IG1fYnl0ZXNBYmFuZG9uZWRTaW5jZUxhc3RGdWxs
Q29sbGVjdDsKICAgICBzaXplX3QgbV9tYXhFZGVuU2l6ZTsKICAgICBzaXplX3QgbV9tYXhIZWFw
U2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxp
emVUaHJlYWRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAKaW5kZXggYmU2YjZmMS4uN2M4NWExMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKKyNpbmNsdWRl
ICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogI2luY2x1ZGUgIldyaXRl
QmFycmllci5oIgogI2luY2x1ZGUgPG11dGV4PgpAQCAtNTgsNiArNTksOSBAQCB2b2lkIGluaXRp
YWxpemVUaHJlYWRpbmcoKQogICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVUaHJlYWRpbmdP
bmNlRmxhZywgW117CiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgICAg
ICBPcHRpb25zOjppbml0aWFsaXplKCk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAg
ICBXYXNtOjpNZW1vcnk6OmluaXRpYWxpemVQcmVhbGxvY2F0aW9ucygpOworI2VuZGlmCiAjaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgICAgICBXcml0ZUJhcnJpZXJDb3Vu
dGVyczo6aW5pdGlhbGl6ZSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCmluZGV4IDNiZjcyMTMuLjBkNzRmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC01OSw2ICs1OSwxNSBAQCBib29sIHJlc3RyaWN0
ZWRPcHRpb25zRW5hYmxlZCA9IGZhbHNlOwogI2Vsc2UKIGJvb2wgcmVzdHJpY3RlZE9wdGlvbnNF
bmFibGVkID0gdHJ1ZTsKICNlbmRpZgorCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNJT1MoKQorewor
I2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCit9CiB9CiAKIHZvaWQgT3B0aW9uczo6ZW5hYmxlUmVzdHJpY3RlZE9wdGlv
bnMoYm9vbCBlbmFibGVPck5vdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAppbmRleCA2Mzc2YjBlLi4wNmQwZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCkBAIC00MzYsOSArNDM2LDExIEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9u
U3RyaW5nOwogICAgIHYoc2l6ZSwgd2ViQXNzZW1ibHlQYXJ0aWFsQ29tcGlsZUxpbWl0LCA1MDAw
LCBOb3JtYWwsICJMaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGEgV2FzbTo6UGxhbjo6Y29t
cGlsZSBzaG91bGQgYXR0ZW1wdCBiZWZvcmUgY2hlY2tpbmcgZm9yIG90aGVyIHdvcmsuIikgXAog
ICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5QjNPcHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6
ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBX
ZWIgQXNzZW1ibHkgbW9kdWxlcy4iKSBcCiAgICAgXAotICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJB
c3NlbWJseUxvd01lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2Jq
ZWN0IHdvbid0IG1tYXAgdGhlIGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwg
YWxsb2NhdGUgdGhlIG1pbmltdW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKLSAgICB2KGJvb2wsIHVz
ZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0
cnkgdG8gdXNlIGEgMzItYml0IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRv
IGJvdW5kcyBjaGVjayB3YXNtIG1lbW9yeS4iKSBcCisgICAgLyogRklYTUU6IGVuYWJsZSBmYXN0
IG1lbW9yaWVzIG9uIGlPUyBhbmQgcHJlLWFsbG9jYXRlIHRoZW0uIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NzQgKi8gXAorICAgIHYoYm9vbCwgdXNlV2ViQXNz
ZW1ibHlGYXN0TWVtb3J5LCAhaXNJT1MoKSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkg
dG8gdXNlIGEgMzItYml0IGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHNpZ25hbCBoYW5kbGVyIHRvIGJv
dW5kcyBjaGVjayB3YXNtIG1lbW9yeS4iKSBcCisgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlG
YXN0TWVtb3J5UmVkem9uZVBhZ2VzLCAxMjgsIE5vcm1hbCwgIldlYkFzc2VtYmx5IGZhc3QgbWVt
b3JpZXMgdXNlIDRHaUIgdmlydHVhbCBhbGxvY2F0aW9ucywgcGx1cyBhIHJlZHpvbmUgKGNvdW50
ZWQgYXMgbXVsdGlwbGUgb2YgNjRLaUIgV2ViQXNzZW1ibHkgcGFnZXMpIGF0IHRoZSBlbmQgdG8g
Y2F0Y2ggcmVnK2ltbSBhY2Nlc3NlcyB3aGljaCBleGNlZWQgMzItYml0LCBhbnl0aGluZyBiZXlv
bmQgdGhlIHJlZHpvbmUgaXMgZXhwbGljaXRseSBib3VuZHMtY2hlY2tlZCIpIFwKICAgICB2KGJv
b2wsIGNyYXNoSWZXZWJBc3NlbWJseUNhbnRGYXN0TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYg
dHJ1ZSwgd2Ugd2lsbCBjcmFzaCBpZiB3ZSBjYW4ndCBvYnRhaW4gZmFzdCBtZW1vcnkgZm9yIHdh
c20uIikgXAorICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVByZWFsbG9jYXRl
Q291bnQsIDAsIE5vcm1hbCwgIldlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgY2FuIGJlIHByZS1h
bGxvY2F0ZWQgYXQgcHJvZ3JhbSBzdGFydHVwIGFuZCByZW1haW4gY2FjaGVkIHRvIGF2b2lkIGZy
YWdtZW50YXRpb24gbGVhZGluZyB0byBib3VuZHMtY2hlY2tlZCBtZW1vcnkuIFRoaXMgbnVtYmVy
IGlzIGFuIHVwcGVyIGJvdW5kIG9uIGluaXRpYWwgYWxsb2NhdGlvbiBhcyB3ZWxsIGFzIHRvdGFs
IGNvdW50IG9mIGZhc3QgbWVtb3JpZXMuIFplcm8gbWVhbnMgbm8gcHJlLWFsbG9jYXRpb24sIG5v
IGNhY2hpbmcsIGFuZCBubyBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIHJ1bnRpbWUgYWxsb2NhdGlv
bnMuIikgXAogICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0VExTLCB0cnVlLCBOb3JtYWws
ICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJlYWQtbG9jYWwgc3RvcmFnZSBp
ZiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikKIAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggNWFjODYzOS4u
YzgzZDM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcApAQCAtMjM2LDYgKzIzNiw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVtaXRD
aGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCk7CiAKKyAgICB2b2lkIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVz
c2lvblR5cGUmLCB1aW50MzJfdCYpOworCiAgICAgVmFsdWUqIG1hdGVyaWFsaXplV2FzbUNvbnRl
eHQoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOwogICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0
KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVzdG9yZVdlYkFz
c2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFu
Y2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKQEAgLTI1Nyw2ICsyNTksMTUgQEAgcHJpdmF0
ZToKICAgICBWYWx1ZSogbV9pbnN0YW5jZVZhbHVlOyAvLyBGSVhNRTogbWFrZSB0aGlzIGxhenkg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTc5MgogfTsKIAorLy8g
TWVtb3J5IGFjY2Vzc2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNl
dHMsIHdoZXJlYXMgdGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK3ZvaWQg
QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRy
LCB1aW50MzJfdCYgb2Zmc2V0KQoreworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zm
c2V0KSA+IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKSkpIHsKKyAgICAgICAgcHRyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBwdHIsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBvZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0
ID0gMDsKKyAgICB9Cit9CisKIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjptYXRlcmlhbGl6ZVdhc21D
b250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgaWYgKHVz
ZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKQEAgLTM0MCw3ICszNTEsMTYgQEAgQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUKICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdh
c21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlu
bmVkR1BSLCB1bnNpZ25lZCkgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5u
ZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgc3dpdGNo
IChtX21vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6
CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQ
UiA9PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChw
aW5uZWRHUFIsIEludmFsaWRHUFJSZWcgPT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91
dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNTI2LDEwICs1
NDYsMjAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJUkdlbmVy
YXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
dWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJU
KG1fbWVtb3J5QmFzZUdQUik7Ci0gICAgaWYgKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZykgeworICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpC
b3VuZHNDaGVja2luZzoKKyAgICAgICAgLy8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGlu
ZyBhdCBhbGwsIHdlIG11c3QgdGhlcmVmb3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBl
eGNlZWRzIHRoZSBjdXJyZW50IG1lbW9yeSBzaXplLgogICAgICAgICBBU1NFUlQobV9tZW1vcnlT
aXplR1BSKTsKICAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNl
dCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6ZU9mT3Bl
cmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5
U2l6ZUdQUiwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSwgbV9pbmZvLm1lbW9yeS5tYXhp
bXVtKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoK
KyAgICAgICAgLy8gV2UndmUgdmlydHVhbGx5IG1hcHBlZCA0R2lCK3JlZHpvbmUgZm8gdGhpcyBt
ZW1vcnkuIE9ubHkgdGhlIHVzZXItYWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJsZSwgY29u
dGlndW91c2x5IGluIHJhbmdlIFswLCBjdXJyZW50XSwgYW5kIGV2ZXJ5dGhpbmcgYWJvdmUgaXMg
bWFwcGVkIFBST1RfTk9ORS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBleHBsaWNpdCBi
b3VuZHMgY2hlY2sgaW4gdGhlIDRHaUIgcmFuZ2UgYmVjYXVzZSBXZWJBc3NlbWJseSByZWdpc3Rl
ciBtZW1vcnkgYWNjZXNzZXMgYXJlIDMyLWJpdC4gSG93ZXZlciBXZWJBc3NlbWJseSByZWdpc3Rl
citpbW1lZGlhdGUgYWNjZXNzZXMgcGVyZm9ybSB0aGUgYWRkaXRpb24gaW4gNjQtYml0IHdoaWNo
IGNhbiBwdXNoIGFuIGFjY2VzcyBhYm92ZSB0aGUgMzItYml0IGxpbWl0LiBUaGUgcmVkem9uZSB3
aWxsIGNhdGNoIG1vc3Qgc21hbGwgaW1tZWRpYXRlcywgYW5kIHdlJ2xsIGV4cGxpY2l0bHkgYm91
bmRzIGNoZWNrIGFueSByZWdpc3RlciArIGxhcmdlIGltbWVkaWF0ZSBhY2Nlc3MuCisgICAgICAg
IGlmIChvZmZzZXQgPj0gTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkpCisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBwb2ludGVyLCBJbnZhbGlkR1BSUmVnLCBzaXplT2ZPcGVyYXRpb24gKyBv
ZmZzZXQgLSAxLCBtX2luZm8ubWVtb3J5Lm1heGltdW0oKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgcG9pbnRlciA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgcG9pbnRlcik7CiAg
ICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUFkZHJlc3NWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlCYXNlR1BSKTsKQEAgLTU2OSw2ICs1OTks
OCBAQCBpbmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2Rl
IG1lbW9yeU9wKQogCiBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9h
ZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KQogewor
ICAgIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgb2Zmc2V0KTsKKwogICAgIHN3aXRj
aCAob3ApIHsKICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzogewogICAgICAgICByZXR1
cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlL
aW5kKExvYWQ4UyksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwpAQCAtNzA2LDYgKzczOCw4
IEBAIGlubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBlIG9wKQogCiBpbmxp
bmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkK
IHsKKyAgICBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIG9mZnNldCk7CisKICAgICBz
d2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgogICAgICAgICB2
YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9y
aWdpbigpLCB2YWx1ZSk7CkBAIC0xMjYxLDYgKzEyOTUsMTIgQEAgc3RhdGljIHZvaWQgY3JlYXRl
SlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBX
YXNtSW4KIAogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBv
aW50Q2FsbCA9IGppdC5jYWxsKCk7CiAKKyAgICBpZiAoISFpbmZvLm1lbW9yeSkgeworICAgICAg
ICAvLyBSZXNldHRpbmcgdGhlIHJlZ2lzdGVyIHByZXZlbnRzIHRoZSBHQyBmcm9tIG1pc3Rha2Vu
bHkgdGhpbmtpbmcgdGhhdCB0aGUgY29udGV4dCBpcyBzdGlsbCBsaXZlLgorICAgICAgICBHUFJS
ZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBiYXNlTWVtb3J5KTsKKyAgICB9
CisKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0
ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3By
KCk7CiAgICAgICAgIEFTU0VSVChyZWcgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmNwcAppbmRleCA1OGJmOGEyLi44OTgxMDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApAQCAtNzAsMTUgKzcwLDcg
QEAgc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZv
LCB2b2lkKiB1Y29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgdm9pZCogZmF1bHRpbmdB
ZGRyZXNzID0gc2lnSW5mby0+c2lfYWRkcjsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJjaGVja2luZyBmYXVsdGluZyBhZGRyZXNzOiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nQWRk
cmVzcyksICIgaXMgaW4gYW4gYWN0aXZlIGZhc3QgbWVtb3J5Iik7Ci0gICAgICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtZW1vcnlMb2NrKTsKLSAgICAgICAgICAgIGF1dG8mIGFjdGl2ZUZhc3RN
ZW1vcmllcyA9IHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKTsKLSAgICAgICAgICAgIGZv
ciAodm9pZCogYWN0aXZlTWVtb3J5IDogYWN0aXZlRmFzdE1lbW9yaWVzKSB7Ci0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImNoZWNraW5nIGZhc3QgbWVtb3J5IGF0OiAiLCBS
YXdQb2ludGVyKGFjdGl2ZU1lbW9yeSkpOwotICAgICAgICAgICAgICAgIGlmIChhY3RpdmVNZW1v
cnkgPD0gZmF1bHRpbmdBZGRyZXNzICYmIGZhdWx0aW5nQWRkcmVzcyA8IHN0YXRpY19jYXN0PGNo
YXIqPihhY3RpdmVNZW1vcnkpICsgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBmYXVsdGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gV2FzbTo6TWVtb3J5OjphZGRyZXNzSXNJ
bkFjdGl2ZUZhc3RNZW1vcnkoZmF1bHRpbmdBZGRyZXNzKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoZmF1bHRlZEluQWN0aXZlRmFzdE1lbW9yeSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgImZvdW5kIGFjdGl2ZSBmYXN0IG1lbW9yeSBmb3IgZmF1bHRpbmcgYWRkcmVzcyIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCA3ZWYzZDRm
Li45ZThkNmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApA
QCAtMjksMTQ5ICsyOSwyOTcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRl
ICJWTS5oIgotI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKICNpbmNsdWRlICJX
YXNtVGh1bmtzLmgiCiAKLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8YXRv
bWljPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL1ZNVGFncy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCisvLyBG
SVhNRTogV2UgY291bGQgYmUgc21hcnRlciBhYm91dCBtZW1zZXQgLyBtbWFwIC8gbWFkdmlzZS4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM0MworLy8gRklYTUU6
IEdpdmUgdXAgc29tZSBvZiB0aGUgY2FjaGVkIGZhc3QgbWVtb3JpZXMgaWYgdGhlIEdDIGRldGVy
bWluZXMgaXQncyBlYXN5IHRvIGdldCB0aGVtIGJhY2ssIGFuZCB0aGV5IGhhdmVuJ3QgYmVlbiB1
c2VkIGluIGEgd2hpbGUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzA3NzMKKy8vIEZJWE1FOiBMaW1pdCBzbG93IG1lbW9yeSBzaXplLiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwODI1CisKIG5hbWVzcGFjZSB7Ci1jb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKK2NvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworTkVW
RVJfSU5MSU5FIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3ZWJBc3NlbWJseUNvdWxkbnRH
ZXRGYXN0TWVtb3J5KCkgeyBDUkFTSCgpOyB9CitORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRudFVubWFwTWVtb3J5Qnl0ZXMoKSB7IENSQVNI
KCk7IH0KK05FVkVSX0lOTElORSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgd2ViQXNzZW1i
bHlDb3VsZG50VW5wcm90ZWN0TWVtb3J5KCkgeyBDUkFTSCgpOyB9CisKK3ZvaWQqIG1tYXBCeXRl
cyhzaXplX3QgYnl0ZXMpCit7CisjaWYgT1MoREFSV0lOKQorICAgIGludCBmZCA9IFZNX1RBR19G
T1JfV0VCQVNTRU1CTFlfTUVNT1JZOworI2Vsc2UKKyAgICBpbnQgZmQgPSAtMTsKKyNlbmRpZgor
CisgICAgdm9pZCogbG9jYXRpb24gPSBtbWFwKG51bGxwdHIsIGJ5dGVzLCBQUk9UX05PTkUsIE1B
UF9QUklWQVRFIHwgTUFQX0FOT04sIGZkLCAwKTsKKyAgICByZXR1cm4gbG9jYXRpb24gPT0gTUFQ
X0ZBSUxFRCA/IG51bGxwdHIgOiBsb2NhdGlvbjsKIH0KIAotc3RhdGljIE5FVkVSX0lOTElORSBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9y
eSgpCit2b2lkIG11bm1hcEJ5dGVzKHZvaWQqIG1lbW9yeSwgc2l6ZV90IHNpemUpCiB7Ci0gICAg
Q1JBU0goKTsKKyAgICBpZiAoVU5MSUtFTFkobXVubWFwKG1lbW9yeSwgc2l6ZSkpKQorICAgICAg
ICB3ZWJBc3NlbWJseUNvdWxkbnRVbm1hcE1lbW9yeUJ5dGVzKCk7CiB9CiAKLWlubGluZSBib29s
IG1tYXBCeXRlcyhzaXplX3QgYnl0ZXMsIHZvaWQqJiBtZW1vcnkpCit2b2lkIHplcm9BbmRVbnBy
b3RlY3RCeXRlcyh2b2lkKiBzdGFydCwgc2l6ZV90IGJ5dGVzKQogewotICAgIGRhdGFMb2dJZih2
ZXJib3NlLCAiQXR0ZW1wdGluZyB0byBtbWFwICIsIGJ5dGVzLCAiIGJ5dGVzOiAiKTsKLSAgICAv
LyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVt
b3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0gICAg
dm9pZCogcmVzdWx0ID0gbW1hcChudWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFU
RSB8IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0g
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChieXRlcykgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiWmVy
b2luZyBhbmQgdW5wcm90ZWN0aW5nICIsIGJ5dGVzLCAiIGZyb20gIiwgUmF3UG9pbnRlcihzdGFy
dCkpOworICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYmUgc21hcnRlciBhYm91dCBtZW1zZXQg
LyBtbWFwIC8gbWFkdmlzZS4gSGVyZSwgd2UgbWF5IG5vdCBuZWVkIHRvIGFjdCBzeW5jaHJvbm91
c2x5LCBvciBtYXliZSB3ZSBjYW4gbWVtc2V0K3VucHJvdGVjdCBzbWFsbGVyIHJhbmdlcyBvZiBt
ZW1vcnkgKHdoaWNoIHdvdWxkIHBheSBvZmYgaWYgbm90IGFsbCB0aGUgd3JpdGFibGUgbWVtb3J5
IHdhcyBhY3R1YWxseSBwaHlzaWNhbGx5IGJhY2tlZDogbWVtc2V0IGZvcmNlcyBwaHlzaWNhbCBi
YWNraW5nIG9ubHkgdG8gdW5wcm90ZWN0IGl0IHJpZ2h0IGFmdGVyKS4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM0MworICAgICAgICBtZW1zZXQoc3RhcnQsIDAs
IGJ5dGVzKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1wcm90ZWN0KHN0YXJ0LCBieXRlcywgUFJP
VF9OT05FKSkpCisgICAgICAgICAgICB3ZWJBc3NlbWJseUNvdWxkbnRVbnByb3RlY3RNZW1vcnko
KTsKICAgICB9Ci0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN1Y2NlZWRlZCIpOwotICAgIG1l
bW9yeSA9IHJlc3VsdDsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgY2hhciogbWFrZVN0
cmluZyhNZW1vcnlNb2RlIG1vZGUpCisvLyBBbGxvY2F0ZSBmYXN0IG1lbW9yaWVzIHZlcnkgZWFy
bHkgYXQgcHJvZ3JhbSBzdGFydHVwIGFuZCBjYWNoZSB0aGVtLiBUaGUgZmFzdCBtZW1vcmllcyB1
c2Ugc2lnbmlmaWNhbnQgYW1vdW50cyBvZiB2aXJ0dWFsIHVuY29tbWl0dGVkIGFkZHJlc3Mgc3Bh
Y2UsIHJlZHVjaW5nIHRoZSBsaWtlbGlob29kIHRoYXQgd2UnbGwgb2J0YWluIGFueSBpZiB3ZSB3
YWl0IHRvIGFsbG9jYXRlIHRoZW0uCisvLyBXZSBzdGlsbCB0cnkgdG8gYWxsb2NhdGUgZmFzdCBt
ZW1vcmllcyBhdCBydW50aW1lLCBhbmQgd2lsbCBjYWNoZSB0aGVtIHdoZW4gcmVsaW5xdWlzaGVk
IHVwIHRvIHRoZSBwcmVhbGxvY2F0aW9uIGxpbWl0LgorLy8gTm90ZSB0aGF0IHRoaXMgc3RhdGUg
aXMgcGVyLXByb2Nlc3MsIG5vdCBwZXItVk0uCisvLyBXZSB1c2Ugc2ltcGxlIHN0YXRpYyBnbG9i
YWxzIHdoaWNoIGRvbid0IGFsbG9jYXRlIHRvIGF2b2lkIGVhcmx5IGZyYWdtZW50YXRpb24gYW5k
IHRvIGtlZXAgbWFuYWdlbWVudCB0byB0aGUgYmFyZSBtaW5pbXVtLiBXZSBhdm9pZCBsb2NraW5n
IGJlY2F1c2UgZmFzdCBtZW1vcmllcyB1c2Ugc2VnZmF1bHQgc2lnbmFsIGhhbmRsaW5nIHRvIGhh
bmRsZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGlzIHJlcXVpcmVzIGlkZW50aWZ5aW5nIGlm
IHRoZSBmYXVsdGluZyBhZGRyZXNzIGlzIGluIGEgZmFzdCBtZW1vcnkgcmFuZ2UsIHdoaWNoIHNo
b3VsZCBhdm9pZCBhY3F1aXJpbmcgYSBsb2NrIGxlc3QgdGhlIGFjdHVhbCBzaWduYWwgd2FzIGNh
dXNlZCBieSB0aGlzIHZlcnkgY29kZSB3aGlsZSBpdCBhbHJlYWR5IGhlbGQgdGhlIGxvY2suCisv
LyBTcGVlZCBhbmQgY29udGVudGlvbiBkb24ndCByZWFsbHkgbWF0dGVyIGhlcmUsIGJ1dCBzaW1w
bGljaXR5IGRvZXMuIFdlIHRoZXJlZm9yZSB1c2Ugc3RyYWlnaHRmb3J3YXJkIEZJRk9zIGZvciBv
dXIgY2FjaGUsIGFuZCBsaW5lYXIgdHJhdmVyc2FsIGZvciB0aGUgbGlzdCBvZiBjdXJyZW50bHkg
YWN0aXZlIGZhc3QgbWVtb3JpZXMuCitjb25zdGV4cHIgc2l6ZV90IGZhc3RNZW1vcnlDYWNoZUhh
cmRMaW1pdCB7IDE2IH07Citjb25zdGV4cHIgc2l6ZV90IGZhc3RNZW1vcnlBbGxvY2F0aW9uU29m
dExpbWl0IHsgMzIgfTsgLy8gUHJldmVudHMgZmlsbGluZyB1cCB0aGUgdmlydHVhbCBhZGRyZXNz
IHNwYWNlLgorc3RhdGljX2Fzc2VydChmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1pdCA+PSBm
YXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQsICJUaGUgY2FjaGUgc2hvdWxkbid0IGJlIGJpZ2dlciB0
aGFuIHRoZSB0b3RhbCBudW1iZXIgd2UnbGwgZXZlciBhbGxvY2F0ZSIpOworc2l6ZV90IGZhc3RN
ZW1vcnlQcmVhbGxvY2F0ZUNvdW50IHsgMCB9Oworc3RkOjphdG9taWM8dm9pZCo+IGZhc3RNZW1v
cnlDYWNoZVtmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXRdID0geyBBVE9NSUNfVkFSX0lOSVQobnVs
bHB0cikgfTsKK3N0ZDo6YXRvbWljPHZvaWQqPiBjdXJyZW50bHlBY3RpdmVGYXN0TWVtb3JpZXNb
ZmFzdE1lbW9yeUFsbG9jYXRpb25Tb2Z0TGltaXRdID0geyBBVE9NSUNfVkFSX0lOSVQobnVsbHB0
cikgfTsKK3N0ZDo6YXRvbWljPHNpemVfdD4gY3VycmVudGx5QWxsb2NhdGVkRmFzdE1lbW9yaWVz
ID0gQVRPTUlDX1ZBUl9JTklUKDApOworc3RkOjphdG9taWM8c2l6ZV90PiBvYnNlcnZlZE1heGlt
dW1GYXN0TWVtb3J5ID0gQVRPTUlDX1ZBUl9JTklUKDApOworCit2b2lkKiB0cnlHZXRDYWNoZWRG
YXN0TWVtb3J5KCkKIHsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKLSAgICBjYXNlIE1lbW9y
eU1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOwotICAgIGNhc2UgTWVtb3J5TW9k
ZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczogYnJlYWs7CisgICAgZm9yICh1bnNpZ25lZCBpZHggPSAw
OyBpZHggPCBmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudDsgKytpZHgpIHsKKyAgICAgICAgaWYg
KHZvaWQqIHByZXZpb3VzID0gZmFzdE1lbW9yeUNhY2hlW2lkeF0uZXhjaGFuZ2UobnVsbHB0ciwg
c3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCkpCisgICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7
CiAgICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIi
OworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4RmFz
dE1lbW9yaWVzID0gNDsKLXN0YXRpYyB1bnNpZ25lZCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgeyAw
IH07Ci1TdGF0aWNMb2NrIG1lbW9yeUxvY2s7Ci1pbmxpbmUgRGVxdWU8dm9pZCosIG1heEZhc3RN
ZW1vcmllcz4mIGF2YWlsYWJsZUZhc3RNZW1vcmllcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCiti
b29sIHRyeUFkZFRvQ2FjaGVkRmFzdE1lbW9yeSh2b2lkKiBtZW1vcnkpCiB7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPERlcXVlPHZvaWQqLCBtYXhGYXN0TWVtb3JpZXM+PiBhdmFpbGFibGVG
YXN0TWVtb3JpZXM7Ci0gICAgcmV0dXJuIGF2YWlsYWJsZUZhc3RNZW1vcmllczsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQ7ICsraSkgewor
ICAgICAgICB2b2lkKiBleHBlY3RlZCA9IG51bGxwdHI7CisgICAgICAgIGlmIChmYXN0TWVtb3J5
Q2FjaGVbaV0uY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhwZWN0ZWQsIG1lbW9yeSwgc3RkOjpt
ZW1vcnlfb3JkZXJfYWNxX3JlbCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJDYWNoZWQgZmFzdCBtZW1vcnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAot
aW5saW5lIEhhc2hTZXQ8dm9pZCo+JiBhY3RpdmVGYXN0TWVtb3JpZXMoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQorYm9vbCB0cnlBZGRUb0N1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllcyh2b2lkKiBt
ZW1vcnkpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8dm9pZCo+PiBhY3Rp
dmVGYXN0TWVtb3JpZXM7Ci0gICAgcmV0dXJuIGFjdGl2ZUZhc3RNZW1vcmllczsKKyAgICBmb3Ig
KHNpemVfdCBpZHggPSAwOyBpZHggPCBmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1pdDsgKytp
ZHgpIHsKKyAgICAgICAgdm9pZCogZXhwZWN0ZWQgPSBudWxscHRyOworICAgICAgICBpZiAoY3Vy
cmVudGx5QWN0aXZlRmFzdE1lbW9yaWVzW2lkeF0uY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhw
ZWN0ZWQsIG1lbW9yeSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1jb25zdCBIYXNoU2V0
PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmllcyhjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyKQordm9pZCByZW1vdmVGcm9tQ3VycmVudGx5QWN0aXZlRmFzdE1lbW9yaWVzKHZvaWQqIG1l
bW9yeSkKIHsKLSAgICByZXR1cm4gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcik7CisgICAgZm9y
IChzaXplX3QgaWR4ID0gMDsgaWR4IDwgZmFzdE1lbW9yeUFsbG9jYXRpb25Tb2Z0TGltaXQ7ICsr
aWR4KSB7CisgICAgICAgIHZvaWQqIGV4cGVjdGVkID0gbWVtb3J5OworICAgICAgICBpZiAoY3Vy
cmVudGx5QWN0aXZlRmFzdE1lbW9yaWVzW2lkeF0uY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhw
ZWN0ZWQsIG51bGxwdHIsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1p
bmxpbmUgYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwgdm9pZComIG1lbW9yeSwgc2l6ZV90
JiBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSYgbW9kZSkKK3ZvaWQqIHRyeUdldEZhc3RNZW1v
cnkoVk0mIHZtKQogewotICAgIGF1dG8gZGVxdWVGYXN0TWVtb3J5ID0gWyZdICgpIC0+IGJvb2wg
ewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgcmV0dXJuIHRoZXNlIHRv
IHRoZSBPUyBpZiB3ZSBnbyBzb21lIG51bWJlciBvZiBHQ3MKLSAgICAgICAgLy8gd2l0aG91dCB1
c2luZyB0aGVtLgotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtZW1vcnlMb2NrKTsKLSAgICAg
ICAgaWYgKCFhdmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2VyKS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIG1lbW9yeSA9IGF2YWlsYWJsZUZhc3RNZW1vcmllcyhsb2NrZXIpLnRha2VGaXJzdCgp
OwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKS5h
ZGQobWVtb3J5KTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNO
ZXdFbnRyeSk7Ci0gICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBwZWRC
eXRlczsKLSAgICAgICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOworCisgICAgaWYg
KExJS0VMWShPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKSkpIHsKKyAgICAgICAg
bWVtb3J5ID0gdHJ5R2V0Q2FjaGVkRmFzdE1lbW9yeSgpOworICAgICAgICBpZiAobWVtb3J5KQor
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgcmUtdXNp
bmcgIiwgUmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAv
LyBObyBtZW1vcnkgd2FzIGF2YWlsYWJsZSBpbiB0aGUgY2FjaGUuIE1heWJlIHdhaXRpbmcgb24g
R0Mgd2lsbCBmaW5kIGEgZnJlZSBvbmUuCisgICAgICAgICAgICAvLyBGSVhNRSBjb2xsZWN0U3lu
YyhGdWxsKSBhbmQgY3VzdG9tIGVhZ2VyIGRlc3RydWN0aW9uIG9mIHdhc20gbWVtb3JpZXMgY291
bGQgYmUgYmV0dGVyLiBGb3Igbm93IHVzZSBjb2xsZWN0QWxsR2FyYmFnZS4gQWxzbywgbm90aGlu
ZyB0ZWxscyB1cyB0aGUgY3VycmVudCBWTSBpcyBob2xkaW5nIG9udG8gZmFzdCBtZW1vcmllcy4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc0OAorICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgd2FpdGluZyBvbiBHQyBh
bmQgcmV0cnlpbmciKTsKKyAgICAgICAgICAgIHZtLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsK
KyAgICAgICAgICAgIG1lbW9yeSA9IHRyeUdldENhY2hlZEZhc3RNZW1vcnkoKTsKKyAgICAgICAg
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRGYXN0TWVtb3J5IHdhaXRlZCBvbiBHQyBh
bmQgcmV0cmllZCAiLCBtZW1vcnk/ICJzdWNjZXNzZnVsbHkiIDogInVuc2VjY2Vzc2Z1bGx5Iik7
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07CiAKLSAgICBhdXRvIGZh
aWwgPSBbXSAoKSAtPiBib29sIHsKKyAgICAgICAgLy8gVGhlIHNvZnQgbGltaXQgaXMgaW5oZXJl
bnRseSByYWN5IGJlY2F1c2UgY2hlY2tpbmcrYWxsb2NhdGlvbiBpc24ndCBhdG9taWMuIEV4Y2Vl
ZGluZyBpdCBzbGlnaHRseSBpcyBmaW5lLgorICAgICAgICBib29sIGF0QWxsb2NhdGlvblNvZnRM
aW1pdCA9IGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcy5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcXVpcmUpID49IGZhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0OworICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlICYmIGF0QWxsb2NhdGlvblNvZnRMaW1pdCwgInRyeUdldEZhc3RN
ZW1vcnkgcmVhY2hlZCBhbGxvY2F0aW9uIHNvZnQgbGltaXQgb2YgIiwgZmFzdE1lbW9yeUFsbG9j
YXRpb25Tb2Z0TGltaXQpOworCisgICAgICAgIGlmICghbWVtb3J5ICYmICFhdEFsbG9jYXRpb25T
b2Z0TGltaXQpIHsKKyAgICAgICAgICAgIG1lbW9yeSA9IG1tYXBCeXRlcyhNZW1vcnk6OmZhc3RN
YXBwZWRCeXRlcygpKTsKKyAgICAgICAgICAgIGlmIChtZW1vcnkpIHsKKyAgICAgICAgICAgICAg
ICBzaXplX3QgY3VycmVudGx5QWxsb2NhdGVkID0gMSArIGN1cnJlbnRseUFsbG9jYXRlZEZhc3RN
ZW1vcmllcy5mZXRjaF9hZGQoMSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisgICAgICAg
ICAgICAgICAgc2l6ZV90IGN1cnJlbnRseU9ic2VydmVkTWF4aW11bSA9IG9ic2VydmVkTWF4aW11
bUZhc3RNZW1vcnkubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudGx5QWxsb2NhdGVkID4gY3VycmVudGx5T2JzZXJ2ZWRNYXhpbXVtKSB7
CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBleHBlY3RlZCA9IGN1cnJlbnRseU9ic2VydmVk
TWF4aW11bTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JzZXJ2ZWRNYXhp
bXVtRmFzdE1lbW9yeS5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhleHBlY3RlZCwgY3VycmVudGx5
QWxsb2NhdGVkLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAidHJ5R2V0RmFzdE1lbW9yeSBjdXJyZW50bHkgb2JzZXJ2ZWQgbWF4aW11bSBpcyBub3cg
IiwgY3VycmVudGx5QWxsb2NhdGVkKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgbG9zdCB0aGUgdXBkYXRlIHJhY2UsIGJ1dCB0aGUgY291
bnRlciBpcyBtb25vdG9uaWMgc28gdGhlIHdpbm5lciBtdXN0IGhhdmUgdXBkYXRlZCB0aGUgdmFs
dWUgdG8gd2hhdCB3ZSB3ZXJlIGdvaW5nIHRvIHVwZGF0ZSBpdCB0bywgb3IgbXVsdGlwbGUgd2lu
bmVycyBkaWQgc28uCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZXhwZWN0ZWQgPj0g
Y3VycmVudGx5QWxsb2NhdGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgYWxsb2NhdGVkICIsIFJhd1Bv
aW50ZXIobWVtb3J5KSwgIiwgY3VycmVudGx5IGFsbG9jYXRlZCBpcyAiLCBjdXJyZW50bHlBbGxv
Y2F0ZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1lbW9y
eSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXRyeUFkZFRvQ3VycmVudGx5QWN0aXZlRmFzdE1l
bW9yaWVzKG1lbW9yeSkpKSB7CisgICAgICAgICAgICAvLyBXZSBnb3QgYSBtZW1vcnksIGJ1dCBy
ZWFjaGVkIHRoZSBhbGxvY2F0aW9uIHNvZnQgbGltaXQgKmFuZCogYWxsIG9mIHRoZSBhbGxvY2F0
ZWQgbWVtb3JpZXMgYXJlIGFjdGl2ZSwgbm9uZSBhcmUgY2FjaGVkLiBUaGF0J3MgYSBidW1tZXIs
IHdlIGhhdmUgdG8gZ2V0IHJpZCBvZiBvdXIgbWVtb3J5LiBXZSBjYW4ndCBqdXN0IGhvbGQgb24g
dG8gaXQgYmVjYXVzZSB0aGUgbGlzdCBvZiBhY3RpdmUgZmFzdCBtZW1vcmllcyBtdXN0IGJlIHBy
ZWNpc2UuCisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5R2V0RmFzdE1lbW9y
eSBmb3VuZCBhIGZhc3QgbWVtb3J5IGJ1dCBoYWQgdG8gZ2l2ZSBpdCB1cCIpOworICAgICAgICAg
ICAgbXVubWFwQnl0ZXMobWVtb3J5LCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcy5mZXRjaF9zdWIoMSwgc3RkOjpt
ZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisgICAgICAgICAgICBtZW1vcnkgPSBudWxscHRyOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFtZW1vcnkpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgY291bGRuJ3QgcmUtdXNlIG9yIGFsbG9jYXRlIGEg
ZmFzdCBtZW1vcnkiKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmNyYXNoSWZXZWJB
c3NlbWJseUNhbnRGYXN0TWVtb3J5KCkpKQogICAgICAgICAgICAgd2ViQXNzZW1ibHlDb3VsZG50
R2V0RmFzdE1lbW9yeSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKKyAgICB9CiAK
LSAgICAvLyBXZSBtaWdodCBHQyBoZXJlIHNvIHdlIHNob3VsZCBiZSBob2xkaW5nIHRoZSBBUEkg
bG9jay4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3luY3Jvbm91c2x5IHRy
aWdnZXIgdGhlIEdDIGZyb20gYW5vdGhlciB0aHJlYWQuCi0gICAgQVNTRVJUKHZtLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGlmIChVTkxJS0VMWSghZmFzdE1lbW9yeUVu
YWJsZWQoKSkpCi0gICAgICAgIHJldHVybiBmYWlsKCk7CisgICAgcmV0dXJuIG1lbW9yeTsKK30K
IAotICAgIC8vIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5u
aW5nIGNvZGUuCi0gICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhy
b3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCi0gICAgICAgIHJldHVybiBmYWls
KCk7Cit2b2lkKiB0cnlHZXRTbG93TWVtb3J5KHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiBt
ZW1vcnkgPSBtbWFwQnl0ZXMoYnl0ZXMpOworICAgIGRhdGFMb2dMbklmKG1lbW9yeSAmJiB2ZXJi
b3NlLCAiT2J0YWluZWQgc2xvdyBtZW1vcnkgIiwgUmF3UG9pbnRlcihtZW1vcnkpLCAiIHdpdGgg
Y2FwYWNpdHkgIiwgYnl0ZXMpOworICAgIGRhdGFMb2dMbklmKCFtZW1vcnkgJiYgdmVyYm9zZSwg
IkZhaWxlZCBvYnRhaW5pbmcgc2xvdyBtZW1vcnkgd2l0aCBjYXBhY2l0eSAiLCBieXRlcyk7Cisg
ICAgcmV0dXJuIG1lbW9yeTsKK30KIAotICAgIEFTU0VSVChhbGxvY2F0ZWRGYXN0TWVtb3JpZXMg
PD0gbWF4RmFzdE1lbW9yaWVzKTsKLSAgICBpZiAoZGVxdWVGYXN0TWVtb3J5KCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwordm9pZCByZWxpbnF1aXNoTWVtb3J5KHZvaWQqIG1lbW9yeSwgc2l6ZV90
IHdyaXRhYmxlU2l6ZSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUpCit7
CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5
KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXBwZWRDYXBhY2l0eSA9PSBNZW1vcnk6OmZh
c3RNYXBwZWRCeXRlcygpKTsKIAotICAgIC8vIElmIHdlIGhhdmUgYWxsb2NhdGVkIGFsbCB0aGUg
ZmFzdCBtZW1vcmllcy4uLiB0b28gYmFkLgotICAgIGlmIChhbGxvY2F0ZWRGYXN0TWVtb3JpZXMg
PT0gbWF4RmFzdE1lbW9yaWVzKSB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIGEgcmVhc29uYWJsZSBj
aGFuY2UgdGhhdCBhbm90aGVyIG1vZHVsZSBoYXMgZGllZCBidXQgaGFzIG5vdCBiZWVuIGNvbGxl
Y3RlZCB5ZXQuIERvbid0IGxvc2UgaG9wZSB5ZXQhCi0gICAgICAgIHZtLmhlYXAuY29sbGVjdEFs
bEdhcmJhZ2UoKTsKLSAgICAgICAgaWYgKGRlcXVlRmFzdE1lbW9yeSgpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWlsKCk7CisgICAgICAgIC8vIFRoaXMgbWVt
b3J5IGNhbm5vdCBjYXVzZSBhIHRyYXAgYW55bW9yZS4KKyAgICAgICAgcmVtb3ZlRnJvbUN1cnJl
bnRseUFjdGl2ZUZhc3RNZW1vcmllcyhtZW1vcnkpOworCisgICAgICAgIC8vIFdlIG1heSBjYWNo
ZSBmYXN0IG1lbW9yaWVzLiBBc3N1bWluZyB3ZSB3aWxsLCB3ZSBoYXZlIHRvIHJlc2V0IHRoZW0g
YmVmb3JlIGluc2VydGluZyB0aGVtIGludG8gdGhlIGNhY2hlLgorICAgICAgICB6ZXJvQW5kVW5w
cm90ZWN0Qnl0ZXMobWVtb3J5LCB3cml0YWJsZVNpemUpOworCisgICAgICAgIGlmICh0cnlBZGRU
b0NhY2hlZEZhc3RNZW1vcnkobWVtb3J5KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAicmVsaW5xdWlzaE1lbW9yeSB1bmFibGUgdG8gY2FjaGUg
ZmFzdCBtZW1vcnksIGZyZWVpbmcgaW5zdGVhZCAiLCBSYXdQb2ludGVyKG1lbW9yeSkpOworICAg
ICAgICBtdW5tYXBCeXRlcyhtZW1vcnksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkpOworICAg
ICAgICBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMuZmV0Y2hfc3ViKDEsIHN0ZDo6bWVt
b3J5X29yZGVyX2FjcV9yZWwpOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
bW1hcEJ5dGVzKGZhc3RNZW1vcnlNYXBwZWRCeXRlcywgbWVtb3J5KSkgewotICAgICAgICBtYXBw
ZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBwZWRCeXRlczsKLSAgICAgICAgbW9kZSA9IE1lbW9y
eU1vZGU6OlNpZ25hbGluZzsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobWVtb3J5TG9jayk7
Ci0gICAgICAgIGFsbG9jYXRlZEZhc3RNZW1vcmllcysrOwotICAgICAgICBhdXRvIHJlc3VsdCA9
IGFjdGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpLmFkZChtZW1vcnkpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIGNhc2UgTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJyZWxpbnF1aXNo
RmFzdE1lbW9yeSBmcmVlaW5nIHNsb3cgbWVtb3J5ICIsIFJhd1BvaW50ZXIobWVtb3J5KSk7Cisg
ICAgICAgIG11bm1hcEJ5dGVzKG1lbW9yeSwgbWFwcGVkQ2FwYWNpdHkpOworICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIE1lbW9yeU1vZGU6Ok51bWJlck9mTWVtb3J5TW9kZXM6CisgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIGlmIChtZW1vcnkpCi0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAgICByZXR1cm4gZmFpbCgp
OworYm9vbCBtYWtlTmV3TWVtb3J5UmVhZFdyaXRlT3JSZWxpbnF1aXNoKHZvaWQqIG1lbW9yeSwg
c2l6ZV90IGluaXRpYWxCeXRlcywgc2l6ZV90IG1hcHBlZENhcGFjaXR5Qnl0ZXMsIE1lbW9yeU1v
ZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQobWVtb3J5ICYmIGluaXRpYWxCeXRlcyA8PSBtYXBwZWRD
YXBhY2l0eUJ5dGVzKTsKKyAgICBpZiAoaW5pdGlhbEJ5dGVzKSB7CisgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJNYXJraW5nIFdlYkFzc2VtYmx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIo
bWVtb3J5KSwgIidzIGluaXRpYWwgIiwgaW5pdGlhbEJ5dGVzLCAiIGJ5dGVzIGFzIHJlYWQrd3Jp
dGUiKTsKKyAgICAgICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgaW5pdGlhbEJ5dGVzLCBQUk9UX1JF
QUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogd2h5ID0gc3RyZXJy
b3IoZXJybm8pOworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkZhaWxlZCBtYWtp
bmcgbWVtb3J5ICIsIFJhd1BvaW50ZXIobWVtb3J5KSwgIiByZWFkYWJsZSBhbmQgd3JpdGFibGU6
ICIsIHdoeSk7CisgICAgICAgICAgICByZWxpbnF1aXNoTWVtb3J5KG1lbW9yeSwgMCwgbWFwcGVk
Q2FwYWNpdHlCeXRlcywgbW9kZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorCisKK2NvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQoreworICAgIHN3
aXRjaCAobW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVy
biAiQm91bmRzQ2hlY2tpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1
cm4gIlNpZ25hbGluZyI7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9yeU1vZGVz
OiBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gIiI7CiB9CiAKLWlubGluZSB2b2lkIHJlbGVhc2VGYXN0TWVtb3J5KHZvaWQqJiBtZW1v
cnksIHNpemVfdCB3cml0YWJsZVNpemUsIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9k
ZSBtb2RlKQordm9pZCBNZW1vcnk6OmluaXRpYWxpemVQcmVhbGxvY2F0aW9ucygpCiB7Ci0gICAg
aWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nIHx8ICFtZW1vcnkpCisgICAgaWYgKFVO
TElLRUxZKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9yeSAmJiBtYXBwZWRDYXBhY2l0eSA9PSBm
YXN0TWVtb3J5TWFwcGVkQnl0ZXMpOwotICAgIEFTU0VSVChmYXN0TWVtb3J5RW5hYmxlZCgpKTsK
KyAgICAvLyBSYWNlcyBjYW5ub3Qgb2NjdXIgaW4gdGhpcyBmdW5jdGlvbjogaXQgaXMgb25seSBj
YWxsZWQgYXQgcHJvZ3JhbSBpbml0aWFsaXphdGlvbiwgYmVmb3JlIFdlYkFzc2VtYmx5IGNhbiBi
ZSBpbnZva2VkLgorCisgICAgY29uc3QgYXV0byBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKKyAgICBjb25zdCBzaXplX3QgZGVzaXJlZEZhc3RNZW1vcmllcyA9IHN0ZDo6bWluPHNp
emVfdD4oT3B0aW9uczo6d2ViQXNzZW1ibHlGYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCgpLCBm
YXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQpOworCisgICAgLy8gU3RhcnQgb2ZmIHRyeWluZyB0byBh
bGxvY2F0ZSBmYXN0IG1lbW9yaWVzIGNvbnRpZ3VvdXNseSBzbyB0aGV5IGRvbid0IGZyYWdtZW50
IGVhY2ggb3RoZXIuIFRoaXMgY2FuIGZhaWwgaWYgdGhlIGFkZHJlc3Mgc3BhY2UgaXMgb3RoZXJ3
aXNlIGZyYWdtZW50ZWQuIEluIHRoYXQgY2FzZSwgZ28gZm9yIHNtYWxsZXIgY29udGlndW91cyBh
bGxvY2F0aW9ucy4gV2UnbGwgZXZlbnR1YWxseSBnZXQgaW5kaXZpZHVhbCBub24tY29udGlndW91
cyBmYXN0IG1lbW9yaWVzIGFsbG9jYXRlZCwgb3Igd2UnbGwganVzdCBiZSB1bmFibGUgdG8gZml0
IGEgc2luZ2xlIG9uZSBhdCB3aGljaCBwb2ludCB3ZSBnaXZlIHVwLgorICAgIGF1dG8gYWxsb2Nh
dGVDb250aWd1b3VzRmFzdE1lbW9yaWVzID0gWyZdIChzaXplX3QgbnVtQ29udGlndW91cykgLT4g
Ym9vbCB7CisgICAgICAgIGlmICh2b2lkICptZW1vcnkgPSBtbWFwQnl0ZXMoTWVtb3J5OjpmYXN0
TWFwcGVkQnl0ZXMoKSAqIG51bUNvbnRpZ3VvdXMpKSB7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBzdWJNZW1vcnkgPSAwOyBzdWJNZW1vcnkgPCBudW1Db250aWd1b3VzOyArK3N1Yk1lbW9yeSkg
eworICAgICAgICAgICAgICAgIHZvaWQqIHN0YXJ0QWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KG1lbW9yeSkgKyBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpICogc3ViTWVtb3J5ICsg
c3ViTWVtb3J5OworICAgICAgICAgICAgICAgIGJvb2wgaW5zZXJ0ZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBjYWNoZUVudHJ5ID0gMDsgY2FjaGVFbnRyeSA8IGZhc3RN
ZW1vcnlDYWNoZUhhcmRMaW1pdDsgKytjYWNoZUVudHJ5KSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChmYXN0TWVtb3J5Q2FjaGVbY2FjaGVFbnRyeV0ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkKSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmYXN0TWVtb3J5
Q2FjaGVbY2FjaGVFbnRyeV0uc3RvcmUoc3RhcnRBZGRyZXNzLCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc2VydGVkKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgc2l6ZV90IGZyYWdtZW50cyA9IDA7CisgICAg
c2l6ZV90IG51bUZhc3RNZW1vcmllcyA9IDA7CisgICAgc2l6ZV90IGNvbnRpZ3VvdXNNZW1vcnlB
bGxvY2F0aW9uQXR0ZW1wdCA9IGRlc2lyZWRGYXN0TWVtb3JpZXM7CisgICAgd2hpbGUgKG51bUZh
c3RNZW1vcmllcyAhPSBkZXNpcmVkRmFzdE1lbW9yaWVzICYmIGNvbnRpZ3VvdXNNZW1vcnlBbGxv
Y2F0aW9uQXR0ZW1wdCAhPSAwKSB7CisgICAgICAgIGlmIChhbGxvY2F0ZUNvbnRpZ3VvdXNGYXN0
TWVtb3JpZXMoY29udGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0KSkgeworICAgICAgICAg
ICAgbnVtRmFzdE1lbW9yaWVzICs9IGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdDsK
KyAgICAgICAgICAgIGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdCA9IHN0ZDo6bWlu
KGNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1wdCAtIDEsIGRlc2lyZWRGYXN0TWVtb3Jp
ZXMgLSBudW1GYXN0TWVtb3JpZXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIC0tY29u
dGlndW91c01lbW9yeUFsbG9jYXRpb25BdHRlbXB0OworICAgICAgICArK2ZyYWdtZW50czsKKyAg
ICB9CisKKyAgICBmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCA9IG51bUZhc3RNZW1vcmllczsK
KyAgICBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMuc3RvcmUoZmFzdE1lbW9yeVByZWFs
bG9jYXRlQ291bnQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIG9ic2VydmVkTWF4
aW11bUZhc3RNZW1vcnkuc3RvcmUoZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQsIHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOwogCi0gICAgbWVtc2V0KG1lbW9yeSwgMCwgd3JpdGFibGVTaXpl
KTsKLSAgICBpZiAobXByb3RlY3QobWVtb3J5LCB3cml0YWJsZVNpemUsIFBST1RfTk9ORSkpCi0g
ICAgICAgIENSQVNIKCk7CisgICAgY29uc3QgYXV0byBlbmRUaW1lID0gTW9ub3RvbmljVGltZTo6
bm93KCk7CiAKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtZW1vcnlMb2NrKTsKLSAgICBib29sIHJl
c3VsdCA9IGFjdGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpLnJlbW92ZShtZW1vcnkpOwotICAgIEFT
U0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwotICAgIEFTU0VSVChhdmFpbGFibGVGYXN0TWVt
b3JpZXMobG9ja2VyKS5zaXplKCkgPCBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMpOwotICAgIGF2YWls
YWJsZUZhc3RNZW1vcmllcyhsb2NrZXIpLmFwcGVuZChtZW1vcnkpOwotICAgIG1lbW9yeSA9IG51
bGxwdHI7CisgICAgZm9yIChzaXplX3QgY2FjaGVFbnRyeSA9IDA7IGNhY2hlRW50cnkgPCBmYXN0
TWVtb3J5UHJlYWxsb2NhdGVDb3VudDsgKytjYWNoZUVudHJ5KSB7CisgICAgICAgIHZvaWQqIHN0
YXJ0QWRkcmVzcyA9IGZhc3RNZW1vcnlDYWNoZVtjYWNoZUVudHJ5XS5sb2FkKHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGF4ZWQpOworICAgICAgICBBU1NFUlQoc3RhcnRBZGRyZXNzKTsKKyAgICAgICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByZS1hbGxvY2F0aW9uIG9mIFdlYkFzc2VtYmx5IGZhc3Qg
bWVtb3J5IGF0ICIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSk7CisgICAgfQorICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJQcmUtYWxsb2NhdGVkICIsIGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNv
dW50LCAiIFdlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMgaW4gIiwgZmFzdE1lbW9yeVByZWFsbG9j
YXRlQ291bnQgPT0gMCA/IDAgOiBmcmFnbWVudHMsIGZyYWdtZW50cyA9PSAxID8gIiBmcmFnbWVu
dCwgdG9vayAiIDogIiBmcmFnbWVudHMsIHRvb2sgIiwgZW5kVGltZSAtIHN0YXJ0VGltZSk7CiB9
CiAKIE1lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkK
QEAgLTE5NCw4NyArMzQyLDk2IEBAIE1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNv
dW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkCiAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRoaXMpOwogfQog
Ci1SZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZUltcGwoVk0mIHZtLCBQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWly
ZWRNb2RlKQorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQg
aW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCiB7CisgICAgQVNTRVJUKGluaXRpYWwpOwogICAg
IFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMg
c2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KIAotICAgIE1lbW9yeU1vZGUgbW9k
ZSA9IHJlcXVpcmVkTW9kZSA/ICpyZXF1aXJlZE1vZGUgOiBNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZzsKLSAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IGluaXRpYWwuYnl0ZXMoKTsKLSAgICBzaXpl
X3QgbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogUGFnZUNvdW50
OjptYXgoKS5ieXRlcygpOwotICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7CisgICAgY29uc3Qg
c2l6ZV90IGluaXRpYWxCeXRlcyA9IGluaXRpYWwuYnl0ZXMoKTsKKyAgICBjb25zdCBzaXplX3Qg
bWF4aW11bUJ5dGVzID0gbWF4aW11bSA/IG1heGltdW0uYnl0ZXMoKSA6IDA7CisgICAgc2l6ZV90
IG1hcHBlZENhcGFjaXR5Qnl0ZXMgPSAwOworICAgIE1lbW9yeU1vZGUgbW9kZTsKIAotICAgIGF1
dG8gbWFrZUVtcHR5TWVtb3J5ID0gWyZdICgpIC0+IFJlZlB0cjxNZW1vcnk+IHsKLSAgICAgICAg
aWYgKG1vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgLy8gV2UgbmVlZCB0byBiZSBzdXJlIHdlIGhhdmUgYSBzdHViIHByaW9yIHRv
IHJ1bm5pbmcgY29kZS4KKyAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKKyAgICBpZiAobWF4aW11bSAmJiAhbWF4aW11bUJ5dGVzKSB7CisgICAgICAg
IC8vIFVzZXIgc3BlY2lmaWVkIGEgemVybyBtYXhpbXVtLCBpbml0aWFsIHNpemUgbXVzdCBhbHNv
IGJlIHplcm8uCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbml0aWFsQnl0ZXMpOwogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7Ci0gICAgfTsK
LQotICAgIGlmICghbWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBz
cGVjaWZpZWQgYSB6ZXJvIGFzIG1heGltdW0gKHdoaWNoIG1lYW5zIHdlIGFsc28gaGF2ZSB6ZXJv
IGFzIGluaXRpYWwgc2l6ZSkuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzaXplKTsKLSAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIGFsbG9jYXRpbmcgbm90aGlu
ZyIpOwotICAgICAgICByZXR1cm4gbWFrZUVtcHR5TWVtb3J5KCk7CiAgICAgfQogCi0gICAgYm9v
bCBjYW5Vc2VGYXN0TWVtb3J5ID0gIXJlcXVpcmVkTW9kZSB8fCByZXF1aXJlZE1vZGUgPT0gTWVt
b3J5TW9kZTo6U2lnbmFsaW5nOwotICAgIGlmICghY2FuVXNlRmFzdE1lbW9yeSB8fCAhdHJ5R2V0
RmFzdE1lbW9yeSh2bSwgbWVtb3J5LCBtYXBwZWRDYXBhY2l0eSwgbW9kZSkpIHsKLSAgICAgICAg
aWYgKG1vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAgICAgaWYgKE9wdGlvbnM6OnNpbXVsYXRlV2ViQXNzZW1ibHlMb3dNZW1v
cnkoKSA/IHRydWUgOiAhbW1hcEJ5dGVzKG1hcHBlZENhcGFjaXR5LCBtZW1vcnkpKSB7Ci0gICAg
ICAgICAgICAvLyBUcnkgYWdhaW4gd2l0aCBhIGRpZmZlcmVudCBudW1iZXIuCi0gICAgICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBmYWlsZWQgb25jZSBm
b3IgY2FwYWNpdHksIHRyeWluZyBhZ2FpbiIpOwotICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHkg
PSBzaXplOwotICAgICAgICAgICAgaWYgKCFtYXBwZWRDYXBhY2l0eSkgewotICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIG5vdCB0cnlpbmcg
YWdhaW4gYmVjYXVzZSBzaXplIGlzIHplcm8iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZUVtcHR5TWVtb3J5KCk7Ci0gICAgICAgICAgICB9CisgICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0
cjsKIAotICAgICAgICAgICAgaWYgKCFtbWFwQnl0ZXMobWFwcGVkQ2FwYWNpdHksIG1lbW9yeSkp
IHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUg
bW1hcCBmYWlsZWQgdHdpY2UiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgICAgIH0KKyAgICAvLyBGaXJzdCB0cnkgZmFzdCBtZW1vcnksIGJlY2F1c2UgdGhleSdy
ZSBmYXN0LiBGYXN0IG1lbW9yeSBpcyBzdWl0YWJsZSBmb3IgYW55IGluaXRpYWwgLyBtYXhpbXVt
LgorICAgIG1lbW9yeSA9IHRyeUdldEZhc3RNZW1vcnkodm0pOworICAgIGlmIChtZW1vcnkpIHsK
KyAgICAgICAgbWFwcGVkQ2FwYWNpdHlCeXRlcyA9IE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCk7
CisgICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7CisgICAgfQorCisgICAgLy8g
SWYgd2UgY2FuJ3QgZ2V0IGEgZmFzdCBtZW1vcnkgYnV0IHRoZSB1c2VyIGV4cHJlc3NlZCB0aGUg
aW50ZW50IHRvIGdyb3cgbWVtb3J5IHVwIHRvIGEgY2VydGFpbiBtYXhpbXVtIHRoZW4gd2Ugc2hv
dWxkIHRyeSB0byBob25vciB0aGF0IGRlc2lyZS4gSXQnbGwgbWVhbiB0aGF0IGdyb3cgaXMgbW9y
ZSBsaWtlbHkgdG8gc3VjY2VlZCwgYW5kIHdvbid0IHJlcXVpcmUgcmVtYXBwaW5nLgorICAgIGlm
ICghbWVtb3J5ICYmIG1heGltdW0pIHsKKyAgICAgICAgbWVtb3J5ID0gdHJ5R2V0U2xvd01lbW9y
eShtYXhpbXVtQnl0ZXMpOworICAgICAgICBpZiAobWVtb3J5KSB7CisgICAgICAgICAgICBtYXBw
ZWRDYXBhY2l0eUJ5dGVzID0gbWF4aW11bUJ5dGVzOworICAgICAgICAgICAgbW9kZSA9IE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nOwogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKG1l
bW9yeSAmJiBzaXplIDw9IG1hcHBlZENhcGFjaXR5KTsKLSAgICBpZiAobXByb3RlY3QobWVtb3J5
LCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgewotICAgICAgICAvLyBGSVhNRTogc2hv
dWxkIHRoaXMgZXZlciBvY2N1cj8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2OTg5MAotICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUg
bXByb3RlY3QgZmFpbGVkIik7Ci0gICAgICAgIHJlbGVhc2VGYXN0TWVtb3J5KG1lbW9yeSwgMCwg
bWFwcGVkQ2FwYWNpdHksIG1vZGUpOworICAgIC8vIFdlJ3JlIHN0dWNrIHdpdGggYSBzbG93IG1l
bW9yeSB3aGljaCBtYXkgYmUgc2xvd2VyIG9yIGltcG9zc2libGUgdG8gZ3Jvdy4KKyAgICBpZiAo
IW1lbW9yeSkgeworICAgICAgICBtZW1vcnkgPSB0cnlHZXRTbG93TWVtb3J5KGluaXRpYWxCeXRl
cyk7CiAgICAgICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgICAgIGlmIChtdW5tYXAobWVtb3J5
LCBtYXBwZWRDYXBhY2l0eSkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAg
IG1hcHBlZENhcGFjaXR5Qnl0ZXMgPSBpbml0aWFsQnl0ZXM7CisgICAgICAgICAgICBtb2RlID0g
TWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCi0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRl
IG1tYXAgc3VjY2VlZGVkIik7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkobWVtb3J5
LCBpbml0aWFsLCBtYXhpbXVtLCBtYXBwZWRDYXBhY2l0eSwgbW9kZSkpOworICAgIGlmICghbWVt
b3J5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghbWFrZU5ld01lbW9yeVJl
YWRXcml0ZU9yUmVsaW5xdWlzaChtZW1vcnksIGluaXRpYWxCeXRlcywgbWFwcGVkQ2FwYWNpdHlC
eXRlcywgbW9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBNZW1vcnkobWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBtYXBwZWRDYXBhY2l0eUJ5
dGVzLCBtb2RlKSk7CiB9CiAKLVJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9y
eU1vZGU+IG1vZGUpCitNZW1vcnk6On5NZW1vcnkoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFt
YXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRl
ZWQgYnkgb3VyIGNhbGxlci4KLSAgICBSZWZQdHI8TWVtb3J5PiByZXN1bHQgPSBjcmVhdGVJbXBs
KHZtLCBpbml0aWFsLCBtYXhpbXVtLCBtb2RlKTsKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAg
IGlmIChyZXN1bHQtPm1vZGUoKSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCi0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQtPm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1h
cHBlZEJ5dGVzKTsKLSAgICAgICAgaWYgKG1vZGUpCi0gICAgICAgICAgICBBU1NFUlQoKm1vZGUg
PT0gcmVzdWx0LT5tb2RlKCkpOworICAgIGlmIChtX21lbW9yeSkgeworICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiTWVtb3J5Ojp+TWVtb3J5ICIsICp0aGlzKTsKKyAgICAgICAgcmVsaW5x
dWlzaE1lbW9yeShtX21lbW9yeSwgbV9zaXplLCBtX21hcHBlZENhcGFjaXR5LCBtX21vZGUpOwog
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwogfQogCi1NZW1vcnk6On5NZW1vcnkoKQorc2l6ZV90
IE1lbW9yeTo6ZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpCiB7Ci0gICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgIk1lbW9yeTo6fk1lbW9yeSAiLCAqdGhpcyk7Ci0gICAgcmVsZWFzZUZhc3RNZW1vcnko
bV9tZW1vcnksIG1fc2l6ZSwgbV9tYXBwZWRDYXBhY2l0eSwgbV9tb2RlKTsKLSAgICBpZiAobV9t
ZW1vcnkpIHsKLSAgICAgICAgaWYgKG11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSkp
Ci0gICAgICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KFBh
Z2VDb3VudDo6cGFnZVNpemUpICogT3B0aW9uczo6d2ViQXNzZW1ibHlGYXN0TWVtb3J5UmVkem9u
ZVBhZ2VzKCk7Cit9CisKK3NpemVfdCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpCit7CisgICAg
c3RhdGljX2Fzc2VydChzaXplb2YodWludDY0X3QpID09IHNpemVvZihzaXplX3QpLCAiV2UgcmVs
eSBvbiBhbGxvd2luZyB0aGUgbWF4aW11bSBzaXplIG9mIE1lbW9yeSB3ZSBtYXAgdG8gYmUgMl4z
MiArIHJlZHpvbmUgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2Vy
IHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpKSArIGZhc3RNYXBwZWRSZWR6b25lQnl0ZXMoKTsKK30KKworc2l6ZV90IE1lbW9yeTo6
bWF4RmFzdE1lbW9yeUNvdW50KCkKK3sKKyAgICAvLyBUaGUgb3JkZXIgY2FuIGJlIHJlbGF4ZWQg
aGVyZSBiZWNhdXNlIHdlIHByb3ZpZGUgYSBtb25vdG9uaWNhbGx5LWluY3JlYXNpbmcgZXN0aW1h
dGUuIEEgY29uY3VycmVudCBvYnNlcnZlciBjb3VsZCBzZWUgYSBzbGlnaHRseSBvdXQtb2YtZGF0
ZSB2YWx1ZSBidXQgY2FuJ3QgdGVsbCB0aGF0IHRoZXkgZGlkLgorICAgIHJldHVybiBvYnNlcnZl
ZE1heGltdW1GYXN0TWVtb3J5LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Cit9CisK
K2Jvb2wgTWVtb3J5OjphZGRyZXNzSXNJbkFjdGl2ZUZhc3RNZW1vcnkodm9pZCogYWRkcmVzcykK
K3sKKyAgICAvLyBUaGlzIGNhbm5vdCByYWNlIGluIGFueSBtZWFuaW5nZnVsIHdheTogdGhlIHRo
cmVhZCB3aGljaCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdhbnRzIHRvIGtub3cgaWYgYSBmYXVsdCBp
dCByZWNlaXZlZCBhdCBhIHBhcnRpY3VsYXIgYWRkcmVzcyBpcyBpbiBhIGZhc3QgbWVtb3J5LiBU
aGF0IGZhc3QgbWVtb3J5IG11c3QgdGhlcmVmb3JlIGJlIGFjdGl2ZSBpbiB0aGF0IHRocmVhZC4g
SXQgY2Fubm90IGJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvZiBjdXJyZW50bHkg
YWN0aXZlIGZhc3QgbWVtb3JpZXMuIE90aGVyIG1lbW9yaWVzIGJlaW5nIGFkZGVkIC8gcmVtb3Zl
ZCBjb25jdXJyZW50bHkgYXJlIGluY29uc2VxdWVudGlhbC4KKyAgICBmb3IgKHNpemVfdCBpZHgg
PSAwOyBpZHggPCBmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1pdDsgKytpZHgpIHsKKyAgICAg
ICAgY2hhciogc3RhcnQgPSBzdGF0aWNfY2FzdDxjaGFyKj4oY3VycmVudGx5QWN0aXZlRmFzdE1l
bW9yaWVzW2lkeF0ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSk7CisgICAgICAgIGlm
IChzdGFydCA8PSBhZGRyZXNzICYmIGFkZHJlc3MgPD0gc3RhcnQgKyBmYXN0TWFwcGVkQnl0ZXMo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQpAQCAtMzAxLDggKzQ1OCwx
MSBAQCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKICAgICB9CiAKICAgICBp
ZiAobV9tZW1vcnkgJiYgZGVzaXJlZFNpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSkgewotICAgICAg
ICBpZiAobXByb3RlY3Qoc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6ZSwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihkZXNpcmVkU2l6ZSAtIG1fc2l6ZSksIFBST1RfUkVBRCB8IFBS
T1RfV1JJVEUpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgZXZlciBvY2N1
cj8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTg5MAorICAgICAg
ICB1aW50OF90KiBzdGFydEFkZHJlc3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9tZW1vcnkp
ICsgbV9zaXplOworICAgICAgICBzaXplX3QgZXh0cmFCeXRlcyA9IGRlc2lyZWRTaXplIC0gbV9z
aXplOworICAgICAgICBSRUxFQVNFX0FTU0VSVChleHRyYUJ5dGVzKTsKKyAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIk1hcmtpbmcgV2ViQXNzZW1ibHkgbWVtb3J5J3MgIiwgUmF3UG9pbnRl
cihtX21lbW9yeSksICIgYXMgcmVhZCt3cml0ZSBpbiByYW5nZSBbIiwgUmF3UG9pbnRlcihzdGFy
dEFkZHJlc3MpLCAiLCAiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcyArIGV4dHJhQnl0ZXMpLCAi
KSIpOworICAgICAgICBpZiAobXByb3RlY3Qoc3RhcnRBZGRyZXNzLCBleHRyYUJ5dGVzLCBQUk9U
X1JFQUQgfCBQUk9UX1dSSVRFKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
Ik1lbW9yeTo6Z3JvdyBpbi1wbGFjZSBmYWlsZWQgIiwgKnRoaXMpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0zMTYsMTYgKzQ3NiwyMCBAQCBib29sIE1lbW9yeTo6
Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKICAgICBSRUxFQVNFX0FTU0VSVChtb2RlKCkgIT0gTWVt
b3J5TW9kZTo6U2lnbmFsaW5nKTsKIAogICAgIC8vIE90aGVyd2lzZSwgbGV0J3MgdHJ5IHRvIG1h
a2Ugc29tZSBuZXcgbWVtb3J5LgotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIGlmIHdl
IGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjM2MDAKLSAgICB2b2lkKiBuZXdNZW1vcnkgPSBtbWFwKG51bGxwdHIs
IGRlc2lyZWRTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9B
Tk9OLCAtMSwgMCk7Ci0gICAgaWYgKG5ld01lbW9yeSA9PSBNQVBfRkFJTEVEKQorICAgIC8vIEZJ
WE1FIG1yZW1hcCB3b3VsZCBiZSBuaWNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzA1NTcKKyAgICAvLyBGSVhNRSBzaG91bGQgd2Ugb3Zlci1hbGxvY2F0ZSBoZXJl
PyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwODI2CisgICAgdm9p
ZCogbmV3TWVtb3J5ID0gdHJ5R2V0U2xvd01lbW9yeShkZXNpcmVkU2l6ZSk7CisgICAgaWYgKCFu
ZXdNZW1vcnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbWFrZU5ld01lbW9y
eVJlYWRXcml0ZU9yUmVsaW5xdWlzaChuZXdNZW1vcnksIGRlc2lyZWRTaXplLCBkZXNpcmVkU2l6
ZSwgbW9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fbWVtb3J5KSB7
CiAgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUpOwotICAgICAgICBi
b29sIHN1Y2Nlc3MgPSAhbXVubWFwKG1fbWVtb3J5LCBtX21hcHBlZENhcGFjaXR5KTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CisgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobV9t
ZW1vcnksIG1fc2l6ZSwgbV9zaXplLCBtX21vZGUpOwogICAgIH0KKwogICAgIG1fbWVtb3J5ID0g
bmV3TWVtb3J5OwogICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBkZXNpcmVkU2l6ZTsKICAgICBtX3Np
emUgPSBkZXNpcmVkU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaApp
bmRleCBiMDI0NTFkLi41NTM0NWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeS5oCkBAIC0yOSw4ICsyOSw2IEBACiAKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAK
LSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC02
MSwxMSArNTksMTcgQEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9tZW1vcnk7IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBj
cmVhdGUoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0
aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKKyAgICBzdGF0
aWMgdm9pZCBpbml0aWFsaXplUHJlYWxsb2NhdGlvbnMoKTsKKyAgICBzdGF0aWMgUmVmUHRyPE1l
bW9yeT4gY3JlYXRlKFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKTsK
IAogICAgIE1lbW9yeSgpID0gZGVmYXVsdDsKICAgICB+TWVtb3J5KCk7CiAKKyAgICBzdGF0aWMg
c2l6ZV90IGZhc3RNYXBwZWRSZWR6b25lQnl0ZXMoKTsKKyAgICBzdGF0aWMgc2l6ZV90IGZhc3RN
YXBwZWRCeXRlcygpOyAvLyBJbmNsdWRlcyByZWR6b25lLgorICAgIHN0YXRpYyBzaXplX3QgbWF4
RmFzdE1lbW9yeUNvdW50KCk7CisgICAgc3RhdGljIGJvb2wgYWRkcmVzc0lzSW5BY3RpdmVGYXN0
TWVtb3J5KHZvaWQqKTsKKwogICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVt
b3J5OyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBQ
YWdlQ291bnQgc2l6ZUluUGFnZXMoKSBjb25zdCB7IHJldHVybiBQYWdlQ291bnQ6OmZyb21CeXRl
cyhtX3NpemUpOyB9CkBAIC04MSw3ICs4NSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2hlY2so
KSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7IH0KIHByaXZhdGU6Ci0gICAgc3RhdGlj
IFJlZlB0cjxNZW1vcnk+IGNyZWF0ZUltcGwoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNv
dW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3Rk
OjpudWxsb3B0KTsKICAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwg
UGFnZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7CiAg
ICAgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CiAKQEAgLTk0
LDExICs5NywxNyBAQCBwcml2YXRlOgogICAgIE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9k
ZTo6Qm91bmRzQ2hlY2tpbmcgfTsKIH07CiAKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90
KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6
ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzMgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBp
biBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlk
bid0IGhvbGQuIik7Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZWxzZQogCi1jb25z
dCBzaXplX3QgZmFzdE1lbW9yeU1hcHBlZEJ5dGVzID0gKHN0YXRpY19jYXN0PHNpemVfdD4oc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSArIDEpICogMjsgLy8gcG9pbnRlciBt
YXggKyBvZmZzZXQgbWF4LiBUaGlzIGlzIGFsbCB3ZSBuZWVkIHNpbmNlIGEgbG9hZCBzdHJhZGRs
aW5nIHJlYWRhYmxlIG1lbW9yeSB3aWxsIHRyYXAuCi1leHRlcm4gU3RhdGljTG9jayBtZW1vcnlM
b2NrOwotY29uc3QgSGFzaFNldDx2b2lkKj4mIHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMoY29uc3Qg
QWJzdHJhY3RMb2NrZXImKTsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2Ns
YXNzIE1lbW9yeSB7CitwdWJsaWM6CisgICAgc3RhdGljIHNpemVfdCBtYXhGYXN0TWVtb3J5Q291
bnQoKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIGJvb2wgYWRkcmVzc0lzSW5BY3RpdmVGYXN0
TWVtb3J5KHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQorfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggNjU0N2Q2Mi4uOWNkNDdkOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCiAgICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBt
b2R1bGUpOwotICAgIGNvbnN0IHNpemVfdCBleHRyYU1lbW9yeVNpemUgPSBtb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGNv
bnN0IHNpemVfdCBleHRyYU1lbW9yeVNpemUgPSBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpOwogICAg
IG1fZ2xvYmFscyA9IE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUp
OwogICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXpl
KTsKIApAQCAtODksNyArODksNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fbWVtb3J5KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3RhYmxlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7
Ci0gICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bW9kdWxl
KCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkpOworICAgIHZpc2l0b3IucmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPmdsb2JhbE1lbW9yeUJ5dGVTaXplKCkp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1
bmN0aW9uczsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRG
dW5jdGlvbnMoKVtpXSk7CiB9CkBAIC0zNTAsNiArMzUwLDEwIEBAIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTCiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCitzaXplX3QgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9k
dWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVy
KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggODU1MWZlOC4uNTNl
ZDk5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oCkBAIC05Miw2ICs5Miw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6
CiAgICAgVk0qIG1fdm07CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rp
b25zKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KKyAg
ICBzaXplX3QgZ2xvYmFsTWVtb3J5Qnl0ZVNpemUoKSBjb25zdDsKIAogICAgIFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJB
c3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCmluZGV4IDMzNjljMGUuLmM2
ZDc4Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuY3BwCkBAIC0xMTcsNiArMTE3LDcgQEAgV2FzbTo6UGFnZUNvdW50IEpT
V2ViQXNzZW1ibHlNZW1vcnk6Omdyb3coVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90
IGRlbHQKICAgICB9CiAKICAgICBtZW1vcnkoKS5jaGVjaygpOworICAgIC8vIEZJWE1FIFNob3Vs
ZCB3ZSByZXBvcnQgZXh0cmEgbWVtb3J5IHRvIHRoZSBHQyBvbiBhbGxvY2F0aW9uIC8gZ3JvdyAv
IHZpc2l0PyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjkwCiAg
ICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKIH0KIApAQCAtMTI0LDYgKzEyNSw4IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAg
IC8vIEZJWE1FIFNob3VsZCB3ZSByZXBvcnQgZXh0cmEgbWVtb3J5IHRvIHRoZSBHQyBvbiBhbGxv
Y2F0aW9uIC8gZ3JvdyAvIHZpc2l0PyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwNjkwCisgICAgdm0uaGVhcC5yZXBvcnRXZWJBc3NlbWJseUZhc3RNZW1vcmllc0Fs
bG9jYXRlZCgxKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKQEAgLTE0MSw2ICsxNDQsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9idWZmZXJXcmFwcGVyKTsKKyAgICAvLyBGSVhNRSBTaG91bGQgd2Ug
cmVwb3J0IGV4dHJhIG1lbW9yeSB0byB0aGUgR0Mgb24gYWxsb2NhdGlvbiAvIGdyb3cgLyB2aXNp
dD8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDY5MAogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291
cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNTg0MmM2Ni4uNjZiYTIzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MyBAQAorMjAxNy0wNC0xMSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgV2ViQXNzZW1ibHk6IG1hbmFnZSBtZW1vcnkgYmV0dGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2MjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZS11c2UgYSBWTSB0YWcgd2hpY2ggd2Fz
IGludGVuZGVkIGZvciBKYXZhU2NyaXB0IGNvcmUsIHdhcyB0aGVuCisgICAgICAgIHVzZWQgYnkg
b3VyIEdDLCBhbmQgaXMgbm93IHVudXNlZC4gSWYgSSBkb24ndCBkbyB0aGlzIHRoZW4KKyAgICAg
ICAgV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcyB3aWxsIG1ha2Ugdm1tYXAgbG9vayBzdXBlciB3
ZWlyZCBiZWNhdXNlCisgICAgICAgIGl0J2xsIGxvb2sgbGlrZSBtdWx0aS1naWdhYnl0ZSBvZiB2
aXJ0dWFsIG1lbW9yeSBhcmUgYWxsb2NhdGVkIGFzCisgICAgICAgIHBhcnQgb2Ygb3VyIHByb2Nl
c3MnIHJlZ3VsYXIgbWVtb3J5IQorCisgICAgICAgIFNlcGFyYXRlbHkgSSBuZWVkIHRvIHVwZGF0
ZSB2bW1hcCBhbmQgb3RoZXIgdG9vbHMgdG8gcHJpbnQgdGhlCisgICAgICAgIHJpZ2h0IG5hbWUu
IFJpZ2h0IG5vdyB0aGlzIHRhZyBnZXRzIGlkZW50aWZpZWQgYXMgIkpTIGdhcmJhZ2UKKyAgICAg
ICAgY29sbGVjdG9yIi4KKworICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAq
IHd0Zi9WTVRhZ3MuaDoKKwogMjAxNy0wNC0xMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgcHJvcGVyIGlmZGVmIGd1YXJkIGZvciBj
b2RlIHVzaW5nIE1hY2hpbmVDb250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9PU0Fs
bG9jYXRvci5oIGIvU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAppbmRleCBjOWNiMTU1Li5k
NzY3OGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKQEAgLTM2LDcgKzM2LDYgQEAgcHVibGljOgogICAg
IGVudW0gVXNhZ2UgewogICAgICAgICBVbmtub3duVXNhZ2UgPSAtMSwKICAgICAgICAgRmFzdE1h
bGxvY1BhZ2VzID0gVk1fVEFHX0ZPUl9UQ01BTExPQ19NRU1PUlksCi0gICAgICAgIEpTR0NIZWFw
UGFnZXMgPSBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlksCiAgICAgICAgIEpTVk1TdGFja1Bh
Z2VzID0gVk1fVEFHX0ZPUl9SRUdJU1RFUkZJTEVfTUVNT1JZLAogICAgICAgICBKU0pJVENvZGVQ
YWdlcyA9IFZNX1RBR19GT1JfRVhFQ1VUQUJMRUFMTE9DQVRPUl9NRU1PUlksCiAgICAgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZNVGFncy5oIGIvU291cmNlL1dURi93dGYvVk1UYWdz
LmgKaW5kZXggYWVmMDVkMi4uMjdmYzBkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVk1U
YWdzLmgKKysrIGIvU291cmNlL1dURi93dGYvVk1UYWdzLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDE1ICs1MSwxNSBAQAogI2Vu
ZGlmIC8vIGRlZmluZWQoVk1fTUVNT1JZX0pBVkFTQ1JJUFRfSklUX1JFR0lTVEVSX0ZJTEUpCiAK
ICNpZiBkZWZpbmVkKFZNX01FTU9SWV9KQVZBU0NSSVBUX0NPUkUpCi0jZGVmaW5lIFZNX1RBR19G
T1JfQ09MTEVDVE9SX01FTU9SWSBWTV9NQUtFX1RBRyhWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JF
KQorI2RlZmluZSBWTV9UQUdfRk9SX1dFQkFTU0VNQkxZX01FTU9SWSBWTV9NQUtFX1RBRyhWTV9N
RU1PUllfSkFWQVNDUklQVF9DT1JFKQogI2Vsc2UKLSNkZWZpbmUgVk1fVEFHX0ZPUl9DT0xMRUNU
T1JfTUVNT1JZIFZNX01BS0VfVEFHKDYzKQorI2RlZmluZSBWTV9UQUdfRk9SX1dFQkFTU0VNQkxZ
X01FTU9SWSBWTV9NQUtFX1RBRyg2MykKICNlbmRpZiAvLyBkZWZpbmVkKFZNX01FTU9SWV9KQVZB
U0NSSVBUX0NPUkUpCiAKICNlbHNlIC8vIE9TKERBUldJTikKIAogI2RlZmluZSBWTV9UQUdfRk9S
X1RDTUFMTE9DX01FTU9SWSAtMQotI2RlZmluZSBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlkg
LTEKKyNkZWZpbmUgVk1fVEFHX0ZPUl9XRUJBU1NFTUJMWV9NRU1PUlkgLTEKICNkZWZpbmUgVk1f
VEFHX0ZPUl9FWEVDVVRBQkxFQUxMT0NBVE9SX01FTU9SWSAtMQogI2RlZmluZSBWTV9UQUdfRk9S
X1JFR0lTVEVSRklMRV9NRU1PUlkgLTEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNkZmU2ODkuLjU0Y2E1Yjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxNy0wNC0xMSAgSkYgQmFzdGllbiAgPGpm
YmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG1hbmFnZSBtZW1vcnkg
YmV0dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzA2MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZS11c2UgYSBWTSB0YWcgd2hpY2ggd2FzIGludGVuZGVkIGZvciBKYXZhU2NyaXB0IGNvcmUsIHdh
cyB0aGVuCisgICAgICAgIHVzZWQgYnkgb3VyIEdDLCBhbmQgaXMgbm93IHVudXNlZC4gSWYgSSBk
b24ndCBkbyB0aGlzIHRoZW4KKyAgICAgICAgV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcyB3aWxs
IG1ha2Ugdm1tYXAgbG9vayBzdXBlciB3ZWlyZCBiZWNhdXNlCisgICAgICAgIGl0J2xsIGxvb2sg
bGlrZSBtdWx0aS1naWdhYnl0ZSBvZiB2aXJ0dWFsIG1lbW9yeSBhcmUgYWxsb2NhdGVkIGFzCisg
ICAgICAgIHBhcnQgb2Ygb3VyIHByb2Nlc3MnIHJlZ3VsYXIgbWVtb3J5IQorCisgICAgICAgIFNl
cGFyYXRlbHkgSSBuZWVkIHRvIHVwZGF0ZSB2bW1hcCBhbmQgb3RoZXIgdG9vbHMgdG8gcHJpbnQg
dGhlCisgICAgICAgIHJpZ2h0IG5hbWUuIFJpZ2h0IG5vdyB0aGlzIHRhZyBnZXRzIGlkZW50aWZp
ZWQgYXMgIkpTIGdhcmJhZ2UKKyAgICAgICAgY29sbGVjdG9yIi4KKworICAgICAgICAqIHBhZ2Uv
UmVzb3VyY2VVc2FnZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZURh
dGE6OlJlc291cmNlVXNhZ2VEYXRhKToKKyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VEYXRh
Lmg6CisgICAgICAgICogcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6SGlzdG9yaWNSZXNvdXJjZVVzYWdlRGF0YTo6SGlzdG9yaWNSZXNv
dXJjZVVzYWdlRGF0YSk6CisgICAgICAgICogcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFk
Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpkaXNwbGF5TmFtZUZvclZNVGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhdGVnb3J5Rm9yVk1UYWcpOgorCiAyMDE3LTA0LTEzICBNeWxlcyBDLiBN
YXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkcmVzc2luZyBwb3N0
LXJldmlldyBjb21tZW50IGFmdGVyIHIyMTUzMTQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3Vy
Y2VVc2FnZURhdGEuY3BwCmluZGV4IDU5MTJiMDUuLjdhMTcwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAgUmVzb3VyY2VVc2FnZURh
dGE6OlJlc291cmNlVXNhZ2VEYXRhKCkKIHsKICAgICAvLyBWTSB0YWcgY2F0ZWdvcmllcy4KICAg
ICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpKU0pJVF0gPSBNZW1vcnlDYXRlZ29yeUluZm8o
TWVtb3J5Q2F0ZWdvcnk6OkpTSklUKTsKKyAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpX
ZWJBc3NlbWJseV0gPSBNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OldlYkFzc2Vt
Ymx5KTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpJbWFnZXNdID0gTWVtb3J5Q2F0
ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpJbWFnZXMpOwogICAgIGNhdGVnb3JpZXNbTWVtb3J5
Q2F0ZWdvcnk6OkxheWVyc10gPSBNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6Okxh
eWVycyk7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxvY10gPSBNZW1v
cnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkxpYmNNYWxsb2MpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5oCmluZGV4IDAyYzNiYTEuLmM4ODE1MzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTIgKzM2LDEzIEBAIG5hbWVzcGFj
ZSBNZW1vcnlDYXRlZ29yeSB7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYm1hbGxvYyA9IDA7CiBz
dGF0aWMgY29uc3QgdW5zaWduZWQgTGliY01hbGxvYyA9IDE7CiBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgSlNKSVQgPSAyOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEltYWdlcyA9IDM7Ci1zdGF0aWMg
Y29uc3QgdW5zaWduZWQgR0NIZWFwID0gNDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBHQ093bmVk
ID0gNTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdGhlciA9IDY7Ci1zdGF0aWMgY29uc3QgdW5z
aWduZWQgTGF5ZXJzID0gNzsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBOdW1iZXJPZkNhdGVnb3Jp
ZXMgPSA4Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIFdlYkFzc2VtYmx5ID0gMzsKK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBJbWFnZXMgPSA0Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIEdDSGVhcCA9
IDU7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgR0NPd25lZCA9IDY7CitzdGF0aWMgY29uc3QgdW5z
aWduZWQgT3RoZXIgPSA3Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIExheWVycyA9IDg7CitzdGF0
aWMgY29uc3QgdW5zaWduZWQgTnVtYmVyT2ZDYXRlZ29yaWVzID0gOTsKIH0KIAogc3RydWN0IE1l
bW9yeUNhdGVnb3J5SW5mbyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29h
L1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29h
L1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KaW5kZXggNGY2MTRkYi4uOGM1NDE1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJs
YXlDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTYyLDYgKzE2Miw3IEBAIEhpc3RvcmljUmVzb3VyY2VVc2FnZURhdGE6Okhp
c3RvcmljUmVzb3VyY2VVc2FnZURhdGEoKQogewogICAgIC8vIFZNIHRhZyBjYXRlZ29yaWVzLgog
ICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkpTSklUXSA9IEhpc3RvcmljTWVtb3J5Q2F0
ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpKU0pJVCwgMHhGRkZGNjBGRiwgIkpTIEpJVCIpOwor
ICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OldlYkFzc2VtYmx5XSA9IEhpc3RvcmljTWVt
b3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpXZWJBc3NlbWJseSwgMHhGRjY1NEZGMCwg
IldlYkFzc2VtYmx5Iik7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6SW1hZ2VzXSA9
IEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpJbWFnZXMsIDB4RkZG
RkZGMDAsICJJbWFnZXMiKTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMYXllcnNd
ID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkxheWVycywgMHhG
RjAwRkZGRiwgIkxheWVycyIpOwogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkxpYmNN
YWxsb2NdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkxpYmNN
YWxsb2MsIDB4RkYwMEZGMDAsICJsaWJjIG1hbGxvYyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQppbmRleCAwNjRhNjFh
Li5hMzBlZjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNl
VXNhZ2VUaHJlYWRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291
cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsNiArODAsNyBAQCBjb25zdCBjaGFyKiBkaXNwbGF5
TmFtZUZvclZNVGFnKHVuc2lnbmVkIHRhZykKICAgICBjYXNlIFZNX01FTU9SWV9JTUFHRUlPOiBy
ZXR1cm4gIkltYWdlSU8iOwogICAgIGNhc2UgVk1fTUVNT1JZX0NHSU1BR0U6IHJldHVybiAiQ0cg
aW1hZ2UiOwogICAgIGNhc2UgVk1fTUVNT1JZX0pBVkFTQ1JJUFRfSklUX0VYRUNVVEFCTEVfQUxM
T0NBVE9SOiByZXR1cm4gIkpTQyBKSVQiOworICAgIGNhc2UgVk1fTUVNT1JZX0pBVkFTQ1JJUFRf
Q09SRTogcmV0dXJuICJXZWJBc3NlbWJseSI7CiAgICAgY2FzZSBWTV9NRU1PUllfTUFMTE9DOiBy
ZXR1cm4gIm1hbGxvYyI7CiAgICAgY2FzZSBWTV9NRU1PUllfTUFMTE9DX0hVR0U6IHJldHVybiAi
bWFsbG9jIChodWdlKSI7CiAgICAgY2FzZSBWTV9NRU1PUllfTUFMTE9DX0xBUkdFOiByZXR1cm4g
Im1hbGxvYyAobGFyZ2UpIjsKQEAgLTE4MSw2ICsxODIsOCBAQCBzdGF0aWMgdW5zaWduZWQgY2F0
ZWdvcnlGb3JWTVRhZyh1bnNpZ25lZCB0YWcpCiAgICAgICAgIHJldHVybiBNZW1vcnlDYXRlZ29y
eTo6SW1hZ2VzOwogICAgIGNhc2UgVk1fTUVNT1JZX0pBVkFTQ1JJUFRfSklUX0VYRUNVVEFCTEVf
QUxMT0NBVE9SOgogICAgICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdvcnk6OkpTSklUOworICAgIGNh
c2UgVk1fTUVNT1JZX0pBVkFTQ1JJUFRfQ09SRToKKyAgICAgICAgcmV0dXJuIE1lbW9yeUNhdGVn
b3J5OjpXZWJBc3NlbWJseTsKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0M6CiAgICAgY2FzZSBW
TV9NRU1PUllfTUFMTE9DX0hVR0U6CiAgICAgY2FzZSBWTV9NRU1PUllfTUFMTE9DX0xBUkdFOgpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9DaGFuZ2VMb2cgYi9XZWJzaXRlcy93ZWJr
aXQub3JnL0NoYW5nZUxvZwppbmRleCA2NTEwYjFkLi45ZGRjM2IxIDEwMDY0NAotLS0gYS9XZWJz
aXRlcy93ZWJraXQub3JnL0NoYW5nZUxvZworKysgYi9XZWJzaXRlcy93ZWJraXQub3JnL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE3LTA0LTExICBKRiBCYXN0aWVuICA8amZiYXN0aWVu
QGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogbWFuYWdlIG1lbW9yeSBiZXR0ZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDYyOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZG9jcy9i
My9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbDogdHlwb3MKKwogMjAxNy0wNC0wOCAg
U2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUg
dGhlIGNzcy1zdGF0dXMgcGFnZSB0byBoYW5kbGUgY2hhbmdlcyBpbiBDU1NQcm9wZXJ0aWVzLmpz
b24uCmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRl
LXJlcHJlc2VudGF0aW9uLmh0bWwgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJt
ZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwKaW5kZXggMjBiNTliNS4uMDQ3NDkzZSAxMDA2NDQK
LS0tIGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRh
dGlvbi5odG1sCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9pbnRlcm1lZGlhdGUt
cmVwcmVzZW50YXRpb24uaHRtbApAQCAtNjU0LDExICs2NTQsMTMgQEAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKAogICAgICAgPGRkPlNwZWNpYWwgV2FzbSBvcGNvZGUuIFRoaXMgYnJhbmNoZXMg
b24gdGhlIGZpcnN0IGNoaWxkLiBJZiB0aGUgZmlyc3QgY2hpbGQgcGx1cyB0aGUgb2Zmc2V0CiAg
ICAgICAgIHByb2R1Y2VzIGEgSW50NjQgbGVzcyB0aGFuIHRvIHRoZSBwaW5uZWRHUFIgdGhpcyBm
YWxscyB0aHJvdWdoLiBPdGhlcndpc2UsIGl0IGJyYW5jaGVzIHRvCiAgICAgICAgIHRoZSBleGl0
IHBhdGggZ2VuZXJhdGVkIGJ5IHRoZSBwYXNzZWQgZ2VuZXJhdG9yLiBVbmxpa2UgdGhlIFBhdGNo
L0NoZWNrIGZhbWlseSwgdGhlCi0gICAgICAgIGdlbmVyYXRvciB1c2VkIGJ5IFdhc21Cb3VuZHND
aGVjayBzb3VsZCBiZSBzZXQgb24gdGhlIFByb2N1ZGVyIGl0c2VsZi4gVGhlIEdSUFJlZyBwYXNz
ZWQgaW4KLSAgICAgICAgcGlubmVkR1BSIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgcGlubmVkIGJ5
IGNhbGxpbmcgdGhlIFByb2NlZHVyZSdzIHBpbm5pbmcgQVBJLiBCMyBhc3N1bWVzCi0gICAgICAg
IHRoZSBXYXNtQm91bmRzQ2hlY2sgd2lsbCBzaWRlLWV4aXQgd2hlbiB0aGUgaXQgYnJhbmNoZXMs
IHNvIHRoZSBnZW5lcmF0b3IgbXVzdCBkbyBzb21lIGtpbmQKLSAgICAgICAgb2YgdGVybWluYXRp
b24uIEluIFdhc20gdGhpcyBpcyB1c2VkIHRvIHRyYXAgYW5kIHVud2luZCBiYWNrIHRvIEpTLiBN
dXN0IHVzZSB0aGUKLSAgICAgICAgV2FzbUJvdW5kc0NoZWNrVmFsdWUgY2xhc3MuPC9kZD4KKyAg
ICAgICAgZ2VuZXJhdG9yIHVzZWQgYnkgV2FzbUJvdW5kc0NoZWNrIHNob3VsZCBiZSBzZXQgb24g
dGhlIFByb2NlZHVyZSBpdHNlbGYuIFRoZSBHUlBSZWcgcGFzc2VkIGluCisgICAgICAgIHBpbm5l
ZEdQUiBtdXN0IGFsc28gYmUgbWFya2VkIGFzIHBpbm5lZCBieSBjYWxsaW5nIHRoZSBQcm9jZWR1
cmUncyBwaW5uaW5nIEFQSSwgb3IgaXQgbXVzdCBiZQorICAgICAgICBJbnZhbGlkR1BSLCBpbiB3
aGljaCBjYXNlIHRoZSBvdXQtb2YtYm91bmRzIGxpbWl0IGlzIDRHaUIuIEluIHRoZSBsYXRlciBj
YXNlIGEgbWF4aW11bSBwYXJhbWV0ZXIKKyAgICAgICAgY2FuIGJlIHByb3ZpZGVkLCB0byBmdXJ0
aGVyIGNvbnN0cmFpbiB0aGUgb3V0LW9mLWJvdW5kcyBsaW1pdCBhbmQgaGVscCBnZW5lcmF0ZSBz
bWFsbGVyCisgICAgICAgIGltbWVkaWF0ZXMuIEIzIGFzc3VtZXMgdGhlIFdhc21Cb3VuZHNDaGVj
ayB3aWxsIHNpZGUtZXhpdCB3aGVuIGl0IGJyYW5jaGVzLCBzbyB0aGUgZ2VuZXJhdG9yCisgICAg
ICAgIG11c3QgZG8gc29tZSBraW5kIG9mIHRlcm1pbmF0aW9uLiBJbiBXYXNtIHRoaXMgaXMgdXNl
ZCB0byB0cmFwIGFuZCB1bndpbmQgYmFjayB0byBKUy4gTXVzdCB1c2UKKyAgICAgICAgdGhlIFdh
c21Cb3VuZHNDaGVja1ZhbHVlIGNsYXNzLjwvZGQ+CiAKICAgICAgIDxkdD5Wb2lkIFVwc2lsb24o
VCwgXnBoaSk8L2R0PgogICAgICAgPGRkPkIzIHVzZXMgU1NBLiAgU1NBIHJlcXVpcmVzIHRoYXQg
ZWFjaCB2YXJpYWJsZSBnZXRzIGFzc2lnbmVkIHRvIG9ubHkgb25jZSBhbnl3aGVyZSBpbgotLSAK
Mi4xMC4xCgo=
</data>
<flag name="commit-queue"
          id="328321"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307021</attachid>
            <date>2017-04-13 14:05:59 -0700</date>
            <delta_ts>2017-04-13 14:48:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-fast-memories-everywhere.patch</filename>
            <type>text/plain</type>
            <size>100398</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA4MmFmZDZmZmJhYzU5NzlmZTNiNDBlZjIzNjk4YjFkNjg1MDg1YzA5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDYgQXByIDIwMTcgMTU6MTQ6NDIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBmYXN0LW1l
bW9yaWVzLWV2ZXJ5d2hlcmUKCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMzAgKysKIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICstCiBKU1Rlc3RzL3dhc20vV0FTTS5qcyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMCArKwogLi4uL3dhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMgfCAxMzAgKysrKysrCiBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanMgICAgICAgICB8ICAxOCArCiBKU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQuanMgICB8IDExNyArKysrKwogSlNU
ZXN0cy93YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9kZS5qcyAgICAgICAgfCAgMTUgKwog
SlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYg
KwogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAx
NDUgKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgICAg
ICAgICAgfCAgMzQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcCAg
ICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAg
ICAgICAgICAgICAgICB8ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuY3BwICAgfCAgMjEgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dh
c21Cb3VuZHNDaGVja1ZhbHVlLmggIHwgIDE0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckN1c3RvbS5jcHAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwICAgICAgICAgICAgICAgIHwgIDMxICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmggICAgICAgICAgICAgICAgICB8ICAxMyArCiAuLi4vSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgICAgICAgICAgfCAgIDkgKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDYgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgIDQ2
ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCB8
ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAg
ICAgfCA0NzYgKysrKysrKysrKysrKystLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmggICAgICAgICAgICB8ICAyNSArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcCAgICAgICAgICAgICAgfCAgIDggKy0KIC4uLi9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgICAxICsKIC4uLi9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIHwgICA0ICsKIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIwICsKIFNvdXJjZS9X
VEYvd3RmL09TQWxsb2NhdG9yLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxIC0KIFNvdXJj
ZS9XVEYvd3RmL1ZNVGFncy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICstCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyNiAr
KwogU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAgICAgICAgICAgfCAg
IDMgKy0KIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuaCAgICAgICAgICAg
IHwgIDE1ICstCiAuLi4vcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tICAg
ICAgICB8ICAgMyArLQogLi4uL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFk
Q29jb2EubW0gfCAgIDUgKy0KIFdlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgIHwgICA5ICsKIC4uLi9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRh
dGlvbi5odG1sICAgICAgIHwgIDEyICstCiAzOCBmaWxlcyBjaGFuZ2VkLCAxMDk2IGluc2VydGlv
bnMoKyksIDIyNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFjY2Vzcy1wYXN0LTRnaWIuanMKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW1hbnkuanMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQu
anMKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDRhNjAwNjguLmNhZjE3MjggMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTctMDQtMTEgIEpGIEJhc3Rp
ZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBtYW5hZ2Ug
bWVtb3J5IGJldHRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwNjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLCBNaWNoYWVs
IFNhYm9mZi4KKworICAgICAgICAqIHdhc20vQnVpbGRlci5qczogbW92ZSBhIGhlbHBlciBvdXQg
c28gdGVzdHMgY2FuIHVzZSBpdAorICAgICAgICAoZXhwb3J0LmRlZmF1bHQuQnVpbGRlci5wcm90
b3R5cGUuX3JlZ2lzdGVyU2VjdGlvbkJ1aWxkZXJzLmNvbnN0LnNlY3Rpb24uaW4uV0FTTS5kZXNj
cmlwdGlvbi5zZWN0aW9uLnN3aXRjaC5zZWN0aW9uLmNhc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUu
dGhpcy5zZWN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dBU00uanM6IGFkZCB1dGlsaXRpZXMgdG8g
Y2xhc3NpZnkgb3Bjb2RlcworICAgICAgICAoZXhwb3J0Lm9wY29kZXMpOgorICAgICAgICAoZXhw
b3J0LmNvbnN0Lm1lbW9yeUFjY2Vzc0luZm8ub3AuY29uc3Quc2lnbik6CisgICAgICAgICogd2Fz
bS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWNjZXNzLXBhc3QtNGdpYi5qczogQWRkZWQuIFRoaXMg
dGVzdAorICAgICAgICBmYWlscyBiZWZvcmUgdGhpcyBwYXRjaC4KKyAgICAgICAgKGNvbnN0Lm9w
Lm9mLldBU00ub3Bjb2Rlcyk6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnkt
bWFueS5qczogQWRkZWQuIFRoaXMgc2ltcGxlIHRlc3RzCisgICAgICAgIGp1c3Qgc2hvdWxkbid0
IGNyYXNoLiBJbiB2ZXJib3NlIG1vZGUgaXQncyB1c2VmdWwgYXQgZGV0ZXJtaW5pbmcKKyAgICAg
ICAgaWYgdGhlIEdDIGZhbGxzIGJlaGluZCBvciBub3QuCisgICAgICAgICogd2FzbS9mdW5jdGlv
bi10ZXN0cy9tZW1vcnktbXVsdGlhZ2VudC5qczogQWRkZWQuIEVtdWxhdGUgcG9zdE1lc3NhZ2Uu
CisgICAgICAgIChjb25zdC5zdGFydEFnZW50cy5udW1BZ2VudHNUb1N0YXJ0LmEuYWdlbnQucmVj
ZWl2ZUJyb2FkY2FzdCk6CisgICAgICAgIChjb25zdC5zdGFydEFnZW50cy5udW1BZ2VudHNUb1N0
YXJ0LmEud3JpdGUuY29uc3QuaWR4Lk1hdGgucmFuZG9tKToKKyAgICAgICAgKGNvbnN0LmJyb2Fk
Y2FzdFRvQWdlbnRzKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9leHRlbnNpb24tTWVtb3J5TW9k
ZS5qczogdmVyYm9zZSBsb2dnaW5nLgorICAgICAgICAodGVzdE1lbW9yeU5vTWF4KToKKyAgICAg
ICAgKHRlc3RNZW1vcnkpOgorICAgICAgICAodGVzdEluc3RhbmNlTm9NZW1vcnkpOgorICAgICAg
ICAodGVzdEluc3RhbmNlTm9NYXgpOgorICAgICAgICAodGVzdEluc3RhbmNlKToKKyAgICAgICAg
KiB3YXNtL3V0aWxpdGllcy5qczogbW92ZSBhIHV0aWxpdHkgaGVyZS4KKwogMjAxNy0wNC0xMiAg
Sm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIHRlc3QyNjI6
IHRlc3QyNjIvdGVzdC9idWlsdC1pbnMvTmF0aXZlRXJyb3JzL0V2YWxFcnJvci9wcm90by5qcwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgYi9KU1Rlc3RzL3dhc20vQnVpbGRl
ci5qcwppbmRleCA4ZmY1ZGNlLi5kZWU3ODZkIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vQnVp
bGRlci5qcworKysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlci5qcwpAQCAtMjcsMTIgKzI3LDcgQEAg
aW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydC5qcyc7CiBpbXBvcnQgKiBhcyBCdWlsZFdl
YkFzc2VtYmx5IGZyb20gJ0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMnOwogaW1wb3J0ICog
YXMgTExCIGZyb20gJ0xvd0xldmVsQmluYXJ5LmpzJzsKIGltcG9ydCAqIGFzIFdBU00gZnJvbSAn
V0FTTS5qcyc7Ci0KLWNvbnN0IF90b0phdmFTY3JpcHROYW1lID0gbmFtZSA9PiB7Ci0gICAgY29u
c3QgY2FtZWxDYXNlID0gbmFtZS5yZXBsYWNlKC8oW15hLXowLTldLikvZywgYyA9PiBjWzFdLnRv
VXBwZXJDYXNlKCkpOwotICAgIGNvbnN0IENhbWVsQ2FzZSA9IGNhbWVsQ2FzZS5jaGFyQXQoMCku
dG9VcHBlckNhc2UoKSArIGNhbWVsQ2FzZS5zbGljZSgxKTsKLSAgICByZXR1cm4gQ2FtZWxDYXNl
OwotfTsKK2ltcG9ydCAqIGFzIHV0aWwgZnJvbSAndXRpbGl0aWVzLmpzJzsKIAogY29uc3QgX2lz
VmFsaWRWYWx1ZSA9ICh2YWx1ZSwgdHlwZSkgPT4gewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAt
MjI1LDcgKzIyMCw3IEBAIGNvbnN0IF9pbXBvcnRHbG9iYWxDb250aW51YXRpb24gPSAoYnVpbGRl
ciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKICAgICAgICAgICAgIEVuZDogKCkgPT4gbmV4
dEJ1aWxkZXIKICAgICAgICAgfTsKICAgICAgICAgZm9yIChsZXQgb3Agb2YgV0FTTS5kZXNjcmlw
dGlvbi52YWx1ZV90eXBlKSB7Ci0gICAgICAgICAgICBnbG9iYWxCdWlsZGVyW190b0phdmFTY3Jp
cHROYW1lKG9wKV0gPSAobW9kdWxlLCBmaWVsZCwgbXV0YWJpbGl0eSkgPT4geworICAgICAgICAg
ICAgZ2xvYmFsQnVpbGRlclt1dGlsLnRvSmF2YVNjcmlwdE5hbWUob3ApXSA9IChtb2R1bGUsIGZp
ZWxkLCBtdXRhYmlsaXR5KSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG1v
ZHVsZSwgYEltcG9ydCBnbG9iYWwgbW9kdWxlIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke21v
ZHVsZX0iYCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxkLCBgSW1wb3J0
IGdsb2JhbCBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CiAgICAg
ICAgICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG11dGFiaWxpdHksIGBJbXBvcnQgZ2xvYmFsIG11
dGFiaWxpdHkgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7bXV0YWJpbGl0eX0iYCk7CkBAIC0z
MTgsNyArMzEzLDcgQEAgY29uc3QgX2NoZWNrSW1tcyA9IChvcCwgaW1tcywgZXhwZWN0ZWRJbW1z
LCByZXQpID0+IHsKIGNvbnN0IF9jcmVhdGVGdW5jdGlvbkJ1aWxkZXIgPSAoZnVuYywgYnVpbGRl
ciwgcHJldmlvdXNCdWlsZGVyKSA9PiB7CiAgICAgbGV0IGZ1bmN0aW9uQnVpbGRlciA9IHt9Owog
ICAgIGZvciAoY29uc3Qgb3AgaW4gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGUpIHsKLSAgICAgICAg
Y29uc3QgbmFtZSA9IF90b0phdmFTY3JpcHROYW1lKG9wKTsKKyAgICAgICAgY29uc3QgbmFtZSA9
IHV0aWwudG9KYXZhU2NyaXB0TmFtZShvcCk7CiAgICAgICAgIGNvbnN0IHZhbHVlID0gV0FTTS5k
ZXNjcmlwdGlvbi5vcGNvZGVbb3BdLnZhbHVlOwogICAgICAgICBjb25zdCByZXQgPSBXQVNNLmRl
c2NyaXB0aW9uLm9wY29kZVtvcF1bInJldHVybiJdOwogICAgICAgICBjb25zdCBwYXJhbSA9IFdB
U00uZGVzY3JpcHRpb24ub3Bjb2RlW29wXS5wYXJhbWV0ZXI7CkBAIC01NDIsNyArNTM3LDcgQEAg
ZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG9w
IG9mIFdBU00uZGVzY3JpcHRpb24udmFsdWVfdHlwZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZ2xvYmFsQnVpbGRlcltfdG9KYXZhU2NyaXB0TmFtZShvcCldID0gKGluaXRWYWx1ZSwgbXV0
YWJpbGl0eSkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsQnVpbGRlclt1dGls
LnRvSmF2YVNjcmlwdE5hbWUob3ApXSA9IChpbml0VmFsdWUsIG11dGFiaWxpdHkpID0+IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzLmRhdGEucHVzaCh7IHR5cGU6IG9wLCBvcDogb3Ag
KyAiLmNvbnN0IiwgbXV0YWJpbGl0eTogX25vcm1hbGl6ZU11dGFiaWxpdHkobXV0YWJpbGl0eSks
IGluaXRWYWx1ZSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vycm9y
SGFuZGxpbmdQcm94eUZvcihnbG9iYWxCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH07CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vV0FTTS5qcyBiL0pTVGVzdHMvd2FzbS9XQVNN
LmpzCmluZGV4IDFiYjc5YjguLjFlNjRjYWUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9XQVNN
LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9XQVNNLmpzCkBAIC00NCwzICs0NCwzMyBAQCBleHBvcnQg
Y29uc3QgaXNWYWxpZEJsb2NrVHlwZSA9IHYgPT4gX2Jsb2NrVHlwZVNldC5oYXModik7CiBleHBv
cnQgY29uc3QgZXh0ZXJuYWxLaW5kVmFsdWUgPSBfbWFwVmFsdWVzKGRlc2NyaXB0aW9uLmV4dGVy
bmFsX2tpbmQpOwogZXhwb3J0IGNvbnN0IHNlY3Rpb25zID0gT2JqZWN0LmtleXMoZGVzY3JpcHRp
b24uc2VjdGlvbik7CiBleHBvcnQgY29uc3Qgc2VjdGlvbkVuY29kaW5nVHlwZSA9IGRlc2NyaXB0
aW9uLnNlY3Rpb25bc2VjdGlvbnNbMF1dLnR5cGU7CisKK2V4cG9ydCBmdW5jdGlvbiogb3Bjb2Rl
cyhjYXRlZ29yeSA9IHVuZGVmaW5lZCkgeworICAgIGZvciAobGV0IG9wIGluIGRlc2NyaXB0aW9u
Lm9wY29kZSkKKyAgICAgICAgaWYgKGNhdGVnb3J5ICE9PSB1bmRlZmluZWQgJiYgZGVzY3JpcHRp
b24ub3Bjb2RlW29wXS5jYXRlZ29yeSA9PT0gY2F0ZWdvcnkpCisgICAgICAgICAgICB5aWVsZCB7
IG5hbWU6IG9wLCBvcGNvZGU6IGRlc2NyaXB0aW9uLm9wY29kZVtvcF0gfTsKK307CitleHBvcnQg
Y29uc3QgbWVtb3J5QWNjZXNzSW5mbyA9IG9wID0+IHsKKyAgICAvLyAgICAgICAgICAgICAgICA8
LS0tLS0tLS0tLS12YWx1ZVR5cGUtLS0tLS0tLS0tLT4gIDwtLS0tLS0tdHlwZS0tLS0tLS0+PC0t
LS0tLS0tLXdpZHRoLS0tLS0tLS0+ICA8LS1zaWduLS0+CisgICAgY29uc3QgY2xhc3NpZnkgPSAv
KCg/OmkzMil8KD86aTY0KXwoPzpmMzIpfCg/OmY2NCkpXC4oKD86bG9hZCl8KD86c3RvcmUpKSgo
Pzo4KT98KD86MTYpP3woPzozMik/KV8/KCg/OnN8dSk/KS87CisgICAgY29uc3QgZm91bmQgPSBv
cC5uYW1lLm1hdGNoKGNsYXNzaWZ5KTsKKyAgICBjb25zdCB2YWx1ZVR5cGUgPSBmb3VuZFsxXTsK
KyAgICBjb25zdCB0eXBlID0gZm91bmRbMl07CisgICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChm
b3VuZFszXSA/IGZvdW5kWzNdIDogdmFsdWVUeXBlLnNsaWNlKDEpKTsKKyAgICBjb25zdCBzaWdu
ID0gKCgpID0+IHsKKyAgICAgICAgc3dpdGNoIChmb3VuZFs0XSkgeworICAgICAgICBjYXNlICJz
IjogcmV0dXJuICJzaWduZWQiOworICAgICAgICBjYXNlICJ1IjogcmV0dXJuICJ1bnNpZ25lZCI7
CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiAiYWdub3N0aWMiOworICAgICAgICB9CisgICAgfSko
KTsKKyAgICByZXR1cm4geyB2YWx1ZVR5cGUsIHR5cGUsIHdpZHRoLCBzaWduIH07Cit9OworCitl
eHBvcnQgY29uc3QgY29uc3RGb3JWYWx1ZVR5cGUgPSB2YWx1ZVR5cGUgPT4geworICAgIGZvciAo
bGV0IG9wIGluIGRlc2NyaXB0aW9uLm9wY29kZSkKKyAgICAgICAgaWYgKG9wLmVuZHNXaXRoKCIu
Y29uc3QiKSAmJiBkZXNjcmlwdGlvbi5vcGNvZGVbb3BdWyJyZXR1cm4iXSA9PSB2YWx1ZVR5cGUp
CisgICAgICAgICAgICByZXR1cm4gb3A7CisgICAgdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRh
dGlvbiBwcm9ibGVtOiBubyBjb25zdCB0eXBlIGZvciAke3ZhbHVlVHlwZX1gKTsKK307CisKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWNjZXNzLXBhc3Qt
NGdpYi5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWNjZXNzLXBhc3Qt
NGdpYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWE1ZjAzCi0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1hY2Nlc3Mt
cGFzdC00Z2liLmpzCkBAIC0wLDAgKzEsMTMwIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9C
dWlsZGVyLmpzJzsKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOworaW1w
b3J0ICogYXMgTExCIGZyb20gJy4uL0xvd0xldmVsQmluYXJ5LmpzJzsKK2ltcG9ydCAqIGFzIFdB
U00gZnJvbSAnLi4vV0FTTS5qcyc7CitpbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWxpdGll
cy5qcyc7CisKK2NvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKworY29uc3QgcGFnZVNpemUgPSA2NCAq
IDEwMjQ7Citjb25zdCBmb3VyR2lCID0gcGFnZVNpemUgKiA2NTUzNjsKK2NvbnN0IGluaXRpYWwg
PSA2NDsKK2NvbnN0IG1heGltdW0gPSAxMjg7CisKKy8vIFdoZW4gdXNpbmcgZmFzdCBtZW1vcmll
cywgd2UgYWxsb2NhdGUgYSByZWR6b25lIGFmdGVyIHRoZSA0R2lCIGh1Z2UKKy8vIGFsbG9jYXRp
b24uIFRoaXMgcmVkem9uZSBpcyB1c2VkIHRvIHRyYXAgcmVnK2ltbSBhY2Nlc3NlcyB3aGljaCBl
eGNlZWQKKy8vIDMyLWJpdHMuIEFueXRoaW5nIHBhc3QgNEdpQiBtdXN0IHRyYXAsIGJ1dCB3ZSBj
YW5ub3Qga25vdyBzdGF0aWNhbGx5IHRoYXQgaXQKKy8vIHdpbGwuCisKK2NvbnN0IG9mZnNldHMg
PSBbCisgICAgMCwKKyAgICAxLAorICAgIDIsCisgICAgMTAyNCwKKyAgICBwYWdlU2l6ZSwKKyAg
ICBwYWdlU2l6ZSArIHBhZ2VTaXplIC8gMiwKKyAgICBwYWdlU2l6ZSAqIDgsCisgICAgcGFnZVNp
emUgKiAxNiwKKyAgICBwYWdlU2l6ZSAqIDEyOCwKKyAgICBwYWdlU2l6ZSAqIDUxMiwKKyAgICBm
b3VyR2lCIC8gNCAtIDQsCisgICAgZm91ckdpQiAvIDQgLSAzLAorICAgIGZvdXJHaUIgLyA0IC0g
MiwKKyAgICBmb3VyR2lCIC8gNCAtIDEsCisgICAgZm91ckdpQiAvIDQsCisgICAgZm91ckdpQiAv
IDQgKyAxLAorICAgIGZvdXJHaUIgLyA0ICsgMiwKKyAgICBmb3VyR2lCIC8gNCArIDMsCisgICAg
Zm91ckdpQiAvIDQgKyA0LAorICAgIGZvdXJHaUIgLyAyIC0gNCwKKyAgICBmb3VyR2lCIC8gMiAt
IDMsCisgICAgZm91ckdpQiAvIDIgLSAyLAorICAgIGZvdXJHaUIgLyAyIC0gMSwKKyAgICBmb3Vy
R2lCIC8gMiwKKyAgICBmb3VyR2lCIC8gMiArIDEsCisgICAgZm91ckdpQiAvIDIgKyAyLAorICAg
IGZvdXJHaUIgLyAyICsgMywKKyAgICBmb3VyR2lCIC8gMiArIDQsCisgICAgKGZvdXJHaUIgLyA0
KSAqIDMsCisgICAgZm91ckdpQiAtIDQsCisgICAgZm91ckdpQiAtIDMsCisgICAgZm91ckdpQiAt
IDIsCisgICAgZm91ckdpQiAtIDEsCitdOworCitmb3IgKGxldCBtZW1vcnlEZWNsYXJhdGlvbiBv
ZiBbeyBpbml0aWFsOiBpbml0aWFsIH0sIHsgaW5pdGlhbDogaW5pdGlhbCwgbWF4aW11bTogbWF4
aW11bSB9XSkgeworICAgIGZ1bGxHQygpOworCisgICAgLy8gUmUtdXNlIGEgc2luZ2xlIG1lbW9y
eSBzbyB0ZXN0cyBhcmUgbW9yZSBsaWtlbHkgdG8gZ2V0IGEgZmFzdCBtZW1vcnkuCisgICAgY29u
c3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZWNsYXJhdGlvbik7Cisg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KFdlYkFzc2VtYmx5TWVtb3J5TW9kZShtZW1v
cnkpKTsKKyAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShtZW1vcnkuYnVmZmVyKTsKKwor
ICAgIC8vIEVudW1lcmF0ZSBhbGwgbWVtb3J5IGFjY2VzcyB0eXBlcy4KKyAgICBmb3IgKGNvbnN0
IG9wIG9mIFdBU00ub3Bjb2RlcygibWVtb3J5IikpIHsKKyAgICAgICAgY29uc3QgaW5mbyA9IFdB
U00ubWVtb3J5QWNjZXNzSW5mbyhvcCk7CisKKyAgICAgICAgLy8gVGhlIGFjY2Vzc2VzIHNob3Vs
ZCBmYXVsdCBldmVuIGlmIG9ubHkgdGhlIGxhc3QgYnl0ZSBpcyBvZmYgdGhlIGVuZC4KKyAgICAg
ICAgbGV0IHdpZ2dsZXMgPSBbMF07CisgICAgICAgIGZvciAobGV0IHdpZ2dsZSA9IDA7IHdpZ2ds
ZSAhPT0gaW5mby53aWR0aCAvIDg7ICsrd2lnZ2xlKQorICAgICAgICAgICAgd2lnZ2xlcy5wdXNo
KHdpZ2dsZSk7CisKKyAgICAgICAgbGV0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAg
ICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIs
ICJtZW1vcnkiLCBtZW1vcnlEZWNsYXJhdGlvbikuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCk7CisKKyAgICAgICAgZm9yIChsZXQgb2Zm
c2V0IG9mIG9mZnNldHMpCisgICAgICAgICAgICBzd2l0Y2ggKGluZm8udHlwZSkgeworICAgICAg
ICAgICAgY2FzZSAibG9hZCI6IGJ1aWxkZXIgPSBidWlsZGVyLkZ1bmN0aW9uKCJnZXRfIiArIG9m
ZnNldCk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAic3RvcmUiOiBidWlsZGVyID0gYnVpbGRl
ci5GdW5jdGlvbigic2V0XyIgKyBvZmZzZXQpOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogdW5rbm93biBtZW1vcnkg
YWNjZXNzIHR5cGUgJHtpbmZvLnR5cGV9YCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgYnVp
bGRlciA9IGJ1aWxkZXIuRW5kKCkuQ29kZSgpOworCisgICAgICAgIGNvbnN0IGFsaWduID0gMzsg
Ly8gTm8gbmVlZCB0byBiZSBwcmVjaXNlLCBpdCdzIGp1c3QgYSBoaW50LgorICAgICAgICBjb25z
dCBjb25zdEluc3RyID0gdXRpbC50b0phdmFTY3JpcHROYW1lKFdBU00uY29uc3RGb3JWYWx1ZVR5
cGUoaW5mby52YWx1ZVR5cGUpKTsKKyAgICAgICAgY29uc3QgaW5zdHIgPSB1dGlsLnRvSmF2YVNj
cmlwdE5hbWUob3AubmFtZSk7CisgICAgICAgIGZvciAobGV0IG9mZnNldCBvZiBvZmZzZXRzKQor
ICAgICAgICAgICAgc3dpdGNoIChpbmZvLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgImxvYWQi
OgorICAgICAgICAgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLkZ1bmN0aW9uKCJnZXRfIiArIG9m
ZnNldCwgeyBwYXJhbXM6IFsiaTMyIl0gfSkuR2V0TG9jYWwoMClbaW5zdHJdKGFsaWduLCBvZmZz
ZXQpLkRyb3AoKS5FbmQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgInN0b3JlIjoKKyAgICAgICAgICAgICAgICBidWlsZGVyID0gYnVpbGRlci5GdW5jdGlvbigi
c2V0XyIgKyBvZmZzZXQsIHsgcGFyYW1zOiBbImkzMiJdIH0pLkdldExvY2FsKDApW2NvbnN0SW5z
dHJdKDB4ZGVhZClbaW5zdHJdKGFsaWduLCBvZmZzZXQpLkVuZCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVua25vd24gbWVtb3J5IGFjY2VzcyB0eXBl
ICR7aW5mby50eXBlfWApOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYnVpbGRl
ciA9IGJ1aWxkZXIuRW5kKCk7CisKKyAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpLCB7IGltcDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pOworCisgICAgICAgIGZvciAo
bGV0IG9mZnNldCBvZiBvZmZzZXRzKSB7CisgICAgICAgICAgICBmb3IgKGxldCB3aWdnbGUgb2Yg
d2lnZ2xlcykgeworICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBMTEIudmFydWludDMy
TWF4IC0gb2Zmc2V0IC0gd2lnZ2xlOworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICBwcmludChgJHtvcC5uYW1lLnBhZFN0YXJ0KDE2LCAnICcpfTogYmFz
ZSBhZGRyZXNzICR7YWRkcmVzcyA+IDAgPyAnMHgnIDogJyAgJ30ke2FkZHJlc3MudG9TdHJpbmco
MTYpLnBhZFN0YXJ0KDgsIGFkZHJlc3MgPiAwID8gJzAnIDogJyAnKX0gKyBvZmZzZXQgMHgke29m
ZnNldC50b1N0cmluZygxNikucGFkU3RhcnQoOCwgJzAnKX0gLSB3aWdnbGUgJHt3aWdnbGV9ID0g
ZWZmZWN0aXZlIGFkZHJlc3MgMHgkeyhhZGRyZXNzICsgb2Zmc2V0IC0gd2lnZ2xlKS50b1N0cmlu
ZygxNikucGFkU3RhcnQoMTYsICcwJyl9YCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChpbmZv
LnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlICJsb2FkIjoKKyAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzWyJnZXRfIiArIG9mZnNldF0o
YWRkcmVzcyksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgYE91dCBvZiBib3VuZHMgbWVtb3J5
IGFjY2Vzc2ApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlICJzdG9yZSI6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW5z
dGFuY2UuZXhwb3J0c1sic2V0XyIgKyBvZmZzZXRdKGFkZHJlc3MpLCBXZWJBc3NlbWJseS5SdW50
aW1lRXJyb3IsIGBPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3NgKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJ
bXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmtub3duIG1lbW9yeSBhY2Nlc3MgdHlwZSAke2luZm8u
dHlwZX1gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBmdWxsR0MoKTsKKyAgICB9CisKKyAgICAvLyBPbmx5IGNoZWNrIHRoYXQgdGhlIG1l
bW9yeSB3YXMgdW50b3VjaGVkIGF0IHRoZSB2ZXJ5IGVuZCwgYmVmb3JlIHRocm93aW5nIGl0IGF3
YXkgZW50aXJlbHkuCisgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgYnVmLmJ5dGVMZW5ndGg7
ICsraWR4KQorICAgICAgICBhc3NlcnQuZXEoYnVmW2lkeF0sIDApOworfQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1tYW55LmpzIGIvSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1tYW55LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJhNDNjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvbWVtb3J5LW1hbnkuanMKQEAgLTAsMCArMSwxOCBAQAorY29uc3QgbWVtb3JpZXMg
PSAxMjg7Citjb25zdCB2ZXJib3NlID0gZmFsc2U7Citjb25zdCBpbml0aWFsID0gMTsKKworbGV0
IHR5cGVzID0ge307CisKK2ZvciAobGV0IG0gPSAwOyBtIDwgbWVtb3JpZXM7ICsrbSkgeworICAg
IGxldCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogaW5pdGlhbCB9
KTsKKyAgICBsZXQgdHlwZSA9IFdlYkFzc2VtYmx5TWVtb3J5TW9kZShtZW1vcnkpOworICAgIHR5
cGVzW3R5cGVdID0gdHlwZXNbdHlwZV0gPyB0eXBlc1t0eXBlXSArIDEgOiAxOworfQorCitpZiAo
dmVyYm9zZSkgeworICAgIGxldCBnb3QgPSAiR290OiAiOworICAgIGZvciAobGV0IHAgaW4gdHlw
ZXMpCisgICAgICAgIGdvdCArPSBgICR7dHlwZXNbcF19OiAke3B9YDsKKyAgICBwcmludChnb3Qp
OworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1tdWx0
aWFnZW50LmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1tdWx0aWFnZW50
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYjJkMzQKLS0tIC9kZXYv
bnVsbAorKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LW11bHRpYWdlbnQu
anMKQEAgLTAsMCArMSwxMTcgQEAKK2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0OworCitjb25z
dCB2ZXJib3NlID0gZmFsc2U7CisKKy8vIFN0YXJ0IG11bHRpcGxlIGFnZW50cyBhbmQgY3JlYXRl
IFdlYkFzc2VtYmx5Lk1lbW9yeSBmcm9tIGVhY2ggb2YKKy8vIHRoZW0uIFBlcmZvcm0gd3JpdGVz
IGludG8gZWFjaCBtZW1vcnksIGFuZCB0aGVuIGNoZWNrIHRoYXQgdGhlIG1lbW9yeSBvbmx5Cisv
LyBjb250YWlucyB0aGF0IGFnZW50J3Mgd3JpdGVzLiBUaGlzIHdvdWxkIGZpbmQgYnVncyB3aGVy
ZSBhbiBpbXBsZW1lbnRhdGlvbidzCisvLyBtZW1vcnkgcmV1c2UgaXMgYnVnZ3kuCisKKy8vIFVz
ZSB0aGUgYWdlbnQgc3VwcG9ydCBmcm9tIHRlc3QyNjI6IGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5
L3Rlc3QyNjIvYmxvYi9tYXN0ZXIvSU5URVJQUkVUSU5HLm1kI2hvc3QtZGVmaW5lZC1mdW5jdGlv
bnMKKworY29uc3QgdGVzdEl0ZXJhdGlvbnMgPSAyOworY29uc3QgbnVtQWdlbnRzID0gODsKK2Nv
bnN0IGluaXRpYWxQYWdlcyA9IDY0OworY29uc3QgbnVtV3JpdGVzID0gMTAyNDsKKworY29uc3Qg
c3RhdGVXYWl0ID0gMDsKK2NvbnN0IHN0YXRlUmVhZHkgPSAxOworY29uc3Qgc3RhdGVDaGVjayA9
IDI7CisKK2NvbnN0IHN0YXJ0QWdlbnRzID0gbnVtQWdlbnRzVG9TdGFydCA9PiB7CisgICAgZm9y
IChsZXQgYSA9IDA7IGEgPCBudW1BZ2VudHNUb1N0YXJ0OyArK2EpIHsKKyAgICAgICAgY29uc3Qg
YWdlbnRTY3JpcHQgPSBgCisgICAgICAgIGxldCBzdGF0ZSA9ICR7c3RhdGVXYWl0fTsKKyAgICAg
ICAgbGV0IHU4OworCisgICAgICAgIGlmICgke3ZlcmJvc2V9KQorICAgICAgICAgICAgcHJpbnQo
IkFnZW50ICR7YX0gc3RhcnRlZCIpOworICAgICAgICAkLmFnZW50LnJlcG9ydCgiQWdlbnQgJHth
fSBzdGFydGVkIik7CisKKyAgICAgICAgJC5hZ2VudC5yZWNlaXZlQnJvYWRjYXN0KChzYWIsIG5l
d1N0YXRlKSA9PiB7CisgICAgICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAgICAgICAg
ICBwcmludCgiQWdlbnQgJHthfSByZWNlaXZlZCBicm9hZGNhc3QiKTsKKyAgICAgICAgICAgIHU4
ID0gbmV3IFVpbnQ4QXJyYXkoc2FiKTsKKyAgICAgICAgICAgIHN0YXRlID0gbmV3U3RhdGU7Cisg
ICAgICAgIH0pOworCisgICAgICAgIGNvbnN0IGJ1c3lXYWl0Rm9yVmFsdWUgPSB2YWx1ZSA9PiB7
CisgICAgICAgICAgICAvLyBCdXN5LXdhaXQgc28gdGhhdCBvbmNlIHRoZSBTQUIgd3JpdGUgb2Nj
dXJzIGFsbCBhZ2VudHMgdHJ5IHRvIGNyZWF0ZSBhIG1lbW9yeSBhdCB0aGUgc2FtZSB0aW1lLgor
ICAgICAgICAgICAgd2hpbGUgKEF0b21pY3MubG9hZCh1OCwgMCkgIT09IHZhbHVlKSA7CisgICAg
ICAgIH07CisKKyAgICAgICAgaWYgKCR7dmVyYm9zZX0pCisgICAgICAgICAgICBwcmludCgiQWdl
bnQgJHthfSB3YWl0cyIpOworICAgICAgICAkLmFnZW50LnJlcG9ydCgiQWdlbnQgJHthfSB3YWl0
cyIpOworICAgICAgICB3aGlsZSAoc3RhdGUgPT09ICR7c3RhdGVXYWl0fSkgOworICAgICAgICAk
LmFnZW50LnJlcG9ydCgiQWdlbnQgJHthfSByZWNlaXZlZCBTQUIiKTsKKyAgICAgICAgLy8gVXNl
IGl0IGZvciBmYXN0ZXIgc3RhdGUgY2hhbmdlIHNvIGFsbCBhZ2VudHMgYXJlIG1vcmUgbGlrZWx5
IHRvIGV4ZWN1dGUgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgYnVzeVdhaXRGb3JWYWx1ZSgk
e3N0YXRlUmVhZHl9KTsKKworICAgICAgICBsZXQgd2FzbU1lbW9yeSA9IG5ldyBXZWJBc3NlbWJs
eS5NZW1vcnkoeyBpbml0aWFsOiAke2luaXRpYWxQYWdlc30gfSk7CisgICAgICAgIGxldCBtZW1v
cnkgPSBuZXcgVWludDhBcnJheSgod2FzbU1lbW9yeSkuYnVmZmVyKTsKKyAgICAgICAgaWYgKCR7
dmVyYm9zZX0pCisgICAgICAgICAgICBwcmludCgiQWdlbnQgJHthfSBwZXJmb3JtaW5nIHdyaXRl
cyIpOworICAgICAgICBmb3IgKGxldCB3cml0ZSA9IDA7IHdyaXRlIDwgJHtudW1Xcml0ZXN9OyAr
K3dyaXRlKSB7CisgICAgICAgICAgICAvLyBQZXJmb3JtIHdyaXRlcyBvZiBvdXIgYWdlbnQgbnVt
YmVyIGF0IGEgcmFuZG9tIGxvY2F0aW9uLiBUaGlzIG1lbW9yeSBzaG91bGQgbm90IGJlIHNoYXJl
ZCwgaWYgd2Ugc2VlIHdyaXRlcyBvZiBvdGhlciB2YWx1ZXMgdGhlbiBzb21ldGhpbmcgd2VudCB3
cm9uZy4KKyAgICAgICAgICAgIGNvbnN0IGlkeCA9IChNYXRoLnJhbmRvbSgpICogJHtwYWdlU2l6
ZX0gKiAke2luaXRpYWxQYWdlc30pIHwgMDsKKyAgICAgICAgICAgIG1lbW9yeVtpZHhdID0gJHth
fTsKKyAgICAgICAgfQorICAgICAgICBpZiAoJHt2ZXJib3NlfSkKKyAgICAgICAgICAgIHByaW50
KCJBZ2VudCAke2F9IHdyaXRlcyBwZXJmb3JtZWQiKTsKKyAgICAgICAgJC5hZ2VudC5yZXBvcnQo
IkFnZW50ICR7YX0gcGVyZm9ybWVkIHdyaXRlcyIpOworICAgICAgICBidXN5V2FpdEZvclZhbHVl
KCR7c3RhdGVDaGVja30pOworCisgICAgICAgIGlmICgke3ZlcmJvc2V9KQorICAgICAgICAgICAg
cHJpbnQoIkFnZW50ICR7YX0gY2hlY2tpbmciKTsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBvdXIg
bWVtb3J5IG9ubHkgY29udGFpbnMgMCBhbmQgb3VyIGFnZW50IG51bWJlci4KKyAgICAgICAgZm9y
IChsZXQgaWR4ID0gMDsgaWR4IDwgJHtwYWdlU2l6ZX0gKiAke2luaXRpYWxQYWdlc307ICsraWR4
KQorICAgICAgICAgICAgaWYgKG1lbW9yeVtpZHhdICE9PSAwICYmIG1lbW9yeVtpZHhdICE9PSAk
e2F9KQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWdlbnQgJHthfSBmb3VuZCB1
bmV4cGVjdGVkIHZhbHVlICIgKyBtZW1vcnlbaWR4XSArICIgYXQgbG9jYXRpb24gIiArIGlkeCk7
CisgICAgICAgICQuYWdlbnQucmVwb3J0KCJBZ2VudCAke2F9IGNoZWNrcyBvdXQgT0siKTsKKyAg
ICAgICAgJC5hZ2VudC5sZWF2aW5nKCk7CisgICAgICAgIGA7CisKKyAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBwcmludChgU3RhcnRpbmcgYWdlbnQgJHthfWApOworICAgICAgICAk
LmFnZW50LnN0YXJ0KGFnZW50U2NyaXB0KTsKKyAgICB9Cit9OworCitjb25zdCB3YWl0Rm9yQWdl
bnRzID0gbnVtQWdlbnRzVG9XYWl0Rm9yID0+IHsKKyAgICBmb3IgKGxldCBhID0gMDsgYSA8IG51
bUFnZW50c1RvV2FpdEZvcjsgKythKSB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICBjb25zdCByZXBvcnQgPSAkLmFnZW50LmdldFJlcG9ydCgpOworICAgICAgICAgICAgaWYg
KHJlcG9ydCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICQuYWdlbnQuc2xlZXAoMSk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBwcmludChgUmVjZWl2ZWQ6ICR7cmVwb3J0fWApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9OworCitjb25zdCBicm9hZGNh
c3RUb0FnZW50cyA9IChzYWIsIG5ld1N0YXRlKSA9PiB7CisgICAgJC5hZ2VudC5icm9hZGNhc3Qo
c2FiLCBuZXdTdGF0ZSk7Cit9OworCitjb25zdCBzYWIgPSBuZXcgU2hhcmVkQXJyYXlCdWZmZXIo
MTAyNCk7Citjb25zdCB1OCA9IG5ldyBVaW50OEFycmF5KHNhYik7CisKK2ZvciAobGV0IGl0ID0g
MDsgaXQgPCB0ZXN0SXRlcmF0aW9uczsgKytpdCkgeworICAgIHN0YXJ0QWdlbnRzKG51bUFnZW50
cyk7CisgICAgd2FpdEZvckFnZW50cyhudW1BZ2VudHMpOworICAgIGJyb2FkY2FzdFRvQWdlbnRz
KHNhYiwgc3RhdGVSZWFkeSk7CisgICAgd2FpdEZvckFnZW50cyhudW1BZ2VudHMpOworICAgICQu
YWdlbnQuc2xlZXAoMSk7CisgICAgQXRvbWljcy5zdG9yZSh1OCwgMCwgc3RhdGVSZWFkeSk7Cisg
ICAgd2FpdEZvckFnZW50cyhudW1BZ2VudHMpOworICAgICQuYWdlbnQuc2xlZXAoMSk7CisgICAg
QXRvbWljcy5zdG9yZSh1OCwgMCwgc3RhdGVDaGVjayk7CisgICAgd2FpdEZvckFnZW50cyhudW1B
Z2VudHMpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludCgiRXZlcnl0aW5nIHdhcyBm
aW5lIik7CisgICAgJC5hZ2VudC5zbGVlcCgxKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2V4
dGVuc2lvbi1NZW1vcnlNb2RlLmpzCmluZGV4IDkxOTFjZWM0Li41NjA4NTI2IDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3dhc20vanMtYXBpL2V4dGVuc2lvbi1NZW1vcnlNb2RlLmpzCisrKyBiL0pTVGVz
dHMvd2FzbS9qcy1hcGkvZXh0ZW5zaW9uLU1lbW9yeU1vZGUuanMKQEAgLTIsNiArMiw3IEBAIGlt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogaW1wb3J0ICogYXMgYXNzZXJ0IGZy
b20gJy4uL2Fzc2VydC5qcyc7CiAKIGNvbnN0IGl0ZXJhdGlvbnMgPSAzMjsKK2NvbnN0IHZlcmJv
c2UgPSBmYWxzZTsKIAogLy8gVGhpcyBBUEkgaXNuJ3QgcGFydCBvZiBXZWJBc3NlbWJseSdzIG9m
ZmljaWFsIHNwZWMuIEl0IGlzIHVzZSBmb3IgdGVzdGluZyB3aXRoaW4gdGhlIHNoZWxsLgogCkBA
IC0yMSw2ICsyMiw4IEBAIGFzc2VydC50aHJvd3MoKCkgPT4gV2ViQXNzZW1ibHlNZW1vcnlNb2Rl
KG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDogMSwgZWxlCiAKIGNvbnN0IHZhbGlkYXRl
TW9kZSA9IHdoYXQgPT4gewogICAgIGNvbnN0IG1vZGUgPSBXZWJBc3NlbWJseU1lbW9yeU1vZGUo
d2hhdCk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KGAgICAgJHttb2RlfWApOwog
ICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgIlNpZ25hbGluZyI6CiAgICAgICAgIGJyZWFr
OwpAQCAtMzksNiArNDIsOCBAQCBjb25zdCBpbnN0YW50aWF0ZSA9IGJ1aWxkZXIgPT4gewogfTsK
IAogKGZ1bmN0aW9uIHRlc3RNZW1vcnlOb01heCgpIHsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgcHJpbnQoYHRlc3RNZW1vcnlOb01heGApOwogICAgIGxldCBtZW1vcmllcyA9IFtdOwogICAg
IGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlvbnM7ICsraSkKICAgICAgICAgbWVtb3JpZXMu
cHVzaCh2YWxpZGF0ZU1vZGUobmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6IGkgfSkp
KTsKQEAgLTQ4LDYgKzUzLDggQEAgY29uc3QgaW5zdGFudGlhdGUgPSBidWlsZGVyID0+IHsKIGZ1
bGxHQygpOwogCiAoZnVuY3Rpb24gdGVzdE1lbW9yeSgpIHsKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgcHJpbnQoYHRlc3RNZW1vcnlgKTsKICAgICBsZXQgbWVtb3JpZXMgPSBbXTsKICAgICBm
b3IgKGxldCBpID0gMDsgaSAhPSBpdGVyYXRpb25zOyArK2kpCiAgICAgICAgIG1lbW9yaWVzLnB1
c2godmFsaWRhdGVNb2RlKG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiBpLCBtYXhp
bXVtOiBpIH0pKSk7CkBAIC01Nyw2ICs2NCw4IEBAIGZ1bGxHQygpOwogZnVsbEdDKCk7CiAKIChm
dW5jdGlvbiB0ZXN0SW5zdGFuY2VOb01lbW9yeSgpIHsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgcHJpbnQoYHRlc3RJbnN0YW5jZU5vTWVtb3J5YCk7CiAgICAgbGV0IGluc3RhbmNlcyA9IFtd
OwogICAgIGZvciAobGV0IGkgPSAwOyBpICE9IGl0ZXJhdGlvbnM7ICsraSkgewogICAgICAgICBj
b25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCkBAIC02Niw2ICs3NSw4IEBAIGZ1bGxHQygp
OwogICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbnRpYXRlKGJ1aWxkZXIpOwogICAgICAg
ICAvLyBOby1tZW1vcnkgaW5zdGFuY2VzIHNob3VsZCBuZXZlciBiZSBTaWduYWxpbmc6IGl0IHdv
dWxkIGJlIHdhc3RlZnVsLgogICAgICAgICBhc3NlcnQuZXEoV2ViQXNzZW1ibHlNZW1vcnlNb2Rl
KGluc3RhbmNlKSwgIkJvdW5kc0NoZWNraW5nIik7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgcHJpbnQoYCAgICAke1dlYkFzc2VtYmx5TWVtb3J5TW9kZShpbnN0YW5jZSl9YCk7
CiAgICAgICAgIGluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTsKICAgICB9CiAgICAgcmV0dXJuIGlu
c3RhbmNlczsKQEAgLTc0LDYgKzg1LDggQEAgZnVsbEdDKCk7CiBmdWxsR0MoKTsKIAogKGZ1bmN0
aW9uIHRlc3RJbnN0YW5jZU5vTWF4KCkgeworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmlu
dChgdGVzdEluc3RhbmNlTm9NYXhgKTsKICAgICBsZXQgaW5zdGFuY2VzID0gW107CiAgICAgZm9y
IChsZXQgaSA9IDA7IGkgIT0gaXRlcmF0aW9uczsgKytpKSB7CiAgICAgICAgIC8vIE5vdGU6IG5v
dCBleHBvcnRlZCEgVGhlIGludGVybmFsIEFQSSBjYW4gc3RpbGwgYWNjZXNzLgpAQCAtODksNiAr
MTAyLDggQEAgZnVsbEdDKCk7CiBmdWxsR0MoKTsKIAogKGZ1bmN0aW9uIHRlc3RJbnN0YW5jZSgp
IHsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYHRlc3RJbnN0YW5jZWApOwogICAg
IGxldCBpbnN0YW5jZXMgPSBbXTsKICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBpdGVyYXRpb25z
OyArK2kpIHsKICAgICAgICAgLy8gTm90ZTogbm90IGV4cG9ydGVkISBUaGUgaW50ZXJuYWwgQVBJ
IGNhbiBzdGlsbCBhY2Nlc3MuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vdXRpbGl0aWVzLmpz
IGIvSlNUZXN0cy93YXNtL3V0aWxpdGllcy5qcwppbmRleCAxOWY5YjRlLi5iYzY5YWQ3IDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3dhc20vdXRpbGl0aWVzLmpzCisrKyBiL0pTVGVzdHMvd2FzbS91dGls
aXRpZXMuanMKQEAgLTc5LDYgKzc5LDEyIEBAIGNvbnN0IF9kdW1wID0gKHdoYXQsIG5hbWUsIHBh
ZCA9ICcgICAgJykgPT4gewogICAgIHJldHVybiBzOwogfTsKIAorZXhwb3J0IGNvbnN0IHRvSmF2
YVNjcmlwdE5hbWUgPSBuYW1lID0+IHsKKyAgICBjb25zdCBjYW1lbENhc2UgPSBuYW1lLnJlcGxh
Y2UoLyhbXmEtejAtOV0uKS9nLCBjID0+IGNbMV0udG9VcHBlckNhc2UoKSk7CisgICAgY29uc3Qg
Q2FtZWxDYXNlID0gY2FtZWxDYXNlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY2FtZWxDYXNl
LnNsaWNlKDEpOworICAgIHJldHVybiBDYW1lbENhc2U7Cit9OworCiAvLyBVc2UgdW5kZXJzY29y
ZSBuYW1lcyB0byBhdm9pZCBjbGFzaGluZyB3aXRoIGJ1aWx0aW4gbmFtZXMuCiBleHBvcnQgewog
ICAgIF9kdW1wIGFzIGR1bXAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3MDc3NjExLi5h
MzlmNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNDggQEAKKzIwMTct
MDQtMTEgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFz
c2VtYmx5OiBtYW5hZ2UgbWVtb3J5IGJldHRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGgg
TWlsbGVyLCBNaWNoYWVsIFNhYm9mZi4KKworICAgICAgICBXZWJBc3NlbWJseSBmYXN0IG1lbW9y
aWVzIHdlcmVuJ3QgbWFuYWdlZCB2ZXJ5IHdlbGwuIFRoaXMgcGF0Y2gKKyAgICAgICAgcmVmYWN0
b3JzIGl0IGFuZCBwdXRzIHVzIGluIGEgZ29vZCBwb3NpdGlvbiB0byBmdXJ0aGVyIGltcHJvdmUg
b3VyCisgICAgICAgIGZhc3QgbWVtb3J5IGhhbmRsaW5nIGluIHRoZSBmdXR1cmUuCisKKyAgICAg
ICAgV2Ugbm93IGNhY2hlIGZhc3QgbWVtb3JpZXMgYXQgYSBwcm9jZXNzIGdyYW51bGFyaXR5LCBi
dXQgbWFrZSBzdXJlCisgICAgICAgIHRoYXQgdGhleSBkb24ndCBjb25zdW1lIGRpcnR5IHBhZ2Vz
LiBXZSBhZGQgYSBjYXAgdG8gdGhlIHRvdGFsCisgICAgICAgIG51bWJlciBvZiBhbGxvY2F0ZWQg
ZmFzdCBtZW1vcmllcyB0byBhdm9pZCBBU0xSIGRlZ3JhZGF0aW9uLgorCisgICAgICAgIFdlIHRl
YWNoIHRoZSBHQyBhYm91dCBtZW1vcmllcyBhcyBhIGtpbmQgb2YgcmVzb3VyY2UgaXQgc2hvdWxk
CisgICAgICAgIGNhcmUgYWJvdXQgYmVjYXVzZSBpdCBkaWRuJ3QgaGF2ZSB2aXNpYmlsaXR5IGlu
dG8gdGhlIGFtb3VudCBvZgorICAgICAgICBtZW1vcnkgZWFjaCByZXByZXNlbnRlZC4gVGhpcyBh
bGxvd3MgYmVuY2htYXJrcyB3aGljaCBhbGxvY2F0ZQorICAgICAgICBtZW1vcmllcyBiYWNrLXRv
LWJhY2sgdG8gcmVsaWFibHkgZ2V0IGZhc3QgbWVtb3JpZXMgMTAwJSBvZiB0aGUKKyAgICAgICAg
dGltZSwgZXZlbiBvbiBhIHN5c3RlbSB1bmRlciBsb2FkLCB3aGljaCB3YXNuJ3QgdGhlIGNhc2UK
KyAgICAgICAgYmVmb3JlLiBUaGlzIHJlbGlhYmlsaXR5IHlpZWxkcyByb3VnaGx5IDglIHBlcmYg
YnVtcCBvbiB4ODYtNjQKKyAgICAgICAgV2FzbUJlbmNoLgorCisgICAgICAgIFRoZSBHQyBoZXVy
aXN0aWMgaXMgYXMgZm9sbG93czogZWFjaCB0aW1lIHdlIGFsbG9jYXRlIGEgZmFzdAorICAgICAg
ICBtZW1vcnkgd2Ugbm90aWZ5IHRoZSBHQywgd2hpY2ggdGhlbiBrZWVwcyB0cmFjayBvZiB0aGUg
dG90YWwKKyAgICAgICAgbnVtYmVyIG9mIGZhc3QgbWVtb3JpZXMgYWxsb2NhdGVkIHNpbmNlIGl0
IGxhc3QgR0MnZC4gV2UKKyAgICAgICAgc2VwYXJhdGVseSBrZWVwIHRyYWNrIG9mIHRoZSB0b3Rh
bCBudW1iZXIgb2YgZmFzdCBtZW1vcmllcyB3aGljaAorICAgICAgICBoYXZlIGV2ZXIgZXhpc3Rl
ZCBhdCBhbnkgcG9pbnQgaW4gdGltZSAoY2FjaGVkICsgYWxsb2NhdGVkKS4gVGhpcworICAgICAg
ICBpcyBhIG1vbm90b25pY2FsbHktaW5jcmVhc2luZyBoaWdoIHdhdGVybWFyay4gVGhlIEdDIHdp
bGwgZm9yY2UgYQorICAgICAgICBmdWxsIGNvbGxlY3Rpb24gaWYsIHNpbmNlIGl0IGxhc3QgcmFu
LCBoYWxmIG9yIG1vcmUgb2YgdGhlIGhpZ2gKKyAgICAgICAgd2F0ZXJtYXJrIG9mIGZhc3QgbWVt
b3JpZXMgd2FzIGFsbG9jYXRlZC4KKworICAgICAgICBBdCB0aGUgc2FtZSB0aW1lLCBpZiB3ZSBm
YWlsIG9idGFpbmluZyBhIGZhc3QgbWVtb3J5IGZyb20gdGhlCisgICAgICAgIGNhY2hlIHdlIGRv
IGEgR0MgdG8gdHJ5IHRvIGZpbmQgb25lLiBJZiB0aGF0IGZhaWxzIHdlJ2xsIGFsbG9jYXRlCisg
ICAgICAgIGEgbmV3IG9uZSAodGhpcyBjYW4gYWxzbyBmYWlsLCB0aGVuIHdlIGdvIHRvIHNsb3cg
bWVtb3J5KS4gVGhpcworICAgICAgICBjYW4gYWxzbyBiZSBpbXByb3ZlZCwgYnV0IGl0J3MgYSBn
b29kIHN0YXJ0LgorCisgICAgICAgIFRoaXMgY3VycmVudGx5IGRpc2FibGVzIGZhc3QgbWVtb3Jp
ZXMgb24gaU9TIGJlY2F1c2UgZ2V0dGluZyBmYXN0CisgICAgICAgIG1lbW9yaWVzIGlzbid0IGEg
Z3VhcmFudGVlZCB0aGluZy4gUmF0aGVyLCB3ZSBnZXQgcXVpdGUgYSBmZXcgb2YKKyAgICAgICAg
dGhlbSBhbmQgYWNoaWV2ZSBzaWduaWZpY2FudCBzcGVlZHVwcywgYnV0IGJlbmNobWFya3Mgd2hp
Y2gKKyAgICAgICAgYWxsb2NhdGUgbWVtb3JpZXMgYmFjay10by1iYWNrIGVuZCB1cCBmYWxsaW5n
IGJlaGluZCBiZWNhdXNlIHRoZQorICAgICAgICBHQyBjYW4gY29uc2VydmF0aXZlbHkgaG9sZCBv
bnRvIG1lbW9yaWVzLCB3aGljaCB0aGVuIHlpZWxkcyBhIHBlcmYKKyAgICAgICAgY2xpZmYuIFRo
YXQgY2xpZmYgaXNuJ3QgcmVsaWFibGUsIFdhc21CZW5jaCBnZXRzIHJvdWdobHkgMTAgb2YgMTgK
KyAgICAgICAgZmFzdCBtZW1vcmllcyB3aGVuIGluIHRoZW9yeSBpdCBzaG91bGQgZ2V0IGFsbCBv
ZiB0aGVtIGZhc3QgKGFzCisgICAgICAgIE1hY09TIGRvZXMpLiBUaGUgcGF0Y2ggc2lnbmlmaWNh
bnRseSBpbXByb3ZlcyB0aGUgc3RhdGUgb2YgaU9TCisgICAgICAgIHRob3VnaCwgYW5kIGluIGEg
Zm9sbG93LXVwIHdlIGNvdWxkIHJlLWVuYWJsZSBmYXN0IG1lbW9yaWVzLgorCisgICAgICAgIFBh
cnQgb2YgdGhpcyBnb29kIHBvc2l0aW9uaW5nIGlzIGEgZmFjaWxpdHkgdG8gcHJlLWFsbG9jYXRl
IGZhc3QKKyAgICAgICAgbWVtb3JpZXMgdmVyeSBlYXJseSBhdCBzdGFydHVwLCBiZWZvcmUgYW55
IGZyYWdtZW50YXRpb24KKyAgICAgICAgb2NjdXJzLiBUaGlzIGlzIGN1cnJlbnRseSBkaXNhYmxl
ZCBidXQgd29ya2VkIGV4dHJlbWVseSByZWxpYWJseQorICAgICAgICBvbiBpT1MuIE9uY2Ugd2Ug
Zml4IHRoZSBhYm92ZSBpc3N1ZXMgd2UnbGwgd2FudCB0byByZS12aXNpdCBhbmQKKyAgICAgICAg
dHVybiBvbiBwcmUtYWxsb2NhdGlvbi4KKworICAgICAgICBXZSBhbHNvIGF2b2lkIGxvY2tpbmcg
Zm9yIGZhc3QgbWVtb3J5IGlkZW50aWZpY2F0aW9uIHdoZW4KKyAgICAgICAgcGVyZm9ybWluZyBz
aWduYWwgaGFuZGxpbmcuIEknbSB2ZXJ5IG5lcnZvdXMgYWJvdXQgYWNxdWlyaW5nIGxvY2tzCisg
ICAgICAgIGluIGEgc2lnbmFsIGhhbmRsZXIgYmVjYXVzZSBpbiBnZW5lcmFsIHNpZ25hbHMgY2Fu
IGhhcHBlbiB3aGVuCisgICAgICAgIHdlJ3ZlIG1lc3NlZCB1cC4gVGhpcyBpc24ndCB0aGUgY2Fz
ZSB3aXRoIGZhc3QgbWVtb3JpZXM6IHdlJ3JlCisgICAgICAgIHJhaXNpbmcgYSBzaWduYWwgb24g
cHVycG9zZSBhbmQgaGFuZGxpbmcgaXQuIEhvd2V2ZXIgdGhpcyBkb2Vzbid0CisgICAgICAgIG1l
YW4gd2Ugd29uJ3QgbWVzcyB1cCBlbHNld2hlcmUhIFRoaXMgd2lsbCBnZXQgbW9yZSBjb21wbGlj
YXRlZAorICAgICAgICBvbmNlIHdlIGFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSB0aHJlYWRzIHNo
YXJpbmcgbWVtb3JpZXMgYW5kCisgICAgICAgIGJlaW5nIGFibGUgdG8gZ3JvdyB0aGVpciBtZW1v
cmllcy4gT25lIGV4YW1wbGU6IHRoZSBjb2RlIGNhbGxzCisgICAgICAgIENSQVNIKCksIHdoaWNo
IGV4ZWN1dGVzIHRoZSBmb2xsb3dpbmcgY29kZSBpbiByZWxlYXNlOgorCisgICAgICAgICAgICAq
KGludCAqKSh1aW50cHRyX3QpMHhiYmFkYmVlZiA9IDA7CisKKyAgICAgICAgVGhpcyBpcyBhIHNl
Z2ZhdWx0LCB3aGljaCBvdXIgZmFzdCBtZW1vcnkgc2lnbmFsIGhhbmRsZXIgdHJpZXMgdG8KKyAg
ICAgICAgaGFuZGxlLiBJdCBkb2VzIHNvIGJ5IGZpcnN0IGZpZ3VyaW5nIG91dCB3aGV0aGVyIDB4
YmJhZGJlZWYgaXMgaW4KKyAgICAgICAgYSBmYXN0IG1lbW9yeSByZWdpb24sIHJlcWlyaW5nIGEg
bG9jay4gSWYgd2UgQ1JBU0goKSB3aGlsZSBob2xkaW5nCisgICAgICAgIHRoZSBsb2NrIHRoZW4g
b3VyIHRocmVhZCBzZWxmLWRlYWRsb2NrcywgZ2l2aW5nIHVzIG5vIGNyYXNoIHJlcG9ydAorICAg
ICAgICBhbmQgYSBiYWQgdXNlciBleHBlcmllbmNlLgorCisgICAgICAgIEF2b2lkaW5nIGEgbG9j
ayB0aGVyZWZvcmUgaXQncyBub3QgYWJvdXQgc3BlZWQgb3IgcmVkdWNlZAorICAgICAgICBjb250
ZW50aW9uLiBJbiBmYWN0LCBJJ2QgdXNlIHNvbWV0aGluZyBlbHNlIHRoYW4gYSBGSUZPIGlmIHRo
ZXNlCisgICAgICAgIHdlcmUgYSBjb25jZXJuLiBXZSdyZSBhbHNvIGRvaW5nIHN5c2NhbGxzLCB3
aGljaCBkd2FyZiBhbnkgbG9ja2luZworICAgICAgICBjb3N0LgorCisgICAgICAgIFdlIG5vdyBv
bmx5IGFsbG9jYXRlIDRHaUIgKyByZWR6b25lIG9mIDY0ayAqIDEyOCBmb3IgZmFzdCBtZW1vcmll
cworICAgICAgICBpbnN0ZWFkIG9mIDhHaUIuIFRoaXMgcGF0Y2ggcmV1c2VzIHRoZSBsb2dpYyBm
cm9tCisgICAgICAgIEIzOjpXYXNtQm91bmRzQ2hlY2sgdG8gcGVyZm9ybSBib3VuZHMgY2hlY2tz
IHdoZW4gYWNjZXNzZXMgY291bGQKKyAgICAgICAgZXhjZWVkIHRoZSByZWR6b25lLiBXZSdsbCB0
aGVyZWZvcmUgYmVuZWZpdCBmcm9tIENTRSBnb29kbmVzcyB3aGVuCisgICAgICAgIGl0IHJlYWNo
ZXMgV2FzbUJvdW5kc0NoZWNrLiBTZWUgYnVnICMxNjM0NjkuCisKKyAgICAgICAgKiBiMy9CM0xv
d2VyVG9BaXIuY3BwOiBmaXggYSBiYWFhYWRkZCBidWcgd2hlcmUgdW5zaWduZWQtPnNpZ25lZAor
ICAgICAgICBjb252ZXJzaW9uIGFsbG93ZWQgb3V0LW9mLWJvdW5kcyByZWFkcyBieSAtMkdpQi4g
SSdsbCBmb2xsb3ctdXAgaW4KKyAgICAgICAgYnVnICMxNzA2OTIgdG8gcHJldmVudCB0aGlzIHR5
cGUgb2YgYnVnIG9uY2UgYW5kIGZvciBhbGwuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6Omxvd2VyKToKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDogdXBkYXRlIFdhc21C
b3VuZHNDaGVjayB2YWxpZGF0aW9uLgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWU6OmVmZmVjdHMpOiB1cGRhdGUgV2FzbUJvdW5kc0NoZWNrIGVmZmVj
dHMuCisgICAgICAgICogYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6V2FzbUJvdW5kc0NoZWNrVmFsdWUpOgorICAg
ICAgICAoSlNDOjpCMzo6V2FzbUJvdW5kc0NoZWNrVmFsdWU6OnJlZHpvbmVMaW1pdCk6CisgICAg
ICAgIChKU0M6OkIzOjpXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAq
IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6QjM6Oldhc21Cb3Vu
ZHNDaGVja1ZhbHVlOjptYXhpbXVtKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ3VzdG9tLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6V2FzbUJvdW5kc0NoZWNrQ3VzdG9tOjppc1ZhbGlkRm9y
bSk6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RXYXNt
Qm91bmRzQ2hlY2spOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6Okhl
YXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRXZWJBc3NlbWJseUZhc3RNZW1v
cmllc0FsbG9jYXRlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OndlYkFzc2VtYmx5RmFzdE1lbW9y
aWVzVGhpc0N5Y2xlQXRUaHJlc2hvbGQpOgorICAgICAgICAoSlNDOjpIZWFwOjp1cGRhdGVBbGxv
Y2F0aW9uTGltaXRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkQWxsb2NhdGVXZWJBc3NlbWJs
eUZhc3RNZW1vcmllcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnNob3VsZERvRnVsbENvbGxlY3Rp
b24pOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKToKKyAg
ICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuY3BwOgorICAgICAgICAoSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAg
ICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmVtaXRTdG9yZU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRlSlNUb1dh
c21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFuZGxlcik6CisgICAgICAgICogd2FzbS9XYXNtTWVt
b3J5LmNwcDogUmV3cml0ZS4KKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVN0cmluZyk6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeTo6aW5pdGlhbGl6ZVByZWFsbG9jYXRpb25zKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpjcmVhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TWVtb3J5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6On5NZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmZhc3RNYXBwZWRSZWR6b25lQnl0ZXMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcyk6CisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeTo6bWF4RmFzdE1lbW9yeUNvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TWVtb3J5OjphZGRyZXNzSXNJbkFjdGl2ZUZhc3RNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Omdyb3cpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5oOgorICAgICAgICAo
TWVtb3J5OjptYXhGYXN0TWVtb3J5Q291bnQpOgorICAgICAgICAoTWVtb3J5OjphZGRyZXNzSXNJ
bkFjdGl2ZUZhc3RNZW1vcnkpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Z2xvYmFsTWVtb3J5Qnl0
ZVNpemUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1lbW9yeTo6Z3Jvdyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1v
cnk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6
dmlzaXRDaGlsZHJlbik6CisKIDIwMTctMDQtMTMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gVXNlIHByb3BlciBpZmRlZiBndWFyZCBmb3Ig
Y29kZSB1c2luZyBNYWNoaW5lQ29udGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAppbmRleCA4MjBkNGMxLi41YmE1YWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtMzE0NCwyMiArMzE0NCw0NiBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBCMzo6V2FzbUJvdW5kc0NoZWNrOiB7CisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogICAgICAgICAgICAgV2FzbUJvdW5kc0NoZWNrVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZS0+YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCk7CiAKICAgICAgICAgICAgIFZh
bHVlKiBwdHIgPSB2YWx1ZS0+Y2hpbGQoMCk7CiAKLSAgICAgICAgICAgIEFyZyB0ZW1wID0gbV9j
b2RlLm5ld1RtcChHUCk7Ci0gICAgICAgICAgICBhcHBlbmQoSW5zdChNb3ZlMzIsIHZhbHVlLCB0
bXAocHRyKSwgdGVtcCkpOworICAgICAgICAgICAgQXJnIHB0clBsdXNJbW0gPSBtX2NvZGUubmV3
VG1wKEdQKTsKKyAgICAgICAgICAgIGFwcGVuZChJbnN0KE1vdmUzMiwgdmFsdWUsIHRtcChwdHIp
LCBwdHJQbHVzSW1tKSk7CiAgICAgICAgICAgICBpZiAodmFsdWUtPm9mZnNldCgpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGltbSh2YWx1ZS0+b2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAg
ICBhcHBlbmQoQWRkNjQsIGltbSh2YWx1ZS0+b2Zmc2V0KCkpLCB0ZW1wKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW0odmFsdWUtPm9mZnNldCgpKSwgcHRyUGx1c0ltbSk7
CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFyZyBiaWdJbW0g
PSBtX2NvZGUubmV3VG1wKEdQKTsKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFy
Zzo6YmlnSW1tKHZhbHVlLT5vZmZzZXQoKSksIGJpZ0ltbSk7Ci0gICAgICAgICAgICAgICAgICAg
IGFwcGVuZChBZGQ2NCwgYmlnSW1tLCB0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
KEFkZDY0LCBiaWdJbW0sIHB0clBsdXNJbW0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGFwcGVuZChJbnN0KEFpcjo6V2FzbUJvdW5kc0NoZWNrLCB2YWx1
ZSwgdGVtcCwgQXJnKHZhbHVlLT5waW5uZWRHUFIoKSkpKTsKKworICAgICAgICAgICAgQXJnIGxp
bWl0OworICAgICAgICAgICAgaWYgKHZhbHVlLT5waW5uZWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgICAgIGxpbWl0ID0gQXJnKHZhbHVlLT5waW5uZWRHUFIoKSk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBTaWduYWxpbmcgbWVtb3JpZXMgZG9u
J3QgcGluIGEgcmVnaXN0ZXIgYmVjYXVzZSBvbmx5IHRoZSBhY2Nlc3NlcyB3aG9zZSByZWcraW1t
IGNvdWxkIGV2ZXIgb3ZlcmZsb3cgNEdpQityZWR6b25lIG5lZWQgdG8gYmUgY2hlY2tlZCwKKyAg
ICAgICAgICAgICAgICAvLyBhbmQgd2UgZG9uJ3QgdGhpbmsgdGhlc2Ugd2lsbCBiZSBmcmVxdWVu
dC4gQWxsIG90aGVyIGFjY2Vzc2VzIHdpbGwgdHJhcCBkdWUgdG8gUFJPVF9OT05FIHBhZ2VzLgor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgZ290IGhlcmUgaXQn
cyBiZWNhdXNlIGEgbWVtb3J5IGFjY2VzcyBoYWQgYSB2ZXJ5IGxhcmdlIG9mZnNldC4gV2UgY291
bGQgY2hlY2sgdGhhdCBpdCBkb2Vzbid0IGV4Y2VlZCA0R2lCK3JlZHpvbmUgc2luY2UgdGhhdCdz
CisgICAgICAgICAgICAgICAgLy8gdGVjaG5pY2FsbHkgdGhlIGxpbWl0IHdlIG5lZWQgdG8gYXZv
aWQgb3ZlcmZsb3dpbmcsIGJ1dCBpdCdzIGJldHRlciBpZiB3ZSB1c2UgYSBzbWFsbGVyIGltbWVk
aWF0ZSB3aGljaCBjb2RlZ2VucyBtb3JlIGVhc2lseS4KKyAgICAgICAgICAgICAgICAvLyBXZSBr
bm93IHRoYXQgYW55dGhpbmcgYWJvdmUgdGhlIGRlY2xhcmVkICdtYXhpbXVtJyB3aWxsIHRyYXAs
IHNvIHdlIGNhbiBjb21wYXJlIGFnYWluc3QgdGhhdCBudW1iZXIuIElmIHRoZXJlIHdhcyBubyBk
ZWNsYXJlZAorICAgICAgICAgICAgICAgIC8vICdtYXhpbXVtJyB0aGVuIHdlIHN0aWxsIGtub3cg
dGhhdCBhbnkgYWNjZXNzIGFib3ZlIDRHaUIgd2lsbCB0cmFwLCBubyBuZWVkIHRvIGFkZCB0aGUg
cmVkem9uZS4KKyAgICAgICAgICAgICAgICBsaW1pdCA9IG1fY29kZS5uZXdUbXAoR1ApOworICAg
ICAgICAgICAgICAgIHNpemVfdCBsaW1pdFZhbHVlID0gdmFsdWUtPm1heGltdW0oKSA/IHZhbHVl
LT5tYXhpbXVtKCkuYnl0ZXMoKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobGltaXRWYWx1ZSA8PSB2YWx1ZS0+cmVkem9uZUxp
bWl0KCkpOworICAgICAgICAgICAgICAgIGlmIChpbW0obGltaXRWYWx1ZSkpCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZChNb3ZlLCBpbW0obGltaXRWYWx1ZSksIGxpbWl0KTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0lt
bShsaW1pdFZhbHVlKSwgbGltaXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5k
KEluc3QoQWlyOjpXYXNtQm91bmRzQ2hlY2ssIHZhbHVlLCBwdHJQbHVzSW1tLCBsaW1pdCkpOwor
I2Vsc2UKKyAgICAgICAgICAgIGFwcGVuZChBaXI6Ok9vcHMpOworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKaW5kZXggNmU2YTkzZC4uY2MzYTU2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcApAQCAtNDcwLDcgKzQ3MCw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJp
dHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkp
OwotICAgICAgICAgICAgICAgIFZBTElEQVRFKG1fcHJvY2VkdXJlLmNvZGUoKS5pc1Bpbm5lZCh2
YWx1ZS0+YXM8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KCktPnBpbm5lZEdQUigpKSwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmFzPFdhc21Cb3VuZHNDaGVja1Zh
bHVlPigpLT5waW5uZWRHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURShtX3Byb2NlZHVyZS5jb2RlKCkuaXNQaW5uZWQodmFsdWUtPmFzPFdhc21Cb3Vu
ZHNDaGVja1ZhbHVlPigpLT5waW5uZWRHUFIoKSksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAg
ICAgICAgICAgVkFMSURBVEUobV9wcm9jZWR1cmUuY29kZSgpLndhc21Cb3VuZHNDaGVja0dlbmVy
YXRvcigpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBVcHNpbG9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCmluZGV4
IDhjOTEwYWEuLjY1YjE3ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKQEAg
LTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkIz
VmFsdWVLZXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgiCisjaW5jbHVk
ZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIu
aD4KICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KQEAgLTY2NCw3ICs2NjUsOCBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29u
c3QKICAgICAgICAgcmVzdWx0ID0gRWZmZWN0czo6Zm9yQ2hlY2soKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBXYXNtQm91bmRzQ2hlY2s6Ci0gICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgIGlmIChhczxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4oKS0+cGlubmVkR1BS
KCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJlc3VsdC5yZWFkc1Bpbm5lZCA9IHRy
dWU7CiAgICAgICAgIHJlc3VsdC5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBVcHNpbG9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuY3BwCmluZGV4IGIzYTMyOTAuLjhhZWNjMWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQjNXYXNtQm91
bmRzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKQEAgLTM0LDEwICszNSwxMSBAQCBXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6fldhc21C
b3VuZHNDaGVja1ZhbHVlKCkKIHsKIH0KIAotV2FzbUJvdW5kc0NoZWNrVmFsdWU6Oldhc21Cb3Vu
ZHNDaGVja1ZhbHVlKE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwdHIsIEdQUlJlZyBwaW5uZWRHUFIs
IHVuc2lnbmVkIG9mZnNldCkKK1dhc21Cb3VuZHNDaGVja1ZhbHVlOjpXYXNtQm91bmRzQ2hlY2tW
YWx1ZShPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcgcGlubmVkR1BSLCB1bnNpZ25l
ZCBvZmZzZXQsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwg
V2FzbUJvdW5kc0NoZWNrLCBvcmlnaW4sIHB0cikKICAgICAsIG1fcGlubmVkR1BSKHBpbm5lZEdQ
UikKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAsIG1fbWF4aW11bShtYXhpbXVtKQogewog
fQogCkBAIC00Niw5ICs0OCwyMiBAQCBWYWx1ZSogV2FzbUJvdW5kc0NoZWNrVmFsdWU6OmNsb25l
SW1wbCgpIGNvbnN0CiAgICAgcmV0dXJuIG5ldyBXYXNtQm91bmRzQ2hlY2tWYWx1ZSgqdGhpcyk7
CiB9CiAKK3NpemVfdCBXYXNtQm91bmRzQ2hlY2tWYWx1ZTo6cmVkem9uZUxpbWl0KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9waW5uZWRHUFIgPT0gSW52YWxpZEdQUlJlZyk7CisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSArIFdhc206Ok1lbW9yeTo6ZmFzdE1hcHBlZFJl
ZHpvbmVCeXRlcygpOworI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
I2VuZGlmCit9CisKIHZvaWQgV2FzbUJvdW5kc0NoZWNrVmFsdWU6OmR1bXBNZXRhKENvbW1hUHJp
bnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KGNv
bW1hLCAic2l6ZVJlZ2lzdGVyID0gIiwgbV9waW5uZWRHUFIsICIsIG9mZnNldCA9ICIsIG1fb2Zm
c2V0KTsKKyAgICBpZiAobV9waW5uZWRHUFIgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAicmVkem9uZUxpbWl0ID0gIiwgcmVkem9uZUxpbWl0KCksICIsIG9mZnNl
dCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludChjb21tYSwgInNp
emVSZWdpc3RlciA9ICIsIG1fcGlubmVkR1BSLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCk7CiB9
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgKaW5kZXggY2NjNTRiOC4uMTEwZTcxOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQjNWYWx1ZS5oIgogI2luY2x1ZGUgIkND
YWxsSGVscGVycy5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTQ2LDggKzQ3LDE2IEBAIHB1YmxpYzoKICAgICAKICAg
ICB+V2FzbUJvdW5kc0NoZWNrVmFsdWUoKTsKIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAg
ICB0eXBlZGVmIFdhc206OlBhZ2VDb3VudCBQYWdlQ291bnQ7CisjZWxzZQorICAgIHR5cGVkZWYg
Y2hhciBQYWdlQ291bnQ7CisjZW5kaWYKKwogICAgIEdQUlJlZyBwaW5uZWRHUFIoKSBjb25zdCB7
IHJldHVybiBtX3Bpbm5lZEdQUjsgfQogICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2Zmc2V0OyB9CisgICAgc2l6ZV90IHJlZHpvbmVMaW1pdCgpIGNvbnN0OworICAgIFBh
Z2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9CiAKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CkBAIC01NywxMCArNjYsMTEgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgV2FzbUJvdW5k
c0NoZWNrVmFsdWUoT3JpZ2luLCBWYWx1ZSogcHRyLCBHUFJSZWcgcGlubmVkR1BSLCB1bnNpZ25l
ZCBvZmZzZXQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhc21Cb3VuZHNDaGVja1ZhbHVlKE9y
aWdpbiwgVmFsdWUqIHB0ciwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQgb2Zmc2V0LCBQYWdl
Q291bnQgbWF4aW11bSk7CiAKICAgICBHUFJSZWcgbV9waW5uZWRHUFI7CiAgICAgdW5zaWduZWQg
bV9vZmZzZXQ7CisgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKIH07CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
dXN0b20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uY3BwCmlu
ZGV4IDdlZTdmM2MuLjQ5Y2E1NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckN1c3RvbS5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCBib29sIFdhc21Cb3VuZHNDaGVja0N1c3Rv
bTo6aXNWYWxpZEZvcm0oSW5zdCYgaW5zdCkKICAgICBpZiAoIWluc3QuYXJnc1swXS5pc1RtcCgp
ICYmICFpbnN0LmFyZ3NbMF0uaXNTb21lSW1tKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHJldHVybiBpbnN0LmFyZ3NbMV0uaXNSZWcoKTsKKyAgICByZXR1cm4gaW5zdC5hcmdzWzFd
LmlzUmVnKCkgfHwgaW5zdC5hcmdzWzFdLmlzVG1wKCkgfHwgaW5zdC5hcmdzWzFdLmlzU29tZUlt
bSgpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKaW5kZXggZDc4YWU5Ny4u
ODBlNzU0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKQEAgLTE1MTg1LDcgKzE1
MTg1LDggQEAgdm9pZCB0ZXN0V2FzbUJvdW5kc0NoZWNrKHVuc2lnbmVkIG9mZnNldCkKICAgICBW
YWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBpZiAocG9pbnRlclR5cGUoKSAhPSBJ
bnQzMikKICAgICAgICAgbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMs
IE9yaWdpbigpLCBsZWZ0KTsKLSAgICByb290LT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBsZWZ0LCBwaW5uZWQsIG9mZnNldCk7CisgICAgV2FzbTo6UGFn
ZUNvdW50IG1heGltdW07CisgICAgcm9vdC0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbGVmdCwgcGlubmVkLCBvZmZzZXQsIG1heGltdW0pOwogICAgIFZh
bHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgMHg0Mik7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwg
T3JpZ2luKCksIHJlc3VsdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXgg
NzIyM2IyMC4uODVkM2FkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTYy
LDYgKzYyLDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxp
bmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5o
IgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMjUwLDYgKzI1MSw3IEBAIEhlYXA6OkhlYXAo
Vk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xs
ZWN0KDApCiAgICAgLCBtX3NpemVCZWZvcmVMYXN0RWRlbkNvbGxlY3QoMCkKICAgICAsIG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKKyAgICAsIG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNB
bGxvY2F0ZWRUaGlzQ3ljbGUoMCkKICAgICAsIG1fYnl0ZXNBYmFuZG9uZWRTaW5jZUxhc3RGdWxs
Q29sbGVjdCgwKQogICAgICwgbV9tYXhFZGVuU2l6ZShtX21pbkJ5dGVzUGVyQ3ljbGUpCiAgICAg
LCBtX21heEhlYXBTaXplKG1fbWluQnl0ZXNQZXJDeWNsZSkKQEAgLTQ2Niw2ICs0NjgsMjMgQEAg
dm9pZCBIZWFwOjpkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnlTbG93Q2FzZShzaXplX3Qgc2l6
ZSkKICAgICByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZFNsb3dDYXNlKHNpemUpOwogfQogCit2
b2lkIEhlYXA6OnJlcG9ydFdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkKHNpemVfdCBj
b3VudCkKK3sKKyAgICBkaWRBbGxvY2F0ZVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzKGNvdW50KTsK
KyAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7Cit9CisKK2Jvb2wgSGVhcDo6d2ViQXNz
ZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCgpIGNvbnN0Cit7CisgICAgLy8g
V2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcyB1c2UgbGFyZ2UgYW1vdW50cyBvZiB2aXJ0dWFsIG1l
bW9yeSBhbmQgd2UKKyAgICAvLyBkb24ndCBrbm93IGhvdyBtYW55IGNhbiBleGlzdCBpbiB0aGlz
IHByb2Nlc3MuIFdlIGtlZXAgdHJhY2sgb2YgdGhlIG1vc3QKKyAgICAvLyBmYXN0IG1lbW9yaWVz
IHRoYXQgaGF2ZSBleGlzdGVkIGF0IGFueSBwb2ludCBpbiB0aW1lLiBUaGUgR0MgdXNlcyB0aGlz
CisgICAgLy8gdG9wIHdhdGVybWFyayBhcyBhbiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgcmVjZW50
IGFsbG9jYXRpb25zIHNob3VsZCBjYXVzZQorICAgIC8vIGEgY29sbGVjdGlvbjogZ2V0IHRvbyBj
bG9zZSBhbmQgd2UgbWF5IGJlIGNsb3NlIHRvIHRoZSBhY3R1YWwgbGltaXQuCisgICAgc2l6ZV90
IGZhc3RNZW1vcnlUaHJlc2hvbGQgPSBzdGQ6Om1heDxzaXplX3Q+KDEsIFdhc206Ok1lbW9yeTo6
bWF4RmFzdE1lbW9yeUNvdW50KCkgLyAyKTsKKyAgICByZXR1cm4gbV93ZWJBc3NlbWJseUZhc3RN
ZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNsZSA+IGZhc3RNZW1vcnlUaHJlc2hvbGQ7Cit9CisKIHZv
aWQgSGVhcDo6cmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKQogewogICAgIC8vIE91ciBjbGll
bnRzIGRvbid0IGtub3cgZXhhY3RseSBob3cgbXVjaCBtZW1vcnkgdGhleQpAQCAtMjEwMyw2ICsy
MTIyLDcgQEAgdm9pZCBIZWFwOjp1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCkKICAgICBpZiAodmVy
Ym9zZSkgewogICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgICAgICBkYXRhTG9nKCJieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZSA9ICIsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUsICJcbiIpOwor
ICAgICAgICBkYXRhTG9nKCJ3ZWJBc3NlbWJseUZhc3RNZW1vcmllc0FsbG9jYXRlZFRoaXNDeWNs
ZSA9ICIsIG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlzQ3ljbGUsICJcbiIp
OwogICAgIH0KICAgICAKICAgICAvLyBDYWxjdWxhdGUgb3VyIGN1cnJlbnQgaGVhcCBzaXplIHRo
cmVzaG9sZCBmb3IgdGhlIHB1cnBvc2Ugb2YgZmlndXJpbmcgb3V0IHdoZW4gd2Ugc2hvdWxkCkBA
IC0yMTgwLDYgKzIyMDAsNyBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1pdHMoKQog
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJzaXplQWZ0ZXJMYXN0Q29sbGVjdCA9
ICIsIG1fc2l6ZUFmdGVyTGFzdENvbGxlY3QsICJcbiIpOwogICAgIG1fYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGUgPSAwOworICAgIG1fd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgPSAwOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgIGRhdGFMb2co
Ij0+ICIsIGN1cnJlbnRIZWFwU2l6ZSAvIDEwMjQsICJrYiwgIik7CkBAIC0yMjUzLDYgKzIyNzQs
MTEgQEAgdm9pZCBIZWFwOjpkaWRBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiAgICAgcGVyZm9ybUlu
Y3JlbWVudChieXRlcyk7CiB9CiAKK3ZvaWQgSGVhcDo6ZGlkQWxsb2NhdGVXZWJBc3NlbWJseUZh
c3RNZW1vcmllcyhzaXplX3QgY291bnQpCit7CisgICAgbV93ZWJBc3NlbWJseUZhc3RNZW1vcmll
c0FsbG9jYXRlZFRoaXNDeWNsZSArPSBjb3VudDsKK30KKwogYm9vbCBIZWFwOjppc1ZhbGlkQWxs
b2NhdGlvbihzaXplX3QpCiB7CiAgICAgaWYgKCFpc1ZhbGlkVGhyZWFkU3RhdGUobV92bSkpCkBA
IC0yMzA1LDcgKzIzMzEsNyBAQCBib29sIEhlYXA6OnNob3VsZERvRnVsbENvbGxlY3Rpb24oc3Rk
OjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHNjb3BlKSBjb25zdAogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIGlmICghc2NvcGUpCi0gICAgICAgIHJldHVybiBtX3Nob3VsZERvRnVsbENv
bGxlY3Rpb247CisgICAgICAgIHJldHVybiBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb24gfHwgd2Vi
QXNzZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRocmVzaG9sZCgpOwogICAgIHJldHVybiAq
c2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsOwogfQogCkBAIC0yNDU2LDcgKzI0ODIsOCBA
QCB2b2lkIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCkKICAgICAgICAgaWYgKG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUg
PD0gT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIDw9IG1fbWF4RWRl
blNpemUpCisgICAgICAgIGlmICghd2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNUaGlzQ3ljbGVBdFRo
cmVzaG9sZCgpCisgICAgICAgICAgICAmJiBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIDw9IG1f
bWF4RWRlblNpemUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgKaW5kZXggZDY3ODM3YS4uNGI2M2ZjNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaApAQCAtMTk5LDYgKzE5OSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBvcnRFeHRy
YU1lbW9yeUFsbG9jYXRlZChzaXplX3QpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAKKyAgICAvLyBTYW1lIGFzIGFib3ZlLCBi
dXQgZm9yIHVuY29tbWl0dGVkIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb25zIGNhdXNlZCBieQor
ICAgIC8vIFdlYkFzc2VtYmx5IGZhc3QgbWVtb3JpZXMuIFRoaXMgaXMgY291bnRlZCBzZXBhcmF0
ZWx5IGJlY2F1c2UgdmlydHVhbAorICAgIC8vIG1lbW9yeSBpcyBsb2dpY2FsbHkgYSBkaWZmZXJl
bnQgdHlwZSBvZiByZXNvdXJjZSB0aGFuIGNvbW1pdHRlZCBwaHlzaWNhbAorICAgIC8vIG1lbW9y
eS4gV2UgY2FuIG9mdGVuIGFsbG9jYXRlIGh1Z2UgYW1vdW50cyBvZiB2aXJ0dWFsIG1lbW9yeSAo
dGhpbmsKKyAgICAvLyBnaWdhYnl0ZXMpIHdpdGhvdXQgYWR2ZXJzZWx5IGFmZmVjdGluZyByZWd1
bGFyIEdDJ2QgbWVtb3J5LiBBdCBzb21lIHBvaW50CisgICAgLy8gdGhvdWdoLCB0b28gbXVjaCB2
aXJ0dWFsIG1lbW9yeSBiZWNvbWVzIHByb2hpYml0aXZlIGFuZCB3ZSB3YW50IHRvCisgICAgLy8g
Y29sbGVjdCBHQy1hYmxlIG9iamVjdHMgd2hpY2gga2VlcCB0aGlzIHZpcnR1YWwgbWVtb3J5IGFs
aXZlLgorICAgIC8vIFRoaXMgaXMgY291bnRlZCBpbiBudW1iZXIgb2YgZmFzdCBtZW1vcmllcywg
bm90IGJ5dGVzLgorICAgIHZvaWQgcmVwb3J0V2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0
ZWQoc2l6ZV90KTsKKyAgICBib29sIHdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzVGhpc0N5Y2xlQXRU
aHJlc2hvbGQoKSBjb25zdDsKKwogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICAvLyBV
c2UgdGhpcyBBUEkgdG8gcmVwb3J0IHRoZSBzdWJzZXQgb2YgZXh0cmEgbWVtb3J5IHRoYXQgbGl2
ZXMgb3V0c2lkZSB0aGlzIHByb2Nlc3MuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBv
cnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKQEAgLTI0OCw2ICsyNTksNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkZWxldGVBbGxVbmxpbmtlZENvZGVCbG9ja3MoRGVsZXRlQWxsQ29kZUVm
Zm9ydCk7CiAKICAgICB2b2lkIGRpZEFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9pZCBkaWRBbGxv
Y2F0ZVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzKHNpemVfdCk7CiAgICAgYm9vbCBpc1BhZ2VkT3V0
KGRvdWJsZSBkZWFkbGluZSk7CiAgICAgCiAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGpp
dFN0dWJSb3V0aW5lcygpIHsgcmV0dXJuICptX2ppdFN0dWJSb3V0aW5lczsgfQpAQCAtNTI2LDYg
KzUzOCw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fc2l6ZUJlZm9yZUxhc3RFZGVuQ29sbGVj
dDsKIAogICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOworICAgIHNpemVfdCBt
X3dlYkFzc2VtYmx5RmFzdE1lbW9yaWVzQWxsb2NhdGVkVGhpc0N5Y2xlOwogICAgIHNpemVfdCBt
X2J5dGVzQWJhbmRvbmVkU2luY2VMYXN0RnVsbENvbGxlY3Q7CiAgICAgc2l6ZV90IG1fbWF4RWRl
blNpemU7CiAgICAgc2l6ZV90IG1fbWF4SGVhcFNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCmluZGV4IGJlNmI2ZjEu
LjdjODVhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
aXRpYWxpemVUaHJlYWRpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCiAjaW5jbHVk
ZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldh
c21UaHVua3MuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDxtdXRleD4K
QEAgLTU4LDYgKzU5LDkgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKICAgICBzdGQ6OmNh
bGxfb25jZShpbml0aWFsaXplVGhyZWFkaW5nT25jZUZsYWcsIFtdewogICAgICAgICBXVEY6Omlu
aXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICAgICAgT3B0aW9uczo6aW5pdGlhbGl6ZSgpOworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgV2FzbTo6TWVtb3J5Ojppbml0aWFsaXplUHJl
YWxsb2NhdGlvbnMoKTsKKyNlbmRpZgogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElO
RykKICAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmluaXRpYWxpemUoKTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCAzYmY3MjEzLi4w
ZDc0ZjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAt
NTksNiArNTksMTUgQEAgYm9vbCByZXN0cmljdGVkT3B0aW9uc0VuYWJsZWQgPSBmYWxzZTsKICNl
bHNlCiBib29sIHJlc3RyaWN0ZWRPcHRpb25zRW5hYmxlZCA9IHRydWU7CiAjZW5kaWYKKworQUxX
QVlTX0lOTElORSBib29sIGlzSU9TKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQogfQogCiB2b2lkIE9w
dGlvbnM6OmVuYWJsZVJlc3RyaWN0ZWRPcHRpb25zKGJvb2wgZW5hYmxlT3JOb3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggNjM3NmIwZS4uMDZkMGYwZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDM2LDkgKzQzNiwxMSBA
QCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHNpemUsIHdlYkFzc2Vt
Ymx5UGFydGlhbENvbXBpbGVMaW1pdCwgNTAwMCwgTm9ybWFsLCAiTGltaXQgb24gdGhlIG51bWJl
ciBvZiBieXRlcyBhIFdhc206OlBsYW46OmNvbXBpbGUgc2hvdWxkIGF0dGVtcHQgYmVmb3JlIGNo
ZWNraW5nIGZvciBvdGhlciB3b3JrLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUIz
T3B0aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5vcm1hbCwg
IkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgV2ViIEFzc2VtYmx5IG1vZHVsZXMuIikgXAogICAg
IFwKLSAgICB2KGJvb2wsIHNpbXVsYXRlV2ViQXNzZW1ibHlMb3dNZW1vcnksIGZhbHNlLCBOb3Jt
YWwsICJJZiB0cnVlLCB0aGUgTWVtb3J5IG9iamVjdCB3b24ndCBtbWFwIHRoZSBmdWxsICdtYXhp
bXVtJyByYW5nZSBhbmQgaW5zdGVhZCB3aWxsIGFsbG9jYXRlIHRoZSBtaW5pbXVtIHJlcXVpcmVk
IGFtb3VudC4iKSBcCi0gICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnksIHRydWUs
IE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBhIDMyLWJpdCBhZGRyZXNzIHNw
YWNlIHdpdGggYSBzaWduYWwgaGFuZGxlciB0byBib3VuZHMgY2hlY2sgd2FzbSBtZW1vcnkuIikg
XAorICAgIC8qIEZJWE1FOiBlbmFibGUgZmFzdCBtZW1vcmllcyBvbiBpT1MgYW5kIHByZS1hbGxv
Y2F0ZSB0aGVtLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzc0
ICovIFwKKyAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSwgIWlzSU9TKCksIE5v
cm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBhIDMyLWJpdCBhZGRyZXNzIHNwYWNl
IHdpdGggYSBzaWduYWwgaGFuZGxlciB0byBib3VuZHMgY2hlY2sgd2FzbSBtZW1vcnkuIikgXAor
ICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcywgMTI4LCBO
b3JtYWwsICJXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIHVzZSA0R2lCIHZpcnR1YWwgYWxsb2Nh
dGlvbnMsIHBsdXMgYSByZWR6b25lIChjb3VudGVkIGFzIG11bHRpcGxlIG9mIDY0S2lCIFdlYkFz
c2VtYmx5IHBhZ2VzKSBhdCB0aGUgZW5kIHRvIGNhdGNoIHJlZytpbW0gYWNjZXNzZXMgd2hpY2gg
ZXhjZWVkIDMyLWJpdCwgYW55dGhpbmcgYmV5b25kIHRoZSByZWR6b25lIGlzIGV4cGxpY2l0bHkg
Ym91bmRzLWNoZWNrZWQiKSBcCiAgICAgdihib29sLCBjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFz
dE1lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgY3Jhc2ggaWYgd2UgY2Fu
J3Qgb2J0YWluIGZhc3QgbWVtb3J5IGZvciB3YXNtLiIpIFwKKyAgICB2KHVuc2lnbmVkLCB3ZWJB
c3NlbWJseUZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50LCAwLCBOb3JtYWwsICJXZWJBc3NlbWJs
eSBmYXN0IG1lbW9yaWVzIGNhbiBiZSBwcmUtYWxsb2NhdGVkIGF0IHByb2dyYW0gc3RhcnR1cCBh
bmQgcmVtYWluIGNhY2hlZCB0byBhdm9pZCBmcmFnbWVudGF0aW9uIGxlYWRpbmcgdG8gYm91bmRz
LWNoZWNrZWQgbWVtb3J5LiBUaGlzIG51bWJlciBpcyBhbiB1cHBlciBib3VuZCBvbiBpbml0aWFs
IGFsbG9jYXRpb24gYXMgd2VsbCBhcyB0b3RhbCBjb3VudCBvZiBmYXN0IG1lbW9yaWVzLiBaZXJv
IG1lYW5zIG5vIHByZS1hbGxvY2F0aW9uLCBubyBjYWNoaW5nLCBhbmQgbm8gbGltaXQgdG8gdGhl
IG51bWJlciBvZiBydW50aW1lIGFsbG9jYXRpb25zLiIpIFwKICAgICB2KGJvb2wsIHVzZVdlYkFz
c2VtYmx5RmFzdFRMUywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB0cnkgdG8gdXNl
IGZhc3QgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaWYgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBs
YXRmb3JtLiIpCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCmluZGV4IDVhYzg2MzkuLmM4M2QzNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTIzNiw2ICsyMzYsOCBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwg
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpOwogCisgICAgdm9pZCBm
aXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QmKTsKKwogICAg
IFZhbHVlKiBtYXRlcmlhbGl6ZVdhc21Db250ZXh0KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsK
ICAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgVmFs
dWUqKTsKICAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9y
eUluZm9ybWF0aW9uJiwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKik7
CkBAIC0yNTcsNiArMjU5LDE1IEBAIHByaXZhdGU6CiAgICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1
ZTsgLy8gRklYTUU6IG1ha2UgdGhpcyBsYXp5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjk3OTIKIH07CiAKKy8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJs
eSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQg
MzItYml0IG9mZnNldHMgaW4gQjMuCit2b2lkIEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBs
dXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMyX3QmIG9mZnNldCkKK3sKKyAgICBp
ZiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAgIHB0ciA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgcHRy
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgb2Zmc2V0KSk7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgfQorfQorCiBWYWx1ZSogQjNJ
UkdlbmVyYXRvcjo6bWF0ZXJpYWxpemVXYXNtQ29udGV4dChQcm9jZWR1cmUmIHByb2MsIEJhc2lj
QmxvY2sqIGJsb2NrKQogewogICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CkBAIC0z
NDAsNyArMzUxLDE2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgaWYgKGluZm8ubWVt
b3J5KSB7CiAgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsKICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQocGlubmVkR1BSLCBtX21lbW9yeVNpemVHUFIgPT0gcGlu
bmVkR1BSKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAgICAgICBjYXNl
IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQocGlubmVkR1BSLCBtX21lbW9yeVNpemVHUFIgPT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgorICAg
ICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocGlubmVkR1BSLCBJbnZhbGlkR1BSUmVnID09IHBp
bm5lZEdQUik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lbW9y
eU1vZGU6Ok51bWJlck9mTWVtb3J5TW9kZXM6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9u
Q2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAg
ICAgIH0pOwogICAgIH0KQEAgLTUyNiwxMCArNTQ2LDIwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlh
bFJlCiBpbmxpbmUgVmFsdWUqIEIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2lu
dGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6
ZU9mT3BlcmF0aW9uKQogewogICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOwotICAgIGlmICht
X21vZGUgPT0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpIHsKKyAgICBzd2l0Y2ggKG1fbW9k
ZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgIC8vIFdl
J3JlIG5vdCB1c2luZyBzaWduYWwgaGFuZGxpbmcgYXQgYWxsLCB3ZSBtdXN0IHRoZXJlZm9yZSBj
aGVjayB0aGF0IG5vIG1lbW9yeSBhY2Nlc3MgZXhjZWVkcyB0aGUgY3VycmVudCBtZW1vcnkgc2l6
ZS4KICAgICAgICAgQVNTRVJUKG1fbWVtb3J5U2l6ZUdQUik7CiAgICAgICAgIEFTU0VSVChzaXpl
T2ZPcGVyYXRpb24gKyBvZmZzZXQgPiBvZmZzZXQpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVy
LCBtX21lbW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOworICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCBwb2ludGVyLCBtX21lbW9yeVNpemVHUFIsIHNpemVPZk9wZXJhdGlvbiArIG9m
ZnNldCAtIDEsIG1faW5mby5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgIC8vIFdlJ3ZlIHZpcnR1YWxseSBt
YXBwZWQgNEdpQityZWR6b25lIGZvIHRoaXMgbWVtb3J5LiBPbmx5IHRoZSB1c2VyLWFsbG9jYXRl
ZCBwYWdlcyBhcmUgYWRkcmVzc2FibGUsIGNvbnRpZ3VvdXNseSBpbiByYW5nZSBbMCwgY3VycmVu
dF0sIGFuZCBldmVyeXRoaW5nIGFib3ZlIGlzIG1hcHBlZCBQUk9UX05PTkUuIFdlIGRvbid0IG5l
ZWQgdG8gcGVyZm9ybSBhbnkgZXhwbGljaXQgYm91bmRzIGNoZWNrIGluIHRoZSA0R2lCIHJhbmdl
IGJlY2F1c2UgV2ViQXNzZW1ibHkgcmVnaXN0ZXIgbWVtb3J5IGFjY2Vzc2VzIGFyZSAzMi1iaXQu
IEhvd2V2ZXIgV2ViQXNzZW1ibHkgcmVnaXN0ZXIraW1tZWRpYXRlIGFjY2Vzc2VzIHBlcmZvcm0g
dGhlIGFkZGl0aW9uIGluIDY0LWJpdCB3aGljaCBjYW4gcHVzaCBhbiBhY2Nlc3MgYWJvdmUgdGhl
IDMyLWJpdCBsaW1pdC4gVGhlIHJlZHpvbmUgd2lsbCBjYXRjaCBtb3N0IHNtYWxsIGltbWVkaWF0
ZXMsIGFuZCB3ZSdsbCBleHBsaWNpdGx5IGJvdW5kcyBjaGVjayBhbnkgcmVnaXN0ZXIgKyBsYXJn
ZSBpbW1lZGlhdGUgYWNjZXNzLgorICAgICAgICBpZiAob2Zmc2V0ID49IE1lbW9yeTo6ZmFzdE1h
cHBlZFJlZHpvbmVCeXRlcygpKQorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlciwgSW52YWxp
ZEdQUlJlZywgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSwgbV9pbmZvLm1lbW9yeS5tYXhp
bXVtKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lbW9yeU1vZGU6Ok51bWJlck9mTWVt
b3J5TW9kZXM6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQog
ICAgIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpF
eHQzMiwgb3JpZ2luKCksIHBvaW50ZXIpOwogICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFdhc21BZGRyZXNzVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVt
b3J5QmFzZUdQUik7CkBAIC01NjksNiArNTk5LDggQEAgaW5saW5lIEIzOjpLaW5kIEIzSVJHZW5l
cmF0b3I6Om1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCkKIAogaW5saW5lIFZhbHVlKiBC
M0lSR2VuZXJhdG9yOjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIHVpbnQzMl90IG9mZnNldCkKIHsKKyAgICBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBv
aW50ZXIsIG9mZnNldCk7CisKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkOFM6IHsKICAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFMpLCBvcmlnaW4oKSwgcG9pbnRl
ciwgb2Zmc2V0KTsKQEAgLTcwNiw2ICs3MzgsOCBAQCBpbmxpbmUgdWludDMyX3Qgc2l6ZU9mU3Rv
cmVPcChTdG9yZU9wVHlwZSBvcCkKIAogaW5saW5lIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdFN0
b3JlT3AoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25U
eXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpCiB7CisgICAgZml4dXBQb2ludGVyUGx1c09mZnNl
dChwb2ludGVyLCBvZmZzZXQpOworCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgU3RvcmVP
cFR5cGU6Okk2NFN0b3JlODoKICAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgdmFsdWUpOwpAQCAtMTI2MSw2ICsx
Mjk1LDEyIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNv
bnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUluCiAKICAgICBjb21waWxhdGlvbkNvbnRl
eHQuanNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGwgPSBqaXQuY2FsbCgpOwogCisgICAg
aWYgKCEhaW5mby5tZW1vcnkpIHsKKyAgICAgICAgLy8gUmVzZXR0aW5nIHRoZSByZWdpc3RlciBw
cmV2ZW50cyB0aGUgR0MgZnJvbSBtaXN0YWtlbmx5IHRoaW5raW5nIHRoYXQgdGhlIGNvbnRleHQg
aXMgc3RpbGwgbGl2ZS4KKyAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJh
c2VNZW1vcnlQb2ludGVyOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigwKSwgYmFzZU1lbW9yeSk7CisgICAgfQorCiAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0
T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKICAgICAgICAgR1BSUmVn
IHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwogICAgICAgICBBU1NFUlQocmVnICE9IEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggNThiZjhhMi4uODk4MTA0YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5jcHAKQEAgLTcwLDE1ICs3MCw3IEBAIHN0YXRpYyB2b2lkIHRyYXBIYW5kbGVyKGlu
dCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyA9IHNpZ0luZm8tPnNpX2FkZHI7CiAg
ICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiY2hlY2tpbmcgZmF1bHRpbmcgYWRkcmVz
czogIiwgUmF3UG9pbnRlcihmYXVsdGluZ0FkZHJlc3MpLCAiIGlzIGluIGFuIGFjdGl2ZSBmYXN0
IG1lbW9yeSIpOwotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobWVtb3J5TG9jayk7Ci0g
ICAgICAgICAgICBhdXRvJiBhY3RpdmVGYXN0TWVtb3JpZXMgPSB2aWV3QWN0aXZlRmFzdE1lbW9y
aWVzKGxvY2tlcik7Ci0gICAgICAgICAgICBmb3IgKHZvaWQqIGFjdGl2ZU1lbW9yeSA6IGFjdGl2
ZUZhc3RNZW1vcmllcykgewotICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJj
aGVja2luZyBmYXN0IG1lbW9yeSBhdDogIiwgUmF3UG9pbnRlcihhY3RpdmVNZW1vcnkpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoYWN0aXZlTWVtb3J5IDw9IGZhdWx0aW5nQWRkcmVzcyAmJiBmYXVs
dGluZ0FkZHJlc3MgPCBzdGF0aWNfY2FzdDxjaGFyKj4oYWN0aXZlTWVtb3J5KSArIGZhc3RNZW1v
cnlNYXBwZWRCeXRlcykgewotICAgICAgICAgICAgICAgICAgICBmYXVsdGVkSW5BY3RpdmVGYXN0
TWVtb3J5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgZmF1bHRlZEluQWN0aXZlRmFzdE1lbW9y
eSA9IFdhc206Ok1lbW9yeTo6YWRkcmVzc0lzSW5BY3RpdmVGYXN0TWVtb3J5KGZhdWx0aW5nQWRk
cmVzcyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkp
IHsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmb3VuZCBhY3RpdmUgZmFzdCBt
ZW1vcnkgZm9yIGZhdWx0aW5nIGFkZHJlc3MiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeS5jcHAKaW5kZXggN2VmM2Q0Zi4uOWU4ZDZlMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKQEAgLTI5LDE0OSArMjksMjk3IEBACiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiVk0uaCIKLSNpbmNsdWRlICJXYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogCi0jaW5jbHVkZSA8d3Rm
L0hleE51bWJlci5oPgorI2luY2x1ZGUgPGF0b21pYz4KKyNpbmNsdWRlIDx3dGYvTW9ub3Rvbmlj
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKIAorLy8gRklYTUU6IFdlIGNvdWxkIGJlIHNtYXJ0ZXIgYWJv
dXQgbWVtc2V0IC8gbW1hcCAvIG1hZHZpc2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzAzNDMKKy8vIEZJWE1FOiBHaXZlIHVwIHNvbWUgb2YgdGhlIGNhY2hlZCBm
YXN0IG1lbW9yaWVzIGlmIHRoZSBHQyBkZXRlcm1pbmVzIGl0J3MgZWFzeSB0byBnZXQgdGhlbSBi
YWNrLCBhbmQgdGhleSBoYXZlbid0IGJlZW4gdXNlZCBpbiBhIHdoaWxlLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzczCisvLyBGSVhNRTogTGltaXQgc2xvdyBt
ZW1vcnkgc2l6ZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDgy
NQorCiBuYW1lc3BhY2UgewotY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Citjb25zdGV4cHIg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisKK05FVkVSX0lOTElORSBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpIHsgQ1JBU0goKTsgfQor
TkVWRVJfSU5MSU5FIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3ZWJBc3NlbWJseUNvdWxk
bnRVbm1hcE1lbW9yeUJ5dGVzKCkgeyBDUkFTSCgpOyB9CitORVZFUl9JTkxJTkUgTk9fUkVUVVJO
X0RVRV9UT19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRudFVucHJvdGVjdE1lbW9yeSgpIHsg
Q1JBU0goKTsgfQorCit2b2lkKiBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzKQoreworI2lmIE9TKERB
UldJTikKKyAgICBpbnQgZmQgPSBWTV9UQUdfRk9SX1dFQkFTU0VNQkxZX01FTU9SWTsKKyNlbHNl
CisgICAgaW50IGZkID0gLTE7CisjZW5kaWYKKworICAgIHZvaWQqIGxvY2F0aW9uID0gbW1hcChu
dWxscHRyLCBieXRlcywgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCBmZCwgMCk7
CisgICAgcmV0dXJuIGxvY2F0aW9uID09IE1BUF9GQUlMRUQgPyBudWxscHRyIDogbG9jYXRpb247
CiB9CiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdl
YkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKQordm9pZCBtdW5tYXBCeXRlcyh2b2lkKiBt
ZW1vcnksIHNpemVfdCBzaXplKQogewotICAgIENSQVNIKCk7CisgICAgaWYgKFVOTElLRUxZKG11
bm1hcChtZW1vcnksIHNpemUpKSkKKyAgICAgICAgd2ViQXNzZW1ibHlDb3VsZG50VW5tYXBNZW1v
cnlCeXRlcygpOwogfQogCi1pbmxpbmUgYm9vbCBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzLCB2b2lk
KiYgbWVtb3J5KQordm9pZCB6ZXJvQW5kVW5wcm90ZWN0Qnl0ZXModm9pZCogc3RhcnQsIHNpemVf
dCBieXRlcykKIHsKLSAgICBkYXRhTG9nSWYodmVyYm9zZSwgIkF0dGVtcHRpbmcgdG8gbW1hcCAi
LCBieXRlcywgIiBieXRlczogIik7Ci0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYg
d2UgaGFkIGEgVk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MzYwMAotICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwg
Ynl0ZXMsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwotICAgIGlm
IChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
ZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYnl0ZXMpIHsKKyAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlplcm9pbmcgYW5kIHVucHJvdGVjdGluZyAiLCBieXRl
cywgIiBmcm9tICIsIFJhd1BvaW50ZXIoc3RhcnQpKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIGJlIHNtYXJ0ZXIgYWJvdXQgbWVtc2V0IC8gbW1hcCAvIG1hZHZpc2UuIEhlcmUsIHdlIG1h
eSBub3QgbmVlZCB0byBhY3Qgc3luY2hyb25vdXNseSwgb3IgbWF5YmUgd2UgY2FuIG1lbXNldCt1
bnByb3RlY3Qgc21hbGxlciByYW5nZXMgb2YgbWVtb3J5ICh3aGljaCB3b3VsZCBwYXkgb2ZmIGlm
IG5vdCBhbGwgdGhlIHdyaXRhYmxlIG1lbW9yeSB3YXMgYWN0dWFsbHkgcGh5c2ljYWxseSBiYWNr
ZWQ6IG1lbXNldCBmb3JjZXMgcGh5c2ljYWwgYmFja2luZyBvbmx5IHRvIHVucHJvdGVjdCBpdCBy
aWdodCBhZnRlcikuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAz
NDMKKyAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCBieXRlcyk7CisgICAgICAgIGlmIChVTkxJS0VM
WShtcHJvdGVjdChzdGFydCwgYnl0ZXMsIFBST1RfTk9ORSkpKQorICAgICAgICAgICAgd2ViQXNz
ZW1ibHlDb3VsZG50VW5wcm90ZWN0TWVtb3J5KCk7CiAgICAgfQotICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJzdWNjZWVkZWQiKTsKLSAgICBtZW1vcnkgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQorLy8gQWxs
b2NhdGUgZmFzdCBtZW1vcmllcyB2ZXJ5IGVhcmx5IGF0IHByb2dyYW0gc3RhcnR1cCBhbmQgY2Fj
aGUgdGhlbS4gVGhlIGZhc3QgbWVtb3JpZXMgdXNlIHNpZ25pZmljYW50IGFtb3VudHMgb2Ygdmly
dHVhbCB1bmNvbW1pdHRlZCBhZGRyZXNzIHNwYWNlLCByZWR1Y2luZyB0aGUgbGlrZWxpaG9vZCB0
aGF0IHdlJ2xsIG9idGFpbiBhbnkgaWYgd2Ugd2FpdCB0byBhbGxvY2F0ZSB0aGVtLgorLy8gV2Ug
c3RpbGwgdHJ5IHRvIGFsbG9jYXRlIGZhc3QgbWVtb3JpZXMgYXQgcnVudGltZSwgYW5kIHdpbGwg
Y2FjaGUgdGhlbSB3aGVuIHJlbGlucXVpc2hlZCB1cCB0byB0aGUgcHJlYWxsb2NhdGlvbiBsaW1p
dC4KKy8vIE5vdGUgdGhhdCB0aGlzIHN0YXRlIGlzIHBlci1wcm9jZXNzLCBub3QgcGVyLVZNLgor
Ly8gV2UgdXNlIHNpbXBsZSBzdGF0aWMgZ2xvYmFscyB3aGljaCBkb24ndCBhbGxvY2F0ZSB0byBh
dm9pZCBlYXJseSBmcmFnbWVudGF0aW9uIGFuZCB0byBrZWVwIG1hbmFnZW1lbnQgdG8gdGhlIGJh
cmUgbWluaW11bS4gV2UgYXZvaWQgbG9ja2luZyBiZWNhdXNlIGZhc3QgbWVtb3JpZXMgdXNlIHNl
Z2ZhdWx0IHNpZ25hbCBoYW5kbGluZyB0byBoYW5kbGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4g
VGhpcyByZXF1aXJlcyBpZGVudGlmeWluZyBpZiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpcyBpbiBh
IGZhc3QgbWVtb3J5IHJhbmdlLCB3aGljaCBzaG91bGQgYXZvaWQgYWNxdWlyaW5nIGEgbG9jayBs
ZXN0IHRoZSBhY3R1YWwgc2lnbmFsIHdhcyBjYXVzZWQgYnkgdGhpcyB2ZXJ5IGNvZGUgd2hpbGUg
aXQgYWxyZWFkeSBoZWxkIHRoZSBsb2NrLgorLy8gU3BlZWQgYW5kIGNvbnRlbnRpb24gZG9uJ3Qg
cmVhbGx5IG1hdHRlciBoZXJlLCBidXQgc2ltcGxpY2l0eSBkb2VzLiBXZSB0aGVyZWZvcmUgdXNl
IHN0cmFpZ2h0Zm9yd2FyZCBGSUZPcyBmb3Igb3VyIGNhY2hlLCBhbmQgbGluZWFyIHRyYXZlcnNh
bCBmb3IgdGhlIGxpc3Qgb2YgY3VycmVudGx5IGFjdGl2ZSBmYXN0IG1lbW9yaWVzLgorY29uc3Rl
eHByIHNpemVfdCBmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQgeyAxNiB9OworY29uc3RleHByIHNp
emVfdCBmYXN0TWVtb3J5QWxsb2NhdGlvblNvZnRMaW1pdCB7IDMyIH07IC8vIFByZXZlbnRzIGZp
bGxpbmcgdXAgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KK3N0YXRpY19hc3NlcnQoZmFzdE1l
bW9yeUFsbG9jYXRpb25Tb2Z0TGltaXQgPj0gZmFzdE1lbW9yeUNhY2hlSGFyZExpbWl0LCAiVGhl
IGNhY2hlIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIHdlJ2xsIGV2
ZXIgYWxsb2NhdGUiKTsKK3NpemVfdCBmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCB7IDAgfTsK
K3N0ZDo6YXRvbWljPHZvaWQqPiBmYXN0TWVtb3J5Q2FjaGVbZmFzdE1lbW9yeUNhY2hlSGFyZExp
bWl0XSA9IHsgQVRPTUlDX1ZBUl9JTklUKG51bGxwdHIpIH07CitzdGQ6OmF0b21pYzx2b2lkKj4g
Y3VycmVudGx5QWN0aXZlRmFzdE1lbW9yaWVzW2Zhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0
XSA9IHsgQVRPTUlDX1ZBUl9JTklUKG51bGxwdHIpIH07CitzdGQ6OmF0b21pYzxzaXplX3Q+IGN1
cnJlbnRseUFsbG9jYXRlZEZhc3RNZW1vcmllcyA9IEFUT01JQ19WQVJfSU5JVCgwKTsKK3N0ZDo6
YXRvbWljPHNpemVfdD4gb2JzZXJ2ZWRNYXhpbXVtRmFzdE1lbW9yeSA9IEFUT01JQ19WQVJfSU5J
VCgwKTsKKwordm9pZCogdHJ5R2V0Q2FjaGVkRmFzdE1lbW9yeSgpCiB7Ci0gICAgc3dpdGNoICht
b2RlKSB7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogcmV0dXJuICJCb3Vu
ZHNDaGVja2luZyI7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHJldHVybiAiU2ln
bmFsaW5nIjsKLSAgICBjYXNlIE1lbW9yeU1vZGU6Ok51bWJlck9mTWVtb3J5TW9kZXM6IGJyZWFr
OworICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwgZmFzdE1lbW9yeVByZWFsbG9jYXRl
Q291bnQ7ICsraWR4KSB7CisgICAgICAgIGlmICh2b2lkKiBwcmV2aW91cyA9IGZhc3RNZW1vcnlD
YWNoZVtpZHhdLmV4Y2hhbmdlKG51bGxwdHIsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKQor
ICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwogICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEZhc3RNZW1vcmllcyA9IDQ7Ci1zdGF0aWMgdW5zaWdu
ZWQgYWxsb2NhdGVkRmFzdE1lbW9yaWVzIHsgMCB9OwotU3RhdGljTG9jayBtZW1vcnlMb2NrOwot
aW5saW5lIERlcXVlPHZvaWQqLCBtYXhGYXN0TWVtb3JpZXM+JiBhdmFpbGFibGVGYXN0TWVtb3Jp
ZXMoY29uc3QgQWJzdHJhY3RMb2NrZXImKQorYm9vbCB0cnlBZGRUb0NhY2hlZEZhc3RNZW1vcnko
dm9pZCogbWVtb3J5KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEZXF1ZTx2b2lkKiwg
bWF4RmFzdE1lbW9yaWVzPj4gYXZhaWxhYmxlRmFzdE1lbW9yaWVzOwotICAgIHJldHVybiBhdmFp
bGFibGVGYXN0TWVtb3JpZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhc3RNZW1v
cnlQcmVhbGxvY2F0ZUNvdW50OyArK2kpIHsKKyAgICAgICAgdm9pZCogZXhwZWN0ZWQgPSBudWxs
cHRyOworICAgICAgICBpZiAoZmFzdE1lbW9yeUNhY2hlW2ldLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ry
b25nKGV4cGVjdGVkLCBtZW1vcnksIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKSB7CisgICAg
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiQ2FjaGVkIGZhc3QgbWVtb3J5ICIsIFJhd1Bv
aW50ZXIobWVtb3J5KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBIYXNoU2V0PHZvaWQqPiYgYWN0aXZl
RmFzdE1lbW9yaWVzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK2Jvb2wgdHJ5QWRkVG9DdXJyZW50
bHlBY3RpdmVGYXN0TWVtb3JpZXModm9pZCogbWVtb3J5KQogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxIYXNoU2V0PHZvaWQqPj4gYWN0aXZlRmFzdE1lbW9yaWVzOwotICAgIHJldHVybiBh
Y3RpdmVGYXN0TWVtb3JpZXM7CisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgZmFzdE1l
bW9yeUFsbG9jYXRpb25Tb2Z0TGltaXQ7ICsraWR4KSB7CisgICAgICAgIHZvaWQqIGV4cGVjdGVk
ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGN1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllc1tpZHhd
LmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4cGVjdGVkLCBtZW1vcnksIHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcV9yZWwpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKIH0KIAotY29uc3QgSGFzaFNldDx2b2lkKj4mIHZpZXdBY3RpdmVGYXN0TWVtb3Jp
ZXMoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKK3ZvaWQgcmVtb3ZlRnJvbUN1cnJlbnRs
eUFjdGl2ZUZhc3RNZW1vcmllcyh2b2lkKiBtZW1vcnkpCiB7Ci0gICAgcmV0dXJuIGFjdGl2ZUZh
c3RNZW1vcmllcyhsb2NrZXIpOworICAgIGZvciAoc2l6ZV90IGlkeCA9IDA7IGlkeCA8IGZhc3RN
ZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0OyArK2lkeCkgeworICAgICAgICB2b2lkKiBleHBlY3Rl
ZCA9IG1lbW9yeTsKKyAgICAgICAgaWYgKGN1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllc1tpZHhd
LmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4cGVjdGVkLCBudWxscHRyLCBzdGQ6Om1lbW9yeV9v
cmRlcl9hY3FfcmVsKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotaW5saW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShW
TSYgdm0sIHZvaWQqJiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUm
IG1vZGUpCit2b2lkKiB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSkKIHsKLSAgICBhdXRvIGRlcXVl
RmFzdE1lbW9yeSA9IFsmXSAoKSAtPiBib29sIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBldmVudHVhbGx5IHJldHVybiB0aGVzZSB0byB0aGUgT1MgaWYgd2UgZ28gc29tZSBudW1iZXIg
b2YgR0NzCi0gICAgICAgIC8vIHdpdGhvdXQgdXNpbmcgdGhlbS4KLSAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobWVtb3J5TG9jayk7Ci0gICAgICAgIGlmICghYXZhaWxhYmxlRmFzdE1lbW9yaWVz
KGxvY2tlcikuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtZW1vcnkgPSBhdmFpbGFibGVGYXN0
TWVtb3JpZXMobG9ja2VyKS50YWtlRmlyc3QoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
YWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcikuYWRkKG1lbW9yeSk7Ci0gICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotICAgICAgICAgICAgbWFwcGVk
Q2FwYWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXM7Ci0gICAgICAgICAgICBtb2RlID0gTWVt
b3J5TW9kZTo6U2lnbmFsaW5nOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgdm9pZCog
bWVtb3J5ID0gbnVsbHB0cjsKKworICAgIGlmIChMSUtFTFkoT3B0aW9uczo6dXNlV2ViQXNzZW1i
bHlGYXN0TWVtb3J5KCkpKSB7CisgICAgICAgIG1lbW9yeSA9IHRyeUdldENhY2hlZEZhc3RNZW1v
cnkoKTsKKyAgICAgICAgaWYgKG1lbW9yeSkKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJ0cnlHZXRGYXN0TWVtb3J5IHJlLXVzaW5nICIsIFJhd1BvaW50ZXIobWVtb3J5KSk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gTm8gbWVtb3J5IHdhcyBhdmFpbGFibGUgaW4g
dGhlIGNhY2hlLiBNYXliZSB3YWl0aW5nIG9uIEdDIHdpbGwgZmluZCBhIGZyZWUgb25lLgorICAg
ICAgICAgICAgLy8gRklYTUUgY29sbGVjdFN5bmMoRnVsbCkgYW5kIGN1c3RvbSBlYWdlciBkZXN0
cnVjdGlvbiBvZiB3YXNtIG1lbW9yaWVzIGNvdWxkIGJlIGJldHRlci4gRm9yIG5vdyB1c2UgY29s
bGVjdEFsbEdhcmJhZ2UuIEFsc28sIG5vdGhpbmcgdGVsbHMgdXMgdGhlIGN1cnJlbnQgVk0gaXMg
aG9sZGluZyBvbnRvIGZhc3QgbWVtb3JpZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzA3NDgKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlH
ZXRGYXN0TWVtb3J5IHdhaXRpbmcgb24gR0MgYW5kIHJldHJ5aW5nIik7CisgICAgICAgICAgICB2
bS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CisgICAgICAgICAgICBtZW1vcnkgPSB0cnlHZXRD
YWNoZWRGYXN0TWVtb3J5KCk7CisgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAidHJ5
R2V0RmFzdE1lbW9yeSB3YWl0ZWQgb24gR0MgYW5kIHJldHJpZWQgIiwgbWVtb3J5PyAic3VjY2Vz
c2Z1bGx5IiA6ICJ1bnNlY2Nlc3NmdWxseSIpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9OwogCi0gICAgYXV0byBmYWlsID0gW10gKCkgLT4gYm9vbCB7CisgICAgICAg
IC8vIFRoZSBzb2Z0IGxpbWl0IGlzIGluaGVyZW50bHkgcmFjeSBiZWNhdXNlIGNoZWNraW5nK2Fs
bG9jYXRpb24gaXNuJ3QgYXRvbWljLiBFeGNlZWRpbmcgaXQgc2xpZ2h0bHkgaXMgZmluZS4KKyAg
ICAgICAgYm9vbCBhdEFsbG9jYXRpb25Tb2Z0TGltaXQgPSBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0
TWVtb3JpZXMubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSA+PSBmYXN0TWVtb3J5QWxs
b2NhdGlvblNvZnRMaW1pdDsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSAmJiBhdEFsbG9j
YXRpb25Tb2Z0TGltaXQsICJ0cnlHZXRGYXN0TWVtb3J5IHJlYWNoZWQgYWxsb2NhdGlvbiBzb2Z0
IGxpbWl0IG9mICIsIGZhc3RNZW1vcnlBbGxvY2F0aW9uU29mdExpbWl0KTsKKworICAgICAgICBp
ZiAoIW1lbW9yeSAmJiAhYXRBbGxvY2F0aW9uU29mdExpbWl0KSB7CisgICAgICAgICAgICBtZW1v
cnkgPSBtbWFwQnl0ZXMoTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CisgICAgICAgICAgICBp
ZiAobWVtb3J5KSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IGN1cnJlbnRseUFsbG9jYXRlZCA9
IDEgKyBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0TWVtb3JpZXMuZmV0Y2hfYWRkKDEsIHN0ZDo6bWVt
b3J5X29yZGVyX2FjcV9yZWwpOworICAgICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50bHlPYnNl
cnZlZE1heGltdW0gPSBvYnNlcnZlZE1heGltdW1GYXN0TWVtb3J5LmxvYWQoc3RkOjptZW1vcnlf
b3JkZXJfYWNxdWlyZSk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRseUFsbG9jYXRlZCA+
IGN1cnJlbnRseU9ic2VydmVkTWF4aW11bSkgeworICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
ZXhwZWN0ZWQgPSBjdXJyZW50bHlPYnNlcnZlZE1heGltdW07CisgICAgICAgICAgICAgICAgICAg
IGJvb2wgc3VjY2VzcyA9IG9ic2VydmVkTWF4aW11bUZhc3RNZW1vcnkuY29tcGFyZV9leGNoYW5n
ZV9zdHJvbmcoZXhwZWN0ZWQsIGN1cnJlbnRseUFsbG9jYXRlZCwgc3RkOjptZW1vcnlfb3JkZXJf
YWNxX3JlbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgY3VycmVu
dGx5IG9ic2VydmVkIG1heGltdW0gaXMgbm93ICIsIGN1cnJlbnRseUFsbG9jYXRlZCk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGxvc3Qg
dGhlIHVwZGF0ZSByYWNlLCBidXQgdGhlIGNvdW50ZXIgaXMgbW9ub3RvbmljIHNvIHRoZSB3aW5u
ZXIgbXVzdCBoYXZlIHVwZGF0ZWQgdGhlIHZhbHVlIHRvIHdoYXQgd2Ugd2VyZSBnb2luZyB0byB1
cGRhdGUgaXQgdG8sIG9yIG11bHRpcGxlIHdpbm5lcnMgZGlkIHNvLgorICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGV4cGVjdGVkID49IGN1cnJlbnRseUFsbG9jYXRlZCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRG
YXN0TWVtb3J5IGFsbG9jYXRlZCAiLCBSYXdQb2ludGVyKG1lbW9yeSksICIsIGN1cnJlbnRseSBh
bGxvY2F0ZWQgaXMgIiwgY3VycmVudGx5QWxsb2NhdGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChtZW1vcnkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0
cnlBZGRUb0N1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllcyhtZW1vcnkpKSkgeworICAgICAgICAg
ICAgLy8gV2UgZ290IGEgbWVtb3J5LCBidXQgcmVhY2hlZCB0aGUgYWxsb2NhdGlvbiBzb2Z0IGxp
bWl0ICphbmQqIGFsbCBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yaWVzIGFyZSBhY3RpdmUsIG5vbmUg
YXJlIGNhY2hlZC4gVGhhdCdzIGEgYnVtbWVyLCB3ZSBoYXZlIHRvIGdldCByaWQgb2Ygb3VyIG1l
bW9yeS4gV2UgY2FuJ3QganVzdCBob2xkIG9uIHRvIGl0IGJlY2F1c2UgdGhlIGxpc3Qgb2YgYWN0
aXZlIGZhc3QgbWVtb3JpZXMgbXVzdCBiZSBwcmVjaXNlLgorICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgInRyeUdldEZhc3RNZW1vcnkgZm91bmQgYSBmYXN0IG1lbW9yeSBidXQgaGFk
IHRvIGdpdmUgaXQgdXAiKTsKKyAgICAgICAgICAgIG11bm1hcEJ5dGVzKG1lbW9yeSwgTWVtb3J5
OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CisgICAgICAgICAgICBjdXJyZW50bHlBbGxvY2F0ZWRGYXN0
TWVtb3JpZXMuZmV0Y2hfc3ViKDEsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpOworICAgICAg
ICAgICAgbWVtb3J5ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbWVt
b3J5KSB7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ0cnlHZXRGYXN0TWVtb3J5IGNv
dWxkbid0IHJlLXVzZSBvciBhbGxvY2F0ZSBhIGZhc3QgbWVtb3J5Iik7CiAgICAgICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjpjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSgpKSkKICAg
ICAgICAgICAgIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH07CisgICAgfQogCi0gICAgLy8gV2UgbWlnaHQgR0MgaGVyZSBzbyB3
ZSBzaG91bGQgYmUgaG9sZGluZyB0aGUgQVBJIGxvY2suCi0gICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBiZSBhYmxlIHRvIHN5bmNyb25vdXNseSB0cmlnZ2VyIHRoZSBHQyBmcm9tIGFub3RoZXIgdGhy
ZWFkLgotICAgIEFTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIWZhc3RNZW1vcnlFbmFibGVkKCkpKQotICAgICAgICByZXR1cm4gZmFp
bCgpOworICAgIHJldHVybiBtZW1vcnk7Cit9CiAKLSAgICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUg
d2UgaGF2ZSBhIHN0dWIgcHJpb3IgdG8gcnVubmluZyBjb2RlLgotICAgIGlmIChVTkxJS0VMWSgh
VGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVy
YXRvcikpKQotICAgICAgICByZXR1cm4gZmFpbCgpOwordm9pZCogdHJ5R2V0U2xvd01lbW9yeShz
aXplX3QgYnl0ZXMpCit7CisgICAgdm9pZCogbWVtb3J5ID0gbW1hcEJ5dGVzKGJ5dGVzKTsKKyAg
ICBkYXRhTG9nTG5JZihtZW1vcnkgJiYgdmVyYm9zZSwgIk9idGFpbmVkIHNsb3cgbWVtb3J5ICIs
IFJhd1BvaW50ZXIobWVtb3J5KSwgIiB3aXRoIGNhcGFjaXR5ICIsIGJ5dGVzKTsKKyAgICBkYXRh
TG9nTG5JZighbWVtb3J5ICYmIHZlcmJvc2UsICJGYWlsZWQgb2J0YWluaW5nIHNsb3cgbWVtb3J5
IHdpdGggY2FwYWNpdHkgIiwgYnl0ZXMpOworICAgIHJldHVybiBtZW1vcnk7Cit9CiAKLSAgICBB
U1NFUlQoYWxsb2NhdGVkRmFzdE1lbW9yaWVzIDw9IG1heEZhc3RNZW1vcmllcyk7Ci0gICAgaWYg
KGRlcXVlRmFzdE1lbW9yeSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgcmVsaW5xdWlz
aE1lbW9yeSh2b2lkKiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUsIHNpemVfdCBtYXBwZWRD
YXBhY2l0eSwgTWVtb3J5TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNh
c2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlv
bnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bWFwcGVkQ2FwYWNpdHkgPT0gTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CiAKLSAgICAvLyBJ
ZiB3ZSBoYXZlIGFsbG9jYXRlZCBhbGwgdGhlIGZhc3QgbWVtb3JpZXMuLi4gdG9vIGJhZC4KLSAg
ICBpZiAoYWxsb2NhdGVkRmFzdE1lbW9yaWVzID09IG1heEZhc3RNZW1vcmllcykgewotICAgICAg
ICAvLyBUaGVyZSBpcyBhIHJlYXNvbmFibGUgY2hhbmNlIHRoYXQgYW5vdGhlciBtb2R1bGUgaGFz
IGRpZWQgYnV0IGhhcyBub3QgYmVlbiBjb2xsZWN0ZWQgeWV0LiBEb24ndCBsb3NlIGhvcGUgeWV0
IQotICAgICAgICB2bS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7Ci0gICAgICAgIGlmIChkZXF1
ZUZhc3RNZW1vcnkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4g
ZmFpbCgpOworICAgICAgICAvLyBUaGlzIG1lbW9yeSBjYW5ub3QgY2F1c2UgYSB0cmFwIGFueW1v
cmUuCisgICAgICAgIHJlbW92ZUZyb21DdXJyZW50bHlBY3RpdmVGYXN0TWVtb3JpZXMobWVtb3J5
KTsKKworICAgICAgICAvLyBXZSBtYXkgY2FjaGUgZmFzdCBtZW1vcmllcy4gQXNzdW1pbmcgd2Ug
d2lsbCwgd2UgaGF2ZSB0byByZXNldCB0aGVtIGJlZm9yZSBpbnNlcnRpbmcgdGhlbSBpbnRvIHRo
ZSBjYWNoZS4KKyAgICAgICAgemVyb0FuZFVucHJvdGVjdEJ5dGVzKG1lbW9yeSwgd3JpdGFibGVT
aXplKTsKKworICAgICAgICBpZiAodHJ5QWRkVG9DYWNoZWRGYXN0TWVtb3J5KG1lbW9yeSkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInJlbGlu
cXVpc2hNZW1vcnkgdW5hYmxlIHRvIGNhY2hlIGZhc3QgbWVtb3J5LCBmcmVlaW5nIGluc3RlYWQg
IiwgUmF3UG9pbnRlcihtZW1vcnkpKTsKKyAgICAgICAgbXVubWFwQnl0ZXMobWVtb3J5LCBNZW1v
cnk6OmZhc3RNYXBwZWRCeXRlcygpKTsKKyAgICAgICAgY3VycmVudGx5QWxsb2NhdGVkRmFzdE1l
bW9yaWVzLmZldGNoX3N1YigxLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKworICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1tYXBCeXRlcyhmYXN0TWVtb3J5TWFwcGVkQnl0
ZXMsIG1lbW9yeSkpIHsKLSAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVk
Qnl0ZXM7Ci0gICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7Ci0gICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1lbW9yeUxvY2spOwotICAgICAgICBhbGxvY2F0ZWRGYXN0TWVtb3Jp
ZXMrKzsKLSAgICAgICAgYXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKS5h
ZGQobWVtb3J5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAicmVsaW5xdWlzaEZhc3RNZW1vcnkgZnJlZWluZyBzbG93IG1lbW9y
eSAiLCBSYXdQb2ludGVyKG1lbW9yeSkpOworICAgICAgICBtdW5tYXBCeXRlcyhtZW1vcnksIG1h
cHBlZENhcGFjaXR5KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBNZW1vcnlNb2RlOjpO
dW1iZXJPZk1lbW9yeU1vZGVzOgorICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobWVt
b3J5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQogCi0gICAgcmV0dXJuIGZhaWwoKTsKK2Jvb2wgbWFrZU5ld01lbW9yeVJlYWRXcml0
ZU9yUmVsaW5xdWlzaCh2b2lkKiBtZW1vcnksIHNpemVfdCBpbml0aWFsQnl0ZXMsIHNpemVfdCBt
YXBwZWRDYXBhY2l0eUJ5dGVzLCBNZW1vcnlNb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKG1lbW9y
eSAmJiBpbml0aWFsQnl0ZXMgPD0gbWFwcGVkQ2FwYWNpdHlCeXRlcyk7CisgICAgaWYgKGluaXRp
YWxCeXRlcykgeworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWFya2luZyBXZWJBc3Nl
bWJseSBtZW1vcnkncyAiLCBSYXdQb2ludGVyKG1lbW9yeSksICIncyBpbml0aWFsICIsIGluaXRp
YWxCeXRlcywgIiBieXRlcyBhcyByZWFkK3dyaXRlIik7CisgICAgICAgIGlmIChtcHJvdGVjdCht
ZW1vcnksIGluaXRpYWxCeXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIHdoeSA9IHN0cmVycm9yKGVycm5vKTsKKyAgICAgICAgICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJGYWlsZWQgbWFraW5nIG1lbW9yeSAiLCBSYXdQb2ludGVyKG1lbW9y
eSksICIgcmVhZGFibGUgYW5kIHdyaXRhYmxlOiAiLCB3aHkpOworICAgICAgICAgICAgcmVsaW5x
dWlzaE1lbW9yeShtZW1vcnksIDAsIG1hcHBlZENhcGFjaXR5Qnl0ZXMsIG1vZGUpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworCitjb25zdCBjaGFyKiBtYWtlU3RyaW5n
KE1lbW9yeU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAgICBjYXNl
IE1lbW9yeU1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOworICAgIGNhc2UgTWVt
b3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOwogfQogCi1pbmxpbmUgdm9pZCBy
ZWxlYXNlRmFzdE1lbW9yeSh2b2lkKiYgbWVtb3J5LCBzaXplX3Qgd3JpdGFibGVTaXplLCBzaXpl
X3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUgbW9kZSkKK3ZvaWQgTWVtb3J5Ojppbml0aWFs
aXplUHJlYWxsb2NhdGlvbnMoKQogewotICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25h
bGluZyB8fCAhbWVtb3J5KQorICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlV2ViQXNzZW1i
bHlGYXN0TWVtb3J5KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSRUxFQVNFX0FTU0VSVCht
ZW1vcnkgJiYgbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKTsKLSAgICBB
U1NFUlQoZmFzdE1lbW9yeUVuYWJsZWQoKSk7CisgICAgLy8gUmFjZXMgY2Fubm90IG9jY3VyIGlu
IHRoaXMgZnVuY3Rpb246IGl0IGlzIG9ubHkgY2FsbGVkIGF0IHByb2dyYW0gaW5pdGlhbGl6YXRp
b24sIGJlZm9yZSBXZWJBc3NlbWJseSBjYW4gYmUgaW52b2tlZC4KKworICAgIGNvbnN0IGF1dG8g
c3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgY29uc3Qgc2l6ZV90IGRlc2ly
ZWRGYXN0TWVtb3JpZXMgPSBzdGQ6Om1pbjxzaXplX3Q+KE9wdGlvbnM6OndlYkFzc2VtYmx5RmFz
dE1lbW9yeVByZWFsbG9jYXRlQ291bnQoKSwgZmFzdE1lbW9yeUNhY2hlSGFyZExpbWl0KTsKKwor
ICAgIC8vIFN0YXJ0IG9mZiB0cnlpbmcgdG8gYWxsb2NhdGUgZmFzdCBtZW1vcmllcyBjb250aWd1
b3VzbHkgc28gdGhleSBkb24ndCBmcmFnbWVudCBlYWNoIG90aGVyLiBUaGlzIGNhbiBmYWlsIGlm
IHRoZSBhZGRyZXNzIHNwYWNlIGlzIG90aGVyd2lzZSBmcmFnbWVudGVkLiBJbiB0aGF0IGNhc2Us
IGdvIGZvciBzbWFsbGVyIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbnMuIFdlJ2xsIGV2ZW50dWFsbHkg
Z2V0IGluZGl2aWR1YWwgbm9uLWNvbnRpZ3VvdXMgZmFzdCBtZW1vcmllcyBhbGxvY2F0ZWQsIG9y
IHdlJ2xsIGp1c3QgYmUgdW5hYmxlIHRvIGZpdCBhIHNpbmdsZSBvbmUgYXQgd2hpY2ggcG9pbnQg
d2UgZ2l2ZSB1cC4KKyAgICBhdXRvIGFsbG9jYXRlQ29udGlndW91c0Zhc3RNZW1vcmllcyA9IFsm
XSAoc2l6ZV90IG51bUNvbnRpZ3VvdXMpIC0+IGJvb2wgeworICAgICAgICBpZiAodm9pZCAqbWVt
b3J5ID0gbW1hcEJ5dGVzKE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkgKiBudW1Db250aWd1b3Vz
KSkgeworICAgICAgICAgICAgZm9yIChzaXplX3Qgc3ViTWVtb3J5ID0gMDsgc3ViTWVtb3J5IDwg
bnVtQ29udGlndW91czsgKytzdWJNZW1vcnkpIHsKKyAgICAgICAgICAgICAgICB2b2lkKiBzdGFy
dEFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5OjpmYXN0
TWFwcGVkQnl0ZXMoKSAqIHN1Yk1lbW9yeSArIHN1Yk1lbW9yeTsKKyAgICAgICAgICAgICAgICBi
b29sIGluc2VydGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY2FjaGVF
bnRyeSA9IDA7IGNhY2hlRW50cnkgPCBmYXN0TWVtb3J5Q2FjaGVIYXJkTGltaXQ7ICsrY2FjaGVF
bnRyeSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50
cnldLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkgPT0gbnVsbHB0cikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZmFzdE1lbW9yeUNhY2hlW2NhY2hlRW50cnldLnN0b3JlKHN0YXJ0
QWRkcmVzcywgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbnNlcnRlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAg
IHNpemVfdCBmcmFnbWVudHMgPSAwOworICAgIHNpemVfdCBudW1GYXN0TWVtb3JpZXMgPSAwOwor
ICAgIHNpemVfdCBjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQgPSBkZXNpcmVkRmFz
dE1lbW9yaWVzOworICAgIHdoaWxlIChudW1GYXN0TWVtb3JpZXMgIT0gZGVzaXJlZEZhc3RNZW1v
cmllcyAmJiBjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQgIT0gMCkgeworICAgICAg
ICBpZiAoYWxsb2NhdGVDb250aWd1b3VzRmFzdE1lbW9yaWVzKGNvbnRpZ3VvdXNNZW1vcnlBbGxv
Y2F0aW9uQXR0ZW1wdCkpIHsKKyAgICAgICAgICAgIG51bUZhc3RNZW1vcmllcyArPSBjb250aWd1
b3VzTWVtb3J5QWxsb2NhdGlvbkF0dGVtcHQ7CisgICAgICAgICAgICBjb250aWd1b3VzTWVtb3J5
QWxsb2NhdGlvbkF0dGVtcHQgPSBzdGQ6Om1pbihjb250aWd1b3VzTWVtb3J5QWxsb2NhdGlvbkF0
dGVtcHQgLSAxLCBkZXNpcmVkRmFzdE1lbW9yaWVzIC0gbnVtRmFzdE1lbW9yaWVzKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAtLWNvbnRpZ3VvdXNNZW1vcnlBbGxvY2F0aW9uQXR0ZW1w
dDsKKyAgICAgICAgKytmcmFnbWVudHM7CisgICAgfQorCisgICAgZmFzdE1lbW9yeVByZWFsbG9j
YXRlQ291bnQgPSBudW1GYXN0TWVtb3JpZXM7CisgICAgY3VycmVudGx5QWxsb2NhdGVkRmFzdE1l
bW9yaWVzLnN0b3JlKGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50LCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKKyAgICBvYnNlcnZlZE1heGltdW1GYXN0TWVtb3J5LnN0b3JlKGZhc3RNZW1v
cnlQcmVhbGxvY2F0ZUNvdW50LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIAotICAgIG1l
bXNldChtZW1vcnksIDAsIHdyaXRhYmxlU2l6ZSk7Ci0gICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwg
d3JpdGFibGVTaXplLCBQUk9UX05PTkUpKQotICAgICAgICBDUkFTSCgpOworICAgIGNvbnN0IGF1
dG8gZW5kVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogCi0gICAgTG9ja0hvbGRlciBsb2Nr
ZXIobWVtb3J5TG9jayk7Ci0gICAgYm9vbCByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9j
a2VyKS5yZW1vdmUobWVtb3J5KTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsK
LSAgICBBU1NFUlQoYXZhaWxhYmxlRmFzdE1lbW9yaWVzKGxvY2tlcikuc2l6ZSgpIDwgYWxsb2Nh
dGVkRmFzdE1lbW9yaWVzKTsKLSAgICBhdmFpbGFibGVGYXN0TWVtb3JpZXMobG9ja2VyKS5hcHBl
bmQobWVtb3J5KTsKLSAgICBtZW1vcnkgPSBudWxscHRyOworICAgIGZvciAoc2l6ZV90IGNhY2hl
RW50cnkgPSAwOyBjYWNoZUVudHJ5IDwgZmFzdE1lbW9yeVByZWFsbG9jYXRlQ291bnQ7ICsrY2Fj
aGVFbnRyeSkgeworICAgICAgICB2b2lkKiBzdGFydEFkZHJlc3MgPSBmYXN0TWVtb3J5Q2FjaGVb
Y2FjaGVFbnRyeV0ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgQVNT
RVJUKHN0YXJ0QWRkcmVzcyk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcmUtYWxs
b2NhdGlvbiBvZiBXZWJBc3NlbWJseSBmYXN0IG1lbW9yeSBhdCAiLCBSYXdQb2ludGVyKHN0YXJ0
QWRkcmVzcykpOworICAgIH0KKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJlLWFsbG9jYXRl
ZCAiLCBmYXN0TWVtb3J5UHJlYWxsb2NhdGVDb3VudCwgIiBXZWJBc3NlbWJseSBmYXN0IG1lbW9y
aWVzIGluICIsIGZhc3RNZW1vcnlQcmVhbGxvY2F0ZUNvdW50ID09IDAgPyAwIDogZnJhZ21lbnRz
LCBmcmFnbWVudHMgPT0gMSA/ICIgZnJhZ21lbnQsIHRvb2sgIiA6ICIgZnJhZ21lbnRzLCB0b29r
ICIsIGVuZFRpbWUgLSBzdGFydFRpbWUpOwogfQogCiBNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQg
aW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCkBAIC0xOTQsODcgKzM0Miw5NiBAQCBNZW1vcnk6
Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11
bSwgc2l6ZV90IG1hcHBlZAogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Ok1lbW9y
eSBhbGxvY2F0aW5nICIsICp0aGlzKTsKIH0KIAotUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVh
dGVJbXBsKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6
Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVpcmVkTW9kZSkKK1JlZlB0cjxNZW1vcnk+IE1lbW9y
eTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQog
eworICAgIEFTU0VSVChpbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBt
YXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBj
YWxsZXIuCiAKLSAgICBNZW1vcnlNb2RlIG1vZGUgPSByZXF1aXJlZE1vZGUgPyAqcmVxdWlyZWRN
b2RlIDogTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7Ci0gICAgY29uc3Qgc2l6ZV90IHNpemUg
PSBpbml0aWFsLmJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1hcHBlZENhcGFjaXR5ID0gbWF4aW11bSA/
IG1heGltdW0uYnl0ZXMoKSA6IFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKTsKLSAgICB2b2lkKiBt
ZW1vcnkgPSBudWxscHRyOworICAgIGNvbnN0IHNpemVfdCBpbml0aWFsQnl0ZXMgPSBpbml0aWFs
LmJ5dGVzKCk7CisgICAgY29uc3Qgc2l6ZV90IG1heGltdW1CeXRlcyA9IG1heGltdW0gPyBtYXhp
bXVtLmJ5dGVzKCkgOiAwOworICAgIHNpemVfdCBtYXBwZWRDYXBhY2l0eUJ5dGVzID0gMDsKKyAg
ICBNZW1vcnlNb2RlIG1vZGU7CiAKLSAgICBhdXRvIG1ha2VFbXB0eU1lbW9yeSA9IFsmXSAoKSAt
PiBSZWZQdHI8TWVtb3J5PiB7Ci0gICAgICAgIGlmIChtb2RlID09IE1lbW9yeU1vZGU6OlNpZ25h
bGluZykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIFdlIG5lZWQgdG8gYmUg
c3VyZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCisgICAgaWYgKFVOTElL
RUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5r
R2VuZXJhdG9yKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgaWYgKG1heGltdW0g
JiYgIW1heGltdW1CeXRlcykgeworICAgICAgICAvLyBVc2VyIHNwZWNpZmllZCBhIHplcm8gbWF4
aW11bSwgaW5pdGlhbCBzaXplIG11c3QgYWxzbyBiZSB6ZXJvLgorICAgICAgICBSRUxFQVNFX0FT
U0VSVCghaW5pdGlhbEJ5dGVzKTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnko
aW5pdGlhbCwgbWF4aW11bSkpOwotICAgIH07Ci0KLSAgICBpZiAoIW1hcHBlZENhcGFjaXR5KSB7
Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugc3BlY2lmaWVkIGEgemVybyBhcyBtYXhpbXVtICh3
aGljaCBtZWFucyB3ZSBhbHNvIGhhdmUgemVybyBhcyBpbml0aWFsIHNpemUpLgotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc2l6ZSk7Ci0gICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1v
cnk6OmNyZWF0ZSBhbGxvY2F0aW5nIG5vdGhpbmciKTsKLSAgICAgICAgcmV0dXJuIG1ha2VFbXB0
eU1lbW9yeSgpOwogICAgIH0KIAotICAgIGJvb2wgY2FuVXNlRmFzdE1lbW9yeSA9ICFyZXF1aXJl
ZE1vZGUgfHwgcmVxdWlyZWRNb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZzsKLSAgICBpZiAo
IWNhblVzZUZhc3RNZW1vcnkgfHwgIXRyeUdldEZhc3RNZW1vcnkodm0sIG1lbW9yeSwgbWFwcGVk
Q2FwYWNpdHksIG1vZGUpKSB7Ci0gICAgICAgIGlmIChtb2RlID09IE1lbW9yeU1vZGU6OlNpZ25h
bGluZykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGlmIChPcHRpb25z
OjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkgPyB0cnVlIDogIW1tYXBCeXRlcyhtYXBw
ZWRDYXBhY2l0eSwgbWVtb3J5KSkgewotICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBk
aWZmZXJlbnQgbnVtYmVyLgotICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9y
eTo6Y3JlYXRlIG1tYXAgZmFpbGVkIG9uY2UgZm9yIGNhcGFjaXR5LCB0cnlpbmcgYWdhaW4iKTsK
LSAgICAgICAgICAgIG1hcHBlZENhcGFjaXR5ID0gc2l6ZTsKLSAgICAgICAgICAgIGlmICghbWFw
cGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVt
b3J5OjpjcmVhdGUgbW1hcCBub3QgdHJ5aW5nIGFnYWluIGJlY2F1c2Ugc2l6ZSBpcyB6ZXJvIik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1lbW9yeSgpOwotICAgICAgICAgICAg
fQorICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7CiAKLSAgICAgICAgICAgIGlmICghbW1hcEJ5
dGVzKG1hcHBlZENhcGFjaXR5LCBtZW1vcnkpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAgZmFpbGVkIHR3aWNlIik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9CisgICAgLy8gRmlyc3QgdHJ5
IGZhc3QgbWVtb3J5LCBiZWNhdXNlIHRoZXkncmUgZmFzdC4gRmFzdCBtZW1vcnkgaXMgc3VpdGFi
bGUgZm9yIGFueSBpbml0aWFsIC8gbWF4aW11bS4KKyAgICBtZW1vcnkgPSB0cnlHZXRGYXN0TWVt
b3J5KHZtKTsKKyAgICBpZiAobWVtb3J5KSB7CisgICAgICAgIG1hcHBlZENhcGFjaXR5Qnl0ZXMg
PSBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpOworICAgICAgICBtb2RlID0gTWVtb3J5TW9kZTo6
U2lnbmFsaW5nOworICAgIH0KKworICAgIC8vIElmIHdlIGNhbid0IGdldCBhIGZhc3QgbWVtb3J5
IGJ1dCB0aGUgdXNlciBleHByZXNzZWQgdGhlIGludGVudCB0byBncm93IG1lbW9yeSB1cCB0byBh
IGNlcnRhaW4gbWF4aW11bSB0aGVuIHdlIHNob3VsZCB0cnkgdG8gaG9ub3IgdGhhdCBkZXNpcmUu
IEl0J2xsIG1lYW4gdGhhdCBncm93IGlzIG1vcmUgbGlrZWx5IHRvIHN1Y2NlZWQsIGFuZCB3b24n
dCByZXF1aXJlIHJlbWFwcGluZy4KKyAgICBpZiAoIW1lbW9yeSAmJiBtYXhpbXVtKSB7CisgICAg
ICAgIG1lbW9yeSA9IHRyeUdldFNsb3dNZW1vcnkobWF4aW11bUJ5dGVzKTsKKyAgICAgICAgaWYg
KG1lbW9yeSkgeworICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHlCeXRlcyA9IG1heGltdW1CeXRl
czsKKyAgICAgICAgICAgIG1vZGUgPSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIEFTU0VSVChtZW1vcnkgJiYgc2l6ZSA8PSBtYXBwZWRDYXBhY2l0
eSk7Ci0gICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklU
RSkpIHsKLSAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGV2ZXIgb2NjdXI/IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4OTAKLSAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1wcm90ZWN0IGZhaWxlZCIpOwotICAgICAgICBy
ZWxlYXNlRmFzdE1lbW9yeShtZW1vcnksIDAsIG1hcHBlZENhcGFjaXR5LCBtb2RlKTsKKyAgICAv
LyBXZSdyZSBzdHVjayB3aXRoIGEgc2xvdyBtZW1vcnkgd2hpY2ggbWF5IGJlIHNsb3dlciBvciBp
bXBvc3NpYmxlIHRvIGdyb3cuCisgICAgaWYgKCFtZW1vcnkpIHsKKyAgICAgICAgbWVtb3J5ID0g
dHJ5R2V0U2xvd01lbW9yeShpbml0aWFsQnl0ZXMpOwogICAgICAgICBpZiAobWVtb3J5KSB7Ci0g
ICAgICAgICAgICBpZiAobXVubWFwKG1lbW9yeSwgbWFwcGVkQ2FwYWNpdHkpKQotICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBtYXBwZWRDYXBhY2l0eUJ5dGVzID0gaW5pdGlh
bEJ5dGVzOworICAgICAgICAgICAgbW9kZSA9IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJNZW1vcnk6OmNyZWF0ZSBtbWFwIHN1Y2NlZWRlZCIpOwotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTWVtb3J5KG1lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgbWFwcGVkQ2Fw
YWNpdHksIG1vZGUpKTsKKyAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoIW1ha2VOZXdNZW1vcnlSZWFkV3JpdGVPclJlbGlucXVpc2gobWVtb3J5LCBp
bml0aWFsQnl0ZXMsIG1hcHBlZENhcGFjaXR5Qnl0ZXMsIG1vZGUpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KG1lbW9yeSwgaW5pdGlh
bCwgbWF4aW11bSwgbWFwcGVkQ2FwYWNpdHlCeXRlcywgbW9kZSkpOwogfQogCi1SZWZQdHI8TWVt
b3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiBtb2RlKQorTWVtb3J5Ojp+TWVtb3J5
KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwp
OyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCi0gICAgUmVmUHRy
PE1lbW9yeT4gcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgaW5pdGlhbCwgbWF4aW11bSwgbW9kZSk7
Ci0gICAgaWYgKHJlc3VsdCkgewotICAgICAgICBpZiAocmVzdWx0LT5tb2RlKCkgPT0gTWVtb3J5
TW9kZTo6U2lnbmFsaW5nKQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LT5tX21h
cHBlZENhcGFjaXR5ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRlcyk7Ci0gICAgICAgIGlmIChtb2Rl
KQotICAgICAgICAgICAgQVNTRVJUKCptb2RlID09IHJlc3VsdC0+bW9kZSgpKTsKKyAgICBpZiAo
bV9tZW1vcnkpIHsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6fk1lbW9y
eSAiLCAqdGhpcyk7CisgICAgICAgIHJlbGlucXVpc2hNZW1vcnkobV9tZW1vcnksIG1fc2l6ZSwg
bV9tYXBwZWRDYXBhY2l0eSwgbV9tb2RlKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotTWVtb3J5Ojp+TWVtb3J5KCkKK3NpemVfdCBNZW1vcnk6OmZhc3RNYXBwZWRSZWR6b25lQnl0
ZXMoKQogewotICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6On5NZW1vcnkgIiwgKnRo
aXMpOwotICAgIHJlbGVhc2VGYXN0TWVtb3J5KG1fbWVtb3J5LCBtX3NpemUsIG1fbWFwcGVkQ2Fw
YWNpdHksIG1fbW9kZSk7Ci0gICAgaWYgKG1fbWVtb3J5KSB7Ci0gICAgICAgIGlmIChtdW5tYXAo
bV9tZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkpKQotICAgICAgICAgICAgQ1JBU0goKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihQYWdlQ291bnQ6OnBhZ2VTaXplKSAqIE9wdGlvbnM6
OndlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcygpOworfQorCitzaXplX3QgTWVtb3J5
OjpmYXN0TWFwcGVkQnl0ZXMoKQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90
KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6
ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzIgKyByZWR6b25lIHdoaWNoIGlzIGxhcmdlciB0
aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2QgcGFzcyB0byBtcHJvdGVjdCBp
ZiB0aGlzIGRpZG4ndCBob2xkLiIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgKyBmYXN0TWFwcGVkUmVkem9uZUJ5
dGVzKCk7Cit9CisKK3NpemVfdCBNZW1vcnk6Om1heEZhc3RNZW1vcnlDb3VudCgpCit7CisgICAg
Ly8gVGhlIG9yZGVyIGNhbiBiZSByZWxheGVkIGhlcmUgYmVjYXVzZSB3ZSBwcm92aWRlIGEgbW9u
b3RvbmljYWxseS1pbmNyZWFzaW5nIGVzdGltYXRlLiBBIGNvbmN1cnJlbnQgb2JzZXJ2ZXIgY291
bGQgc2VlIGEgc2xpZ2h0bHkgb3V0LW9mLWRhdGUgdmFsdWUgYnV0IGNhbid0IHRlbGwgdGhhdCB0
aGV5IGRpZC4KKyAgICByZXR1cm4gb2JzZXJ2ZWRNYXhpbXVtRmFzdE1lbW9yeS5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworfQorCitib29sIE1lbW9yeTo6YWRkcmVzc0lzSW5BY3Rp
dmVGYXN0TWVtb3J5KHZvaWQqIGFkZHJlc3MpCit7CisgICAgLy8gVGhpcyBjYW5ub3QgcmFjZSBp
biBhbnkgbWVhbmluZ2Z1bCB3YXk6IHRoZSB0aHJlYWQgd2hpY2ggY2FsbHMgdGhpcyBmdW5jdGlv
biB3YW50cyB0byBrbm93IGlmIGEgZmF1bHQgaXQgcmVjZWl2ZWQgYXQgYSBwYXJ0aWN1bGFyIGFk
ZHJlc3MgaXMgaW4gYSBmYXN0IG1lbW9yeS4gVGhhdCBmYXN0IG1lbW9yeSBtdXN0IHRoZXJlZm9y
ZSBiZSBhY3RpdmUgaW4gdGhhdCB0aHJlYWQuIEl0IGNhbm5vdCBiZSBhZGRlZCBvciByZW1vdmVk
IGZyb20gdGhlIGxpc3Qgb2YgY3VycmVudGx5IGFjdGl2ZSBmYXN0IG1lbW9yaWVzLiBPdGhlciBt
ZW1vcmllcyBiZWluZyBhZGRlZCAvIHJlbW92ZWQgY29uY3VycmVudGx5IGFyZSBpbmNvbnNlcXVl
bnRpYWwuCisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgZmFzdE1lbW9yeUFsbG9jYXRp
b25Tb2Z0TGltaXQ7ICsraWR4KSB7CisgICAgICAgIGNoYXIqIHN0YXJ0ID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KGN1cnJlbnRseUFjdGl2ZUZhc3RNZW1vcmllc1tpZHhdLmxvYWQoc3RkOjptZW1vcnlf
b3JkZXJfYWNxdWlyZSkpOworICAgICAgICBpZiAoc3RhcnQgPD0gYWRkcmVzcyAmJiBhZGRyZXNz
IDw9IHN0YXJ0ICsgZmFzdE1hcHBlZEJ5dGVzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291
bnQgbmV3U2l6ZSkKQEAgLTMwMSw4ICs0NTgsMTEgQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNv
dW50IG5ld1NpemUpCiAgICAgfQogCiAgICAgaWYgKG1fbWVtb3J5ICYmIGRlc2lyZWRTaXplIDw9
IG1fbWFwcGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihtX21lbW9yeSkgKyBtX3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZGVzaXJlZFNp
emUgLSBtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgewotICAgICAgICAgICAgLy8g
RklYTUU6IHNob3VsZCB0aGlzIGV2ZXIgb2NjdXI/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjk4OTAKKyAgICAgICAgdWludDhfdCogc3RhcnRBZGRyZXNzID0gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6ZTsKKyAgICAgICAgc2l6ZV90IGV4
dHJhQnl0ZXMgPSBkZXNpcmVkU2l6ZSAtIG1fc2l6ZTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZXh0cmFCeXRlcyk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJraW5nIFdlYkFz
c2VtYmx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiIGFzIHJlYWQrd3JpdGUg
aW4gcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3UG9pbnRlcihz
dGFydEFkZHJlc3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKKyAgICAgICAgaWYgKG1wcm90ZWN0KHN0
YXJ0QWRkcmVzcywgZXh0cmFCeXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKICAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxhY2UgZmFpbGVk
ICIsICp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMzE2
LDE2ICs0NzYsMjAgQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiAgICAg
UkVMRUFTRV9BU1NFUlQobW9kZSgpICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZyk7CiAKICAgICAv
LyBPdGhlcndpc2UsIGxldCdzIHRyeSB0byBtYWtlIHNvbWUgbmV3IG1lbW9yeS4KLSAgICAvLyBG
SVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0gICAgdm9p
ZCogbmV3TWVtb3J5ID0gbW1hcChudWxscHRyLCBkZXNpcmVkU2l6ZSwgUFJPVF9SRUFEIHwgUFJP
VF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwotICAgIGlmIChuZXdNZW1v
cnkgPT0gTUFQX0ZBSUxFRCkKKyAgICAvLyBGSVhNRSBtcmVtYXAgd291bGQgYmUgbmljZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTU3CisgICAgLy8gRklYTUUg
c2hvdWxkIHdlIG92ZXItYWxsb2NhdGUgaGVyZT8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MDgyNgorICAgIHZvaWQqIG5ld01lbW9yeSA9IHRyeUdldFNsb3dNZW1v
cnkoZGVzaXJlZFNpemUpOworICAgIGlmICghbmV3TWVtb3J5KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIW1ha2VOZXdNZW1vcnlSZWFkV3JpdGVPclJlbGlucXVpc2gobmV3TWVt
b3J5LCBkZXNpcmVkU2l6ZSwgZGVzaXJlZFNpemUsIG1vZGUoKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChtX21lbW9yeSkgewogICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBt
X21lbW9yeSwgbV9zaXplKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gIW11bm1hcChtX21lbW9y
eSwgbV9tYXBwZWRDYXBhY2l0eSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOwor
ICAgICAgICByZWxpbnF1aXNoTWVtb3J5KG1fbWVtb3J5LCBtX3NpemUsIG1fc2l6ZSwgbV9tb2Rl
KTsKICAgICB9CisKICAgICBtX21lbW9yeSA9IG5ld01lbW9yeTsKICAgICBtX21hcHBlZENhcGFj
aXR5ID0gZGVzaXJlZFNpemU7CiAgICAgbV9zaXplID0gZGVzaXJlZFNpemU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKaW5kZXggYjAyNDUxZC4uNTUzNDVjZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaApAQCAtMjksOCArMjksNiBAQAogCiAj
aW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNjEsMTEgKzU5LDE3IEBAIHB1YmxpYzoKIAogICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9CiAK
LSAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlKFZNJiwgUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVpcmVkTW9k
ZSA9IHN0ZDo6bnVsbG9wdCk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVByZWFsbG9jYXRp
b25zKCk7CisgICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShWTSYsIFBhZ2VDb3VudCBp
bml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CiAKICAgICBNZW1vcnkoKSA9IGRlZmF1bHQ7CiAg
ICAgfk1lbW9yeSgpOwogCisgICAgc3RhdGljIHNpemVfdCBmYXN0TWFwcGVkUmVkem9uZUJ5dGVz
KCk7CisgICAgc3RhdGljIHNpemVfdCBmYXN0TWFwcGVkQnl0ZXMoKTsgLy8gSW5jbHVkZXMgcmVk
em9uZS4KKyAgICBzdGF0aWMgc2l6ZV90IG1heEZhc3RNZW1vcnlDb3VudCgpOworICAgIHN0YXRp
YyBib29sIGFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSh2b2lkKik7CisKICAgICB2b2lkKiBt
ZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeTsgfQogICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgUGFnZUNvdW50IHNpemVJblBhZ2VzKCkgY29uc3Qg
eyByZXR1cm4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKTsgfQpAQCAtODEsNyArODUsNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGNoZWNrKCkgeyAgQVNTRVJUKCFkZWxldGlvbkhhc0JlZ3Vu
KCkpOyB9CiBwcml2YXRlOgotICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGVJbXBsKFZN
JiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1l
bW9yeU1vZGU+IHJlcXVpcmVkTW9kZSA9IHN0ZDo6bnVsbG9wdCk7CiAgICAgTWVtb3J5KHZvaWQq
IG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFw
cGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUpOwogICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwg
UGFnZUNvdW50IG1heGltdW0pOwogCkBAIC05NCwxMSArOTcsMTcgQEAgcHJpdmF0ZToKICAgICBN
ZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiB9OwogCi1z
dGF0aWNfYXNzZXJ0KHNpemVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKHNpemVfdCksICJXZSByZWx5
IG9uIGFsbG93aW5nIHRoZSBtYXhpbXVtIHNpemUgb2YgTWVtb3J5IHdlIG1hcCB0byBiZSAyXjMz
IHdoaWNoIGlzIGxhcmdlciB0aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2Qg
cGFzcyB0byBtcHJvdGVjdCBpZiB0aGlzIGRpZG4ndCBob2xkLiIpOworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KKworI2Vsc2UKIAotY29uc3Qgc2l6ZV90IGZhc3RNZW1vcnlNYXBwZWRCeXRl
cyA9IChzdGF0aWNfY2FzdDxzaXplX3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSkgKyAxKSAqIDI7IC8vIHBvaW50ZXIgbWF4ICsgb2Zmc2V0IG1heC4gVGhpcyBpcyBhbGwg
d2UgbmVlZCBzaW5jZSBhIGxvYWQgc3RyYWRkbGluZyByZWFkYWJsZSBtZW1vcnkgd2lsbCB0cmFw
LgotZXh0ZXJuIFN0YXRpY0xvY2sgbWVtb3J5TG9jazsKLWNvbnN0IEhhc2hTZXQ8dm9pZCo+JiB2
aWV3QWN0aXZlRmFzdE1lbW9yaWVzKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBNZW1vcnkgeworcHVibGljOgorICAgIHN0
YXRpYyBzaXplX3QgbWF4RmFzdE1lbW9yeUNvdW50KCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRp
YyBib29sIGFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSh2b2lkKikgeyByZXR1cm4gZmFsc2U7
IH0KK307CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4
IDY1NDdkNjIuLjljZDQ3ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAog
ICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKLSAgICBjb25zdCBzaXplX3QgZXh0
cmFNZW1vcnlTaXplID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgp
ICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBjb25zdCBzaXplX3QgZXh0cmFNZW1vcnlTaXplID0g
Z2xvYmFsTWVtb3J5Qnl0ZVNpemUoKTsKICAgICBtX2dsb2JhbHMgPSBNYWxsb2NQdHI8dWludDY0
X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7CiAKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUpOwotICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKHRoaXNPYmplY3QtPm1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2Jh
bHMuc2l6ZSgpKTsKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2Jq
ZWN0LT5nbG9iYWxNZW1vcnlCeXRlU2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKICAgICAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb25zKClbaV0pOwogfQpAQCAtMzUwLDYg
KzM1MCwxMCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIHJldHVybiBpbnN0YW5jZTsK
IH0KIAorc2l6ZV90IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Z2xvYmFsTWVtb3J5Qnl0ZVNpemUo
KSBjb25zdAoreworICAgIHJldHVybiBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5nbG9i
YWxzLnNpemUoKSAqIHNpemVvZihSZWdpc3Rlcik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5oCmluZGV4IDg1NTFmZTguLjUzZWQ5OWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAtOTIsNiAr
OTIsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwogICAgIFdyaXRlQmFy
cmllcjxKU09iamVjdD4qIGltcG9ydEZ1bmN0aW9ucygpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNl
dE9mSW1wb3J0RnVuY3Rpb25zKCkpOyB9CisgICAgc2l6ZV90IGdsb2JhbE1lbW9yeUJ5dGVTaXpl
KCkgY29uc3Q7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1
bGU7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2Nr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmNwcAppbmRleCAzMzY5YzBlLi5jNmQ3OGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcApAQCAtMTE3LDYg
KzExNyw3IEBAIFdhc206OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0CiAgICAgfQogCiAgICAgbWVtb3J5KCku
Y2hlY2soKTsKKyAgICAvLyBGSVhNRSBTaG91bGQgd2UgcmVwb3J0IGV4dHJhIG1lbW9yeSB0byB0
aGUgR0Mgb24gYWxsb2NhdGlvbiAvIGdyb3cgLyB2aXNpdD8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MDY5MAogICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiB9CiAK
QEAgLTEyNCw2ICsxMjUsOCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICAvLyBGSVhNRSBTaG91bGQgd2UgcmVwb3J0IGV4
dHJhIG1lbW9yeSB0byB0aGUgR0Mgb24gYWxsb2NhdGlvbiAvIGdyb3cgLyB2aXNpdD8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDY5MAorICAgIHZtLmhlYXAucmVw
b3J0V2ViQXNzZW1ibHlGYXN0TWVtb3JpZXNBbGxvY2F0ZWQoMSk7CiB9CiAKIHZvaWQgSlNXZWJB
c3NlbWJseU1lbW9yeTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0xNDEsNiArMTQ0LDcgQEAg
dm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fYnVmZmVyV3JhcHBl
cik7CisgICAgLy8gRklYTUUgU2hvdWxkIHdlIHJlcG9ydCBleHRyYSBtZW1vcnkgdG8gdGhlIEdD
IG9uIGFsbG9jYXRpb24gLyBncm93IC8gdmlzaXQ/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA2OTAKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU4NDJj
NjYuLjU4NmMyMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTctMDQtMTEgIEpGIEJhc3RpZW4g
IDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBtYW5hZ2UgbWVt
b3J5IGJldHRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTcwNjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLCBNaWNoYWVsIFNh
Ym9mZi4KKworICAgICAgICBSZS11c2UgYSBWTSB0YWcgd2hpY2ggd2FzIGludGVuZGVkIGZvciBK
YXZhU2NyaXB0IGNvcmUsIHdhcyB0aGVuCisgICAgICAgIHVzZWQgYnkgb3VyIEdDLCBhbmQgaXMg
bm93IHVudXNlZC4gSWYgSSBkb24ndCBkbyB0aGlzIHRoZW4KKyAgICAgICAgV2ViQXNzZW1ibHkg
ZmFzdCBtZW1vcmllcyB3aWxsIG1ha2Ugdm1tYXAgbG9vayBzdXBlciB3ZWlyZCBiZWNhdXNlCisg
ICAgICAgIGl0J2xsIGxvb2sgbGlrZSBtdWx0aS1naWdhYnl0ZSBvZiB2aXJ0dWFsIG1lbW9yeSBh
cmUgYWxsb2NhdGVkIGFzCisgICAgICAgIHBhcnQgb2Ygb3VyIHByb2Nlc3MnIHJlZ3VsYXIgbWVt
b3J5IQorCisgICAgICAgIFNlcGFyYXRlbHkgSSBuZWVkIHRvIHVwZGF0ZSB2bW1hcCBhbmQgb3Ro
ZXIgdG9vbHMgdG8gcHJpbnQgdGhlCisgICAgICAgIHJpZ2h0IG5hbWUuIFJpZ2h0IG5vdyB0aGlz
IHRhZyBnZXRzIGlkZW50aWZpZWQgYXMgIkpTIGdhcmJhZ2UKKyAgICAgICAgY29sbGVjdG9yIi4K
KworICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAqIHd0Zi9WTVRhZ3MuaDoK
KwogMjAxNy0wNC0xMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAog
ICAgICAgICBbSlNDXSBVc2UgcHJvcGVyIGlmZGVmIGd1YXJkIGZvciBjb2RlIHVzaW5nIE1hY2hp
bmVDb250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oIGIvU291
cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAppbmRleCBjOWNiMTU1Li5kNzY3OGI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL09T
QWxsb2NhdG9yLmgKQEAgLTM2LDcgKzM2LDYgQEAgcHVibGljOgogICAgIGVudW0gVXNhZ2Ugewog
ICAgICAgICBVbmtub3duVXNhZ2UgPSAtMSwKICAgICAgICAgRmFzdE1hbGxvY1BhZ2VzID0gVk1f
VEFHX0ZPUl9UQ01BTExPQ19NRU1PUlksCi0gICAgICAgIEpTR0NIZWFwUGFnZXMgPSBWTV9UQUdf
Rk9SX0NPTExFQ1RPUl9NRU1PUlksCiAgICAgICAgIEpTVk1TdGFja1BhZ2VzID0gVk1fVEFHX0ZP
Ul9SRUdJU1RFUkZJTEVfTUVNT1JZLAogICAgICAgICBKU0pJVENvZGVQYWdlcyA9IFZNX1RBR19G
T1JfRVhFQ1VUQUJMRUFMTE9DQVRPUl9NRU1PUlksCiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1ZNVGFncy5oIGIvU291cmNlL1dURi93dGYvVk1UYWdzLmgKaW5kZXggYWVmMDVk
Mi4uMjdmYzBkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVk1UYWdzLmgKKysrIGIvU291
cmNlL1dURi93dGYvVk1UYWdzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDE1ICs1MSwxNSBAQAogI2VuZGlmIC8vIGRlZmluZWQo
Vk1fTUVNT1JZX0pBVkFTQ1JJUFRfSklUX1JFR0lTVEVSX0ZJTEUpCiAKICNpZiBkZWZpbmVkKFZN
X01FTU9SWV9KQVZBU0NSSVBUX0NPUkUpCi0jZGVmaW5lIFZNX1RBR19GT1JfQ09MTEVDVE9SX01F
TU9SWSBWTV9NQUtFX1RBRyhWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFKQorI2RlZmluZSBWTV9U
QUdfRk9SX1dFQkFTU0VNQkxZX01FTU9SWSBWTV9NQUtFX1RBRyhWTV9NRU1PUllfSkFWQVNDUklQ
VF9DT1JFKQogI2Vsc2UKLSNkZWZpbmUgVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZIFZNX01B
S0VfVEFHKDYzKQorI2RlZmluZSBWTV9UQUdfRk9SX1dFQkFTU0VNQkxZX01FTU9SWSBWTV9NQUtF
X1RBRyg2MykKICNlbmRpZiAvLyBkZWZpbmVkKFZNX01FTU9SWV9KQVZBU0NSSVBUX0NPUkUpCiAK
ICNlbHNlIC8vIE9TKERBUldJTikKIAogI2RlZmluZSBWTV9UQUdfRk9SX1RDTUFMTE9DX01FTU9S
WSAtMQotI2RlZmluZSBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlkgLTEKKyNkZWZpbmUgVk1f
VEFHX0ZPUl9XRUJBU1NFTUJMWV9NRU1PUlkgLTEKICNkZWZpbmUgVk1fVEFHX0ZPUl9FWEVDVVRB
QkxFQUxMT0NBVE9SX01FTU9SWSAtMQogI2RlZmluZSBWTV9UQUdfRk9SX1JFR0lTVEVSRklMRV9N
RU1PUlkgLTEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNkZmU2ODkuLjQwYTlhYzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOSBAQAorMjAxNy0wNC0xMSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5j
b20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG1hbmFnZSBtZW1vcnkgYmV0dGVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2MjgKKworICAgICAg
ICBSZXZpZXdlZCBieSBLZWl0aCBNaWxsZXIsIE1pY2hhZWwgU2Fib2ZmLgorCisgICAgICAgIFJl
LXVzZSBhIFZNIHRhZyB3aGljaCB3YXMgaW50ZW5kZWQgZm9yIEphdmFTY3JpcHQgY29yZSwgd2Fz
IHRoZW4KKyAgICAgICAgdXNlZCBieSBvdXIgR0MsIGFuZCBpcyBub3cgdW51c2VkLiBJZiBJIGRv
bid0IGRvIHRoaXMgdGhlbgorICAgICAgICBXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIHdpbGwg
bWFrZSB2bW1hcCBsb29rIHN1cGVyIHdlaXJkIGJlY2F1c2UKKyAgICAgICAgaXQnbGwgbG9vayBs
aWtlIG11bHRpLWdpZ2FieXRlIG9mIHZpcnR1YWwgbWVtb3J5IGFyZSBhbGxvY2F0ZWQgYXMKKyAg
ICAgICAgcGFydCBvZiBvdXIgcHJvY2VzcycgcmVndWxhciBtZW1vcnkhCisKKyAgICAgICAgU2Vw
YXJhdGVseSBJIG5lZWQgdG8gdXBkYXRlIHZtbWFwIGFuZCBvdGhlciB0b29scyB0byBwcmludCB0
aGUKKyAgICAgICAgcmlnaHQgbmFtZS4gUmlnaHQgbm93IHRoaXMgdGFnIGdldHMgaWRlbnRpZmll
ZCBhcyAiSlMgZ2FyYmFnZQorICAgICAgICBjb2xsZWN0b3IiLgorCisgICAgICAgICogcGFnZS9S
ZXNvdXJjZVVzYWdlRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVVzYWdlRGF0
YTo6UmVzb3VyY2VVc2FnZURhdGEpOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZURhdGEu
aDoKKyAgICAgICAgKiBwYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW06Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3JpY1Jlc291cmNlVXNhZ2VEYXRhOjpIaXN0b3JpY1Jlc291
cmNlVXNhZ2VEYXRhKToKKyAgICAgICAgKiBwYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRD
b2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlOYW1lRm9yVk1UYWcpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2F0ZWdvcnlGb3JWTVRhZyk6CisKIDIwMTctMDQtMTMgIE15bGVzIEMuIE1h
eGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGRyZXNzaW5nIHBvc3Qt
cmV2aWV3IGNvbW1lbnQgYWZ0ZXIgcjIxNTMxNC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJj
ZVVzYWdlRGF0YS5jcHAKaW5kZXggNTkxMmIwNS4uN2ExNzAwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQCBSZXNvdXJjZVVzYWdlRGF0
YTo6UmVzb3VyY2VVc2FnZURhdGEoKQogewogICAgIC8vIFZNIHRhZyBjYXRlZ29yaWVzLgogICAg
IGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkpTSklUXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhN
ZW1vcnlDYXRlZ29yeTo6SlNKSVQpOworICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6Oldl
YkFzc2VtYmx5XSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6V2ViQXNzZW1i
bHkpOwogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkltYWdlc10gPSBNZW1vcnlDYXRl
Z29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkltYWdlcyk7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlD
YXRlZ29yeTo6TGF5ZXJzXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGF5
ZXJzKTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMaWJjTWFsbG9jXSA9IE1lbW9y
eUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxvYyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1Jlc291cmNlVXNhZ2VEYXRhLmgKaW5kZXggMDJjM2JhMS4uYzg4MTUzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZURhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMiArMzYsMTMgQEAgbmFtZXNwYWNl
IE1lbW9yeUNhdGVnb3J5IHsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibWFsbG9jID0gMDsKIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBMaWJjTWFsbG9jID0gMTsKIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBKU0pJVCA9IDI7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgSW1hZ2VzID0gMzsKLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBHQ0hlYXAgPSA0Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEdDT3duZWQg
PSA1Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIE90aGVyID0gNjsKLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBMYXllcnMgPSA3Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIE51bWJlck9mQ2F0ZWdvcmll
cyA9IDg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgV2ViQXNzZW1ibHkgPSAzOworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIEltYWdlcyA9IDQ7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgR0NIZWFwID0g
NTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBHQ093bmVkID0gNjsKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBPdGhlciA9IDc7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgTGF5ZXJzID0gODsKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBOdW1iZXJPZkNhdGVnb3JpZXMgPSA5OwogfQogCiBzdHJ1Y3QgTWVt
b3J5Q2F0ZWdvcnlJbmZvIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2Ev
UmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2Ev
UmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQppbmRleCA0ZjYxNGRiLi44YzU0MTU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3Zlcmxh
eUNvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNjIsNiArMTYyLDcgQEAgSGlzdG9yaWNSZXNvdXJjZVVzYWdlRGF0YTo6SGlz
dG9yaWNSZXNvdXJjZVVzYWdlRGF0YSgpCiB7CiAgICAgLy8gVk0gdGFnIGNhdGVnb3JpZXMuCiAg
ICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6SlNKSVRdID0gSGlzdG9yaWNNZW1vcnlDYXRl
Z29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkpTSklULCAweEZGRkY2MEZGLCAiSlMgSklUIik7Cisg
ICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6V2ViQXNzZW1ibHldID0gSGlzdG9yaWNNZW1v
cnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OldlYkFzc2VtYmx5LCAweEZGNjU0RkYwLCAi
V2ViQXNzZW1ibHkiKTsKICAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpJbWFnZXNdID0g
SGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkltYWdlcywgMHhGRkZG
RkYwMCwgIkltYWdlcyIpOwogICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkxheWVyc10g
PSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGF5ZXJzLCAweEZG
MDBGRkZGLCAiTGF5ZXJzIik7CiAgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6TGliY01h
bGxvY10gPSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGliY01h
bGxvYywgMHhGRjAwRkYwMCwgImxpYmMgbWFsbG9jIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCmluZGV4IDA2NGE2MWEu
LmEzMGVmMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VV
c2FnZVRocmVhZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3Vy
Y2VVc2FnZVRocmVhZENvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw2ICs4MCw3IEBAIGNvbnN0IGNoYXIqIGRpc3BsYXlO
YW1lRm9yVk1UYWcodW5zaWduZWQgdGFnKQogICAgIGNhc2UgVk1fTUVNT1JZX0lNQUdFSU86IHJl
dHVybiAiSW1hZ2VJTyI7CiAgICAgY2FzZSBWTV9NRU1PUllfQ0dJTUFHRTogcmV0dXJuICJDRyBp
bWFnZSI7CiAgICAgY2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9KSVRfRVhFQ1VUQUJMRV9BTExP
Q0FUT1I6IHJldHVybiAiSlNDIEpJVCI7CisgICAgY2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9D
T1JFOiByZXR1cm4gIldlYkFzc2VtYmx5IjsKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0M6IHJl
dHVybiAibWFsbG9jIjsKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0NfSFVHRTogcmV0dXJuICJt
YWxsb2MgKGh1Z2UpIjsKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0NfTEFSR0U6IHJldHVybiAi
bWFsbG9jIChsYXJnZSkiOwpAQCAtMTgxLDYgKzE4Miw4IEBAIHN0YXRpYyB1bnNpZ25lZCBjYXRl
Z29yeUZvclZNVGFnKHVuc2lnbmVkIHRhZykKICAgICAgICAgcmV0dXJuIE1lbW9yeUNhdGVnb3J5
OjpJbWFnZXM7CiAgICAgY2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9KSVRfRVhFQ1VUQUJMRV9B
TExPQ0FUT1I6CiAgICAgICAgIHJldHVybiBNZW1vcnlDYXRlZ29yeTo6SlNKSVQ7CisgICAgY2Fz
ZSBWTV9NRU1PUllfSkFWQVNDUklQVF9DT1JFOgorICAgICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdv
cnk6OldlYkFzc2VtYmx5OwogICAgIGNhc2UgVk1fTUVNT1JZX01BTExPQzoKICAgICBjYXNlIFZN
X01FTU9SWV9NQUxMT0NfSFVHRToKICAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0NfTEFSR0U6CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL0NoYW5nZUxvZyBiL1dlYnNpdGVzL3dlYmtp
dC5vcmcvQ2hhbmdlTG9nCmluZGV4IDY1MTBiMWQuLjc2OTA4MmUgMTAwNjQ0Ci0tLSBhL1dlYnNp
dGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTctMDQtMTEgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5A
YXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBtYW5hZ2UgbWVtb3J5IGJldHRlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNjI4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLCBNaWNoYWVsIFNhYm9mZi4KKworICAg
ICAgICAqIGRvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWw6IHR5cG9zCisK
IDIwMTctMDQtMDggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgVXBkYXRlIHRoZSBjc3Mtc3RhdHVzIHBhZ2UgdG8gaGFuZGxlIGNoYW5nZXMgaW4gQ1NT
UHJvcGVydGllcy5qc29uLgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9kb2NzL2Iz
L2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9k
b2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCmluZGV4IDIwYjU5YjUuLjA0
NzQ5M2UgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9pbnRlcm1lZGlh
dGUtcmVwcmVzZW50YXRpb24uaHRtbAorKysgYi9XZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMv
aW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwKQEAgLTY1NCwxMSArNjU0LDEzIEBAIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgIDxkZD5TcGVjaWFsIFdhc20gb3Bjb2RlLiBU
aGlzIGJyYW5jaGVzIG9uIHRoZSBmaXJzdCBjaGlsZC4gSWYgdGhlIGZpcnN0IGNoaWxkIHBsdXMg
dGhlIG9mZnNldAogICAgICAgICBwcm9kdWNlcyBhIEludDY0IGxlc3MgdGhhbiB0byB0aGUgcGlu
bmVkR1BSIHRoaXMgZmFsbHMgdGhyb3VnaC4gT3RoZXJ3aXNlLCBpdCBicmFuY2hlcyB0bwogICAg
ICAgICB0aGUgZXhpdCBwYXRoIGdlbmVyYXRlZCBieSB0aGUgcGFzc2VkIGdlbmVyYXRvci4gVW5s
aWtlIHRoZSBQYXRjaC9DaGVjayBmYW1pbHksIHRoZQotICAgICAgICBnZW5lcmF0b3IgdXNlZCBi
eSBXYXNtQm91bmRzQ2hlY2sgc291bGQgYmUgc2V0IG9uIHRoZSBQcm9jdWRlciBpdHNlbGYuIFRo
ZSBHUlBSZWcgcGFzc2VkIGluCi0gICAgICAgIHBpbm5lZEdQUiBtdXN0IGFsc28gYmUgbWFya2Vk
IGFzIHBpbm5lZCBieSBjYWxsaW5nIHRoZSBQcm9jZWR1cmUncyBwaW5uaW5nIEFQSS4gQjMgYXNz
dW1lcwotICAgICAgICB0aGUgV2FzbUJvdW5kc0NoZWNrIHdpbGwgc2lkZS1leGl0IHdoZW4gdGhl
IGl0IGJyYW5jaGVzLCBzbyB0aGUgZ2VuZXJhdG9yIG11c3QgZG8gc29tZSBraW5kCi0gICAgICAg
IG9mIHRlcm1pbmF0aW9uLiBJbiBXYXNtIHRoaXMgaXMgdXNlZCB0byB0cmFwIGFuZCB1bndpbmQg
YmFjayB0byBKUy4gTXVzdCB1c2UgdGhlCi0gICAgICAgIFdhc21Cb3VuZHNDaGVja1ZhbHVlIGNs
YXNzLjwvZGQ+CisgICAgICAgIGdlbmVyYXRvciB1c2VkIGJ5IFdhc21Cb3VuZHNDaGVjayBzaG91
bGQgYmUgc2V0IG9uIHRoZSBQcm9jZWR1cmUgaXRzZWxmLiBUaGUgR1JQUmVnIHBhc3NlZCBpbgor
ICAgICAgICBwaW5uZWRHUFIgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBwaW5uZWQgYnkgY2FsbGlu
ZyB0aGUgUHJvY2VkdXJlJ3MgcGlubmluZyBBUEksIG9yIGl0IG11c3QgYmUKKyAgICAgICAgSW52
YWxpZEdQUiwgaW4gd2hpY2ggY2FzZSB0aGUgb3V0LW9mLWJvdW5kcyBsaW1pdCBpcyA0R2lCLiBJ
biB0aGUgbGF0ZXIgY2FzZSBhIG1heGltdW0gcGFyYW1ldGVyCisgICAgICAgIGNhbiBiZSBwcm92
aWRlZCwgdG8gZnVydGhlciBjb25zdHJhaW4gdGhlIG91dC1vZi1ib3VuZHMgbGltaXQgYW5kIGhl
bHAgZ2VuZXJhdGUgc21hbGxlcgorICAgICAgICBpbW1lZGlhdGVzLiBCMyBhc3N1bWVzIHRoZSBX
YXNtQm91bmRzQ2hlY2sgd2lsbCBzaWRlLWV4aXQgd2hlbiBpdCBicmFuY2hlcywgc28gdGhlIGdl
bmVyYXRvcgorICAgICAgICBtdXN0IGRvIHNvbWUga2luZCBvZiB0ZXJtaW5hdGlvbi4gSW4gV2Fz
bSB0aGlzIGlzIHVzZWQgdG8gdHJhcCBhbmQgdW53aW5kIGJhY2sgdG8gSlMuIE11c3QgdXNlCisg
ICAgICAgIHRoZSBXYXNtQm91bmRzQ2hlY2tWYWx1ZSBjbGFzcy48L2RkPgogCiAgICAgICA8ZHQ+
Vm9pZCBVcHNpbG9uKFQsIF5waGkpPC9kdD4KICAgICAgIDxkZD5CMyB1c2VzIFNTQS4gIFNTQSBy
ZXF1aXJlcyB0aGF0IGVhY2ggdmFyaWFibGUgZ2V0cyBhc3NpZ25lZCB0byBvbmx5IG9uY2UgYW55
d2hlcmUgaW4KLS0gCjIuMTAuMQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>