<?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>166448</bug_id>
          
          <creation_ts>2016-12-22 17:04:23 -0800</creation_ts>
          <short_desc>WebAssembly: Implement grow_memory and current_memory</short_desc>
          <delta_ts>2016-12-28 16:19:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1262464</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-22 17:04:23 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262508</commentid>
    <comment_count>1</comment_count>
      <attachid>297698</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-22 18:30:48 -0800</bug_when>
    <thetext>Created attachment 297698
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262516</commentid>
    <comment_count>2</comment_count>
      <attachid>297698</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-22 19:05:26 -0800</bug_when>
    <thetext>Comment on attachment 297698
WIP

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

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:45
&gt; +    m_mappedCapacity = maximum ? maximum.bytes() : PageCount::max().bytes();

If initial is 0 you should allocate some value anyways (below it falls back to m_size).

Can you add an ASSERT that the size is smaller or equal to static_cast&lt;uint64_t&gt;(std::numeric_limits&lt;uint32_t&gt;::max())+1? That&apos;s super unintuitive...

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:65
&gt; +bool Memory::grow(PageCount newSize)

I&apos;d return Expected&lt;void*, String&gt; here.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:67
&gt; +    RELEASE_ASSERT(m_memory);

This means initial allocation failed, right? That could have been OK if the memory size was 0, no? It&apos;s only bad when we try to grow and it fails.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:74
&gt; +        bool success = !mprotect(m_memory, static_cast&lt;size_t&gt;(desiredSize), PROT_READ | PROT_WRITE);

You don&apos;t need to re-protect the initial pages.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:81
&gt; +    // Otherwise, lets try to make some new memory.

*let&apos;s

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:82
&gt; +    void* newMemory = mmap(nullptr, desiredSize, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);

mremap first? I don&apos;t know if you should make the trailing pages RW first though (and then ask it to give you more at the end, potentially moving everything).

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:85
&gt; +    bool success = !mprotect(newMemory, static_cast&lt;size_t&gt;(desiredSize), PROT_READ | PROT_WRITE);

Same, I would only protect the new pages, not the ones that were already RW.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:90
&gt; +    munmap(m_memory, m_mappedCapacity);

Yeah mremap should handle this already, and won&apos;t use up to 2x physical pages since it can just play with the pagetable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262534</commentid>
    <comment_count>3</comment_count>
      <attachid>297698</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-23 00:49:05 -0800</bug_when>
    <thetext>Comment on attachment 297698
WIP

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:67
&gt;&gt; +    RELEASE_ASSERT(m_memory);
&gt; 
&gt; This means initial allocation failed, right? That could have been OK if the memory size was 0, no? It&apos;s only bad when we try to grow and it fails.

I don&apos;t think we ever create a Memory which fails at allocation time. We should figure out if we should allow that.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:74
&gt;&gt; +        bool success = !mprotect(m_memory, static_cast&lt;size_t&gt;(desiredSize), PROT_READ | PROT_WRITE);
&gt; 
&gt; You don&apos;t need to re-protect the initial pages.

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:81
&gt;&gt; +    // Otherwise, lets try to make some new memory.
&gt; 
&gt; *let&apos;s

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:82
&gt;&gt; +    void* newMemory = mmap(nullptr, desiredSize, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);
&gt; 
&gt; mremap first? I don&apos;t know if you should make the trailing pages RW first though (and then ask it to give you more at the end, potentially moving everything).

mremap isn&apos;t a thing on darwin.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:85
&gt;&gt; +    bool success = !mprotect(newMemory, static_cast&lt;size_t&gt;(desiredSize), PROT_READ | PROT_WRITE);
&gt; 
&gt; Same, I would only protect the new pages, not the ones that were already RW.

This is all new memory here, that said, I should just pass PROT_READ|PROT_WRITE to mmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262535</commentid>
    <comment_count>4</comment_count>
      <attachid>297706</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-23 01:11:00 -0800</bug_when>
    <thetext>Created attachment 297706
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262556</commentid>
    <comment_count>5</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-23 09:15:55 -0800</bug_when>
    <thetext>&gt; &gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:82
&gt; &gt;&gt; +    void* newMemory = mmap(nullptr, desiredSize, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);
&gt; &gt; 
&gt; &gt; mremap first? I don&apos;t know if you should make the trailing pages RW first though (and then ask it to give you more at the end, potentially moving everything).
&gt; 
&gt; mremap isn&apos;t a thing on darwin.

Boo! We should first try mmap with MAP_FIXED then, to try to extend our VA without requiring 2x the already-allocated physical pages. If that fails then we&apos;ll need to mmap+memcpy. I&apos;m wary of this failing though, so we should have a FIXME on it (i.e. I think we should mmap without backing physical memory, and then memcpy a few pages at a time, munmap, and so on, so that we never really have too many physical pages).

Maybe MAP_FIXED can also be a FIXME for now, but I think we&apos;ll want it soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262561</commentid>
    <comment_count>6</comment_count>
      <attachid>297706</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-23 09:43:20 -0800</bug_when>
    <thetext>Comment on attachment 297706
WIP

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

I think we want to detect errno when mmap returns MAP_FAILED:
 - For MAP_FIXED we want to handle ENOMEM with the fallback.
 - Linux can errno with EAGAIN, it looks like Darwin can&apos;t? Let&apos;s ignore then.

We currently don&apos;t base out allocation on getpagesize, we probably should. Add a FIXME?

&gt; JSTests/wasm/js-api/memory-grow.js:14
&gt; +        for (let i = 0; i &lt; pageSize; i++) {

Can you first assert that the content is all zero? Also, after grow, that all new memory is also zero?

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:77
&gt; +            return false;

IIUC this should never happen, right? We&apos;ve mmap&apos;d the pages, we own them, their protection should succeed? This seems like something we should CRASH() on, or maybe just neuter the memory (and all instances which point to it). What if it half-fails to protect things? This going wrong seems like we&apos;re in trouble, we shouldn&apos;t try to behave.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:88
&gt; +    munmap(m_memory, m_mappedCapacity);

Here is where I&apos;d add a FIXME to copy a few pages at a time.

Also, check that munmap returned 0, and CRASH() if it didn&apos;t.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:62
&gt; +        m_buffer-&gt;transferTo(dummyContents);

This holds on to the backing memory, right? So if there&apos;s an array buffer or a view that refers to it, it&apos;ll stay live? Do we test for this (wasm.mem, get buffer, keep buffer but drop wasm.mem, force GC, check that buffer still valid)?

Can be a FIXME as well.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:102
&gt; +        // FIXME: what&apos;s the correct behavior for delta == 0?

Bug #

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyMemoryPrototype.cpp:89
&gt; +    return JSValue::encode(jsNumber(result.pageCount()));

Isn&apos;t that the new size? We want the old one.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyMemoryPrototype.cpp:108
&gt; +    JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION(&quot;grow&quot;, webAssemblyMemoryProtoFuncGrow, DontEnum, 1);

This should be in the .lut.h above instead of here (both should). You add it to the comment, and magic happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262604</commentid>
    <comment_count>7</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-23 14:47:06 -0800</bug_when>
    <thetext>I&apos;m touching things around MemoryInformation, and I think this patch now makes it incorrect:
    explicit operator bool() const { return !!m_initial; }

This means that code which checks &quot;do I have a memory?&quot; are currently OK: either the program started with one, or they don&apos;t have one and never will. Once you implement your patch the check will now be erroneous!

I&apos;d like the bool pattern to keep working but for it to now say &quot;can this have a memory now or any point in the future through grow&quot;.

I&apos;m changing the wasm B3 IR generator, and when I save / restore thing off of VM I just want to know whether to save / restore memory+size. Saving occurs from VM, restoring occurs from Instance-&gt;memory (onto VM, as well as in registers).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262608</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-23 15:16:22 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I&apos;m touching things around MemoryInformation, and I think this patch now
&gt; makes it incorrect:
&gt;     explicit operator bool() const { return !!m_initial; }
&gt; 
&gt; This means that code which checks &quot;do I have a memory?&quot; are currently OK:
&gt; either the program started with one, or they don&apos;t have one and never will.
&gt; Once you implement your patch the check will now be erroneous!
&gt; 
&gt; I&apos;d like the bool pattern to keep working but for it to now say &quot;can this
&gt; have a memory now or any point in the future through grow&quot;.
&gt; 
&gt; I&apos;m changing the wasm B3 IR generator, and when I save / restore thing off
&gt; of VM I just want to know whether to save / restore memory+size. Saving
&gt; occurs from VM, restoring occurs from Instance-&gt;memory (onto VM, as well as
&gt; in registers).

The check is correct as is now.
!!m_initial is a check against if the PageCount is valid, not if the PageCount is zero.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262623</commentid>
    <comment_count>9</comment_count>
      <attachid>297726</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-23 17:39:33 -0800</bug_when>
    <thetext>Created attachment 297726
WIP

Still need to address some of JF&apos;s comments, but I think grow_memory is now implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262666</commentid>
    <comment_count>10</comment_count>
      <attachid>297743</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-24 11:10:03 -0800</bug_when>
    <thetext>Created attachment 297743
WIP

This patch might be the bulk of the work to implement grow_memory and current_memory.
That said, I&apos;m currently running into issues with wabt improperly generating binaries that reflect the wast file:
https://github.com/WebAssembly/wabt/issues/256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262668</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-24 11:23:27 -0800</bug_when>
    <thetext>The remaining spec-test failures for me on a debug build are:
wasm.yaml/wasm/spec-tests/call.wast.js.default-wasm: ERROR: Unexpected exit code: 139
wasm.yaml/wasm/spec-tests/call_indirect.wast.js.default-wasm: ERROR: Unexpected exit code: 139
wasm.yaml/wasm/spec-tests/custom_section.wast.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/spec-tests/exports.wast.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/spec-tests/fac.wast.js.default-wasm: ERROR: Unexpected exit code: 139
wasm.yaml/wasm/spec-tests/float_exprs.wast.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/spec-tests/func_ptrs.wast.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/spec-tests/globals.wast.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/spec-tests/i32.wast.js.default-wasm: ERROR: Unexpected exit code: 136
wasm.yaml/wasm/spec-tests/imports.wast.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/spec-tests/int_exprs.wast.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/spec-tests/linking.wast.js.default-wasm: ERROR: Unexpected exit code: 139
wasm.yaml/wasm/spec-tests/memory.wast.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/spec-tests/i64.wast.js.default-wasm: ERROR: Unexpected exit code: 136
wasm.yaml/wasm/spec-tests/names.wast.js.default-wasm: ERROR: Unexpected exit code: 3
wasm.yaml/wasm/spec-tests/resizing.wast.js.default-wasm: ERROR: Unexpected exit code: 139
wasm.yaml/wasm/spec-tests/traps.wast.js.default-wasm: ERROR: Unexpected exit code: 136
wasm.yaml/wasm/spec-tests/skip-stack-guard-page.wast.js.default-wasm: ERROR: Unexpected exit code: 139</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262671</commentid>
    <comment_count>12</comment_count>
      <attachid>297744</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-24 12:08:02 -0800</bug_when>
    <thetext>Created attachment 297744
WIP

Writing some tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262683</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-24 13:52:42 -0800</bug_when>
    <thetext>*** Bug 166475 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262684</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-12-24 13:53:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/29803676&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262685</commentid>
    <comment_count>15</comment_count>
      <attachid>297748</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-24 14:01:46 -0800</bug_when>
    <thetext>Created attachment 297748
WIP

parseVarUint1 fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262700</commentid>
    <comment_count>16</comment_count>
      <attachid>297753</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-25 12:50:33 -0800</bug_when>
    <thetext>Created attachment 297753
WIP

Might be done. Still writing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262748</commentid>
    <comment_count>17</comment_count>
      <attachid>297753</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-26 09:23:40 -0800</bug_when>
    <thetext>Comment on attachment 297753
WIP

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

&gt; JSTests/wasm/function-tests/grow-memory.js:17
&gt; +    assert.truthy(threw);

assert.throws(() =&gt; new WebAssembly.Module(bin), WebAssembly.LinkError, msg);
It now even supports checking the message without context.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:351
&gt; +            m_currentBlock-&gt;appendNew&lt;ConstPtrValue&gt;(m_proc, Origin(), &amp;m_vm.topJSWebAssemblyInstance));

I wrote a similar thing in my current patch.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:355
&gt; +            memory, JSWebAssemblyMemory::offsetOfMemory());

But deleted these. I materialize them from Instance instead, and only do so if there&apos;s a memory present.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:425
&gt; +            size, m_currentBlock-&gt;appendNew&lt;Const64Value&gt;(m_proc, Origin(), PageCount::pageSize));

Right-shift by 16 would be better here (with a static assert on pageSize).

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:485
&gt; +        WASM_PARSER_FAIL_IF(!parseVarUInt1(reserved), &quot;Can&apos;t parse reserved varUint1 for grow_memory&quot;);

Here and below, we haven&apos;t been capitalizing error messages (since they get appended to other text).

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:45
&gt; +    failed = false;

I prefer starting with failed = true, and only setting it to false at the very end, on success.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:57
&gt; +    //void* result = mmap(nullptr, m_mappedCapacity, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);

Debug stuff. As we discussed, maybe we need a runtime flag for this.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:59
&gt; +    if (/*result == MAP_FAILED*/ true) {

Ditto.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:106
&gt; +        munmap(m_memory, m_mappedCapacity);

RELEASE_ASSERT on munmap&apos;s return.

&gt; Source/JavaScriptCore/wasm/WasmPageCount.h:56
&gt; +        uint32_t numPages = bytes / pageSize;

uint64_t instead?

&gt; Source/JavaScriptCore/wasm/WasmPageCount.h:74
&gt; +    PageCount operator+(const PageCount&amp; other)

Method can be const.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:114
&gt; +    // Neuter the old array.

Hmm, so when grow fails we don&apos;t neuter, but if it succeeds we neuter? That seems like an odd corner case that&apos;s not well-specified by the spec, right? Do we have a test for this?

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyMemoryPrototype.cpp:109
&gt; +    JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION(&quot;grow&quot;, webAssemblyMemoryProtoFuncGrow, DontEnum, 1);

.lut.h above instead of adding it here.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:265
&gt; +                    // FIXME: what&apos;s the behabior here? Do we static_cast&lt;uint32_t&gt;(int32_t) or do we throw exception on &lt; 0?

I think it&apos;s unsigned. It&apos;s possible to create a Memory which is &gt; 2GiB so it needs to be initializable.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:268
&gt; +                        offset = m_instance-&gt;loadI32Global(segment-&gt;offset.globalImportIndex());

segment-&gt;offset.globalImportIndex() is guaranteed to be valid here, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262766</commentid>
    <comment_count>18</comment_count>
      <attachid>297753</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-26 12:01:51 -0800</bug_when>
    <thetext>Comment on attachment 297753
WIP

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

&gt;&gt; JSTests/wasm/function-tests/grow-memory.js:17
&gt;&gt; +    assert.truthy(threw);
&gt; 
&gt; assert.throws(() =&gt; new WebAssembly.Module(bin), WebAssembly.LinkError, msg);
&gt; It now even supports checking the message without context.

Ok I&apos;ll try this. However, it should be CompileError, not LinkError

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:351
&gt;&gt; +            m_currentBlock-&gt;appendNew&lt;ConstPtrValue&gt;(m_proc, Origin(), &amp;m_vm.topJSWebAssemblyInstance));
&gt; 
&gt; I wrote a similar thing in my current patch.

Cool. Whoever lands first should just rebase with the other&apos;s implementation. I like your idea of removing one indirection by making JSWebAssemblyMemory have a Wasm::Memory field instead of a unique_ptr&lt;Wasm::Memory&gt; field

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:355
&gt;&gt; +            memory, JSWebAssemblyMemory::offsetOfMemory());
&gt; 
&gt; But deleted these. I materialize them from Instance instead, and only do so if there&apos;s a memory present.

Yeah that makes sense.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:425
&gt;&gt; +            size, m_currentBlock-&gt;appendNew&lt;Const64Value&gt;(m_proc, Origin(), PageCount::pageSize));
&gt; 
&gt; Right-shift by 16 would be better here (with a static assert on pageSize).

I suspect B3 would do this for us but I can go with your suggestion too.

&gt;&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:485
&gt;&gt; +        WASM_PARSER_FAIL_IF(!parseVarUInt1(reserved), &quot;Can&apos;t parse reserved varUint1 for grow_memory&quot;);
&gt; 
&gt; Here and below, we haven&apos;t been capitalizing error messages (since they get appended to other text).

Not sure what you mean. Should I not provide a message here?

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:45
&gt;&gt; +    failed = false;
&gt; 
&gt; I prefer starting with failed = true, and only setting it to false at the very end, on success.

SGTM

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:57
&gt;&gt; +    //void* result = mmap(nullptr, m_mappedCapacity, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);
&gt; 
&gt; Debug stuff. As we discussed, maybe we need a runtime flag for this.

Yeah I&apos;ll add an option for this. Maybe &quot;wasmSimulateLimited
Emory&quot;. We should also run all of our tests once with and once without this flag.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:106
&gt;&gt; +        munmap(m_memory, m_mappedCapacity);
&gt; 
&gt; RELEASE_ASSERT on munmap&apos;s return.

SGTM

&gt;&gt; Source/JavaScriptCore/wasm/WasmPageCount.h:56
&gt;&gt; +        uint32_t numPages = bytes / pageSize;
&gt; 
&gt; uint64_t instead?

This should always fit in uint32_t

&gt;&gt; Source/JavaScriptCore/wasm/WasmPageCount.h:74
&gt;&gt; +    PageCount operator+(const PageCount&amp; other)
&gt; 
&gt; Method can be const.

Ok

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyMemoryPrototype.cpp:109
&gt;&gt; +    JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION(&quot;grow&quot;, webAssemblyMemoryProtoFuncGrow, DontEnum, 1);
&gt; 
&gt; .lut.h above instead of adding it here.

SGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262767</commentid>
    <comment_count>19</comment_count>
      <attachid>297753</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-26 12:06:37 -0800</bug_when>
    <thetext>Comment on attachment 297753
WIP

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

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:114
&gt;&gt; +    // Neuter the old array.
&gt; 
&gt; Hmm, so when grow fails we don&apos;t neuter, but if it succeeds we neuter? That seems like an odd corner case that&apos;s not well-specified by the spec, right? Do we have a test for this?

It is well specified:
https://github.com/WebAssembly/design/blob/master/JS.md#webassemblymemoryprototypegrow

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:265
&gt;&gt; +                    // FIXME: what&apos;s the behabior here? Do we static_cast&lt;uint32_t&gt;(int32_t) or do we throw exception on &lt; 0?
&gt; 
&gt; I think it&apos;s unsigned. It&apos;s possible to create a Memory which is &gt; 2GiB so it needs to be initializable.

Yeah I agree. We should have a test where we properly do casting here. I&apos;ll add one

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:268
&gt;&gt; +                        offset = m_instance-&gt;loadI32Global(segment-&gt;offset.globalImportIndex());
&gt; 
&gt; segment-&gt;offset.globalImportIndex() is guaranteed to be valid here, right?

Yes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262768</commentid>
    <comment_count>20</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-26 12:07:11 -0800</bug_when>
    <thetext>&gt; &gt;&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:485
&gt; &gt;&gt; +        WASM_PARSER_FAIL_IF(!parseVarUInt1(reserved), &quot;Can&apos;t parse reserved varUint1 for grow_memory&quot;);
&gt; &gt; 
&gt; &gt; Here and below, we haven&apos;t been capitalizing error messages (since they get appended to other text).
&gt; 
&gt; Not sure what you mean. Should I not provide a message here?

I just mean lowercase first letter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262798</commentid>
    <comment_count>21</comment_count>
      <attachid>297744</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-26 23:57:23 -0800</bug_when>
    <thetext>Comment on attachment 297744
WIP

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

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:120
&gt; +    if (m_buffer) {
&gt; +        ArrayBufferContents dummyContents;
&gt; +        m_buffer-&gt;transferTo(dummyContents);
&gt; +        m_buffer = nullptr;
&gt; +        m_bufferWrapper.clear();
&gt; +    }

Actually, I&apos;m not sure what the behavior here is w.r.t the Wasm grow_memory opcode. Should we always neuter, or neuter on success only, like the JS API?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262800</commentid>
    <comment_count>22</comment_count>
      <attachid>297781</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-27 00:37:20 -0800</bug_when>
    <thetext>Created attachment 297781
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262801</commentid>
    <comment_count>23</comment_count>
      <attachid>297781</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-27 00:38:04 -0800</bug_when>
    <thetext>Comment on attachment 297781
patch

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

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:380
&gt; +    const MemoryInformation&amp; memory = m_info.memory;
&gt; +    for (auto info : memory.pinnedRegisters().sizeRegisters) {
&gt; +        Value* sizeValue = m_currentBlock-&gt;appendNew&lt;Value&gt;(m_proc, Sub, Origin(), size, m_currentBlock-&gt;appendNew&lt;Const64Value&gt;(m_proc, Origin(), info.sizeOffset));
&gt; +        arguments.append(sizeValue);
&gt; +    }
&gt; +
&gt; +    B3::PatchpointValue* patchpoint = m_currentBlock-&gt;appendNew&lt;B3::PatchpointValue&gt;(m_proc, B3::Void, Origin());
&gt; +    patchpoint-&gt;effects = Effects::none();
&gt; +    patchpoint-&gt;effects.writesPinned = true;
&gt; +
&gt; +    patchpoint-&gt;append(ConstrainedValue(baseMemory, ValueRep::reg(memory.pinnedRegisters().baseMemoryPointer)));
&gt; +    for (uint32_t i = 0; i &lt; memory.pinnedRegisters().sizeRegisters.size(); ++i)
&gt; +        patchpoint-&gt;append(ConstrainedValue(arguments[i], ValueRep::reg(memory.pinnedRegisters().sizeRegisters[i].sizeRegister)));
&gt; +
&gt; +    // FIXME: Is it valid to just make this constrained arguments to the patchpoint? Is there a less-hacky way to do this in B3?

Fil, Keith, is this valid to do?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262802</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-27 00:39:48 -0800</bug_when>
    <thetext>This patch modifies one of the wasm.json files. Please ensure that any changes in one have been mirrored to the other. You can find the wasm.json files at &quot;Source/JavaScriptCore/wasm/wasm.json&quot; and &quot;JSTests/wasm/wasm.json&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262803</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-27 00:40:01 -0800</bug_when>
    <thetext>Attachment 297781 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:48:  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/js/WebAssemblyMemoryPrototype.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmPageCount.h:55:  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/WasmFunctionParser.h:486:  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/WasmFunctionParser.h:503:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 5 in 30 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>1262877</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-27 15:47:59 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Comment on attachment 297781 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=297781&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:380
&gt; &gt; +    const MemoryInformation&amp; memory = m_info.memory;
&gt; &gt; +    for (auto info : memory.pinnedRegisters().sizeRegisters) {
&gt; &gt; +        Value* sizeValue = m_currentBlock-&gt;appendNew&lt;Value&gt;(m_proc, Sub, Origin(), size, m_currentBlock-&gt;appendNew&lt;Const64Value&gt;(m_proc, Origin(), info.sizeOffset));
&gt; &gt; +        arguments.append(sizeValue);
&gt; &gt; +    }

Remove this. 

&gt; &gt; +
&gt; &gt; +    B3::PatchpointValue* patchpoiny = m_currentBlock-&gt;appendNew&lt;B3::PatchpointValue&gt;(m_proc, B3::Void, Origin());
&gt; &gt; +    patchpoint-&gt;effects = Effects::none();
&gt; &gt; +    patchpoint-&gt;effects.writesPinned = true;

Also indicate that you will clobber the pinned registers in the clobbered register set. 

&gt; &gt; +
&gt; &gt; +    patchpoint-&gt;append(ConstrainedValue(baseMemory, ValueRep::reg(memory.pinnedRegisters().baseMemoryPointer)));
&gt; &gt; +    for (uint32_t i = 0; i &lt; memory.pinnedRegisters().sizeRegisters.size(); ++i)
&gt; &gt; +        patchpoint-&gt;append(ConstrainedValue(arguments[i], ValueRep::reg(memory.pinnedRegisters().sizeRegisters[i].sizeRegister)));

Remove this. 

&gt; &gt; +
&gt; &gt; +    // FIXME: Is it valid to just make this constrained arguments to the patchpoint? Is there a less-hacky way to do this in B3?
&gt; 
&gt; Fil, Keith, is this valid to do?

the patchpoint should have a generator that emits moves to those registers. Then you can make the changes I suggest above. 

I think what you&apos;re doing now is valid but not canonical. It&apos;s not canonical because it requires more code than what I suggest (I think).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262884</commentid>
    <comment_count>27</comment_count>
      <attachid>297796</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-27 16:45:42 -0800</bug_when>
    <thetext>Created attachment 297796
patch

Addressed Fil&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262885</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-27 16:47:00 -0800</bug_when>
    <thetext>Attachment 297796 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:48:  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/js/WebAssemblyMemoryPrototype.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmPageCount.h:55:  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/WasmFunctionParser.h:486:  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/WasmFunctionParser.h:503:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 5 in 30 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>1262956</commentid>
    <comment_count>29</comment_count>
      <attachid>297796</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-28 11:14:44 -0800</bug_when>
    <thetext>Comment on attachment 297796
patch

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

r=me with some comments.Also, it might be worthwhile to add an unreachable grow_memory / current_memory instruction since we&apos;ve had bugs decoding unreachable things in the past.

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        This patch implements grow_memory, current_memory, and WebAssembly.prototype.grow.

Shouldn&apos;t this be WebAssembly.Memory.prototype.grow?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:414
&gt; +    Value* size = m_currentBlock-&gt;appendNew&lt;MemoryValue&gt;(m_proc, Load, Int64, Origin(),

Nit: I would use pointerType() here instead of Int64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262993</commentid>
    <comment_count>30</comment_count>
      <attachid>297796</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-28 16:09:03 -0800</bug_when>
    <thetext>Comment on attachment 297796
patch

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

I also added a test for grow_memory/current_memory after Unreachable().

&gt;&gt; Source/JavaScriptCore/ChangeLog:9
&gt;&gt; +        This patch implements grow_memory, current_memory, and WebAssembly.prototype.grow.
&gt; 
&gt; Shouldn&apos;t this be WebAssembly.Memory.prototype.grow?

Yeah. And oops. I forgot to change this in my final changelog.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:414
&gt;&gt; +    Value* size = m_currentBlock-&gt;appendNew&lt;MemoryValue&gt;(m_proc, Load, Int64, Origin(),
&gt; 
&gt; Nit: I would use pointerType() here instead of Int64.

I removed this field entirely from VM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262994</commentid>
    <comment_count>31</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-28 16:09:21 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/210201</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262997</commentid>
    <comment_count>32</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-28 16:19:49 -0800</bug_when>
    <thetext>Follow up build fix:
https://trac.webkit.org/changeset/210202</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297698</attachid>
            <date>2016-12-22 18:30:48 -0800</date>
            <delta_ts>2016-12-23 01:11:00 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>4326</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCShyZXZpc2lv
biAyMTAxMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDE5IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CiAKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yo
c2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBNZW1vcnkg
d2UgbWFwIHRvIGJlIDJeMzIgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBp
bnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7
CisKIE1lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkK
ICAgICA6IG1fbW9kZShNb2RlOjpCb3VuZHNDaGVja2luZykKLSAgICAsIG1fc2l6ZShpbml0aWFs
LmJ5dGVzKCkpCi0gICAgLCBtX2NhcGFjaXR5KG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQ
YWdlQ291bnQ6Om1heCgpLmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAs
IG1fbWF4aW11bShtYXhpbXVtKQorICAgICwgbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKICAgICAv
LyBGSVhNRTogSWYgd2UgYWRkIHNpZ25hbCBiYXNlZCBib3VuZHMgY2hlY2tpbmcgdGhlbiB3ZSBu
ZWVkIGV4dHJhIHNwYWNlIGZvciBvdmVyZmxvdyBvbiBsb2FkLgogICAgIC8vIHNlZTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJl
IGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KIAotICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtX2Nh
cGFjaXR5OworICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygp
IDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpOwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBu
aWNlIGlmIHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKICAgICB2b2lkKiByZXN1bHQgPSBtbWFwKG51
bGxwdHIsIG1fbWFwcGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5P
TiwgLTEsIDApOwogICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgewpAQCAtNTMsNyArNTQs
NyBAQCBNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvCiAgICAgfQogCiAg
ICAgQVNTRVJUKG1fc2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsKLSAgICBpZiAobXByb3RlY3Qo
cmVzdWx0LCBtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgaWYgKG1wcm90
ZWN0KHJlc3VsdCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9U
X1dSSVRFKSkgewogICAgICAgICBtdW5tYXAocmVzdWx0LCBtX21hcHBlZENhcGFjaXR5KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYxLDYgKzYyLDM5IEBAIE1lbW9yeTo6TWVtb3J5KFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ28KICAgICBtX21lbW9yeSA9IHJlc3VsdDsKIH0KIAorYm9v
bCBNZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV9tZW1vcnkpOworCisgICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gbWF4aW11bSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50NjRfdCBkZXNpcmVkU2l6ZSA9IG5ld1Np
emUuYnl0ZXMoKTsKKyAgICBpZiAoZGVzaXJlZFNpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSkgewor
ICAgICAgICBib29sIHN1Y2Nlc3MgPSAhbXByb3RlY3QobV9tZW1vcnksIHN0YXRpY19jYXN0PHNp
emVfdD4oZGVzaXJlZFNpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAgICAgICAgaWYg
KCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3NpemUgPSBk
ZXNpcmVkU2l6ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gT3RoZXJ3
aXNlLCBsZXRzIHRyeSB0byBtYWtlIHNvbWUgbmV3IG1lbW9yeS4KKyAgICB2b2lkKiBuZXdNZW1v
cnkgPSBtbWFwKG51bGxwdHIsIGRlc2lyZWRTaXplLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwg
TUFQX0FOT04sIC0xLCAwKTsKKyAgICBpZiAobmV3TWVtb3J5ID09IE1BUF9GQUlMRUQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIHN1Y2Nlc3MgPSAhbXByb3RlY3QobmV3TWVtb3J5
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlc2lyZWRTaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklU
RSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtZW1j
cHkobmV3TWVtb3J5LCBtX21lbW9yeSwgbV9zaXplKTsKKyAgICBtdW5tYXAobV9tZW1vcnksIG1f
bWFwcGVkQ2FwYWNpdHkpOworCisgICAgbV9tYXBwZWRDYXBhY2l0eSA9IGRlc2lyZWRTaXplOwor
ICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOworICAgIG1fbWVtb3J5ID0gbmV3TWVtb3J5OworICAg
IHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogfSAvLyBuYW1lc3BhY2Ug
V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAkocmV2aXNp
b24gMjEwMTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MiwyNSArNjIsMTYgQEAgcHVibGljOgogICAgIFBhZ2VDb3VudCBp
bml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CiAgICAgUGFnZUNvdW50IG1heGlt
dW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KIAotICAgIGJvb2wgZ3Jvdyh1aW50MzJf
dCBuZXdTaXplKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbWVtb3J5KTsKLSAgICAgICAgaWYg
KG5ld1NpemUgPiBtX2NhcGFjaXR5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIHJldHVybiAhbXByb3RlY3QobV9tZW1vcnksIG5ld1NpemUsIFBST1RfUkVBRCB8IFBST1Rf
V1JJVEUpOwotICAgIH0KKyAgICBib29sIGdyb3coUGFnZUNvdW50KTsKIAogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9yeSwg
bV9zaXplKTsgfQotCiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0
ciB9OwogICAgIE1vZGUgbV9tb2RlOwotICAgIHVpbnQzMl90IG1fc2l6ZSB7IDAgfTsKLSAgICB1
aW50MzJfdCBtX2NhcGFjaXR5IHsgMCB9OwogICAgIFBhZ2VDb3VudCBtX2luaXRpYWw7CiAgICAg
UGFnZUNvdW50IG1fbWF4aW11bTsKKyAgICB1aW50NjRfdCBtX3NpemUgeyAwIH07CiAgICAgdWlu
dDY0X3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgJKHJldmlzaW9uIDIxMDEyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9wYWdlQ291bnQocGFnZUNvdW50KQog
ICAgIHsgfQogCi0gICAgc2l6ZV90IGJ5dGVzKCkgeyByZXR1cm4gbV9wYWdlQ291bnQgKiBwYWdl
U2l6ZTsgfQorICAgIHVpbnQ2NF90IGJ5dGVzKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KG1fcGFnZUNvdW50KSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90PihwYWdlU2l6ZSk7IH0KIAog
ICAgIHN0YXRpYyBib29sIGlzVmFsaWQodWludDMyX3QgcGFnZUNvdW50KQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297706</attachid>
            <date>2016-12-23 01:11:00 -0800</date>
            <delta_ts>2016-12-23 17:39:33 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>13369</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rl
c3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzYgQEAKK2ltcG9ydCB7IGVxIGFzIGFzc2VydEVxIH0gZnJvbSAiLi4vYXNzZXJ0LmpzIjsKK2Nv
bnN0IHBhZ2VTaXplID0gNjQqMTAyNDsKKworbGV0IGJ1ZmZlcnMgPSBbXTsKK2ZvciAobGV0IGkg
PSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBjb25zdCBtYXggPSA1OworICAgIGxldCBwYWdlQ291
bnQgPSAxOworICAgIGxldCB4ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMSwg
bWF4aW11bTogbWF4fSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAobWF4IC0gMSk7IGkrKykg
eworICAgICAgICBsZXQgaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoeC5idWZmZXIpOworICAg
ICAgICBpbnQ4QXJyYXlbcGFnZUNvdW50ICogcGFnZVNpemUgLSAxXSA9IHBhZ2VDb3VudDsKKyAg
ICAgICAgYXNzZXJ0RXEoaW50OEFycmF5W3BhZ2VDb3VudCAqIHBhZ2VTaXplIC0gMV0sIHBhZ2VD
b3VudCk7CisKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlU2l6ZTsgaSsrKSB7Cisg
ICAgICAgICAgICBpbnQ4QXJyYXlbcGFnZVNpemUqKHBhZ2VDb3VudCAtIDEpICsgaV0gPSBwYWdl
Q291bnQ7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VDb3Vu
dDsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhZ2VTaXplOyBqKysp
IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcShpbnQ4QXJyYXlbaSAqIHBhZ2VTaXplICsgal0s
IGkgKyAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxldCBidWZmZXIg
PSB4LmJ1ZmZlcjsKKyAgICAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIHBhZ2VDb3Vu
dCAqIHBhZ2VTaXplKTsKKyAgICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7CisgICAgICAgIGxl
dCBwcmV2aW91c1BhZ2VTaXplID0geC5ncm93KDEpOworICAgICAgICBhc3NlcnRFcShidWZmZXIu
Ynl0ZUxlbmd0aCwgMCk7CisgICAgICAgIGFzc2VydEVxKHByZXZpb3VzUGFnZVNpemUsIHBhZ2VD
b3VudCk7CisgICAgICAgICsrcGFnZUNvdW50OworICAgIH0KK30KKworZm9yIChsZXQgYnVmZmVy
IG9mIGJ1ZmZlcnMpIHsKKyAgICBhc3NlcnRFcShidWZmZXIuYnl0ZUxlbmd0aCwgMCk7Cit9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkocmV2aXNpb24g
MjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDE4ICszMCwxOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCitzdGF0aWNfYXNzZXJ0KHNpemVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKHNp
emVfdCksICJXZSByZWx5IG9uIGFsbG93aW5nIHRoZSBtYXhpbXVtIHNpemUgb2YgTWVtb3J5IHdl
IG1hcCB0byBiZSAyXjMyIHdoaWNoIGlzIGxhcmdlciB0aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50
ZWdlciB0aGF0IHdlJ2QgcGFzcyB0byBtcHJvdGVjdCBpZiB0aGlzIGRpZG4ndCBob2xkLiIpOwor
CiBNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCiAg
ICAgOiBtX21vZGUoTW9kZTo6Qm91bmRzQ2hlY2tpbmcpCi0gICAgLCBtX3NpemUoaW5pdGlhbC5i
eXRlcygpKQotICAgICwgbV9jYXBhY2l0eShtYXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogUGFn
ZUNvdW50OjptYXgoKS5ieXRlcygpKQogICAgICwgbV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBt
X21heGltdW0obWF4aW11bSkKKyAgICAsIG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAgLy8g
RklYTUU6IElmIHdlIGFkZCBzaWduYWwgYmFzZWQgYm91bmRzIGNoZWNraW5nIHRoZW4gd2UgbmVl
ZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cgb24gbG9hZC4KICAgICAvLyBzZWU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBn
dWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCiAKLSAgICBtX21hcHBlZENhcGFjaXR5ID0gbV9jYXBh
Y2l0eTsKKyAgICBtX21hcHBlZENhcGFjaXR5ID0gbWF4aW11bSA/IG1heGltdW0uYnl0ZXMoKSA6
IFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKTsKICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmlj
ZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCiAgICAgdm9pZCogcmVzdWx0ID0gbW1hcChudWxs
cHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04s
IC0xLCAwKTsKICAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKQEAgLTUzLDcgKzU0LDcg
QEAgTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDbwogICAgIH0KIAogICAg
IEFTU0VSVChtX3NpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSk7Ci0gICAgaWYgKG1wcm90ZWN0KHJl
c3VsdCwgbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgIGlmIChtcHJvdGVj
dChyZXN1bHQsIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9X
UklURSkpIHsKICAgICAgICAgbXVubWFwKHJlc3VsdCwgbV9tYXBwZWRDYXBhY2l0eSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC02MSw2ICs2MiwzNyBAQCBNZW1vcnk6Ok1lbW9yeShQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvCiAgICAgbV9tZW1vcnkgPSByZXN1bHQ7CiB9CiAKK2Jvb2wg
TWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
bWVtb3J5KTsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdTaXplID4gUGFnZUNvdW50Ojpmcm9tQnl0
ZXMobV9zaXplKSk7CisKKyAgICBpZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiBtYXhpbXVtKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQ2NF90IGRlc2lyZWRTaXplID0gbmV3
U2l6ZS5ieXRlcygpOworICAgIGlmIChkZXNpcmVkU2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KSB7
CisgICAgICAgIGJvb2wgc3VjY2VzcyA9ICFtcHJvdGVjdChzdGF0aWNfY2FzdDx1aW50OF90Kj4o
bV9tZW1vcnkpICsgbV9zaXplLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlc2lyZWRTaXplIC0gbV9z
aXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9zaXplID0gZGVzaXJlZFNpemU7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgbGV0J3MgdHJ5
IHRvIG1ha2Ugc29tZSBuZXcgbWVtb3J5LgorICAgIHZvaWQqIG5ld01lbW9yeSA9IG1tYXAobnVs
bHB0ciwgZGVzaXJlZFNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwg
TUFQX0FOT04sIC0xLCAwKTsKKyAgICBpZiAobmV3TWVtb3J5ID09IE1BUF9GQUlMRUQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3Np
emUpOworICAgIG11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSk7CisKKyAgICBtX21h
cHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CisgICAgbV9zaXplID0gZGVzaXJlZFNpemU7Cisg
ICAgbV9tZW1vcnkgPSBuZXdNZW1vcnk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiB9IC8vIG5hbWVzcGFjZSBXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5oCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDMxICs1Niwy
MyBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9y
eTsgfQogICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBQ
YWdlQ291bnQgc2l6ZUluUGFnZXMoKSBjb25zdCB7IHJldHVybiBQYWdlQ291bnQ6OmZyb21CeXRl
cyhtX3NpemUpOyB9CiAKICAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0K
IAogICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CiAg
ICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KIAotICAg
IGJvb2wgZ3Jvdyh1aW50MzJfdCBuZXdTaXplKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbWVt
b3J5KTsKLSAgICAgICAgaWYgKG5ld1NpemUgPiBtX2NhcGFjaXR5KQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiAhbXByb3RlY3QobV9tZW1vcnksIG5ld1NpemUs
IFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwotICAgIH0KKyAgICBib29sIGdyb3coUGFnZUNvdW50
KTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKE1lbW9yeSwgbV9zaXplKTsgfQotCiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQq
IG1fbWVtb3J5IHsgbnVsbHB0ciB9OwogICAgIE1vZGUgbV9tb2RlOwotICAgIHVpbnQzMl90IG1f
c2l6ZSB7IDAgfTsKLSAgICB1aW50MzJfdCBtX2NhcGFjaXR5IHsgMCB9OwogICAgIFBhZ2VDb3Vu
dCBtX2luaXRpYWw7CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKKyAgICB1aW50NjRfdCBtX3Np
emUgeyAwIH07CiAgICAgdWludDY0X3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgJKHJldmlzaW9u
IDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDIyIEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3Bh
Z2VDb3VudChwYWdlQ291bnQpCiAgICAgeyB9CiAKLSAgICBzaXplX3QgYnl0ZXMoKSB7IHJldHVy
biBtX3BhZ2VDb3VudCAqIHBhZ2VTaXplOyB9CisgICAgdWludDY0X3QgYnl0ZXMoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9wYWdlQ291bnQpICogc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHBhZ2VTaXplKTsgfQorICAgIHVpbnQzMl90IHBhZ2VDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFnZUNvdW50OyB9CiAKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkKHVpbnQzMl90
IHBhZ2VDb3VudCkKICAgICB7CiAgICAgICAgIHJldHVybiBwYWdlQ291bnQgPD0gbWF4UGFnZUNv
dW50OwogICAgIH0KIAorICAgIHN0YXRpYyBQYWdlQ291bnQgZnJvbUJ5dGVzKHVpbnQ2NF90IGJ5
dGVzKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZXMgJSBwYWdlU2l6ZSA9PSAw
KTsKKyAgICAgICAgdWludDMyX3QgbnVtUGFnZXMgPSBieXRlcyAvIHBhZ2VTaXplOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChQYWdlQ291bnQ6OmlzVmFsaWQobnVtUGFnZXMpKTsKKyAgICAgICAg
cmV0dXJuIFBhZ2VDb3VudChudW1QYWdlcyk7CisgICAgfQorCiAgICAgc3RhdGljIFBhZ2VDb3Vu
dCBtYXgoKQogICAgIHsKICAgICAgICAgcmV0dXJuIFBhZ2VDb3VudChtYXhQYWdlQ291bnQpOwpA
QCAtNjIsNiArNzEsMTUgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBhZ2VD
b3VudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50IDwgb3RoZXIubV9wYWdlQ291
bnQ7IH0KICAgICBib29sIG9wZXJhdG9yPihjb25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX3BhZ2VDb3VudCA+IG90aGVyLm1fcGFnZUNvdW50OyB9CiAgICAgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IFBhZ2VDb3VudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50
ID49IG90aGVyLm1fcGFnZUNvdW50OyB9CisgICAgUGFnZUNvdW50IG9wZXJhdG9yKyhjb25zdCBQ
YWdlQ291bnQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHN1bU92ZXJmbG93czx1aW50MzJf
dD4obV9wYWdlQ291bnQsIG90aGVyLm1fcGFnZUNvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBQ
YWdlQ291bnQoKTsKKyAgICAgICAgdWludDMyX3QgbmV3Q291bnQgPSBtX3BhZ2VDb3VudCArIG90
aGVyLm1fcGFnZUNvdW50OworICAgICAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZChuZXdDb3Vu
dCkpCisgICAgICAgICAgICByZXR1cm4gUGFnZUNvdW50KCk7CisgICAgICAgIHJldHVybiBQYWdl
Q291bnQobmV3Q291bnQpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQzMl90IHBhZ2VTaXplID0gNjQgKiBLQjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCShyZXZpc2lvbiAy
MTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVt
b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQAogCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkFycmF5
QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtNTUsNiArNTUsMTUgQEAgSlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1l
bW9yeQogewogfQogCitKU1dlYkFzc2VtYmx5TWVtb3J5Ojp+SlNXZWJBc3NlbWJseU1lbW9yeSgp
Cit7CisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAgIEFycmF5QnVmZmVyQ29udGVudHMgZHVt
bXlDb250ZW50czsKKyAgICAgICAgbV9idWZmZXItPnRyYW5zZmVyVG8oZHVtbXlDb250ZW50cyk7
CisgICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKKyAgICB9Cit9CisKIEpTQXJyYXlCdWZmZXIq
IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiB7CiAgICAgaWYgKG1fYnVmZmVyV3JhcHBlcikKQEAgLTcxLDYgKzgwLDQ2IEBA
IEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmJ1ZmYKICAgICByZXR1cm4gbV9i
dWZmZXJXcmFwcGVyLmdldCgpOwogfQogCitXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1l
bW9yeTo6Z3JvdyhFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRhKQoreworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbV9tZW1vcnktPnNp
emVJblBhZ2VzKCk7CisKKyAgICBpZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChkZWx0YSkp
IHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IGV4cGVjdHMg
dGhlIGRlbHRhIHRvIGJlIGEgdmFsaWQgcGFnZSBjb3VudCIpKSk7CisgICAgICAgIHJldHVybiBX
YXNtOjpQYWdlQ291bnQoKTsKKyAgICB9CisKKyAgICBXYXNtOjpQYWdlQ291bnQgbmV3U2l6ZSA9
IG9sZFBhZ2VDb3VudCArIFdhc206OlBhZ2VDb3VudChkZWx0YSk7CisgICAgaWYgKCFuZXdTaXpl
KSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyBleHBlY3Rz
IHRoZSBncm93biBzaXplIHRvIGJlIGEgdmFsaWQgcGFnZSBjb3VudCIpKSk7CisgICAgICAgIHJl
dHVybiBXYXNtOjpQYWdlQ291bnQoKTsKKyAgICB9CisKKyAgICBpZiAoZGVsdGEpIHsKKyAgICAg
ICAgLy8gRklYTUU6IHdoYXQncyB0aGUgY29ycmVjdCBiZWhhdmlvciBmb3IgZGVsdGEgPT0gMD8K
KyAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9tZW1vcnktPmdyb3cobmV3U2l6ZSk7CisgICAgICAg
IGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgICAgICAgICByZXR1cm4g
V2FzbTo6UGFnZUNvdW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRv
IGNsZWFyIG91dCB0aGUgb2xkIGFycmF5IGJ1ZmZlciBiZWNhdXNlIGl0IG1pZ2h0IG5vdyBiZSBw
b2ludGluZworICAgIC8vIHRvIHN0YWxlIG1lbW9yeS4KKyAgICAvLyBOZXV0ZXIgdGhlIG9sZCBh
cnJheS4KKyAgICBpZiAobV9idWZmZXIpIHsKKyAgICAgICAgQXJyYXlCdWZmZXJDb250ZW50cyBk
dW1teUNvbnRlbnRzOworICAgICAgICBtX2J1ZmZlci0+dHJhbnNmZXJUbyhkdW1teUNvbnRlbnRz
KTsKKyAgICAgICAgbV9idWZmZXIgPSBudWxscHRyOworICAgICAgICBtX2J1ZmZlcldyYXBwZXIu
Y2xlYXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2xkUGFnZUNvdW50OworfQorCiB2b2lkIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDkgKzQ4LDExIEBAIHB1YmxpYzoKIAogICAgIFdhc206Ok1lbW9yeSogbWVt
b3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBKU0FycmF5QnVmZmVyKiBidWZm
ZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopOworICAgIFdhc206OlBhZ2VDb3VudCBncm93KEV4
ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhKTsKIAogcHJvdGVjdGVkOgogICAgIEpTV2ViQXNzZW1i
bHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYm
KTsKKyAgICB+SlNXZWJBc3NlbWJseU1lbW9yeSgpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAKICNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeVByb3Rv
dHlwZS5sdXQuaCIKIApAQCAtNDQsMjEgKzQ1LDUwIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3Nl
bWJseU1lbW9yeVByb3RvdHkKICBAZW5kCiAgKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKik7
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5j
QnVmZmVyKEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3Nl
bWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKik7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKiBl
eGVjKQorQUxXQVlTX0lOTElORSBKU1dlYkFzc2VtYmx5TWVtb3J5KiBnZXRNZW1vcnkoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1v
cnkqPihleGVjLT50aGlzVmFsdWUoKSk7IAorICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9y
eSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZhbHVlKTsgCiAgICAgaWYg
KCFtZW1vcnkpIHsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCAKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5LnByb3RvdHlwZS5idWZmZXIg
Z2V0dGVyIGNhbGxlZCB3aXRoIG5vbiBXZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8IHZhbHVlIikp
KSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIAorICAgICAgICAg
ICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5
LnByb3RvdHlwZS5idWZmZXIgZ2V0dGVyIGNhbGxlZCB3aXRoIG5vbiBXZWJBc3NlbWJseS5NZW1v
cnkgfHRoaXN8IHZhbHVlIikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAg
IHJldHVybiBtZW1vcnk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNz
ZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnkoZXhl
YywgZXhlYy0+dGhpc1ZhbHVlKCkpOyAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtZW1vcnktPmJ1ZmZlcihleGVj
LT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKIH0KIAorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRl
KiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBt
ZW1vcnkgPSBnZXRNZW1vcnkoZXhlYywgZXhlYy0+dGhpc1ZhbHVlKCkpOyAKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgCisgICAgdWludDMyX3QgZGVsdGEg
PSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICBXYXNtOjpQYWdlQ291bnQg
cmVzdWx0ID0gbWVtb3J5LT5ncm93KGV4ZWMsIGRlbHRhKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKHJlc3VsdC5wYWdlQ291bnQoKSkpOworfQorCiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlw
ZSogV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGF1dG8qIG9i
amVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90
eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7
CkBAIC03NSw2ICsxMDUsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlOjpmaW5p
c2hDCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEpTQ19OQVRJVkVfR0VU
VEVSKCJidWZmZXIiLCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlciwgRG9udEVudW0g
fCBBY2Nlc3Nvcik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
Imdyb3ciLCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3csIERvbnRFbnVtLCAxKTsKIH0K
IAogV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297726</attachid>
            <date>2016-12-23 17:39:33 -0800</date>
            <delta_ts>2016-12-24 11:10:03 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>24200</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rl
c3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzUgQEAKK2ltcG9ydCB7IGVxIGFzIGFzc2VydEVxIH0gZnJvbSAiLi4vYXNzZXJ0LmpzIjsKK2Nv
bnN0IHBhZ2VTaXplID0gNjQqMTAyNDsKKworbGV0IGJ1ZmZlcnMgPSBbXTsKK2ZvciAobGV0IGkg
PSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBjb25zdCBtYXggPSA1OworICAgIGxldCBwYWdlQ291
bnQgPSAxOworICAgIGxldCB4ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMSwg
bWF4aW11bTogbWF4fSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAobWF4IC0gMSk7IGkrKykg
eworICAgICAgICBsZXQgaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoeC5idWZmZXIpOworCisg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZVNpemU7IGkrKykgeworICAgICAgICAgICAg
YXNzZXJ0RXEoaW50OEFycmF5W3BhZ2VTaXplKihwYWdlQ291bnQgLSAxKSArIGldLCAwKTsKKyAg
ICAgICAgICAgIGludDhBcnJheVtwYWdlU2l6ZSoocGFnZUNvdW50IC0gMSkgKyBpXSA9IHBhZ2VD
b3VudDsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZUNvdW50
OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFnZVNpemU7IGorKykg
eworICAgICAgICAgICAgICAgIGFzc2VydEVxKGludDhBcnJheVtpICogcGFnZVNpemUgKyBqXSwg
aSArIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbGV0IGJ1ZmZlciA9
IHguYnVmZmVyOworICAgICAgICBhc3NlcnRFcShidWZmZXIuYnl0ZUxlbmd0aCwgcGFnZUNvdW50
ICogcGFnZVNpemUpOworICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTsKKyAgICAgICAgbGV0
IHByZXZpb3VzUGFnZVNpemUgPSB4Lmdyb3coMSk7CisgICAgICAgIGFzc2VydEVxKGJ1ZmZlci5i
eXRlTGVuZ3RoLCAwKTsKKyAgICAgICAgYXNzZXJ0RXEocHJldmlvdXNQYWdlU2l6ZSwgcGFnZUNv
dW50KTsKKyAgICAgICAgKytwYWdlQ291bnQ7CisgICAgfQorfQorCitmb3IgKGxldCBidWZmZXIg
b2YgYnVmZmVycykgeworICAgIGFzc2VydEVxKGJ1ZmZlci5ieXRlTGVuZ3RoLCAwKTsKK30KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjEwMTI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDcg
KzMwMiw3IEBAIHB1YmxpYzoKICAgICBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZTsKICAgICBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIHRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKICAgICB2b2lkKiB0
b3BXYXNtTWVtb3J5UG9pbnRlcjsKLSAgICB1aW50MzJfdCB0b3BXYXNtTWVtb3J5U2l6ZTsKKyAg
ICB1aW50NjRfdCB0b3BXYXNtTWVtb3J5U2l6ZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1
Y3R1cmVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlUmFyZURhdGFT
dHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdGVybWluYXRlZEV4ZWN1dGlvbkVycm9y
U3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiAr
MTk5LDggQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUqLCBTaWduYXR1cmVJbmRleCwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKIAorICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUg
ZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCiAgICAgdm9pZCBkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBl
eHByZXNzaW9uU3RhY2spOwogCiAgICAgdm9pZCBlbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxw
ZXJzJiwgRXhjZXB0aW9uVHlwZSk7CkBAIC0zMzIsNiArMzM0LDY4IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiAKICAgICByZXR1cm4geyB9OwogfQogCithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBpbnQzMl90ICgqZ3Jvd01l
bW9yeSkgKEV4ZWNTdGF0ZSosIGludDMyX3QpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJf
dCBkZWx0YSkgLT4gaW50MzJfdCB7IAorICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTsKKyAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogd2FzbU1lbW9yeSA9IGluc3RhbmNlLT5t
ZW1vcnkoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQod2FzbU1lbW9yeSk7IC8vIFRoaXMgd291
bGQgZmFpbCB2YWxpZGF0aW9uIG90aGVyd2lzZS4KKworICAgICAgICBpZiAoZGVsdGEgPCAwKQor
ICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRp
b25zT25GYWlsdXJlID0gZmFsc2U7CisgICAgICAgIFBhZ2VDb3VudCByZXN1bHQgPSB3YXNtTWVt
b3J5LT5ncm93KGV4ZWMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihkZWx0YSksIHNob3VsZFRocm93
RXhjZXB0aW9uc09uRmFpbHVyZSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAg
ICB2bS50b3BXYXNtTWVtb3J5UG9pbnRlciA9IHdhc21NZW1vcnktPm1lbW9yeSgpLT5tZW1vcnko
KTsKKyAgICAgICAgdm0udG9wV2FzbU1lbW9yeVNpemUgPSB3YXNtTWVtb3J5LT5tZW1vcnkoKS0+
c2l6ZSgpOworCisgICAgICAgIHJldHVybiByZXN1bHQucGFnZUNvdW50KCk7CisgICAgfTsKKwor
ICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9j
LCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3RQdHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihncm93TWVt
b3J5KSksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3By
b2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdpbigpKSwgZGVsdGEpOworCisgICAgUkVMRUFTRV9B
U1NFUlQobV9pbmZvLmhhc01lbW9yeSgpKTsKKyAgICBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiog
bWVtb3J5ID0gJm1faW5mby5tZW1vcnk7CisKKyAgICBWZWN0b3I8VmFsdWUqPiBhcmd1bWVudHM7
CisKKyAgICBWYWx1ZSogYmFzZU1lbW9yeSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLAorICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksICZtX3Zt
LnRvcFdhc21NZW1vcnlQb2ludGVyKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChiYXNlTWVtb3J5
KTsKKworICAgIFZhbHVlKiBzaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgJm1fdm0udG9w
V2FzbU1lbW9yeVNpemUpKTsKKyAgICBmb3IgKGF1dG8gaW5mbyA6IG1lbW9yeS0+cGlubmVkUmVn
aXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycykgeworICAgICAgICBWYWx1ZSogc2l6ZVZhbHVlID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTdWIsIE9yaWdpbigpLCBzaXpl
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBPcmlnaW4o
KSwgaW5mby5zaXplT2Zmc2V0KSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoc2l6ZVZhbHVl
KTsKKyAgICB9CisKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lk
LCBPcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsK
KyAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgcGF0Y2hw
b2ludC0+YXBwZW5kVmVjdG9yV2l0aFJlcChhcmd1bWVudHMsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOworCisgICAgLy8gRklYTUU6IHdvdWxkIGl0IHdvcmsganVzdCB0byBtYWtlIHRoZXNlIHRo
aW5ncyBDb25zdHJhaW5lZFZhbHVlcz8KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW21l
bW9yeV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOworICAgICAgICAKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzBdLmdw
cigpLCBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyKTsKKyAgICAg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6
ZVJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGppdC5tb3ZlKHBhcmFtc1sxICsg
aV0uZ3ByKCksIG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1tpXS5zaXpl
UmVnaXN0ZXIpOworICAgIH0pOworCisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0byBCM0lSR2Vu
ZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKQEAgLTkwMiwx
MiArOTY2LDEyIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihWTSYgdm0KICAg
ICBpZiAoISFtZW1vcnkpIHsKICAgICAgICAgYmFzZU1lbW9yeSA9IGJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwKICAgICAgICAgICAgIGJs
b2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ2bS50b3BXYXNt
TWVtb3J5UG9pbnRlcikpOwotICAgICAgICBWYWx1ZSogc2l6ZSA9IGJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgVmFsdWUq
IHNpemUgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwg
T3JpZ2luKCksCiAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAmdm0udG9wV2FzbU1lbW9yeVNpemUpKTsKICAgICAgICAgc2l6ZXMucmVz
ZXJ2ZUNhcGFjaXR5KG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUo
KSk7CiAgICAgICAgIGZvciAoYXV0byBpbmZvIDogbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNp
emVSZWdpc3RlcnMpIHsKICAgICAgICAgICAgIHNpemVzLmFwcGVuZChibG9jay0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBTdWIsIG9yaWdpbiwgc2l6ZSwKLSAgICAgICAgICAgICAgICBibG9jay0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgb3JpZ2luLCBpbmZvLnNpemVPZmZzZXQpKSk7
CisgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIG9y
aWdpbiwgaW5mby5zaXplT2Zmc2V0KSkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShyZXZpc2lvbiAyMTAxMjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5MSw3ICsxOTEsMTAgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICBWZWN0b3I8
SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXM7CisKKyAgICBib29sIGhhc01lbW9yeSgpIGNvbnN0IHsg
cmV0dXJuICEhbWVtb3J5OyB9CiAgICAgTWVtb3J5SW5mb3JtYXRpb24gbWVtb3J5OworCiAgICAg
VmVjdG9yPEV4cG9ydD4gZXhwb3J0czsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBzdGFy
dEZ1bmN0aW9uSW5kZXhTcGFjZTsKICAgICBWZWN0b3I8U2VnbWVudDo6UHRyPiBkYXRhOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJ
KHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvblBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzgsOCArNDc4LDIyIEBAIGF1dG8gRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKLSAgICBjYXNlIEdyb3dNZW1vcnk6Ci0gICAgICAgIHJldHVybiBmYWlsKCJub3QgeWV0
IGltcGxlbWVudGVkOiBncm93X21lbW9yeSIpOyAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRl
ZC4KKyAgICBjYXNlIEdyb3dNZW1vcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
bV9pbmZvLm1lbW9yeSwgImdyb3dfbWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1vcnkgaXMg
ZGVmaW5lZCBvciBpbXBvcnRlZCIpOworCisgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWQ7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmVzZXJ2ZWQpLCAiQ2FuJ3Qg
cGFyc2UgcmVzZXJ2ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVtb3J5Iik7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYocmVzZXJ2ZWQgIT0gMCwgInJlc2VydmVkIHZhclVpbnQxIGZvciBncm93
X21lbW9yeSBtdXN0IGJlIHplcm8iKTsKKworICAgICAgICBFeHByZXNzaW9uVHlwZSBkZWx0YTsK
KyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhkZWx0YSwgIkV4cGVj
dCBhbiBpMzIgYXJndW1lbnQgdG8gZ3Jvd19tZW1vcnkgb24gdGhlIHN0YWNrIik7CisKKyAgICAg
ICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChhZGRHcm93TWVtb3J5KGRlbHRhLCByZXN1bHQpKTsKKyAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suYXBwZW5kKHJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CiAKICAgICBj
YXNlIEN1cnJlbnRNZW1vcnk6CiAgICAgICAgIHJldHVybiBmYWlsKCJub3QgeWV0IGltcGxlbWVu
dGVkOiBjdXJyZW50X21lbW9yeSIpOyAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCShyZXZpc2lvbiAy
MTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMjEgKzMwLDIzIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6
ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2Ug
bWFwIHRvIGJlIDJeMzIgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRl
Z2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7CisK
IE1lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAg
ICA6IG1fbW9kZShNb2RlOjpCb3VuZHNDaGVja2luZykKLSAgICAsIG1fc2l6ZShpbml0aWFsLmJ5
dGVzKCkpCi0gICAgLCBtX2NhcGFjaXR5KG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdl
Q291bnQ6Om1heCgpLmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1f
bWF4aW11bShtYXhpbXVtKQorICAgICwgbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKICAgICAvLyBG
SVhNRTogSWYgd2UgYWRkIHNpZ25hbCBiYXNlZCBib3VuZHMgY2hlY2tpbmcgdGhlbiB3ZSBuZWVk
IGV4dHJhIHNwYWNlIGZvciBvdmVyZmxvdyBvbiBsb2FkLgogICAgIC8vIHNlZTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1
YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KIAotICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtX2NhcGFj
aXR5OworICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDog
UGFnZUNvdW50OjptYXgoKS5ieXRlcygpOwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNl
IGlmIHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKLSAgICB2b2lkKiByZXN1bHQgPSBtbWFwKG51bGxw
dHIsIG1fbWFwcGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwg
LTEsIDApOwotICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgeworICAgIC8vdm9pZCogcmVz
dWx0ID0gbW1hcChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklW
QVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgICB2b2lkKiByZXN1bHQ7CisgICAgaWYgKC8qcmVz
dWx0ID09IE1BUF9GQUlMRUQqLyB0cnVlKSB7CiAgICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEg
ZGlmZmVyZW50IG51bWJlci4KICAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1fc2l6ZTsKICAg
ICAgICAgcmVzdWx0ID0gbW1hcChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUs
IE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKQEAgLTUzLDE0ICs1NSw0NSBAQCBNZW1v
cnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvCiAgICAgfQogCiAgICAgQVNTRVJU
KG1fc2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsKLSAgICBpZiAobXByb3RlY3QocmVzdWx0LCBt
X3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7Ci0gICAgICAgIG11bm1hcChyZXN1bHQs
IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgICAgICByZXR1cm47CisgICAgeworICAgICAgICBib29s
IHN1Y2Nlc3MgPSAhbXByb3RlY3QocmVzdWx0LCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSks
IFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNz
KTsKICAgICB9CiAKICAgICBtX21lbW9yeSA9IHJlc3VsdDsKIH0KIAorYm9vbCBNZW1vcnk6Omdy
b3coUGFnZUNvdW50IG5ld1NpemUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKG5ld1NpemUgPiBQYWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUp
KTsKKworICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+IG1heGltdW0oKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgdWludDY0X3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5dGVz
KCk7CisKKyAgICBpZiAoZGVzaXJlZFNpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSkgeworICAgICAg
ICBib29sIHN1Y2Nlc3MgPSAhbXByb3RlY3Qoc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5
KSArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkZXNpcmVkU2l6ZSAtIG1fc2l6ZSksIFBS
T1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzKTsK
KyAgICAgICAgbV9zaXplID0gZGVzaXJlZFNpemU7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIC8vIE90aGVyd2lzZSwgbGV0J3MgdHJ5IHRvIG1ha2Ugc29tZSBuZXcgbWVtb3J5
LgorICAgIHZvaWQqIG5ld01lbW9yeSA9IG1tYXAobnVsbHB0ciwgZGVzaXJlZFNpemUsIFBST1Rf
UkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgICBp
ZiAobmV3TWVtb3J5ID09IE1BUF9GQUlMRUQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUpOworICAgIG11bm1hcChtX21lbW9y
eSwgbV9tYXBwZWRDYXBhY2l0eSk7CisgICAgbV9tZW1vcnkgPSBuZXdNZW1vcnk7CisgICAgbV9t
YXBwZWRDYXBhY2l0eSA9IGRlc2lyZWRTaXplOworICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiB9IC8vIG5hbWVz
cGFjZSBXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCShy
ZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDMyICs1NSwyNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9yeTsgfQogCiAgICAgdm9pZCogbWVtb3J5
KCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnk7IH0KLSAgICB1aW50MzJfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisgICAgdWludDY0X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorICAgIFBhZ2VDb3VudCBzaXplSW5QYWdlcygpIGNvbnN0IHsgcmV0dXJuIFBhZ2VD
b3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSk7IH0KIAogICAgIE1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQogCiAgICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBt
X2luaXRpYWw7IH0KICAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
aW11bTsgfQogCi0gICAgYm9vbCBncm93KHVpbnQzMl90IG5ld1NpemUpCi0gICAgewotICAgICAg
ICBBU1NFUlQobV9tZW1vcnkpOwotICAgICAgICBpZiAobmV3U2l6ZSA+IG1fY2FwYWNpdHkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuICFtcHJvdGVjdChtX21l
bW9yeSwgbmV3U2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0gICAgfQorICAgIGJvb2wg
Z3JvdyhQYWdlQ291bnQpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX3NpemUpOyB9Ci0KICAgICAKIHByaXZh
dGU6CiAgICAgdm9pZCogbV9tZW1vcnkgeyBudWxscHRyIH07CiAgICAgTW9kZSBtX21vZGU7Ci0g
ICAgdWludDMyX3QgbV9zaXplIHsgMCB9OwotICAgIHVpbnQzMl90IG1fY2FwYWNpdHkgeyAwIH07
CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbDsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtOworICAg
IHVpbnQ2NF90IG1fc2l6ZSB7IDAgfTsKICAgICB1aW50NjRfdCBtX21hcHBlZENhcGFjaXR5IHsg
MCB9OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3Vu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291
bnQuaAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBhZ2VDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMyArNDIsMjIgQEAgcHVibGljOgog
ICAgICAgICA6IG1fcGFnZUNvdW50KHBhZ2VDb3VudCkKICAgICB7IH0KIAotICAgIHNpemVfdCBi
eXRlcygpIHsgcmV0dXJuIG1fcGFnZUNvdW50ICogcGFnZVNpemU7IH0KKyAgICB1aW50NjRfdCBi
eXRlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3BhZ2VDb3VudCkg
KiBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocGFnZVNpemUpOyB9CisgICAgdWludDMyX3QgcGFnZUNv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlQ291bnQ7IH0KIAogICAgIHN0YXRpYyBib29sIGlz
VmFsaWQodWludDMyX3QgcGFnZUNvdW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIHBhZ2VDb3Vu
dCA8PSBtYXhQYWdlQ291bnQ7CiAgICAgfQogCisgICAgc3RhdGljIFBhZ2VDb3VudCBmcm9tQnl0
ZXModWludDY0X3QgYnl0ZXMpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChieXRlcyAl
IHBhZ2VTaXplID09IDApOworICAgICAgICB1aW50MzJfdCBudW1QYWdlcyA9IGJ5dGVzIC8gcGFn
ZVNpemU7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFBhZ2VDb3VudDo6aXNWYWxpZChudW1QYWdl
cykpOworICAgICAgICByZXR1cm4gUGFnZUNvdW50KG51bVBhZ2VzKTsKKyAgICB9CisKICAgICBz
dGF0aWMgUGFnZUNvdW50IG1heCgpCiAgICAgewogICAgICAgICByZXR1cm4gUGFnZUNvdW50KG1h
eFBhZ2VDb3VudCk7CkBAIC02Miw2ICs3MSwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRv
cjwoY29uc3QgUGFnZUNvdW50JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wYWdlQ291bnQgPCBv
dGhlci5tX3BhZ2VDb3VudDsgfQogICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFBhZ2VDb3VudCYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50ID4gb3RoZXIubV9wYWdlQ291bnQ7IH0K
ICAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgUGFnZUNvdW50JiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9wYWdlQ291bnQgPj0gb3RoZXIubV9wYWdlQ291bnQ7IH0KKyAgICBQYWdlQ291bnQgb3Bl
cmF0b3IrKGNvbnN0IFBhZ2VDb3VudCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoc3VtT3Zl
cmZsb3dzPHVpbnQzMl90PihtX3BhZ2VDb3VudCwgb3RoZXIubV9wYWdlQ291bnQpKQorICAgICAg
ICAgICAgcmV0dXJuIFBhZ2VDb3VudCgpOworICAgICAgICB1aW50MzJfdCBuZXdDb3VudCA9IG1f
cGFnZUNvdW50ICsgb3RoZXIubV9wYWdlQ291bnQ7CisgICAgICAgIGlmICghUGFnZUNvdW50Ojpp
c1ZhbGlkKG5ld0NvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBQYWdlQ291bnQoKTsKKyAgICAg
ICAgcmV0dXJuIFBhZ2VDb3VudChuZXdDb3VudCk7CisgICAgfQogCiBwcml2YXRlOgogICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDMyX3QgcGFnZVNpemUgPSA2NCAqIEtCOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMTAxMjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAgcHVibGljOgogICAgIFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9y
PENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25z
dCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKICAgICBSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNz
aW9uU3RhY2spOwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNo
YWJsZShDb250cm9sRW50cnkmKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEdy
b3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwog
CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpIHsgcmV0dXJu
IHsgfTsgfQogCkBAIC0yOTIsNiArMjkzLDEzIEBAIGF1dG8gVmFsaWRhdGU6OmFkZFN3aXRjaChF
eHByZXNzaW9uVHlwZSAKICAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQoZGVmYXVsdFRhcmdl
dCwgZXhwcmVzc2lvblN0YWNrKTsKIH0KIAorYXV0byBWYWxpZGF0ZTo6YWRkR3Jvd01lbW9yeShF
eHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0Cit7
CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihkZWx0YSAhPSBJMzIsICJncm93X21lbW9yeSB3
aXRoIG5vbi1pMzIgZGVsdGEiKTsKKyAgICByZXN1bHQgPSBJMzI7CisgICAgcmV0dXJuIHsgfTsK
K30KKwogYXV0byBWYWxpZGF0ZTo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgRXhwcmVz
c2lvbkxpc3QmIHN0YWNrKSAtPiBSZXN1bHQKIHsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZB
SUxTKHVuaWZ5KHN0YWNrLCBlbnRyeS5jb250cm9sRGF0YSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHJl
dmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNZW1vcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVk
ZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC01NSw2ICs1NSwxNSBAQCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFz
c2VtYmx5TWVtb3J5CiB7CiB9CiAKK0pTV2ViQXNzZW1ibHlNZW1vcnk6On5KU1dlYkFzc2VtYmx5
TWVtb3J5KCkKK3sKKyAgICBpZiAobV9idWZmZXIpIHsKKyAgICAgICAgQXJyYXlCdWZmZXJDb250
ZW50cyBkdW1teUNvbnRlbnRzOworICAgICAgICBtX2J1ZmZlci0+dHJhbnNmZXJUbyhkdW1teUNv
bnRlbnRzKTsKKyAgICAgICAgbV9idWZmZXIgPSBudWxscHRyOworICAgIH0KK30KKwogSlNBcnJh
eUJ1ZmZlciogSlNXZWJBc3NlbWJseU1lbW9yeTo6YnVmZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBpZiAobV9idWZmZXJXcmFwcGVyKQpAQCAtNzEsNiAr
ODAsNDggQEAgSlNBcnJheUJ1ZmZlciogSlNXZWJBc3NlbWJseU1lbW9yeTo6YnVmZgogICAgIHJl
dHVybiBtX2J1ZmZlcldyYXBwZXIuZ2V0KCk7CiB9CiAKK1dhc206OlBhZ2VDb3VudCBKU1dlYkFz
c2VtYmx5TWVtb3J5Ojpncm93KEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgZGVsdGEsIGJvb2wg
c2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbV9tZW1vcnktPnNpemVJblBhZ2VzKCk7
CisKKyAgICBpZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChkZWx0YSkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKKyAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyBleHBlY3RzIHRoZSBkZWx0YSB0byBiZSBhIHZh
bGlkIHBhZ2UgY291bnQiKSkpOworICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7Cisg
ICAgfQorCisgICAgV2FzbTo6UGFnZUNvdW50IG5ld1NpemUgPSBvbGRQYWdlQ291bnQgKyBXYXNt
OjpQYWdlQ291bnQoZGVsdGEpOworICAgIGlmICghbmV3U2l6ZSkgeworICAgICAgICBpZiAoc2hv
dWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldl
YkFzc2VtYmx5Lk1lbW9yeS5ncm93IGV4cGVjdHMgdGhlIGdyb3duIHNpemUgdG8gYmUgYSB2YWxp
ZCBwYWdlIGNvdW50IikpKTsKKyAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOworICAg
IH0KKworICAgIGlmIChkZWx0YSkgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX21lbW9yeS0+
Z3JvdyhuZXdTaXplKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAo
c2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQorICAgICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwor
ICAgICAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gV2UgbmVlZCB0byBjbGVhciBvdXQgdGhlIG9sZCBhcnJheSBidWZmZXIgYmVjYXVz
ZSBpdCBtaWdodCBub3cgYmUgcG9pbnRpbmcKKyAgICAvLyB0byBzdGFsZSBtZW1vcnkuCisgICAg
Ly8gTmV1dGVyIHRoZSBvbGQgYXJyYXkuCisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgZHVtbXlDb250ZW50czsKKyAgICAgICAgbV9idWZmZXItPnRyYW5z
ZmVyVG8oZHVtbXlDb250ZW50cyk7CisgICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKKyAgICAg
ICAgbV9idWZmZXJXcmFwcGVyLmNsZWFyKCk7CisgICAgfQorCisgICAgcmV0dXJuIG9sZFBhZ2VD
b3VudDsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNp
b24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw5ICs0OCwxMSBAQCBwdWJsaWM6CiAKICAg
ICBXYXNtOjpNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CiAgICAg
SlNBcnJheUJ1ZmZlciogYnVmZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICBXYXNt
OjpQYWdlQ291bnQgZ3JvdyhFeGVjU3RhdGUqLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRU
aHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNXZWJBc3NlbWJs
eU1lbW9yeShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+JiYp
OworICAgIH5KU1dlYkFzc2VtYmx5TWVtb3J5KCk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCisjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUhlbHBlcnMuaCIKIAogI2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90
eXBlLmx1dC5oIgogCkBAIC00NCwyMSArNDUsNTEgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG90eQogIEBlbmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVjU3RhdGUqKTsK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNC
dWZmZXIoRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqKTsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVjU3RhdGUqIGV4
ZWMpCitBTFdBWVNfSU5MSU5FIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGdldE1lbW9yeShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTV2Vi
QXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9y
eSo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsgCisgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5
ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odmFsdWUpOyAKICAgICBpZiAo
IW1lbW9yeSkgewotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIAotICAgICAgICAgICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkucHJvdG90eXBlLmJ1ZmZlciBn
ZXR0ZXIgY2FsbGVkIHdpdGggbm9uIFdlYkFzc2VtYmx5Lk1lbW9yeSB8dGhpc3wgdmFsdWUiKSkp
KTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgCisgICAgICAgICAg
ICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnku
cHJvdG90eXBlLmJ1ZmZlciBnZXR0ZXIgY2FsbGVkIHdpdGggbm9uIFdlYkFzc2VtYmx5Lk1lbW9y
eSB8dGhpc3wgdmFsdWUiKSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CisgICAg
cmV0dXJuIG1lbW9yeTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3Nl
bWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGdldE1lbW9yeShleGVj
LCBleGVjLT50aGlzVmFsdWUoKSk7IAorICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1lbW9yeS0+YnVmZmVyKGV4ZWMt
PnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOwogfQogCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1l
bW9yeSA9IGdldE1lbW9yeShleGVjLCBleGVjLT50aGlzVmFsdWUoKSk7IAorICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAKKyAgICB1aW50MzJfdCBkZWx0YSA9
IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAgIGJvb2wgc2hvdWxkVGhyb3dF
eGNlcHRpb25zT25GYWlsdXJlID0gdHJ1ZTsKKyAgICBXYXNtOjpQYWdlQ291bnQgcmVzdWx0ID0g
bWVtb3J5LT5ncm93KGV4ZWMsIGRlbHRhLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocmVzdWx0LnBhZ2VDb3VudCgpKSk7Cit9CisKIFdl
YkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6Y3Jl
YXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7CiAgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU+KHZtLmhlYXApKSBXZWJBc3NlbWJseU1lbW9yeVBy
b3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKQEAgLTc1LDYgKzEwNiw3IEBAIHZvaWQgV2ViQXNzZW1i
bHlNZW1vcnlQcm90b3R5cGU6OmZpbmlzaEMKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgSlNDX05BVElWRV9HRVRURVIoImJ1ZmZlciIsIHdlYkFzc2VtYmx5TWVtb3J5UHJv
dG9GdW5jQnVmZmVyLCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTigiZ3JvdyIsIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5j
R3JvdywgRG9udEVudW0sIDEpOwogfQogCiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6V2Vi
QXNzZW1ibHlNZW1vcnlQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk2LDggKzE5Niw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxpbmso
RXhlY1MKICAgICBtX21vZHVsZUVudmlyb25tZW50LnNldCh2bSwgdGhpcywgbW9kdWxlRW52aXJv
bm1lbnQpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU2NvcGUsIHR5cGVuYW1lIE4sIHR5cGVu
YW1lIC4uLkFyZ3M+Ci1ORVZFUl9JTkxJTkUgc3RhdGljIEpTVmFsdWUgZGF0YVNlZ21lbnRGYWls
KEV4ZWNTdGF0ZSogc3RhdGUsIFZNJiB2bSwgU2NvcGUmIHNjb3BlLCBOIG1lbW9yeVNpemUsIE4g
c2VnbWVudFNpemUsIE4gb2Zmc2V0LCBBcmdzLi4uIGFyZ3MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
U2NvcGUsIHR5cGVuYW1lIE0sIHR5cGVuYW1lIE4sIHR5cGVuYW1lIC4uLkFyZ3M+CitORVZFUl9J
TkxJTkUgc3RhdGljIEpTVmFsdWUgZGF0YVNlZ21lbnRGYWlsKEV4ZWNTdGF0ZSogc3RhdGUsIFZN
JiB2bSwgU2NvcGUmIHNjb3BlLCBNIG1lbW9yeVNpemUsIE4gc2VnbWVudFNpemUsIE4gb2Zmc2V0
LCBBcmdzLi4uIGFyZ3MpCiB7CiAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29w
ZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihzdGF0ZSwgdm0sIG1ha2VTdHJpbmcoQVND
SUlMaXRlcmFsKCJJbnZhbGlkIGRhdGEgc2VnbWVudCBpbml0aWFsaXphdGlvbjogc2VnbWVudCBv
ZiAiKSwgU3RyaW5nOjpudW1iZXIoc2VnbWVudFNpemUpLCBBU0NJSUxpdGVyYWwoIiBieXRlcyBt
ZW1vcnkgb2YgIiksIFN0cmluZzo6bnVtYmVyKG1lbW9yeVNpemUpLCBBU0NJSUxpdGVyYWwoIiBi
eXRlcywgYXQgb2Zmc2V0ICIpLCBTdHJpbmc6Om51bWJlcihvZmZzZXQpLCBhcmdzLi4uKSkpOwog
fQpAQCAtMjYwLDcgKzI2MCw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2
YWx1YXQKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGpzTWVtb3J5KTsgLy8gSXQgaXMgYSB2
YWxpZGF0aW9uIGVycm9yIGZvciBhIERhdGEgc2VjdGlvbiB0byBleGlzdCB3aXRob3V0IGEgTWVt
b3J5IHNlY3Rpb24gb3IgaW1wb3J0LgogICAgICAgICAgICAgdWludDhfdCogbWVtb3J5ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oanNNZW1vcnktPm1lbW9yeSgpLT5tZW1vcnkoKSk7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkpOwotICAgICAgICAgICAgYXV0byBzaXpl
SW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1vcnkoKS0+c2l6ZSgpOworICAgICAgICAgICAgdWludDY0
X3Qgc2l6ZUluQnl0ZXMgPSBqc01lbW9yeS0+bWVtb3J5KCktPnNpemUoKTsKICAgICAgICAgICAg
IGZvciAoYXV0byYgc2VnbWVudCA6IGRhdGEpIHsKICAgICAgICAgICAgICAgICBpZiAoc2VnbWVu
dC0+c2l6ZUluQnl0ZXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNpemVJ
bkJ5dGVzIDwgc2VnbWVudC0+c2l6ZUluQnl0ZXMpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297743</attachid>
            <date>2016-12-24 11:10:03 -0800</date>
            <delta_ts>2016-12-24 12:08:02 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>42520</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rl
c3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzUgQEAKK2ltcG9ydCB7IGVxIGFzIGFzc2VydEVxIH0gZnJvbSAiLi4vYXNzZXJ0LmpzIjsKK2Nv
bnN0IHBhZ2VTaXplID0gNjQqMTAyNDsKKworbGV0IGJ1ZmZlcnMgPSBbXTsKK2ZvciAobGV0IGkg
PSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBjb25zdCBtYXggPSA1OworICAgIGxldCBwYWdlQ291
bnQgPSAxOworICAgIGxldCB4ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMSwg
bWF4aW11bTogbWF4fSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAobWF4IC0gMSk7IGkrKykg
eworICAgICAgICBsZXQgaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoeC5idWZmZXIpOworCisg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZVNpemU7IGkrKykgeworICAgICAgICAgICAg
YXNzZXJ0RXEoaW50OEFycmF5W3BhZ2VTaXplKihwYWdlQ291bnQgLSAxKSArIGldLCAwKTsKKyAg
ICAgICAgICAgIGludDhBcnJheVtwYWdlU2l6ZSoocGFnZUNvdW50IC0gMSkgKyBpXSA9IHBhZ2VD
b3VudDsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZUNvdW50
OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFnZVNpemU7IGorKykg
eworICAgICAgICAgICAgICAgIGFzc2VydEVxKGludDhBcnJheVtpICogcGFnZVNpemUgKyBqXSwg
aSArIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbGV0IGJ1ZmZlciA9
IHguYnVmZmVyOworICAgICAgICBhc3NlcnRFcShidWZmZXIuYnl0ZUxlbmd0aCwgcGFnZUNvdW50
ICogcGFnZVNpemUpOworICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTsKKyAgICAgICAgbGV0
IHByZXZpb3VzUGFnZVNpemUgPSB4Lmdyb3coMSk7CisgICAgICAgIGFzc2VydEVxKGJ1ZmZlci5i
eXRlTGVuZ3RoLCAwKTsKKyAgICAgICAgYXNzZXJ0RXEocHJldmlvdXNQYWdlU2l6ZSwgcGFnZUNv
dW50KTsKKyAgICAgICAgKytwYWdlQ291bnQ7CisgICAgfQorfQorCitmb3IgKGxldCBidWZmZXIg
b2YgYnVmZmVycykgeworICAgIGFzc2VydEVxKGJ1ZmZlci5ieXRlTGVuZ3RoLCAwKTsKK30KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYzOSw4ICsyNjM5LDkgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLnRha2VN
b2R1bGVJbmZvcm1hdGlvbigpOwogCiAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9y
eSkgewotICAgICAgICBtZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc206Ok1lbW9yeT4obW9k
dWxlSW5mb3JtYXRpb24tPm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLT5tZW1v
cnkubWF4aW11bSgpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobWVtb3J5LT5pc1ZhbGlkKCkp
OworICAgICAgICBib29sIGZhaWxlZDsKKyAgICAgICAgbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1
ZTxXYXNtOjpNZW1vcnk+KG1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1
bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1heGltdW0oKSwgZmFpbGVkKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWZhaWxlZCk7CiAgICAgICAgIG1lbW9yeUJ5dGVzID0gbWVtb3J5LT5tZW1vcnko
KTsKICAgICAgICAgbWVtb3J5U2l6ZSA9IG1lbW9yeS0+c2l6ZSgpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDcgKzMwMiw3
IEBAIHB1YmxpYzoKICAgICBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZTsKICAgICBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIHRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKICAgICB2b2lkKiB0b3BXYXNt
TWVtb3J5UG9pbnRlcjsKLSAgICB1aW50MzJfdCB0b3BXYXNtTWVtb3J5U2l6ZTsKKyAgICB1aW50
NjRfdCB0b3BXYXNtTWVtb3J5U2l6ZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVT
dHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1
cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0
dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNiArMTcyLDgg
QEAgcHVibGljOgogICAgIC8vIE1lbW9yeQogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIC8v
IEJhc2ljIG9wZXJhdG9ycwogICAgIHRlbXBsYXRlPE9wVHlwZT4KQEAgLTMzMiw2ICszMzQsODEg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+IAogICAgIHJldHVybiB7
IH07CiB9CiAKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlw
ZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IGludDMyX3QgKCpncm93TWVtb3J5KSAoRXhlY1N0YXRlKiwgaW50MzJfdCkgPSBbXSAoRXhlY1N0
YXRlKiBleGVjLCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsgCisgICAgICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gdm0udG9wSlNX
ZWJBc3NlbWJseUluc3RhbmNlOworICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiB3YXNtTWVt
b3J5ID0gaW5zdGFuY2UtPm1lbW9yeSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh3YXNtTWVt
b3J5KTsgLy8gVGhpcyB3b3VsZCBmYWlsIHZhbGlkYXRpb24gb3RoZXJ3aXNlLgorCisgICAgICAg
IGlmIChkZWx0YSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgYm9vbCBz
aG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSBmYWxzZTsKKyAgICAgICAgUGFnZUNvdW50
IHJlc3VsdCA9IHdhc21NZW1vcnktPmdyb3coZXhlYywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRl
bHRhKSwgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKKyAgICAgICAgQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0
dXJuIC0xOworCisgICAgICAgIHZtLnRvcFdhc21NZW1vcnlQb2ludGVyID0gd2FzbU1lbW9yeS0+
bWVtb3J5KCktPm1lbW9yeSgpOworICAgICAgICB2bS50b3BXYXNtTWVtb3J5U2l6ZSA9IHdhc21N
ZW1vcnktPm1lbW9yeSgpLT5zaXplKCk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5wYWdlQ291
bnQoKTsKKyAgICB9OworCisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
Q2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KGdyb3dNZW1vcnkpKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkZyYW1lUG9pbnRlciwgT3JpZ2luKCkpLCBkZWx0YSk7
CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX2luZm8uaGFzTWVtb3J5KCkpOworICAgIGNvbnN0IE1l
bW9yeUluZm9ybWF0aW9uKiBtZW1vcnkgPSAmbV9pbmZvLm1lbW9yeTsKKworICAgIFZlY3RvcjxW
YWx1ZSo+IGFyZ3VtZW50czsKKworICAgIFZhbHVlKiBiYXNlTWVtb3J5ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCks
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9j
LCBPcmlnaW4oKSwgJm1fdm0udG9wV2FzbU1lbW9yeVBvaW50ZXIpKTsKKyAgICBhcmd1bWVudHMu
YXBwZW5kKGJhc2VNZW1vcnkpOworCisgICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9y
aWdpbigpLCAmbV92bS50b3BXYXNtTWVtb3J5U2l6ZSkpOworICAgIGZvciAoYXV0byBpbmZvIDog
bWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKSB7CisgICAgICAgIFZhbHVl
KiBzaXplVmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFN1
YiwgT3JpZ2luKCksIHNpemUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
PihtX3Byb2MsIE9yaWdpbigpLCBpbmZvLnNpemVPZmZzZXQpKTsKKyAgICAgICAgYXJndW1lbnRz
LmFwcGVuZChzaXplVmFsdWUpOworICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+
KG1fcHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0g
dHJ1ZTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmRWZWN0b3JXaXRoUmVwKGFyZ3VtZW50cywgVmFs
dWVSZXA6OlNvbWVSZWdpc3Rlcik7CisKKyAgICAvLyBGSVhNRTogd291bGQgaXQgd29yayBqdXN0
IHRvIG1ha2UgdGhlc2UgdGhpbmdzIENvbnN0cmFpbmVkVmFsdWVzPworICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbbWVtb3J5XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIAorICAgICAgICBqaXQu
bW92ZShwYXJhbXNbMF0uZ3ByKCksIG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9y
eVBvaW50ZXIpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbWVtb3J5LT5waW5u
ZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgaml0
Lm1vdmUocGFyYW1zWzEgKyBpXS5ncHIoKSwgbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXpl
UmVnaXN0ZXJzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgfSk7CisKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFZhbHVlKiBzaXplID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2lu
KCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9w
cm9jLCBPcmlnaW4oKSwgJm1fdm0udG9wV2FzbU1lbW9yeVNpemUpKTsKKworICAgIFZhbHVlKiBu
dW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVURpdiwg
T3JpZ2luKCksCisgICAgICAgICAgICBzaXplLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgUGFnZUNvdW50OjpwYWdlU2l6ZSkpOworCisg
ICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVu
YywgT3JpZ2luKCksIG51bVBhZ2VzKTsKKworICAgIHJldHVybiB7IH07Cit9CisKIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVl
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7CkBAIC05
MDIsMTIgKzk3OSwxMiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0mIHZt
CiAgICAgaWYgKCEhbWVtb3J5KSB7CiAgICAgICAgIGJhc2VNZW1vcnkgPSBibG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksCiAgICAgICAgICAg
ICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmdm0udG9w
V2FzbU1lbW9yeVBvaW50ZXIpKTsKLSAgICAgICAgVmFsdWUqIHNpemUgPSBibG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgIFZh
bHVlKiBzaXplID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50
NjQsIE9yaWdpbigpLAogICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgJnZtLnRvcFdhc21NZW1vcnlTaXplKSk7CiAgICAgICAgIHNpemVz
LnJlc2VydmVDYXBhY2l0eShtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycy5z
aXplKCkpOwogICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMo
KS5zaXplUmVnaXN0ZXJzKSB7CiAgICAgICAgICAgICBzaXplcy5hcHBlbmQoYmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBvcmlnaW4sIHNpemUsCi0gICAgICAgICAgICAgICAgYmxv
Y2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIG9yaWdpbiwgaW5mby5zaXplT2Zmc2V0
KSkpOworICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9j
LCBvcmlnaW4sIGluZm8uc2l6ZU9mZnNldCkpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAJKHJldmlzaW9uIDIxMDEy
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKLVNlZ21lbnQqIFNlZ21lbnQ6OmNyZWF0ZSh1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90
IHNpemVJbkJ5dGVzKQorU2VnbWVudCogU2VnbWVudDo6Y3JlYXRlKEkzMkluaXRFeHByIG9mZnNl
dCwgdWludDMyX3Qgc2l6ZUluQnl0ZXMpCiB7CiAgICAgYXV0byBhbGxvY2F0ZWQgPSB0cnlGYXN0
Q2FsbG9jKHNpemVvZihTZWdtZW50KSArIHNpemVJbkJ5dGVzLCAxKTsKICAgICBTZWdtZW50KiBz
ZWdtZW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2
aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsMTYgKzEzOCw1MSBAQCBzdHJ1Y3QgRnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5IHsKICAgICBzaXplX3QgZW5kOwogfTsKIAorY2xhc3MgSTMySW5pdEV4cHIg
eworICAgIGVudW0gVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWwsCisgICAgICAgIENv
bnN0CisgICAgfTsKKworICAgIEkzMkluaXRFeHByKFR5cGUgdHlwZSwgdWludDMyX3QgYml0cykK
KyAgICAgICAgOiBtX2JpdHMoYml0cykKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICB7IH0K
KworcHVibGljOgorICAgIEkzMkluaXRFeHByKCkgPSBkZWxldGU7CisKKyAgICBzdGF0aWMgSTMy
SW5pdEV4cHIgZm9yR2xvYmFsSW1wb3J0KHVpbnQzMl90IGdsb2JhbEltcG9ydE51bWJlcikgeyBy
ZXR1cm4gSTMySW5pdEV4cHIoR2xvYmFsLCBnbG9iYWxJbXBvcnROdW1iZXIpOyB9CisgICAgc3Rh
dGljIEkzMkluaXRFeHByIGZvckNvbnN0VmFsdWUodWludDMyX3QgY29uc3RWYWx1ZSkgeyByZXR1
cm4gSTMySW5pdEV4cHIoQ29uc3QsIGNvbnN0VmFsdWUpOyB9CisKKyAgICBib29sIGlzQ29uc3Qo
KSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gQ29uc3Q7IH0KKyAgICBib29sIGlzR2xvYmFsSW1w
b3J0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IEdsb2JhbDsgfQorICAgIHVpbnQzMl90IGNv
bnN0VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNDb25zdCgp
KTsKKyAgICAgICAgcmV0dXJuIG1fYml0czsKKyAgICB9CisgICAgdWludDMyX3QgZ2xvYmFsSW1w
b3J0SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNHbG9iYWxJ
bXBvcnQoKSk7CisgICAgICAgIHJldHVybiBtX2JpdHM7CisgICAgfQorCitwcml2YXRlOgorICAg
IHVpbnQzMl90IG1fYml0czsKKyAgICBUeXBlIG1fdHlwZTsKK307CisKIHN0cnVjdCBTZWdtZW50
IHsKLSAgICB1aW50MzJfdCBvZmZzZXQ7CiAgICAgdWludDMyX3Qgc2l6ZUluQnl0ZXM7CisgICAg
STMySW5pdEV4cHIgb2Zmc2V0OwogICAgIC8vIEJ5dGVzIGFyZSBhbGxvY2F0ZWQgYXQgdGhlIGVu
ZC4KICAgICB1aW50OF90JiBieXRlKHVpbnQzMl90IHBvcykKICAgICB7CiAgICAgICAgIEFTU0VS
VChwb3MgPCBzaXplSW5CeXRlcyk7Ci0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBzaXplb2Yob2Zmc2V0KSAr
IHNpemVvZihzaXplSW5CeXRlcykgKyBwb3MpOworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc2l6ZW9mKFNl
Z21lbnQpICsgcG9zKTsKICAgICB9Ci0gICAgc3RhdGljIFNlZ21lbnQqIGNyZWF0ZSh1aW50MzJf
dCwgdWludDMyX3QpOworICAgIHN0YXRpYyBTZWdtZW50KiBjcmVhdGUoSTMySW5pdEV4cHIsIHVp
bnQzMl90KTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KFNlZ21lbnQqKTsKICAgICB0eXBlZGVm
IHN0ZDo6dW5pcXVlX3B0cjxTZWdtZW50LCBkZWNsdHlwZSgmU2VnbWVudDo6ZGVzdHJveSk+IFB0
cjsKICAgICBzdGF0aWMgUHRyIGFkb3B0UHRyKFNlZ21lbnQqKTsKQEAgLTE5MSw3ICsyMjYsMTAg
QEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRz
OwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXM7CisKKyAgICBib29sIGhhc01lbW9yeSgpIGNvbnN0IHsgcmV0dXJuICEhbWVtb3J5
OyB9CiAgICAgTWVtb3J5SW5mb3JtYXRpb24gbWVtb3J5OworCiAgICAgVmVjdG9yPEV4cG9ydD4g
ZXhwb3J0czsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBzdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZTsKICAgICBWZWN0b3I8U2VnbWVudDo6UHRyPiBkYXRhOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJKHJldmlzaW9uIDIxMDEy
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NzgsMTIgKzQ3OCwzNiBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgY2Fz
ZSBHcm93TWVtb3J5OgotICAgICAgICByZXR1cm4gZmFpbCgibm90IHlldCBpbXBsZW1lbnRlZDog
Z3Jvd19tZW1vcnkiKTsgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgICAgY2FzZSBH
cm93TWVtb3J5OiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby5tZW1vcnks
ICJncm93X21lbW9yeSBpcyBvbmx5IHZhbGlkIGlmIGEgbWVtb3J5IGlzIGRlZmluZWQgb3IgaW1w
b3J0ZWQiKTsKKworICAgICAgICB1aW50OF90IHJlc2VydmVkOworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJlc2VydmVkKSwgIkNhbid0IHBhcnNlIHJlc2VydmVk
IHZhclVpbnQxIGZvciBncm93X21lbW9yeSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHJlc2VydmVkICE9IDAsICJyZXNlcnZlZCB2YXJVaW50MSBmb3IgZ3Jvd19tZW1vcnkgbXVzdCBi
ZSB6ZXJvIik7CisKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgZGVsdGE7CisgICAgICAgIFdBU01f
VFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oZGVsdGEsICJFeHBlY3QgYW4gaTMyIGFyZ3Vt
ZW50IHRvIGdyb3dfbWVtb3J5IG9uIHRoZSBzdGFjayIpOworCisgICAgICAgIEV4cHJlc3Npb25U
eXBlIHJlc3VsdDsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkR3Jvd01lbW9y
eShkZWx0YSwgcmVzdWx0KSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1
bHQpOworCisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgY2FzZSBDdXJyZW50TWVt
b3J5OiB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby5tZW1vcnksICJjdXJy
ZW50X21lbW9yeSBpcyBvbmx5IHZhbGlkIGlmIGEgbWVtb3J5IGlzIGRlZmluZWQgb3IgaW1wb3J0
ZWQiKTsKIAotICAgIGNhc2UgQ3VycmVudE1lbW9yeToKLSAgICAgICAgcmV0dXJuIGZhaWwoIm5v
dCB5ZXQgaW1wbGVtZW50ZWQ6IGN1cnJlbnRfbWVtb3J5Iik7IC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkLgorICAgICAgICB1aW50OF90IHJlc2VydmVkOworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJlc2VydmVkKSwgIkNhbid0IHBhcnNlIHJlc2VydmVk
IHZhclVpbnQxIGZvciBncm93X21lbW9yeSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHJlc2VydmVkICE9IDAsICJyZXNlcnZlZCB2YXJVaW50MSBmb3IgY3VycmVudF9tZW1vcnkgbXVz
dCBiZSB6ZXJvIik7CisKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OworICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDdXJyZW50TWVtb3J5KHJlc3VsdCkpOworICAgICAg
ICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKIAorICAgICAgICByZXR1cm4geyB9
OworICAgIH0KICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU4NCw2ICs2
MDgsMTMgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYQogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAorICAgIGNhc2UgR3Jvd01lbW9yeToKKyAgICBjYXNlIEN1
cnJlbnRNZW1vcnk6IHsKKyAgICAgICAgdWludDhfdCByZXNlcnZlZDsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShyZXNlcnZlZCksICJDYW4ndCBwYXJzZSByZXNl
cnZlZCB2YXJVaW50MSBmb3IgZ3Jvd19tZW1vcnkvY3VycmVudF9tZW1vcnkiKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKICAgICAvLyBubyBpbW1lZGlhdGUgY2FzZXMKICAgICBGT1Jf
RUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkKICAgICBGT1JfRUFDSF9XQVNNX1VOQVJZ
X09QKENSRUFURV9DQVNFKQpAQCAtNTkxLDkgKzYyMiw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlVW5yZWEKICAgICBjYXNlIE5vcDoKICAgICBjYXNlIFJldHVybjoKICAg
ICBjYXNlIFNlbGVjdDoKLSAgICBjYXNlIERyb3A6Ci0gICAgY2FzZSBHcm93TWVtb3J5OgotICAg
IGNhc2UgQ3VycmVudE1lbW9yeTogeworICAgIGNhc2UgRHJvcDogewogICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5LmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDM3ICszMCw4OSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1NZW1vcnk6Ok1lbW9yeShQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCitzdGF0aWNfYXNzZXJ0KHNpemVvZih1aW50
NjRfdCkgPT0gc2l6ZW9mKHNpemVfdCksICJXZSByZWx5IG9uIGFsbG93aW5nIHRoZSBtYXhpbXVt
IHNpemUgb2YgTWVtb3J5IHdlIG1hcCB0byBiZSAyXjMyIHdoaWNoIGlzIGxhcmdlciB0aGFuIGZp
dHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2QgcGFzcyB0byBtcHJvdGVjdCBpZiB0aGlz
IGRpZG4ndCBob2xkLiIpOworCitNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdW0sIGJvb2wmIGZhaWxlZCkKICAgICA6IG1fbW9kZShNb2RlOjpCb3VuZHND
aGVja2luZykKLSAgICAsIG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkpCi0gICAgLCBtX2NhcGFjaXR5
KG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdlQ291bnQ6Om1heCgpLmJ5dGVzKCkpCiAg
ICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQorICAgICwg
bV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKICAgICAvLyBGSVhNRTogSWYgd2UgYWRkIHNpZ25hbCBi
YXNlZCBib3VuZHMgY2hlY2tpbmcgdGhlbiB3ZSBuZWVkIGV4dHJhIHNwYWNlIGZvciBvdmVyZmxv
dyBvbiBsb2FkLgogICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MjY5MwogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0g
Pj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4K
IAotICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtX2NhcGFjaXR5OworICAgIGZhaWxlZCA9IGZhbHNl
OworCisgICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQ
YWdlQ291bnQ6Om1heCgpLmJ5dGVzKCk7CisgICAgaWYgKCFtX21hcHBlZENhcGFjaXR5KSB7Cisg
ICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugc3BlY2lmaWVkIGEgemVybyBhcyBtYXhpbXVtICh3aGlj
aCBtZWFucyB3ZSBhbHNvIGhhdmUgemVybyBhcyBpbml0aWFsIHNpemUpLgorICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX3NpemUgPT0gMCk7CisgICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSAwOwor
ICAgICAgICBtX21lbW9yeSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20g
bWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0g
ICAgdm9pZCogcmVzdWx0ID0gbW1hcChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9UX05P
TkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAgICBpZiAocmVzdWx0ID09IE1B
UF9GQUlMRUQpIHsKKyAgICAvL3ZvaWQqIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRD
YXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7CisgICAg
dm9pZCogcmVzdWx0OworICAgIGlmICgvKnJlc3VsdCA9PSBNQVBfRkFJTEVEKi8gdHJ1ZSkgewog
ICAgICAgICAvLyBUcnkgYWdhaW4gd2l0aCBhIGRpZmZlcmVudCBudW1iZXIuCiAgICAgICAgIG1f
bWFwcGVkQ2FwYWNpdHkgPSBtX3NpemU7CisgICAgICAgIGlmICghbV9tYXBwZWRDYXBhY2l0eSkg
eworICAgICAgICAgICAgbV9tZW1vcnkgPSBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKICAgICAgICAgcmVzdWx0ID0gbW1hcChudWxscHRyLCBtX21hcHBlZENhcGFj
aXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAgICAgICAg
aWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKQorICAgICAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlM
RUQpIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KICAgICB9CiAKICAgICBBU1NFUlQobV9zaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkp
OwotICAgIGlmIChtcHJvdGVjdChyZXN1bHQsIG1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklU
RSkpIHsKLSAgICAgICAgbXVubWFwKHJlc3VsdCwgbV9tYXBwZWRDYXBhY2l0eSk7Ci0gICAgICAg
IHJldHVybjsKKyAgICB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9ICFtcHJvdGVjdChyZXN1bHQs
IHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOwogICAgIH0KIAogICAgIG1fbWVtb3J5ID0g
cmVzdWx0OwogfQogCitib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX21lbW9yeSk7CisgICAgUkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+
IFBhZ2VDb3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSkpOworCisgICAgaWYgKG1heGltdW0oKSAmJiBu
ZXdTaXplID4gbWF4aW11bSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50NjRf
dCBkZXNpcmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsKKworICAgIGlmIChtX21lbW9yeSAmJiBk
ZXNpcmVkU2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KSB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9
ICFtcHJvdGVjdChzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9tZW1vcnkpICsgbV9zaXplLCBzdGF0
aWNfY2FzdDxzaXplX3Q+KGRlc2lyZWRTaXplIC0gbV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9X
UklURSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOworICAgICAgICBtX3NpemUg
PSBkZXNpcmVkU2l6ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gT3Ro
ZXJ3aXNlLCBsZXQncyB0cnkgdG8gbWFrZSBzb21lIG5ldyBtZW1vcnkuCisgICAgdm9pZCogbmV3
TWVtb3J5ID0gbW1hcChudWxscHRyLCBkZXNpcmVkU2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklU
RSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworICAgIGlmIChuZXdNZW1vcnkgPT0g
TUFQX0ZBSUxFRCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fbWVtb3J5KSB7
CisgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUpOworICAgICAgICBt
dW5tYXAobV9tZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkpOworICAgIH0KKyAgICBtX21lbW9yeSA9
IG5ld01lbW9yeTsKKyAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CisgICAgbV9z
aXplID0gZGVzaXJlZFNpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKIH0gLy8gbmFtZXNwYWNlIFdhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmgJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIEJvdW5kc0NoZWNraW5nCiAgICAgfTsKIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1h
eGltdW0sIGJvb2wmIGZhaWxlZCk7CiAKICAgICB+TWVtb3J5KCkKICAgICB7CkBAIC01MiwzNSAr
NTIsMjUgQEAgcHVibGljOgogICAgICAgICAgICAgbXVubWFwKG1fbWVtb3J5LCBtX21hcHBlZENh
cGFjaXR5KTsKICAgICB9CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhIW1f
bWVtb3J5OyB9Ci0KICAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeTsg
fQotICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICB1aW50
NjRfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgUGFnZUNvdW50IHNpemVJ
blBhZ2VzKCkgY29uc3QgeyByZXR1cm4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKTsgfQog
CiAgICAgTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKICAgICBQYWdlQ291
bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBhZ2VDb3VudCBt
YXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9CiAKLSAgICBib29sIGdyb3codWlu
dDMyX3QgbmV3U2l6ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX21lbW9yeSk7Ci0gICAgICAg
IGlmIChuZXdTaXplID4gbV9jYXBhY2l0eSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICByZXR1cm4gIW1wcm90ZWN0KG1fbWVtb3J5LCBuZXdTaXplLCBQUk9UX1JFQUQgfCBQ
Uk9UX1dSSVRFKTsKLSAgICB9CisgICAgYm9vbCBncm93KFBhZ2VDb3VudCk7CiAKICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1v
cnksIG1fc2l6ZSk7IH0KLQogICAgIAogcHJpdmF0ZToKICAgICB2b2lkKiBtX21lbW9yeSB7IG51
bGxwdHIgfTsKICAgICBNb2RlIG1fbW9kZTsKLSAgICB1aW50MzJfdCBtX3NpemUgeyAwIH07Ci0g
ICAgdWludDMyX3QgbV9jYXBhY2l0eSB7IDAgfTsKICAgICBQYWdlQ291bnQgbV9pbml0aWFsOwog
ICAgIFBhZ2VDb3VudCBtX21heGltdW07CisgICAgdWludDY0X3QgbV9zaXplIHsgMCB9OwogICAg
IHVpbnQ2NF90IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2aXNpb24gMjEw
MTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CiAKK0FMV0FZU19JTkxJTkUgSTMySW5pdEV4cHIgbWFrZUkzMkluaXRFeHBy
KHVpbnQ4X3Qgb3Bjb2RlLCB1aW50MzJfdCBiaXRzKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG9w
Y29kZSA9PSBJMzJDb25zdCB8fCBvcGNvZGUgPT0gR2V0R2xvYmFsKTsKKyAgICBpZiAob3Bjb2Rl
ID09IEkzMkNvbnN0KQorICAgICAgICByZXR1cm4gSTMySW5pdEV4cHI6OmZvckNvbnN0VmFsdWUo
Yml0cyk7CisgICAgcmV0dXJuIEkzMkluaXRFeHByOjpmb3JHbG9iYWxJbXBvcnQoYml0cyk7Cit9
CisKIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogewogICAgIG1fcmVzdWx0
Lm1vZHVsZSA9IHN0ZDo6bWFrZV91bmlxdWU8TW9kdWxlSW5mb3JtYXRpb24+KCk7CkBAIC0yODks
NyArMjk3LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUoKSAtPiBQYXJ0aQogCiBh
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9yZXN1bHQubW9kdWxlLT5t
ZW1vcnksICJNZW1vcnkgc2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1l
bW9yeSIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoISFtX3Jlc3VsdC5tb2R1bGUtPm1lbW9y
eSwgIk1lbW9yeSBzZWN0aW9uIGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgbWVtb3J5
Iik7CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3VudDsKICAgICBQYWdlQ291bnQgbWF4
aW11bVBhZ2VDb3VudDsKQEAgLTMxOSw4ICszMjcsOCBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFy
c2VNZW1vcnlIZWxwZXIoYm9vCiAKIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKLSAgICB1aW50OF90IGNvdW50OwotICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDEoY291bnQpLCAiY2FuJ3QgcGFyc2UgTWVtb3J5IHNlY3Rpb24n
cyBjb3VudCIpOworICAgIHVpbnQzMl90IGNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IHBhcnNlIE1lbW9yeSBzZWN0aW9uJ3MgY291
bnQiKTsKIAogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0zNDIsMzIg
KzM1MCwxMiBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0CiAgICAg
ICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKIAogICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZB
SUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1w
b3J0TnVtYmVyKSk7Ci0KLSAgICAgICAgZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9IEdsb2Jh
bDo6RnJvbUV4cHJlc3Npb247CiAgICAgICAgIFR5cGUgdHlwZUZvckluaXRPcGNvZGU7Ci0gICAg
ICAgIHN3aXRjaCAoaW5pdE9wY29kZSkgewotICAgICAgICBjYXNlIEkzMkNvbnN0OgotICAgICAg
ICAgICAgdHlwZUZvckluaXRPcGNvZGUgPSBJMzI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJNjRDb25zdDoKLSAgICAgICAgICAgIHR5cGVGb3JJbml0T3Bjb2RlID0gSTY0Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRjMyQ29uc3Q6Ci0gICAgICAgICAgICB0
eXBlRm9ySW5pdE9wY29kZSA9IEYzMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEY2NENvbnN0OgotICAgICAgICAgICAgdHlwZUZvckluaXRPcGNvZGUgPSBGNjQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRHbG9iYWw6Ci0gICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyID49IG1fcmVzdWx0
Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgZ2xvYmFsSW5kZXgsICJ0aCBHbG9iYWwgdXNl
cyBnZXRfZ2xvYmFsICIsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCAiIHdoaWNo
IGV4Y2VlZHMgdGhlIGZpcnN0IGludGVybmFsIGdsb2JhbCAiLCBtX3Jlc3VsdC5tb2R1bGUtPmZp
cnN0SW50ZXJuYWxHbG9iYWwpOwotICAgICAgICAgICAgdHlwZUZvckluaXRPcGNvZGUgPSBtX3Jl
c3VsdC5tb2R1bGUtPmdsb2JhbHNbZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXJdLnR5
cGU7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0
T3Bjb2RlLCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciwgdHlwZUZvckluaXRPcGNv
ZGUpKTsKKyAgICAgICAgaWYgKGluaXRPcGNvZGUgPT0gR2V0R2xvYmFsKQogICAgICAgICAgICAg
Z2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9IEdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPSBHbG9iYWw6OkZyb21FeHByZXNzaW9uOwog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVGb3JJbml0T3Bjb2RlICE9IGdsb2JhbC50
eXBlLCAiR2xvYmFsIGluaXRfZXhwciBvcGNvZGUgb2YgdHlwZSAiLCB0eXBlRm9ySW5pdE9wY29k
ZSwgIiBkb2Vzbid0IG1hdGNoIGdsb2JhbCdzIHR5cGUgIiwgZ2xvYmFsLnR5cGUpOwogCiAgICAg
ICAgIG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9i
YWwpKTsKQEAgLTQ1MSw3ICs0MzksOCBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50
KCkgLT4gUGFyCiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
dGFibGVJbmRleCksICJjYW4ndCBnZXQgIiwgZWxlbWVudE51bSwgInRoIEVsZW1lbnQgdGFibGUg
aW5kZXgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YWJsZUluZGV4LCAiRWxlbWVu
dCBzZWN0aW9uIGNhbiBvbmx5IGhhdmUgb25lIFRhYmxlIGZvciBub3ciKTsKLSAgICAgICAgV0FT
TV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIG9mZnNldCkp
OworICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIG9mZnNldCwgaW5pdEV4cHJUeXBlKSk7
CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdE9wY29kZSAhPSBPcFR5cGU6OkkzMkNv
bnN0LCAiRWxlbWVudCBzZWN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBub24taTMyIGluaXRfZXhwciBv
cGNvZGUgZm9yIG5vdywgZ290ICIsIGluaXRPcGNvZGUpOwogICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleENvdW50KSwgImNhbid0IGdldCAiLCBlbGVtZW50
TnVtLCAidGggaW5kZXggY291bnQgZm9yIEVsZW1lbnQgc2VjdGlvbiIpOwogICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGluZGV4Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpLCAiRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNv
dW50IGlzIHRvbyBiaWcgIiwgaW5kZXhDb3VudCk7CkBAIC01MDksNyArNDk4LDcgQEAgYXV0byBN
b2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRpYQogICAgIHJldHVybiB7IH07CiB9CiAK
LWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QmIG9wY29kZSwgdWludDY0
X3QmIGJpdHNPckltcG9ydE51bWJlcikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBNb2R1bGVQYXJz
ZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYgYml0c09ySW1wb3J0
TnVtYmVyLCBUeXBlJiByZXN1bHRUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0IGluaXRfZXhwcidz
IG9wY29kZSIpOwogCkBAIC01MTgsNiArNTA3LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNl
SW5pdEV4cHIodWludDhfdAogICAgICAgICBpbnQzMl90IGNvbnN0YW50OwogICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25z
dGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgaTMyLmNvbnN0Iik7CiAgICAgICAgIGJpdHNPcklt
cG9ydE51bWJlciA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihjb25zdGFudCk7CisgICAgICAgIHJl
c3VsdFR5cGUgPSBJMzI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNTI1LDYgKzUxNSw3
IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QKICAgICAgICAgaW50
NjRfdCBjb25zdGFudDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQ2
NChjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGk2
NC5jb25zdCIpOwogICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAg
ICAgcmVzdWx0VHlwZSA9IEk2NDsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01MzIsNiAr
NTIzLDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdAogICAgICAg
ICB1aW50MzJfdCBjb25zdGFudDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VV
SW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIn
cyBmMzIuY29uc3QiKTsKICAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7Cisg
ICAgICAgIHJlc3VsdFR5cGUgPSBGMzI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNTM5
LDYgKzUzMSw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QKICAg
ICAgICAgdWludDY0X3QgY29uc3RhbnQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVUludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9l
eHByJ3MgZjY0LmNvbnN0Iik7CiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNvbnN0YW50
OworICAgICAgICByZXN1bHRUeXBlID0gRjY0OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTU1MSw3ICs1NDQsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90
CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW1wb3J0LmtpbmRJbmRleCA+PSBtX3Jlc3Vs
dC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwsICJnZXRfZ2xvYmFsIGltcG9ydCBraW5kIGlu
ZGV4ICIsIGltcG9ydC5raW5kSW5kZXgsICIgZXhjZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xv
YmFsICIsIG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7CiAKICAgICAgICAg
QVNTRVJUKG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS5tdXRhYmls
aXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlKTsKLQorICAgICAgICByZXN1bHRUeXBlID0gbV9yZXN1
bHQubW9kdWxlLT5nbG9iYWxzW2luZGV4XS50eXBlOwogICAgICAgICBiaXRzT3JJbXBvcnROdW1i
ZXIgPSBpbmRleDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNTg2LDE4ICs1NzksMTkgQEAg
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgpIC0+IFBhcnRpYQogCiAgICAgZm9yICh1aW50
MzJfdCBzZWdtZW50TnVtYmVyID0gMDsgc2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytz
ZWdtZW50TnVtYmVyKSB7CiAgICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICB1aW50NjRf
dCBvZmZzZXQ7CisgICAgICAgIHVpbnQ2NF90IGluaXRFeHByQml0czsKICAgICAgICAgdWludDhf
dCBpbml0T3Bjb2RlOwogICAgICAgICB1aW50MzJfdCBkYXRhQnl0ZUxlbmd0aDsKIAogICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQg
Iiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGluZGV4Iik7CiAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoaW5kZXgsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQg
aGFzIG5vbi16ZXJvIGluZGV4ICIsIGluZGV4KTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIG9mZnNldCkpOwotICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGluaXRPcGNvZGUgIT0gT3BUeXBlOjpJMzJDb25zdCwgc2VnbWVudE51
bWJlciwgInRoIERhdGEgc2VnbWVudCBoYXMgb3Bjb2RlICIsIGluaXRPcGNvZGUsICIgZXhwZWN0
ZWQgaTMyLmNvbnN0Iik7CisgICAgICAgIFR5cGUgaW5pdEV4cHJUeXBlOworICAgICAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJC
aXRzLCBpbml0RXhwclR5cGUpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhw
clR5cGUgIT0gSTMyLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgaW5pdF9leHBy
IG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIs
ICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUgbGVuZ3RoIik7CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZGF0YUJ5dGVMZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxl
bmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3RoKTsKIAotICAgICAgICBTZWdtZW50KiBz
ZWdtZW50ID0gU2VnbWVudDo6Y3JlYXRlKG9mZnNldCwgZGF0YUJ5dGVMZW5ndGgpOworICAgICAg
ICBTZWdtZW50KiBzZWdtZW50ID0gU2VnbWVudDo6Y3JlYXRlKG1ha2VJMzJJbml0RXhwcihpbml0
T3Bjb2RlLCBpbml0RXhwckJpdHMpLCBkYXRhQnl0ZUxlbmd0aCk7CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXNlZ21lbnQsICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAi
LCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50IG9mIHNpemUgIiwgZGF0YUJ5dGVMZW5n
dGgpOwogICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmRhdGEudW5jaGVja2VkQXBwZW5kKFNlZ21l
bnQ6OmFkb3B0UHRyKHNlZ21lbnQpKTsKICAgICAgICAgZm9yICh1aW50MzJfdCBkYXRhQnl0ZSA9
IDA7IGRhdGFCeXRlIDwgZGF0YUJ5dGVMZW5ndGg7ICsrZGF0YUJ5dGUpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgJKHJldmlzaW9uIDIx
MDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwcml2YXRlOgogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVGFibGVIZWxwZXIoYm9v
bCBpc0ltcG9ydCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VS
ZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
JiBtYXhpbXVtKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUlu
aXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4
cHJUeXBlKTsKIAogICAgIE1vZHVsZVBhcnNlclJlc3VsdCBtX3Jlc3VsdDsKICAgICBib29sIG1f
aGFzVGFibGUgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBhZ2VDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QYWdlQ291bnQuaAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBhZ2VDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMyArNDIsMjIgQEAg
cHVibGljOgogICAgICAgICA6IG1fcGFnZUNvdW50KHBhZ2VDb3VudCkKICAgICB7IH0KIAotICAg
IHNpemVfdCBieXRlcygpIHsgcmV0dXJuIG1fcGFnZUNvdW50ICogcGFnZVNpemU7IH0KKyAgICB1
aW50NjRfdCBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3Bh
Z2VDb3VudCkgKiBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocGFnZVNpemUpOyB9CisgICAgdWludDMy
X3QgcGFnZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlQ291bnQ7IH0KIAogICAgIHN0YXRp
YyBib29sIGlzVmFsaWQodWludDMyX3QgcGFnZUNvdW50KQogICAgIHsKICAgICAgICAgcmV0dXJu
IHBhZ2VDb3VudCA8PSBtYXhQYWdlQ291bnQ7CiAgICAgfQogCisgICAgc3RhdGljIFBhZ2VDb3Vu
dCBmcm9tQnl0ZXModWludDY0X3QgYnl0ZXMpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VChieXRlcyAlIHBhZ2VTaXplID09IDApOworICAgICAgICB1aW50MzJfdCBudW1QYWdlcyA9IGJ5
dGVzIC8gcGFnZVNpemU7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFBhZ2VDb3VudDo6aXNWYWxp
ZChudW1QYWdlcykpOworICAgICAgICByZXR1cm4gUGFnZUNvdW50KG51bVBhZ2VzKTsKKyAgICB9
CisKICAgICBzdGF0aWMgUGFnZUNvdW50IG1heCgpCiAgICAgewogICAgICAgICByZXR1cm4gUGFn
ZUNvdW50KG1heFBhZ2VDb3VudCk7CkBAIC02Miw5ICs3MSwxOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBvcGVyYXRvcjwoY29uc3QgUGFnZUNvdW50JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wYWdl
Q291bnQgPCBvdGhlci5tX3BhZ2VDb3VudDsgfQogICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFBh
Z2VDb3VudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50ID4gb3RoZXIubV9wYWdl
Q291bnQ7IH0KICAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgUGFnZUNvdW50JiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9wYWdlQ291bnQgPj0gb3RoZXIubV9wYWdlQ291bnQ7IH0KKyAgICBQYWdl
Q291bnQgb3BlcmF0b3IrKGNvbnN0IFBhZ2VDb3VudCYgb3RoZXIpCisgICAgeworICAgICAgICBp
ZiAoc3VtT3ZlcmZsb3dzPHVpbnQzMl90PihtX3BhZ2VDb3VudCwgb3RoZXIubV9wYWdlQ291bnQp
KQorICAgICAgICAgICAgcmV0dXJuIFBhZ2VDb3VudCgpOworICAgICAgICB1aW50MzJfdCBuZXdD
b3VudCA9IG1fcGFnZUNvdW50ICsgb3RoZXIubV9wYWdlQ291bnQ7CisgICAgICAgIGlmICghUGFn
ZUNvdW50Ojppc1ZhbGlkKG5ld0NvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBQYWdlQ291bnQo
KTsKKyAgICAgICAgcmV0dXJuIFBhZ2VDb3VudChuZXdDb3VudCk7CisgICAgfQogCi1wcml2YXRl
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgcGFnZVNpemUgPSA2NCAqIEtCOworcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IG1heFBhZ2VDb3VudCA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90PigoMXVsbCA8PCAzMikgLyBwYWdlU2l6ZSk7CiAKICAgICB1aW50MzJf
dCBtX3BhZ2VDb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZh
bGlkYXRlLmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiw4IEBAIHB1
YmxpYzoKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250
cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25T
dGFjayk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50
cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKICAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CisgICAgUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRh
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICBSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCkgeyByZXR1cm4geyB9OyB9CiAKQEAg
LTI5Miw2ICsyOTQsMTkgQEAgYXV0byBWYWxpZGF0ZTo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBl
IAogICAgIHJldHVybiBjaGVja0JyYW5jaFRhcmdldChkZWZhdWx0VGFyZ2V0LCBleHByZXNzaW9u
U3RhY2spOwogfQogCithdXRvIFZhbGlkYXRlOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBl
IGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKK3sKKyAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKGRlbHRhICE9IEkzMiwgImdyb3dfbWVtb3J5IHdpdGggbm9uLWkzMiBk
ZWx0YSIpOworICAgIHJlc3VsdCA9IEkzMjsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFZh
bGlkYXRlOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IEkzMjsKKyAgICByZXR1cm4geyB9OworfQorCiBhdXRvIFZhbGlk
YXRlOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgc3RhY2sp
IC0+IFJlc3VsdAogewogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFModW5pZnkoc3RhY2ss
IGVudHJ5LmNvbnRyb2xEYXRhKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjEwMTI5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKIAotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5o
IgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU1
LDYgKzU1LDE1IEBAIEpTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnkKIHsK
IH0KIAorSlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1ibHlNZW1vcnkoKQoreworICAg
IGlmIChtX2J1ZmZlcikgeworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGR1bW15Q29udGVu
dHM7CisgICAgICAgIG1fYnVmZmVyLT50cmFuc2ZlclRvKGR1bW15Q29udGVudHMpOworICAgICAg
ICBtX2J1ZmZlciA9IG51bGxwdHI7CisgICAgfQorfQorCiBKU0FycmF5QnVmZmVyKiBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogewogICAgIGlmIChtX2J1ZmZlcldyYXBwZXIpCkBAIC03MSw2ICs4MCw0OCBAQCBKU0FycmF5
QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmCiAgICAgcmV0dXJuIG1fYnVmZmVyV3Jh
cHBlci5nZXQoKTsKIH0KIAorV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdy
b3coRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2Vw
dGlvbnNPbkZhaWx1cmUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFdhc206OlBhZ2VDb3Vu
dCBvbGRQYWdlQ291bnQgPSBtX21lbW9yeS0+c2l6ZUluUGFnZXMoKTsKKworICAgIGlmICghV2Fz
bTo6UGFnZUNvdW50Ojppc1ZhbGlkKGRlbHRhKSkgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3dF
eGNlcHRpb25zT25GYWlsdXJlKQorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5
Lk1lbW9yeS5ncm93IGV4cGVjdHMgdGhlIGRlbHRhIHRvIGJlIGEgdmFsaWQgcGFnZSBjb3VudCIp
KSk7CisgICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKKyAgICB9CisKKyAgICBXYXNt
OjpQYWdlQ291bnQgbmV3U2l6ZSA9IG9sZFBhZ2VDb3VudCArIFdhc206OlBhZ2VDb3VudChkZWx0
YSk7CisgICAgaWYgKCFuZXdTaXplKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlv
bnNPbkZhaWx1cmUpCisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5
Lmdyb3cgZXhwZWN0cyB0aGUgZ3Jvd24gc2l6ZSB0byBiZSBhIHZhbGlkIHBhZ2UgY291bnQiKSkp
OworICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7CisgICAgfQorCisgICAgaWYgKGRl
bHRhKSB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fbWVtb3J5LT5ncm93KG5ld1NpemUpOwor
ICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2Vw
dGlvbnNPbkZhaWx1cmUpCisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgICAgICAgICByZXR1
cm4gV2FzbTo6UGFnZUNvdW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXZSBuZWVk
IHRvIGNsZWFyIG91dCB0aGUgb2xkIGFycmF5IGJ1ZmZlciBiZWNhdXNlIGl0IG1pZ2h0IG5vdyBi
ZSBwb2ludGluZworICAgIC8vIHRvIHN0YWxlIG1lbW9yeS4KKyAgICAvLyBOZXV0ZXIgdGhlIG9s
ZCBhcnJheS4KKyAgICBpZiAobV9idWZmZXIpIHsKKyAgICAgICAgQXJyYXlCdWZmZXJDb250ZW50
cyBkdW1teUNvbnRlbnRzOworICAgICAgICBtX2J1ZmZlci0+dHJhbnNmZXJUbyhkdW1teUNvbnRl
bnRzKTsKKyAgICAgICAgbV9idWZmZXIgPSBudWxscHRyOworICAgICAgICBtX2J1ZmZlcldyYXBw
ZXIuY2xlYXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2xkUGFnZUNvdW50OworfQorCiB2b2lk
IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lvbiAyMTAxMjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDkgKzQ4LDExIEBAIHB1YmxpYzoKIAogICAgIFdhc206Ok1lbW9yeSog
bWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBKU0FycmF5QnVmZmVyKiBi
dWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopOworICAgIFdhc206OlBhZ2VDb3VudCBncm93
KEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhLCBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09u
RmFpbHVyZSk7CiAKIHByb3RlY3RlZDoKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3Ry
dWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4mJik7CisgICAgfkpTV2ViQXNz
ZW1ibHlNZW1vcnkoKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw4
ICsyMjksOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
ICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0lt
cG9ydCgpKTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBt
ZW1vcnkgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1v
cnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgp
KTsKLSAgICAgICAgICAgIGlmICghbWVtb3J5LT5pc1ZhbGlkKCkpCisgICAgICAgICAgICBib29s
IGZhaWxlZDsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1lbW9y
eSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1hdGlvbi5tZW1v
cnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpLCBmYWlsZWQp
OworICAgICAgICAgICAgaWYgKGZhaWxlZCkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVt
b3J5RXJyb3IoZXhlYykpKTsKICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sCiAg
ICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZSht
ZW1vcnkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1lbW9yeUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEw
MTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDggKzk2LDkgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB9CiAgICAgfQogCi0gICAg
c3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxX
YXNtOjpNZW1vcnk+KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOwotICAgIGlm
ICghbWVtb3J5LT5pc1ZhbGlkKCkpCisgICAgYm9vbCBmYWlsZWQ7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+
KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGZhaWxlZCk7CisgICAgaWYgKGZh
aWxlZCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKSk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXVEZN
b3ZlKG1lbW9yeSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIx
MDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAK
ICNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5sdXQuaCIKIApAQCAtNDQsMjEg
KzQ1LDUxIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHkKICBAZW5k
CiAgKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlN
ZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4ZWNTdGF0ZSopOworRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3co
RXhlY1N0YXRlKik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlN
ZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQorQUxXQVlTX0lOTElORSBKU1dl
YkFzc2VtYmx5TWVtb3J5KiBnZXRNZW1vcnkoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkg
PSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihleGVjLT50aGlzVmFsdWUoKSk7
IAorICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJB
c3NlbWJseU1lbW9yeSo+KHZhbHVlKTsgCiAgICAgaWYgKCFtZW1vcnkpIHsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCAKLSAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2Vi
QXNzZW1ibHkuTWVtb3J5LnByb3RvdHlwZS5idWZmZXIgZ2V0dGVyIGNhbGxlZCB3aXRoIG5vbiBX
ZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8IHZhbHVlIikpKSk7CisgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIAorICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5LnByb3RvdHlwZS5idWZmZXIgZ2V0dGVy
IGNhbGxlZCB3aXRoIG5vbiBXZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8IHZhbHVlIikpKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIHJldHVybiBtZW1vcnk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZm
ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnkoZXhlYywgZXhlYy0+dGhpc1ZhbHVlKCkpOyAK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShtZW1vcnktPmJ1ZmZlcihleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3Nl
bWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnkoZXhlYywg
ZXhlYy0+dGhpc1ZhbHVlKCkpOyAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CisgICAgCisgICAgdWludDMyX3QgZGVsdGEgPSB0b05vbldyYXBwaW5nVWludDMyKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CisKKyAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IHRy
dWU7CisgICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3JvdyhleGVjLCBkZWx0
YSwgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKHJlc3VsdC5wYWdlQ291bnQoKSkpOworfQorCiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlw
ZSogV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGF1dG8qIG9i
amVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90
eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7
CkBAIC03NSw2ICsxMDYsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlOjpmaW5p
c2hDCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEpTQ19OQVRJVkVfR0VU
VEVSKCJidWZmZXIiLCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlciwgRG9udEVudW0g
fCBBY2Nlc3Nvcik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
Imdyb3ciLCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3csIERvbnRFbnVtLCAxKTsKIH0K
IAogV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShy
ZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw4ICsxOTYsOCBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgbV9tb2R1bGVFbnZp
cm9ubWVudC5zZXQodm0sIHRoaXMsIG1vZHVsZUVudmlyb25tZW50KTsKIH0KIAotdGVtcGxhdGUg
PHR5cGVuYW1lIFNjb3BlLCB0eXBlbmFtZSBOLCB0eXBlbmFtZSAuLi5BcmdzPgotTkVWRVJfSU5M
SU5FIHN0YXRpYyBKU1ZhbHVlIGRhdGFTZWdtZW50RmFpbChFeGVjU3RhdGUqIHN0YXRlLCBWTSYg
dm0sIFNjb3BlJiBzY29wZSwgTiBtZW1vcnlTaXplLCBOIHNlZ21lbnRTaXplLCBOIG9mZnNldCwg
QXJncy4uLiBhcmdzKQordGVtcGxhdGUgPHR5cGVuYW1lIFNjb3BlLCB0eXBlbmFtZSBNLCB0eXBl
bmFtZSBOLCB0eXBlbmFtZSAuLi5BcmdzPgorTkVWRVJfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGRh
dGFTZWdtZW50RmFpbChFeGVjU3RhdGUqIHN0YXRlLCBWTSYgdm0sIFNjb3BlJiBzY29wZSwgTSBt
ZW1vcnlTaXplLCBOIHNlZ21lbnRTaXplLCBOIG9mZnNldCwgQXJncy4uLiBhcmdzKQogewogICAg
IHJldHVybiB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlM
aW5rRXJyb3Ioc3RhdGUsIHZtLCBtYWtlU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBkYXRh
IHNlZ21lbnQgaW5pdGlhbGl6YXRpb246IHNlZ21lbnQgb2YgIiksIFN0cmluZzo6bnVtYmVyKHNl
Z21lbnRTaXplKSwgQVNDSUlMaXRlcmFsKCIgYnl0ZXMgbWVtb3J5IG9mICIpLCBTdHJpbmc6Om51
bWJlcihtZW1vcnlTaXplKSwgQVNDSUlMaXRlcmFsKCIgYnl0ZXMsIGF0IG9mZnNldCAiKSwgU3Ry
aW5nOjpudW1iZXIob2Zmc2V0KSwgYXJncy4uLikpKTsKIH0KQEAgLTI1OSwxNSArMjU5LDIyIEBA
IEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAgaWYgKCFk
YXRhLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoanNNZW1vcnkpOyAv
LyBJdCBpcyBhIHZhbGlkYXRpb24gZXJyb3IgZm9yIGEgRGF0YSBzZWN0aW9uIHRvIGV4aXN0IHdp
dGhvdXQgYSBNZW1vcnkgc2VjdGlvbiBvciBpbXBvcnQuCiAgICAgICAgICAgICB1aW50OF90KiBt
ZW1vcnkgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihqc01lbW9yeS0+bWVtb3J5KCktPm1l
bW9yeSgpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9yeSk7Ci0gICAgICAgICAg
ICBhdXRvIHNpemVJbkJ5dGVzID0ganNNZW1vcnktPm1lbW9yeSgpLT5zaXplKCk7CisgICAgICAg
ICAgICB1aW50NjRfdCBzaXplSW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1vcnkoKS0+c2l6ZSgpOwog
ICAgICAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogZGF0YSkgewogICAgICAgICAgICAgICAg
IGlmIChzZWdtZW50LT5zaXplSW5CeXRlcykgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogd2hhdCdzIHRoZSBiZWhhYmlvciBoZXJlPyBEbyB3ZSBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
aW50MzJfdCkgb3IgZG8gd2UgdGhyb3cgZXhjZXB0aW9uIG9uIDwgMD8KKyAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3Qgb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC0+
b2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQg
PSBtX2luc3RhbmNlLT5sb2FkSTMyR2xvYmFsKHNlZ21lbnQtPm9mZnNldC5nbG9iYWxJbXBvcnRJ
bmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gc2VnbWVudC0+b2Zmc2V0LmNvbnN0VmFsdWUoKTsKKwogICAgICAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2l6ZUluQnl0ZXMgPCBzZWdtZW50LT5zaXplSW5CeXRlcykp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21lbnRGYWlsKHN0YXRlLCB2
bSwgc2NvcGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRlcywgc2VnbWVudC0+b2Zm
c2V0LCBBU0NJSUxpdGVyYWwoIiwgc2VnbWVudCBpcyB0b28gYmlnIikpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2VnbWVudC0+b2Zmc2V0ID4gc2l6ZUluQnl0ZXMgLSBzZWdt
ZW50LT5zaXplSW5CeXRlcykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNl
Z21lbnRGYWlsKHN0YXRlLCB2bSwgc2NvcGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5C
eXRlcywgc2VnbWVudC0+b2Zmc2V0LCBBU0NJSUxpdGVyYWwoIiwgc2VnbWVudCB3cml0ZXMgb3V0
c2lkZSBvZiBtZW1vcnkiKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShtZW1vcnkgKyBz
ZWdtZW50LT5vZmZzZXQsICZzZWdtZW50LT5ieXRlKDApLCBzZWdtZW50LT5zaXplSW5CeXRlcyk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21lbnRGYWlsKHN0YXRlLCB2
bSwgc2NvcGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRlcywgb2Zmc2V0LCBBU0NJ
SUxpdGVyYWwoIiwgc2VnbWVudCBpcyB0b28gYmlnIikpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkob2Zmc2V0ID4gc2l6ZUluQnl0ZXMgLSBzZWdtZW50LT5zaXplSW5CeXRlcykp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21lbnRGYWlsKHN0YXRlLCB2
bSwgc2NvcGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRlcywgb2Zmc2V0LCBBU0NJ
SUxpdGVyYWwoIiwgc2VnbWVudCB3cml0ZXMgb3V0c2lkZSBvZiBtZW1vcnkiKSk7CisgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgICAg
IG1lbWNweShtZW1vcnkgKyBvZmZzZXQsICZzZWdtZW50LT5ieXRlKDApLCBzZWdtZW50LT5zaXpl
SW5CeXRlcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297744</attachid>
            <date>2016-12-24 12:08:02 -0800</date>
            <delta_ts>2016-12-24 14:01:46 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>54562</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS55YW1s
CShyZXZpc2lvbiAyMTAxMjkpCisrKyBKU1Rlc3RzL3dhc20ueWFtbAkod29ya2luZyBjb3B5KQpA
QCAtMTQzLDcgKzE0Myw3IEBACiAgIGNtZDogcnVuV2ViQXNzZW1ibHlTcGVjVGVzdCA6bm9ybWFs
CiAKIC0gcGF0aDogd2FzbS9zcGVjLXRlc3RzL21lbW9yeV90cmFwLndhc3QuanMKLSAgY21kOiBy
dW5XZWJBc3NlbWJseVNwZWNUZXN0IDpza2lwCisgIGNtZDogcnVuV2ViQXNzZW1ibHlTcGVjVGVz
dCA6bm9ybWFsCiAKIC0gcGF0aDogd2FzbS9zcGVjLXRlc3RzL25hbWVzLndhc3QuanMKICAgY21k
OiBydW5XZWJBc3NlbWJseVNwZWNUZXN0IDpza2lwCkluZGV4OiBKU1Rlc3RzL3dhc20vd2FzbS5q
c29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS93YXNtLmpzb24JKHJldmlzaW9uIDIxMDEy
OSkKKysrIEpTVGVzdHMvd2FzbS93YXNtLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4
LDggQEAKICAgICAgICAgImk2NC5zdG9yZSI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJtZW1v
cnkiLCAgICAgInZhbHVlIjogIDU1LCAicmV0dXJuIjogW10sICAgICAgICAgICAicGFyYW1ldGVy
IjogWyJhZGRyIiwgImk2NCJdLCAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFn
cyIsICAgICAgICAgICJ0eXBlIjogInZhcnVpbnQzMiJ9LCB7Im5hbWUiOiAib2Zmc2V0IiwgInR5
cGUiOiAidmFydWludDMyIn1dLCAiZGVzY3JpcHRpb24iOiAic3RvcmUgdG8gbWVtb3J5IiB9LAog
ICAgICAgICAiZjMyLnN0b3JlIjogICAgICAgICAgIHsgImNhdGVnb3J5IjogIm1lbW9yeSIsICAg
ICAidmFsdWUiOiAgNTYsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFk
ZHIiLCAiZjMyIl0sICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImZsYWdzIiwgICAg
ICAgICAgInR5cGUiOiAidmFydWludDMyIn0sIHsibmFtZSI6ICJvZmZzZXQiLCAidHlwZSI6ICJ2
YXJ1aW50MzIifV0sICJkZXNjcmlwdGlvbiI6ICJzdG9yZSB0byBtZW1vcnkiIH0sCiAgICAgICAg
ICJmNjQuc3RvcmUiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAibWVtb3J5IiwgICAgICJ2YWx1
ZSI6ICA1NywgInJldHVybiI6IFtdLCAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYWRkciIsICJm
NjQiXSwgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAgICAgICAgICAi
dHlwZSI6ICJ2YXJ1aW50MzIifSwgeyJuYW1lIjogIm9mZnNldCIsICJ0eXBlIjogInZhcnVpbnQz
MiJ9XSwgImRlc2NyaXB0aW9uIjogInN0b3JlIHRvIG1lbW9yeSIgfSwKLSAgICAgICAgImN1cnJl
bnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjogIDYz
LCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAicXVlcnkgdGhlIHNpemUgb2YgbWVtb3J5IiB9LAotICAgICAgICAiZ3Jv
d19tZW1vcnkiOiAgICAgICAgIHsgImNhdGVnb3J5IjogIm9wZXJhdGlvbiIsICAidmFsdWUiOiAg
NjQsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJwYXJhbWV0ZXIiOiBbInNpemUiXSwgICAgICAg
ICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJncm93IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKKyAgICAgICAgImN1
cnJlbnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjog
IDYzLCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFncyIsICJ0eXBlIjogInZhcnVp
bnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJx
dWVyeSB0aGUgc2l6ZSBvZiBtZW1vcnkiIH0sCisgICAgICAgICJncm93X21lbW9yeSI6ICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAib3BlcmF0aW9uIiwgICJ2YWx1ZSI6ICA2NCwgInJldHVybiI6IFsi
c2l6ZSJdLCAgICAgInBhcmFtZXRlciI6IFsic2l6ZSJdLCAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZ3JvdyB0aGUgc2l6ZSBvZiBt
ZW1vcnkiIH0sCiAgICAgICAgICJpMzIuYWRkIjogICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
YXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwNiwgInJldHVybiI6IFsiaTMyIl0sICAgICAgInBhcmFt
ZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAiYjNvcCI6
ICJBZGQiICAgICAgICAgIH0sCiAgICAgICAgICJpMzIuc3ViIjogICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwNywgInJldHVybiI6IFsiaTMyIl0sICAg
ICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVkaWF0ZSI6IFtd
LCAiYjNvcCI6ICJTdWIiICAgICAgICAgIH0sCiAgICAgICAgICJpMzIubXVsIjogICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwOCwgInJldHVybiI6IFsi
aTMyIl0sICAgICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVk
aWF0ZSI6IFtdLCAiYjNvcCI6ICJNdWwiICAgICAgICAgIH0sCkluZGV4OiBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvZ3Jvdy1tZW1vcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL2dyb3ctbWVtb3J5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9ncm93LW1lbW9yeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE4MCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CitpbXBvcnQg
KiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKKworY29uc3QgcGFnZVNpemUgPSA2NCAq
IDEwMjQ7Citjb25zdCBtYXhQYWdlQ291bnQgPSAoMioqMzIpIC8gcGFnZVNpemU7CisKK2Z1bmN0
aW9uIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIsIG1zZyA9ICIiKSB7CisgICAgY29uc3Qg
YmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGxldCB0aHJldyA9IGZhbHNl
OworICAgIHRyeSB7CisgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgaWYgKG1zZykKKyAgICAgICAgICAg
IGFzc2VydC50cnV0aHkoZS5tZXNzYWdlLmluZGV4T2YobXNnKSAhPT0gLTEpOworICAgICAgICB0
aHJldyA9IHRydWU7CisgICAgfQorICAgIGFzc2VydC50cnV0aHkodGhyZXcpOworfQorCit7Cisg
ICAgLy8gQ2FuJ3QgZ3Jvd19tZW1vcnkgaWYgbm8gbWVtb3J5IGlzIGRlZmluZWQuCisgICAgY29u
c3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQoKQorICAgICAgICAu
Q29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oe3JldDogInZvaWQiLCBwYXJhbXM6IFtdfSkK
KyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMjUpCisgICAgICAgICAgICAgICAgLkdyb3dNZW1v
cnkoMCkKKyAgICAgICAgICAgICAgICAuRHJvcCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpOworCisgICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRlciwgImdyb3dfbWVt
b3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIpOwor
fQorCit7CisgICAgLy8gQ2FuJ3QgY3VycmVudF9tZW1vcnkgaWYgbm8gbWVtb3J5IGlzIGRlZmlu
ZWQuCisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oe3JldDogInZvaWQiLCBw
YXJhbXM6IFtdfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMjUpCisgICAgICAgICAgICAg
ICAgLkN1cnJlbnRNZW1vcnkoMCkKKyAgICAgICAgICAgICAgICAuRHJvcCgpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVp
bGRlciwgImN1cnJlbnRfbWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5l
ZCBvciBpbXBvcnRlZCIpOworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRl
cigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0
OiAidm9pZCIsIHBhcmFtczogW119KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAg
ICAgICAgICAgICAgICAuR3Jvd01lbW9yeSgxKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQ
YXJzZShidWlsZGVyLCAicmVzZXJ2ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVtb3J5IG11c3QgYmUg
emVybyIpOworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAg
ICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5N
ZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVu
ZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0OiAidm9pZCIs
IHBhcmFtczogW119KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAgICAgICAgICAg
ICAgICAuQ3VycmVudE1lbW9yeSgxKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShi
dWlsZGVyLCAicmVzZXJ2ZWQgdmFyVWludDEgZm9yIGN1cnJlbnRfbWVtb3J5IG11c3QgYmUgemVy
byIpOworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAg
ICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1v
cnkoKS5Jbml0aWFsTWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgp
CisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0OiAidm9pZCIsIHBh
cmFtczogW119KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAgICAgICAgICAgICAg
ICAuQ3VycmVudE1lbW9yeSgweGZmZmZmZjAwKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQ
YXJzZShidWlsZGVyLCAicmVzZXJ2ZWQgdmFyVWludDEgZm9yIGN1cnJlbnRfbWVtb3J5IG11c3Qg
YmUgemVybyIpOworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQor
ICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAg
IC5NZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgp
LkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0OiAidm9p
ZCIsIHBhcmFtczogW119KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAgICAgICAg
ICAgICAgICAuR3Jvd01lbW9yeSgweGZmZmZmZjAwKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGRO
b3RQYXJzZShidWlsZGVyLCAicmVzZXJ2ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVtb3J5IG11c3Qg
YmUgemVybyIpOworfQorCit7CisgICAgY29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlh
bDogMjAsIG1heGltdW06IDUwfTsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkp
CisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwg
Im1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9v
IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiJ9KQorICAgICAgICAgICAgICAgIC5HZXRM
b2NhbCgwKQorICAgICAgICAgICAgICAgIC5Hcm93TWVtb3J5KDApCisgICAgICAgICAgICAgICAg
LlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBX
ZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHttZW1vcnk6IG5ldyBXZWJBc3NlbWJs
eS5NZW1vcnkobWVtb3J5RGVzY3JpcHRpb24pfX0pOworICAgIGxldCBjdXJyZW50UGFnZVNpemUg
PSBtZW1vcnlEZXNjcmlwdGlvbi5pbml0aWFsOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVt
b3J5RGVzY3JpcHRpb24ubWF4aW11bSAtIG1lbW9yeURlc2NyaXB0aW9uLmluaXRpYWw7IGkrKykg
eworICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mb28oMSksIGN1cnJlbnRQYWdl
U2l6ZSk7CisgICAgICAgICsrY3VycmVudFBhZ2VTaXplOworICAgIH0KKworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBv
cnRzLmZvbygxKSwgLTEpOworICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mb28o
MCksIGN1cnJlbnRQYWdlU2l6ZSk7CisgICAgfQorfQorCit7CisgICAgY29uc3QgbWVtb3J5RGVz
Y3JpcHRpb24gPSB7aW5pdGlhbDogMjAsIG1heGltdW06IDEwMH07CisgICAgY29uc3QgYnVpbGRl
ciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBv
cnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZXNjcmlwdGlvbikuRW5kKCkKKyAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIn0pCisgICAgICAg
ICAgICAgICAgLkN1cnJlbnRNZW1vcnkoMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1v
cnkobWVtb3J5RGVzY3JpcHRpb24pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge21lbW9yeX19KTsKKyAgICBsZXQgY3VycmVudFBh
Z2VTaXplID0gbWVtb3J5RGVzY3JpcHRpb24uaW5pdGlhbDsKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IG1lbW9yeURlc2NyaXB0aW9uLm1heGltdW0gLSBtZW1vcnlEZXNjcmlwdGlvbi5pbml0aWFs
OyBpKyspIHsKKyAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKCksIGN1cnJl
bnRQYWdlU2l6ZSk7CisgICAgICAgICsrY3VycmVudFBhZ2VTaXplOworICAgICAgICBtZW1vcnku
Z3JvdygxKTsKKyAgICB9Cit9CkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMJKG5v
bmV4aXN0ZW50KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACitpbXBvcnQgeyBlcSBhcyBhc3NlcnRFcSB9IGZyb20g
Ii4uL2Fzc2VydC5qcyI7Citjb25zdCBwYWdlU2l6ZSA9IDY0KjEwMjQ7CisKK2xldCBidWZmZXJz
ID0gW107Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgY29uc3QgbWF4ID0g
NTsKKyAgICBsZXQgcGFnZUNvdW50ID0gMTsKKyAgICBsZXQgeCA9IG5ldyBXZWJBc3NlbWJseS5N
ZW1vcnkoe2luaXRpYWw6IDEsIG1heGltdW06IG1heH0pOworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgKG1heCAtIDEpOyBpKyspIHsKKyAgICAgICAgbGV0IGludDhBcnJheSA9IG5ldyBVaW50OEFy
cmF5KHguYnVmZmVyKTsKKworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VTaXplOyBp
KyspIHsKKyAgICAgICAgICAgIGFzc2VydEVxKGludDhBcnJheVtwYWdlU2l6ZSoocGFnZUNvdW50
IC0gMSkgKyBpXSwgMCk7CisgICAgICAgICAgICBpbnQ4QXJyYXlbcGFnZVNpemUqKHBhZ2VDb3Vu
dCAtIDEpICsgaV0gPSBwYWdlQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHBhZ2VDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsg
aiA8IHBhZ2VTaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcShpbnQ4QXJyYXlb
aSAqIHBhZ2VTaXplICsgal0sIGkgKyAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGxldCBidWZmZXIgPSB4LmJ1ZmZlcjsKKyAgICAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5
dGVMZW5ndGgsIHBhZ2VDb3VudCAqIHBhZ2VTaXplKTsKKyAgICAgICAgYnVmZmVycy5wdXNoKGJ1
ZmZlcik7CisgICAgICAgIGxldCBwcmV2aW91c1BhZ2VTaXplID0geC5ncm93KDEpOworICAgICAg
ICBhc3NlcnRFcShidWZmZXIuYnl0ZUxlbmd0aCwgMCk7CisgICAgICAgIGFzc2VydEVxKHByZXZp
b3VzUGFnZVNpemUsIHBhZ2VDb3VudCk7CisgICAgICAgICsrcGFnZUNvdW50OworICAgIH0KK30K
KworZm9yIChsZXQgYnVmZmVyIG9mIGJ1ZmZlcnMpIHsKKyAgICBhc3NlcnRFcShidWZmZXIuYnl0
ZUxlbmd0aCwgMCk7Cit9CkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9tZW1vcnkuanMJKHJldmlz
aW9uIDIxMDEyOSkKKysrIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9tZW1vcnkuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSwzIEBACi0vLyBGSVhNRTogdXNlIHRoZSBhc3NlcnQgbGlicmFy
eTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTY4NAogaW1wb3J0
IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiBpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAn
Li4vYXNzZXJ0LmpzJzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxMDEy
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjM5LDggKzI2MzksOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtb2R1bGVJbmZv
cm1hdGlvbiA9IHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAgICBpZiAoISFtb2R1
bGVJbmZvcm1hdGlvbi0+bWVtb3J5KSB7Ci0gICAgICAgIG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlx
dWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LmluaXRpYWwoKSwgbW9k
dWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tYXhpbXVtKCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VChtZW1vcnktPmlzVmFsaWQoKSk7CisgICAgICAgIGJvb2wgZmFpbGVkOworICAgICAgICBtZW1v
cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc206Ok1lbW9yeT4obW9kdWxlSW5mb3JtYXRpb24tPm1l
bW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubWF4aW11bSgpLCBmYWls
ZWQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKTsKICAgICAgICAgbWVtb3J5Qnl0
ZXMgPSBtZW1vcnktPm1lbW9yeSgpOwogICAgICAgICBtZW1vcnlTaXplID0gbWVtb3J5LT5zaXpl
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAy
MTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDIsNyArMzAyLDcgQEAgcHVibGljOgogICAgIEV4ZWNTdGF0ZSogdG9wQ2FsbEZy
YW1lOwogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogdG9wSlNXZWJBc3NlbWJseUluc3RhbmNl
OwogICAgIHZvaWQqIHRvcFdhc21NZW1vcnlQb2ludGVyOwotICAgIHVpbnQzMl90IHRvcFdhc21N
ZW1vcnlTaXplOworICAgIHVpbnQ2NF90IHRvcFdhc21NZW1vcnlTaXplOwogICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IHN0cnVjdHVyZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1
Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Miw2ICsxNzIsOCBAQCBwdWJsaWM6CiAgICAgLy8gTWVtb3J5CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gbG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHN0b3JlKFN0b3JlT3BUeXBlLCBFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRHcm93TWVtb3J5KEV4
cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOwogCiAgICAgLy8gQmFzaWMgb3BlcmF0b3JzCiAgICAgdGVtcGxhdGU8T3BUeXBl
PgpAQCAtMzMyLDYgKzMzNCw4MSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxl
KCkgLT4gCiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRHcm93
TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgaW50MzJfdCAoKmdyb3dNZW1vcnkpIChFeGVjU3RhdGUqLCBp
bnQzMl90KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgZGVsdGEpIC0+IGludDMyX3Qg
eyAKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UgPSB2bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CisgICAgICAgIEpTV2ViQXNz
ZW1ibHlNZW1vcnkqIHdhc21NZW1vcnkgPSBpbnN0YW5jZS0+bWVtb3J5KCk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHdhc21NZW1vcnkpOyAvLyBUaGlzIHdvdWxkIGZhaWwgdmFsaWRhdGlvbiBv
dGhlcndpc2UuCisKKyAgICAgICAgaWYgKGRlbHRhIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAt
MTsKKworICAgICAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IGZhbHNl
OworICAgICAgICBQYWdlQ291bnQgcmVzdWx0ID0gd2FzbU1lbW9yeS0+Z3JvdyhleGVjLCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oZGVsdGEpLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUp
OworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgdm0udG9wV2FzbU1lbW9yeVBv
aW50ZXIgPSB3YXNtTWVtb3J5LT5tZW1vcnkoKS0+bWVtb3J5KCk7CisgICAgICAgIHZtLnRvcFdh
c21NZW1vcnlTaXplID0gd2FzbU1lbW9yeS0+bWVtb3J5KCktPnNpemUoKTsKKworICAgICAgICBy
ZXR1cm4gcmVzdWx0LnBhZ2VDb3VudCgpOworICAgIH07CisKKyAgICByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigpLAor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywg
T3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ3Jvd01lbW9yeSkpLAorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVy
LCBPcmlnaW4oKSksIGRlbHRhKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKG1faW5mby5oYXNNZW1v
cnkoKSk7CisgICAgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24qIG1lbW9yeSA9ICZtX2luZm8ubWVt
b3J5OworCisgICAgVmVjdG9yPFZhbHVlKj4gYXJndW1lbnRzOworCisgICAgVmFsdWUqIGJhc2VN
ZW1vcnkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIEludDY0LCBPcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAmbV92bS50b3BXYXNtTWVtb3J5UG9pbnRl
cikpOworICAgIGFyZ3VtZW50cy5hcHBlbmQoYmFzZU1lbW9yeSk7CisKKyAgICBWYWx1ZSogc2l6
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
SW50NjQsIE9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksICZtX3ZtLnRvcFdhc21NZW1vcnlTaXplKSk7Cisg
ICAgZm9yIChhdXRvIGluZm8gOiBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3Rl
cnMpIHsKKyAgICAgICAgVmFsdWUqIHNpemVWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgU3ViLCBPcmlnaW4oKSwgc2l6ZSwgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGluZm8uc2l6ZU9mZnNldCkp
OworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHNpemVWYWx1ZSk7CisgICAgfQorCisgICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOworICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgIHBhdGNocG9pbnQtPmFwcGVuZFZlY3Rvcldp
dGhSZXAoYXJndW1lbnRzLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKworICAgIC8vIEZJWE1F
OiB3b3VsZCBpdCB3b3JrIGp1c3QgdG8gbWFrZSB0aGVzZSB0aGluZ3MgQ29uc3RyYWluZWRWYWx1
ZXM/CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFttZW1vcnldIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAg
ICAgICAgCisgICAgICAgIGppdC5tb3ZlKHBhcmFtc1swXS5ncHIoKSwgbWVtb3J5LT5waW5uZWRS
ZWdpc3RlcnMoKS5iYXNlTWVtb3J5UG9pbnRlcik7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBqaXQubW92ZShwYXJhbXNbMSArIGldLmdwcigpLCBtZW1vcnktPnBp
bm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKTsKKyAgICB9KTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1l
bW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVmFs
dWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIEludDY0LCBPcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAmbV92bS50b3BXYXNtTWVtb3J5U2l6
ZSkpOworCisgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBVRGl2LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHNpemUsIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBQYWdlQ291
bnQ6OnBhZ2VTaXplKSk7CisKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIFRydW5jLCBPcmlnaW4oKSwgbnVtUGFnZXMpOworCisgICAgcmV0dXJu
IHsgfTsKK30KKwogYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV9s
b2NhbHNbaW5kZXhdKTsKQEAgLTkwMiwxMiArOTc5LDEyIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUpT
VG9XYXNtV3JhcHBlcihWTSYgdm0KICAgICBpZiAoISFtZW1vcnkpIHsKICAgICAgICAgYmFzZU1l
bW9yeSA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBP
cmlnaW4oKSwKICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksICZ2bS50b3BXYXNtTWVtb3J5UG9pbnRlcikpOwotICAgICAgICBWYWx1ZSog
c2l6ZSA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBP
cmlnaW4oKSwKKyAgICAgICAgVmFsdWUqIHNpemUgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksCiAgICAgICAgICAgICBibG9jay0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmdm0udG9wV2FzbU1lbW9yeVNp
emUpKTsKICAgICAgICAgc2l6ZXMucmVzZXJ2ZUNhcGFjaXR5KG1lbW9yeS5waW5uZWRSZWdpc3Rl
cnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byBpbmZvIDogbWVt
b3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpIHsKICAgICAgICAgICAgIHNpemVz
LmFwcGVuZChibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIG9yaWdpbiwgc2l6ZSwK
LSAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgb3Jp
Z2luLCBpbmZvLnNpemVPZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgaW5mby5zaXplT2Zmc2V0KSkpOwogICAgICAg
ICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotU2VnbWVudCogU2VnbWVudDo6Y3JlYXRlKHVpbnQz
Ml90IG9mZnNldCwgdWludDMyX3Qgc2l6ZUluQnl0ZXMpCitTZWdtZW50KiBTZWdtZW50OjpjcmVh
dGUoSTMySW5pdEV4cHIgb2Zmc2V0LCB1aW50MzJfdCBzaXplSW5CeXRlcykKIHsKICAgICBhdXRv
IGFsbG9jYXRlZCA9IHRyeUZhc3RDYWxsb2Moc2l6ZW9mKFNlZ21lbnQpICsgc2l6ZUluQnl0ZXMs
IDEpOwogICAgIFNlZ21lbnQqIHNlZ21lbnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCwxNiArMTM4LDUxIEBA
IHN0cnVjdCBGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkgewogICAgIHNpemVfdCBlbmQ7CiB9Owog
CitjbGFzcyBJMzJJbml0RXhwciB7CisgICAgZW51bSBUeXBlIDogdWludDhfdCB7CisgICAgICAg
IEdsb2JhbCwKKyAgICAgICAgQ29uc3QKKyAgICB9OworCisgICAgSTMySW5pdEV4cHIoVHlwZSB0
eXBlLCB1aW50MzJfdCBiaXRzKQorICAgICAgICA6IG1fYml0cyhiaXRzKQorICAgICAgICAsIG1f
dHlwZSh0eXBlKQorICAgIHsgfQorCitwdWJsaWM6CisgICAgSTMySW5pdEV4cHIoKSA9IGRlbGV0
ZTsKKworICAgIHN0YXRpYyBJMzJJbml0RXhwciBmb3JHbG9iYWxJbXBvcnQodWludDMyX3QgZ2xv
YmFsSW1wb3J0TnVtYmVyKSB7IHJldHVybiBJMzJJbml0RXhwcihHbG9iYWwsIGdsb2JhbEltcG9y
dE51bWJlcik7IH0KKyAgICBzdGF0aWMgSTMySW5pdEV4cHIgZm9yQ29uc3RWYWx1ZSh1aW50MzJf
dCBjb25zdFZhbHVlKSB7IHJldHVybiBJMzJJbml0RXhwcihDb25zdCwgY29uc3RWYWx1ZSk7IH0K
KworICAgIGJvb2wgaXNDb25zdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBDb25zdDsgfQor
ICAgIGJvb2wgaXNHbG9iYWxJbXBvcnQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gR2xvYmFs
OyB9CisgICAgdWludDMyX3QgY29uc3RWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChpc0NvbnN0KCkpOworICAgICAgICByZXR1cm4gbV9iaXRzOworICAgIH0KKyAg
ICB1aW50MzJfdCBnbG9iYWxJbXBvcnRJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChpc0dsb2JhbEltcG9ydCgpKTsKKyAgICAgICAgcmV0dXJuIG1fYml0czsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9iaXRzOworICAgIFR5cGUgbV90eXBlOwor
fTsKKwogc3RydWN0IFNlZ21lbnQgewotICAgIHVpbnQzMl90IG9mZnNldDsKICAgICB1aW50MzJf
dCBzaXplSW5CeXRlczsKKyAgICBJMzJJbml0RXhwciBvZmZzZXQ7CiAgICAgLy8gQnl0ZXMgYXJl
IGFsbG9jYXRlZCBhdCB0aGUgZW5kLgogICAgIHVpbnQ4X3QmIGJ5dGUodWludDMyX3QgcG9zKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKHBvcyA8IHNpemVJbkJ5dGVzKTsKLSAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlz
KSArIHNpemVvZihvZmZzZXQpICsgc2l6ZW9mKHNpemVJbkJ5dGVzKSArIHBvcyk7CisgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4odGhpcykgKyBzaXplb2YoU2VnbWVudCkgKyBwb3MpOwogICAgIH0KLSAgICBzdGF0aWMgU2Vn
bWVudCogY3JlYXRlKHVpbnQzMl90LCB1aW50MzJfdCk7CisgICAgc3RhdGljIFNlZ21lbnQqIGNy
ZWF0ZShJMzJJbml0RXhwciwgdWludDMyX3QpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koU2Vn
bWVudCopOwogICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPFNlZ21lbnQsIGRlY2x0eXBlKCZT
ZWdtZW50OjpkZXN0cm95KT4gUHRyOwogICAgIHN0YXRpYyBQdHIgYWRvcHRQdHIoU2VnbWVudCop
OwpAQCAtMTkxLDcgKzIyNiwxMCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAgIFZl
Y3RvcjxJbXBvcnQ+IGltcG9ydHM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbXBvcnRG
dW5jdGlvblNpZ25hdHVyZUluZGljZXM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbnRl
cm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKKworICAgIGJvb2wgaGFzTWVtb3J5KCkgY29u
c3QgeyByZXR1cm4gISFtZW1vcnk7IH0KICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7CisK
ICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
IHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFZlY3RvcjxTZWdtZW50OjpQdHI+IGRhdGE7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJz
ZXIuaAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3OCwxMiArNDc4LDM2IEBAIGF1
dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKLSAgICBjYXNlIEdyb3dNZW1vcnk6Ci0gICAgICAgIHJldHVybiBmYWlsKCJu
b3QgeWV0IGltcGxlbWVudGVkOiBncm93X21lbW9yeSIpOyAvLyBGSVhNRTogTm90IHlldCBpbXBs
ZW1lbnRlZC4KKyAgICBjYXNlIEdyb3dNZW1vcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighbV9pbmZvLm1lbW9yeSwgImdyb3dfbWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1v
cnkgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIpOworCisgICAgICAgIHVpbnQzMl90IHJlc2VydmVk
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihyZXNlcnZlZCks
ICJDYW4ndCBwYXJzZSByZXNlcnZlZCB2YXJVaW50MSBmb3IgZ3Jvd19tZW1vcnkiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihyZXNlcnZlZCAhPSAwLCAicmVzZXJ2ZWQgdmFyVWludDEg
Zm9yIGdyb3dfbWVtb3J5IG11c3QgYmUgemVybyIpOworCisgICAgICAgIEV4cHJlc3Npb25UeXBl
IGRlbHRhOworICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGRlbHRh
LCAiRXhwZWN0IGFuIGkzMiBhcmd1bWVudCB0byBncm93X21lbW9yeSBvbiB0aGUgc3RhY2siKTsK
KworICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZEdyb3dNZW1vcnkoZGVsdGEsIHJlc3VsdCkpOworICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKworICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIGNhc2UgQ3VycmVudE1lbW9yeTogeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFtX2luZm8ubWVtb3J5LCAiY3VycmVudF9tZW1vcnkgaXMgb25seSB2YWxpZCBpZiBhIG1lbW9y
eSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkIik7CiAKLSAgICBjYXNlIEN1cnJlbnRNZW1vcnk6Ci0g
ICAgICAgIHJldHVybiBmYWlsKCJub3QgeWV0IGltcGxlbWVudGVkOiBjdXJyZW50X21lbW9yeSIp
OyAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KKyAgICAgICAgdWludDMyX3QgcmVzZXJ2
ZWQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHJlc2VydmVk
KSwgIkNhbid0IHBhcnNlIHJlc2VydmVkIHZhclVpbnQxIGZvciBncm93X21lbW9yeSIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHJlc2VydmVkICE9IDAsICJyZXNlcnZlZCB2YXJVaW50
MSBmb3IgY3VycmVudF9tZW1vcnkgbXVzdCBiZSB6ZXJvIik7CisKKyAgICAgICAgRXhwcmVzc2lv
blR5cGUgcmVzdWx0OworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDdXJyZW50
TWVtb3J5KHJlc3VsdCkpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0
KTsKIAorICAgICAgICByZXR1cm4geyB9OworICAgIH0KICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTU4NCw2ICs2MDgsMTMgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VVbnJlYQogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAorICAgIGNhc2Ug
R3Jvd01lbW9yeToKKyAgICBjYXNlIEN1cnJlbnRNZW1vcnk6IHsKKyAgICAgICAgdWludDhfdCBy
ZXNlcnZlZDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShyZXNl
cnZlZCksICJDYW4ndCBwYXJzZSByZXNlcnZlZCB2YXJVaW50MSBmb3IgZ3Jvd19tZW1vcnkvY3Vy
cmVudF9tZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICAvLyBubyBp
bW1lZGlhdGUgY2FzZXMKICAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkK
ICAgICBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKENSRUFURV9DQVNFKQpAQCAtNTkxLDkgKzYyMiw3
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWEKICAgICBjYXNlIE5v
cDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFNlbGVjdDoKLSAgICBjYXNlIERyb3A6Ci0g
ICAgY2FzZSBHcm93TWVtb3J5OgotICAgIGNhc2UgQ3VycmVudE1lbW9yeTogeworICAgIGNhc2Ug
RHJvcDogewogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDM3ICszMCw4OSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewog
Ci1NZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCitz
dGF0aWNfYXNzZXJ0KHNpemVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKHNpemVfdCksICJXZSByZWx5
IG9uIGFsbG93aW5nIHRoZSBtYXhpbXVtIHNpemUgb2YgTWVtb3J5IHdlIG1hcCB0byBiZSAyXjMy
IHdoaWNoIGlzIGxhcmdlciB0aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50ZWdlciB0aGF0IHdlJ2Qg
cGFzcyB0byBtcHJvdGVjdCBpZiB0aGlzIGRpZG4ndCBob2xkLiIpOworCitNZW1vcnk6Ok1lbW9y
eShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wmIGZhaWxlZCkKICAg
ICA6IG1fbW9kZShNb2RlOjpCb3VuZHNDaGVja2luZykKLSAgICAsIG1fc2l6ZShpbml0aWFsLmJ5
dGVzKCkpCi0gICAgLCBtX2NhcGFjaXR5KG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdl
Q291bnQ6Om1heCgpLmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1f
bWF4aW11bShtYXhpbXVtKQorICAgICwgbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKICAgICAvLyBG
SVhNRTogSWYgd2UgYWRkIHNpZ25hbCBiYXNlZCBib3VuZHMgY2hlY2tpbmcgdGhlbiB3ZSBuZWVk
IGV4dHJhIHNwYWNlIGZvciBvdmVyZmxvdyBvbiBsb2FkLgogICAgIC8vIHNlZTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1
YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KIAotICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtX2NhcGFj
aXR5OworICAgIGZhaWxlZCA9IGZhbHNlOworCisgICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1heGlt
dW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdlQ291bnQ6Om1heCgpLmJ5dGVzKCk7CisgICAgaWYg
KCFtX21hcHBlZENhcGFjaXR5KSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ugc3BlY2lmaWVk
IGEgemVybyBhcyBtYXhpbXVtICh3aGljaCBtZWFucyB3ZSBhbHNvIGhhdmUgemVybyBhcyBpbml0
aWFsIHNpemUpLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NpemUgPT0gMCk7CisgICAgICAg
IG1fbWFwcGVkQ2FwYWNpdHkgPSAwOworICAgICAgICBtX21lbW9yeSA9IG51bGxwdHI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3
ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCi0gICAgdm9pZCogcmVzdWx0ID0gbW1hcChudWxscHRyLCBt
X21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAw
KTsKLSAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKKyAgICAvL3ZvaWQqIHJlc3VsdCA9
IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8
IE1BUF9BTk9OLCAtMSwgMCk7CisgICAgdm9pZCogcmVzdWx0OworICAgIGlmICgvKnJlc3VsdCA9
PSBNQVBfRkFJTEVEKi8gdHJ1ZSkgewogICAgICAgICAvLyBUcnkgYWdhaW4gd2l0aCBhIGRpZmZl
cmVudCBudW1iZXIuCiAgICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtX3NpemU7CisgICAgICAg
IGlmICghbV9tYXBwZWRDYXBhY2l0eSkgeworICAgICAgICAgICAgbV9tZW1vcnkgPSBudWxscHRy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgcmVzdWx0ID0gbW1h
cChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQ
X0FOT04sIC0xLCAwKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKQorICAgICAg
ICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7
CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKICAgICBBU1NFUlQobV9z
aXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgIGlmIChtcHJvdGVjdChyZXN1bHQsIG1fc2l6
ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAgICAgICAgbXVubWFwKHJlc3VsdCwgbV9t
YXBwZWRDYXBhY2l0eSk7Ci0gICAgICAgIHJldHVybjsKKyAgICB7CisgICAgICAgIGJvb2wgc3Vj
Y2VzcyA9ICFtcHJvdGVjdChyZXN1bHQsIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSwgUFJP
VF9SRUFEIHwgUFJPVF9XUklURSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOwog
ICAgIH0KIAogICAgIG1fbWVtb3J5ID0gcmVzdWx0OwogfQogCitib29sIE1lbW9yeTo6Z3JvdyhQ
YWdlQ291bnQgbmV3U2l6ZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX21lbW9yeSk7CisgICAg
UkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSkpOwor
CisgICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gbWF4aW11bSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICB1aW50NjRfdCBkZXNpcmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsK
KworICAgIGlmIChtX21lbW9yeSAmJiBkZXNpcmVkU2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KSB7
CisgICAgICAgIGJvb2wgc3VjY2VzcyA9ICFtcHJvdGVjdChzdGF0aWNfY2FzdDx1aW50OF90Kj4o
bV9tZW1vcnkpICsgbV9zaXplLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlc2lyZWRTaXplIC0gbV9z
aXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1
Y2Nlc3MpOworICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCBsZXQncyB0cnkgdG8gbWFrZSBzb21lIG5l
dyBtZW1vcnkuCisgICAgdm9pZCogbmV3TWVtb3J5ID0gbW1hcChudWxscHRyLCBkZXNpcmVkU2l6
ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDAp
OworICAgIGlmIChuZXdNZW1vcnkgPT0gTUFQX0ZBSUxFRCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKG1fbWVtb3J5KSB7CisgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVt
b3J5LCBtX3NpemUpOworICAgICAgICBtdW5tYXAobV9tZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkp
OworICAgIH0KKyAgICBtX21lbW9yeSA9IG5ld01lbW9yeTsKKyAgICBtX21hcHBlZENhcGFjaXR5
ID0gZGVzaXJlZFNpemU7CisgICAgbV9zaXplID0gZGVzaXJlZFNpemU7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIH0gLy8gbmFtZXNwYWNlIFdhc20KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgJKHJldmlzaW9uIDIxMDEy
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEJvdW5kc0NoZWNraW5nCiAg
ICAgfTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwg
UGFnZUNvdW50IG1heGltdW0pOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeShQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wmIGZhaWxlZCk7CiAKICAgICB+TWVt
b3J5KCkKICAgICB7CkBAIC01MiwzNSArNTIsMjUgQEAgcHVibGljOgogICAgICAgICAgICAgbXVu
bWFwKG1fbWVtb3J5LCBtX21hcHBlZENhcGFjaXR5KTsKICAgICB9CiAKLSAgICBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9Ci0KICAgICB2b2lkKiBtZW1vcnkoKSBj
b25zdCB7IHJldHVybiBtX21lbW9yeTsgfQotICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKyAgICB1aW50NjRfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CisgICAgUGFnZUNvdW50IHNpemVJblBhZ2VzKCkgY29uc3QgeyByZXR1cm4gUGFnZUNvdW50
Ojpmcm9tQnl0ZXMobV9zaXplKTsgfQogCiAgICAgTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9tb2RlOyB9CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5p
dGlhbDsgfQogICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVt
OyB9CiAKLSAgICBib29sIGdyb3codWludDMyX3QgbmV3U2l6ZSkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX21lbW9yeSk7Ci0gICAgICAgIGlmIChuZXdTaXplID4gbV9jYXBhY2l0eSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gIW1wcm90ZWN0KG1fbWVtb3J5
LCBuZXdTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLSAgICB9CisgICAgYm9vbCBncm93
KFBhZ2VDb3VudCk7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6ZSk7IH0KLQogICAgIAogcHJpdmF0ZToK
ICAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxwdHIgfTsKICAgICBNb2RlIG1fbW9kZTsKLSAgICB1
aW50MzJfdCBtX3NpemUgeyAwIH07Ci0gICAgdWludDMyX3QgbV9jYXBhY2l0eSB7IDAgfTsKICAg
ICBQYWdlQ291bnQgbV9pbml0aWFsOwogICAgIFBhZ2VDb3VudCBtX21heGltdW07CisgICAgdWlu
dDY0X3QgbV9zaXplIHsgMCB9OwogICAgIHVpbnQ2NF90IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDE0IEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKK0FMV0FZU19JTkxJTkUgSTMy
SW5pdEV4cHIgbWFrZUkzMkluaXRFeHByKHVpbnQ4X3Qgb3Bjb2RlLCB1aW50MzJfdCBiaXRzKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG9wY29kZSA9PSBJMzJDb25zdCB8fCBvcGNvZGUgPT0gR2V0
R2xvYmFsKTsKKyAgICBpZiAob3Bjb2RlID09IEkzMkNvbnN0KQorICAgICAgICByZXR1cm4gSTMy
SW5pdEV4cHI6OmZvckNvbnN0VmFsdWUoYml0cyk7CisgICAgcmV0dXJuIEkzMkluaXRFeHByOjpm
b3JHbG9iYWxJbXBvcnQoYml0cyk7Cit9CisKIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZSgpIC0+
IFJlc3VsdAogewogICAgIG1fcmVzdWx0Lm1vZHVsZSA9IHN0ZDo6bWFrZV91bmlxdWU8TW9kdWxl
SW5mb3JtYXRpb24+KCk7CkBAIC0yODksNyArMjk3LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBh
cnNlVGFibGUoKSAtPiBQYXJ0aQogCiBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxw
ZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYobV9yZXN1bHQubW9kdWxlLT5tZW1vcnksICJNZW1vcnkgc2VjdGlvbiBjYW5ub3QgZXhp
c3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
ISFtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSwgIk1lbW9yeSBzZWN0aW9uIGNhbm5vdCBleGlzdCBp
ZiBhbiBJbXBvcnQgaGFzIGEgbWVtb3J5Iik7CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VD
b3VudDsKICAgICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKQEAgLTMxOSw4ICszMjcsOCBA
QCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vCiAKIGF1dG8gTW9kdWxl
UGFyc2VyOjpwYXJzZU1lbW9yeSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICB1aW50OF90IGNv
dW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEoY291bnQpLCAiY2Fu
J3QgcGFyc2UgTWVtb3J5IHNlY3Rpb24ncyBjb3VudCIpOworICAgIHVpbnQzMl90IGNvdW50Owor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IHBh
cnNlIE1lbW9yeSBzZWN0aW9uJ3MgY291bnQiKTsKIAogICAgIGlmICghY291bnQpCiAgICAgICAg
IHJldHVybiB7IH07CkBAIC0zNDIsMzIgKzM1MCwxMiBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFy
c2VHbG9iYWwoKSAtPiBQYXJ0CiAgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKIAogICAgICAg
ICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKLSAg
ICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUs
IGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7Ci0KLSAgICAgICAgZ2xvYmFsLmlu
aXRpYWxpemF0aW9uVHlwZSA9IEdsb2JhbDo6RnJvbUV4cHJlc3Npb247CiAgICAgICAgIFR5cGUg
dHlwZUZvckluaXRPcGNvZGU7Ci0gICAgICAgIHN3aXRjaCAoaW5pdE9wY29kZSkgewotICAgICAg
ICBjYXNlIEkzMkNvbnN0OgotICAgICAgICAgICAgdHlwZUZvckluaXRPcGNvZGUgPSBJMzI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJNjRDb25zdDoKLSAgICAgICAgICAgIHR5
cGVGb3JJbml0T3Bjb2RlID0gSTY0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RjMyQ29uc3Q6Ci0gICAgICAgICAgICB0eXBlRm9ySW5pdE9wY29kZSA9IEYzMjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEY2NENvbnN0OgotICAgICAgICAgICAgdHlwZUZvcklu
aXRPcGNvZGUgPSBGNjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRHbG9i
YWw6Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbC5pbml0aWFsQml0c09y
SW1wb3J0TnVtYmVyID49IG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgZ2xv
YmFsSW5kZXgsICJ0aCBHbG9iYWwgdXNlcyBnZXRfZ2xvYmFsICIsIGdsb2JhbC5pbml0aWFsQml0
c09ySW1wb3J0TnVtYmVyLCAiIHdoaWNoIGV4Y2VlZHMgdGhlIGZpcnN0IGludGVybmFsIGdsb2Jh
bCAiLCBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwpOwotICAgICAgICAgICAg
dHlwZUZvckluaXRPcGNvZGUgPSBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHNbZ2xvYmFsLmluaXRp
YWxCaXRzT3JJbXBvcnROdW1iZXJdLnR5cGU7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJf
RkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9y
dE51bWJlciwgdHlwZUZvckluaXRPcGNvZGUpKTsKKyAgICAgICAgaWYgKGluaXRPcGNvZGUgPT0g
R2V0R2xvYmFsKQogICAgICAgICAgICAgZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9IEdsb2Jh
bDo6RnJvbUdsb2JhbEltcG9ydDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQot
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPSBH
bG9iYWw6OkZyb21FeHByZXNzaW9uOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVG
b3JJbml0T3Bjb2RlICE9IGdsb2JhbC50eXBlLCAiR2xvYmFsIGluaXRfZXhwciBvcGNvZGUgb2Yg
dHlwZSAiLCB0eXBlRm9ySW5pdE9wY29kZSwgIiBkb2Vzbid0IG1hdGNoIGdsb2JhbCdzIHR5cGUg
IiwgZ2xvYmFsLnR5cGUpOwogCiAgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFscy51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKQEAgLTQ1MSw3ICs0MzksOCBAQCBhdXRvIE1v
ZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFyCiAKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCksICJjYW4ndCBnZXQgIiwgZWxlbWVu
dE51bSwgInRoIEVsZW1lbnQgdGFibGUgaW5kZXgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRih0YWJsZUluZGV4LCAiRWxlbWVudCBzZWN0aW9uIGNhbiBvbmx5IGhhdmUgb25lIFRhYmxl
IGZvciBub3ciKTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIG9mZnNldCkpOworICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKKyAg
ICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUs
IG9mZnNldCwgaW5pdEV4cHJUeXBlKSk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5p
dE9wY29kZSAhPSBPcFR5cGU6OkkzMkNvbnN0LCAiRWxlbWVudCBzZWN0aW9uIGRvZXNuJ3Qgc3Vw
cG9ydCBub24taTMyIGluaXRfZXhwciBvcGNvZGUgZm9yIG5vdywgZ290ICIsIGluaXRPcGNvZGUp
OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleENvdW50
KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgZm9yIEVsZW1lbnQg
c2VjdGlvbiIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4Q291bnQgPT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRWxlbWVudCBzZWN0aW9uJ3MgIiwg
ZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGlzIHRvbyBiaWcgIiwgaW5kZXhDb3VudCk7CkBA
IC01MDksNyArNDk4LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRp
YQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHBy
KHVpbnQ4X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51bWJlcikgLT4gUGFydGlh
bFJlc3VsdAorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2Rl
LCB1aW50NjRfdCYgYml0c09ySW1wb3J0TnVtYmVyLCBUeXBlJiByZXN1bHRUeXBlKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChvcGNvZGUp
LCAiY2FuJ3QgZ2V0IGluaXRfZXhwcidzIG9wY29kZSIpOwogCkBAIC01MTgsNiArNTA3LDcgQEAg
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdAogICAgICAgICBpbnQzMl90
IGNvbnN0YW50OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDMyKGNv
bnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgaTMyLmNv
bnN0Iik7CiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IHN0YXRpY19jYXN0PHVpbnQ2NF90
Pihjb25zdGFudCk7CisgICAgICAgIHJlc3VsdFR5cGUgPSBJMzI7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtNTI1LDYgKzUxNSw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUluaXRF
eHByKHVpbnQ4X3QKICAgICAgICAgaW50NjRfdCBjb25zdGFudDsKICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJJbnQ2NChjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQg
dmFsdWUgZm9yIGluaXRfZXhwcidzIGk2NC5jb25zdCIpOwogICAgICAgICBiaXRzT3JJbXBvcnRO
dW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9IEk2NDsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC01MzIsNiArNTIzLDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNl
SW5pdEV4cHIodWludDhfdAogICAgICAgICB1aW50MzJfdCBjb25zdGFudDsKICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0
YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBmMzIuY29uc3QiKTsKICAgICAgICAgYml0c09ySW1w
b3J0TnVtYmVyID0gY29uc3RhbnQ7CisgICAgICAgIHJlc3VsdFR5cGUgPSBGMzI7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtNTM5LDYgKzUzMSw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpw
YXJzZUluaXRFeHByKHVpbnQ4X3QKICAgICAgICAgdWludDY0X3QgY29uc3RhbnQ7CiAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBj
b25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgZjY0LmNvbnN0Iik7CiAgICAgICAgIGJpdHNP
ckltcG9ydE51bWJlciA9IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBlID0gRjY0OwogICAg
ICAgICBicmVhazsKICAgICB9CiAKQEAgLTU1MSw3ICs1NDQsNyBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VJbml0RXhwcih1aW50OF90CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW1w
b3J0LmtpbmRJbmRleCA+PSBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwsICJn
ZXRfZ2xvYmFsIGltcG9ydCBraW5kIGluZGV4ICIsIGltcG9ydC5raW5kSW5kZXgsICIgZXhjZWVk
cyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRl
cm5hbEdsb2JhbCk7CiAKICAgICAgICAgQVNTRVJUKG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFsc1tp
bXBvcnQua2luZEluZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlKTsKLQorICAg
ICAgICByZXN1bHRUeXBlID0gbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzW2luZGV4XS50eXBlOwog
ICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBpbmRleDsKICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtNTg2LDE4ICs1NzksMTkgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgpIC0+
IFBhcnRpYQogCiAgICAgZm9yICh1aW50MzJfdCBzZWdtZW50TnVtYmVyID0gMDsgc2VnbWVudE51
bWJlciA8IHNlZ21lbnRDb3VudDsgKytzZWdtZW50TnVtYmVyKSB7CiAgICAgICAgIHVpbnQzMl90
IGluZGV4OwotICAgICAgICB1aW50NjRfdCBvZmZzZXQ7CisgICAgICAgIHVpbnQ2NF90IGluaXRF
eHByQml0czsKICAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwogICAgICAgICB1aW50MzJfdCBk
YXRhQnl0ZUxlbmd0aDsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihpbmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVu
dCdzIGluZGV4Iik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXgsIHNlZ21lbnRO
dW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgaGFzIG5vbi16ZXJvIGluZGV4ICIsIGluZGV4KTsKLSAg
ICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUs
IG9mZnNldCkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRPcGNvZGUgIT0gT3BU
eXBlOjpJMzJDb25zdCwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBoYXMgb3Bjb2Rl
ICIsIGluaXRPcGNvZGUsICIgZXhwZWN0ZWQgaTMyLmNvbnN0Iik7CisgICAgICAgIFR5cGUgaW5p
dEV4cHJUeXBlOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4
cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUgIT0gSTMyLCBzZWdtZW50TnVtYmVyLCAidGgg
RGF0YSBzZWdtZW50J3MgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5ndGgpLCAiY2Fu
J3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUgbGVu
Z3RoIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVMZW5ndGggPT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBzZWdtZW50TnVtYmVyLCAidGggRGF0
YSBzZWdtZW50J3MgZGF0YSBieXRlIGxlbmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3Ro
KTsKIAotICAgICAgICBTZWdtZW50KiBzZWdtZW50ID0gU2VnbWVudDo6Y3JlYXRlKG9mZnNldCwg
ZGF0YUJ5dGVMZW5ndGgpOworICAgICAgICBTZWdtZW50KiBzZWdtZW50ID0gU2VnbWVudDo6Y3Jl
YXRlKG1ha2VJMzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMpLCBkYXRhQnl0ZUxl
bmd0aCk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlZ21lbnQsICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50
IG9mIHNpemUgIiwgZGF0YUJ5dGVMZW5ndGgpOwogICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmRh
dGEudW5jaGVja2VkQXBwZW5kKFNlZ21lbnQ6OmFkb3B0UHRyKHNlZ21lbnQpKTsKICAgICAgICAg
Zm9yICh1aW50MzJfdCBkYXRhQnl0ZSA9IDA7IGRhdGFCeXRlIDwgZGF0YUJ5dGVMZW5ndGg7ICsr
ZGF0YUJ5dGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmgJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBw
cml2YXRlOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5
SGVscGVyKGJvb2wgaXNJbXBvcnQpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWws
IHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYs
IHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKIAogICAgIE1vZHVsZVBhcnNlclJlc3Vs
dCBtX3Jlc3VsdDsKICAgICBib29sIG1faGFzVGFibGUgeyBmYWxzZSB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAkocmV2aXNpb24gMjEwMTI5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MiwxMyArNDIsMjIgQEAgcHVibGljOgogICAgICAgICA6IG1fcGFnZUNvdW50KHBh
Z2VDb3VudCkKICAgICB7IH0KIAotICAgIHNpemVfdCBieXRlcygpIHsgcmV0dXJuIG1fcGFnZUNv
dW50ICogcGFnZVNpemU7IH0KKyAgICB1aW50NjRfdCBieXRlcygpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihtX3BhZ2VDb3VudCkgKiBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
cGFnZVNpemUpOyB9CisgICAgdWludDMyX3QgcGFnZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9w
YWdlQ291bnQ7IH0KIAogICAgIHN0YXRpYyBib29sIGlzVmFsaWQodWludDMyX3QgcGFnZUNvdW50
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHBhZ2VDb3VudCA8PSBtYXhQYWdlQ291bnQ7CiAgICAg
fQogCisgICAgc3RhdGljIFBhZ2VDb3VudCBmcm9tQnl0ZXModWludDY0X3QgYnl0ZXMpCisgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChieXRlcyAlIHBhZ2VTaXplID09IDApOworICAgICAg
ICB1aW50MzJfdCBudW1QYWdlcyA9IGJ5dGVzIC8gcGFnZVNpemU7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKFBhZ2VDb3VudDo6aXNWYWxpZChudW1QYWdlcykpOworICAgICAgICByZXR1cm4gUGFn
ZUNvdW50KG51bVBhZ2VzKTsKKyAgICB9CisKICAgICBzdGF0aWMgUGFnZUNvdW50IG1heCgpCiAg
ICAgewogICAgICAgICByZXR1cm4gUGFnZUNvdW50KG1heFBhZ2VDb3VudCk7CkBAIC02Miw5ICs3
MSwxOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgUGFnZUNvdW50JiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9wYWdlQ291bnQgPCBvdGhlci5tX3BhZ2VDb3VudDsgfQogICAg
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IFBhZ2VDb3VudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1f
cGFnZUNvdW50ID4gb3RoZXIubV9wYWdlQ291bnQ7IH0KICAgICBib29sIG9wZXJhdG9yPj0oY29u
c3QgUGFnZUNvdW50JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wYWdlQ291bnQgPj0gb3RoZXIu
bV9wYWdlQ291bnQ7IH0KKyAgICBQYWdlQ291bnQgb3BlcmF0b3IrKGNvbnN0IFBhZ2VDb3VudCYg
b3RoZXIpCisgICAgeworICAgICAgICBpZiAoc3VtT3ZlcmZsb3dzPHVpbnQzMl90PihtX3BhZ2VD
b3VudCwgb3RoZXIubV9wYWdlQ291bnQpKQorICAgICAgICAgICAgcmV0dXJuIFBhZ2VDb3VudCgp
OworICAgICAgICB1aW50MzJfdCBuZXdDb3VudCA9IG1fcGFnZUNvdW50ICsgb3RoZXIubV9wYWdl
Q291bnQ7CisgICAgICAgIGlmICghUGFnZUNvdW50Ojppc1ZhbGlkKG5ld0NvdW50KSkKKyAgICAg
ICAgICAgIHJldHVybiBQYWdlQ291bnQoKTsKKyAgICAgICAgcmV0dXJuIFBhZ2VDb3VudChuZXdD
b3VudCk7CisgICAgfQogCi1wcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
cGFnZVNpemUgPSA2NCAqIEtCOworcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQz
Ml90IG1heFBhZ2VDb3VudCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PigoMXVsbCA8PCAzMikgLyBw
YWdlU2l6ZSk7CiAKICAgICB1aW50MzJfdCBtX3BhZ2VDb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMyLDYgKzEzMiw4IEBAIHB1YmxpYzoKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250
cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0
YWNrKTsKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUo
Q29udHJvbEVudHJ5Jik7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRHcm93TWVt
b3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CiAKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxl
KCkgeyByZXR1cm4geyB9OyB9CiAKQEAgLTI5Miw2ICsyOTQsMTkgQEAgYXV0byBWYWxpZGF0ZTo6
YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIAogICAgIHJldHVybiBjaGVja0JyYW5jaFRhcmdldChk
ZWZhdWx0VGFyZ2V0LCBleHByZXNzaW9uU3RhY2spOwogfQogCithdXRvIFZhbGlkYXRlOjphZGRH
cm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBSZXN1bHQKK3sKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGRlbHRhICE9IEkzMiwgImdy
b3dfbWVtb3J5IHdpdGggbm9uLWkzMiBkZWx0YSIpOworICAgIHJlc3VsdCA9IEkzMjsKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIFZhbGlkYXRlOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAoreworICAgIHJlc3VsdCA9IEkzMjsKKyAgICByZXR1
cm4geyB9OworfQorCiBhdXRvIFZhbGlkYXRlOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5
LCBFeHByZXNzaW9uTGlzdCYgc3RhY2spIC0+IFJlc3VsdAogewogICAgIFdBU01fRkFJTF9JRl9I
RUxQRVJfRkFJTFModW5pZnkoc3RhY2ssIGVudHJ5LmNvbnRyb2xEYXRhKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4
LDggQEAKICAgICAgICAgImk2NC5zdG9yZSI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJtZW1v
cnkiLCAgICAgInZhbHVlIjogIDU1LCAicmV0dXJuIjogW10sICAgICAgICAgICAicGFyYW1ldGVy
IjogWyJhZGRyIiwgImk2NCJdLCAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFn
cyIsICAgICAgICAgICJ0eXBlIjogInZhcnVpbnQzMiJ9LCB7Im5hbWUiOiAib2Zmc2V0IiwgInR5
cGUiOiAidmFydWludDMyIn1dLCAiZGVzY3JpcHRpb24iOiAic3RvcmUgdG8gbWVtb3J5IiB9LAog
ICAgICAgICAiZjMyLnN0b3JlIjogICAgICAgICAgIHsgImNhdGVnb3J5IjogIm1lbW9yeSIsICAg
ICAidmFsdWUiOiAgNTYsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFk
ZHIiLCAiZjMyIl0sICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImZsYWdzIiwgICAg
ICAgICAgInR5cGUiOiAidmFydWludDMyIn0sIHsibmFtZSI6ICJvZmZzZXQiLCAidHlwZSI6ICJ2
YXJ1aW50MzIifV0sICJkZXNjcmlwdGlvbiI6ICJzdG9yZSB0byBtZW1vcnkiIH0sCiAgICAgICAg
ICJmNjQuc3RvcmUiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAibWVtb3J5IiwgICAgICJ2YWx1
ZSI6ICA1NywgInJldHVybiI6IFtdLCAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYWRkciIsICJm
NjQiXSwgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAgICAgICAgICAi
dHlwZSI6ICJ2YXJ1aW50MzIifSwgeyJuYW1lIjogIm9mZnNldCIsICJ0eXBlIjogInZhcnVpbnQz
MiJ9XSwgImRlc2NyaXB0aW9uIjogInN0b3JlIHRvIG1lbW9yeSIgfSwKLSAgICAgICAgImN1cnJl
bnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjogIDYz
LCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAicXVlcnkgdGhlIHNpemUgb2YgbWVtb3J5IiB9LAotICAgICAgICAiZ3Jv
d19tZW1vcnkiOiAgICAgICAgIHsgImNhdGVnb3J5IjogIm9wZXJhdGlvbiIsICAidmFsdWUiOiAg
NjQsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJwYXJhbWV0ZXIiOiBbInNpemUiXSwgICAgICAg
ICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJncm93IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKKyAgICAgICAgImN1
cnJlbnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjog
IDYzLCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFncyIsICJ0eXBlIjogInZhcnVp
bnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJx
dWVyeSB0aGUgc2l6ZSBvZiBtZW1vcnkiIH0sCisgICAgICAgICJncm93X21lbW9yeSI6ICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAib3BlcmF0aW9uIiwgICJ2YWx1ZSI6ICA2NCwgInJldHVybiI6IFsi
c2l6ZSJdLCAgICAgInBhcmFtZXRlciI6IFsic2l6ZSJdLCAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZ3JvdyB0aGUgc2l6ZSBvZiBt
ZW1vcnkiIH0sCiAgICAgICAgICJpMzIuYWRkIjogICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
YXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwNiwgInJldHVybiI6IFsiaTMyIl0sICAgICAgInBhcmFt
ZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAiYjNvcCI6
ICJBZGQiICAgICAgICAgIH0sCiAgICAgICAgICJpMzIuc3ViIjogICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwNywgInJldHVybiI6IFsiaTMyIl0sICAg
ICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVkaWF0ZSI6IFtd
LCAiYjNvcCI6ICJTdWIiICAgICAgICAgIH0sCiAgICAgICAgICJpMzIubXVsIjogICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwOCwgInJldHVybiI6IFsi
aTMyIl0sICAgICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVk
aWF0ZSI6IFtdLCAiYjNvcCI6ICJNdWwiICAgICAgICAgIH0sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2
aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKIAotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRl
ICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKQEAgLTU1LDYgKzU1LDE1IEBAIEpTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNz
ZW1ibHlNZW1vcnkKIHsKIH0KIAorSlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1ibHlN
ZW1vcnkoKQoreworICAgIGlmIChtX2J1ZmZlcikgeworICAgICAgICBBcnJheUJ1ZmZlckNvbnRl
bnRzIGR1bW15Q29udGVudHM7CisgICAgICAgIG1fYnVmZmVyLT50cmFuc2ZlclRvKGR1bW15Q29u
dGVudHMpOworICAgICAgICBtX2J1ZmZlciA9IG51bGxwdHI7CisgICAgfQorfQorCiBKU0FycmF5
QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogewogICAgIGlmIChtX2J1ZmZlcldyYXBwZXIpCkBAIC03MSw2ICs4
MCw0OCBAQCBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmCiAgICAgcmV0
dXJuIG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKIH0KIAorV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNz
ZW1ibHlNZW1vcnk6Omdyb3coRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBz
aG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBtX21lbW9yeS0+c2l6ZUluUGFnZXMoKTsK
KworICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKGRlbHRhKSkgeworICAgICAgICBp
ZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQorICAgICAgICAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IGV4cGVjdHMgdGhlIGRlbHRhIHRvIGJlIGEgdmFs
aWQgcGFnZSBjb3VudCIpKSk7CisgICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKKyAg
ICB9CisKKyAgICBXYXNtOjpQYWdlQ291bnQgbmV3U2l6ZSA9IG9sZFBhZ2VDb3VudCArIFdhc206
OlBhZ2VDb3VudChkZWx0YSk7CisgICAgaWYgKCFuZXdTaXplKSB7CisgICAgICAgIGlmIChzaG91
bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2Vi
QXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0aGUgZ3Jvd24gc2l6ZSB0byBiZSBhIHZhbGlk
IHBhZ2UgY291bnQiKSkpOworICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7CisgICAg
fQorCisgICAgaWYgKGRlbHRhKSB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fbWVtb3J5LT5n
cm93KG5ld1NpemUpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCisgICAgICAgICAgICAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7Cisg
ICAgICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIG91dCB0aGUgb2xkIGFycmF5IGJ1ZmZlciBiZWNhdXNl
IGl0IG1pZ2h0IG5vdyBiZSBwb2ludGluZworICAgIC8vIHRvIHN0YWxlIG1lbW9yeS4KKyAgICAv
LyBOZXV0ZXIgdGhlIG9sZCBhcnJheS4KKyAgICBpZiAobV9idWZmZXIpIHsKKyAgICAgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBkdW1teUNvbnRlbnRzOworICAgICAgICBtX2J1ZmZlci0+dHJhbnNm
ZXJUbyhkdW1teUNvbnRlbnRzKTsKKyAgICAgICAgbV9idWZmZXIgPSBudWxscHRyOworICAgICAg
ICBtX2J1ZmZlcldyYXBwZXIuY2xlYXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2xkUGFnZUNv
dW50OworfQorCiB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lv
biAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDExIEBAIHB1YmxpYzoKIAogICAg
IFdhc206Ok1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBK
U0FycmF5QnVmZmVyKiBidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopOworICAgIFdhc206
OlBhZ2VDb3VudCBncm93KEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhLCBib29sIHNob3VsZFRo
cm93RXhjZXB0aW9uc09uRmFpbHVyZSk7CiAKIHByb3RlY3RlZDoKICAgICBKU1dlYkFzc2VtYmx5
TWVtb3J5KFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4mJik7
CisgICAgfkpTV2ViQXNzZW1ibHlNZW1vcnkoKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFu
Y2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyOSw4ICsyMjksOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01l
bW9yeUltcG9ydCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9y
eSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5
Pihtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5t
ZW1vcnkubWF4aW11bSgpKTsKLSAgICAgICAgICAgIGlmICghbWVtb3J5LT5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICBib29sIGZhaWxlZDsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpNZW1vcnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4
aW11bSgpLCBmYWlsZWQpOworICAgICAgICAgICAgaWYgKGZhaWxlZCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKICAgICAgICAgICAgIGluc3RhbmNlLT5z
ZXRNZW1vcnkodm0sCiAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUo
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDggKzk2
LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB9
CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gc3Rk
OjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdl
Q291bnQpOwotICAgIGlmICghbWVtb3J5LT5pc1ZhbGlkKCkpCisgICAgYm9vbCBmYWlsZWQ7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1
ZTxXYXNtOjpNZW1vcnk+KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGZhaWxl
ZCk7CisgICAgaWYgKGZhaWxlZCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
KSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0
cnVjdHVyZSgpLCBXVEZNb3ZlKG1lbW9yeSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlIZWxwZXJzLmgiCiAKICNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5sdXQu
aCIKIApAQCAtNDQsMjEgKzQ1LDUxIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseU1lbW9y
eVByb3RvdHkKICBAZW5kCiAgKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKik7CitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4
ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9y
eVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQorQUxX
QVlTX0lOTElORSBKU1dlYkFzc2VtYmx5TWVtb3J5KiBnZXRNZW1vcnkoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5
TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihleGVj
LT50aGlzVmFsdWUoKSk7IAorICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHlu
YW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZhbHVlKTsgCiAgICAgaWYgKCFtZW1vcnkp
IHsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCAKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5LnByb3RvdHlwZS5idWZmZXIgZ2V0dGVyIGNh
bGxlZCB3aXRoIG5vbiBXZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8IHZhbHVlIikpKSk7CisgICAg
ICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIAorICAgICAgICAgICAgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5LnByb3RvdHlw
ZS5idWZmZXIgZ2V0dGVyIGNhbGxlZCB3aXRoIG5vbiBXZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8
IHZhbHVlIikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIHJldHVybiBt
ZW1vcnk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1v
cnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnkoZXhlYywgZXhlYy0+
dGhpc1ZhbHVlKCkpOyAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtZW1vcnktPmJ1ZmZlcihleGVjLT52bSgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBn
ZXRNZW1vcnkoZXhlYywgZXhlYy0+dGhpc1ZhbHVlKCkpOyAKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgCisgICAgdWludDMyX3QgZGVsdGEgPSB0b05vbldy
YXBwaW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9u
c09uRmFpbHVyZSA9IHRydWU7CisgICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+
Z3JvdyhleGVjLCBkZWx0YSwgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3VsdC5wYWdlQ291bnQoKSkpOworfQorCiBXZWJBc3NlbWJs
eU1lbW9yeVByb3RvdHlwZSogV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OmNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewogICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUo
dm0sIHN0cnVjdHVyZSk7CkBAIC03NSw2ICsxMDYsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlOjpmaW5pc2hDCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IEpTQ19OQVRJVkVfR0VUVEVSKCJidWZmZXIiLCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1
ZmZlciwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRI
T1VUX1RSQU5TSVRJT04oImdyb3ciLCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3csIERv
bnRFbnVtLCAxKTsKIH0KIAogV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OldlYkFzc2VtYmx5
TWVtb3J5UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
Niw4ICsxOTYsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAg
ICAgbV9tb2R1bGVFbnZpcm9ubWVudC5zZXQodm0sIHRoaXMsIG1vZHVsZUVudmlyb25tZW50KTsK
IH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFNjb3BlLCB0eXBlbmFtZSBOLCB0eXBlbmFtZSAuLi5B
cmdzPgotTkVWRVJfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGRhdGFTZWdtZW50RmFpbChFeGVjU3Rh
dGUqIHN0YXRlLCBWTSYgdm0sIFNjb3BlJiBzY29wZSwgTiBtZW1vcnlTaXplLCBOIHNlZ21lbnRT
aXplLCBOIG9mZnNldCwgQXJncy4uLiBhcmdzKQordGVtcGxhdGUgPHR5cGVuYW1lIFNjb3BlLCB0
eXBlbmFtZSBNLCB0eXBlbmFtZSBOLCB0eXBlbmFtZSAuLi5BcmdzPgorTkVWRVJfSU5MSU5FIHN0
YXRpYyBKU1ZhbHVlIGRhdGFTZWdtZW50RmFpbChFeGVjU3RhdGUqIHN0YXRlLCBWTSYgdm0sIFNj
b3BlJiBzY29wZSwgTSBtZW1vcnlTaXplLCBOIHNlZ21lbnRTaXplLCBOIG9mZnNldCwgQXJncy4u
LiBhcmdzKQogewogICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0
ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Ioc3RhdGUsIHZtLCBtYWtlU3RyaW5nKEFTQ0lJTGl0ZXJh
bCgiSW52YWxpZCBkYXRhIHNlZ21lbnQgaW5pdGlhbGl6YXRpb246IHNlZ21lbnQgb2YgIiksIFN0
cmluZzo6bnVtYmVyKHNlZ21lbnRTaXplKSwgQVNDSUlMaXRlcmFsKCIgYnl0ZXMgbWVtb3J5IG9m
ICIpLCBTdHJpbmc6Om51bWJlcihtZW1vcnlTaXplKSwgQVNDSUlMaXRlcmFsKCIgYnl0ZXMsIGF0
IG9mZnNldCAiKSwgU3RyaW5nOjpudW1iZXIob2Zmc2V0KSwgYXJncy4uLikpKTsKIH0KQEAgLTI1
OSwxNSArMjU5LDIyIEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQK
ICAgICAgICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoanNNZW1vcnkpOyAvLyBJdCBpcyBhIHZhbGlkYXRpb24gZXJyb3IgZm9yIGEgRGF0YSBzZWN0
aW9uIHRvIGV4aXN0IHdpdGhvdXQgYSBNZW1vcnkgc2VjdGlvbiBvciBpbXBvcnQuCiAgICAgICAg
ICAgICB1aW50OF90KiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihqc01lbW9y
eS0+bWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9y
eSk7Ci0gICAgICAgICAgICBhdXRvIHNpemVJbkJ5dGVzID0ganNNZW1vcnktPm1lbW9yeSgpLT5z
aXplKCk7CisgICAgICAgICAgICB1aW50NjRfdCBzaXplSW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1v
cnkoKS0+c2l6ZSgpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogZGF0YSkgewog
ICAgICAgICAgICAgICAgIGlmIChzZWdtZW50LT5zaXplSW5CeXRlcykgeworICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogd2hhdCdzIHRoZSBiZWhhYmlvciBoZXJlPyBEbyB3ZSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oaW50MzJfdCkgb3IgZG8gd2UgdGhyb3cgZXhjZXB0aW9uIG9uIDwgMD8K
KyAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0OworICAgICAgICAgICAgICAgICAg
ICBpZiAoc2VnbWVudC0+b2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBtX2luc3RhbmNlLT5sb2FkSTMyR2xvYmFsKHNlZ21lbnQtPm9mZnNl
dC5nbG9iYWxJbXBvcnRJbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2VnbWVudC0+b2Zmc2V0LmNvbnN0VmFsdWUoKTsK
KwogICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2l6ZUluQnl0ZXMgPCBzZWdtZW50
LT5zaXplSW5CeXRlcykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21l
bnRGYWlsKHN0YXRlLCB2bSwgc2NvcGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRl
cywgc2VnbWVudC0+b2Zmc2V0LCBBU0NJSUxpdGVyYWwoIiwgc2VnbWVudCBpcyB0b28gYmlnIikp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2VnbWVudC0+b2Zmc2V0ID4gc2l6
ZUluQnl0ZXMgLSBzZWdtZW50LT5zaXplSW5CeXRlcykpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZGF0YVNlZ21lbnRGYWlsKHN0YXRlLCB2bSwgc2NvcGUsIHNpemVJbkJ5dGVzLCBz
ZWdtZW50LT5zaXplSW5CeXRlcywgc2VnbWVudC0+b2Zmc2V0LCBBU0NJSUxpdGVyYWwoIiwgc2Vn
bWVudCB3cml0ZXMgb3V0c2lkZSBvZiBtZW1vcnkiKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1l
bWNweShtZW1vcnkgKyBzZWdtZW50LT5vZmZzZXQsICZzZWdtZW50LT5ieXRlKDApLCBzZWdtZW50
LT5zaXplSW5CeXRlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21l
bnRGYWlsKHN0YXRlLCB2bSwgc2NvcGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRl
cywgb2Zmc2V0LCBBU0NJSUxpdGVyYWwoIiwgc2VnbWVudCBpcyB0b28gYmlnIikpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkob2Zmc2V0ID4gc2l6ZUluQnl0ZXMgLSBzZWdtZW50
LT5zaXplSW5CeXRlcykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21l
bnRGYWlsKHN0YXRlLCB2bSwgc2NvcGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRl
cywgb2Zmc2V0LCBBU0NJSUxpdGVyYWwoIiwgc2VnbWVudCB3cml0ZXMgb3V0c2lkZSBvZiBtZW1v
cnkiKSk7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9yeSk7CisgICAg
ICAgICAgICAgICAgICAgIG1lbWNweShtZW1vcnkgKyBvZmZzZXQsICZzZWdtZW50LT5ieXRlKDAp
LCBzZWdtZW50LT5zaXplSW5CeXRlcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297748</attachid>
            <date>2016-12-24 14:01:46 -0800</date>
            <delta_ts>2016-12-25 12:50:33 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>55102</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS55YW1s
CShyZXZpc2lvbiAyMTAxMjkpCisrKyBKU1Rlc3RzL3dhc20ueWFtbAkod29ya2luZyBjb3B5KQpA
QCAtMTQzLDcgKzE0Myw3IEBACiAgIGNtZDogcnVuV2ViQXNzZW1ibHlTcGVjVGVzdCA6bm9ybWFs
CiAKIC0gcGF0aDogd2FzbS9zcGVjLXRlc3RzL21lbW9yeV90cmFwLndhc3QuanMKLSAgY21kOiBy
dW5XZWJBc3NlbWJseVNwZWNUZXN0IDpza2lwCisgIGNtZDogcnVuV2ViQXNzZW1ibHlTcGVjVGVz
dCA6bm9ybWFsCiAKIC0gcGF0aDogd2FzbS9zcGVjLXRlc3RzL25hbWVzLndhc3QuanMKICAgY21k
OiBydW5XZWJBc3NlbWJseVNwZWNUZXN0IDpza2lwCkluZGV4OiBKU1Rlc3RzL3dhc20vd2FzbS5q
c29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS93YXNtLmpzb24JKHJldmlzaW9uIDIxMDEy
OSkKKysrIEpTVGVzdHMvd2FzbS93YXNtLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4
LDggQEAKICAgICAgICAgImk2NC5zdG9yZSI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJtZW1v
cnkiLCAgICAgInZhbHVlIjogIDU1LCAicmV0dXJuIjogW10sICAgICAgICAgICAicGFyYW1ldGVy
IjogWyJhZGRyIiwgImk2NCJdLCAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFn
cyIsICAgICAgICAgICJ0eXBlIjogInZhcnVpbnQzMiJ9LCB7Im5hbWUiOiAib2Zmc2V0IiwgInR5
cGUiOiAidmFydWludDMyIn1dLCAiZGVzY3JpcHRpb24iOiAic3RvcmUgdG8gbWVtb3J5IiB9LAog
ICAgICAgICAiZjMyLnN0b3JlIjogICAgICAgICAgIHsgImNhdGVnb3J5IjogIm1lbW9yeSIsICAg
ICAidmFsdWUiOiAgNTYsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFk
ZHIiLCAiZjMyIl0sICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImZsYWdzIiwgICAg
ICAgICAgInR5cGUiOiAidmFydWludDMyIn0sIHsibmFtZSI6ICJvZmZzZXQiLCAidHlwZSI6ICJ2
YXJ1aW50MzIifV0sICJkZXNjcmlwdGlvbiI6ICJzdG9yZSB0byBtZW1vcnkiIH0sCiAgICAgICAg
ICJmNjQuc3RvcmUiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAibWVtb3J5IiwgICAgICJ2YWx1
ZSI6ICA1NywgInJldHVybiI6IFtdLCAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYWRkciIsICJm
NjQiXSwgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAgICAgICAgICAi
dHlwZSI6ICJ2YXJ1aW50MzIifSwgeyJuYW1lIjogIm9mZnNldCIsICJ0eXBlIjogInZhcnVpbnQz
MiJ9XSwgImRlc2NyaXB0aW9uIjogInN0b3JlIHRvIG1lbW9yeSIgfSwKLSAgICAgICAgImN1cnJl
bnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjogIDYz
LCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAicXVlcnkgdGhlIHNpemUgb2YgbWVtb3J5IiB9LAotICAgICAgICAiZ3Jv
d19tZW1vcnkiOiAgICAgICAgIHsgImNhdGVnb3J5IjogIm9wZXJhdGlvbiIsICAidmFsdWUiOiAg
NjQsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJwYXJhbWV0ZXIiOiBbInNpemUiXSwgICAgICAg
ICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJncm93IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKKyAgICAgICAgImN1
cnJlbnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjog
IDYzLCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFncyIsICJ0eXBlIjogInZhcnVp
bnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJx
dWVyeSB0aGUgc2l6ZSBvZiBtZW1vcnkiIH0sCisgICAgICAgICJncm93X21lbW9yeSI6ICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAib3BlcmF0aW9uIiwgICJ2YWx1ZSI6ICA2NCwgInJldHVybiI6IFsi
c2l6ZSJdLCAgICAgInBhcmFtZXRlciI6IFsic2l6ZSJdLCAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZ3JvdyB0aGUgc2l6ZSBvZiBt
ZW1vcnkiIH0sCiAgICAgICAgICJpMzIuYWRkIjogICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
YXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwNiwgInJldHVybiI6IFsiaTMyIl0sICAgICAgInBhcmFt
ZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAiYjNvcCI6
ICJBZGQiICAgICAgICAgIH0sCiAgICAgICAgICJpMzIuc3ViIjogICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwNywgInJldHVybiI6IFsiaTMyIl0sICAg
ICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVkaWF0ZSI6IFtd
LCAiYjNvcCI6ICJTdWIiICAgICAgICAgIH0sCiAgICAgICAgICJpMzIubXVsIjogICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwOCwgInJldHVybiI6IFsi
aTMyIl0sICAgICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVk
aWF0ZSI6IFtdLCAiYjNvcCI6ICJNdWwiICAgICAgICAgIH0sCkluZGV4OiBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvZ3Jvdy1tZW1vcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL2dyb3ctbWVtb3J5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9ncm93LW1lbW9yeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE4MCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CitpbXBvcnQg
KiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKKworY29uc3QgcGFnZVNpemUgPSA2NCAq
IDEwMjQ7Citjb25zdCBtYXhQYWdlQ291bnQgPSAoMioqMzIpIC8gcGFnZVNpemU7CisKK2Z1bmN0
aW9uIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIsIG1zZyA9ICIiKSB7CisgICAgY29uc3Qg
YmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGxldCB0aHJldyA9IGZhbHNl
OworICAgIHRyeSB7CisgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgaWYgKG1zZykKKyAgICAgICAgICAg
IGFzc2VydC50cnV0aHkoZS5tZXNzYWdlLmluZGV4T2YobXNnKSAhPT0gLTEpOworICAgICAgICB0
aHJldyA9IHRydWU7CisgICAgfQorICAgIGFzc2VydC50cnV0aHkodGhyZXcpOworfQorCit7Cisg
ICAgLy8gQ2FuJ3QgZ3Jvd19tZW1vcnkgaWYgbm8gbWVtb3J5IGlzIGRlZmluZWQuCisgICAgY29u
c3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQoKQorICAgICAgICAu
Q29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oe3JldDogInZvaWQiLCBwYXJhbXM6IFtdfSkK
KyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMjUpCisgICAgICAgICAgICAgICAgLkdyb3dNZW1v
cnkoMCkKKyAgICAgICAgICAgICAgICAuRHJvcCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpOworCisgICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRlciwgImdyb3dfbWVt
b3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIpOwor
fQorCit7CisgICAgLy8gQ2FuJ3QgY3VycmVudF9tZW1vcnkgaWYgbm8gbWVtb3J5IGlzIGRlZmlu
ZWQuCisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oe3JldDogInZvaWQiLCBw
YXJhbXM6IFtdfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMjUpCisgICAgICAgICAgICAg
ICAgLkN1cnJlbnRNZW1vcnkoMCkKKyAgICAgICAgICAgICAgICAuRHJvcCgpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVp
bGRlciwgImN1cnJlbnRfbWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5l
ZCBvciBpbXBvcnRlZCIpOworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRl
cigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0
OiAidm9pZCIsIHBhcmFtczogW119KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAg
ICAgICAgICAgICAgICAuR3Jvd01lbW9yeSgxKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQ
YXJzZShidWlsZGVyLCAicmVzZXJ2ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVtb3J5IG11c3QgYmUg
emVybyIpOworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAg
ICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5N
ZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVu
ZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0OiAidm9pZCIs
IHBhcmFtczogW119KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAgICAgICAgICAg
ICAgICAuQ3VycmVudE1lbW9yeSgxKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShi
dWlsZGVyLCAicmVzZXJ2ZWQgdmFyVWludDEgZm9yIGN1cnJlbnRfbWVtb3J5IG11c3QgYmUgemVy
byIpOworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAg
ICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1v
cnkoKS5Jbml0aWFsTWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgp
CisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0OiAidm9pZCIsIHBh
cmFtczogW119KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAgICAgICAgICAgICAg
ICAuQ3VycmVudE1lbW9yeSgweGZmZmZmZjAwKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQ
YXJzZShidWlsZGVyLCAiQ2FuJ3QgcGFyc2UgcmVzZXJ2ZWQgdmFyVWludDEgZm9yIGN1cnJlbnRf
bWVtb3J5Iik7Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisg
ICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
Lk1lbW9yeSgpLkluaXRpYWxNYXhQYWdlcygxLCAxKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCku
RW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKHtyZXQ6ICJ2b2lk
IiwgcGFyYW1zOiBbXX0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDI1KQorICAgICAgICAg
ICAgICAgIC5Hcm93TWVtb3J5KDB4ZmZmZmZmMDApCisgICAgICAgICAgICAgICAgLkRyb3AoKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGJpbmFyeVNob3VsZE5v
dFBhcnNlKGJ1aWxkZXIsICJDYW4ndCBwYXJzZSByZXNlcnZlZCB2YXJVaW50MSBmb3IgZ3Jvd19t
ZW1vcnkiKTsKK30KKworeworICAgIGNvbnN0IG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRpYWw6
IDIwLCBtYXhpbXVtOiA1MH07CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQor
ICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJt
ZW1vcnkiLCBtZW1vcnlEZXNjcmlwdGlvbikuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5k
KCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIs
IHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIifSkKKyAgICAgICAgICAgICAgICAuR2V0TG9j
YWwoMCkKKyAgICAgICAgICAgICAgICAuR3Jvd01lbW9yeSgwKQorICAgICAgICAgICAgICAgIC5S
ZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0
IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7bWVtb3J5OiBuZXcgV2ViQXNzZW1ibHku
TWVtb3J5KG1lbW9yeURlc2NyaXB0aW9uKX19KTsKKyAgICBsZXQgY3VycmVudFBhZ2VTaXplID0g
bWVtb3J5RGVzY3JpcHRpb24uaW5pdGlhbDsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbW9y
eURlc2NyaXB0aW9uLm1heGltdW0gLSBtZW1vcnlEZXNjcmlwdGlvbi5pbml0aWFsOyBpKyspIHsK
KyAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDEpLCBjdXJyZW50UGFnZVNp
emUpOworICAgICAgICArK2N1cnJlbnRQYWdlU2l6ZTsKKyAgICB9CisKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0
cy5mb28oMSksIC0xKTsKKyAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDAp
LCBjdXJyZW50UGFnZVNpemUpOworICAgIH0KK30KKworeworICAgIGNvbnN0IG1lbW9yeURlc2Ny
aXB0aW9uID0ge2luaXRpYWw6IDIwLCBtYXhpbXVtOiAxMDB9OworICAgIGNvbnN0IGJ1aWxkZXIg
PSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0
KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5RGVzY3JpcHRpb24pLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogW10sIHJldDogImkzMiJ9KQorICAgICAgICAg
ICAgICAgIC5DdXJyZW50TWVtb3J5KDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5
KG1lbW9yeURlc2NyaXB0aW9uKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHttZW1vcnl9fSk7CisgICAgbGV0IGN1cnJlbnRQYWdl
U2l6ZSA9IG1lbW9yeURlc2NyaXB0aW9uLmluaXRpYWw7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBtZW1vcnlEZXNjcmlwdGlvbi5tYXhpbXVtIC0gbWVtb3J5RGVzY3JpcHRpb24uaW5pdGlhbDsg
aSsrKSB7CisgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygpLCBjdXJyZW50
UGFnZVNpemUpOworICAgICAgICArK2N1cnJlbnRQYWdlU2l6ZTsKKyAgICAgICAgbWVtb3J5Lmdy
b3coMSk7CisgICAgfQorfQpJbmRleDogSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCShub25l
eGlzdGVudCkKKysrIEpTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzNSBAQAoraW1wb3J0IHsgZXEgYXMgYXNzZXJ0RXEgfSBmcm9tICIu
Li9hc3NlcnQuanMiOworY29uc3QgcGFnZVNpemUgPSA2NCoxMDI0OworCitsZXQgYnVmZmVycyA9
IFtdOworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAgIGNvbnN0IG1heCA9IDU7
CisgICAgbGV0IHBhZ2VDb3VudCA9IDE7CisgICAgbGV0IHggPSBuZXcgV2ViQXNzZW1ibHkuTWVt
b3J5KHtpbml0aWFsOiAxLCBtYXhpbXVtOiBtYXh9KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IChtYXggLSAxKTsgaSsrKSB7CisgICAgICAgIGxldCBpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJh
eSh4LmJ1ZmZlcik7CisKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlU2l6ZTsgaSsr
KSB7CisgICAgICAgICAgICBhc3NlcnRFcShpbnQ4QXJyYXlbcGFnZVNpemUqKHBhZ2VDb3VudCAt
IDEpICsgaV0sIDApOworICAgICAgICAgICAgaW50OEFycmF5W3BhZ2VTaXplKihwYWdlQ291bnQg
LSAxKSArIGldID0gcGFnZUNvdW50OworICAgICAgICB9CisKKyAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBwYWdlQ291bnQ7IGkrKykgeworICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGog
PCBwYWdlU2l6ZTsgaisrKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXEoaW50OEFycmF5W2kg
KiBwYWdlU2l6ZSArIGpdLCBpICsgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBsZXQgYnVmZmVyID0geC5idWZmZXI7CisgICAgICAgIGFzc2VydEVxKGJ1ZmZlci5ieXRl
TGVuZ3RoLCBwYWdlQ291bnQgKiBwYWdlU2l6ZSk7CisgICAgICAgIGJ1ZmZlcnMucHVzaChidWZm
ZXIpOworICAgICAgICBsZXQgcHJldmlvdXNQYWdlU2l6ZSA9IHguZ3JvdygxKTsKKyAgICAgICAg
YXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDApOworICAgICAgICBhc3NlcnRFcShwcmV2aW91
c1BhZ2VTaXplLCBwYWdlQ291bnQpOworICAgICAgICArK3BhZ2VDb3VudDsKKyAgICB9Cit9CisK
K2ZvciAobGV0IGJ1ZmZlciBvZiBidWZmZXJzKSB7CisgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVM
ZW5ndGgsIDApOworfQpJbmRleDogSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X21lbW9yeS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5LmpzCShyZXZpc2lv
biAyMTAxMjkpCisrKyBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5LmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotLy8gRklYTUU6IHVzZSB0aGUgYXNzZXJ0IGxpYnJhcnk6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU2ODQKIGltcG9ydCBC
dWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4u
L2Fzc2VydC5qcyc7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMTAxMjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYz
OSw4ICsyNjM5LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3Jt
YXRpb24gPSBwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOwogCiAgICAgaWYgKCEhbW9kdWxl
SW5mb3JtYXRpb24tPm1lbW9yeSkgewotICAgICAgICBtZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdhc206Ok1lbW9yeT4obW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5pbml0aWFsKCksIG1vZHVs
ZUluZm9ybWF0aW9uLT5tZW1vcnkubWF4aW11bSgpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bWVtb3J5LT5pc1ZhbGlkKCkpOworICAgICAgICBib29sIGZhaWxlZDsKKyAgICAgICAgbWVtb3J5
ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+KG1vZHVsZUluZm9ybWF0aW9uLT5tZW1v
cnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1heGltdW0oKSwgZmFpbGVk
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCk7CiAgICAgICAgIG1lbW9yeUJ5dGVz
ID0gbWVtb3J5LT5tZW1vcnkoKTsKICAgICAgICAgbWVtb3J5U2l6ZSA9IG1lbW9yeS0+c2l6ZSgp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjEw
MTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzAyLDcgKzMwMiw3IEBAIHB1YmxpYzoKICAgICBFeGVjU3RhdGUqIHRvcENhbGxGcmFt
ZTsKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsK
ICAgICB2b2lkKiB0b3BXYXNtTWVtb3J5UG9pbnRlcjsKLSAgICB1aW50MzJfdCB0b3BXYXNtTWVt
b3J5U2l6ZTsKKyAgICB1aW50NjRfdCB0b3BXYXNtTWVtb3J5U2l6ZTsKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBzdHJ1Y3R1cmVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0
dXJlUmFyZURhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yU3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzIsNiArMTcyLDggQEAgcHVibGljOgogICAgIC8vIE1lbW9yeQogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkR3Jvd01lbW9yeShFeHBy
ZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKIAogICAgIC8vIEJhc2ljIG9wZXJhdG9ycwogICAgIHRlbXBsYXRlPE9wVHlwZT4K
QEAgLTMzMiw2ICszMzQsODEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgp
IC0+IAogICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01l
bW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIGludDMyX3QgKCpncm93TWVtb3J5KSAoRXhlY1N0YXRlKiwgaW50
MzJfdCkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsg
CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlID0gdm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlOworICAgICAgICBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiB3YXNtTWVtb3J5ID0gaW5zdGFuY2UtPm1lbW9yeSgpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVCh3YXNtTWVtb3J5KTsgLy8gVGhpcyB3b3VsZCBmYWlsIHZhbGlkYXRpb24gb3Ro
ZXJ3aXNlLgorCisgICAgICAgIGlmIChkZWx0YSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7
CisKKyAgICAgICAgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSBmYWxzZTsK
KyAgICAgICAgUGFnZUNvdW50IHJlc3VsdCA9IHdhc21NZW1vcnktPmdyb3coZXhlYywgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGRlbHRhKSwgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgdm0udG9wV2FzbU1l
bW9yeVBvaW50ZXIgPSB3YXNtTWVtb3J5LT5tZW1vcnkoKS0+bWVtb3J5KCk7CisgICAgICAgIHZt
LnRvcFdhc21NZW1vcnlTaXplID0gd2FzbU1lbW9yeS0+bWVtb3J5KCktPnNpemUoKTsKKworICAg
ICAgICByZXR1cm4gcmVzdWx0LnBhZ2VDb3VudCgpOworICAgIH07CisKKyAgICByZXN1bHQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdp
bigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1f
cHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ3Jvd01lbW9yeSkpLAorICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQ
b2ludGVyLCBPcmlnaW4oKSksIGRlbHRhKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKG1faW5mby5o
YXNNZW1vcnkoKSk7CisgICAgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24qIG1lbW9yeSA9ICZtX2lu
Zm8ubWVtb3J5OworCisgICAgVmVjdG9yPFZhbHVlKj4gYXJndW1lbnRzOworCisgICAgVmFsdWUq
IGJhc2VNZW1vcnkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAmbV92bS50b3BXYXNtTWVtb3J5
UG9pbnRlcikpOworICAgIGFyZ3VtZW50cy5hcHBlbmQoYmFzZU1lbW9yeSk7CisKKyAgICBWYWx1
ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgSW50NjQsIE9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksICZtX3ZtLnRvcFdhc21NZW1vcnlTaXpl
KSk7CisgICAgZm9yIChhdXRvIGluZm8gOiBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVS
ZWdpc3RlcnMpIHsKKyAgICAgICAgVmFsdWUqIHNpemVWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU3ViLCBPcmlnaW4oKSwgc2l6ZSwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIGluZm8uc2l6ZU9m
ZnNldCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHNpemVWYWx1ZSk7CisgICAgfQorCisg
ICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOwor
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgIHBhdGNocG9pbnQtPmFwcGVuZFZl
Y3RvcldpdGhSZXAoYXJndW1lbnRzLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKworICAgIC8v
IEZJWE1FOiB3b3VsZCBpdCB3b3JrIGp1c3QgdG8gbWFrZSB0aGVzZSB0aGluZ3MgQ29uc3RyYWlu
ZWRWYWx1ZXM/CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFttZW1vcnldIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyAgICAgICAgCisgICAgICAgIGppdC5tb3ZlKHBhcmFtc1swXS5ncHIoKSwgbWVtb3J5LT5w
aW5uZWRSZWdpc3RlcnMoKS5iYXNlTWVtb3J5UG9pbnRlcik7CisgICAgICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICBqaXQubW92ZShwYXJhbXNbMSArIGldLmdwcigpLCBtZW1v
cnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKTsKKyAg
ICB9KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ3Vy
cmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAmbV92bS50b3BXYXNtTWVt
b3J5U2l6ZSkpOworCisgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBVRGl2LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHNpemUsIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBQ
YWdlQ291bnQ6OnBhZ2VTaXplKSk7CisKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBPcmlnaW4oKSwgbnVtUGFnZXMpOworCisgICAg
cmV0dXJuIHsgfTsKK30KKwogYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NF
UlQobV9sb2NhbHNbaW5kZXhdKTsKQEAgLTkwMiwxMiArOTc5LDEyIEBAIHN0YXRpYyB2b2lkIGNy
ZWF0ZUpTVG9XYXNtV3JhcHBlcihWTSYgdm0KICAgICBpZiAoISFtZW1vcnkpIHsKICAgICAgICAg
YmFzZU1lbW9yeSA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIElu
dDY0LCBPcmlnaW4oKSwKICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksICZ2bS50b3BXYXNtTWVtb3J5UG9pbnRlcikpOwotICAgICAgICBW
YWx1ZSogc2l6ZSA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIElu
dDMyLCBPcmlnaW4oKSwKKyAgICAgICAgVmFsdWUqIHNpemUgPSBibG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksCiAgICAgICAgICAgICBibG9j
ay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmdm0udG9wV2FzbU1l
bW9yeVNpemUpKTsKICAgICAgICAgc2l6ZXMucmVzZXJ2ZUNhcGFjaXR5KG1lbW9yeS5waW5uZWRS
ZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byBpbmZv
IDogbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpIHsKICAgICAgICAgICAg
IHNpemVzLmFwcGVuZChibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIG9yaWdpbiwg
c2l6ZSwKLSAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
Yywgb3JpZ2luLCBpbmZvLnNpemVPZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgYmxvY2stPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgaW5mby5zaXplT2Zmc2V0KSkpOwog
ICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Rm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Rm9ybWF0LmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotU2VnbWVudCogU2VnbWVudDo6Y3JlYXRl
KHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZUluQnl0ZXMpCitTZWdtZW50KiBTZWdtZW50
OjpjcmVhdGUoSTMySW5pdEV4cHIgb2Zmc2V0LCB1aW50MzJfdCBzaXplSW5CeXRlcykKIHsKICAg
ICBhdXRvIGFsbG9jYXRlZCA9IHRyeUZhc3RDYWxsb2Moc2l6ZW9mKFNlZ21lbnQpICsgc2l6ZUlu
Qnl0ZXMsIDEpOwogICAgIFNlZ21lbnQqIHNlZ21lbnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZvcm1hdC5oCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCwxNiArMTM4
LDUxIEBAIHN0cnVjdCBGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkgewogICAgIHNpemVfdCBlbmQ7
CiB9OwogCitjbGFzcyBJMzJJbml0RXhwciB7CisgICAgZW51bSBUeXBlIDogdWludDhfdCB7Cisg
ICAgICAgIEdsb2JhbCwKKyAgICAgICAgQ29uc3QKKyAgICB9OworCisgICAgSTMySW5pdEV4cHIo
VHlwZSB0eXBlLCB1aW50MzJfdCBiaXRzKQorICAgICAgICA6IG1fYml0cyhiaXRzKQorICAgICAg
ICAsIG1fdHlwZSh0eXBlKQorICAgIHsgfQorCitwdWJsaWM6CisgICAgSTMySW5pdEV4cHIoKSA9
IGRlbGV0ZTsKKworICAgIHN0YXRpYyBJMzJJbml0RXhwciBmb3JHbG9iYWxJbXBvcnQodWludDMy
X3QgZ2xvYmFsSW1wb3J0TnVtYmVyKSB7IHJldHVybiBJMzJJbml0RXhwcihHbG9iYWwsIGdsb2Jh
bEltcG9ydE51bWJlcik7IH0KKyAgICBzdGF0aWMgSTMySW5pdEV4cHIgZm9yQ29uc3RWYWx1ZSh1
aW50MzJfdCBjb25zdFZhbHVlKSB7IHJldHVybiBJMzJJbml0RXhwcihDb25zdCwgY29uc3RWYWx1
ZSk7IH0KKworICAgIGJvb2wgaXNDb25zdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBDb25z
dDsgfQorICAgIGJvb2wgaXNHbG9iYWxJbXBvcnQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0g
R2xvYmFsOyB9CisgICAgdWludDMyX3QgY29uc3RWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpc0NvbnN0KCkpOworICAgICAgICByZXR1cm4gbV9iaXRzOworICAg
IH0KKyAgICB1aW50MzJfdCBnbG9iYWxJbXBvcnRJbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpc0dsb2JhbEltcG9ydCgpKTsKKyAgICAgICAgcmV0dXJuIG1fYml0
czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9iaXRzOworICAgIFR5cGUgbV90
eXBlOworfTsKKwogc3RydWN0IFNlZ21lbnQgewotICAgIHVpbnQzMl90IG9mZnNldDsKICAgICB1
aW50MzJfdCBzaXplSW5CeXRlczsKKyAgICBJMzJJbml0RXhwciBvZmZzZXQ7CiAgICAgLy8gQnl0
ZXMgYXJlIGFsbG9jYXRlZCBhdCB0aGUgZW5kLgogICAgIHVpbnQ4X3QmIGJ5dGUodWludDMyX3Qg
cG9zKQogICAgIHsKICAgICAgICAgQVNTRVJUKHBvcyA8IHNpemVJbkJ5dGVzKTsKLSAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihyZWludGVycHJldF9jYXN0PGNoYXIq
Pih0aGlzKSArIHNpemVvZihvZmZzZXQpICsgc2l6ZW9mKHNpemVJbkJ5dGVzKSArIHBvcyk7Cisg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4odGhpcykgKyBzaXplb2YoU2VnbWVudCkgKyBwb3MpOwogICAgIH0KLSAgICBzdGF0
aWMgU2VnbWVudCogY3JlYXRlKHVpbnQzMl90LCB1aW50MzJfdCk7CisgICAgc3RhdGljIFNlZ21l
bnQqIGNyZWF0ZShJMzJJbml0RXhwciwgdWludDMyX3QpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koU2VnbWVudCopOwogICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPFNlZ21lbnQsIGRlY2x0
eXBlKCZTZWdtZW50OjpkZXN0cm95KT4gUHRyOwogICAgIHN0YXRpYyBQdHIgYWRvcHRQdHIoU2Vn
bWVudCopOwpAQCAtMTkxLDcgKzIyNiwxMCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewog
ICAgIFZlY3RvcjxJbXBvcnQ+IGltcG9ydHM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBp
bXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4
PiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKKworICAgIGJvb2wgaGFzTWVtb3J5
KCkgY29uc3QgeyByZXR1cm4gISFtZW1vcnk7IH0KICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1v
cnk7CisKICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFZlY3RvcjxTZWdtZW50OjpQdHI+
IGRhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJz
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3OCwxMiArNDc4LDM2
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKLSAgICBjYXNlIEdyb3dNZW1vcnk6Ci0gICAgICAgIHJldHVybiBm
YWlsKCJub3QgeWV0IGltcGxlbWVudGVkOiBncm93X21lbW9yeSIpOyAvLyBGSVhNRTogTm90IHll
dCBpbXBsZW1lbnRlZC4KKyAgICBjYXNlIEdyb3dNZW1vcnk6IHsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighbV9pbmZvLm1lbW9yeSwgImdyb3dfbWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYg
YSBtZW1vcnkgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIpOworCisgICAgICAgIHVpbnQ4X3QgcmVz
ZXJ2ZWQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmVzZXJ2
ZWQpLCAiQ2FuJ3QgcGFyc2UgcmVzZXJ2ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVtb3J5Iik7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYocmVzZXJ2ZWQgIT0gMCwgInJlc2VydmVkIHZhclVp
bnQxIGZvciBncm93X21lbW9yeSBtdXN0IGJlIHplcm8iKTsKKworICAgICAgICBFeHByZXNzaW9u
VHlwZSBkZWx0YTsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhk
ZWx0YSwgIkV4cGVjdCBhbiBpMzIgYXJndW1lbnQgdG8gZ3Jvd19tZW1vcnkgb24gdGhlIHN0YWNr
Iik7CisKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OworICAgICAgICBXQVNNX1RSWV9B
RERfVE9fQ09OVEVYVChhZGRHcm93TWVtb3J5KGRlbHRhLCByZXN1bHQpKTsKKyAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBjYXNlIEN1cnJlbnRNZW1vcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighbV9pbmZvLm1lbW9yeSwgImN1cnJlbnRfbWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBt
ZW1vcnkgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIpOwogCi0gICAgY2FzZSBDdXJyZW50TWVtb3J5
OgotICAgICAgICByZXR1cm4gZmFpbCgibm90IHlldCBpbXBsZW1lbnRlZDogY3VycmVudF9tZW1v
cnkiKTsgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgICAgICAgIHVpbnQ4X3QgcmVz
ZXJ2ZWQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmVzZXJ2
ZWQpLCAiQ2FuJ3QgcGFyc2UgcmVzZXJ2ZWQgdmFyVWludDEgZm9yIGN1cnJlbnRfbWVtb3J5Iik7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYocmVzZXJ2ZWQgIT0gMCwgInJlc2VydmVkIHZh
clVpbnQxIGZvciBjdXJyZW50X21lbW9yeSBtdXN0IGJlIHplcm8iKTsKKworICAgICAgICBFeHBy
ZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEN1
cnJlbnRNZW1vcnkocmVzdWx0KSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChy
ZXN1bHQpOwogCisgICAgICAgIHJldHVybiB7IH07CisgICAgfQogICAgIH0KIAogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTg0LDYgKzYwOCwxMyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZVVucmVhCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAg
Y2FzZSBHcm93TWVtb3J5OgorICAgIGNhc2UgQ3VycmVudE1lbW9yeTogeworICAgICAgICB1aW50
OF90IHJlc2VydmVkOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQx
KHJlc2VydmVkKSwgIkNhbid0IHBhcnNlIHJlc2VydmVkIHZhclVpbnQxIGZvciBncm93X21lbW9y
eS9jdXJyZW50X21lbW9yeSIpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIC8v
IG5vIGltbWVkaWF0ZSBjYXNlcwogICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKENSRUFURV9D
QVNFKQogICAgIEZPUl9FQUNIX1dBU01fVU5BUllfT1AoQ1JFQVRFX0NBU0UpCkBAIC01OTEsOSAr
NjIyLDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYQogICAgIGNh
c2UgTm9wOgogICAgIGNhc2UgUmV0dXJuOgogICAgIGNhc2UgU2VsZWN0OgotICAgIGNhc2UgRHJv
cDoKLSAgICBjYXNlIEdyb3dNZW1vcnk6Ci0gICAgY2FzZSBDdXJyZW50TWVtb3J5OiB7CisgICAg
Y2FzZSBEcm9wOiB7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCShyZXZpc2lvbiAyMTAxMjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMzcgKzMwLDg5IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKLU1lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11
bSkKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldl
IHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJl
IDJeMzIgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQg
d2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7CisKK01lbW9yeTo6
TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCYgZmFpbGVk
KQogICAgIDogbV9tb2RlKE1vZGU6OkJvdW5kc0NoZWNraW5nKQotICAgICwgbV9zaXplKGluaXRp
YWwuYnl0ZXMoKSkKLSAgICAsIG1fY2FwYWNpdHkobWF4aW11bSA/IG1heGltdW0uYnl0ZXMoKSA6
IFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKSkKICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAg
ICwgbV9tYXhpbXVtKG1heGltdW0pCisgICAgLCBtX3NpemUoaW5pdGlhbC5ieXRlcygpKQogICAg
IC8vIEZJWE1FOiBJZiB3ZSBhZGQgc2lnbmFsIGJhc2VkIGJvdW5kcyBjaGVja2luZyB0aGVuIHdl
IG5lZWQgZXh0cmEgc3BhY2UgZm9yIG92ZXJmbG93IG9uIGxvYWQuCiAgICAgLy8gc2VlOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIW1heGltdW0gfHwgbWF4aW11bSA+PSBpbml0aWFsKTsgLy8gVGhpcyBzaG91bGQg
YmUgZ3VhcmFudGVlZCBieSBvdXIgY2FsbGVyLgogCi0gICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1f
Y2FwYWNpdHk7CisgICAgZmFpbGVkID0gZmFsc2U7CisKKyAgICBtX21hcHBlZENhcGFjaXR5ID0g
bWF4aW11bSA/IG1heGltdW0uYnl0ZXMoKSA6IFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKTsKKyAg
ICBpZiAoIW1fbWFwcGVkQ2FwYWNpdHkpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBzcGVj
aWZpZWQgYSB6ZXJvIGFzIG1heGltdW0gKHdoaWNoIG1lYW5zIHdlIGFsc28gaGF2ZSB6ZXJvIGFz
IGluaXRpYWwgc2l6ZSkuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fc2l6ZSA9PSAwKTsKKyAg
ICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IDA7CisgICAgICAgIG1fbWVtb3J5ID0gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNl
IGlmIHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKLSAgICB2b2lkKiByZXN1bHQgPSBtbWFwKG51bGxw
dHIsIG1fbWFwcGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwg
LTEsIDApOwotICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgeworICAgIC8vdm9pZCogcmVz
dWx0ID0gbW1hcChudWxscHRyLCBtX21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklW
QVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgICB2b2lkKiByZXN1bHQ7CisgICAgaWYgKC8qcmVz
dWx0ID09IE1BUF9GQUlMRUQqLyB0cnVlKSB7CiAgICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEg
ZGlmZmVyZW50IG51bWJlci4KICAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1fc2l6ZTsKKyAg
ICAgICAgaWYgKCFtX21hcHBlZENhcGFjaXR5KSB7CisgICAgICAgICAgICBtX21lbW9yeSA9IG51
bGxwdHI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICByZXN1bHQg
PSBtbWFwKG51bGxwdHIsIG1fbWFwcGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUg
fCBNQVBfQU5PTiwgLTEsIDApOwotICAgICAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpCisg
ICAgICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICAgICAgZmFpbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEFTU0VS
VChtX3NpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSk7Ci0gICAgaWYgKG1wcm90ZWN0KHJlc3VsdCwg
bV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgewotICAgICAgICBtdW5tYXAocmVzdWx0
LCBtX21hcHBlZENhcGFjaXR5KTsKLSAgICAgICAgcmV0dXJuOworICAgIHsKKyAgICAgICAgYm9v
bCBzdWNjZXNzID0gIW1wcm90ZWN0KHJlc3VsdCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUp
LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vz
cyk7CiAgICAgfQogCiAgICAgbV9tZW1vcnkgPSByZXN1bHQ7CiB9CiAKK2Jvb2wgTWVtb3J5Ojpn
cm93KFBhZ2VDb3VudCBuZXdTaXplKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fbWVtb3J5KTsK
KyAgICBSRUxFQVNFX0FTU0VSVChuZXdTaXplID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXpl
KSk7CisKKyAgICBpZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiBtYXhpbXVtKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHVpbnQ2NF90IGRlc2lyZWRTaXplID0gbmV3U2l6ZS5ieXRl
cygpOworCisgICAgaWYgKG1fbWVtb3J5ICYmIGRlc2lyZWRTaXplIDw9IG1fbWFwcGVkQ2FwYWNp
dHkpIHsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gIW1wcm90ZWN0KHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihtX21lbW9yeSkgKyBtX3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZGVzaXJlZFNpemUg
LSBtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3VjY2Vzcyk7CisgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UsIGxldCdzIHRyeSB0byBtYWtlIHNv
bWUgbmV3IG1lbW9yeS4KKyAgICB2b2lkKiBuZXdNZW1vcnkgPSBtbWFwKG51bGxwdHIsIGRlc2ly
ZWRTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAt
MSwgMCk7CisgICAgaWYgKG5ld01lbW9yeSA9PSBNQVBfRkFJTEVEKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAobV9tZW1vcnkpIHsKKyAgICAgICAgbWVtY3B5KG5ld01lbW9yeSwg
bV9tZW1vcnksIG1fc2l6ZSk7CisgICAgICAgIG11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBh
Y2l0eSk7CisgICAgfQorICAgIG1fbWVtb3J5ID0gbmV3TWVtb3J5OworICAgIG1fbWFwcGVkQ2Fw
YWNpdHkgPSBkZXNpcmVkU2l6ZTsKKyAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogfSAvLyBuYW1lc3BhY2UgV2Fz
bQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAkocmV2aXNpb24g
MjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgQm91bmRzQ2hlY2tp
bmcKICAgICB9OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5KFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5KFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCYgZmFpbGVkKTsKIAogICAg
IH5NZW1vcnkoKQogICAgIHsKQEAgLTUyLDM1ICs1MiwyNSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtdW5tYXAobV9tZW1vcnksIG1fbWFwcGVkQ2FwYWNpdHkpOwogICAgIH0KIAotICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9tZW1vcnk7IH0KLQogICAgIHZvaWQqIG1lbW9y
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5OyB9Ci0gICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHVpbnQ2NF90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KKyAgICBQYWdlQ291bnQgc2l6ZUluUGFnZXMoKSBjb25zdCB7IHJldHVybiBQYWdl
Q291bnQ6OmZyb21CeXRlcyhtX3NpemUpOyB9CiAKICAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KIAogICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4g
bV9pbml0aWFsOyB9CiAgICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21h
eGltdW07IH0KIAotICAgIGJvb2wgZ3Jvdyh1aW50MzJfdCBuZXdTaXplKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fbWVtb3J5KTsKLSAgICAgICAgaWYgKG5ld1NpemUgPiBtX2NhcGFjaXR5KQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiAhbXByb3RlY3QobV9t
ZW1vcnksIG5ld1NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwotICAgIH0KKyAgICBib29s
IGdyb3coUGFnZUNvdW50KTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9yeSwgbV9zaXplKTsgfQotCiAgICAgCiBwcml2
YXRlOgogICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9OwogICAgIE1vZGUgbV9tb2RlOwot
ICAgIHVpbnQzMl90IG1fc2l6ZSB7IDAgfTsKLSAgICB1aW50MzJfdCBtX2NhcGFjaXR5IHsgMCB9
OwogICAgIFBhZ2VDb3VudCBtX2luaXRpYWw7CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKKyAg
ICB1aW50NjRfdCBtX3NpemUgeyAwIH07CiAgICAgdWludDY0X3QgbV9tYXBwZWRDYXBhY2l0eSB7
IDAgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzks
MTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAorQUxXQVlTX0lOTElO
RSBJMzJJbml0RXhwciBtYWtlSTMySW5pdEV4cHIodWludDhfdCBvcGNvZGUsIHVpbnQzMl90IGJp
dHMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQob3Bjb2RlID09IEkzMkNvbnN0IHx8IG9wY29kZSA9
PSBHZXRHbG9iYWwpOworICAgIGlmIChvcGNvZGUgPT0gSTMyQ29uc3QpCisgICAgICAgIHJldHVy
biBJMzJJbml0RXhwcjo6Zm9yQ29uc3RWYWx1ZShiaXRzKTsKKyAgICByZXR1cm4gSTMySW5pdEV4
cHI6OmZvckdsb2JhbEltcG9ydChiaXRzKTsKK30KKwogYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNl
KCkgLT4gUmVzdWx0CiB7CiAgICAgbV9yZXN1bHQubW9kdWxlID0gc3RkOjptYWtlX3VuaXF1ZTxN
b2R1bGVJbmZvcm1hdGlvbj4oKTsKQEAgLTI4OSw3ICsyOTcsNyBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VUYWJsZSgpIC0+IFBhcnRpCiAKIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9y
eUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSwgIk1lbW9yeSBzZWN0aW9uIGNhbm5v
dCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgbWVtb3J5Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighIW1fcmVzdWx0Lm1vZHVsZS0+bWVtb3J5LCAiTWVtb3J5IHNlY3Rpb24gY2Fubm90IGV4
aXN0IGlmIGFuIEltcG9ydCBoYXMgYSBtZW1vcnkiKTsKIAogICAgIFBhZ2VDb3VudCBpbml0aWFs
UGFnZUNvdW50OwogICAgIFBhZ2VDb3VudCBtYXhpbXVtUGFnZUNvdW50OwpAQCAtMzE5LDggKzMy
Nyw4IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib28KIAogYXV0byBN
b2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHVpbnQ4
X3QgY291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShjb3VudCks
ICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlvbidzIGNvdW50Iik7CisgICAgdWludDMyX3QgY291
bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2Fu
J3QgcGFyc2UgTWVtb3J5IHNlY3Rpb24ncyBjb3VudCIpOwogCiAgICAgaWYgKCFjb3VudCkKICAg
ICAgICAgcmV0dXJuIHsgfTsKQEAgLTM0MiwzMiArMzUwLDEyIEBAIGF1dG8gTW9kdWxlUGFyc2Vy
OjpwYXJzZUdsb2JhbCgpIC0+IFBhcnQKICAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwogCiAg
ICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkp
OwotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9w
Y29kZSwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpKTsKLQotICAgICAgICBnbG9i
YWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKICAgICAgICAg
VHlwZSB0eXBlRm9ySW5pdE9wY29kZTsKLSAgICAgICAgc3dpdGNoIChpbml0T3Bjb2RlKSB7Ci0g
ICAgICAgIGNhc2UgSTMyQ29uc3Q6Ci0gICAgICAgICAgICB0eXBlRm9ySW5pdE9wY29kZSA9IEkz
MjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEk2NENvbnN0OgotICAgICAgICAg
ICAgdHlwZUZvckluaXRPcGNvZGUgPSBJNjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBGMzJDb25zdDoKLSAgICAgICAgICAgIHR5cGVGb3JJbml0T3Bjb2RlID0gRjMyOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRjY0Q29uc3Q6Ci0gICAgICAgICAgICB0eXBl
Rm9ySW5pdE9wY29kZSA9IEY2NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdl
dEdsb2JhbDoKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZ2xvYmFsLmluaXRpYWxC
aXRzT3JJbXBvcnROdW1iZXIgPj0gbV9yZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFs
LCBnbG9iYWxJbmRleCwgInRoIEdsb2JhbCB1c2VzIGdldF9nbG9iYWwgIiwgZ2xvYmFsLmluaXRp
YWxCaXRzT3JJbXBvcnROdW1iZXIsICIgd2hpY2ggZXhjZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwg
Z2xvYmFsICIsIG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0gICAgICAg
ICAgICB0eXBlRm9ySW5pdE9wY29kZSA9IG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFsc1tnbG9iYWwu
aW5pdGlhbEJpdHNPckltcG9ydE51bWJlcl0udHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hF
TFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09y
SW1wb3J0TnVtYmVyLCB0eXBlRm9ySW5pdE9wY29kZSkpOworICAgICAgICBpZiAoaW5pdE9wY29k
ZSA9PSBHZXRHbG9iYWwpCiAgICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0g
R2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICB9Ci0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlw
ZSA9IEdsb2JhbDo6RnJvbUV4cHJlc3Npb247CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
dHlwZUZvckluaXRPcGNvZGUgIT0gZ2xvYmFsLnR5cGUsICJHbG9iYWwgaW5pdF9leHByIG9wY29k
ZSBvZiB0eXBlICIsIHR5cGVGb3JJbml0T3Bjb2RlLCAiIGRvZXNuJ3QgbWF0Y2ggZ2xvYmFsJ3Mg
dHlwZSAiLCBnbG9iYWwudHlwZSk7CiAKICAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwpAQCAtNDUxLDcgKzQzOSw4IEBAIGF1
dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUVsZW1lbnQoKSAtPiBQYXIKIAogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAiLCBl
bGVtZW50TnVtLCAidGggRWxlbWVudCB0YWJsZSBpbmRleCIpOwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHRhYmxlSW5kZXgsICJFbGVtZW50IHNlY3Rpb24gY2FuIG9ubHkgaGF2ZSBvbmUg
VGFibGUgZm9yIG5vdyIpOwotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNl
SW5pdEV4cHIoaW5pdE9wY29kZSwgb2Zmc2V0KSk7CisgICAgICAgIFR5cGUgaW5pdEV4cHJUeXBl
OworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9w
Y29kZSwgb2Zmc2V0LCBpbml0RXhwclR5cGUpKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihpbml0T3Bjb2RlICE9IE9wVHlwZTo6STMyQ29uc3QsICJFbGVtZW50IHNlY3Rpb24gZG9lc24n
dCBzdXBwb3J0IG5vbi1pMzIgaW5pdF9leHByIG9wY29kZSBmb3Igbm93LCBnb3QgIiwgaW5pdE9w
Y29kZSk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4
Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBpbmRleCBjb3VudCBmb3IgRWxl
bWVudCBzZWN0aW9uIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXhDb3VudCA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJFbGVtZW50IHNlY3Rpb24n
cyAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgaXMgdG9vIGJpZyAiLCBpbmRleENvdW50
KTsKQEAgLTUwOSw3ICs0OTgsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VDb2RlKCkgLT4g
UGFydGlhCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5p
dEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYgYml0c09ySW1wb3J0TnVtYmVyKSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90JiBv
cGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJbXBvcnROdW1iZXIsIFR5cGUmIHJlc3VsdFR5cGUpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9w
Y29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3Mgb3Bjb2RlIik7CiAKQEAgLTUxOCw2ICs1MDcs
NyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90CiAgICAgICAgIGlu
dDMyX3QgY29uc3RhbnQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50
MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBp
MzIuY29uc3QiKTsKICAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGNvbnN0YW50KTsKKyAgICAgICAgcmVzdWx0VHlwZSA9IEkzMjsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC01MjUsNiArNTE1LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNl
SW5pdEV4cHIodWludDhfdAogICAgICAgICBpbnQ2NF90IGNvbnN0YW50OwogICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25z
dGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgaTY0LmNvbnN0Iik7CiAgICAgICAgIGJpdHNPcklt
cG9ydE51bWJlciA9IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBlID0gSTY0OwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTUzMiw2ICs1MjMsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6
cGFyc2VJbml0RXhwcih1aW50OF90CiAgICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwogICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBnZXQg
Y29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGYzMi5jb25zdCIpOwogICAgICAgICBiaXRz
T3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9IEYzMjsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01MzksNiArNTMxLDcgQEAgYXV0byBNb2R1bGVQYXJz
ZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdAogICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50NjQoY29uc3RhbnQpLCAiY2FuJ3Qg
Z2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBmNjQuY29uc3QiKTsKICAgICAgICAg
Yml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CisgICAgICAgIHJlc3VsdFR5cGUgPSBGNjQ7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNTUxLDcgKzU0NCw3IEBAIGF1dG8gTW9kdWxl
UGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihpbXBvcnQua2luZEluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2Jh
bCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW1wb3J0LmtpbmRJbmRleCwgIiBl
eGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBnbG9iYWwgIiwgbV9yZXN1bHQubW9kdWxlLT5maXJz
dEludGVybmFsR2xvYmFsKTsKIAogICAgICAgICBBU1NFUlQobV9yZXN1bHQubW9kdWxlLT5nbG9i
YWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUpOwot
CisgICAgICAgIHJlc3VsdFR5cGUgPSBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHNbaW5kZXhdLnR5
cGU7CiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC01ODYsMTggKzU3OSwxOSBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VEYXRh
KCkgLT4gUGFydGlhCiAKICAgICBmb3IgKHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdt
ZW50TnVtYmVyIDwgc2VnbWVudENvdW50OyArK3NlZ21lbnROdW1iZXIpIHsKICAgICAgICAgdWlu
dDMyX3QgaW5kZXg7Ci0gICAgICAgIHVpbnQ2NF90IG9mZnNldDsKKyAgICAgICAgdWludDY0X3Qg
aW5pdEV4cHJCaXRzOwogICAgICAgICB1aW50OF90IGluaXRPcGNvZGU7CiAgICAgICAgIHVpbnQz
Ml90IGRhdGFCeXRlTGVuZ3RoOwogCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBz
ZWdtZW50J3MgaW5kZXgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCwgc2Vn
bWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBoYXMgbm9uLXplcm8gaW5kZXggIiwgaW5kZXgp
OwotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9w
Y29kZSwgb2Zmc2V0KSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdE9wY29kZSAh
PSBPcFR5cGU6OkkzMkNvbnN0LCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50IGhhcyBv
cGNvZGUgIiwgaW5pdE9wY29kZSwgIiBleHBlY3RlZCBpMzIuY29uc3QiKTsKKyAgICAgICAgVHlw
ZSBpbml0RXhwclR5cGU7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJ
bml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMsIGluaXRFeHByVHlwZSkpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRFeHByVHlwZSAhPSBJMzIsIHNlZ21lbnROdW1iZXIs
ICJ0aCBEYXRhIHNlZ21lbnQncyBpbml0X2V4cHIgbXVzdCBwcm9kdWNlIGFuIGkzMiIpOwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihkYXRhQnl0ZUxlbmd0aCks
ICJjYW4ndCBnZXQgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0
ZSBsZW5ndGgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihkYXRhQnl0ZUxlbmd0aCA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksIHNlZ21lbnROdW1iZXIsICJ0
aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUgbGVuZ3RoIGlzIHRvbyBiaWcgIiwgZGF0YUJ5dGVM
ZW5ndGgpOwogCi0gICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUob2Zm
c2V0LCBkYXRhQnl0ZUxlbmd0aCk7CisgICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50
OjpjcmVhdGUobWFrZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cyksIGRhdGFC
eXRlTGVuZ3RoKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNl
Z21lbnQgb2Ygc2l6ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7CiAgICAgICAgIG1fcmVzdWx0Lm1vZHVs
ZS0+ZGF0YS51bmNoZWNrZWRBcHBlbmQoU2VnbWVudDo6YWRvcHRQdHIoc2VnbWVudCkpOwogICAg
ICAgICBmb3IgKHVpbnQzMl90IGRhdGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0
aDsgKytkYXRhQnl0ZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuaAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3
IEBAIHByaXZhdGU6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VN
ZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1wb3J0KTsKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5p
dGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGltdW0pOwotICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90Jik7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1aW50
OF90JiwgdWludDY0X3QmLCBUeXBlJiBpbml0RXhwclR5cGUpOwogCiAgICAgTW9kdWxlUGFyc2Vy
UmVzdWx0IG1fcmVzdWx0OwogICAgIGJvb2wgbV9oYXNUYWJsZSB7IGZhbHNlIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCShyZXZpc2lvbiAyMTAx
MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDEzICs0MiwyMiBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9wYWdlQ291
bnQocGFnZUNvdW50KQogICAgIHsgfQogCi0gICAgc2l6ZV90IGJ5dGVzKCkgeyByZXR1cm4gbV9w
YWdlQ291bnQgKiBwYWdlU2l6ZTsgfQorICAgIHVpbnQ2NF90IGJ5dGVzKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fcGFnZUNvdW50KSAqIHN0YXRpY19jYXN0PHVpbnQ2
NF90PihwYWdlU2l6ZSk7IH0KKyAgICB1aW50MzJfdCBwYWdlQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX3BhZ2VDb3VudDsgfQogCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZCh1aW50MzJfdCBwYWdl
Q291bnQpCiAgICAgewogICAgICAgICByZXR1cm4gcGFnZUNvdW50IDw9IG1heFBhZ2VDb3VudDsK
ICAgICB9CiAKKyAgICBzdGF0aWMgUGFnZUNvdW50IGZyb21CeXRlcyh1aW50NjRfdCBieXRlcykK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVzICUgcGFnZVNpemUgPT0gMCk7Cisg
ICAgICAgIHVpbnQzMl90IG51bVBhZ2VzID0gYnl0ZXMgLyBwYWdlU2l6ZTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoUGFnZUNvdW50Ojppc1ZhbGlkKG51bVBhZ2VzKSk7CisgICAgICAgIHJldHVy
biBQYWdlQ291bnQobnVtUGFnZXMpOworICAgIH0KKwogICAgIHN0YXRpYyBQYWdlQ291bnQgbWF4
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBQYWdlQ291bnQobWF4UGFnZUNvdW50KTsKQEAgLTYy
LDkgKzcxLDE4IEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yPChjb25zdCBQYWdlQ291bnQm
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX3BhZ2VDb3VudCA8IG90aGVyLm1fcGFnZUNvdW50OyB9
CiAgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgUGFnZUNvdW50JiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9wYWdlQ291bnQgPiBvdGhlci5tX3BhZ2VDb3VudDsgfQogICAgIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3BhZ2VDb3VudCA+PSBv
dGhlci5tX3BhZ2VDb3VudDsgfQorICAgIFBhZ2VDb3VudCBvcGVyYXRvcisoY29uc3QgUGFnZUNv
dW50JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG1f
cGFnZUNvdW50LCBvdGhlci5tX3BhZ2VDb3VudCkpCisgICAgICAgICAgICByZXR1cm4gUGFnZUNv
dW50KCk7CisgICAgICAgIHVpbnQzMl90IG5ld0NvdW50ID0gbV9wYWdlQ291bnQgKyBvdGhlci5t
X3BhZ2VDb3VudDsKKyAgICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQobmV3Q291bnQpKQor
ICAgICAgICAgICAgcmV0dXJuIFBhZ2VDb3VudCgpOworICAgICAgICByZXR1cm4gUGFnZUNvdW50
KG5ld0NvdW50KTsKKyAgICB9CiAKLXByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
MzJfdCBwYWdlU2l6ZSA9IDY0ICogS0I7Citwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDMyX3QgbWF4UGFnZUNvdW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgxdWxsIDw8IDMy
KSAvIHBhZ2VTaXplKTsKIAogICAgIHVpbnQzMl90IG1fcGFnZUNvdW50OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaAkocmV2aXNpb24gMjEwMTI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzUsOCArMjM1LDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjoK
ICAgICB1aW50MzJfdCB0ZW1wOwogICAgIGlmICghcGFyc2VWYXJVSW50MzIodGVtcCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodGVtcCA+IDEpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih0ZW1wKTsKLSAgICByZXR1cm4g
dGVtcCA8PSAxOworICAgIHJldHVybiB0cnVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNj
ZXNzVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRl
LmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiw4IEBAIHB1YmxpYzoK
ICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0
YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7
CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBF
eHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKICAgICBSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CisgICAgUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1
cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCkgeyByZXR1cm4geyB9OyB9CiAKQEAgLTI5Miw2
ICsyOTQsMTkgQEAgYXV0byBWYWxpZGF0ZTo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIAogICAg
IHJldHVybiBjaGVja0JyYW5jaFRhcmdldChkZWZhdWx0VGFyZ2V0LCBleHByZXNzaW9uU3RhY2sp
OwogfQogCithdXRvIFZhbGlkYXRlOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRh
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKK3sKKyAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKGRlbHRhICE9IEkzMiwgImdyb3dfbWVtb3J5IHdpdGggbm9uLWkzMiBkZWx0YSIp
OworICAgIHJlc3VsdCA9IEkzMjsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFZhbGlkYXRl
OjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IEkzMjsKKyAgICByZXR1cm4geyB9OworfQorCiBhdXRvIFZhbGlkYXRlOjpl
bmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgc3RhY2spIC0+IFJl
c3VsdAogewogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFModW5pZnkoc3RhY2ssIGVudHJ5
LmNvbnRyb2xEYXRhKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpz
b24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCShy
ZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24J
KHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDggQEAKICAgICAgICAgImk2NC5zdG9yZSI6ICAg
ICAgICAgICB7ICJjYXRlZ29yeSI6ICJtZW1vcnkiLCAgICAgInZhbHVlIjogIDU1LCAicmV0dXJu
IjogW10sICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhZGRyIiwgImk2NCJdLCAgICAgICAgICAi
aW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFncyIsICAgICAgICAgICJ0eXBlIjogInZhcnVpbnQz
MiJ9LCB7Im5hbWUiOiAib2Zmc2V0IiwgInR5cGUiOiAidmFydWludDMyIn1dLCAiZGVzY3JpcHRp
b24iOiAic3RvcmUgdG8gbWVtb3J5IiB9LAogICAgICAgICAiZjMyLnN0b3JlIjogICAgICAgICAg
IHsgImNhdGVnb3J5IjogIm1lbW9yeSIsICAgICAidmFsdWUiOiAgNTYsICJyZXR1cm4iOiBbXSwg
ICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFkZHIiLCAiZjMyIl0sICAgICAgICAgICJpbW1lZGlh
dGUiOiBbeyJuYW1lIjogImZsYWdzIiwgICAgICAgICAgInR5cGUiOiAidmFydWludDMyIn0sIHsi
bmFtZSI6ICJvZmZzZXQiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICJkZXNjcmlwdGlvbiI6ICJz
dG9yZSB0byBtZW1vcnkiIH0sCiAgICAgICAgICJmNjQuc3RvcmUiOiAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAibWVtb3J5IiwgICAgICJ2YWx1ZSI6ICA1NywgInJldHVybiI6IFtdLCAgICAgICAg
ICAgInBhcmFtZXRlciI6IFsiYWRkciIsICJmNjQiXSwgICAgICAgICAgImltbWVkaWF0ZSI6IFt7
Im5hbWUiOiAiZmxhZ3MiLCAgICAgICAgICAidHlwZSI6ICJ2YXJ1aW50MzIifSwgeyJuYW1lIjog
Im9mZnNldCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgImRlc2NyaXB0aW9uIjogInN0b3JlIHRv
IG1lbW9yeSIgfSwKLSAgICAgICAgImN1cnJlbnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29yeSI6
ICJvcGVyYXRpb24iLCAgInZhbHVlIjogIDYzLCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFy
YW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicXVlcnkgdGhlIHNpemUg
b2YgbWVtb3J5IiB9LAotICAgICAgICAiZ3Jvd19tZW1vcnkiOiAgICAgICAgIHsgImNhdGVnb3J5
IjogIm9wZXJhdGlvbiIsICAidmFsdWUiOiAgNjQsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJw
YXJhbWV0ZXIiOiBbInNpemUiXSwgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJncm93IHRoZSBzaXpl
IG9mIG1lbW9yeSIgfSwKKyAgICAgICAgImN1cnJlbnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29y
eSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjogIDYzLCAicmV0dXJuIjogWyJzaXplIl0sICAgICAi
cGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFt
ZSI6ICJmbGFncyIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJxdWVyeSB0aGUgc2l6ZSBvZiBtZW1vcnkiIH0sCisg
ICAgICAgICJncm93X21lbW9yeSI6ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAib3BlcmF0aW9uIiwg
ICJ2YWx1ZSI6ICA2NCwgInJldHVybiI6IFsic2l6ZSJdLCAgICAgInBhcmFtZXRlciI6IFsic2l6
ZSJdLCAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAidHlw
ZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiZ3JvdyB0aGUgc2l6ZSBvZiBtZW1vcnkiIH0sCiAgICAgICAgICJpMzIuYWRkIjog
ICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwNiwgInJl
dHVybiI6IFsiaTMyIl0sICAgICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAg
ICAgImltbWVkaWF0ZSI6IFtdLCAiYjNvcCI6ICJBZGQiICAgICAgICAgIH0sCiAgICAgICAgICJp
MzIuc3ViIjogICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6
IDEwNywgInJldHVybiI6IFsiaTMyIl0sICAgICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJd
LCAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAiYjNvcCI6ICJTdWIiICAgICAgICAgIH0sCiAg
ICAgICAgICJpMzIubXVsIjogICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAiYXJpdGhtZXRpYyIs
ICJ2YWx1ZSI6IDEwOCwgInJldHVybiI6IFsiaTMyIl0sICAgICAgInBhcmFtZXRlciI6IFsiaTMy
IiwgImkzMiJdLCAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAiYjNvcCI6ICJNdWwiICAgICAg
ICAgIH0sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDggKzMwLDggQEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAotI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU1LDYgKzU1LDE1IEBAIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnkKIHsKIH0KIAorSlNXZWJBc3Nl
bWJseU1lbW9yeTo6fkpTV2ViQXNzZW1ibHlNZW1vcnkoKQoreworICAgIGlmIChtX2J1ZmZlcikg
eworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGR1bW15Q29udGVudHM7CisgICAgICAgIG1f
YnVmZmVyLT50cmFuc2ZlclRvKGR1bW15Q29udGVudHMpOworICAgICAgICBtX2J1ZmZlciA9IG51
bGxwdHI7CisgICAgfQorfQorCiBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpi
dWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIGlmICht
X2J1ZmZlcldyYXBwZXIpCkBAIC03MSw2ICs4MCw0OCBAQCBKU0FycmF5QnVmZmVyKiBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpidWZmCiAgICAgcmV0dXJuIG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKIH0K
IAorV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3coRXhlY1N0YXRlKiBl
eGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUp
Cit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQg
PSBtX21lbW9yeS0+c2l6ZUluUGFnZXMoKTsKKworICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojpp
c1ZhbGlkKGRlbHRhKSkgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWls
dXJlKQorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IGV4
cGVjdHMgdGhlIGRlbHRhIHRvIGJlIGEgdmFsaWQgcGFnZSBjb3VudCIpKSk7CisgICAgICAgIHJl
dHVybiBXYXNtOjpQYWdlQ291bnQoKTsKKyAgICB9CisKKyAgICBXYXNtOjpQYWdlQ291bnQgbmV3
U2l6ZSA9IG9sZFBhZ2VDb3VudCArIFdhc206OlBhZ2VDb3VudChkZWx0YSk7CisgICAgaWYgKCFu
ZXdTaXplKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCisg
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0
aGUgZ3Jvd24gc2l6ZSB0byBiZSBhIHZhbGlkIHBhZ2UgY291bnQiKSkpOworICAgICAgICByZXR1
cm4gV2FzbTo6UGFnZUNvdW50KCk7CisgICAgfQorCisgICAgaWYgKGRlbHRhKSB7CisgICAgICAg
IGJvb2wgc3VjY2VzcyA9IG1fbWVtb3J5LT5ncm93KG5ld1NpemUpOworICAgICAgICBpZiAoIXN1
Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUp
CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRl
T3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNv
dW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIG91dCB0
aGUgb2xkIGFycmF5IGJ1ZmZlciBiZWNhdXNlIGl0IG1pZ2h0IG5vdyBiZSBwb2ludGluZworICAg
IC8vIHRvIHN0YWxlIG1lbW9yeS4KKyAgICAvLyBOZXV0ZXIgdGhlIG9sZCBhcnJheS4KKyAgICBp
ZiAobV9idWZmZXIpIHsKKyAgICAgICAgQXJyYXlCdWZmZXJDb250ZW50cyBkdW1teUNvbnRlbnRz
OworICAgICAgICBtX2J1ZmZlci0+dHJhbnNmZXJUbyhkdW1teUNvbnRlbnRzKTsKKyAgICAgICAg
bV9idWZmZXIgPSBudWxscHRyOworICAgICAgICBtX2J1ZmZlcldyYXBwZXIuY2xlYXIoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gb2xkUGFnZUNvdW50OworfQorCiB2b2lkIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1lbW9yeS5oCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDkgKzQ4LDExIEBAIHB1YmxpYzoKIAogICAgIFdhc206Ok1lbW9yeSogbWVtb3J5KCkgeyByZXR1
cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBKU0FycmF5QnVmZmVyKiBidWZmZXIoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCopOworICAgIFdhc206OlBhZ2VDb3VudCBncm93KEV4ZWNTdGF0ZSosIHVp
bnQzMl90IGRlbHRhLCBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7CiAKIHBy
b3RlY3RlZDoKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4mJik7CisgICAgfkpTV2ViQXNzZW1ibHlNZW1vcnkoKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIx
MDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFu
Y2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw4ICsyMjksOSBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIGlmIChtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgewogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKICAgICAg
ICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlv
bi4KLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IHN0
ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5p
dGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKTsKLSAgICAgICAgICAg
IGlmICghbWVtb3J5LT5pc1ZhbGlkKCkpCisgICAgICAgICAgICBib29sIGZhaWxlZDsKKyAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91
bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBt
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpLCBmYWlsZWQpOworICAgICAgICAgICAg
aWYgKGZhaWxlZCkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykp
KTsKICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sCiAgICAgICAgICAgICAgICBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDggKzk2LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29ucwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+KGlu
aXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOwotICAgIGlmICghbWVtb3J5LT5pc1Zh
bGlkKCkpCisgICAgYm9vbCBmYWlsZWQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9y
eT4gbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+KGluaXRpYWxQYWdlQ291
bnQsIG1heGltdW1QYWdlQ291bnQsIGZhaWxlZCk7CisgICAgaWYgKGZhaWxlZCkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBj
cmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXVEZNb3ZlKG1lbW9yeSkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9y
eS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAKICNpbmNsdWRlICJXZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5sdXQuaCIKIApAQCAtNDQsMjEgKzQ1LDUxIEBAIGNvbnN0
IENsYXNzSW5mbyBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHkKICBAZW5kCiAgKi8KIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNC
dWZmZXIoRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKik7CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNC
dWZmZXIoRXhlY1N0YXRlKiBleGVjKQorQUxXQVlTX0lOTElORSBKU1dlYkFzc2VtYmx5TWVtb3J5
KiBnZXRNZW1vcnkoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0
PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihleGVjLT50aGlzVmFsdWUoKSk7IAorICAgIEpTV2ViQXNz
ZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+
KHZhbHVlKTsgCiAgICAgaWYgKCFtZW1vcnkpIHsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCAKLSAgICAgICAgICAgICAgICAg
ICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5
LnByb3RvdHlwZS5idWZmZXIgZ2V0dGVyIGNhbGxlZCB3aXRoIG5vbiBXZWJBc3NlbWJseS5NZW1v
cnkgfHRoaXN8IHZhbHVlIikpKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIAorICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
V2ViQXNzZW1ibHkuTWVtb3J5LnByb3RvdHlwZS5idWZmZXIgZ2V0dGVyIGNhbGxlZCB3aXRoIG5v
biBXZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8IHZhbHVlIikpKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQorICAgIHJldHVybiBtZW1vcnk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1v
cnkgPSBnZXRNZW1vcnkoZXhlYywgZXhlYy0+dGhpc1ZhbHVlKCkpOyAKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSht
ZW1vcnktPmJ1ZmZlcihleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsK
IH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3Rv
RnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnkoZXhlYywgZXhlYy0+dGhpc1ZhbHVl
KCkpOyAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgCisg
ICAgdWludDMyX3QgZGVsdGEgPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAg
ICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IHRydWU7CisgICAgV2FzbTo6
UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3JvdyhleGVjLCBkZWx0YSwgc2hvdWxkVGhyb3dF
eGNlcHRpb25zT25GYWlsdXJlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3VsdC5wYWdl
Q291bnQoKSkpOworfQorCiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSogV2ViQXNzZW1ibHlN
ZW1vcnlQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlPih2bS5oZWFwKSkg
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CkBAIC03NSw2ICsxMDYs
NyBAQCB2b2lkIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlOjpmaW5pc2hDCiB7CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEpTQ19OQVRJVkVfR0VUVEVSKCJidWZmZXIiLCB3
ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlciwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Cisg
ICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oImdyb3ciLCB3ZWJBc3Nl
bWJseU1lbW9yeVByb3RvRnVuY0dyb3csIERvbnRFbnVtLCAxKTsKIH0KIAogV2ViQXNzZW1ibHlN
ZW1vcnlQcm90b3R5cGU6OldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMTAxMjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw4ICsxOTYsOCBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgbV9tb2R1bGVFbnZpcm9ubWVudC5zZXQodm0s
IHRoaXMsIG1vZHVsZUVudmlyb25tZW50KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFNjb3Bl
LCB0eXBlbmFtZSBOLCB0eXBlbmFtZSAuLi5BcmdzPgotTkVWRVJfSU5MSU5FIHN0YXRpYyBKU1Zh
bHVlIGRhdGFTZWdtZW50RmFpbChFeGVjU3RhdGUqIHN0YXRlLCBWTSYgdm0sIFNjb3BlJiBzY29w
ZSwgTiBtZW1vcnlTaXplLCBOIHNlZ21lbnRTaXplLCBOIG9mZnNldCwgQXJncy4uLiBhcmdzKQor
dGVtcGxhdGUgPHR5cGVuYW1lIFNjb3BlLCB0eXBlbmFtZSBNLCB0eXBlbmFtZSBOLCB0eXBlbmFt
ZSAuLi5BcmdzPgorTkVWRVJfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGRhdGFTZWdtZW50RmFpbChF
eGVjU3RhdGUqIHN0YXRlLCBWTSYgdm0sIFNjb3BlJiBzY29wZSwgTSBtZW1vcnlTaXplLCBOIHNl
Z21lbnRTaXplLCBOIG9mZnNldCwgQXJncy4uLiBhcmdzKQogewogICAgIHJldHVybiB0aHJvd0V4
Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Ioc3RhdGUs
IHZtLCBtYWtlU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBkYXRhIHNlZ21lbnQgaW5pdGlh
bGl6YXRpb246IHNlZ21lbnQgb2YgIiksIFN0cmluZzo6bnVtYmVyKHNlZ21lbnRTaXplKSwgQVND
SUlMaXRlcmFsKCIgYnl0ZXMgbWVtb3J5IG9mICIpLCBTdHJpbmc6Om51bWJlcihtZW1vcnlTaXpl
KSwgQVNDSUlMaXRlcmFsKCIgYnl0ZXMsIGF0IG9mZnNldCAiKSwgU3RyaW5nOjpudW1iZXIob2Zm
c2V0KSwgYXJncy4uLikpKTsKIH0KQEAgLTI1OSwxNSArMjU5LDIyIEBAIEpTVmFsdWUgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoanNNZW1vcnkpOyAvLyBJdCBpcyBhIHZhbGlk
YXRpb24gZXJyb3IgZm9yIGEgRGF0YSBzZWN0aW9uIHRvIGV4aXN0IHdpdGhvdXQgYSBNZW1vcnkg
c2VjdGlvbiBvciBpbXBvcnQuCiAgICAgICAgICAgICB1aW50OF90KiBtZW1vcnkgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihqc01lbW9yeS0+bWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9yeSk7Ci0gICAgICAgICAgICBhdXRvIHNpemVJbkJ5
dGVzID0ganNNZW1vcnktPm1lbW9yeSgpLT5zaXplKCk7CisgICAgICAgICAgICB1aW50NjRfdCBz
aXplSW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1vcnkoKS0+c2l6ZSgpOwogICAgICAgICAgICAgZm9y
IChhdXRvJiBzZWdtZW50IDogZGF0YSkgewogICAgICAgICAgICAgICAgIGlmIChzZWdtZW50LT5z
aXplSW5CeXRlcykgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2hhdCdzIHRoZSBi
ZWhhYmlvciBoZXJlPyBEbyB3ZSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaW50MzJfdCkgb3IgZG8g
d2UgdGhyb3cgZXhjZXB0aW9uIG9uIDwgMD8KKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
b2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC0+b2Zmc2V0LmlzR2xvYmFs
SW1wb3J0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX2luc3RhbmNlLT5s
b2FkSTMyR2xvYmFsKHNlZ21lbnQtPm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2Vn
bWVudC0+b2Zmc2V0LmNvbnN0VmFsdWUoKTsKKwogICAgICAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2l6ZUluQnl0ZXMgPCBzZWdtZW50LT5zaXplSW5CeXRlcykpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21lbnRGYWlsKHN0YXRlLCB2bSwgc2NvcGUsIHNpemVJ
bkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRlcywgc2VnbWVudC0+b2Zmc2V0LCBBU0NJSUxpdGVy
YWwoIiwgc2VnbWVudCBpcyB0b28gYmlnIikpOwotICAgICAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2VnbWVudC0+b2Zmc2V0ID4gc2l6ZUluQnl0ZXMgLSBzZWdtZW50LT5zaXplSW5CeXRl
cykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21lbnRGYWlsKHN0YXRl
LCB2bSwgc2NvcGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRlcywgc2VnbWVudC0+
b2Zmc2V0LCBBU0NJSUxpdGVyYWwoIiwgc2VnbWVudCB3cml0ZXMgb3V0c2lkZSBvZiBtZW1vcnki
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShtZW1vcnkgKyBzZWdtZW50LT5vZmZzZXQs
ICZzZWdtZW50LT5ieXRlKDApLCBzZWdtZW50LT5zaXplSW5CeXRlcyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21lbnRGYWlsKHN0YXRlLCB2bSwgc2NvcGUsIHNpemVJ
bkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRlcywgb2Zmc2V0LCBBU0NJSUxpdGVyYWwoIiwgc2Vn
bWVudCBpcyB0b28gYmlnIikpOworICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkob2Zm
c2V0ID4gc2l6ZUluQnl0ZXMgLSBzZWdtZW50LT5zaXplSW5CeXRlcykpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21lbnRGYWlsKHN0YXRlLCB2bSwgc2NvcGUsIHNpemVJ
bkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRlcywgb2Zmc2V0LCBBU0NJSUxpdGVyYWwoIiwgc2Vn
bWVudCB3cml0ZXMgb3V0c2lkZSBvZiBtZW1vcnkiKSk7CisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShtZW1vcnkg
KyBvZmZzZXQsICZzZWdtZW50LT5ieXRlKDApLCBzZWdtZW50LT5zaXplSW5CeXRlcyk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297753</attachid>
            <date>2016-12-25 12:50:33 -0800</date>
            <delta_ts>2016-12-27 00:37:20 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>64365</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS55YW1s
CShyZXZpc2lvbiAyMTAxMjkpCisrKyBKU1Rlc3RzL3dhc20ueWFtbAkod29ya2luZyBjb3B5KQpA
QCAtMTQzLDcgKzE0Myw3IEBACiAgIGNtZDogcnVuV2ViQXNzZW1ibHlTcGVjVGVzdCA6bm9ybWFs
CiAKIC0gcGF0aDogd2FzbS9zcGVjLXRlc3RzL21lbW9yeV90cmFwLndhc3QuanMKLSAgY21kOiBy
dW5XZWJBc3NlbWJseVNwZWNUZXN0IDpza2lwCisgIGNtZDogcnVuV2ViQXNzZW1ibHlTcGVjVGVz
dCA6bm9ybWFsCiAKIC0gcGF0aDogd2FzbS9zcGVjLXRlc3RzL25hbWVzLndhc3QuanMKICAgY21k
OiBydW5XZWJBc3NlbWJseVNwZWNUZXN0IDpza2lwCkluZGV4OiBKU1Rlc3RzL3dhc20vd2FzbS5q
c29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS93YXNtLmpzb24JKHJldmlzaW9uIDIxMDEy
OSkKKysrIEpTVGVzdHMvd2FzbS93YXNtLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4
LDggQEAKICAgICAgICAgImk2NC5zdG9yZSI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJtZW1v
cnkiLCAgICAgInZhbHVlIjogIDU1LCAicmV0dXJuIjogW10sICAgICAgICAgICAicGFyYW1ldGVy
IjogWyJhZGRyIiwgImk2NCJdLCAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFn
cyIsICAgICAgICAgICJ0eXBlIjogInZhcnVpbnQzMiJ9LCB7Im5hbWUiOiAib2Zmc2V0IiwgInR5
cGUiOiAidmFydWludDMyIn1dLCAiZGVzY3JpcHRpb24iOiAic3RvcmUgdG8gbWVtb3J5IiB9LAog
ICAgICAgICAiZjMyLnN0b3JlIjogICAgICAgICAgIHsgImNhdGVnb3J5IjogIm1lbW9yeSIsICAg
ICAidmFsdWUiOiAgNTYsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFk
ZHIiLCAiZjMyIl0sICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImZsYWdzIiwgICAg
ICAgICAgInR5cGUiOiAidmFydWludDMyIn0sIHsibmFtZSI6ICJvZmZzZXQiLCAidHlwZSI6ICJ2
YXJ1aW50MzIifV0sICJkZXNjcmlwdGlvbiI6ICJzdG9yZSB0byBtZW1vcnkiIH0sCiAgICAgICAg
ICJmNjQuc3RvcmUiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAibWVtb3J5IiwgICAgICJ2YWx1
ZSI6ICA1NywgInJldHVybiI6IFtdLCAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYWRkciIsICJm
NjQiXSwgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAgICAgICAgICAi
dHlwZSI6ICJ2YXJ1aW50MzIifSwgeyJuYW1lIjogIm9mZnNldCIsICJ0eXBlIjogInZhcnVpbnQz
MiJ9XSwgImRlc2NyaXB0aW9uIjogInN0b3JlIHRvIG1lbW9yeSIgfSwKLSAgICAgICAgImN1cnJl
bnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjogIDYz
LCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAgICAg
ICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAicXVlcnkgdGhlIHNpemUgb2YgbWVtb3J5IiB9LAotICAgICAgICAiZ3Jv
d19tZW1vcnkiOiAgICAgICAgIHsgImNhdGVnb3J5IjogIm9wZXJhdGlvbiIsICAidmFsdWUiOiAg
NjQsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJwYXJhbWV0ZXIiOiBbInNpemUiXSwgICAgICAg
ICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJncm93IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKKyAgICAgICAgImN1
cnJlbnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjog
IDYzLCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFncyIsICJ0eXBlIjogInZhcnVp
bnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJx
dWVyeSB0aGUgc2l6ZSBvZiBtZW1vcnkiIH0sCisgICAgICAgICJncm93X21lbW9yeSI6ICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAib3BlcmF0aW9uIiwgICJ2YWx1ZSI6ICA2NCwgInJldHVybiI6IFsi
c2l6ZSJdLCAgICAgInBhcmFtZXRlciI6IFsic2l6ZSJdLCAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZ3JvdyB0aGUgc2l6ZSBvZiBt
ZW1vcnkiIH0sCiAgICAgICAgICJpMzIuYWRkIjogICAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAi
YXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwNiwgInJldHVybiI6IFsiaTMyIl0sICAgICAgInBhcmFt
ZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAiYjNvcCI6
ICJBZGQiICAgICAgICAgIH0sCiAgICAgICAgICJpMzIuc3ViIjogICAgICAgICAgICAgeyAiY2F0
ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwNywgInJldHVybiI6IFsiaTMyIl0sICAg
ICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVkaWF0ZSI6IFtd
LCAiYjNvcCI6ICJTdWIiICAgICAgICAgIH0sCiAgICAgICAgICJpMzIubXVsIjogICAgICAgICAg
ICAgeyAiY2F0ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwOCwgInJldHVybiI6IFsi
aTMyIl0sICAgICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVk
aWF0ZSI6IFtdLCAiYjNvcCI6ICJNdWwiICAgICAgICAgIH0sCkluZGV4OiBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvZ3Jvdy1tZW1vcnktMi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvZ3Jvdy1tZW1vcnktMi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rl
c3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZ3Jvdy1tZW1vcnktMi5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgyIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKK2lt
cG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOworCit7CisgICAgY29uc3QgbWVt
b3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMCwgbWF4aW11bTogMn07CisgICAgY29uc3QgYnVp
bGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5J
bXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2Ny
aXB0aW9uKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHtwYXJhbXM6IFtd
LCByZXQ6ICJ2b2lkIn0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwg
e3BhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAgICAgICAgLkNhbGwoMCkK
KyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuSTMyTG9hZCgw
LCAwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAg
Y29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7
CisKKyAgICBjb25zdCBmdW5jID0gKCkgPT4geworICAgICAgICBtZW1vcnkuZ3JvdygxKTsKKyAg
ICAgICAgKG5ldyBVaW50MzJBcnJheShtZW1vcnkuYnVmZmVyKSlbMF0gPSA0MjsKKyAgICB9Owor
CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
aW1wOiB7bWVtb3J5LCBmdW5jfX0pOworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZv
bygwKSwgNDIpOworfQorCit7CisgICAgY29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlh
bDogMCwgbWF4aW11bTogMn07CisgICAgY29uc3QgdGFibGVEZXNjcmlwdGlvbiA9IHtpbml0aWFs
OiAxLCBtYXhpbXVtOiAxLCBlbGVtZW50OiAiYW55ZnVuYyJ9OworICAgIGNvbnN0IGJ1aWxkZXIg
PSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKQorICAgICAgICAgICAgLkZ1bmMoW10s
ICJ2b2lkIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAg
Lk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHtwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIn0pCisgICAg
ICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHRhYmxlRGVzY3JpcHRpb24pCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIikK
KyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Zm9vIiwge3BhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAgICAgICAgLkkz
MkNvbnN0KDApCisgICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAwKSAvLyBjYWxsIFtd
ID0+IHZvaWQKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAu
STMyTG9hZCgwLCAwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImJhciIsIHtwYXJhbXM6IFtdLCByZXQ6ICJ2b2lk
In0pCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5N
ZW1vcnkobWVtb3J5RGVzY3JpcHRpb24pOworICAgIGNvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2Vt
Ymx5LlRhYmxlKHRhYmxlRGVzY3JpcHRpb24pOworCisgICAgY29uc3QgZnVuYyA9ICgpID0+IHsK
KyAgICAgICAgbWVtb3J5Lmdyb3coMSk7CisgICAgICAgIChuZXcgVWludDMyQXJyYXkobWVtb3J5
LmJ1ZmZlcikpWzBdID0gMHhiYWRiZWVmOworICAgIH07CisKKyAgICBjb25zdCBpbnN0YW5jZSA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHttZW1vcnksIGZ1bmMsIHRh
YmxlfX0pOworICAgIHRhYmxlLnNldCgwLCBpbnN0YW5jZS5leHBvcnRzLmJhcik7CisgICAgYXNz
ZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDApLCAweGJhZGJlZWYpOworfQpJbmRleDogSlNU
ZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2dyb3ctbWVtb3J5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9ncm93LW1lbW9yeS5qcwkobm9uZXhpc3RlbnQpCisr
KyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZ3Jvdy1tZW1vcnkuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODAgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMn
OworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CisKK2NvbnN0IHBhZ2VT
aXplID0gNjQgKiAxMDI0OworY29uc3QgbWF4UGFnZUNvdW50ID0gKDIqKjMyKSAvIHBhZ2VTaXpl
OworCitmdW5jdGlvbiBiaW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyLCBtc2cgPSAiIikgewor
ICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBsZXQgdGhy
ZXcgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGlmIChtc2cpCisg
ICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGUubWVzc2FnZS5pbmRleE9mKG1zZykgIT09IC0xKTsK
KyAgICAgICAgdGhyZXcgPSB0cnVlOworICAgIH0KKyAgICBhc3NlcnQudHJ1dGh5KHRocmV3KTsK
K30KKworeworICAgIC8vIENhbid0IGdyb3dfbWVtb3J5IGlmIG5vIG1lbW9yeSBpcyBkZWZpbmVk
LgorICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5F
bmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRW5kKCkK
KyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKHtyZXQ6ICJ2b2lkIiwgcGFy
YW1zOiBbXX0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDI1KQorICAgICAgICAgICAgICAg
IC5Hcm93TWVtb3J5KDApCisgICAgICAgICAgICAgICAgLkRyb3AoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIs
ICJncm93X21lbW9yeSBpcyBvbmx5IHZhbGlkIGlmIGEgbWVtb3J5IGlzIGRlZmluZWQgb3IgaW1w
b3J0ZWQiKTsKK30KKworeworICAgIC8vIENhbid0IGN1cnJlbnRfbWVtb3J5IGlmIG5vIG1lbW9y
eSBpcyBkZWZpbmVkLgorICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAg
ICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKHtyZXQ6
ICJ2b2lkIiwgcGFyYW1zOiBbXX0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDI1KQorICAg
ICAgICAgICAgICAgIC5DdXJyZW50TWVtb3J5KDApCisgICAgICAgICAgICAgICAgLkRyb3AoKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGJpbmFyeVNob3VsZE5v
dFBhcnNlKGJ1aWxkZXIsICJjdXJyZW50X21lbW9yeSBpcyBvbmx5IHZhbGlkIGlmIGEgbWVtb3J5
IGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQiKTsKK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSAo
bmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24o
KS5FbmQoKQorICAgICAgICAuTWVtb3J5KCkuSW5pdGlhbE1heFBhZ2VzKDEsIDEpLkVuZCgpCisg
ICAgICAgIC5FeHBvcnQoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oe3JldDogInZvaWQiLCBwYXJhbXM6IFtdfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29u
c3QoMjUpCisgICAgICAgICAgICAgICAgLkdyb3dNZW1vcnkoMSkKKyAgICAgICAgICAgICAgICAu
RHJvcCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgYmluYXJ5
U2hvdWxkTm90UGFyc2UoYnVpbGRlciwgInJlc2VydmVkIHZhclVpbnQxIGZvciBncm93X21lbW9y
eSBtdXN0IGJlIHplcm8iKTsKK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxk
ZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQor
ICAgICAgICAuTWVtb3J5KCkuSW5pdGlhbE1heFBhZ2VzKDEsIDEpLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oe3Jl
dDogInZvaWQiLCBwYXJhbXM6IFtdfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMjUpCisg
ICAgICAgICAgICAgICAgLkN1cnJlbnRNZW1vcnkoMSkKKyAgICAgICAgICAgICAgICAuRHJvcCgp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgYmluYXJ5U2hvdWxk
Tm90UGFyc2UoYnVpbGRlciwgInJlc2VydmVkIHZhclVpbnQxIGZvciBjdXJyZW50X21lbW9yeSBt
dXN0IGJlIHplcm8iKTsKK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIo
KSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuTWVtb3J5KCkuSW5pdGlhbE1heFBhZ2VzKDEsIDEpLkVuZCgpCisgICAgICAgIC5FeHBv
cnQoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oe3JldDog
InZvaWQiLCBwYXJhbXM6IFtdfSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMjUpCisgICAg
ICAgICAgICAgICAgLkN1cnJlbnRNZW1vcnkoMHhmZmZmZmYwMCkKKyAgICAgICAgICAgICAgICAu
RHJvcCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgYmluYXJ5
U2hvdWxkTm90UGFyc2UoYnVpbGRlciwgIkNhbid0IHBhcnNlIHJlc2VydmVkIHZhclVpbnQxIGZv
ciBjdXJyZW50X21lbW9yeSIpOworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVp
bGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgp
CisgICAgICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7
cmV0OiAidm9pZCIsIHBhcmFtczogW119KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkK
KyAgICAgICAgICAgICAgICAuR3Jvd01lbW9yeSgweGZmZmZmZjAwKQorICAgICAgICAgICAgICAg
IC5Ecm9wKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5h
cnlTaG91bGROb3RQYXJzZShidWlsZGVyLCAiQ2FuJ3QgcGFyc2UgcmVzZXJ2ZWQgdmFyVWludDEg
Zm9yIGdyb3dfbWVtb3J5Iik7Cit9CisKK3sKKyAgICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9
IHtpbml0aWFsOiAyMCwgbWF4aW11bTogNTB9OworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1
aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuTWVtb3J5
KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5RGVzY3JpcHRpb24pLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJm
b28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAgICAg
ICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkdyb3dNZW1vcnkoMCkKKyAgICAgICAg
ICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisK
KyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3Qg
bW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge21lbW9yeTogbmV3IFdl
YkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbil9fSk7CisgICAgbGV0IGN1cnJlbnRQ
YWdlU2l6ZSA9IG1lbW9yeURlc2NyaXB0aW9uLmluaXRpYWw7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCBtZW1vcnlEZXNjcmlwdGlvbi5tYXhpbXVtIC0gbWVtb3J5RGVzY3JpcHRpb24uaW5pdGlh
bDsgaSsrKSB7CisgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygxKSwgY3Vy
cmVudFBhZ2VTaXplKTsKKyAgICAgICAgKytjdXJyZW50UGFnZVNpemU7CisgICAgfQorCisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgYXNzZXJ0LmVxKGluc3Rh
bmNlLmV4cG9ydHMuZm9vKDEpLCAtMSk7CisgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBv
cnRzLmZvbygwKSwgY3VycmVudFBhZ2VTaXplKTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBt
ZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAyMCwgbWF4aW11bTogMTAwfTsKKyAgICBjb25z
dCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKS5F
bmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIifSkK
KyAgICAgICAgICAgICAgICAuQ3VycmVudE1lbW9yeSgwKQorICAgICAgICAgICAgICAgIC5SZXR1
cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJp
biA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7bWVtb3J5fX0pOworICAgIGxldCBj
dXJyZW50UGFnZVNpemUgPSBtZW1vcnlEZXNjcmlwdGlvbi5pbml0aWFsOworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgbWVtb3J5RGVzY3JpcHRpb24ubWF4aW11bSAtIG1lbW9yeURlc2NyaXB0aW9u
LmluaXRpYWw7IGkrKykgeworICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mb28o
KSwgY3VycmVudFBhZ2VTaXplKTsKKyAgICAgICAgKytjdXJyZW50UGFnZVNpemU7CisgICAgICAg
IG1lbW9yeS5ncm93KDEpOworICAgIH0KK30KSW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvbWVt
b3J5LWdyb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jv
dy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKK2ltcG9ydCB7IGVxIGFzIGFzc2VydEVx
IH0gZnJvbSAiLi4vYXNzZXJ0LmpzIjsKK2NvbnN0IHBhZ2VTaXplID0gNjQqMTAyNDsKKworbGV0
IGJ1ZmZlcnMgPSBbXTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBjb25z
dCBtYXggPSA1OworICAgIGxldCBwYWdlQ291bnQgPSAxOworICAgIGxldCB4ID0gbmV3IFdlYkFz
c2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMSwgbWF4aW11bTogbWF4fSk7CisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCAobWF4IC0gMSk7IGkrKykgeworICAgICAgICBsZXQgaW50OEFycmF5ID0gbmV3
IFVpbnQ4QXJyYXkoeC5idWZmZXIpOworCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFn
ZVNpemU7IGkrKykgeworICAgICAgICAgICAgYXNzZXJ0RXEoaW50OEFycmF5W3BhZ2VTaXplKihw
YWdlQ291bnQgLSAxKSArIGldLCAwKTsKKyAgICAgICAgICAgIGludDhBcnJheVtwYWdlU2l6ZSoo
cGFnZUNvdW50IC0gMSkgKyBpXSA9IHBhZ2VDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgcGFnZUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAobGV0
IGogPSAwOyBqIDwgcGFnZVNpemU7IGorKykgeworICAgICAgICAgICAgICAgIGFzc2VydEVxKGlu
dDhBcnJheVtpICogcGFnZVNpemUgKyBqXSwgaSArIDEpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgbGV0IGJ1ZmZlciA9IHguYnVmZmVyOworICAgICAgICBhc3NlcnRFcShi
dWZmZXIuYnl0ZUxlbmd0aCwgcGFnZUNvdW50ICogcGFnZVNpemUpOworICAgICAgICBidWZmZXJz
LnB1c2goYnVmZmVyKTsKKyAgICAgICAgbGV0IHByZXZpb3VzUGFnZVNpemUgPSB4Lmdyb3coMSk7
CisgICAgICAgIGFzc2VydEVxKGJ1ZmZlci5ieXRlTGVuZ3RoLCAwKTsKKyAgICAgICAgYXNzZXJ0
RXEocHJldmlvdXNQYWdlU2l6ZSwgcGFnZUNvdW50KTsKKyAgICAgICAgKytwYWdlQ291bnQ7Cisg
ICAgfQorfQorCitmb3IgKGxldCBidWZmZXIgb2YgYnVmZmVycykgeworICAgIGFzc2VydEVxKGJ1
ZmZlci5ieXRlTGVuZ3RoLCAwKTsKK30KSW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9t
ZW1vcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X21lbW9yeS5q
cwkocmV2aXNpb24gMjEwMTI5KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X21lbW9yeS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDMgQEAKLS8vIEZJWE1FOiB1c2UgdGhlIGFzc2Vy
dCBsaWJyYXJ5OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1Njg0
CiBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKIGltcG9ydCAqIGFzIGFzc2Vy
dCBmcm9tICcuLi9hc3NlcnQuanMnOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNp
b24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2MzksOCArMjYzOSw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmMKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1v
ZHVsZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKIAogICAgIGlm
ICghIW1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkpIHsKLSAgICAgICAgbWVtb3J5ID0gc3RkOjpt
YWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+KG1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkuaW5pdGlh
bCgpLCBtb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1heGltdW0oKSk7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1lbW9yeS0+aXNWYWxpZCgpKTsKKyAgICAgICAgYm9vbCBmYWlsZWQ7CisgICAg
ICAgIG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1h
dGlvbi0+bWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tYXhpbXVt
KCksIGZhaWxlZCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQpOwogICAgICAgICBt
ZW1vcnlCeXRlcyA9IG1lbW9yeS0+bWVtb3J5KCk7CiAgICAgICAgIG1lbW9yeVNpemUgPSBtZW1v
cnktPnNpemUoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJl
dmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwMiw3ICszMDIsNyBAQCBwdWJsaWM6CiAgICAgRXhlY1N0YXRlKiB0
b3BDYWxsRnJhbWU7CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB0b3BKU1dlYkFzc2VtYmx5
SW5zdGFuY2U7CiAgICAgdm9pZCogdG9wV2FzbU1lbW9yeVBvaW50ZXI7Ci0gICAgdWludDMyX3Qg
dG9wV2FzbU1lbW9yeVNpemU7CisgICAgdWludDY0X3QgdG9wV2FzbU1lbW9yeVNpemU7CiAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxMDEyOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcyLDYgKzE3Miw4IEBAIHB1YmxpYzoKICAgICAvLyBNZW1vcnkKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNl
dCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5
cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJf
dCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEdyb3dN
ZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICAvLyBCYXNpYyBvcGVyYXRvcnMKICAgICB0ZW1wbGF0
ZTxPcFR5cGU+CkBAIC0yMDMsNiArMjA1LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBlbWl0RXhj
ZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CiAKKyAgICB2b2lkIGVt
aXRSZWxvYWRQaW5uZWRSZWdpc3RlcnMoKTsKKwogcHJpdmF0ZToKICAgICBFeHByZXNzaW9uVHlw
ZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50
MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKICAgICBFeHByZXNzaW9uVHlwZSBlbWl0
TG9hZE9wKExvYWRPcFR5cGUsIE9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMy
X3Qgb2Zmc2V0KTsKQEAgLTMzMiw2ICszMzYsOTkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRV
bnJlYWNoYWJsZSgpIC0+IAogICAgIHJldHVybiB7IH07CiB9CiAKK3ZvaWQgQjNJUkdlbmVyYXRv
cjo6ZW1pdFJlbG9hZFBpbm5lZFJlZ2lzdGVycygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9p
bmZvLmhhc01lbW9yeSgpKTsKKyAgICBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiogbWVtb3J5ID0g
Jm1faW5mby5tZW1vcnk7CisKKyAgICBWZWN0b3I8VmFsdWUqPiBhcmd1bWVudHM7CisKKyAgICBW
YWx1ZSogYmFzZU1lbW9yeTsKKyAgICBWYWx1ZSogc2l6ZTsKKworICAgIHsKKyAgICAgICAgVmFs
dWUqIGluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksICZtX3ZtLnRvcEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSkpOworICAgICAgICBWYWx1ZSogbWVtb3J5ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mTWVtb3J5KCkpOworICAgICAgICBtZW1vcnkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLAor
ICAgICAgICAgICAgbWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgp
KTsKKworICAgICAgICBiYXNlTWVtb3J5ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIG1lbW9yeSwgTWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKTsKKworICAgICAgICBzaXplID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIG1lbW9yeSwgTWVtb3J5OjpvZmZzZXRP
ZlNpemUoKSk7CisgICAgfQorCisgICAgYXJndW1lbnRzLmFwcGVuZChiYXNlTWVtb3J5KTsKKyAg
ICBmb3IgKGF1dG8gaW5mbyA6IG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVy
cykgeworICAgICAgICBWYWx1ZSogc2l6ZVZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBTdWIsIE9yaWdpbigpLCBzaXplLCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgaW5mby5zaXplT2Zmc2V0KSk7
CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoc2l6ZVZhbHVlKTsKKyAgICB9CisKKyAgICBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxC
Mzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CisgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yV2l0
aFJlcChhcmd1bWVudHMsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworCisgICAgLy8gRklYTUU6
IHdvdWxkIGl0IHdvcmsganVzdCB0byBtYWtlIHRoZXNlIHRoaW5ncyBDb25zdHJhaW5lZFZhbHVl
cz8KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW21lbW9yeV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAg
ICAgICAKKyAgICAgICAgaml0Lm1vdmUocGFyYW1zWzBdLmdwcigpLCBtZW1vcnktPnBpbm5lZFJl
Z2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIGppdC5tb3ZlKHBhcmFtc1sxICsgaV0uZ3ByKCksIG1lbW9yeS0+cGlu
bmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1tpXS5zaXplUmVnaXN0ZXIpOworICAgIH0pOwor
fQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVs
dGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBpbnQz
Ml90ICgqZ3Jvd01lbW9yeSkgKEV4ZWNTdGF0ZSosIGludDMyX3QpID0gW10gKEV4ZWNTdGF0ZSog
ZXhlYywgaW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7IAorICAgICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IHZtLnRvcEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTsKKyAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogd2FzbU1lbW9yeSA9
IGluc3RhbmNlLT5tZW1vcnkoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQod2FzbU1lbW9yeSk7
IC8vIFRoaXMgd291bGQgZmFpbCB2YWxpZGF0aW9uIG90aGVyd2lzZS4KKworICAgICAgICBpZiAo
ZGVsdGEgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGJvb2wgc2hvdWxk
VGhyb3dFeGNlcHRpb25zT25GYWlsdXJlID0gZmFsc2U7CisgICAgICAgIFBhZ2VDb3VudCByZXN1
bHQgPSB3YXNtTWVtb3J5LT5ncm93KGV4ZWMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihkZWx0YSks
IHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAg
cmV0dXJuIC0xOworCisgICAgICAgIHZtLnRvcFdhc21NZW1vcnlQb2ludGVyID0gd2FzbU1lbW9y
eS0+bWVtb3J5KCktPm1lbW9yeSgpOworICAgICAgICB2bS50b3BXYXNtTWVtb3J5U2l6ZSA9IHdh
c21NZW1vcnktPm1lbW9yeSgpLT5zaXplKCk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5wYWdl
Q291bnQoKTsKKyAgICB9OworCisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KGdyb3dNZW1vcnkpKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkZyYW1lUG9pbnRlciwgT3JpZ2luKCkpLCBkZWx0
YSk7CisKKyAgICBlbWl0UmVsb2FkUGlubmVkUmVnaXN0ZXJzKCk7CisKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFZhbHVlKiBzaXplID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwgT3Jp
Z2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
bV9wcm9jLCBPcmlnaW4oKSwgJm1fdm0udG9wV2FzbU1lbW9yeVNpemUpKTsKKworICAgIFZhbHVl
KiBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVURp
diwgT3JpZ2luKCksCisgICAgICAgICAgICBzaXplLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgUGFnZUNvdW50OjpwYWdlU2l6ZSkpOwor
CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBU
cnVuYywgT3JpZ2luKCksIG51bVBhZ2VzKTsKKworICAgIHJldHVybiB7IH07Cit9CisKIGF1dG8g
QjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7CkBA
IC03NTMsNiArODUwLDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW4KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKKwor
ICAgIGlmIChmdW5jdGlvbkluZGV4IDwgbV9pbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKKyAg
ICAgICAgZW1pdFJlbG9hZFBpbm5lZFJlZ2lzdGVycygpOworCiAgICAgcmV0dXJuIHsgfTsKIH0K
IApAQCAtODI5LDYgKzkzMCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KGNvbnMKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKIAorICAgIGVtaXRSZWxvYWRQaW5u
ZWRSZWdpc3RlcnMoKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTkwMiwxMiArMTAwNSwx
MiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0mIHZtCiAgICAgaWYgKCEh
bWVtb3J5KSB7CiAgICAgICAgIGJhc2VNZW1vcnkgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksCiAgICAgICAgICAgICBibG9jay0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmdm0udG9wV2FzbU1lbW9yeVBv
aW50ZXIpKTsKLSAgICAgICAgVmFsdWUqIHNpemUgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgIFZhbHVlKiBzaXplID0g
YmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigp
LAogICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmln
aW4oKSwgJnZtLnRvcFdhc21NZW1vcnlTaXplKSk7CiAgICAgICAgIHNpemVzLnJlc2VydmVDYXBh
Y2l0eShtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycy5zaXplKCkpOwogICAg
ICAgICBmb3IgKGF1dG8gaW5mbyA6IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0
ZXJzKSB7CiAgICAgICAgICAgICBzaXplcy5hcHBlbmQoYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgU3ViLCBvcmlnaW4sIHNpemUsCi0gICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIG9yaWdpbiwgaW5mby5zaXplT2Zmc2V0KSkpOworICAgICAg
ICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBvcmlnaW4sIGlu
Zm8uc2l6ZU9mZnNldCkpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLVNlZ21l
bnQqIFNlZ21lbnQ6OmNyZWF0ZSh1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVJbkJ5dGVz
KQorU2VnbWVudCogU2VnbWVudDo6Y3JlYXRlKEkzMkluaXRFeHByIG9mZnNldCwgdWludDMyX3Qg
c2l6ZUluQnl0ZXMpCiB7CiAgICAgYXV0byBhbGxvY2F0ZWQgPSB0cnlGYXN0Q2FsbG9jKHNpemVv
ZihTZWdtZW50KSArIHNpemVJbkJ5dGVzLCAxKTsKICAgICBTZWdtZW50KiBzZWdtZW50OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjEwMTI5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzgsMTYgKzEzOCw1MSBAQCBzdHJ1Y3QgRnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
IHsKICAgICBzaXplX3QgZW5kOwogfTsKIAorY2xhc3MgSTMySW5pdEV4cHIgeworICAgIGVudW0g
VHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWwsCisgICAgICAgIENvbnN0CisgICAgfTsK
KworICAgIEkzMkluaXRFeHByKFR5cGUgdHlwZSwgdWludDMyX3QgYml0cykKKyAgICAgICAgOiBt
X2JpdHMoYml0cykKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICB7IH0KKworcHVibGljOgor
ICAgIEkzMkluaXRFeHByKCkgPSBkZWxldGU7CisKKyAgICBzdGF0aWMgSTMySW5pdEV4cHIgZm9y
R2xvYmFsSW1wb3J0KHVpbnQzMl90IGdsb2JhbEltcG9ydE51bWJlcikgeyByZXR1cm4gSTMySW5p
dEV4cHIoR2xvYmFsLCBnbG9iYWxJbXBvcnROdW1iZXIpOyB9CisgICAgc3RhdGljIEkzMkluaXRF
eHByIGZvckNvbnN0VmFsdWUodWludDMyX3QgY29uc3RWYWx1ZSkgeyByZXR1cm4gSTMySW5pdEV4
cHIoQ29uc3QsIGNvbnN0VmFsdWUpOyB9CisKKyAgICBib29sIGlzQ29uc3QoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGUgPT0gQ29uc3Q7IH0KKyAgICBib29sIGlzR2xvYmFsSW1wb3J0KCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlID09IEdsb2JhbDsgfQorICAgIHVpbnQzMl90IGNvbnN0VmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNDb25zdCgpKTsKKyAgICAgICAg
cmV0dXJuIG1fYml0czsKKyAgICB9CisgICAgdWludDMyX3QgZ2xvYmFsSW1wb3J0SW5kZXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNHbG9iYWxJbXBvcnQoKSk7Cisg
ICAgICAgIHJldHVybiBtX2JpdHM7CisgICAgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1f
Yml0czsKKyAgICBUeXBlIG1fdHlwZTsKK307CisKIHN0cnVjdCBTZWdtZW50IHsKLSAgICB1aW50
MzJfdCBvZmZzZXQ7CiAgICAgdWludDMyX3Qgc2l6ZUluQnl0ZXM7CisgICAgSTMySW5pdEV4cHIg
b2Zmc2V0OwogICAgIC8vIEJ5dGVzIGFyZSBhbGxvY2F0ZWQgYXQgdGhlIGVuZC4KICAgICB1aW50
OF90JiBieXRlKHVpbnQzMl90IHBvcykKICAgICB7CiAgICAgICAgIEFTU0VSVChwb3MgPCBzaXpl
SW5CeXRlcyk7Ci0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBzaXplb2Yob2Zmc2V0KSArIHNpemVvZihzaXpl
SW5CeXRlcykgKyBwb3MpOworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc2l6ZW9mKFNlZ21lbnQpICsgcG9z
KTsKICAgICB9Ci0gICAgc3RhdGljIFNlZ21lbnQqIGNyZWF0ZSh1aW50MzJfdCwgdWludDMyX3Qp
OworICAgIHN0YXRpYyBTZWdtZW50KiBjcmVhdGUoSTMySW5pdEV4cHIsIHVpbnQzMl90KTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KFNlZ21lbnQqKTsKICAgICB0eXBlZGVmIHN0ZDo6dW5pcXVl
X3B0cjxTZWdtZW50LCBkZWNsdHlwZSgmU2VnbWVudDo6ZGVzdHJveSk+IFB0cjsKICAgICBzdGF0
aWMgUHRyIGFkb3B0UHRyKFNlZ21lbnQqKTsKQEAgLTE5MSw3ICsyMjYsOSBAQCBzdHJ1Y3QgTW9k
dWxlSW5mb3JtYXRpb24gewogICAgIFZlY3RvcjxJbXBvcnQ+IGltcG9ydHM7CiAgICAgVmVjdG9y
PFNpZ25hdHVyZUluZGV4PiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CiAgICAgVmVj
dG9yPFNpZ25hdHVyZUluZGV4PiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKKwog
ICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKKwogICAgIFZlY3RvcjxFeHBvcnQ+IGV4cG9y
dHM7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gc3RhcnRGdW5jdGlvbkluZGV4U3BhY2U7
CiAgICAgVmVjdG9yPFNlZ21lbnQ6OlB0cj4gZGF0YTsKQEAgLTIwMCw2ICsyMzcsOSBAQCBzdHJ1
Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAgIFZlY3RvcjxHbG9iYWw+IGdsb2JhbHM7CiAgICAg
dW5zaWduZWQgZmlyc3RJbnRlcm5hbEdsb2JhbCB7IDAgfTsKIAorICAgIHVpbnQzMl90IGltcG9y
dEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUlu
ZGljZXMuc2l6ZSgpOyB9CisgICAgYm9vbCBoYXNNZW1vcnkoKSBjb25zdCB7IHJldHVybiAhIW1l
bW9yeTsgfQorCiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAkocmV2aXNpb24g
MjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3OCwxMiArNDc4LDM2IEBAIGF1dG8gRnVuY3Rpb25QYXJz
ZXI8Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAg
ICBjYXNlIEdyb3dNZW1vcnk6Ci0gICAgICAgIHJldHVybiBmYWlsKCJub3QgeWV0IGltcGxlbWVu
dGVkOiBncm93X21lbW9yeSIpOyAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KKyAgICBj
YXNlIEdyb3dNZW1vcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLm1l
bW9yeSwgImdyb3dfbWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5lZCBv
ciBpbXBvcnRlZCIpOworCisgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWQ7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmVzZXJ2ZWQpLCAiQ2FuJ3QgcGFyc2UgcmVz
ZXJ2ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVtb3J5Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYocmVzZXJ2ZWQgIT0gMCwgInJlc2VydmVkIHZhclVpbnQxIGZvciBncm93X21lbW9yeSBt
dXN0IGJlIHplcm8iKTsKKworICAgICAgICBFeHByZXNzaW9uVHlwZSBkZWx0YTsKKyAgICAgICAg
V0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhkZWx0YSwgIkV4cGVjdCBhbiBpMzIg
YXJndW1lbnQgdG8gZ3Jvd19tZW1vcnkgb24gdGhlIHN0YWNrIik7CisKKyAgICAgICAgRXhwcmVz
c2lvblR5cGUgcmVzdWx0OworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRHcm93
TWVtb3J5KGRlbHRhLCByZXN1bHQpKTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5k
KHJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIEN1cnJl
bnRNZW1vcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLm1lbW9yeSwg
ImN1cnJlbnRfbWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5lZCBvciBp
bXBvcnRlZCIpOwogCi0gICAgY2FzZSBDdXJyZW50TWVtb3J5OgotICAgICAgICByZXR1cm4gZmFp
bCgibm90IHlldCBpbXBsZW1lbnRlZDogY3VycmVudF9tZW1vcnkiKTsgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQuCisgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWQ7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmVzZXJ2ZWQpLCAiQ2FuJ3QgcGFyc2UgcmVz
ZXJ2ZWQgdmFyVWludDEgZm9yIGN1cnJlbnRfbWVtb3J5Iik7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYocmVzZXJ2ZWQgIT0gMCwgInJlc2VydmVkIHZhclVpbnQxIGZvciBjdXJyZW50X21l
bW9yeSBtdXN0IGJlIHplcm8iKTsKKworICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Cisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEN1cnJlbnRNZW1vcnkocmVzdWx0KSk7
CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
NTg0LDYgKzYwOCwxMyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVh
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBHcm93TWVtb3J5OgorICAg
IGNhc2UgQ3VycmVudE1lbW9yeTogeworICAgICAgICB1aW50OF90IHJlc2VydmVkOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJlc2VydmVkKSwgIkNhbid0IHBh
cnNlIHJlc2VydmVkIHZhclVpbnQxIGZvciBncm93X21lbW9yeS9jdXJyZW50X21lbW9yeSIpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIC8vIG5vIGltbWVkaWF0ZSBjYXNlcwog
ICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKENSRUFURV9DQVNFKQogICAgIEZPUl9FQUNIX1dB
U01fVU5BUllfT1AoQ1JFQVRFX0NBU0UpCkBAIC01OTEsOSArNjIyLDcgQEAgYXV0byBGdW5jdGlv
blBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYQogICAgIGNhc2UgTm9wOgogICAgIGNhc2UgUmV0
dXJuOgogICAgIGNhc2UgU2VsZWN0OgotICAgIGNhc2UgRHJvcDoKLSAgICBjYXNlIEdyb3dNZW1v
cnk6Ci0gICAgY2FzZSBDdXJyZW50TWVtb3J5OiB7CisgICAgY2FzZSBEcm9wOiB7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnkuY3BwCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMzcgKzMwLDg4
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1lbW9yeTo6TWVtb3J5
KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKK3N0YXRpY19hc3NlcnQoc2l6
ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhl
IG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzIgd2hpY2ggaXMgbGFyZ2Vy
IHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0
IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7CisKK01lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCYgZmFpbGVkKQogICAgIDogbV9tb2RlKE1vZGU6
OkJvdW5kc0NoZWNraW5nKQotICAgICwgbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKLSAgICAsIG1f
Y2FwYWNpdHkobWF4aW11bSA/IG1heGltdW0uYnl0ZXMoKSA6IFBhZ2VDb3VudDo6bWF4KCkuYnl0
ZXMoKSkKICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0p
CisgICAgLCBtX3NpemUoaW5pdGlhbC5ieXRlcygpKQogICAgIC8vIEZJWE1FOiBJZiB3ZSBhZGQg
c2lnbmFsIGJhc2VkIGJvdW5kcyBjaGVja2luZyB0aGVuIHdlIG5lZWQgZXh0cmEgc3BhY2UgZm9y
IG92ZXJmbG93IG9uIGxvYWQuCiAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1heGltdW0gfHwg
bWF4aW11bSA+PSBpbml0aWFsKTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBvdXIg
Y2FsbGVyLgogCi0gICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1fY2FwYWNpdHk7CisgICAgZmFpbGVk
ID0gZmFsc2U7CisKKyAgICBtX21hcHBlZENhcGFjaXR5ID0gbWF4aW11bSA/IG1heGltdW0uYnl0
ZXMoKSA6IFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKTsKKyAgICBpZiAoIW1fbWFwcGVkQ2FwYWNp
dHkpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBzcGVjaWZpZWQgYSB6ZXJvIGFzIG1heGlt
dW0gKHdoaWNoIG1lYW5zIHdlIGFsc28gaGF2ZSB6ZXJvIGFzIGluaXRpYWwgc2l6ZSkuCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc2l6ZSA9PSAwKTsKKyAgICAgICAgbV9tYXBwZWRDYXBhY2l0
eSA9IDA7CisgICAgICAgIG1fbWVtb3J5ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGhhZCBhIFZNIHRhZyBm
b3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjM2MDAKLSAgICB2b2lkKiByZXN1bHQgPSBtbWFwKG51bGxwdHIsIG1fbWFwcGVkQ2FwYWNpdHks
IFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwotICAgIGlmIChyZXN1
bHQgPT0gTUFQX0ZBSUxFRCkgeworICAgIC8vdm9pZCogcmVzdWx0ID0gbW1hcChudWxscHRyLCBt
X21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAw
KTsKKyAgICB2b2lkKiByZXN1bHQ7CisgICAgaWYgKC8qcmVzdWx0ID09IE1BUF9GQUlMRUQqLyB0
cnVlKSB7CiAgICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4KICAg
ICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1fc2l6ZTsKKyAgICAgICAgaWYgKCFtX21hcHBlZENh
cGFjaXR5KSB7CisgICAgICAgICAgICBtX21lbW9yeSA9IG51bGxwdHI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICByZXN1bHQgPSBtbWFwKG51bGxwdHIsIG1fbWFw
cGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwot
ICAgICAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpCisgICAgICAgIGlmIChyZXN1bHQgPT0g
TUFQX0ZBSUxFRCkgeworICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEFTU0VSVChtX3NpemUgPD0gbV9tYXBwZWRD
YXBhY2l0eSk7Ci0gICAgaWYgKG1wcm90ZWN0KHJlc3VsdCwgbV9zaXplLCBQUk9UX1JFQUQgfCBQ
Uk9UX1dSSVRFKSkgewotICAgICAgICBtdW5tYXAocmVzdWx0LCBtX21hcHBlZENhcGFjaXR5KTsK
LSAgICAgICAgcmV0dXJuOworICAgIHsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gIW1wcm90ZWN0
KHJlc3VsdCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dS
SVRFKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CiAgICAgfQogCiAgICAgbV9t
ZW1vcnkgPSByZXN1bHQ7CiB9CiAKK2Jvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXpl
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG5ld1NpemUgPiBQYWdlQ291bnQ6OmZyb21CeXRlcyht
X3NpemUpKTsKKworICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+IG1heGltdW0oKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWludDY0X3QgZGVzaXJlZFNpemUgPSBuZXdTaXpl
LmJ5dGVzKCk7CisKKyAgICBpZiAobV9tZW1vcnkgJiYgZGVzaXJlZFNpemUgPD0gbV9tYXBwZWRD
YXBhY2l0eSkgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSAhbXByb3RlY3Qoc3RhdGljX2Nhc3Q8
dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkZXNpcmVk
U2l6ZSAtIG1fc2l6ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdWNjZXNzKTsKKyAgICAgICAgbV9zaXplID0gZGVzaXJlZFNpemU7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgbGV0J3MgdHJ5IHRvIG1h
a2Ugc29tZSBuZXcgbWVtb3J5LgorICAgIHZvaWQqIG5ld01lbW9yeSA9IG1tYXAobnVsbHB0ciwg
ZGVzaXJlZFNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FO
T04sIC0xLCAwKTsKKyAgICBpZiAobmV3TWVtb3J5ID09IE1BUF9GQUlMRUQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChtX21lbW9yeSkgeworICAgICAgICBtZW1jcHkobmV3TWVt
b3J5LCBtX21lbW9yeSwgbV9zaXplKTsKKyAgICAgICAgbXVubWFwKG1fbWVtb3J5LCBtX21hcHBl
ZENhcGFjaXR5KTsKKyAgICB9CisgICAgbV9tZW1vcnkgPSBuZXdNZW1vcnk7CisgICAgbV9tYXBw
ZWRDYXBhY2l0eSA9IGRlc2lyZWRTaXplOworICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiB9IC8vIG5hbWVzcGFj
ZSBXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCShyZXZp
c2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgICAgICBCb3VuZHND
aGVja2luZwogICAgIH07CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnkoUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBNZW1v
cnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpOwog
CiAgICAgfk1lbW9yeSgpCiAgICAgewpAQCAtNTIsMzUgKzUyLDI2IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSk7CiAgICAgfQogCi0gICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9yeTsgfQotCiAgICAgdm9pZCog
bWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnk7IH0KLSAgICB1aW50MzJfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgdWludDY0X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQorICAgIFBhZ2VDb3VudCBzaXplSW5QYWdlcygpIGNvbnN0IHsgcmV0dXJu
IFBhZ2VDb3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSk7IH0KIAogICAgIE1vZGUgbW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZTsgfQogCiAgICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJl
dHVybiBtX2luaXRpYWw7IH0KICAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWF4aW11bTsgfQogCi0gICAgYm9vbCBncm93KHVpbnQzMl90IG5ld1NpemUpCi0gICAgewot
ICAgICAgICBBU1NFUlQobV9tZW1vcnkpOwotICAgICAgICBpZiAobmV3U2l6ZSA+IG1fY2FwYWNp
dHkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuICFtcHJvdGVj
dChtX21lbW9yeSwgbmV3U2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0gICAgfQorICAg
IGJvb2wgZ3JvdyhQYWdlQ291bnQpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNp
emUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX3NpemUpOyB9Ci0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KE1lbW9yeSwgbV9tZW1vcnkpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQqIG1fbWVtb3J5
IHsgbnVsbHB0ciB9OwogICAgIE1vZGUgbV9tb2RlOwotICAgIHVpbnQzMl90IG1fc2l6ZSB7IDAg
fTsKLSAgICB1aW50MzJfdCBtX2NhcGFjaXR5IHsgMCB9OwogICAgIFBhZ2VDb3VudCBtX2luaXRp
YWw7CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKKyAgICB1aW50NjRfdCBtX3NpemUgeyAwIH07
CiAgICAgdWludDY0X3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCShyZXZpc2lv
biAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKIAorQUxXQVlTX0lOTElORSBJMzJJbml0RXhwciBtYWtlSTMySW5p
dEV4cHIodWludDhfdCBvcGNvZGUsIHVpbnQzMl90IGJpdHMpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQob3Bjb2RlID09IEkzMkNvbnN0IHx8IG9wY29kZSA9PSBHZXRHbG9iYWwpOworICAgIGlmIChv
cGNvZGUgPT0gSTMyQ29uc3QpCisgICAgICAgIHJldHVybiBJMzJJbml0RXhwcjo6Zm9yQ29uc3RW
YWx1ZShiaXRzKTsKKyAgICByZXR1cm4gSTMySW5pdEV4cHI6OmZvckdsb2JhbEltcG9ydChiaXRz
KTsKK30KKwogYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiB7CiAgICAgbV9y
ZXN1bHQubW9kdWxlID0gc3RkOjptYWtlX3VuaXF1ZTxNb2R1bGVJbmZvcm1hdGlvbj4oKTsKQEAg
LTI4OSw3ICsyOTcsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgpIC0+IFBhcnRp
CiAKIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3Jlc3VsdC5tb2R1
bGUtPm1lbW9yeSwgIk1lbW9yeSBzZWN0aW9uIGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFz
IGEgbWVtb3J5Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighIW1fcmVzdWx0Lm1vZHVsZS0+
bWVtb3J5LCAiTWVtb3J5IHNlY3Rpb24gY2Fubm90IGV4aXN0IGlmIGFuIEltcG9ydCBoYXMgYSBt
ZW1vcnkiKTsKIAogICAgIFBhZ2VDb3VudCBpbml0aWFsUGFnZUNvdW50OwogICAgIFBhZ2VDb3Vu
dCBtYXhpbXVtUGFnZUNvdW50OwpAQCAtMzE5LDggKzMyNyw4IEBAIGF1dG8gTW9kdWxlUGFyc2Vy
OjpwYXJzZU1lbW9yeUhlbHBlcihib28KIAogYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5
KCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIHVpbnQ4X3QgY291bnQ7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2Vj
dGlvbidzIGNvdW50Iik7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgcGFyc2UgTWVtb3J5IHNlY3Rpb24n
cyBjb3VudCIpOwogCiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTM0
MiwzMiArMzUwLDEyIEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpIC0+IFBhcnQK
ICAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwogCiAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQ
RVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOwotICAgICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgZ2xvYmFsLmluaXRpYWxCaXRz
T3JJbXBvcnROdW1iZXIpKTsKLQotICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0g
R2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKICAgICAgICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsK
LSAgICAgICAgc3dpdGNoIChpbml0T3Bjb2RlKSB7Ci0gICAgICAgIGNhc2UgSTMyQ29uc3Q6Ci0g
ICAgICAgICAgICB0eXBlRm9ySW5pdE9wY29kZSA9IEkzMjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEk2NENvbnN0OgotICAgICAgICAgICAgdHlwZUZvckluaXRPcGNvZGUgPSBJ
NjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGMzJDb25zdDoKLSAgICAgICAg
ICAgIHR5cGVGb3JJbml0T3Bjb2RlID0gRjMyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRjY0Q29uc3Q6Ci0gICAgICAgICAgICB0eXBlRm9ySW5pdE9wY29kZSA9IEY2NDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEdsb2JhbDoKLSAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPj0gbV9y
ZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsLCBnbG9iYWxJbmRleCwgInRoIEdsb2Jh
bCB1c2VzIGdldF9nbG9iYWwgIiwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIsICIg
d2hpY2ggZXhjZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1fcmVzdWx0Lm1vZHVs
ZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0gICAgICAgICAgICB0eXBlRm9ySW5pdE9wY29kZSA9
IG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFsc1tnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJl
cl0udHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHBy
KGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9ySW5p
dE9wY29kZSkpOworICAgICAgICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCiAgICAgICAg
ICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9IEdsb2JhbDo6RnJvbUV4cHJlc3Np
b247CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZUZvckluaXRPcGNvZGUgIT0gZ2xv
YmFsLnR5cGUsICJHbG9iYWwgaW5pdF9leHByIG9wY29kZSBvZiB0eXBlICIsIHR5cGVGb3JJbml0
T3Bjb2RlLCAiIGRvZXNuJ3QgbWF0Y2ggZ2xvYmFsJ3MgdHlwZSAiLCBnbG9iYWwudHlwZSk7CiAK
ICAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KGdsb2JhbCkpOwpAQCAtNDUxLDcgKzQzOSw4IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUVs
ZW1lbnQoKSAtPiBQYXIKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggRWxlbWVudCB0
YWJsZSBpbmRleCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhYmxlSW5kZXgsICJF
bGVtZW50IHNlY3Rpb24gY2FuIG9ubHkgaGF2ZSBvbmUgVGFibGUgZm9yIG5vdyIpOwotICAgICAg
ICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgb2Zm
c2V0KSk7CisgICAgICAgIFR5cGUgaW5pdEV4cHJUeXBlOworICAgICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgb2Zmc2V0LCBpbml0RXhwclR5
cGUpKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0T3Bjb2RlICE9IE9wVHlwZTo6
STMyQ29uc3QsICJFbGVtZW50IHNlY3Rpb24gZG9lc24ndCBzdXBwb3J0IG5vbi1pMzIgaW5pdF9l
eHByIG9wY29kZSBmb3Igbm93LCBnb3QgIiwgaW5pdE9wY29kZSk7CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGVs
ZW1lbnROdW0sICJ0aCBpbmRleCBjb3VudCBmb3IgRWxlbWVudCBzZWN0aW9uIik7CiAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXhDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggaW5k
ZXggY291bnQgaXMgdG9vIGJpZyAiLCBpbmRleENvdW50KTsKQEAgLTUwOSw3ICs0OTgsNyBAQCBh
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VDb2RlKCkgLT4gUGFydGlhCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1
aW50NjRfdCYgYml0c09ySW1wb3J0TnVtYmVyKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIE1vZHVs
ZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJ
bXBvcnROdW1iZXIsIFR5cGUmIHJlc3VsdFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9l
eHByJ3Mgb3Bjb2RlIik7CiAKQEAgLTUxOCw2ICs1MDcsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6
cGFyc2VJbml0RXhwcih1aW50OF90CiAgICAgICAgIGludDMyX3QgY29uc3RhbnQ7CiAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0
IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBpMzIuY29uc3QiKTsKICAgICAgICAgYml0
c09ySW1wb3J0TnVtYmVyID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbnN0YW50KTsKKyAgICAg
ICAgcmVzdWx0VHlwZSA9IEkzMjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01MjUsNiAr
NTE1LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdAogICAgICAg
ICBpbnQ2NF90IGNvbnN0YW50OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
ckludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHBy
J3MgaTY0LmNvbnN0Iik7CiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNvbnN0YW50Owor
ICAgICAgICByZXN1bHRUeXBlID0gSTY0OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTUz
Miw2ICs1MjMsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90CiAg
ICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRf
ZXhwcidzIGYzMi5jb25zdCIpOwogICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFu
dDsKKyAgICAgICAgcmVzdWx0VHlwZSA9IEYzMjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBA
IC01MzksNiArNTMxLDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhf
dAogICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VVSW50NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBp
bml0X2V4cHIncyBmNjQuY29uc3QiKTsKICAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29u
c3RhbnQ7CisgICAgICAgIHJlc3VsdFR5cGUgPSBGNjQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IApAQCAtNTUxLDcgKzU0NCw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVp
bnQ4X3QKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnQua2luZEluZGV4ID49IG1f
cmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgImdldF9nbG9iYWwgaW1wb3J0IGtp
bmQgaW5kZXggIiwgaW1wb3J0LmtpbmRJbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5h
bCBnbG9iYWwgIiwgbV9yZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsKTsKIAogICAg
ICAgICBBU1NFUlQobV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11
dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUpOwotCisgICAgICAgIHJlc3VsdFR5cGUgPSBt
X3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHNbaW5kZXhdLnR5cGU7CiAgICAgICAgIGJpdHNPckltcG9y
dE51bWJlciA9IGluZGV4OwogICAgICAgICBicmVhazsKICAgICB9CkBAIC01ODYsMTggKzU3OSwx
OSBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKCkgLT4gUGFydGlhCiAKICAgICBmb3Ig
KHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVudENvdW50
OyArK3NlZ21lbnROdW1iZXIpIHsKICAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAgICAgIHVp
bnQ2NF90IG9mZnNldDsKKyAgICAgICAgdWludDY0X3QgaW5pdEV4cHJCaXRzOwogICAgICAgICB1
aW50OF90IGluaXRPcGNvZGU7CiAgICAgICAgIHVpbnQzMl90IGRhdGFCeXRlTGVuZ3RoOwogCiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0
IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgaW5kZXgiKTsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2Vn
bWVudCBoYXMgbm9uLXplcm8gaW5kZXggIiwgaW5kZXgpOwotICAgICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgb2Zmc2V0KSk7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdE9wY29kZSAhPSBPcFR5cGU6OkkzMkNvbnN0LCBzZWdt
ZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50IGhhcyBvcGNvZGUgIiwgaW5pdE9wY29kZSwgIiBl
eHBlY3RlZCBpMzIuY29uc3QiKTsKKyAgICAgICAgVHlwZSBpbml0RXhwclR5cGU7CisgICAgICAg
IFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0
RXhwckJpdHMsIGluaXRFeHByVHlwZSkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGlu
aXRFeHByVHlwZSAhPSBJMzIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBpbml0
X2V4cHIgbXVzdCBwcm9kdWNlIGFuIGkzMiIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihkYXRhQnl0ZUxlbmd0aCksICJjYW4ndCBnZXQgIiwgc2VnbWVudE51
bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBsZW5ndGgiKTsKICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihkYXRhQnl0ZUxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCksIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5
dGUgbGVuZ3RoIGlzIHRvbyBiaWcgIiwgZGF0YUJ5dGVMZW5ndGgpOwogCi0gICAgICAgIFNlZ21l
bnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUob2Zmc2V0LCBkYXRhQnl0ZUxlbmd0aCk7Cisg
ICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUobWFrZUkzMkluaXRFeHBy
KGluaXRPcGNvZGUsIGluaXRFeHByQml0cyksIGRhdGFCeXRlTGVuZ3RoKTsKICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6ZSAiLCBkYXRhQnl0
ZUxlbmd0aCk7CiAgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+ZGF0YS51bmNoZWNrZWRBcHBlbmQo
U2VnbWVudDo6YWRvcHRQdHIoc2VnbWVudCkpOwogICAgICAgICBmb3IgKHVpbnQzMl90IGRhdGFC
eXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0ZSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkocmV2aXNp
b24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHByaXZhdGU6CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBl
cihib29sIGlzSW1wb3J0KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4mIG1heGltdW0pOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1aW50OF90JiwgdWludDY0X3QmLCBUeXBlJiBp
bml0RXhwclR5cGUpOwogCiAgICAgTW9kdWxlUGFyc2VyUmVzdWx0IG1fcmVzdWx0OwogICAgIGJv
b2wgbV9oYXNUYWJsZSB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGFnZUNvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBhZ2VDb3VudC5oCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEzICs0Miwy
MiBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9wYWdlQ291bnQocGFnZUNvdW50KQogICAgIHsgfQog
Ci0gICAgc2l6ZV90IGJ5dGVzKCkgeyByZXR1cm4gbV9wYWdlQ291bnQgKiBwYWdlU2l6ZTsgfQor
ICAgIHVpbnQ2NF90IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1fcGFnZUNvdW50KSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90PihwYWdlU2l6ZSk7IH0KKyAgICB1
aW50MzJfdCBwYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VDb3VudDsgfQogCiAgICAg
c3RhdGljIGJvb2wgaXNWYWxpZCh1aW50MzJfdCBwYWdlQ291bnQpCiAgICAgewogICAgICAgICBy
ZXR1cm4gcGFnZUNvdW50IDw9IG1heFBhZ2VDb3VudDsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFn
ZUNvdW50IGZyb21CeXRlcyh1aW50NjRfdCBieXRlcykKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGJ5dGVzICUgcGFnZVNpemUgPT0gMCk7CisgICAgICAgIHVpbnQzMl90IG51bVBhZ2Vz
ID0gYnl0ZXMgLyBwYWdlU2l6ZTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoUGFnZUNvdW50Ojpp
c1ZhbGlkKG51bVBhZ2VzKSk7CisgICAgICAgIHJldHVybiBQYWdlQ291bnQobnVtUGFnZXMpOwor
ICAgIH0KKwogICAgIHN0YXRpYyBQYWdlQ291bnQgbWF4KCkKICAgICB7CiAgICAgICAgIHJldHVy
biBQYWdlQ291bnQobWF4UGFnZUNvdW50KTsKQEAgLTYyLDkgKzcxLDE4IEBAIHB1YmxpYzoKICAg
ICBib29sIG9wZXJhdG9yPChjb25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25zdCB7IHJldHVybiBt
X3BhZ2VDb3VudCA8IG90aGVyLm1fcGFnZUNvdW50OyB9CiAgICAgYm9vbCBvcGVyYXRvcj4oY29u
c3QgUGFnZUNvdW50JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wYWdlQ291bnQgPiBvdGhlci5t
X3BhZ2VDb3VudDsgfQogICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBQYWdlQ291bnQmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX3BhZ2VDb3VudCA+PSBvdGhlci5tX3BhZ2VDb3VudDsgfQorICAg
IFBhZ2VDb3VudCBvcGVyYXRvcisoY29uc3QgUGFnZUNvdW50JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIGlmIChzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG1fcGFnZUNvdW50LCBvdGhlci5tX3BhZ2VD
b3VudCkpCisgICAgICAgICAgICByZXR1cm4gUGFnZUNvdW50KCk7CisgICAgICAgIHVpbnQzMl90
IG5ld0NvdW50ID0gbV9wYWdlQ291bnQgKyBvdGhlci5tX3BhZ2VDb3VudDsKKyAgICAgICAgaWYg
KCFQYWdlQ291bnQ6OmlzVmFsaWQobmV3Q291bnQpKQorICAgICAgICAgICAgcmV0dXJuIFBhZ2VD
b3VudCgpOworICAgICAgICByZXR1cm4gUGFnZUNvdW50KG5ld0NvdW50KTsKKyAgICB9CiAKLXBy
aXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBwYWdlU2l6ZSA9IDY0ICogS0I7
Citwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbWF4UGFnZUNvdW50ID0g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgxdWxsIDw8IDMyKSAvIHBhZ2VTaXplKTsKIAogICAgIHVp
bnQzMl90IG1fcGFnZUNvdW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YXJzZXIuaAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsOCArMjM1LDEwIEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjoKICAgICB1aW50MzJfdCB0ZW1wOwogICAg
IGlmICghcGFyc2VWYXJVSW50MzIodGVtcCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAodGVtcCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQgPSBzdGF0aWNf
Y2FzdDx1aW50OF90Pih0ZW1wKTsKLSAgICByZXR1cm4gdGVtcCA8PSAxOworICAgIHJldHVybiB0
cnVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAkocmV2aXNpb24gMjEwMTI5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMyLDYgKzEzMiw4IEBAIHB1YmxpYzoKICAgICBSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxD
b250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3Qg
RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lv
blN0YWNrKTsKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFi
bGUoQ29udHJvbEVudHJ5Jik7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRHcm93
TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAg
ICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7CiAKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hh
YmxlKCkgeyByZXR1cm4geyB9OyB9CiAKQEAgLTI5Miw2ICsyOTQsMTkgQEAgYXV0byBWYWxpZGF0
ZTo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIAogICAgIHJldHVybiBjaGVja0JyYW5jaFRhcmdl
dChkZWZhdWx0VGFyZ2V0LCBleHByZXNzaW9uU3RhY2spOwogfQogCithdXRvIFZhbGlkYXRlOjph
ZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBSZXN1bHQKK3sKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGRlbHRhICE9IEkzMiwg
Imdyb3dfbWVtb3J5IHdpdGggbm9uLWkzMiBkZWx0YSIpOworICAgIHJlc3VsdCA9IEkzMjsKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIFZhbGlkYXRlOjphZGRDdXJyZW50TWVtb3J5KEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAoreworICAgIHJlc3VsdCA9IEkzMjsKKyAgICBy
ZXR1cm4geyB9OworfQorCiBhdXRvIFZhbGlkYXRlOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVu
dHJ5LCBFeHByZXNzaW9uTGlzdCYgc3RhY2spIC0+IFJlc3VsdAogewogICAgIFdBU01fRkFJTF9J
Rl9IRUxQRVJfRkFJTFModW5pZnkoc3RhY2ssIGVudHJ5LmNvbnRyb2xEYXRhKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTg4LDgg
Kzg4LDggQEAKICAgICAgICAgImk2NC5zdG9yZSI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJt
ZW1vcnkiLCAgICAgInZhbHVlIjogIDU1LCAicmV0dXJuIjogW10sICAgICAgICAgICAicGFyYW1l
dGVyIjogWyJhZGRyIiwgImk2NCJdLCAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJm
bGFncyIsICAgICAgICAgICJ0eXBlIjogInZhcnVpbnQzMiJ9LCB7Im5hbWUiOiAib2Zmc2V0Iiwg
InR5cGUiOiAidmFydWludDMyIn1dLCAiZGVzY3JpcHRpb24iOiAic3RvcmUgdG8gbWVtb3J5IiB9
LAogICAgICAgICAiZjMyLnN0b3JlIjogICAgICAgICAgIHsgImNhdGVnb3J5IjogIm1lbW9yeSIs
ICAgICAidmFsdWUiOiAgNTYsICJyZXR1cm4iOiBbXSwgICAgICAgICAgICJwYXJhbWV0ZXIiOiBb
ImFkZHIiLCAiZjMyIl0sICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImZsYWdzIiwg
ICAgICAgICAgInR5cGUiOiAidmFydWludDMyIn0sIHsibmFtZSI6ICJvZmZzZXQiLCAidHlwZSI6
ICJ2YXJ1aW50MzIifV0sICJkZXNjcmlwdGlvbiI6ICJzdG9yZSB0byBtZW1vcnkiIH0sCiAgICAg
ICAgICJmNjQuc3RvcmUiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAibWVtb3J5IiwgICAgICJ2
YWx1ZSI6ICA1NywgInJldHVybiI6IFtdLCAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYWRkciIs
ICJmNjQiXSwgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAgICAgICAg
ICAidHlwZSI6ICJ2YXJ1aW50MzIifSwgeyJuYW1lIjogIm9mZnNldCIsICJ0eXBlIjogInZhcnVp
bnQzMiJ9XSwgImRlc2NyaXB0aW9uIjogInN0b3JlIHRvIG1lbW9yeSIgfSwKLSAgICAgICAgImN1
cnJlbnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjog
IDYzLCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAicXVlcnkgdGhlIHNpemUgb2YgbWVtb3J5IiB9LAotICAgICAgICAi
Z3Jvd19tZW1vcnkiOiAgICAgICAgIHsgImNhdGVnb3J5IjogIm9wZXJhdGlvbiIsICAidmFsdWUi
OiAgNjQsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJwYXJhbWV0ZXIiOiBbInNpemUiXSwgICAg
ICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJncm93IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKKyAgICAgICAg
ImN1cnJlbnRfbWVtb3J5IjogICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVl
IjogIDYzLCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogW10sICAgICAgICAg
ICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFncyIsICJ0eXBlIjogInZh
cnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJxdWVyeSB0aGUgc2l6ZSBvZiBtZW1vcnkiIH0sCisgICAgICAgICJncm93X21lbW9yeSI6ICAg
ICAgICAgeyAiY2F0ZWdvcnkiOiAib3BlcmF0aW9uIiwgICJ2YWx1ZSI6ICA2NCwgInJldHVybiI6
IFsic2l6ZSJdLCAgICAgInBhcmFtZXRlciI6IFsic2l6ZSJdLCAgICAgICAgICAgICAgICAgImlt
bWVkaWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiZ3JvdyB0aGUgc2l6ZSBv
ZiBtZW1vcnkiIH0sCiAgICAgICAgICJpMzIuYWRkIjogICAgICAgICAgICAgeyAiY2F0ZWdvcnki
OiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwNiwgInJldHVybiI6IFsiaTMyIl0sICAgICAgInBh
cmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAiYjNv
cCI6ICJBZGQiICAgICAgICAgIH0sCiAgICAgICAgICJpMzIuc3ViIjogICAgICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwNywgInJldHVybiI6IFsiaTMyIl0s
ICAgICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImltbWVkaWF0ZSI6
IFtdLCAiYjNvcCI6ICJTdWIiICAgICAgICAgIH0sCiAgICAgICAgICJpMzIubXVsIjogICAgICAg
ICAgICAgeyAiY2F0ZWdvcnkiOiAiYXJpdGhtZXRpYyIsICJ2YWx1ZSI6IDEwOCwgInJldHVybiI6
IFsiaTMyIl0sICAgICAgInBhcmFtZXRlciI6IFsiaTMyIiwgImkzMiJdLCAgICAgICAgICAgImlt
bWVkaWF0ZSI6IFtdLCAiYjNvcCI6ICJNdWwiICAgICAgICAgIH0sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAko
cmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fdGFibGUpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fbWVtb3J5KTsgfQogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSwgbV9nbG9iYWxzKTsgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAko
cmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKIAotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNs
dWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTU1LDYgKzU1LDE1IEBAIEpTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2Vi
QXNzZW1ibHlNZW1vcnkKIHsKIH0KIAorSlNXZWJBc3NlbWJseU1lbW9yeTo6fkpTV2ViQXNzZW1i
bHlNZW1vcnkoKQoreworICAgIGlmIChtX2J1ZmZlcikgeworICAgICAgICBBcnJheUJ1ZmZlckNv
bnRlbnRzIGR1bW15Q29udGVudHM7CisgICAgICAgIG1fYnVmZmVyLT50cmFuc2ZlclRvKGR1bW15
Q29udGVudHMpOworICAgICAgICBtX2J1ZmZlciA9IG51bGxwdHI7CisgICAgfQorfQorCiBKU0Fy
cmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIGlmIChtX2J1ZmZlcldyYXBwZXIpCkBAIC03MSw2
ICs4MCw0OCBAQCBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmCiAgICAg
cmV0dXJuIG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKIH0KIAorV2FzbTo6UGFnZUNvdW50IEpTV2Vi
QXNzZW1ibHlNZW1vcnk6Omdyb3coRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9v
bCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBtX21lbW9yeS0+c2l6ZUluUGFnZXMo
KTsKKworICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKGRlbHRhKSkgeworICAgICAg
ICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQorICAgICAgICAgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IGV4cGVjdHMgdGhlIGRlbHRhIHRvIGJlIGEg
dmFsaWQgcGFnZSBjb3VudCIpKSk7CisgICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsK
KyAgICB9CisKKyAgICBXYXNtOjpQYWdlQ291bnQgbmV3U2l6ZSA9IG9sZFBhZ2VDb3VudCArIFdh
c206OlBhZ2VDb3VudChkZWx0YSk7CisgICAgaWYgKCFuZXdTaXplKSB7CisgICAgICAgIGlmIChz
aG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
V2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0aGUgZ3Jvd24gc2l6ZSB0byBiZSBhIHZh
bGlkIHBhZ2UgY291bnQiKSkpOworICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7Cisg
ICAgfQorCisgICAgaWYgKGRlbHRhKSB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fbWVtb3J5
LT5ncm93KG5ld1NpemUpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlm
IChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCisgICAgICAgICAgICAgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7
CisgICAgICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIG91dCB0aGUgb2xkIGFycmF5IGJ1ZmZlciBiZWNh
dXNlIGl0IG1pZ2h0IG5vdyBiZSBwb2ludGluZworICAgIC8vIHRvIHN0YWxlIG1lbW9yeS4KKyAg
ICAvLyBOZXV0ZXIgdGhlIG9sZCBhcnJheS4KKyAgICBpZiAobV9idWZmZXIpIHsKKyAgICAgICAg
QXJyYXlCdWZmZXJDb250ZW50cyBkdW1teUNvbnRlbnRzOworICAgICAgICBtX2J1ZmZlci0+dHJh
bnNmZXJUbyhkdW1teUNvbnRlbnRzKTsKKyAgICAgICAgbV9idWZmZXIgPSBudWxscHRyOworICAg
ICAgICBtX2J1ZmZlcldyYXBwZXIuY2xlYXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2xkUGFn
ZUNvdW50OworfQorCiB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShyZXZp
c2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDEzIEBAIHB1YmxpYzoKIAog
ICAgIFdhc206Ok1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAg
ICBKU0FycmF5QnVmZmVyKiBidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopOworICAgIFdh
c206OlBhZ2VDb3VudCBncm93KEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhLCBib29sIHNob3Vs
ZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnks
IG1fbWVtb3J5KTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYs
IFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+JiYpOworICAgIH5KU1dl
YkFzc2VtYmx5TWVtb3J5KCk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkocmV2aXNpb24gMjEwMTI5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSwyMCArNTUsMjAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
ZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSk7CiAgICAgICAg
IHJldHVybiBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5idWZmZXIuZ2V0KClbZnVuY3Rpb25JbmRleFNw
YWNlXS5zaWduYXR1cmVJbmRleDsKICAgICB9Ci0gICAgdW5zaWduZWQgaW1wb3J0Q291bnQoKSBj
b25zdCB7IHJldHVybiBtX3dhc21Ub0pTU3R1YnMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgZnVu
Y3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbVRvSlNTdHVicy5zaXplKCk7
IH0KIAogICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGltcG9ydENvdW50KCkpOwot
ICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGltcG9y
dENvdW50KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBm
dW5jdGlvbkltcG9ydENvdW50KCkpOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1
bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKICAgICAgICAgcmV0dXJuIGNh
bGxlZXMoKVtjYWxsZWVJbmRleF0uZ2V0KCk7CiAgICAgfQogCiAgICAgSlNXZWJBc3NlbWJseUNh
bGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0
aW9uSW5kZXhTcGFjZSA+PSBpbXBvcnRDb3VudCgpKTsKLSAgICAgICAgdW5zaWduZWQgY2FsbGVl
SW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBpbXBvcnRDb3VudCgpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsK
KyAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5j
dGlvbkltcG9ydENvdW50KCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwg
bV9jYWxsZWVDb3VudCk7CiAgICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBt
X2NhbGxlZUNvdW50XS5nZXQoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyOSw4ICsyMjksOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9y
dCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eS5pc0ltcG9ydCgpKTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0
J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpNZW1vcnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4
aW11bSgpKTsKLSAgICAgICAgICAgIGlmICghbWVtb3J5LT5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICBib29sIGZhaWxlZDsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+
IG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpLCBm
YWlsZWQpOworICAgICAgICAgICAgaWYgKGZhaWxlZCkKICAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnko
dm0sCiAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RG
TW92ZShtZW1vcnkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDggKzk2LDkgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gc3RkOjptYWtlX3Vu
aXF1ZTxXYXNtOjpNZW1vcnk+KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOwot
ICAgIGlmICghbWVtb3J5LT5pc1ZhbGlkKCkpCisgICAgYm9vbCBmYWlsZWQ7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpN
ZW1vcnk+KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGZhaWxlZCk7CisgICAg
aWYgKGZhaWxlZCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgp
LCBXVEZNb3ZlKG1lbW9yeSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TWVtb3J5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJz
LmgiCiAKICNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5sdXQuaCIKIApAQCAt
NDQsMjEgKzQ1LDUxIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHkK
ICBAZW5kCiAgKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNz
ZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4ZWNTdGF0ZSop
OworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVu
Y0dyb3coRXhlY1N0YXRlKik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNz
ZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQorQUxXQVlTX0lOTElO
RSBKU1dlYkFzc2VtYmx5TWVtb3J5KiBnZXRNZW1vcnkoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBt
ZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihleGVjLT50aGlzVmFs
dWUoKSk7IAorICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZhbHVlKTsgCiAgICAgaWYgKCFtZW1vcnkpIHsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCAKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiV2ViQXNzZW1ibHkuTWVtb3J5LnByb3RvdHlwZS5idWZmZXIgZ2V0dGVyIGNhbGxlZCB3aXRo
IG5vbiBXZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8IHZhbHVlIikpKSk7CisgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIAorICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5LnByb3RvdHlwZS5idWZmZXIg
Z2V0dGVyIGNhbGxlZCB3aXRoIG5vbiBXZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8IHZhbHVlIikp
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIHJldHVybiBtZW1vcnk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1
bmNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnkoZXhlYywgZXhlYy0+dGhpc1ZhbHVl
KCkpOyAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShtZW1vcnktPmJ1ZmZlcihleGVjLT52bSgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3
ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnko
ZXhlYywgZXhlYy0+dGhpc1ZhbHVlKCkpOyAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CisgICAgCisgICAgdWludDMyX3QgZGVsdGEgPSB0b05vbldyYXBwaW5nVWlu
dDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CisKKyAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVy
ZSA9IHRydWU7CisgICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3JvdyhleGVj
LCBkZWx0YSwgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKHJlc3VsdC5wYWdlQ291bnQoKSkpOworfQorCiBXZWJBc3NlbWJseU1lbW9yeVBy
b3RvdHlwZSogV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGF1
dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUodm0sIHN0cnVj
dHVyZSk7CkBAIC03NSw2ICsxMDYsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBl
OjpmaW5pc2hDCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEpTQ19OQVRJ
VkVfR0VUVEVSKCJidWZmZXIiLCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlciwgRG9u
dEVudW0gfCBBY2Nlc3Nvcik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5T
SVRJT04oImdyb3ciLCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3csIERvbnRFbnVtLCAx
KTsKIH0KIAogV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OldlYkFzc2VtYmx5TWVtb3J5UHJv
dG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcg
QEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgIGNvbnN0IFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxl
SW5mb3JtYXRpb24oKTsKIAogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IG1v
ZHVsZS0+ZXhwb3J0U3ltYm9sVGFibGUoKTsKLSAgICB1bnNpZ25lZCBpbXBvcnRDb3VudCA9IG1v
ZHVsZS0+aW1wb3J0Q291bnQoKTsKKyAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0g
bW9kdWxlLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CiAKICAgICAvLyBGSVhNRSB3aXJlIHVwIHRo
ZSBpbXBvcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MTE4
CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5r
KEV4ZWNTCiAgICAgICAgICAgICAvLyAxLiBJZiBlIGlzIGEgY2xvc3VyZSBjOgogICAgICAgICAg
ICAgLy8gICBpLiBJZiB0aGVyZSBpcyBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0
IGZ1bmMgaW4gZnVuY3Mgd2hvc2UgZnVuYy5bW0Nsb3N1cmVdXSBlcXVhbHMgYywgdGhlbiByZXR1
cm4gZnVuYy4KICAgICAgICAgICAgIC8vICAgaWkuIChOb3RlOiBBdCBtb3N0IG9uZSB3cmFwcGVy
IGlzIGNyZWF0ZWQgZm9yIGFueSBjbG9zdXJlLCBzbyBmdW5jIGlzIHVuaXF1ZSwgZXZlbiBpZiB0
aGVyZSBhcmUgbXVsdGlwbGUgb2NjdXJyYW5jZXMgaW4gdGhlIGxpc3QuIE1vcmVvdmVyLCBpZiB0
aGUgaXRlbSB3YXMgYW4gaW1wb3J0IHRoYXQgaXMgYWxyZWFkeSBhbiBFeHBvcnRlZCBGdW5jdGlv
biBFeG90aWMgT2JqZWN0LCB0aGVuIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBvYmplY3Qgd2lsbCBi
ZSBmb3VuZC4gRm9yIGltcG9ydHMgdGhhdCBhcmUgcmVndWxhciBKUyBmdW5jdGlvbnMsIGEgbmV3
IHdyYXBwZXIgd2lsbCBiZSBjcmVhdGVkLikKLSAgICAgICAgICAgIGlmIChleHAua2luZEluZGV4
IDwgaW1wb3J0Q291bnQpIHsKKyAgICAgICAgICAgIGlmIChleHAua2luZEluZGV4IDwgZnVuY3Rp
b25JbXBvcnRDb3VudCkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FIEltcGxlbWVudCByZS1l
eHBvcnRpbmcgYW4gaW1wb3J0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NTEwCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgIH0KQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgIC8vIFRoZSBzdGFydCBmdW5jdGlvbiBtdXN0IG5v
dCB0YWtlIGFueSBhcmd1bWVudHMgb3IgcmV0dXJuIGFueXRoaW5nLiBUaGlzIGlzIGVuZm9yY2Vk
IGJ5IHRoZSBwYXJzZXIuCiAgICAgICAgIEFTU0VSVCghc2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCkpOwogICAgICAgICBBU1NFUlQoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPT0gV2FzbTo6Vm9p
ZCk7Ci0gICAgICAgIGlmIChzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1vZHVsZS0+aW1wb3J0
Q291bnQoKSkgeworICAgICAgICBpZiAoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPCBtb2R1bGUt
PmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewogICAgICAgICAgICAgSlNDZWxsKiBzdGFydEZ1bmN0
aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKS0+
Z2V0KCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBzdGFydEZ1
bmN0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE5Niw4ICsxOTYsOCBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgbV9tb2R1bGVFbnZpcm9ubWVudC5z
ZXQodm0sIHRoaXMsIG1vZHVsZUVudmlyb25tZW50KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IFNjb3BlLCB0eXBlbmFtZSBOLCB0eXBlbmFtZSAuLi5BcmdzPgotTkVWRVJfSU5MSU5FIHN0YXRp
YyBKU1ZhbHVlIGRhdGFTZWdtZW50RmFpbChFeGVjU3RhdGUqIHN0YXRlLCBWTSYgdm0sIFNjb3Bl
JiBzY29wZSwgTiBtZW1vcnlTaXplLCBOIHNlZ21lbnRTaXplLCBOIG9mZnNldCwgQXJncy4uLiBh
cmdzKQordGVtcGxhdGUgPHR5cGVuYW1lIFNjb3BlLCB0eXBlbmFtZSBNLCB0eXBlbmFtZSBOLCB0
eXBlbmFtZSAuLi5BcmdzPgorTkVWRVJfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGRhdGFTZWdtZW50
RmFpbChFeGVjU3RhdGUqIHN0YXRlLCBWTSYgdm0sIFNjb3BlJiBzY29wZSwgTSBtZW1vcnlTaXpl
LCBOIHNlZ21lbnRTaXplLCBOIG9mZnNldCwgQXJncy4uLiBhcmdzKQogewogICAgIHJldHVybiB0
aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
c3RhdGUsIHZtLCBtYWtlU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBkYXRhIHNlZ21lbnQg
aW5pdGlhbGl6YXRpb246IHNlZ21lbnQgb2YgIiksIFN0cmluZzo6bnVtYmVyKHNlZ21lbnRTaXpl
KSwgQVNDSUlMaXRlcmFsKCIgYnl0ZXMgbWVtb3J5IG9mICIpLCBTdHJpbmc6Om51bWJlcihtZW1v
cnlTaXplKSwgQVNDSUlMaXRlcmFsKCIgYnl0ZXMsIGF0IG9mZnNldCAiKSwgU3RyaW5nOjpudW1i
ZXIob2Zmc2V0KSwgYXJncy4uLikpKTsKIH0KQEAgLTIzMSw3ICsyMzEsNyBAQCBKU1ZhbHVlIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0CiAgICAgICAgICAgICAgICAgLy8gZm9yIHRo
ZSBpbXBvcnQuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTUxMAogICAgICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoZnVu
Y3Rpb25JbmRleCA8IG1vZHVsZS0+aW1wb3J0Q291bnQoKSkgeworICAgICAgICAgICAgICAgIGlm
IChmdW5jdGlvbkluZGV4IDwgbW9kdWxlLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93Vk1SYW5nZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJFbGVt
ZW50IGlzIHNldHRpbmcgdGhlIHRhYmxlIHZhbHVlIHdpdGggYW4gaW1wb3J0LiBUaGlzIGlzIG5v
dCB5ZXQgaW1wbGVtZW50ZWQuIEZJWE1FLiIpKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjU5
LDE1ICsyNTksMjIgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdAog
ICAgICAgICBpZiAoIWRhdGEuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChqc01lbW9yeSk7IC8vIEl0IGlzIGEgdmFsaWRhdGlvbiBlcnJvciBmb3IgYSBEYXRhIHNlY3Rp
b24gdG8gZXhpc3Qgd2l0aG91dCBhIE1lbW9yeSBzZWN0aW9uIG9yIGltcG9ydC4KICAgICAgICAg
ICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGpzTWVtb3J5
LT5tZW1vcnkoKS0+bWVtb3J5KCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobWVtb3J5
KTsKLSAgICAgICAgICAgIGF1dG8gc2l6ZUluQnl0ZXMgPSBqc01lbW9yeS0+bWVtb3J5KCktPnNp
emUoKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHNpemVJbkJ5dGVzID0ganNNZW1vcnktPm1lbW9y
eSgpLT5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHNlZ21lbnQgOiBkYXRhKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQtPnNpemVJbkJ5dGVzKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiB3aGF0J3MgdGhlIGJlaGFiaW9yIGhlcmU/IERvIHdlIHN0YXRpY19j
YXN0PHVpbnQzMl90PihpbnQzMl90KSBvciBkbyB3ZSB0aHJvdyBleGNlcHRpb24gb24gPCAwPwor
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAg
IGlmIChzZWdtZW50LT5vZmZzZXQuaXNHbG9iYWxJbXBvcnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG9mZnNldCA9IG1faW5zdGFuY2UtPmxvYWRJMzJHbG9iYWwoc2VnbWVudC0+b2Zmc2V0
Lmdsb2JhbEltcG9ydEluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzZWdtZW50LT5vZmZzZXQuY29uc3RWYWx1ZSgpOwor
CiAgICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzaXplSW5CeXRlcyA8IHNlZ21lbnQt
PnNpemVJbkJ5dGVzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhU2VnbWVu
dEZhaWwoc3RhdGUsIHZtLCBzY29wZSwgc2l6ZUluQnl0ZXMsIHNlZ21lbnQtPnNpemVJbkJ5dGVz
LCBzZWdtZW50LT5vZmZzZXQsIEFTQ0lJTGl0ZXJhbCgiLCBzZWdtZW50IGlzIHRvbyBiaWciKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzZWdtZW50LT5vZmZzZXQgPiBzaXpl
SW5CeXRlcyAtIHNlZ21lbnQtPnNpemVJbkJ5dGVzKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBkYXRhU2VnbWVudEZhaWwoc3RhdGUsIHZtLCBzY29wZSwgc2l6ZUluQnl0ZXMsIHNl
Z21lbnQtPnNpemVJbkJ5dGVzLCBzZWdtZW50LT5vZmZzZXQsIEFTQ0lJTGl0ZXJhbCgiLCBzZWdt
ZW50IHdyaXRlcyBvdXRzaWRlIG9mIG1lbW9yeSIpKTsKLSAgICAgICAgICAgICAgICAgICAgbWVt
Y3B5KG1lbW9yeSArIHNlZ21lbnQtPm9mZnNldCwgJnNlZ21lbnQtPmJ5dGUoMCksIHNlZ21lbnQt
PnNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhU2VnbWVu
dEZhaWwoc3RhdGUsIHZtLCBzY29wZSwgc2l6ZUluQnl0ZXMsIHNlZ21lbnQtPnNpemVJbkJ5dGVz
LCBvZmZzZXQsIEFTQ0lJTGl0ZXJhbCgiLCBzZWdtZW50IGlzIHRvbyBiaWciKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShvZmZzZXQgPiBzaXplSW5CeXRlcyAtIHNlZ21lbnQt
PnNpemVJbkJ5dGVzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhU2VnbWVu
dEZhaWwoc3RhdGUsIHZtLCBzY29wZSwgc2l6ZUluQnl0ZXMsIHNlZ21lbnQtPnNpemVJbkJ5dGVz
LCBvZmZzZXQsIEFTQ0lJTGl0ZXJhbCgiLCBzZWdtZW50IHdyaXRlcyBvdXRzaWRlIG9mIG1lbW9y
eSIpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobWVtb3J5KTsKKyAgICAg
ICAgICAgICAgICAgICAgbWVtY3B5KG1lbW9yeSArIG9mZnNldCwgJnNlZ21lbnQtPmJ5dGUoMCks
IHNlZ21lbnQtPnNpemVJbkJ5dGVzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297781</attachid>
            <date>2016-12-27 00:37:20 -0800</date>
            <delta_ts>2016-12-27 16:45:42 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>71778</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTAxNTMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI2IEBACisyMDE2LTEyLTI3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBJbXBsZW1lbnQgZ3Jvd19tZW1vcnkgYW5kIGN1
cnJlbnRfbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjY0NDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5ODAzNjc2PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS55YW1sOgorICAg
ICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvZ3Jvdy1tZW1vcnktMi5qczogQWRkZWQuCisgICAg
ICAgIChjb25zdC5mdW5jKToKKyAgICAgICAgKGFzc2VydC5lcS5pbnN0YW5jZS5leHBvcnRzLmZv
byk6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9ncm93LW1lbW9yeS5qczogQWRkZWQu
CisgICAgICAgIChiaW5hcnlTaG91bGROb3RQYXJzZSk6CisgICAgICAgIChhc3NlcnQudHJ1dGh5
KToKKyAgICAgICAgKGFzc2VydC5lcSk6CisgICAgICAgIChtZW1vcnkuZ3Jvdyk6CisgICAgICAg
ICogd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanM6IEFkZGVkLgorICAgICAgICAoaS5pKToKKyAg
ICAgICAgKGFzc2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X21lbW9yeS5qczoK
KyAgICAgICAgKiB3YXNtL3dhc20uanNvbjoKKwogMjAxNi0xMi0yNSAgWXVzdWtlIFN1enVraSAg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBQcm9wYWdhdGUgdGhlIHNvdXJjZSBv
cmlnaW4gYXMgbXVjaCBhcyBwb3NzaWJsZQpJbmRleDogSlNUZXN0cy93YXNtLnlhbWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy93YXNtLnlhbWwJKHJldmlzaW9uIDIxMDEyOSkKKysrIEpTVGVzdHMv
d2FzbS55YW1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAKICAgY21kOiBydW5X
ZWJBc3NlbWJseVNwZWNUZXN0IDpub3JtYWwKIAogLSBwYXRoOiB3YXNtL3NwZWMtdGVzdHMvbWVt
b3J5X3RyYXAud2FzdC5qcwotICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3BlY1Rlc3QgOnNraXAKKyAg
Y21kOiBydW5XZWJBc3NlbWJseVNwZWNUZXN0IDpub3JtYWwKIAogLSBwYXRoOiB3YXNtL3NwZWMt
dGVzdHMvbmFtZXMud2FzdC5qcwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3BlY1Rlc3QgOnNraXAK
SW5kZXg6IEpTVGVzdHMvd2FzbS93YXNtLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNt
L3dhc20uanNvbgkocmV2aXNpb24gMjEwMTI5KQorKysgSlNUZXN0cy93YXNtL3dhc20uanNvbgko
d29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsOCBAQAogICAgICAgICAiaTY0LnN0b3JlIjogICAg
ICAgICAgIHsgImNhdGVnb3J5IjogIm1lbW9yeSIsICAgICAidmFsdWUiOiAgNTUsICJyZXR1cm4i
OiBbXSwgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFkZHIiLCAiaTY0Il0sICAgICAgICAgICJp
bW1lZGlhdGUiOiBbeyJuYW1lIjogImZsYWdzIiwgICAgICAgICAgInR5cGUiOiAidmFydWludDMy
In0sIHsibmFtZSI6ICJvZmZzZXQiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICJkZXNjcmlwdGlv
biI6ICJzdG9yZSB0byBtZW1vcnkiIH0sCiAgICAgICAgICJmMzIuc3RvcmUiOiAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAibWVtb3J5IiwgICAgICJ2YWx1ZSI6ICA1NiwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgInBhcmFtZXRlciI6IFsiYWRkciIsICJmMzIiXSwgICAgICAgICAgImltbWVkaWF0
ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAgICAgICAgICAidHlwZSI6ICJ2YXJ1aW50MzIifSwgeyJu
YW1lIjogIm9mZnNldCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgImRlc2NyaXB0aW9uIjogInN0
b3JlIHRvIG1lbW9yeSIgfSwKICAgICAgICAgImY2NC5zdG9yZSI6ICAgICAgICAgICB7ICJjYXRl
Z29yeSI6ICJtZW1vcnkiLCAgICAgInZhbHVlIjogIDU3LCAicmV0dXJuIjogW10sICAgICAgICAg
ICAicGFyYW1ldGVyIjogWyJhZGRyIiwgImY2NCJdLCAgICAgICAgICAiaW1tZWRpYXRlIjogW3si
bmFtZSI6ICJmbGFncyIsICAgICAgICAgICJ0eXBlIjogInZhcnVpbnQzMiJ9LCB7Im5hbWUiOiAi
b2Zmc2V0IiwgInR5cGUiOiAidmFydWludDMyIn1dLCAiZGVzY3JpcHRpb24iOiAic3RvcmUgdG8g
bWVtb3J5IiB9LAotICAgICAgICAiY3VycmVudF9tZW1vcnkiOiAgICAgIHsgImNhdGVnb3J5Ijog
Im9wZXJhdGlvbiIsICAidmFsdWUiOiAgNjMsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJwYXJh
bWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJxdWVyeSB0aGUgc2l6ZSBv
ZiBtZW1vcnkiIH0sCi0gICAgICAgICJncm93X21lbW9yeSI6ICAgICAgICAgeyAiY2F0ZWdvcnki
OiAib3BlcmF0aW9uIiwgICJ2YWx1ZSI6ICA2NCwgInJldHVybiI6IFsic2l6ZSJdLCAgICAgInBh
cmFtZXRlciI6IFsic2l6ZSJdLCAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImdyb3cgdGhlIHNpemUg
b2YgbWVtb3J5IiB9LAorICAgICAgICAiY3VycmVudF9tZW1vcnkiOiAgICAgIHsgImNhdGVnb3J5
IjogIm9wZXJhdGlvbiIsICAidmFsdWUiOiAgNjMsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1l
IjogImZsYWdzIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogInF1ZXJ5IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKKyAg
ICAgICAgImdyb3dfbWVtb3J5IjogICAgICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAg
InZhbHVlIjogIDY0LCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogWyJzaXpl
Il0sICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFncyIsICJ0eXBl
IjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJncm93IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKICAgICAgICAgImkzMi5hZGQiOiAg
ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJhcml0aG1ldGljIiwgInZhbHVlIjogMTA2LCAicmV0
dXJuIjogWyJpMzIiXSwgICAgICAicGFyYW1ldGVyIjogWyJpMzIiLCAiaTMyIl0sICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW10sICJiM29wIjogIkFkZCIgICAgICAgICAgfSwKICAgICAgICAgImkz
Mi5zdWIiOiAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJhcml0aG1ldGljIiwgInZhbHVlIjog
MTA3LCAicmV0dXJuIjogWyJpMzIiXSwgICAgICAicGFyYW1ldGVyIjogWyJpMzIiLCAiaTMyIl0s
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICJiM29wIjogIlN1YiIgICAgICAgICAgfSwKICAg
ICAgICAgImkzMi5tdWwiOiAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJhcml0aG1ldGljIiwg
InZhbHVlIjogMTA4LCAicmV0dXJuIjogWyJpMzIiXSwgICAgICAicGFyYW1ldGVyIjogWyJpMzIi
LCAiaTMyIl0sICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICJiM29wIjogIk11bCIgICAgICAg
ICAgfSwKSW5kZXg6IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9ncm93LW1lbW9yeS0yLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9ncm93LW1lbW9yeS0y
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9ncm93LW1l
bW9yeS0yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKK2ltcG9ydCBCdWlsZGVy
IGZyb20gJy4uL0J1aWxkZXIuanMnOworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2Vy
dC5qcyc7CisKK3sKKyAgICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAwLCBt
YXhpbXVtOiAyfTsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAg
IC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJp
bXAiLCAibWVtb3J5IiwgbWVtb3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImltcCIsICJmdW5jIiwge3BhcmFtczogW10sIHJldDogInZvaWQifSkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIifSkK
KyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQor
ICAgICAgICAgICAgICAgIC5JMzJMb2FkKDAsIDApCisgICAgICAgICAgICAgICAgLlJldHVybigp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0g
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHku
TWVtb3J5KG1lbW9yeURlc2NyaXB0aW9uKTsKKworICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiB7Cisg
ICAgICAgIG1lbW9yeS5ncm93KDEpOworICAgICAgICAobmV3IFVpbnQzMkFycmF5KG1lbW9yeS5i
dWZmZXIpKVswXSA9IDQyOworICAgIH07CisKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHttZW1vcnksIGZ1bmN9fSk7CisgICAgYXNz
ZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDApLCA0Mik7Cit9CisKK3sKKyAgICBjb25zdCBt
ZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAwLCBtYXhpbXVtOiAyfTsKKyAgICBjb25zdCB0
YWJsZURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDEsIG1heGltdW06IDEsIGVsZW1lbnQ6ICJhbnlm
dW5jIn07CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlw
ZSgpCisgICAgICAgICAgICAuRnVuYyhbXSwgInZvaWQiKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkltcG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5
RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmdW5jIiwge3BhcmFt
czogW10sIHJldDogInZvaWQifSkKKyAgICAgICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwg
dGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVu
ZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJp
MzIifSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuQ2Fs
bEluZGlyZWN0KDAsIDApIC8vIGNhbGwgW10gPT4gdm9pZAorICAgICAgICAgICAgICAgIC5HZXRM
b2NhbCgwKQorICAgICAgICAgICAgICAgIC5JMzJMb2FkKDAsIDApCisgICAgICAgICAgICAgICAg
LlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFy
Iiwge3BhcmFtczogW10sIHJldDogInZvaWQifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQor
ICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5F
bmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3Qg
bWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7CisgICAg
Y29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7CisK
KyAgICBjb25zdCBmdW5jID0gKCkgPT4geworICAgICAgICBtZW1vcnkuZ3JvdygxKTsKKyAgICAg
ICAgKG5ldyBVaW50MzJBcnJheShtZW1vcnkuYnVmZmVyKSlbMF0gPSAweGJhZGJlZWY7CisgICAg
fTsKKworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSwge2ltcDoge21lbW9yeSwgZnVuYywgdGFibGV9fSk7CisgICAgdGFibGUuc2V0KDAsIGluc3Rh
bmNlLmV4cG9ydHMuYmFyKTsKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mb28oMCks
IDB4YmFkYmVlZik7Cit9CkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZ3Jvdy1t
ZW1vcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2dyb3ct
bWVtb3J5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9n
cm93LW1lbW9yeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNyBAQAoraW1wb3J0IEJ1
aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4v
YXNzZXJ0LmpzJzsKKworY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7Citjb25zdCBtYXhQYWdl
Q291bnQgPSAoMioqMzIpIC8gcGFnZVNpemU7CisKK2Z1bmN0aW9uIGJpbmFyeVNob3VsZE5vdFBh
cnNlKGJ1aWxkZXIsIG1zZyA9ICIiKSB7CisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICB9IGNhdGNo
KGUpIHsKKyAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29t
cGlsZUVycm9yKTsKKyAgICAgICAgaWYgKG1zZykKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHko
ZS5tZXNzYWdlLmluZGV4T2YobXNnKSAhPT0gLTEpOworICAgICAgICB0aHJldyA9IHRydWU7Cisg
ICAgfQorICAgIGFzc2VydC50cnV0aHkodGhyZXcpOworfQorCit7CisgICAgLy8gQ2FuJ3QgZ3Jv
d19tZW1vcnkgaWYgbm8gbWVtb3J5IGlzIGRlZmluZWQuCisgICAgY29uc3QgYnVpbGRlciA9IChu
ZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oe3JldDogInZvaWQiLCBwYXJhbXM6IFtdfSkKKyAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMjUpCisgICAgICAgICAgICAgICAgLkdyb3dNZW1vcnkoMCkKKyAgICAgICAg
ICAgICAgICAuRHJvcCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisg
ICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRlciwgImdyb3dfbWVtb3J5IGlzIG9ubHkgdmFs
aWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIpOworfQorCit7CisgICAgLy8g
Q2FuJ3QgY3VycmVudF9tZW1vcnkgaWYgbm8gbWVtb3J5IGlzIGRlZmluZWQuCisgICAgY29uc3Qg
YnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQoKQorICAgICAgICAuQ29k
ZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oe3JldDogInZvaWQiLCBwYXJhbXM6IFtdfSkKKyAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMjUpCisgICAgICAgICAgICAgICAgLkN1cnJlbnRNZW1v
cnkoMCkKKyAgICAgICAgICAgICAgICAuRHJvcCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpOworCisgICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRlciwgImN1cnJlbnRf
bWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIp
OworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnko
KS5Jbml0aWFsTWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0OiAidm9pZCIsIHBhcmFt
czogW119KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAgICAgICAgICAgICAgICAu
R3Jvd01lbW9yeSgxKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyLCAi
cmVzZXJ2ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVtb3J5IG11c3QgYmUgemVybyIpOworfQorCit7
CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnkoKS5Jbml0aWFs
TWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0OiAidm9pZCIsIHBhcmFtczogW119KQor
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAgICAgICAgICAgICAgICAuQ3VycmVudE1l
bW9yeSgxKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyLCAicmVzZXJ2
ZWQgdmFyVWludDEgZm9yIGN1cnJlbnRfbWVtb3J5IG11c3QgYmUgemVybyIpOworfQorCit7Cisg
ICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4
UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgpCisgICAgICAgIC5Db2Rl
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0OiAidm9pZCIsIHBhcmFtczogW119KQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAgICAgICAgICAgICAgICAuQ3VycmVudE1lbW9y
eSgweGZmZmZmZjAwKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyLCAi
Y2FuJ3QgcGFyc2UgcmVzZXJ2ZWQgdmFyVWludDEgZm9yIGN1cnJlbnRfbWVtb3J5Iik7Cit9CisK
K3sKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLk1lbW9yeSgpLkluaXRp
YWxNYXhQYWdlcygxLCAxKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKHtyZXQ6ICJ2b2lkIiwgcGFyYW1zOiBbXX0p
CisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDI1KQorICAgICAgICAgICAgICAgIC5Hcm93TWVt
b3J5KDB4ZmZmZmZmMDApCisgICAgICAgICAgICAgICAgLkRyb3AoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIs
ICJjYW4ndCBwYXJzZSByZXNlcnZlZCB2YXJVaW50MSBmb3IgZ3Jvd19tZW1vcnkiKTsKK30KKwor
eworICAgIGNvbnN0IG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDIwLCBtYXhpbXVtOiA1
MH07CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlE
ZXNjcmlwdGlvbikuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbImkz
MiJdLCByZXQ6ICJpMzIifSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAg
ICAgICAgICAuR3Jvd01lbW9yeSgwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7aW1wOiB7bWVtb3J5OiBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURl
c2NyaXB0aW9uKX19KTsKKyAgICBsZXQgY3VycmVudFBhZ2VTaXplID0gbWVtb3J5RGVzY3JpcHRp
b24uaW5pdGlhbDsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbW9yeURlc2NyaXB0aW9uLm1h
eGltdW0gLSBtZW1vcnlEZXNjcmlwdGlvbi5pbml0aWFsOyBpKyspIHsKKyAgICAgICAgYXNzZXJ0
LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDEpLCBjdXJyZW50UGFnZVNpemUpOworICAgICAgICAr
K2N1cnJlbnRQYWdlU2l6ZTsKKyAgICB9CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7
IGkrKykgeworICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mb28oMSksIC0xKTsK
KyAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDApLCBjdXJyZW50UGFnZVNp
emUpOworICAgIH0KK30KKworeworICAgIGNvbnN0IG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRp
YWw6IDIwLCBtYXhpbXVtOiAxMDB9OworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIo
KSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAi
LCAibWVtb3J5IiwgbWVtb3J5RGVzY3JpcHRpb24pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJm
b28iLCB7IHBhcmFtczogW10sIHJldDogImkzMiJ9KQorICAgICAgICAgICAgICAgIC5DdXJyZW50
TWVtb3J5KDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURlc2NyaXB0
aW9uKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUsIHtpbXA6IHttZW1vcnl9fSk7CisgICAgbGV0IGN1cnJlbnRQYWdlU2l6ZSA9IG1lbW9yeURl
c2NyaXB0aW9uLmluaXRpYWw7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW1vcnlEZXNjcmlw
dGlvbi5tYXhpbXVtIC0gbWVtb3J5RGVzY3JpcHRpb24uaW5pdGlhbDsgaSsrKSB7CisgICAgICAg
IGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygpLCBjdXJyZW50UGFnZVNpemUpOworICAg
ICAgICArK2N1cnJlbnRQYWdlU2l6ZTsKKyAgICAgICAgbWVtb3J5Lmdyb3coMSk7CisgICAgfQor
fQorCit7CisgICAgY29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMjAsIG1heGlt
dW06IDEwMH07CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBt
ZW1vcnlEZXNjcmlwdGlvbikuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KC0xKQorICAgICAg
ICAgICAgICAgIC5Hcm93TWVtb3J5KDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5
KG1lbW9yeURlc2NyaXB0aW9uKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHttZW1vcnl9fSk7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAyMDsgaSsrKSB7CisgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygp
LCAtMSk7CisgICAgfQorfQpJbmRleDogSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCShub25l
eGlzdGVudCkKKysrIEpTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MSBAQAoraW1wb3J0IHsgZXEgYXMgYXNzZXJ0RXEsIHRocm93cyBh
cyBhc3NlcnRUaHJvd3MgfSBmcm9tICIuLi9hc3NlcnQuanMiOworY29uc3QgcGFnZVNpemUgPSA2
NCoxMDI0OworCitsZXQgYnVmZmVycyA9IFtdOworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkr
KykgeworICAgIGNvbnN0IG1heCA9IDU7CisgICAgbGV0IHBhZ2VDb3VudCA9IDE7CisgICAgbGV0
IHggPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOiAxLCBtYXhpbXVtOiBtYXh9KTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IChtYXggLSAxKTsgaSsrKSB7CisgICAgICAgIGxldCBp
bnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheSh4LmJ1ZmZlcik7CisKKyAgICAgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCBwYWdlU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBhc3NlcnRFcShpbnQ4QXJy
YXlbcGFnZVNpemUqKHBhZ2VDb3VudCAtIDEpICsgaV0sIDApOworICAgICAgICAgICAgaW50OEFy
cmF5W3BhZ2VTaXplKihwYWdlQ291bnQgLSAxKSArIGldID0gcGFnZUNvdW50OworICAgICAgICB9
CisKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlQ291bnQ7IGkrKykgeworICAgICAg
ICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYWdlU2l6ZTsgaisrKSB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0RXEoaW50OEFycmF5W2kgKiBwYWdlU2l6ZSArIGpdLCBpICsgMSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsZXQgYnVmZmVyID0geC5idWZmZXI7CisgICAg
ICAgIGFzc2VydEVxKGJ1ZmZlci5ieXRlTGVuZ3RoLCBwYWdlQ291bnQgKiBwYWdlU2l6ZSk7Cisg
ICAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpOworICAgICAgICBsZXQgcHJldmlvdXNQYWdlU2l6
ZSA9IHguZ3JvdygxKTsKKyAgICAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDApOwor
ICAgICAgICBhc3NlcnRFcShwcmV2aW91c1BhZ2VTaXplLCBwYWdlQ291bnQpOworICAgICAgICAr
K3BhZ2VDb3VudDsKKyAgICB9Cit9CisKK2ZvciAobGV0IGJ1ZmZlciBvZiBidWZmZXJzKSB7Cisg
ICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDApOworfQorCit7CisgICAgY29uc3QgbWVt
b3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMSwgbWF4aW11bTogNX0pOwor
ICAgIGxldCBidWZmZXIgPSBtZW1vcnkuYnVmZmVyOworICAgIGFzc2VydEVxKGJ1ZmZlci5ieXRl
TGVuZ3RoLCAxKjY0KjEwMjQpOworICAgIG1lbW9yeS5ncm93KDEpOworICAgIGFzc2VydEVxKGJ1
ZmZlci5ieXRlTGVuZ3RoLCAwKTsKKworICAgIGJ1ZmZlciA9IG1lbW9yeS5idWZmZXI7CisgICAg
YXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIqNjQqMTAyNCk7CisKKyAgICAvLyBUaGlzIHNo
b3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5jZSBpdCBmYWlscy4KKyAgICBhc3NlcnRUaHJv
d3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVycm9yLCAiT3V0IG9mIG1lbW9yeSIpOyAKKyAg
ICBhc3NlcnRFcShidWZmZXIuYnl0ZUxlbmd0aCwgMio2NCoxMDI0KTsKKyAgICBhc3NlcnRFcSht
ZW1vcnkuYnVmZmVyLCBidWZmZXIpOworfQpJbmRleDogSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0
X21lbW9yeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5
LmpzCShyZXZpc2lvbiAyMTAxMjkpCisrKyBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotLy8gRklYTUU6IHVzZSB0aGUgYXNz
ZXJ0IGxpYnJhcnk6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU2
ODQKIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogaW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDE2LTEyLTI3ICBTYWFtIEJhcmF0aSAgPHNi
YXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBJbXBsZW1lbnQgZ3Jvd19t
ZW1vcnkgYW5kIGN1cnJlbnRfbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjY0NDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5ODAzNjc2
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggaW1wbGVtZW50cyBncm93X21lbW9yeSwgY3VycmVudF9tZW1vcnksIGFuZCBXZWJBc3Nl
bWJseS5wcm90b3R5cGUuZ3Jvdy4KKyAgICAgICAgU2VlIHJlbGV2YW50IHNwZWMgdGV4dHMgaGVy
ZToKKyAgICAgICAgCisgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9kZXNp
Z24vYmxvYi9tYXN0ZXIvU2VtYW50aWNzLm1kI2xpbmVhci1tZW1vcnktYWNjZXNzZXMKKyAgICAg
ICAgaHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9ibG9iL21hc3Rlci9KUy5t
ZCN3ZWJhc3NlbWJseW1lbW9yeXByb3RvdHlwZWdyb3cKKyAgICAgICAgCisgICAgICAgIEkgYWxz
byBmaXggYSBjb3VwbGUgbWlzY2VsbGFuZW91cyBidWdzOgorICAgICAgICAKKyAgICAgICAgMS4g
RGF0YSBzZWN0aW9uIG5vdyB1bmRlcnN0YW5kcyBmdWxsIGluaXRfZXhwcnMuIAorICAgICAgICAy
LiBwYXJzZVZhclVpbnQxIG5vIGxvbmdlciBoYXMgYSBidWcgd2hlcmUgd2UgYWxsb3cgdmFsdWVz
IGxhcmdlciB0aGFuIDEgaWYKKyAgICAgICAgdGhlaXIgYm90dG9tIDggYml0cyBhcmUgemVyby4K
KyAgICAgICAgCisgICAgICAgIFNpbmNlIHRoZSBKUyBBUEkgY2FuIG5vdyBncm93IG1lbW9yeSwg
d2UgbmVlZCB0byBtYWtlIGNhbGxpbmcgYW4gaW1wb3J0CisgICAgICAgIGFuZCBjYWxsX2luZGly
ZWN0IHJlZnJlc2ggdGhlIGJhc2UgbWVtb3J5IHJlZ2lzdGVyIGFuZCB0aGUgc2l6ZSByZWdpc3Rl
cnMuCisKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25UZXN0V2FzbU1vZHVs
ZUZ1bmN0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVu
dGltZS9WTS5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFJlbG9hZFBpbm5lZFJlZ2lzdGVycyk6CisgICAg
ICAgIChKU0M6Oldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VnbWVudDo6Y3JlYXRlKToKKyAg
ICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6STMySW5pdEV4
cHI6OkkzMkluaXRFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6STMySW5pdEV4cHI6Omdsb2Jh
bEltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OkkzMkluaXRFeHByOjpjb25zdFZhbHVlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6STMySW5pdEV4cHI6OmlzQ29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpJMzJJbml0RXhwcjo6aXNHbG9iYWxJbXBvcnQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJMzJJbml0RXhwcjo6Z2xvYmFsSW1wb3J0SW5kZXgpOgorICAgICAgICAoSlNDOjpXYXNtOjpT
ZWdtZW50OjpieXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246Omlt
cG9ydEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bjo6aGFzTWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAg
ICAgICAqIHdhc20vV2FzbU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6
TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3
YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpzaXplKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpzaXplSW5QYWdlcyk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6
OmlzVmFsaWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Omdyb3cpOiBE
ZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6Oldhc206Om1ha2VJMzJJbml0RXhwcik6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmg6CisgICAgICAgICogd2FzbS9XYXNtUGFnZUNvdW50Lmg6CisgICAgICAgIChKU0M6Oldh
c206OlBhZ2VDb3VudDo6Ynl0ZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYWdlQ291bnQ6OnBh
Z2VDb3VudCk6CisgICAgICAgIChKU0M6Oldhc206OlBhZ2VDb3VudDo6ZnJvbUJ5dGVzKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGFnZUNvdW50OjpvcGVyYXRvcispOgorICAgICAgICAqIHdhc20v
V2FzbVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vzc1R5cGU+Ojpw
YXJzZVZhclVJbnQxKToKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAg
ICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6
fkpTV2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5
Ojpncm93KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkpOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpmdW5jdGlvbkltcG9ydENvdW50KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1vZHVsZTo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Ondhc21FbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6
OmltcG9ydENvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5z
dGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OmdldE1lbW9yeSk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5TWVtb3J5UHJvdG9G
dW5jQnVmZmVyKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNHcm93
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpk
YXRhU2VnbWVudEZhaWwpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vd2FzbS5qc29uOgorCiAyMDE2LTEyLTIyICBLZWl0
aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkFzc2VtYmx5
OiBNYWtlIHNwZWMtdGVzdHMvZjMyLndhc3QuanMgYW5kIHNwZWMtdGVzdHMvZjY0Lndhc3QuanMg
cGFzcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjM5LDggKzI2Mzks
OSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtb2R1bGVJbmZvcm1hdGlvbiA9IHBs
YW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlv
bi0+bWVtb3J5KSB7Ci0gICAgICAgIG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVt
b3J5Pihtb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRp
b24tPm1lbW9yeS5tYXhpbXVtKCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnktPmlz
VmFsaWQoKSk7CisgICAgICAgIGJvb2wgZmFpbGVkOworICAgICAgICBtZW1vcnkgPSBzdGQ6Om1h
a2VfdW5pcXVlPFdhc206Ok1lbW9yeT4obW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5pbml0aWFs
KCksIG1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubWF4aW11bSgpLCBmYWlsZWQpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKTsKICAgICAgICAgbWVtb3J5Qnl0ZXMgPSBtZW1vcnkt
Pm1lbW9yeSgpOwogICAgICAgICBtZW1vcnlTaXplID0gbWVtb3J5LT5zaXplKCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjEw
MTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MTcsNiArNDE3LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJp
bmc7CiAgICAgdihib29sLCB1c2VDb2RlQ2FjaGUsIHRydWUsIE5vcm1hbCwgIklmIGZhbHNlLCB0
aGUgdW5saW5rZWQgYnl0ZSBjb2RlIGNhY2hlIHdpbGwgbm90IGJlIHVzZWQuIikgXAogICAgIFwK
ICAgICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5LCB0cnVlLCBOb3JtYWwsICJFeHBvc2UgdGhlIFdl
YkFzc2VtYmx5IGdsb2JhbCBvYmplY3QuIikgXAorICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJBc3Nl
bWJseUxvd01lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0
IHdvbid0IG1tYXAgdGhlIGZ1bGwgJ21heGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwgYWxs
b2NhdGUgdGhlIG1pbmltdW0gcmVxdWlyZWQgYW1vdW50LiIpIFwKIAogZW51bSBPcHRpb25FcXVp
dmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDcgKzMwMiw3IEBAIHB1YmxpYzoKICAgICBFeGVj
U3RhdGUqIHRvcENhbGxGcmFtZTsKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHRvcEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTsKICAgICB2b2lkKiB0b3BXYXNtTWVtb3J5UG9pbnRlcjsKLSAgICB1
aW50MzJfdCB0b3BXYXNtTWVtb3J5U2l6ZTsKKyAgICB1aW50NjRfdCB0b3BXYXNtTWVtb3J5U2l6
ZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gdGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24g
MjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNiArMTcyLDggQEAgcHVibGljOgogICAgIC8vIE1l
bW9yeQogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9hZE9wVHlw
ZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMy
X3Qgb2Zmc2V0KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzdG9yZShT
dG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUs
IHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ3VycmVudE1lbW9y
eShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIC8vIEJhc2ljIG9wZXJhdG9ycwogICAg
IHRlbXBsYXRlPE9wVHlwZT4KQEAgLTIwMyw2ICsyMDUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKIAorICAg
IHZvaWQgZW1pdFJlbG9hZFBpbm5lZFJlZ2lzdGVycygpOworCiBwcml2YXRlOgogICAgIEV4cHJl
c3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3ApOwogICAgIEV4cHJlc3Npb25U
eXBlIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgT3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCB1aW50MzJfdCBvZmZzZXQpOwpAQCAtMjQ4LDcgKzI1Miw3IEBAIEIzSVJHZW5lcmF0b3I6OkIz
SVJHZW5lcmF0b3IoVk0mIHZtLCBjb24KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghIWlu
Zm8ubWVtb3J5KSB7CisgICAgaWYgKGluZm8uaGFzTWVtb3J5KCkpIHsKICAgICAgICAgbV9tZW1v
cnlCYXNlR1BSID0gaW5mby5tZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50
ZXI7CiAgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VHUFIpOwogICAgICAg
ICBBU1NFUlQoIWluZm8ubWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0u
c2l6ZU9mZnNldCk7CkBAIC0zMzIsNiArMzM2LDEwMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZFVucmVhY2hhYmxlKCkgLT4gCiAgICAgcmV0dXJuIHsgfTsKIH0KIAordm9pZCBCM0lSR2VuZXJh
dG9yOjplbWl0UmVsb2FkUGlubmVkUmVnaXN0ZXJzKCkKK3sKKyAgICBpZiAoIW1faW5mby5oYXNN
ZW1vcnkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFZhbHVlKj4gYXJndW1lbnRz
OworCisgICAgVmFsdWUqIGJhc2VNZW1vcnk7CisgICAgVmFsdWUqIHNpemU7CisKKyAgICB7Cisg
ICAgICAgIFZhbHVlKiBpbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAmbV92
bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsKKworICAgICAgICBWYWx1ZSogbWVtb3J5ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpOworCisgICAgICAgIG1lbW9yeSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUo
KSwgT3JpZ2luKCksCisgICAgICAgICAgICBtZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9m
ZnNldE9mTWVtb3J5KCkpOworCisgICAgICAgIGJhc2VNZW1vcnkgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdp
bigpLAorICAgICAgICAgICAgbWVtb3J5LCBNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpOworCisg
ICAgICAgIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIG1lbW9yeSwgTWVtb3J5Ojpv
ZmZzZXRPZlNpemUoKSk7CisgICAgfQorCisgICAgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1l
bW9yeSA9IG1faW5mby5tZW1vcnk7CisgICAgZm9yIChhdXRvIGluZm8gOiBtZW1vcnkucGlubmVk
UmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycykgeworICAgICAgICBWYWx1ZSogc2l6ZVZhbHVlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTdWIsIE9yaWdpbigpLCBz
aXplLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBPcmln
aW4oKSwgaW5mby5zaXplT2Zmc2V0KSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoc2l6ZVZh
bHVlKTsKKyAgICB9CisKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpW
b2lkLCBPcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUo
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisKKyAgICBw
YXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShiYXNlTWVtb3J5LCBWYWx1ZVJlcDo6
cmVnKG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5iYXNlTWVtb3J5UG9pbnRlcikpKTsKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdp
c3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5l
ZFZhbHVlKGFyZ3VtZW50c1tpXSwgVmFsdWVSZXA6OnJlZyhtZW1vcnkucGlubmVkUmVnaXN0ZXJz
KCkuc2l6ZVJlZ2lzdGVyc1tpXS5zaXplUmVnaXN0ZXIpKSk7CisKKyAgICAvLyBGSVhNRTogSXMg
aXQgdmFsaWQgdG8ganVzdCBtYWtlIHRoaXMgY29uc3RyYWluZWQgYXJndW1lbnRzIHRvIHRoZSBw
YXRjaHBvaW50PyBJcyB0aGVyZSBhIGxlc3MtaGFja3kgd2F5IHRvIGRvIHRoaXMgaW4gQjM/Cisg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsKK30KKworYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgaW50MzJfdCAoKmdyb3dNZW1vcnkpIChFeGVj
U3RhdGUqLCBpbnQzMl90KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgZGVsdGEpIC0+
IGludDMyX3QgeyAKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogaW5zdGFuY2UgPSB2bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CisgICAgICAg
IEpTV2ViQXNzZW1ibHlNZW1vcnkqIHdhc21NZW1vcnkgPSBpbnN0YW5jZS0+bWVtb3J5KCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHdhc21NZW1vcnkpOyAvLyBUaGlzIHdvdWxkIGZhaWwgdmFs
aWRhdGlvbiBvdGhlcndpc2UuCisKKyAgICAgICAgaWYgKGRlbHRhIDwgMCkKKyAgICAgICAgICAg
IHJldHVybiAtMTsKKworICAgICAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVy
ZSA9IGZhbHNlOworICAgICAgICBQYWdlQ291bnQgcmVzdWx0ID0gd2FzbU1lbW9yeS0+Z3Jvdyhl
eGVjLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGVsdGEpLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNP
bkZhaWx1cmUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwor
ICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICB2
bS50b3BXYXNtTWVtb3J5UG9pbnRlciA9IHdhc21NZW1vcnktPm1lbW9yeSgpLT5tZW1vcnkoKTsK
KyAgICAgICAgdm0udG9wV2FzbU1lbW9yeVNpemUgPSB3YXNtTWVtb3J5LT5tZW1vcnkoKS0+c2l6
ZSgpOworCisgICAgICAgIHJldHVybiByZXN1bHQucGFnZUNvdW50KCk7CisgICAgfTsKKworICAg
IHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJ
bnQzMiwgT3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihncm93TWVtb3J5
KSksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2Ms
IEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdpbigpKSwgZGVsdGEpOworCisgICAgZW1pdFJlbG9hZFBp
bm5lZFJlZ2lzdGVycygpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLAorICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksICZtX3Zt
LnRvcFdhc21NZW1vcnlTaXplKSk7CisKKyAgICBjb25zdGV4cHIgdWludDMyX3Qgc2hpZnRWYWx1
ZSA9IDE2OworICAgIHN0YXRpY19hc3NlcnQoUGFnZUNvdW50OjpwYWdlU2l6ZSA9PSAxIDw8IHNo
aWZ0VmFsdWUsICJUaGlzIG11c3QgaG9sZCBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gYmUgY29ycmVj
dC4iKTsKKyAgICBWYWx1ZSogbnVtUGFnZXMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIFpTaHIsIE9yaWdpbigpLAorICAgICAgICBzaXplLCBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSkp
OworCisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBUcnVuYywgT3JpZ2luKCksIG51bVBhZ2VzKTsKKworICAgIHJldHVybiB7IH07Cit9CisKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
IHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7
CkBAIC03NTMsNiArODUxLDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJf
dCBmdW4KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsK
KworICAgIGlmIChmdW5jdGlvbkluZGV4IDwgbV9pbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkK
KyAgICAgICAgZW1pdFJlbG9hZFBpbm5lZFJlZ2lzdGVycygpOworCiAgICAgcmV0dXJuIHsgfTsK
IH0KIApAQCAtODI5LDYgKzkzMSw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGly
ZWN0KGNvbnMKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKIAorICAgIGVtaXRSZWxvYWRQ
aW5uZWRSZWdpc3RlcnMoKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTkwMiwxMiArMTAw
NiwxMiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0mIHZtCiAgICAgaWYg
KCEhbWVtb3J5KSB7CiAgICAgICAgIGJhc2VNZW1vcnkgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCksCiAgICAgICAgICAgICBibG9jay0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmdm0udG9wV2FzbU1lbW9y
eVBvaW50ZXIpKTsKLSAgICAgICAgVmFsdWUqIHNpemUgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgIFZhbHVlKiBzaXpl
ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdp
bigpLAogICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgJnZtLnRvcFdhc21NZW1vcnlTaXplKSk7CiAgICAgICAgIHNpemVzLnJlc2VydmVD
YXBhY2l0eShtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycy5zaXplKCkpOwog
ICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVn
aXN0ZXJzKSB7CiAgICAgICAgICAgICBzaXplcy5hcHBlbmQoYmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU3ViLCBvcmlnaW4sIHNpemUsCi0gICAgICAgICAgICAgICAgYmxvY2stPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIG9yaWdpbiwgaW5mby5zaXplT2Zmc2V0KSkpOworICAg
ICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBvcmlnaW4s
IGluZm8uc2l6ZU9mZnNldCkpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLVNl
Z21lbnQqIFNlZ21lbnQ6OmNyZWF0ZSh1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVJbkJ5
dGVzKQorU2VnbWVudCogU2VnbWVudDo6Y3JlYXRlKEkzMkluaXRFeHByIG9mZnNldCwgdWludDMy
X3Qgc2l6ZUluQnl0ZXMpCiB7CiAgICAgYXV0byBhbGxvY2F0ZWQgPSB0cnlGYXN0Q2FsbG9jKHNp
emVvZihTZWdtZW50KSArIHNpemVJbkJ5dGVzLCAxKTsKICAgICBTZWdtZW50KiBzZWdtZW50OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjEw
MTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzgsMTYgKzEzOCw1MSBAQCBzdHJ1Y3QgRnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5IHsKICAgICBzaXplX3QgZW5kOwogfTsKIAorY2xhc3MgSTMySW5pdEV4cHIgeworICAgIGVu
dW0gVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWwsCisgICAgICAgIENvbnN0CisgICAg
fTsKKworICAgIEkzMkluaXRFeHByKFR5cGUgdHlwZSwgdWludDMyX3QgYml0cykKKyAgICAgICAg
OiBtX2JpdHMoYml0cykKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICB7IH0KKworcHVibGlj
OgorICAgIEkzMkluaXRFeHByKCkgPSBkZWxldGU7CisKKyAgICBzdGF0aWMgSTMySW5pdEV4cHIg
Z2xvYmFsSW1wb3J0KHVpbnQzMl90IGdsb2JhbEltcG9ydE51bWJlcikgeyByZXR1cm4gSTMySW5p
dEV4cHIoR2xvYmFsLCBnbG9iYWxJbXBvcnROdW1iZXIpOyB9CisgICAgc3RhdGljIEkzMkluaXRF
eHByIGNvbnN0VmFsdWUodWludDMyX3QgY29uc3RWYWx1ZSkgeyByZXR1cm4gSTMySW5pdEV4cHIo
Q29uc3QsIGNvbnN0VmFsdWUpOyB9CisKKyAgICBib29sIGlzQ29uc3QoKSBjb25zdCB7IHJldHVy
biBtX3R5cGUgPT0gQ29uc3Q7IH0KKyAgICBib29sIGlzR2xvYmFsSW1wb3J0KCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlID09IEdsb2JhbDsgfQorICAgIHVpbnQzMl90IGNvbnN0VmFsdWUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNDb25zdCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fYml0czsKKyAgICB9CisgICAgdWludDMyX3QgZ2xvYmFsSW1wb3J0SW5kZXgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNHbG9iYWxJbXBvcnQoKSk7CisgICAg
ICAgIHJldHVybiBtX2JpdHM7CisgICAgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fYml0
czsKKyAgICBUeXBlIG1fdHlwZTsKK307CisKIHN0cnVjdCBTZWdtZW50IHsKLSAgICB1aW50MzJf
dCBvZmZzZXQ7CiAgICAgdWludDMyX3Qgc2l6ZUluQnl0ZXM7CisgICAgSTMySW5pdEV4cHIgb2Zm
c2V0OwogICAgIC8vIEJ5dGVzIGFyZSBhbGxvY2F0ZWQgYXQgdGhlIGVuZC4KICAgICB1aW50OF90
JiBieXRlKHVpbnQzMl90IHBvcykKICAgICB7CiAgICAgICAgIEFTU0VSVChwb3MgPCBzaXplSW5C
eXRlcyk7Ci0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBzaXplb2Yob2Zmc2V0KSArIHNpemVvZihzaXplSW5C
eXRlcykgKyBwb3MpOworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc2l6ZW9mKFNlZ21lbnQpICsgcG9zKTsK
ICAgICB9Ci0gICAgc3RhdGljIFNlZ21lbnQqIGNyZWF0ZSh1aW50MzJfdCwgdWludDMyX3QpOwor
ICAgIHN0YXRpYyBTZWdtZW50KiBjcmVhdGUoSTMySW5pdEV4cHIsIHVpbnQzMl90KTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KFNlZ21lbnQqKTsKICAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX3B0
cjxTZWdtZW50LCBkZWNsdHlwZSgmU2VnbWVudDo6ZGVzdHJveSk+IFB0cjsKICAgICBzdGF0aWMg
UHRyIGFkb3B0UHRyKFNlZ21lbnQqKTsKQEAgLTE5MSw3ICsyMjYsOSBAQCBzdHJ1Y3QgTW9kdWxl
SW5mb3JtYXRpb24gewogICAgIFZlY3RvcjxJbXBvcnQ+IGltcG9ydHM7CiAgICAgVmVjdG9yPFNp
Z25hdHVyZUluZGV4PiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CiAgICAgVmVjdG9y
PFNpZ25hdHVyZUluZGV4PiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKKwogICAg
IE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKKwogICAgIFZlY3RvcjxFeHBvcnQ+IGV4cG9ydHM7
CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gc3RhcnRGdW5jdGlvbkluZGV4U3BhY2U7CiAg
ICAgVmVjdG9yPFNlZ21lbnQ6OlB0cj4gZGF0YTsKQEAgLTIwMCw2ICsyMzcsOSBAQCBzdHJ1Y3Qg
TW9kdWxlSW5mb3JtYXRpb24gewogICAgIFZlY3RvcjxHbG9iYWw+IGdsb2JhbHM7CiAgICAgdW5z
aWduZWQgZmlyc3RJbnRlcm5hbEdsb2JhbCB7IDAgfTsKIAorICAgIHVpbnQzMl90IGltcG9ydEZ1
bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXMuc2l6ZSgpOyB9CisgICAgYm9vbCBoYXNNZW1vcnkoKSBjb25zdCB7IHJldHVybiAhIW1lbW9y
eTsgfQorCiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAkocmV2aXNpb24gMjEw
MTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3OCwxMiArNDc4LDM2IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBj
YXNlIEdyb3dNZW1vcnk6Ci0gICAgICAgIHJldHVybiBmYWlsKCJub3QgeWV0IGltcGxlbWVudGVk
OiBncm93X21lbW9yeSIpOyAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KKyAgICBjYXNl
IEdyb3dNZW1vcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLm1lbW9y
eSwgImdyb3dfbWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5lZCBvciBp
bXBvcnRlZCIpOworCisgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWQ7CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmVzZXJ2ZWQpLCAiY2FuJ3QgcGFyc2UgcmVzZXJ2
ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVtb3J5Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYocmVzZXJ2ZWQgIT0gMCwgInJlc2VydmVkIHZhclVpbnQxIGZvciBncm93X21lbW9yeSBtdXN0
IGJlIHplcm8iKTsKKworICAgICAgICBFeHByZXNzaW9uVHlwZSBkZWx0YTsKKyAgICAgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhkZWx0YSwgImV4cGVjdCBhbiBpMzIgYXJn
dW1lbnQgdG8gZ3Jvd19tZW1vcnkgb24gdGhlIHN0YWNrIik7CisKKyAgICAgICAgRXhwcmVzc2lv
blR5cGUgcmVzdWx0OworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRHcm93TWVt
b3J5KGRlbHRhLCByZXN1bHQpKTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJl
c3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjYXNlIEN1cnJlbnRN
ZW1vcnk6IHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLm1lbW9yeSwgImN1
cnJlbnRfbWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5lZCBvciBpbXBv
cnRlZCIpOwogCi0gICAgY2FzZSBDdXJyZW50TWVtb3J5OgotICAgICAgICByZXR1cm4gZmFpbCgi
bm90IHlldCBpbXBsZW1lbnRlZDogY3VycmVudF9tZW1vcnkiKTsgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQuCisgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWQ7CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmVzZXJ2ZWQpLCAiY2FuJ3QgcGFyc2UgcmVzZXJ2
ZWQgdmFyVWludDEgZm9yIGN1cnJlbnRfbWVtb3J5Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYocmVzZXJ2ZWQgIT0gMCwgInJlc2VydmVkIHZhclVpbnQxIGZvciBjdXJyZW50X21lbW9y
eSBtdXN0IGJlIHplcm8iKTsKKworICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEN1cnJlbnRNZW1vcnkocmVzdWx0KSk7Cisg
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogCisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTg0
LDYgKzYwOCwxMyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhCiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCisgICAgY2FzZSBHcm93TWVtb3J5OgorICAgIGNh
c2UgQ3VycmVudE1lbW9yeTogeworICAgICAgICB1aW50OF90IHJlc2VydmVkOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJlc2VydmVkKSwgImNhbid0IHBhcnNl
IHJlc2VydmVkIHZhclVpbnQxIGZvciBncm93X21lbW9yeS9jdXJyZW50X21lbW9yeSIpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIC8vIG5vIGltbWVkaWF0ZSBjYXNlcwogICAg
IEZPUl9FQUNIX1dBU01fQklOQVJZX09QKENSRUFURV9DQVNFKQogICAgIEZPUl9FQUNIX1dBU01f
VU5BUllfT1AoQ1JFQVRFX0NBU0UpCkBAIC01OTEsOSArNjIyLDcgQEAgYXV0byBGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYQogICAgIGNhc2UgTm9wOgogICAgIGNhc2UgUmV0dXJu
OgogICAgIGNhc2UgU2VsZWN0OgotICAgIGNhc2UgRHJvcDoKLSAgICBjYXNlIEdyb3dNZW1vcnk6
Ci0gICAgY2FzZSBDdXJyZW50TWVtb3J5OiB7CisgICAgY2FzZSBEcm9wOiB7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnkuY3BwCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMzUgKzMwLDg3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1lbW9yeTo6TWVtb3J5KFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKK3N0YXRpY19hc3NlcnQoc2l6ZW9m
KHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1h
eGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzIgd2hpY2ggaXMgbGFyZ2VyIHRo
YW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlm
IHRoaXMgZGlkbid0IGhvbGQuIik7CisKK01lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFs
LCBQYWdlQ291bnQgbWF4aW11bSwgYm9vbCYgZmFpbGVkKQogICAgIDogbV9tb2RlKE1vZGU6OkJv
dW5kc0NoZWNraW5nKQotICAgICwgbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKLSAgICAsIG1fY2Fw
YWNpdHkobWF4aW11bSA/IG1heGltdW0uYnl0ZXMoKSA6IFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMo
KSkKICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCisg
ICAgLCBtX3NpemUoaW5pdGlhbC5ieXRlcygpKQogICAgIC8vIEZJWE1FOiBJZiB3ZSBhZGQgc2ln
bmFsIGJhc2VkIGJvdW5kcyBjaGVja2luZyB0aGVuIHdlIG5lZWQgZXh0cmEgc3BhY2UgZm9yIG92
ZXJmbG93IG9uIGxvYWQuCiAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyNjkzCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1heGltdW0gfHwgbWF4
aW11bSA+PSBpbml0aWFsKTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBvdXIgY2Fs
bGVyLgogCi0gICAgbV9tYXBwZWRDYXBhY2l0eSA9IG1fY2FwYWNpdHk7CisgICAgbV9tYXBwZWRD
YXBhY2l0eSA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdlQ291bnQ6Om1heCgpLmJ5
dGVzKCk7CisgICAgaWYgKCFtX21hcHBlZENhcGFjaXR5KSB7CisgICAgICAgIC8vIFRoaXMgbWVh
bnMgd2Ugc3BlY2lmaWVkIGEgemVybyBhcyBtYXhpbXVtICh3aGljaCBtZWFucyB3ZSBhbHNvIGhh
dmUgemVybyBhcyBpbml0aWFsIHNpemUpLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NpemUg
PT0gMCk7CisgICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSAwOworICAgICAgICBtX21lbW9yeSA9
IG51bGxwdHI7CisgICAgICAgIGZhaWxlZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEgVk0gdGFnIGZv
ciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzYwMAotICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0eSwg
UFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7CisgICAgdm9pZCogcmVz
dWx0ID0gT3B0aW9uczo6c2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSgpID8gTUFQX0ZBSUxF
RCA6IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFU
RSB8IE1BUF9BTk9OLCAtMSwgMCk7CiAgICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7CiAg
ICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgZGlmZmVyZW50IG51bWJlci4KICAgICAgICAgbV9t
YXBwZWRDYXBhY2l0eSA9IG1fc2l6ZTsKKyAgICAgICAgaWYgKCFtX21hcHBlZENhcGFjaXR5KSB7
CisgICAgICAgICAgICBtX21lbW9yeSA9IG51bGxwdHI7CisgICAgICAgICAgICBmYWlsZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIHJlc3VsdCA9
IG1tYXAobnVsbHB0ciwgbV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8
IE1BUF9BTk9OLCAtMSwgMCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgICAgICBmYWlsZWQgPSB0
cnVlOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgQVNTRVJU
KG1fc2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsKLSAgICBpZiAobXByb3RlY3QocmVzdWx0LCBt
X3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7Ci0gICAgICAgIG11bm1hcChyZXN1bHQs
IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgICAgICByZXR1cm47CisgICAgeworICAgICAgICBib29s
IHN1Y2Nlc3MgPSAhbXByb3RlY3QocmVzdWx0LCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSks
IFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNz
KTsKICAgICB9CiAKICAgICBtX21lbW9yeSA9IHJlc3VsdDsKKyAgICBmYWlsZWQgPSBmYWxzZTsK
K30KKworYm9vbCBNZW1vcnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSkpOworCisgICAg
aWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gbWF4aW11bSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB1aW50NjRfdCBkZXNpcmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsKKworICAg
IGlmIChtX21lbW9yeSAmJiBkZXNpcmVkU2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KSB7CisgICAg
ICAgIGJvb2wgc3VjY2VzcyA9ICFtcHJvdGVjdChzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9tZW1v
cnkpICsgbV9zaXplLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlc2lyZWRTaXplIC0gbV9zaXplKSwg
UFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3Mp
OworICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCBsZXQncyB0cnkgdG8gbWFrZSBzb21lIG5ldyBtZW1v
cnkuCisgICAgdm9pZCogbmV3TWVtb3J5ID0gbW1hcChudWxscHRyLCBkZXNpcmVkU2l6ZSwgUFJP
VF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworICAg
IGlmIChuZXdNZW1vcnkgPT0gTUFQX0ZBSUxFRCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKG1fbWVtb3J5KSB7CisgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBt
X3NpemUpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSAhbXVubWFwKG1fbWVtb3J5LCBtX21hcHBl
ZENhcGFjaXR5KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CisgICAgfQorICAg
IG1fbWVtb3J5ID0gbmV3TWVtb3J5OworICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBkZXNpcmVkU2l6
ZTsKKyAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmgJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIEJvdW5kc0NoZWNraW5nCiAgICAgfTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9y
eShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJvb2wm
IGZhaWxlZCk7CiAKICAgICB+TWVtb3J5KCkKICAgICB7CkBAIC01MiwzNSArNTIsMjYgQEAgcHVi
bGljOgogICAgICAgICAgICAgbXVubWFwKG1fbWVtb3J5LCBtX21hcHBlZENhcGFjaXR5KTsKICAg
ICB9CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9Ci0K
ICAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeTsgfQotICAgIHVpbnQz
Ml90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICB1aW50NjRfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgUGFnZUNvdW50IHNpemVJblBhZ2VzKCkgY29u
c3QgeyByZXR1cm4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKTsgfQogCiAgICAgTW9kZSBt
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9CiAKLSAgICBib29sIGdyb3codWludDMyX3QgbmV3U2l6
ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX21lbW9yeSk7Ci0gICAgICAgIGlmIChuZXdTaXpl
ID4gbV9jYXBhY2l0eSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1
cm4gIW1wcm90ZWN0KG1fbWVtb3J5LCBuZXdTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsK
LSAgICB9CisgICAgYm9vbCBncm93KFBhZ2VDb3VudCk7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6ZSk7
IH0KLQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoTWVtb3J5LCBtX21lbW9yeSk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9p
ZCogbV9tZW1vcnkgeyBudWxscHRyIH07CiAgICAgTW9kZSBtX21vZGU7Ci0gICAgdWludDMyX3Qg
bV9zaXplIHsgMCB9OwotICAgIHVpbnQzMl90IG1fY2FwYWNpdHkgeyAwIH07CiAgICAgUGFnZUNv
dW50IG1faW5pdGlhbDsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtOworICAgIHVpbnQ2NF90IG1f
c2l6ZSB7IDAgfTsKICAgICB1aW50NjRfdCBtX21hcHBlZENhcGFjaXR5IHsgMCB9OwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5j
cHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxNCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCitBTFdBWVNfSU5MSU5FIEkzMkluaXRFeHBy
IG1ha2VJMzJJbml0RXhwcih1aW50OF90IG9wY29kZSwgdWludDMyX3QgYml0cykKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChvcGNvZGUgPT0gSTMyQ29uc3QgfHwgb3Bjb2RlID09IEdldEdsb2JhbCk7
CisgICAgaWYgKG9wY29kZSA9PSBJMzJDb25zdCkKKyAgICAgICAgcmV0dXJuIEkzMkluaXRFeHBy
Ojpjb25zdFZhbHVlKGJpdHMpOworICAgIHJldHVybiBJMzJJbml0RXhwcjo6Z2xvYmFsSW1wb3J0
KGJpdHMpOworfQorCiBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKIHsKICAg
ICBtX3Jlc3VsdC5tb2R1bGUgPSBzdGQ6Om1ha2VfdW5pcXVlPE1vZHVsZUluZm9ybWF0aW9uPigp
OwpAQCAtMjg5LDcgKzI5Nyw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlKCkgLT4g
UGFydGkKIAogYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBv
cnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fcmVzdWx0
Lm1vZHVsZS0+bWVtb3J5LCAiTWVtb3J5IHNlY3Rpb24gY2Fubm90IGV4aXN0IGlmIGFuIEltcG9y
dCBoYXMgYSBtZW1vcnkiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCEhbV9yZXN1bHQubW9k
dWxlLT5tZW1vcnksICJNZW1vcnkgc2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhh
cyBhIG1lbW9yeSIpOwogCiAgICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7CiAgICAgUGFn
ZUNvdW50IG1heGltdW1QYWdlQ291bnQ7CkBAIC0zNDIsMzIgKzM1MCwxMiBAQCBhdXRvIE1vZHVs
ZVBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0CiAgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29k
ZTsKIAogICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShn
bG9iYWwpKTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHBy
KGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7Ci0KLSAgICAg
ICAgZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9IEdsb2JhbDo6RnJvbUV4cHJlc3Npb247CiAg
ICAgICAgIFR5cGUgdHlwZUZvckluaXRPcGNvZGU7Ci0gICAgICAgIHN3aXRjaCAoaW5pdE9wY29k
ZSkgewotICAgICAgICBjYXNlIEkzMkNvbnN0OgotICAgICAgICAgICAgdHlwZUZvckluaXRPcGNv
ZGUgPSBJMzI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJNjRDb25zdDoKLSAg
ICAgICAgICAgIHR5cGVGb3JJbml0T3Bjb2RlID0gSTY0OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRjMyQ29uc3Q6Ci0gICAgICAgICAgICB0eXBlRm9ySW5pdE9wY29kZSA9IEYz
MjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEY2NENvbnN0OgotICAgICAgICAg
ICAgdHlwZUZvckluaXRPcGNvZGUgPSBGNjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHZXRHbG9iYWw6Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbC5p
bml0aWFsQml0c09ySW1wb3J0TnVtYmVyID49IG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5h
bEdsb2JhbCwgZ2xvYmFsSW5kZXgsICJ0aCBHbG9iYWwgdXNlcyBnZXRfZ2xvYmFsICIsIGdsb2Jh
bC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCAiIHdoaWNoIGV4Y2VlZHMgdGhlIGZpcnN0IGlu
dGVybmFsIGdsb2JhbCAiLCBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwpOwot
ICAgICAgICAgICAgdHlwZUZvckluaXRPcGNvZGUgPSBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHNb
Z2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXJdLnR5cGU7CisgICAgICAgIFdBU01fRkFJ
TF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBnbG9iYWwuaW5pdGlh
bEJpdHNPckltcG9ydE51bWJlciwgdHlwZUZvckluaXRPcGNvZGUpKTsKKyAgICAgICAgaWYgKGlu
aXRPcGNvZGUgPT0gR2V0R2xvYmFsKQogICAgICAgICAgICAgZ2xvYmFsLmluaXRpYWxpemF0aW9u
VHlwZSA9IEdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgfQotCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdsb2JhbC5pbml0aWFsaXph
dGlvblR5cGUgPSBHbG9iYWw6OkZyb21FeHByZXNzaW9uOwogICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHR5cGVGb3JJbml0T3Bjb2RlICE9IGdsb2JhbC50eXBlLCAiR2xvYmFsIGluaXRfZXhw
ciBvcGNvZGUgb2YgdHlwZSAiLCB0eXBlRm9ySW5pdE9wY29kZSwgIiBkb2Vzbid0IG1hdGNoIGds
b2JhbCdzIHR5cGUgIiwgZ2xvYmFsLnR5cGUpOwogCiAgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+
Z2xvYmFscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKQEAgLTQ1MSw3ICs0Mzks
OCBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFyCiAKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCksICJjYW4ndCBn
ZXQgIiwgZWxlbWVudE51bSwgInRoIEVsZW1lbnQgdGFibGUgaW5kZXgiKTsKICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRih0YWJsZUluZGV4LCAiRWxlbWVudCBzZWN0aW9uIGNhbiBvbmx5IGhh
dmUgb25lIFRhYmxlIGZvciBub3ciKTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIG9mZnNldCkpOworICAgICAgICBUeXBlIGluaXRF
eHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHBy
KGluaXRPcGNvZGUsIG9mZnNldCwgaW5pdEV4cHJUeXBlKSk7CiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoaW5pdE9wY29kZSAhPSBPcFR5cGU6OkkzMkNvbnN0LCAiRWxlbWVudCBzZWN0aW9u
IGRvZXNuJ3Qgc3VwcG9ydCBub24taTMyIGluaXRfZXhwciBvcGNvZGUgZm9yIG5vdywgZ290ICIs
IGluaXRPcGNvZGUpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihpbmRleENvdW50KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQg
Zm9yIEVsZW1lbnQgc2VjdGlvbiIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4
Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRWxlbWVudCBz
ZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGlzIHRvbyBiaWcgIiwgaW5k
ZXhDb3VudCk7CkBAIC01MDksNyArNDk4LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29k
ZSgpIC0+IFBhcnRpYQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTW9kdWxlUGFyc2VyOjpw
YXJzZUluaXRFeHByKHVpbnQ4X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51bWJl
cikgLT4gUGFydGlhbFJlc3VsdAorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWlu
dDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYgYml0c09ySW1wb3J0TnVtYmVyLCBUeXBlJiByZXN1bHRU
eXBlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VV
SW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0IGluaXRfZXhwcidzIG9wY29kZSIpOwogCkBAIC01MTgs
NiArNTA3LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdAogICAg
ICAgICBpbnQzMl90IGNvbnN0YW50OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhckludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9l
eHByJ3MgaTMyLmNvbnN0Iik7CiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90Pihjb25zdGFudCk7CisgICAgICAgIHJlc3VsdFR5cGUgPSBJMzI7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtNTI1LDYgKzUxNSw3IEBAIGF1dG8gTW9kdWxlUGFyc2Vy
OjpwYXJzZUluaXRFeHByKHVpbnQ4X3QKICAgICAgICAgaW50NjRfdCBjb25zdGFudDsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQ2NChjb25zdGFudCksICJjYW4ndCBn
ZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGk2NC5jb25zdCIpOwogICAgICAgICBi
aXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9IEk2NDsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01MzIsNiArNTIzLDcgQEAgYXV0byBNb2R1bGVQ
YXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdAogICAgICAgICB1aW50MzJfdCBjb25zdGFudDsK
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50MzIoY29uc3RhbnQpLCAiY2Fu
J3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBmMzIuY29uc3QiKTsKICAgICAg
ICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CisgICAgICAgIHJlc3VsdFR5cGUgPSBG
MzI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNTM5LDYgKzUzMSw3IEBAIGF1dG8gTW9k
dWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QKICAgICAgICAgdWludDY0X3QgY29uc3Rh
bnQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDY0KGNvbnN0YW50KSwg
ImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgZjY0LmNvbnN0Iik7CiAg
ICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBl
ID0gRjY0OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTU1MSw3ICs1NDQsNyBAQCBhdXRv
IE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90CiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoaW1wb3J0LmtpbmRJbmRleCA+PSBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJu
YWxHbG9iYWwsICJnZXRfZ2xvYmFsIGltcG9ydCBraW5kIGluZGV4ICIsIGltcG9ydC5raW5kSW5k
ZXgsICIgZXhjZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1fcmVzdWx0Lm1vZHVs
ZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7CiAKICAgICAgICAgQVNTRVJUKG1fcmVzdWx0Lm1vZHVs
ZS0+Z2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1tdXRh
YmxlKTsKLQorICAgICAgICByZXN1bHRUeXBlID0gbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzW2lu
ZGV4XS50eXBlOwogICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBpbmRleDsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtNTg2LDE4ICs1NzksMTkgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBh
cnNlRGF0YSgpIC0+IFBhcnRpYQogCiAgICAgZm9yICh1aW50MzJfdCBzZWdtZW50TnVtYmVyID0g
MDsgc2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytzZWdtZW50TnVtYmVyKSB7CiAgICAg
ICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICB1aW50NjRfdCBvZmZzZXQ7CisgICAgICAgIHVp
bnQ2NF90IGluaXRFeHByQml0czsKICAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwogICAgICAg
ICB1aW50MzJfdCBkYXRhQnl0ZUxlbmd0aDsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCdzIGluZGV4Iik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5k
ZXgsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgaGFzIG5vbi16ZXJvIGluZGV4ICIs
IGluZGV4KTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHBy
KGluaXRPcGNvZGUsIG9mZnNldCkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRP
cGNvZGUgIT0gT3BUeXBlOjpJMzJDb25zdCwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVu
dCBoYXMgb3Bjb2RlICIsIGluaXRPcGNvZGUsICIgZXhwZWN0ZWQgaTMyLmNvbnN0Iik7CisgICAg
ICAgIFR5cGUgaW5pdEV4cHJUeXBlOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUgIT0gSTMyLCBzZWdtZW50
TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIi
KTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVM
ZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBk
YXRhIGJ5dGUgbGVuZ3RoIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVM
ZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBzZWdtZW50TnVt
YmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxlbmd0aCBpcyB0b28gYmlnICIsIGRh
dGFCeXRlTGVuZ3RoKTsKIAotICAgICAgICBTZWdtZW50KiBzZWdtZW50ID0gU2VnbWVudDo6Y3Jl
YXRlKG9mZnNldCwgZGF0YUJ5dGVMZW5ndGgpOworICAgICAgICBTZWdtZW50KiBzZWdtZW50ID0g
U2VnbWVudDo6Y3JlYXRlKG1ha2VJMzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMp
LCBkYXRhQnl0ZUxlbmd0aCk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlZ21lbnQs
ICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBzZWdtZW50TnVtYmVyLCAidGgg
RGF0YSBzZWdtZW50IG9mIHNpemUgIiwgZGF0YUJ5dGVMZW5ndGgpOwogICAgICAgICBtX3Jlc3Vs
dC5tb2R1bGUtPmRhdGEudW5jaGVja2VkQXBwZW5kKFNlZ21lbnQ6OmFkb3B0UHRyKHNlZ21lbnQp
KTsKICAgICAgICAgZm9yICh1aW50MzJfdCBkYXRhQnl0ZSA9IDA7IGRhdGFCeXRlIDwgZGF0YUJ5
dGVMZW5ndGg7ICsrZGF0YUJ5dGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NyArNjQsNyBAQCBwcml2YXRlOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VSZXNpemFibGVMaW1pdHModWludDMy
X3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKTsKLSAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50
NjRfdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5pdEV4
cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKIAogICAgIE1vZHVs
ZVBhcnNlclJlc3VsdCBtX3Jlc3VsdDsKICAgICBib29sIG1faGFzVGFibGUgeyBmYWxzZSB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAkocmV2aXNp
b24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMyArNDIsMjIgQEAgcHVibGljOgogICAgICAgICA6IG1f
cGFnZUNvdW50KHBhZ2VDb3VudCkKICAgICB7IH0KIAotICAgIHNpemVfdCBieXRlcygpIHsgcmV0
dXJuIG1fcGFnZUNvdW50ICogcGFnZVNpemU7IH0KKyAgICB1aW50NjRfdCBieXRlcygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3BhZ2VDb3VudCkgKiBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4ocGFnZVNpemUpOyB9CisgICAgdWludDMyX3QgcGFnZUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9wYWdlQ291bnQ7IH0KIAogICAgIHN0YXRpYyBib29sIGlzVmFsaWQodWludDMy
X3QgcGFnZUNvdW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIHBhZ2VDb3VudCA8PSBtYXhQYWdl
Q291bnQ7CiAgICAgfQogCisgICAgc3RhdGljIFBhZ2VDb3VudCBmcm9tQnl0ZXModWludDY0X3Qg
Ynl0ZXMpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChieXRlcyAlIHBhZ2VTaXplID09
IDApOworICAgICAgICB1aW50MzJfdCBudW1QYWdlcyA9IGJ5dGVzIC8gcGFnZVNpemU7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKFBhZ2VDb3VudDo6aXNWYWxpZChudW1QYWdlcykpOworICAgICAg
ICByZXR1cm4gUGFnZUNvdW50KG51bVBhZ2VzKTsKKyAgICB9CisKICAgICBzdGF0aWMgUGFnZUNv
dW50IG1heCgpCiAgICAgewogICAgICAgICByZXR1cm4gUGFnZUNvdW50KG1heFBhZ2VDb3VudCk7
CkBAIC02Miw5ICs3MSwxOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgUGFn
ZUNvdW50JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wYWdlQ291bnQgPCBvdGhlci5tX3BhZ2VD
b3VudDsgfQogICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFBhZ2VDb3VudCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1fcGFnZUNvdW50ID4gb3RoZXIubV9wYWdlQ291bnQ7IH0KICAgICBib29sIG9w
ZXJhdG9yPj0oY29uc3QgUGFnZUNvdW50JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wYWdlQ291
bnQgPj0gb3RoZXIubV9wYWdlQ291bnQ7IH0KKyAgICBQYWdlQ291bnQgb3BlcmF0b3IrKGNvbnN0
IFBhZ2VDb3VudCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoc3VtT3ZlcmZsb3dz
PHVpbnQzMl90PihtX3BhZ2VDb3VudCwgb3RoZXIubV9wYWdlQ291bnQpKQorICAgICAgICAgICAg
cmV0dXJuIFBhZ2VDb3VudCgpOworICAgICAgICB1aW50MzJfdCBuZXdDb3VudCA9IG1fcGFnZUNv
dW50ICsgb3RoZXIubV9wYWdlQ291bnQ7CisgICAgICAgIGlmICghUGFnZUNvdW50Ojppc1ZhbGlk
KG5ld0NvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBQYWdlQ291bnQoKTsKKyAgICAgICAgcmV0
dXJuIFBhZ2VDb3VudChuZXdDb3VudCk7CisgICAgfQogCi1wcml2YXRlOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdWludDMyX3QgcGFnZVNpemUgPSA2NCAqIEtCOworcHJpdmF0ZToKICAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQzMl90IG1heFBhZ2VDb3VudCA9IHN0YXRpY19jYXN0PHVpbnQzMl90
PigoMXVsbCA8PCAzMikgLyBwYWdlU2l6ZSk7CiAKICAgICB1aW50MzJfdCBtX3BhZ2VDb3VudDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgJKHJldmlzaW9uIDIx
MDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM1LDggKzIzNSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1
Y2Nlc3NUeXBlPjo6CiAgICAgdWludDMyX3QgdGVtcDsKICAgICBpZiAoIXBhcnNlVmFyVUludDMy
KHRlbXApKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHRlbXAgPiAxKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odGVtcCk7
Ci0gICAgcmV0dXJuIHRlbXAgPD0gMTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgU3VjY2Vzc1R5cGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21WYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIs
OCBAQCBwdWJsaWM6CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhw
cmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0
cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHBy
ZXNzaW9uU3RhY2spOwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29u
dHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwor
ICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlw
ZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogCiAgICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpIHsgcmV0dXJuIHsgfTsg
fQogCkBAIC0yOTIsNiArMjk0LDE5IEBAIGF1dG8gVmFsaWRhdGU6OmFkZFN3aXRjaChFeHByZXNz
aW9uVHlwZSAKICAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQoZGVmYXVsdFRhcmdldCwgZXhw
cmVzc2lvblN0YWNrKTsKIH0KIAorYXV0byBWYWxpZGF0ZTo6YWRkR3Jvd01lbW9yeShFeHByZXNz
aW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0Cit7CisgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihkZWx0YSAhPSBJMzIsICJncm93X21lbW9yeSB3aXRoIG5v
bi1pMzIgZGVsdGEiKTsKKyAgICByZXN1bHQgPSBJMzI7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBWYWxpZGF0ZTo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBJMzI7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0
byBWYWxpZGF0ZTo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3Qm
IHN0YWNrKSAtPiBSZXN1bHQKIHsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5
KHN0YWNrLCBlbnRyeS5jb250cm9sRGF0YSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vd2FzbS5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L3dhc20uanNvbgkocmV2aXNpb24gMjEwMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vd2FzbS5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCw4IEBACiAgICAgICAgICJp
NjQuc3RvcmUiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAibWVtb3J5IiwgICAgICJ2YWx1ZSI6
ICA1NSwgInJldHVybiI6IFtdLCAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYWRkciIsICJpNjQi
XSwgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAgICAgICAgICAidHlw
ZSI6ICJ2YXJ1aW50MzIifSwgeyJuYW1lIjogIm9mZnNldCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9
XSwgImRlc2NyaXB0aW9uIjogInN0b3JlIHRvIG1lbW9yeSIgfSwKICAgICAgICAgImYzMi5zdG9y
ZSI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJtZW1vcnkiLCAgICAgInZhbHVlIjogIDU2LCAi
cmV0dXJuIjogW10sICAgICAgICAgICAicGFyYW1ldGVyIjogWyJhZGRyIiwgImYzMiJdLCAgICAg
ICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFncyIsICAgICAgICAgICJ0eXBlIjogInZh
cnVpbnQzMiJ9LCB7Im5hbWUiOiAib2Zmc2V0IiwgInR5cGUiOiAidmFydWludDMyIn1dLCAiZGVz
Y3JpcHRpb24iOiAic3RvcmUgdG8gbWVtb3J5IiB9LAogICAgICAgICAiZjY0LnN0b3JlIjogICAg
ICAgICAgIHsgImNhdGVnb3J5IjogIm1lbW9yeSIsICAgICAidmFsdWUiOiAgNTcsICJyZXR1cm4i
OiBbXSwgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFkZHIiLCAiZjY0Il0sICAgICAgICAgICJp
bW1lZGlhdGUiOiBbeyJuYW1lIjogImZsYWdzIiwgICAgICAgICAgInR5cGUiOiAidmFydWludDMy
In0sIHsibmFtZSI6ICJvZmZzZXQiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICJkZXNjcmlwdGlv
biI6ICJzdG9yZSB0byBtZW1vcnkiIH0sCi0gICAgICAgICJjdXJyZW50X21lbW9yeSI6ICAgICAg
eyAiY2F0ZWdvcnkiOiAib3BlcmF0aW9uIiwgICJ2YWx1ZSI6ICA2MywgInJldHVybiI6IFsic2l6
ZSJdLCAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0
ZSI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInF1
ZXJ5IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKLSAgICAgICAgImdyb3dfbWVtb3J5IjogICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjogIDY0LCAicmV0dXJuIjogWyJz
aXplIl0sICAgICAicGFyYW1ldGVyIjogWyJzaXplIl0sICAgICAgICAgICAgICAgICAiaW1tZWRp
YXRlIjogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
Z3JvdyB0aGUgc2l6ZSBvZiBtZW1vcnkiIH0sCisgICAgICAgICJjdXJyZW50X21lbW9yeSI6ICAg
ICAgeyAiY2F0ZWdvcnkiOiAib3BlcmF0aW9uIiwgICJ2YWx1ZSI6ICA2MywgInJldHVybiI6IFsi
c2l6ZSJdLCAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicXVlcnkgdGhlIHNpemUgb2Yg
bWVtb3J5IiB9LAorICAgICAgICAiZ3Jvd19tZW1vcnkiOiAgICAgICAgIHsgImNhdGVnb3J5Ijog
Im9wZXJhdGlvbiIsICAidmFsdWUiOiAgNjQsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJwYXJh
bWV0ZXIiOiBbInNpemUiXSwgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjog
ImZsYWdzIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogImdyb3cgdGhlIHNpemUgb2YgbWVtb3J5IiB9LAogICAgICAg
ICAiaTMyLmFkZCI6ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImFyaXRobWV0aWMiLCAidmFs
dWUiOiAxMDYsICJyZXR1cm4iOiBbImkzMiJdLCAgICAgICJwYXJhbWV0ZXIiOiBbImkzMiIsICJp
MzIiXSwgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgImIzb3AiOiAiQWRkIiAgICAgICAgICB9
LAogICAgICAgICAiaTMyLnN1YiI6ICAgICAgICAgICAgIHsgImNhdGVnb3J5IjogImFyaXRobWV0
aWMiLCAidmFsdWUiOiAxMDcsICJyZXR1cm4iOiBbImkzMiJdLCAgICAgICJwYXJhbWV0ZXIiOiBb
ImkzMiIsICJpMzIiXSwgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgImIzb3AiOiAiU3ViIiAg
ICAgICAgICB9LAogICAgICAgICAiaTMyLm11bCI6ICAgICAgICAgICAgIHsgImNhdGVnb3J5Ijog
ImFyaXRobWV0aWMiLCAidmFsdWUiOiAxMDgsICJyZXR1cm4iOiBbImkzMiJdLCAgICAgICJwYXJh
bWV0ZXIiOiBbImkzMiIsICJpMzIiXSwgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgImIzb3Ai
OiAiTXVsIiAgICAgICAgICB9LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDIxMDEyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseUluc3RhbmNlLCBtX3RhYmxlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3Rh
bmNlLCBtX21lbW9yeSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFs
cyk7IH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHJldmlzaW9uIDIxMDEyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01NSw2
ICs1NSwxNSBAQCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5CiB7CiB9
CiAKK0pTV2ViQXNzZW1ibHlNZW1vcnk6On5KU1dlYkFzc2VtYmx5TWVtb3J5KCkKK3sKKyAgICBp
ZiAobV9idWZmZXIpIHsKKyAgICAgICAgQXJyYXlCdWZmZXJDb250ZW50cyBkdW1teUNvbnRlbnRz
OworICAgICAgICBtX2J1ZmZlci0+dHJhbnNmZXJUbyhkdW1teUNvbnRlbnRzKTsKKyAgICAgICAg
bV9idWZmZXIgPSBudWxscHRyOworICAgIH0KK30KKwogSlNBcnJheUJ1ZmZlciogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6YnVmZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKICAgICBpZiAobV9idWZmZXJXcmFwcGVyKQpAQCAtNzEsNiArODAsNDggQEAgSlNBcnJheUJ1
ZmZlciogSlNXZWJBc3NlbWJseU1lbW9yeTo6YnVmZgogICAgIHJldHVybiBtX2J1ZmZlcldyYXBw
ZXIuZ2V0KCk7CiB9CiAKK1dhc206OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93
KEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRp
b25zT25GYWlsdXJlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBXYXNtOjpQYWdlQ291bnQg
b2xkUGFnZUNvdW50ID0gbV9tZW1vcnktPnNpemVJblBhZ2VzKCk7CisKKyAgICBpZiAoIVdhc206
OlBhZ2VDb3VudDo6aXNWYWxpZChkZWx0YSkpIHsKKyAgICAgICAgaWYgKHNob3VsZFRocm93RXhj
ZXB0aW9uc09uRmFpbHVyZSkKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5N
ZW1vcnkuZ3JvdyBleHBlY3RzIHRoZSBkZWx0YSB0byBiZSBhIHZhbGlkIHBhZ2UgY291bnQiKSkp
OworICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7CisgICAgfQorCisgICAgV2FzbTo6
UGFnZUNvdW50IG5ld1NpemUgPSBvbGRQYWdlQ291bnQgKyBXYXNtOjpQYWdlQ291bnQoZGVsdGEp
OworICAgIGlmICghbmV3U2l6ZSkgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25z
T25GYWlsdXJlKQorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5n
cm93IGV4cGVjdHMgdGhlIGdyb3duIHNpemUgdG8gYmUgYSB2YWxpZCBwYWdlIGNvdW50IikpKTsK
KyAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOworICAgIH0KKworICAgIGlmIChkZWx0
YSkgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX21lbW9yeS0+Z3JvdyhuZXdTaXplKTsKKyAg
ICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRp
b25zT25GYWlsdXJlKQorICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgICAgICAgICAgcmV0dXJu
IFdhc206OlBhZ2VDb3VudCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgbmVlZCB0
byBjbGVhciBvdXQgdGhlIG9sZCBhcnJheSBidWZmZXIgYmVjYXVzZSBpdCBtaWdodCBub3cgYmUg
cG9pbnRpbmcKKyAgICAvLyB0byBzdGFsZSBtZW1vcnkuCisgICAgLy8gTmV1dGVyIHRoZSBvbGQg
YXJyYXkuCisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAgIEFycmF5QnVmZmVyQ29udGVudHMg
ZHVtbXlDb250ZW50czsKKyAgICAgICAgbV9idWZmZXItPnRyYW5zZmVyVG8oZHVtbXlDb250ZW50
cyk7CisgICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgbV9idWZmZXJXcmFwcGVy
LmNsZWFyKCk7CisgICAgfQorCisgICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKK30KKwogdm9pZCBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24gMjEwMTI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw5ICs0OCwxMyBAQCBwdWJsaWM6CiAKICAgICBXYXNtOjpNZW1vcnkqIG1l
bW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CiAgICAgSlNBcnJheUJ1ZmZlciogYnVm
ZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICBXYXNtOjpQYWdlQ291bnQgZ3JvdyhF
eGVjU3RhdGUqLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZh
aWx1cmUpOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5TWVtb3J5LCBtX21lbW9yeSk7IH0KIAogcHJv
dGVjdGVkOgogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVu
aXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmKTsKKyAgICB+SlNXZWJBc3NlbWJseU1lbW9yeSgpOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TW9kdWxlLmgJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
MjAgKzU1LDIwIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8
IG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUpOwogICAgICAgICByZXR1cm4gbV9mdW5jdGlvbklu
ZGV4U3BhY2UuYnVmZmVyLmdldCgpW2Z1bmN0aW9uSW5kZXhTcGFjZV0uc2lnbmF0dXJlSW5kZXg7
CiAgICAgfQotICAgIHVuc2lnbmVkIGltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4gbV93YXNt
VG9KU1N0dWJzLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBj
b25zdCB7IHJldHVybiBtX3dhc21Ub0pTU3R1YnMuc2l6ZSgpOyB9CiAKICAgICBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1
bmN0aW9uSW5kZXhTcGFjZSA+PSBpbXBvcnRDb3VudCgpKTsKLSAgICAgICAgdW5zaWduZWQgY2Fs
bGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBpbXBvcnRDb3VudCgpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgp
KTsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBm
dW5jdGlvbkltcG9ydENvdW50KCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4
IDwgbV9jYWxsZWVDb3VudCk7CiAgICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXhd
LmdldCgpOwogICAgIH0KIAogICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2Up
CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gaW1w
b3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRl
eFNwYWNlIC0gaW1wb3J0Q291bnQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25J
bmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CisgICAgICAgIHVuc2lnbmVkIGNh
bGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwogICAg
ICAgICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uZ2V0KCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAy
MTAxMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksOCArMjI5LDkgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICBpZiAobW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5ICYmICFoYXNNZW1vcnlJbXBvcnQpIHsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSk7CiAgICAg
ICAgICAgICAvLyBXZSBjcmVhdGUgYSBtZW1vcnkgd2hlbiBpdCdzIGEgbWVtb3J5IGRlZmluaXRp
b24uCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBz
dGQ6Om1ha2VfdW5pcXVlPFdhc206Ok1lbW9yeT4obW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmlu
aXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSk7Ci0gICAgICAgICAg
ICBpZiAoIW1lbW9yeS0+aXNWYWxpZCgpKQorICAgICAgICAgICAgYm9vbCBmYWlsZWQ7CisgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFdhc206Ok1lbW9yeT4obW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwg
bW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSwgZmFpbGVkKTsKKyAgICAgICAgICAg
IGlmIChmYWlsZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
KSk7CiAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLAogICAgICAgICAgICAgICAg
SlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIFdURk1vdmUobWVtb3J5KSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMDEyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw4ICs5Niw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihp
bml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50KTsKLSAgICBpZiAoIW1lbW9yeS0+aXNW
YWxpZCgpKQorICAgIGJvb2wgZmFpbGVkOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1v
cnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihpbml0aWFsUGFnZUNv
dW50LCBtYXhpbXVtUGFnZUNvdW50LCBmYWlsZWQpOworICAgIGlmIChmYWlsZWQpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTAxMjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDMzICszMiw2OSBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1l
bW9yeS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBK
U0Mgeworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1v
cnlQcm90b0Z1bmNHcm93KEV4ZWNTdGF0ZSopOworfQogCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlN
ZW1vcnlQcm90b3R5cGUubHV0LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNz
SW5mbyBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHku
TWVtb3J5LnByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZwcm90b3R5cGVUYWJsZVdlYkFzc2Vt
Ymx5TWVtb3J5LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBl
KSB9OwogCiAvKiBTb3VyY2UgZm9yIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmx1dC5oCi0g
QGJlZ2luIHByb3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlNZW1vcnkKLSBAZW5kCi0gKi8KK0BiZWdp
biBwcm90b3R5cGVUYWJsZVdlYkFzc2VtYmx5TWVtb3J5CisgIGdyb3cgICAgIHdlYkFzc2VtYmx5
TWVtb3J5UHJvdG9GdW5jR3JvdyAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKK0BlbmQKKyovCiAKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9G
dW5jQnVmZmVyKEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJB
c3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVjU3RhdGUqKTsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVjU3Rh
dGUqIGV4ZWMpCitBTFdBWVNfSU5MSU5FIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGdldE1lbW9yeShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJs
eU1lbW9yeSo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsgCisgICAgSlNXZWJBc3NlbWJseU1lbW9yeSog
bWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odmFsdWUpOyAKICAg
ICBpZiAoIW1lbW9yeSkgewotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIAotICAgICAgICAgICAgICAgICAgICBjcmVhdGVUeXBl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkucHJvdG90eXBlLmJ1
ZmZlciBnZXR0ZXIgY2FsbGVkIHdpdGggbm9uIFdlYkFzc2VtYmx5Lk1lbW9yeSB8dGhpc3wgdmFs
dWUiKSkpKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgCisgICAg
ICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5N
ZW1vcnkucHJvdG90eXBlLmJ1ZmZlciBnZXR0ZXIgY2FsbGVkIHdpdGggbm9uIFdlYkFzc2VtYmx5
Lk1lbW9yeSB8dGhpc3wgdmFsdWUiKSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CisgICAgcmV0dXJuIG1lbW9yeTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3
ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGdldE1lbW9y
eShleGVjLCBleGVjLT50aGlzVmFsdWUoKSk7IAorICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1lbW9yeS0+YnVmZmVy
KGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOwogfQogCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jR3JvdyhFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnkqIG1lbW9yeSA9IGdldE1lbW9yeShleGVjLCBleGVjLT50aGlzVmFsdWUoKSk7IAorICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAKKyAgICB1aW50MzJfdCBk
ZWx0YSA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAgIGJvb2wgc2hvdWxk
VGhyb3dFeGNlcHRpb25zT25GYWlsdXJlID0gdHJ1ZTsKKyAgICBXYXNtOjpQYWdlQ291bnQgcmVz
dWx0ID0gbWVtb3J5LT5ncm93KGV4ZWMsIGRlbHRhLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZh
aWx1cmUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocmVzdWx0LnBhZ2VDb3VudCgpKSk7Cit9
CisKIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlw
ZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiB7CiAgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU+KHZtLmhlYXApKSBXZWJBc3NlbWJseU1l
bW9yeVByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJl
dmlzaW9uIDIxMDEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lk
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgY29uc3QgV2FzbTo6TW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpOwogCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gbW9kdWxlLT5l
eHBvcnRTeW1ib2xUYWJsZSgpOwotICAgIHVuc2lnbmVkIGltcG9ydENvdW50ID0gbW9kdWxlLT5p
bXBvcnRDb3VudCgpOworICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQgPSBtb2R1bGUt
PmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKIAogICAgIC8vIEZJWE1FIHdpcmUgdXAgdGhlIGltcG9y
dHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUxMTgKIApAQCAt
MTA4LDcgKzEwOCw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MK
ICAgICAgICAgICAgIC8vIDEuIElmIGUgaXMgYSBjbG9zdXJlIGM6CiAgICAgICAgICAgICAvLyAg
IGkuIElmIHRoZXJlIGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgZnVuYyBp
biBmdW5jcyB3aG9zZSBmdW5jLltbQ2xvc3VyZV1dIGVxdWFscyBjLCB0aGVuIHJldHVybiBmdW5j
LgogICAgICAgICAgICAgLy8gICBpaS4gKE5vdGU6IEF0IG1vc3Qgb25lIHdyYXBwZXIgaXMgY3Jl
YXRlZCBmb3IgYW55IGNsb3N1cmUsIHNvIGZ1bmMgaXMgdW5pcXVlLCBldmVuIGlmIHRoZXJlIGFy
ZSBtdWx0aXBsZSBvY2N1cnJhbmNlcyBpbiB0aGUgbGlzdC4gTW9yZW92ZXIsIGlmIHRoZSBpdGVt
IHdhcyBhbiBpbXBvcnQgdGhhdCBpcyBhbHJlYWR5IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3Rp
YyBPYmplY3QsIHRoZW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdCB3aWxsIGJlIGZvdW5k
LiBGb3IgaW1wb3J0cyB0aGF0IGFyZSByZWd1bGFyIEpTIGZ1bmN0aW9ucywgYSBuZXcgd3JhcHBl
ciB3aWxsIGJlIGNyZWF0ZWQuKQotICAgICAgICAgICAgaWYgKGV4cC5raW5kSW5kZXggPCBpbXBv
cnRDb3VudCkgeworICAgICAgICAgICAgaWYgKGV4cC5raW5kSW5kZXggPCBmdW5jdGlvbkltcG9y
dENvdW50KSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUUgSW1wbGVtZW50IHJlLWV4cG9ydGlu
ZyBhbiBpbXBvcnQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1
MTAKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgfQpAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmxpbmsoRXhlY1MKICAgICAgICAgLy8gVGhlIHN0YXJ0IGZ1bmN0aW9uIG11c3Qgbm90IHRha2Ug
YW55IGFyZ3VtZW50cyBvciByZXR1cm4gYW55dGhpbmcuIFRoaXMgaXMgZW5mb3JjZWQgYnkgdGhl
IHBhcnNlci4KICAgICAgICAgQVNTRVJUKCFzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CiAg
ICAgICAgIEFTU0VSVChzaWduYXR1cmUtPnJldHVyblR5cGUoKSA9PSBXYXNtOjpWb2lkKTsKLSAg
ICAgICAgaWYgKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlIDwgbW9kdWxlLT5pbXBvcnRDb3VudCgp
KSB7CisgICAgICAgIGlmIChzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1vZHVsZS0+ZnVuY3Rp
b25JbXBvcnRDb3VudCgpKSB7CiAgICAgICAgICAgICBKU0NlbGwqIHN0YXJ0RnVuY3Rpb24gPSBp
bnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpLT5nZXQoKTsK
ICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIHN0YXJ0RnVuY3Rpb24p
OwogICAgICAgICB9IGVsc2UgewpAQCAtMTk2LDggKzE5Niw4IEBAIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICBtX21vZHVsZUVudmlyb25tZW50LnNldCh2bSwg
dGhpcywgbW9kdWxlRW52aXJvbm1lbnQpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU2NvcGUs
IHR5cGVuYW1lIE4sIHR5cGVuYW1lIC4uLkFyZ3M+Ci1ORVZFUl9JTkxJTkUgc3RhdGljIEpTVmFs
dWUgZGF0YVNlZ21lbnRGYWlsKEV4ZWNTdGF0ZSogc3RhdGUsIFZNJiB2bSwgU2NvcGUmIHNjb3Bl
LCBOIG1lbW9yeVNpemUsIE4gc2VnbWVudFNpemUsIE4gb2Zmc2V0LCBBcmdzLi4uIGFyZ3MpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgU2NvcGUsIHR5cGVuYW1lIE0sIHR5cGVuYW1lIE4sIHR5cGVuYW1l
IC4uLkFyZ3M+CitORVZFUl9JTkxJTkUgc3RhdGljIEpTVmFsdWUgZGF0YVNlZ21lbnRGYWlsKEV4
ZWNTdGF0ZSogc3RhdGUsIFZNJiB2bSwgU2NvcGUmIHNjb3BlLCBNIG1lbW9yeVNpemUsIE4gc2Vn
bWVudFNpemUsIE4gb2Zmc2V0LCBBcmdzLi4uIGFyZ3MpCiB7CiAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihzdGF0ZSwg
dm0sIG1ha2VTdHJpbmcoQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGRhdGEgc2VnbWVudCBpbml0aWFs
aXphdGlvbjogc2VnbWVudCBvZiAiKSwgU3RyaW5nOjpudW1iZXIoc2VnbWVudFNpemUpLCBBU0NJ
SUxpdGVyYWwoIiBieXRlcyBtZW1vcnkgb2YgIiksIFN0cmluZzo6bnVtYmVyKG1lbW9yeVNpemUp
LCBBU0NJSUxpdGVyYWwoIiBieXRlcywgYXQgb2Zmc2V0ICIpLCBTdHJpbmc6Om51bWJlcihvZmZz
ZXQpLCBhcmdzLi4uKSkpOwogfQpAQCAtMjMxLDcgKzIzMSw3IEBAIEpTVmFsdWUgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIGltcG9y
dC4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1NTEwCiAgICAgICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IGVs
ZW1lbnQuZnVuY3Rpb25JbmRpY2VzW2ldOwotICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbklu
ZGV4IDwgbW9kdWxlLT5pbXBvcnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uSW5kZXggPCBtb2R1bGUtPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3dWTVJhbmdlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMg
c2V0dGluZyB0aGUgdGFibGUgdmFsdWUgd2l0aCBhbiBpbXBvcnQuIFRoaXMgaXMgbm90IHlldCBp
bXBsZW1lbnRlZC4gRklYTUUuIikpKTsKICAgICAgICAgICAgICAgICB9CkBAIC0yNTksMTUgKzI1
OSwyMSBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0CiAgICAgICAg
IGlmICghZGF0YS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGpzTWVt
b3J5KTsgLy8gSXQgaXMgYSB2YWxpZGF0aW9uIGVycm9yIGZvciBhIERhdGEgc2VjdGlvbiB0byBl
eGlzdCB3aXRob3V0IGEgTWVtb3J5IHNlY3Rpb24gb3IgaW1wb3J0LgogICAgICAgICAgICAgdWlu
dDhfdCogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oanNNZW1vcnktPm1lbW9y
eSgpLT5tZW1vcnkoKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkpOwotICAg
ICAgICAgICAgYXV0byBzaXplSW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1vcnkoKS0+c2l6ZSgpOwor
ICAgICAgICAgICAgdWludDY0X3Qgc2l6ZUluQnl0ZXMgPSBqc01lbW9yeS0+bWVtb3J5KCktPnNp
emUoKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgc2VnbWVudCA6IGRhdGEpIHsKICAgICAgICAg
ICAgICAgICBpZiAoc2VnbWVudC0+c2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
dWludDMyX3Qgb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC0+b2Zmc2V0
LmlzR2xvYmFsSW1wb3J0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4obV9pbnN0YW5jZS0+bG9hZEkzMkdsb2JhbChzZWdtZW50LT5vZmZz
ZXQuZ2xvYmFsSW1wb3J0SW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzZWdtZW50LT5vZmZzZXQuY29uc3RWYWx1ZSgp
OworCiAgICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzaXplSW5CeXRlcyA8IHNlZ21l
bnQtPnNpemVJbkJ5dGVzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhU2Vn
bWVudEZhaWwoc3RhdGUsIHZtLCBzY29wZSwgc2l6ZUluQnl0ZXMsIHNlZ21lbnQtPnNpemVJbkJ5
dGVzLCBzZWdtZW50LT5vZmZzZXQsIEFTQ0lJTGl0ZXJhbCgiLCBzZWdtZW50IGlzIHRvbyBiaWci
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzZWdtZW50LT5vZmZzZXQgPiBz
aXplSW5CeXRlcyAtIHNlZ21lbnQtPnNpemVJbkJ5dGVzKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBkYXRhU2VnbWVudEZhaWwoc3RhdGUsIHZtLCBzY29wZSwgc2l6ZUluQnl0ZXMs
IHNlZ21lbnQtPnNpemVJbkJ5dGVzLCBzZWdtZW50LT5vZmZzZXQsIEFTQ0lJTGl0ZXJhbCgiLCBz
ZWdtZW50IHdyaXRlcyBvdXRzaWRlIG9mIG1lbW9yeSIpKTsKLSAgICAgICAgICAgICAgICAgICAg
bWVtY3B5KG1lbW9yeSArIHNlZ21lbnQtPm9mZnNldCwgJnNlZ21lbnQtPmJ5dGUoMCksIHNlZ21l
bnQtPnNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhU2Vn
bWVudEZhaWwoc3RhdGUsIHZtLCBzY29wZSwgc2l6ZUluQnl0ZXMsIHNlZ21lbnQtPnNpemVJbkJ5
dGVzLCBvZmZzZXQsIEFTQ0lJTGl0ZXJhbCgiLCBzZWdtZW50IGlzIHRvbyBiaWciKSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShvZmZzZXQgPiBzaXplSW5CeXRlcyAtIHNlZ21l
bnQtPnNpemVJbkJ5dGVzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhU2Vn
bWVudEZhaWwoc3RhdGUsIHZtLCBzY29wZSwgc2l6ZUluQnl0ZXMsIHNlZ21lbnQtPnNpemVJbkJ5
dGVzLCBvZmZzZXQsIEFTQ0lJTGl0ZXJhbCgiLCBzZWdtZW50IHdyaXRlcyBvdXRzaWRlIG9mIG1l
bW9yeSIpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobWVtb3J5KTsKKyAg
ICAgICAgICAgICAgICAgICAgbWVtY3B5KG1lbW9yeSArIG9mZnNldCwgJnNlZ21lbnQtPmJ5dGUo
MCksIHNlZ21lbnQtPnNpemVJbkJ5dGVzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297796</attachid>
            <date>2016-12-27 16:45:42 -0800</date>
            <delta_ts>2016-12-28 11:14:44 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>71356</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTAxODApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI2IEBACisyMDE2LTEyLTI3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBJbXBsZW1lbnQgZ3Jvd19tZW1vcnkgYW5kIGN1
cnJlbnRfbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjY0NDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5ODAzNjc2PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS55YW1sOgorICAg
ICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvZ3Jvdy1tZW1vcnktMi5qczogQWRkZWQuCisgICAg
ICAgIChjb25zdC5mdW5jKToKKyAgICAgICAgKGFzc2VydC5lcS5pbnN0YW5jZS5leHBvcnRzLmZv
byk6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9ncm93LW1lbW9yeS5qczogQWRkZWQu
CisgICAgICAgIChiaW5hcnlTaG91bGROb3RQYXJzZSk6CisgICAgICAgIChhc3NlcnQudHJ1dGh5
KToKKyAgICAgICAgKGFzc2VydC5lcSk6CisgICAgICAgIChtZW1vcnkuZ3Jvdyk6CisgICAgICAg
ICogd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanM6IEFkZGVkLgorICAgICAgICAoaS5pKToKKyAg
ICAgICAgKGFzc2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X21lbW9yeS5qczoK
KyAgICAgICAgKiB3YXNtL3dhc20uanNvbjoKKwogMjAxNi0xMi0yNSAgWXVzdWtlIFN1enVraSAg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBQcm9wYWdhdGUgdGhlIHNvdXJjZSBv
cmlnaW4gYXMgbXVjaCBhcyBwb3NzaWJsZQpJbmRleDogSlNUZXN0cy93YXNtLnlhbWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy93YXNtLnlhbWwJKHJldmlzaW9uIDIxMDE4MCkKKysrIEpTVGVzdHMv
d2FzbS55YW1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAKICAgY21kOiBydW5X
ZWJBc3NlbWJseVNwZWNUZXN0IDpub3JtYWwKIAogLSBwYXRoOiB3YXNtL3NwZWMtdGVzdHMvbWVt
b3J5X3RyYXAud2FzdC5qcwotICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3BlY1Rlc3QgOnNraXAKKyAg
Y21kOiBydW5XZWJBc3NlbWJseVNwZWNUZXN0IDpub3JtYWwKIAogLSBwYXRoOiB3YXNtL3NwZWMt
dGVzdHMvbmFtZXMud2FzdC5qcwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3BlY1Rlc3QgOnNraXAK
SW5kZXg6IEpTVGVzdHMvd2FzbS93YXNtLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNt
L3dhc20uanNvbgkocmV2aXNpb24gMjEwMTgwKQorKysgSlNUZXN0cy93YXNtL3dhc20uanNvbgko
d29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsOCBAQAogICAgICAgICAiaTY0LnN0b3JlIjogICAg
ICAgICAgIHsgImNhdGVnb3J5IjogIm1lbW9yeSIsICAgICAidmFsdWUiOiAgNTUsICJyZXR1cm4i
OiBbXSwgICAgICAgICAgICJwYXJhbWV0ZXIiOiBbImFkZHIiLCAiaTY0Il0sICAgICAgICAgICJp
bW1lZGlhdGUiOiBbeyJuYW1lIjogImZsYWdzIiwgICAgICAgICAgInR5cGUiOiAidmFydWludDMy
In0sIHsibmFtZSI6ICJvZmZzZXQiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICJkZXNjcmlwdGlv
biI6ICJzdG9yZSB0byBtZW1vcnkiIH0sCiAgICAgICAgICJmMzIuc3RvcmUiOiAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAibWVtb3J5IiwgICAgICJ2YWx1ZSI6ICA1NiwgInJldHVybiI6IFtdLCAg
ICAgICAgICAgInBhcmFtZXRlciI6IFsiYWRkciIsICJmMzIiXSwgICAgICAgICAgImltbWVkaWF0
ZSI6IFt7Im5hbWUiOiAiZmxhZ3MiLCAgICAgICAgICAidHlwZSI6ICJ2YXJ1aW50MzIifSwgeyJu
YW1lIjogIm9mZnNldCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgImRlc2NyaXB0aW9uIjogInN0
b3JlIHRvIG1lbW9yeSIgfSwKICAgICAgICAgImY2NC5zdG9yZSI6ICAgICAgICAgICB7ICJjYXRl
Z29yeSI6ICJtZW1vcnkiLCAgICAgInZhbHVlIjogIDU3LCAicmV0dXJuIjogW10sICAgICAgICAg
ICAicGFyYW1ldGVyIjogWyJhZGRyIiwgImY2NCJdLCAgICAgICAgICAiaW1tZWRpYXRlIjogW3si
bmFtZSI6ICJmbGFncyIsICAgICAgICAgICJ0eXBlIjogInZhcnVpbnQzMiJ9LCB7Im5hbWUiOiAi
b2Zmc2V0IiwgInR5cGUiOiAidmFydWludDMyIn1dLCAiZGVzY3JpcHRpb24iOiAic3RvcmUgdG8g
bWVtb3J5IiB9LAotICAgICAgICAiY3VycmVudF9tZW1vcnkiOiAgICAgIHsgImNhdGVnb3J5Ijog
Im9wZXJhdGlvbiIsICAidmFsdWUiOiAgNjMsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJwYXJh
bWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJxdWVyeSB0aGUgc2l6ZSBv
ZiBtZW1vcnkiIH0sCi0gICAgICAgICJncm93X21lbW9yeSI6ICAgICAgICAgeyAiY2F0ZWdvcnki
OiAib3BlcmF0aW9uIiwgICJ2YWx1ZSI6ICA2NCwgInJldHVybiI6IFsic2l6ZSJdLCAgICAgInBh
cmFtZXRlciI6IFsic2l6ZSJdLCAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImdyb3cgdGhlIHNpemUg
b2YgbWVtb3J5IiB9LAorICAgICAgICAiY3VycmVudF9tZW1vcnkiOiAgICAgIHsgImNhdGVnb3J5
IjogIm9wZXJhdGlvbiIsICAidmFsdWUiOiAgNjMsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJw
YXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1l
IjogImZsYWdzIiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogInF1ZXJ5IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKKyAg
ICAgICAgImdyb3dfbWVtb3J5IjogICAgICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAg
InZhbHVlIjogIDY0LCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogWyJzaXpl
Il0sICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFncyIsICJ0eXBl
IjogInZhcnVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJncm93IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKICAgICAgICAgImkzMi5hZGQiOiAg
ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJhcml0aG1ldGljIiwgInZhbHVlIjogMTA2LCAicmV0
dXJuIjogWyJpMzIiXSwgICAgICAicGFyYW1ldGVyIjogWyJpMzIiLCAiaTMyIl0sICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW10sICJiM29wIjogIkFkZCIgICAgICAgICAgfSwKICAgICAgICAgImkz
Mi5zdWIiOiAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJhcml0aG1ldGljIiwgInZhbHVlIjog
MTA3LCAicmV0dXJuIjogWyJpMzIiXSwgICAgICAicGFyYW1ldGVyIjogWyJpMzIiLCAiaTMyIl0s
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICJiM29wIjogIlN1YiIgICAgICAgICAgfSwKICAg
ICAgICAgImkzMi5tdWwiOiAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJhcml0aG1ldGljIiwg
InZhbHVlIjogMTA4LCAicmV0dXJuIjogWyJpMzIiXSwgICAgICAicGFyYW1ldGVyIjogWyJpMzIi
LCAiaTMyIl0sICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICJiM29wIjogIk11bCIgICAgICAg
ICAgfSwKSW5kZXg6IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9ncm93LW1lbW9yeS0yLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9ncm93LW1lbW9yeS0y
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9ncm93LW1l
bW9yeS0yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKK2ltcG9ydCBCdWlsZGVy
IGZyb20gJy4uL0J1aWxkZXIuanMnOworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2Vy
dC5qcyc7CisKK3sKKyAgICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAwLCBt
YXhpbXVtOiAyfTsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAg
IC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJp
bXAiLCAibWVtb3J5IiwgbWVtb3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImltcCIsICJmdW5jIiwge3BhcmFtczogW10sIHJldDogInZvaWQifSkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIifSkK
KyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQor
ICAgICAgICAgICAgICAgIC5JMzJMb2FkKDAsIDApCisgICAgICAgICAgICAgICAgLlJldHVybigp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0g
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHku
TWVtb3J5KG1lbW9yeURlc2NyaXB0aW9uKTsKKworICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiB7Cisg
ICAgICAgIG1lbW9yeS5ncm93KDEpOworICAgICAgICAobmV3IFVpbnQzMkFycmF5KG1lbW9yeS5i
dWZmZXIpKVswXSA9IDQyOworICAgIH07CisKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHttZW1vcnksIGZ1bmN9fSk7CisgICAgYXNz
ZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDApLCA0Mik7Cit9CisKK3sKKyAgICBjb25zdCBt
ZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAwLCBtYXhpbXVtOiAyfTsKKyAgICBjb25zdCB0
YWJsZURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDEsIG1heGltdW06IDEsIGVsZW1lbnQ6ICJhbnlm
dW5jIn07CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlw
ZSgpCisgICAgICAgICAgICAuRnVuYyhbXSwgInZvaWQiKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkltcG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5
RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmdW5jIiwge3BhcmFt
czogW10sIHJldDogInZvaWQifSkKKyAgICAgICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwg
dGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVu
ZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJp
MzIifSkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoMCkKKyAgICAgICAgICAgICAgICAuQ2Fs
bEluZGlyZWN0KDAsIDApIC8vIGNhbGwgW10gPT4gdm9pZAorICAgICAgICAgICAgICAgIC5HZXRM
b2NhbCgwKQorICAgICAgICAgICAgICAgIC5JMzJMb2FkKDAsIDApCisgICAgICAgICAgICAgICAg
LlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFy
Iiwge3BhcmFtczogW10sIHJldDogInZvaWQifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQor
ICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5F
bmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3Qg
bWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7CisgICAg
Y29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7CisK
KyAgICBjb25zdCBmdW5jID0gKCkgPT4geworICAgICAgICBtZW1vcnkuZ3JvdygxKTsKKyAgICAg
ICAgKG5ldyBVaW50MzJBcnJheShtZW1vcnkuYnVmZmVyKSlbMF0gPSAweGJhZGJlZWY7CisgICAg
fTsKKworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSwge2ltcDoge21lbW9yeSwgZnVuYywgdGFibGV9fSk7CisgICAgdGFibGUuc2V0KDAsIGluc3Rh
bmNlLmV4cG9ydHMuYmFyKTsKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mb28oMCks
IDB4YmFkYmVlZik7Cit9CkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZ3Jvdy1t
ZW1vcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2dyb3ct
bWVtb3J5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9n
cm93LW1lbW9yeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNyBAQAoraW1wb3J0IEJ1
aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4v
YXNzZXJ0LmpzJzsKKworY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7Citjb25zdCBtYXhQYWdl
Q291bnQgPSAoMioqMzIpIC8gcGFnZVNpemU7CisKK2Z1bmN0aW9uIGJpbmFyeVNob3VsZE5vdFBh
cnNlKGJ1aWxkZXIsIG1zZyA9ICIiKSB7CisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAg
IGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICB9IGNhdGNo
KGUpIHsKKyAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29t
cGlsZUVycm9yKTsKKyAgICAgICAgaWYgKG1zZykKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHko
ZS5tZXNzYWdlLmluZGV4T2YobXNnKSAhPT0gLTEpOworICAgICAgICB0aHJldyA9IHRydWU7Cisg
ICAgfQorICAgIGFzc2VydC50cnV0aHkodGhyZXcpOworfQorCit7CisgICAgLy8gQ2FuJ3QgZ3Jv
d19tZW1vcnkgaWYgbm8gbWVtb3J5IGlzIGRlZmluZWQuCisgICAgY29uc3QgYnVpbGRlciA9IChu
ZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oe3JldDogInZvaWQiLCBwYXJhbXM6IFtdfSkKKyAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoMjUpCisgICAgICAgICAgICAgICAgLkdyb3dNZW1vcnkoMCkKKyAgICAgICAg
ICAgICAgICAuRHJvcCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisg
ICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRlciwgImdyb3dfbWVtb3J5IGlzIG9ubHkgdmFs
aWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIpOworfQorCit7CisgICAgLy8g
Q2FuJ3QgY3VycmVudF9tZW1vcnkgaWYgbm8gbWVtb3J5IGlzIGRlZmluZWQuCisgICAgY29uc3Qg
YnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQoKQorICAgICAgICAuQ29k
ZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oe3JldDogInZvaWQiLCBwYXJhbXM6IFtdfSkKKyAg
ICAgICAgICAgICAgICAuSTMyQ29uc3QoMjUpCisgICAgICAgICAgICAgICAgLkN1cnJlbnRNZW1v
cnkoMCkKKyAgICAgICAgICAgICAgICAuRHJvcCgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpOworCisgICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRlciwgImN1cnJlbnRf
bWVtb3J5IGlzIG9ubHkgdmFsaWQgaWYgYSBtZW1vcnkgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCIp
OworfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnko
KS5Jbml0aWFsTWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0OiAidm9pZCIsIHBhcmFt
czogW119KQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAgICAgICAgICAgICAgICAu
R3Jvd01lbW9yeSgxKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyLCAi
cmVzZXJ2ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVtb3J5IG11c3QgYmUgemVybyIpOworfQorCit7
CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnkoKS5Jbml0aWFs
TWF4UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0OiAidm9pZCIsIHBhcmFtczogW119KQor
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAgICAgICAgICAgICAgICAuQ3VycmVudE1l
bW9yeSgxKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyLCAicmVzZXJ2
ZWQgdmFyVWludDEgZm9yIGN1cnJlbnRfbWVtb3J5IG11c3QgYmUgemVybyIpOworfQorCit7Cisg
ICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4
UGFnZXMoMSwgMSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgpCisgICAgICAgIC5Db2Rl
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7cmV0OiAidm9pZCIsIHBhcmFtczogW119KQorICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCgyNSkKKyAgICAgICAgICAgICAgICAuQ3VycmVudE1lbW9y
eSgweGZmZmZmZjAwKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyLCAi
Y2FuJ3QgcGFyc2UgcmVzZXJ2ZWQgdmFyVWludDEgZm9yIGN1cnJlbnRfbWVtb3J5Iik7Cit9CisK
K3sKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLk1lbW9yeSgpLkluaXRp
YWxNYXhQYWdlcygxLCAxKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKHtyZXQ6ICJ2b2lkIiwgcGFyYW1zOiBbXX0p
CisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDI1KQorICAgICAgICAgICAgICAgIC5Hcm93TWVt
b3J5KDB4ZmZmZmZmMDApCisgICAgICAgICAgICAgICAgLkRyb3AoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIs
ICJjYW4ndCBwYXJzZSByZXNlcnZlZCB2YXJVaW50MSBmb3IgZ3Jvd19tZW1vcnkiKTsKK30KKwor
eworICAgIGNvbnN0IG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDIwLCBtYXhpbXVtOiA1
MH07CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlE
ZXNjcmlwdGlvbikuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbImkz
MiJdLCByZXQ6ICJpMzIifSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAg
ICAgICAgICAuR3Jvd01lbW9yeSgwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7aW1wOiB7bWVtb3J5OiBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURl
c2NyaXB0aW9uKX19KTsKKyAgICBsZXQgY3VycmVudFBhZ2VTaXplID0gbWVtb3J5RGVzY3JpcHRp
b24uaW5pdGlhbDsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbW9yeURlc2NyaXB0aW9uLm1h
eGltdW0gLSBtZW1vcnlEZXNjcmlwdGlvbi5pbml0aWFsOyBpKyspIHsKKyAgICAgICAgYXNzZXJ0
LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDEpLCBjdXJyZW50UGFnZVNpemUpOworICAgICAgICAr
K2N1cnJlbnRQYWdlU2l6ZTsKKyAgICB9CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7
IGkrKykgeworICAgICAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5mb28oMSksIC0xKTsK
KyAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZm9vKDApLCBjdXJyZW50UGFnZVNp
emUpOworICAgIH0KK30KKworeworICAgIGNvbnN0IG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRp
YWw6IDIwLCBtYXhpbXVtOiAxMDB9OworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIo
KSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAi
LCAibWVtb3J5IiwgbWVtb3J5RGVzY3JpcHRpb24pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJm
b28iLCB7IHBhcmFtczogW10sIHJldDogImkzMiJ9KQorICAgICAgICAgICAgICAgIC5DdXJyZW50
TWVtb3J5KDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
KyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURlc2NyaXB0
aW9uKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUsIHtpbXA6IHttZW1vcnl9fSk7CisgICAgbGV0IGN1cnJlbnRQYWdlU2l6ZSA9IG1lbW9yeURl
c2NyaXB0aW9uLmluaXRpYWw7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW1vcnlEZXNjcmlw
dGlvbi5tYXhpbXVtIC0gbWVtb3J5RGVzY3JpcHRpb24uaW5pdGlhbDsgaSsrKSB7CisgICAgICAg
IGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygpLCBjdXJyZW50UGFnZVNpemUpOworICAg
ICAgICArK2N1cnJlbnRQYWdlU2l6ZTsKKyAgICAgICAgbWVtb3J5Lmdyb3coMSk7CisgICAgfQor
fQorCit7CisgICAgY29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMjAsIG1heGlt
dW06IDEwMH07CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBt
ZW1vcnlEZXNjcmlwdGlvbikuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KC0xKQorICAgICAg
ICAgICAgICAgIC5Hcm93TWVtb3J5KDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5
KG1lbW9yeURlc2NyaXB0aW9uKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHttZW1vcnl9fSk7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAyMDsgaSsrKSB7CisgICAgICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzLmZvbygp
LCAtMSk7CisgICAgfQorfQpJbmRleDogSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCShub25l
eGlzdGVudCkKKysrIEpTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MSBAQAoraW1wb3J0IHsgZXEgYXMgYXNzZXJ0RXEsIHRocm93cyBh
cyBhc3NlcnRUaHJvd3MgfSBmcm9tICIuLi9hc3NlcnQuanMiOworY29uc3QgcGFnZVNpemUgPSA2
NCoxMDI0OworCitsZXQgYnVmZmVycyA9IFtdOworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkr
KykgeworICAgIGNvbnN0IG1heCA9IDU7CisgICAgbGV0IHBhZ2VDb3VudCA9IDE7CisgICAgbGV0
IHggPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOiAxLCBtYXhpbXVtOiBtYXh9KTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IChtYXggLSAxKTsgaSsrKSB7CisgICAgICAgIGxldCBp
bnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheSh4LmJ1ZmZlcik7CisKKyAgICAgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCBwYWdlU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBhc3NlcnRFcShpbnQ4QXJy
YXlbcGFnZVNpemUqKHBhZ2VDb3VudCAtIDEpICsgaV0sIDApOworICAgICAgICAgICAgaW50OEFy
cmF5W3BhZ2VTaXplKihwYWdlQ291bnQgLSAxKSArIGldID0gcGFnZUNvdW50OworICAgICAgICB9
CisKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlQ291bnQ7IGkrKykgeworICAgICAg
ICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYWdlU2l6ZTsgaisrKSB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0RXEoaW50OEFycmF5W2kgKiBwYWdlU2l6ZSArIGpdLCBpICsgMSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsZXQgYnVmZmVyID0geC5idWZmZXI7CisgICAg
ICAgIGFzc2VydEVxKGJ1ZmZlci5ieXRlTGVuZ3RoLCBwYWdlQ291bnQgKiBwYWdlU2l6ZSk7Cisg
ICAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpOworICAgICAgICBsZXQgcHJldmlvdXNQYWdlU2l6
ZSA9IHguZ3JvdygxKTsKKyAgICAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDApOwor
ICAgICAgICBhc3NlcnRFcShwcmV2aW91c1BhZ2VTaXplLCBwYWdlQ291bnQpOworICAgICAgICAr
K3BhZ2VDb3VudDsKKyAgICB9Cit9CisKK2ZvciAobGV0IGJ1ZmZlciBvZiBidWZmZXJzKSB7Cisg
ICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDApOworfQorCit7CisgICAgY29uc3QgbWVt
b3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMSwgbWF4aW11bTogNX0pOwor
ICAgIGxldCBidWZmZXIgPSBtZW1vcnkuYnVmZmVyOworICAgIGFzc2VydEVxKGJ1ZmZlci5ieXRl
TGVuZ3RoLCAxKjY0KjEwMjQpOworICAgIG1lbW9yeS5ncm93KDEpOworICAgIGFzc2VydEVxKGJ1
ZmZlci5ieXRlTGVuZ3RoLCAwKTsKKworICAgIGJ1ZmZlciA9IG1lbW9yeS5idWZmZXI7CisgICAg
YXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIqNjQqMTAyNCk7CisKKyAgICAvLyBUaGlzIHNo
b3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5jZSBpdCBmYWlscy4KKyAgICBhc3NlcnRUaHJv
d3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVycm9yLCAiT3V0IG9mIG1lbW9yeSIpOyAKKyAg
ICBhc3NlcnRFcShidWZmZXIuYnl0ZUxlbmd0aCwgMio2NCoxMDI0KTsKKyAgICBhc3NlcnRFcSht
ZW1vcnkuYnVmZmVyLCBidWZmZXIpOworfQpJbmRleDogSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0
X21lbW9yeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5
LmpzCShyZXZpc2lvbiAyMTAxODApCisrKyBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotLy8gRklYTUU6IHVzZSB0aGUgYXNz
ZXJ0IGxpYnJhcnk6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU2
ODQKIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogaW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMjEwMTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDE2LTEyLTI3ICBTYWFtIEJhcmF0aSAgPHNi
YXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBJbXBsZW1lbnQgZ3Jvd19t
ZW1vcnkgYW5kIGN1cnJlbnRfbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjY0NDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5ODAzNjc2
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggaW1wbGVtZW50cyBncm93X21lbW9yeSwgY3VycmVudF9tZW1vcnksIGFuZCBXZWJBc3Nl
bWJseS5wcm90b3R5cGUuZ3Jvdy4KKyAgICAgICAgU2VlIHJlbGV2YW50IHNwZWMgdGV4dHMgaGVy
ZToKKyAgICAgICAgCisgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9kZXNp
Z24vYmxvYi9tYXN0ZXIvU2VtYW50aWNzLm1kI2xpbmVhci1tZW1vcnktYWNjZXNzZXMKKyAgICAg
ICAgaHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9ibG9iL21hc3Rlci9KUy5t
ZCN3ZWJhc3NlbWJseW1lbW9yeXByb3RvdHlwZWdyb3cKKyAgICAgICAgCisgICAgICAgIEkgYWxz
byBmaXggYSBjb3VwbGUgbWlzY2VsbGFuZW91cyBidWdzOgorICAgICAgICAKKyAgICAgICAgMS4g
RGF0YSBzZWN0aW9uIG5vdyB1bmRlcnN0YW5kcyBmdWxsIGluaXRfZXhwcnMuIAorICAgICAgICAy
LiBwYXJzZVZhclVpbnQxIG5vIGxvbmdlciBoYXMgYSBidWcgd2hlcmUgd2UgYWxsb3cgdmFsdWVz
IGxhcmdlciB0aGFuIDEgaWYKKyAgICAgICAgdGhlaXIgYm90dG9tIDggYml0cyBhcmUgemVyby4K
KyAgICAgICAgCisgICAgICAgIFNpbmNlIHRoZSBKUyBBUEkgY2FuIG5vdyBncm93IG1lbW9yeSwg
d2UgbmVlZCB0byBtYWtlIGNhbGxpbmcgYW4gaW1wb3J0CisgICAgICAgIGFuZCBjYWxsX2luZGly
ZWN0IHJlZnJlc2ggdGhlIGJhc2UgbWVtb3J5IHJlZ2lzdGVyIGFuZCB0aGUgc2l6ZSByZWdpc3Rl
cnMuCisKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25UZXN0V2FzbU1vZHVs
ZUZ1bmN0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVu
dGltZS9WTS5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdFJlbG9hZFBpbm5lZFJlZ2lzdGVycyk6CisgICAg
ICAgIChKU0M6Oldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VnbWVudDo6Y3JlYXRlKToKKyAg
ICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6STMySW5pdEV4
cHI6OkkzMkluaXRFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6STMySW5pdEV4cHI6Omdsb2Jh
bEltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OkkzMkluaXRFeHByOjpjb25zdFZhbHVlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6STMySW5pdEV4cHI6OmlzQ29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpJMzJJbml0RXhwcjo6aXNHbG9iYWxJbXBvcnQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJMzJJbml0RXhwcjo6Z2xvYmFsSW1wb3J0SW5kZXgpOgorICAgICAgICAoSlNDOjpXYXNtOjpT
ZWdtZW50OjpieXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246Omlt
cG9ydEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bjo6aGFzTWVtb3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAg
ICAgICAqIHdhc20vV2FzbU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6
TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3
YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpzaXplKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpzaXplSW5QYWdlcyk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6
OmlzVmFsaWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Omdyb3cpOiBE
ZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6Oldhc206Om1ha2VJMzJJbml0RXhwcik6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmg6CisgICAgICAgICogd2FzbS9XYXNtUGFnZUNvdW50Lmg6CisgICAgICAgIChKU0M6Oldh
c206OlBhZ2VDb3VudDo6Ynl0ZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYWdlQ291bnQ6OnBh
Z2VDb3VudCk6CisgICAgICAgIChKU0M6Oldhc206OlBhZ2VDb3VudDo6ZnJvbUJ5dGVzKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGFnZUNvdW50OjpvcGVyYXRvcispOgorICAgICAgICAqIHdhc20v
V2FzbVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vzc1R5cGU+Ojpw
YXJzZVZhclVJbnQxKToKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAg
ICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6
fkpTV2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5
Ojpncm93KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkpOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpmdW5jdGlvbkltcG9ydENvdW50KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1vZHVsZTo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Ondhc21FbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6
OmltcG9ydENvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5z
dGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OmdldE1lbW9yeSk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5TWVtb3J5UHJvdG9G
dW5jQnVmZmVyKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNHcm93
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpk
YXRhU2VnbWVudEZhaWwpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vd2FzbS5qc29uOgorCiAyMDE2LTEyLTI2ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFVzZSB2YXJpYWRp
YyB0ZW1wbGF0ZXMgaW4gSlNDIFBhcnNlciB0byBjbGVhbiB1cApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHJldmlzaW9uIDIxMDE4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjU0LDggKzI2NTQsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uPiBtb2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9u
KCk7CiAKICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5KSB7Ci0gICAgICAgIG1l
bW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1hdGlvbi0+
bWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tYXhpbXVtKCkpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnktPmlzVmFsaWQoKSk7CisgICAgICAgIGJvb2wg
ZmFpbGVkOworICAgICAgICBtZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc206Ok1lbW9yeT4o
bW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLT5t
ZW1vcnkubWF4aW11bSgpLCBmYWlsZWQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVk
KTsKICAgICAgICAgbWVtb3J5Qnl0ZXMgPSBtZW1vcnktPm1lbW9yeSgpOwogICAgICAgICBtZW1v
cnlTaXplID0gbWVtb3J5LT5zaXplKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjEwMTgwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTcsNiArNDE3LDcg
QEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB1c2VDb2Rl
Q2FjaGUsIHRydWUsIE5vcm1hbCwgIklmIGZhbHNlLCB0aGUgdW5saW5rZWQgYnl0ZSBjb2RlIGNh
Y2hlIHdpbGwgbm90IGJlIHVzZWQuIikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZVdlYkFzc2Vt
Ymx5LCB0cnVlLCBOb3JtYWwsICJFeHBvc2UgdGhlIFdlYkFzc2VtYmx5IGdsb2JhbCBvYmplY3Qu
IikgXAorICAgIHYoYm9vbCwgc2ltdWxhdGVXZWJBc3NlbWJseUxvd01lbW9yeSwgZmFsc2UsIE5v
cm1hbCwgIklmIHRydWUsIHRoZSBNZW1vcnkgb2JqZWN0IHdvbid0IG1tYXAgdGhlIGZ1bGwgJ21h
eGltdW0nIHJhbmdlIGFuZCBpbnN0ZWFkIHdpbGwgYWxsb2NhdGUgdGhlIG1pbmltdW0gcmVxdWly
ZWQgYW1vdW50LiIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlv
biwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjEwMTgwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAt
MzAyLDcgKzMwMiw3IEBAIHB1YmxpYzoKICAgICBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZTsKICAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKICAgICB2
b2lkKiB0b3BXYXNtTWVtb3J5UG9pbnRlcjsKLSAgICB1aW50MzJfdCB0b3BXYXNtTWVtb3J5U2l6
ZTsKKyAgICB1aW50NjRfdCB0b3BXYXNtTWVtb3J5U2l6ZTsKICAgICBTdHJvbmc8U3RydWN0dXJl
PiBzdHJ1Y3R1cmVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlUmFy
ZURhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdGVybWluYXRlZEV4ZWN1dGlv
bkVycm9yU3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjEwMTgwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzIsNiArMTcyLDggQEAgcHVibGljOgogICAgIC8vIE1lbW9yeQogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkR3Jvd01lbW9yeShFeHByZXNzaW9u
VHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KTsKIAogICAgIC8vIEJhc2ljIG9wZXJhdG9ycwogICAgIHRlbXBsYXRlPE9wVHlwZT4KQEAgLTIw
Myw2ICsyMDUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGVtaXRFeGNlcHRpb25DaGVjayhDQ2Fs
bEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKIAorICAgIHZvaWQgZW1pdFJlbG9hZFBpbm5lZFJl
Z2lzdGVycygpOworCiBwcml2YXRlOgogICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFBy
ZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWlu
dDMyX3Qgc2l6ZU9mT3ApOwogICAgIEV4cHJlc3Npb25UeXBlIGVtaXRMb2FkT3AoTG9hZE9wVHlw
ZSwgT3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOwpAQCAt
MjUwLDcgKzI1NCw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb24K
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghIWluZm8ubWVtb3J5KSB7CisgICAgaWYgKGlu
Zm8uaGFzTWVtb3J5KCkpIHsKICAgICAgICAgbV9tZW1vcnlCYXNlR1BSID0gaW5mby5tZW1vcnku
cGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgICAgIG1fcHJvYy5waW5S
ZWdpc3RlcihtX21lbW9yeUJhc2VHUFIpOwogICAgICAgICBBU1NFUlQoIWluZm8ubWVtb3J5LnBp
bm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CkBAIC0zMzQsNiAr
MzM4LDkyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiAKICAgICBy
ZXR1cm4geyB9OwogfQogCit2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRSZWxvYWRQaW5uZWRSZWdp
c3RlcnMoKQoreworICAgIGlmICghbV9pbmZvLmhhc01lbW9yeSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiogbWVtb3J5ID0gJm1faW5mby5tZW1vcnk7
CisKKyAgICBSZWdpc3RlclNldCBjbG9iYmVyczsKKyAgICBjbG9iYmVycy5zZXQobWVtb3J5LT5w
aW5uZWRSZWdpc3RlcnMoKS5iYXNlTWVtb3J5UG9pbnRlcik7CisgICAgZm9yIChhdXRvIGluZm8g
OiBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpCisgICAgICAgIGNsb2Ji
ZXJzLnNldChpbmZvLnNpemVSZWdpc3Rlcik7CisKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVl
PihtX3Byb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9
IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihjbG9iYmVycyk7CisgICAgcGF0Y2hwb2lu
dC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKworICAgIHBhdGNocG9pbnQtPmFwcGVuZCht
X2luc3RhbmNlVmFsdWUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworCisgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFttZW1vcnldIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICBHUFJSZWcgc2Ny
YXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZNZW1vcnkoKSksIHNjcmF0Y2gpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaCwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnko
KSksIHNjcmF0Y2gpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaCwgTWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgbWVtb3J5LT5waW5uZWRSZWdpc3Rl
cnMoKS5iYXNlTWVtb3J5UG9pbnRlcik7CisKKyAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc2NyYXRjaCwgTWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNjcmF0Y2gpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMo
KS5zaXplUmVnaXN0ZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBHUFJSZWcgc2l6ZVJl
ZyA9IG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1tpXS5zaXplUmVnaXN0
ZXI7CisgICAgICAgICAgICBqaXQubW92ZShzY3JhdGNoLCBzaXplUmVnKTsKKyAgICAgICAgICAg
IGppdC5zdWI2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtZW1vcnktPnBpbm5lZFJlZ2lz
dGVycygpLnNpemVSZWdpc3RlcnNbaV0uc2l6ZU9mZnNldCksIHNpemVSZWcpOworICAgICAgICB9
CisgICAgfSk7Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNz
aW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGludDMyX3QgKCpncm93TWVtb3J5KSAoRXhlY1N0YXRlKiwgaW50MzJfdCkgPSBbXSAo
RXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsgCisgICAgICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gdm0u
dG9wSlNXZWJBc3NlbWJseUluc3RhbmNlOworICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiB3
YXNtTWVtb3J5ID0gaW5zdGFuY2UtPm1lbW9yeSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh3
YXNtTWVtb3J5KTsgLy8gVGhpcyB3b3VsZCBmYWlsIHZhbGlkYXRpb24gb3RoZXJ3aXNlLgorCisg
ICAgICAgIGlmIChkZWx0YSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAg
Ym9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSBmYWxzZTsKKyAgICAgICAgUGFn
ZUNvdW50IHJlc3VsdCA9IHdhc21NZW1vcnktPmdyb3coZXhlYywgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGRlbHRhKSwgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgdm0udG9wV2FzbU1lbW9yeVBvaW50ZXIg
PSB3YXNtTWVtb3J5LT5tZW1vcnkoKS0+bWVtb3J5KCk7CisgICAgICAgIHZtLnRvcFdhc21NZW1v
cnlTaXplID0gd2FzbU1lbW9yeS0+bWVtb3J5KCktPnNpemUoKTsKKworICAgICAgICByZXR1cm4g
cmVzdWx0LnBhZ2VDb3VudCgpOworICAgIH07CisKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigpLAorICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2lu
KCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ3Jvd01lbW9yeSkpLAorICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBPcmln
aW4oKSksIGRlbHRhKTsKKworICAgIGVtaXRSZWxvYWRQaW5uZWRSZWdpc3RlcnMoKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVmFsdWUqIHNp
emUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IEludDY0LCBPcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAmbV92bS50b3BXYXNtTWVtb3J5U2l6ZSkpOwor
CisgICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKKyAgICBzdGF0aWNfYXNz
ZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMSA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhv
bGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CisgICAgVmFsdWUqIG51bVBh
Z2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBPcmln
aW4oKSwKKyAgICAgICAgc2l6ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KG1fcHJvYywgT3JpZ2luKCksIHNoaWZ0VmFsdWUpKTsKKworICAgIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIE9yaWdpbigpLCBudW1Q
YWdlcyk7CisKKyAgICByZXR1cm4geyB9OworfQorCiBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldExv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlc3Vs
dAogewogICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0pOwpAQCAtNzU1LDYgKzg0NSwxMCBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuCiAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CisKKyAgICBpZiAoZnVuY3Rpb25JbmRl
eCA8IG1faW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCisgICAgICAgIGVtaXRSZWxvYWRQaW5u
ZWRSZWdpc3RlcnMoKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTgzMSw2ICs5MjUsOCBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAgICAgICAgICB9
KTsKICAgICAgICAgfSk7CiAKKyAgICBlbWl0UmVsb2FkUGlubmVkUmVnaXN0ZXJzKCk7CisKICAg
ICByZXR1cm4geyB9OwogfQogCkBAIC05MDQsMTIgKzEwMDAsMTIgQEAgc3RhdGljIHZvaWQgY3Jl
YXRlSlNUb1dhc21XcmFwcGVyKFZNJiB2bQogICAgIGlmICghIW1lbW9yeSkgewogICAgICAgICBi
YXNlTWVtb3J5ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50
NjQsIE9yaWdpbigpLAogICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgJnZtLnRvcFdhc21NZW1vcnlQb2ludGVyKSk7Ci0gICAgICAgIFZh
bHVlKiBzaXplID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50
MzIsIE9yaWdpbigpLAorICAgICAgICBWYWx1ZSogc2l6ZSA9IGJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwKICAgICAgICAgICAgIGJsb2Nr
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ2bS50b3BXYXNtTWVt
b3J5U2l6ZSkpOwogICAgICAgICBzaXplcy5yZXNlcnZlQ2FwYWNpdHkobWVtb3J5LnBpbm5lZFJl
Z2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvIGluZm8g
OiBtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycykgewogICAgICAgICAgICAg
c2l6ZXMuYXBwZW5kKGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1Yiwgb3JpZ2luLCBz
aXplLAotICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBvcmlnaW4sIGluZm8uc2l6ZU9mZnNldCkpKTsKKyAgICAgICAgICAgICAgICBibG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCBpbmZvLnNpemVPZmZzZXQpKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuY3BwCShyZXZpc2lvbiAyMTAxODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1TZWdtZW50KiBTZWdtZW50OjpjcmVhdGUo
dWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplSW5CeXRlcykKK1NlZ21lbnQqIFNlZ21lbnQ6
OmNyZWF0ZShJMzJJbml0RXhwciBvZmZzZXQsIHVpbnQzMl90IHNpemVJbkJ5dGVzKQogewogICAg
IGF1dG8gYWxsb2NhdGVkID0gdHJ5RmFzdENhbGxvYyhzaXplb2YoU2VnbWVudCkgKyBzaXplSW5C
eXRlcywgMSk7CiAgICAgU2VnbWVudCogc2VnbWVudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRm9ybWF0LmgJKHJldmlzaW9uIDIxMDE4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDE2ICsxMzgs
NTEgQEAgc3RydWN0IEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeSB7CiAgICAgc2l6ZV90IGVuZDsK
IH07CiAKK2NsYXNzIEkzMkluaXRFeHByIHsKKyAgICBlbnVtIFR5cGUgOiB1aW50OF90IHsKKyAg
ICAgICAgR2xvYmFsLAorICAgICAgICBDb25zdAorICAgIH07CisKKyAgICBJMzJJbml0RXhwcihU
eXBlIHR5cGUsIHVpbnQzMl90IGJpdHMpCisgICAgICAgIDogbV9iaXRzKGJpdHMpCisgICAgICAg
ICwgbV90eXBlKHR5cGUpCisgICAgeyB9CisKK3B1YmxpYzoKKyAgICBJMzJJbml0RXhwcigpID0g
ZGVsZXRlOworCisgICAgc3RhdGljIEkzMkluaXRFeHByIGdsb2JhbEltcG9ydCh1aW50MzJfdCBn
bG9iYWxJbXBvcnROdW1iZXIpIHsgcmV0dXJuIEkzMkluaXRFeHByKEdsb2JhbCwgZ2xvYmFsSW1w
b3J0TnVtYmVyKTsgfQorICAgIHN0YXRpYyBJMzJJbml0RXhwciBjb25zdFZhbHVlKHVpbnQzMl90
IGNvbnN0VmFsdWUpIHsgcmV0dXJuIEkzMkluaXRFeHByKENvbnN0LCBjb25zdFZhbHVlKTsgfQor
CisgICAgYm9vbCBpc0NvbnN0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IENvbnN0OyB9Cisg
ICAgYm9vbCBpc0dsb2JhbEltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBHbG9iYWw7
IH0KKyAgICB1aW50MzJfdCBjb25zdFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzQ29uc3QoKSk7CisgICAgICAgIHJldHVybiBtX2JpdHM7CisgICAgfQorICAg
IHVpbnQzMl90IGdsb2JhbEltcG9ydEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzR2xvYmFsSW1wb3J0KCkpOworICAgICAgICByZXR1cm4gbV9iaXRzOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2JpdHM7CisgICAgVHlwZSBtX3R5cGU7Cit9
OworCiBzdHJ1Y3QgU2VnbWVudCB7Ci0gICAgdWludDMyX3Qgb2Zmc2V0OwogICAgIHVpbnQzMl90
IHNpemVJbkJ5dGVzOworICAgIEkzMkluaXRFeHByIG9mZnNldDsKICAgICAvLyBCeXRlcyBhcmUg
YWxsb2NhdGVkIGF0IHRoZSBlbmQuCiAgICAgdWludDhfdCYgYnl0ZSh1aW50MzJfdCBwb3MpCiAg
ICAgewogICAgICAgICBBU1NFUlQocG9zIDwgc2l6ZUluQnl0ZXMpOwotICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp
ICsgc2l6ZW9mKG9mZnNldCkgKyBzaXplb2Yoc2l6ZUluQnl0ZXMpICsgcG9zKTsKKyAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihyZWludGVycHJldF9jYXN0PGNoYXIq
Pih0aGlzKSArIHNpemVvZihTZWdtZW50KSArIHBvcyk7CiAgICAgfQotICAgIHN0YXRpYyBTZWdt
ZW50KiBjcmVhdGUodWludDMyX3QsIHVpbnQzMl90KTsKKyAgICBzdGF0aWMgU2VnbWVudCogY3Jl
YXRlKEkzMkluaXRFeHByLCB1aW50MzJfdCk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShTZWdt
ZW50Kik7CiAgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9wdHI8U2VnbWVudCwgZGVjbHR5cGUoJlNl
Z21lbnQ6OmRlc3Ryb3kpPiBQdHI7CiAgICAgc3RhdGljIFB0ciBhZG9wdFB0cihTZWdtZW50Kik7
CkBAIC0xOTEsNyArMjI2LDkgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICBWZWN0
b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJu
YWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CisKICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1v
cnk7CisKICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFZlY3RvcjxTZWdtZW50OjpQdHI+
IGRhdGE7CkBAIC0yMDAsNiArMjM3LDkgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAg
ICBWZWN0b3I8R2xvYmFsPiBnbG9iYWxzOwogICAgIHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9i
YWwgeyAwIH07CiAKKyAgICB1aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQorICAgIGJvb2wg
aGFzTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gISFtZW1vcnk7IH0KKwogICAgIH5Nb2R1bGVJbmZv
cm1hdGlvbigpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uUGFyc2VyLmgJKHJldmlzaW9uIDIxMDE4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nzgs
MTIgKzQ3OCwzNiBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgY2FzZSBHcm93TWVtb3J5OgotICAgICAg
ICByZXR1cm4gZmFpbCgibm90IHlldCBpbXBsZW1lbnRlZDogZ3Jvd19tZW1vcnkiKTsgLy8gRklY
TUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgICAgY2FzZSBHcm93TWVtb3J5OiB7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby5tZW1vcnksICJncm93X21lbW9yeSBpcyBvbmx5
IHZhbGlkIGlmIGEgbWVtb3J5IGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQiKTsKKworICAgICAgICB1
aW50OF90IHJlc2VydmVkOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKHJlc2VydmVkKSwgImNhbid0IHBhcnNlIHJlc2VydmVkIHZhclVpbnQxIGZvciBncm93X21l
bW9yeSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHJlc2VydmVkICE9IDAsICJyZXNl
cnZlZCB2YXJVaW50MSBmb3IgZ3Jvd19tZW1vcnkgbXVzdCBiZSB6ZXJvIik7CisKKyAgICAgICAg
RXhwcmVzc2lvblR5cGUgZGVsdGE7CisgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NU
QUNLX0lOVE8oZGVsdGEsICJleHBlY3QgYW4gaTMyIGFyZ3VtZW50IHRvIGdyb3dfbWVtb3J5IG9u
IHRoZSBzdGFjayIpOworCisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKKyAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkR3Jvd01lbW9yeShkZWx0YSwgcmVzdWx0KSk7Cisg
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworCisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorCisgICAgY2FzZSBDdXJyZW50TWVtb3J5OiB7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIW1faW5mby5tZW1vcnksICJjdXJyZW50X21lbW9yeSBpcyBvbmx5IHZh
bGlkIGlmIGEgbWVtb3J5IGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQiKTsKIAotICAgIGNhc2UgQ3Vy
cmVudE1lbW9yeToKLSAgICAgICAgcmV0dXJuIGZhaWwoIm5vdCB5ZXQgaW1wbGVtZW50ZWQ6IGN1
cnJlbnRfbWVtb3J5Iik7IC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkLgorICAgICAgICB1
aW50OF90IHJlc2VydmVkOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKHJlc2VydmVkKSwgImNhbid0IHBhcnNlIHJlc2VydmVkIHZhclVpbnQxIGZvciBjdXJyZW50
X21lbW9yeSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHJlc2VydmVkICE9IDAsICJy
ZXNlcnZlZCB2YXJVaW50MSBmb3IgY3VycmVudF9tZW1vcnkgbXVzdCBiZSB6ZXJvIik7CisKKyAg
ICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09O
VEVYVChhZGRDdXJyZW50TWVtb3J5KHJlc3VsdCkpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5hcHBlbmQocmVzdWx0KTsKIAorICAgICAgICByZXR1cm4geyB9OworICAgIH0KICAgICB9CiAK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU4NCw2ICs2MDgsMTMgQEAgYXV0byBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYQogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAorICAgIGNhc2UgR3Jvd01lbW9yeToKKyAgICBjYXNlIEN1cnJlbnRNZW1vcnk6IHsKKyAg
ICAgICAgdWludDhfdCByZXNlcnZlZDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MShyZXNlcnZlZCksICJjYW4ndCBwYXJzZSByZXNlcnZlZCB2YXJVaW50MSBmb3Ig
Z3Jvd19tZW1vcnkvY3VycmVudF9tZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKICAgICAvLyBubyBpbW1lZGlhdGUgY2FzZXMKICAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9P
UChDUkVBVEVfQ0FTRSkKICAgICBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKENSRUFURV9DQVNFKQpA
QCAtNTkxLDkgKzYyMiw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5y
ZWEKICAgICBjYXNlIE5vcDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFNlbGVjdDoKLSAg
ICBjYXNlIERyb3A6Ci0gICAgY2FzZSBHcm93TWVtb3J5OgotICAgIGNhc2UgQ3VycmVudE1lbW9y
eTogeworICAgIGNhc2UgRHJvcDogewogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkocmV2aXNp
b24gMjEwMTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDM1ICszMCw4NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi1NZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNv
dW50IG1heGltdW0pCitzdGF0aWNfYXNzZXJ0KHNpemVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKHNp
emVfdCksICJXZSByZWx5IG9uIGFsbG93aW5nIHRoZSBtYXhpbXVtIHNpemUgb2YgTWVtb3J5IHdl
IG1hcCB0byBiZSAyXjMyIHdoaWNoIGlzIGxhcmdlciB0aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50
ZWdlciB0aGF0IHdlJ2QgcGFzcyB0byBtcHJvdGVjdCBpZiB0aGlzIGRpZG4ndCBob2xkLiIpOwor
CitNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIGJv
b2wmIGZhaWxlZCkKICAgICA6IG1fbW9kZShNb2RlOjpCb3VuZHNDaGVja2luZykKLSAgICAsIG1f
c2l6ZShpbml0aWFsLmJ5dGVzKCkpCi0gICAgLCBtX2NhcGFjaXR5KG1heGltdW0gPyBtYXhpbXVt
LmJ5dGVzKCkgOiBQYWdlQ291bnQ6Om1heCgpLmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwoaW5p
dGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQorICAgICwgbV9zaXplKGluaXRpYWwuYnl0
ZXMoKSkKICAgICAvLyBGSVhNRTogSWYgd2UgYWRkIHNpZ25hbCBiYXNlZCBib3VuZHMgY2hlY2tp
bmcgdGhlbiB3ZSBuZWVkIGV4dHJhIHNwYWNlIGZvciBvdmVyZmxvdyBvbiBsb2FkLgogICAgIC8v
IHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5Mwogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRo
aXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KIAotICAgIG1fbWFwcGVkQ2Fw
YWNpdHkgPSBtX2NhcGFjaXR5OworICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtYXhpbXVtID8gbWF4
aW11bS5ieXRlcygpIDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpOworICAgIGlmICghbV9tYXBw
ZWRDYXBhY2l0eSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIHNwZWNpZmllZCBhIHplcm8g
YXMgbWF4aW11bSAod2hpY2ggbWVhbnMgd2UgYWxzbyBoYXZlIHplcm8gYXMgaW5pdGlhbCBzaXpl
KS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zaXplID09IDApOworICAgICAgICBtX21hcHBl
ZENhcGFjaXR5ID0gMDsKKyAgICAgICAgbV9tZW1vcnkgPSBudWxscHRyOworICAgICAgICBmYWls
ZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIEZJWE1FOiBJdCB3
b3VsZCBiZSBuaWNlIGlmIHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKLSAgICB2b2lkKiByZXN1bHQg
PSBtbWFwKG51bGxwdHIsIG1fbWFwcGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUg
fCBNQVBfQU5PTiwgLTEsIDApOworICAgIHZvaWQqIHJlc3VsdCA9IE9wdGlvbnM6OnNpbXVsYXRl
V2ViQXNzZW1ibHlMb3dNZW1vcnkoKSA/IE1BUF9GQUlMRUQgOiBtbWFwKG51bGxwdHIsIG1fbWFw
cGVkQ2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwog
ICAgIGlmIChyZXN1bHQgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICAvLyBUcnkgYWdhaW4gd2l0
aCBhIGRpZmZlcmVudCBudW1iZXIuCiAgICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBtX3NpemU7
CisgICAgICAgIGlmICghbV9tYXBwZWRDYXBhY2l0eSkgeworICAgICAgICAgICAgbV9tZW1vcnkg
PSBudWxscHRyOworICAgICAgICAgICAgZmFpbGVkID0gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKwogICAgICAgICByZXN1bHQgPSBtbWFwKG51bGxwdHIsIG1fbWFwcGVk
Q2FwYWNpdHksIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwotICAg
ICAgICBpZiAocmVzdWx0ID09IE1BUF9GQUlMRUQpCisgICAgICAgIGlmIChyZXN1bHQgPT0gTUFQ
X0ZBSUxFRCkgeworICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEFTU0VSVChtX3NpemUgPD0gbV9tYXBwZWRDYXBh
Y2l0eSk7Ci0gICAgaWYgKG1wcm90ZWN0KHJlc3VsdCwgbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9U
X1dSSVRFKSkgewotICAgICAgICBtdW5tYXAocmVzdWx0LCBtX21hcHBlZENhcGFjaXR5KTsKLSAg
ICAgICAgcmV0dXJuOworICAgIHsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gIW1wcm90ZWN0KHJl
c3VsdCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzcyk7CiAgICAgfQogCiAgICAgbV9tZW1v
cnkgPSByZXN1bHQ7CisgICAgZmFpbGVkID0gZmFsc2U7Cit9CisKK2Jvb2wgTWVtb3J5Ojpncm93
KFBhZ2VDb3VudCBuZXdTaXplKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG5ld1NpemUgPiBQYWdl
Q291bnQ6OmZyb21CeXRlcyhtX3NpemUpKTsKKworICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6
ZSA+IG1heGltdW0oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWludDY0X3QgZGVz
aXJlZFNpemUgPSBuZXdTaXplLmJ5dGVzKCk7CisKKyAgICBpZiAobV9tZW1vcnkgJiYgZGVzaXJl
ZFNpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSkgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSAhbXBy
b3RlY3Qoc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6ZSwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihkZXNpcmVkU2l6ZSAtIG1fc2l6ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChzdWNjZXNzKTsKKyAgICAgICAgbV9zaXplID0gZGVz
aXJlZFNpemU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIE90aGVyd2lz
ZSwgbGV0J3MgdHJ5IHRvIG1ha2Ugc29tZSBuZXcgbWVtb3J5LgorICAgIHZvaWQqIG5ld01lbW9y
eSA9IG1tYXAobnVsbHB0ciwgZGVzaXJlZFNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1B
UF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgICBpZiAobmV3TWVtb3J5ID09IE1BUF9G
QUlMRUQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX21lbW9yeSkgeworICAg
ICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwgbV9zaXplKTsKKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gIW11bm1hcChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN1Y2Nlc3MpOworICAgIH0KKyAgICBtX21lbW9yeSA9IG5ld01lbW9yeTsK
KyAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CisgICAgbV9zaXplID0gZGVzaXJl
ZFNpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCShyZXZpc2lvbiAyMTAxODAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgICAgICBCb3VuZHNDaGVja2luZwogICAg
IH07CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBh
Z2VDb3VudCBtYXhpbXVtKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnkoUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBib29sJiBmYWlsZWQpOwogCiAgICAgfk1lbW9y
eSgpCiAgICAgewpAQCAtNTIsMzUgKzUyLDI2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG11bm1h
cChtX21lbW9yeSwgbV9tYXBwZWRDYXBhY2l0eSk7CiAgICAgfQogCi0gICAgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9yeTsgfQotCiAgICAgdm9pZCogbWVtb3J5KCkgY29u
c3QgeyByZXR1cm4gbV9tZW1vcnk7IH0KLSAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CisgICAgdWludDY0X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQorICAgIFBhZ2VDb3VudCBzaXplSW5QYWdlcygpIGNvbnN0IHsgcmV0dXJuIFBhZ2VDb3VudDo6
ZnJvbUJ5dGVzKG1fc2l6ZSk7IH0KIAogICAgIE1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZTsgfQogCiAgICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRp
YWw7IH0KICAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsg
fQogCi0gICAgYm9vbCBncm93KHVpbnQzMl90IG5ld1NpemUpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9tZW1vcnkpOwotICAgICAgICBpZiAobmV3U2l6ZSA+IG1fY2FwYWNpdHkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuICFtcHJvdGVjdChtX21lbW9yeSwg
bmV3U2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0gICAgfQorICAgIGJvb2wgZ3JvdyhQ
YWdlQ291bnQpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX3NpemUpOyB9Ci0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9yeSwgbV9t
ZW1vcnkpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9
OwogICAgIE1vZGUgbV9tb2RlOwotICAgIHVpbnQzMl90IG1fc2l6ZSB7IDAgfTsKLSAgICB1aW50
MzJfdCBtX2NhcGFjaXR5IHsgMCB9OwogICAgIFBhZ2VDb3VudCBtX2luaXRpYWw7CiAgICAgUGFn
ZUNvdW50IG1fbWF4aW11bTsKKyAgICB1aW50NjRfdCBtX3NpemUgeyAwIH07CiAgICAgdWludDY0
X3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMTAxODApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNiArMzksMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKIAorQUxXQVlTX0lOTElORSBJMzJJbml0RXhwciBtYWtlSTMySW5pdEV4cHIodWludDhf
dCBvcGNvZGUsIHVpbnQzMl90IGJpdHMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQob3Bjb2RlID09
IEkzMkNvbnN0IHx8IG9wY29kZSA9PSBHZXRHbG9iYWwpOworICAgIGlmIChvcGNvZGUgPT0gSTMy
Q29uc3QpCisgICAgICAgIHJldHVybiBJMzJJbml0RXhwcjo6Y29uc3RWYWx1ZShiaXRzKTsKKyAg
ICByZXR1cm4gSTMySW5pdEV4cHI6Omdsb2JhbEltcG9ydChiaXRzKTsKK30KKwogYXV0byBNb2R1
bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiB7CiAgICAgbV9yZXN1bHQubW9kdWxlID0gc3Rk
OjptYWtlX3VuaXF1ZTxNb2R1bGVJbmZvcm1hdGlvbj4oKTsKQEAgLTI4OSw3ICsyOTcsNyBAQCBh
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgpIC0+IFBhcnRpCiAKIGF1dG8gTW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSwgIk1lbW9y
eSBzZWN0aW9uIGNhbm5vdCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgbWVtb3J5Iik7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighIW1fcmVzdWx0Lm1vZHVsZS0+bWVtb3J5LCAiTWVtb3J5IHNl
Y3Rpb24gY2Fubm90IGV4aXN0IGlmIGFuIEltcG9ydCBoYXMgYSBtZW1vcnkiKTsKIAogICAgIFBh
Z2VDb3VudCBpbml0aWFsUGFnZUNvdW50OwogICAgIFBhZ2VDb3VudCBtYXhpbXVtUGFnZUNvdW50
OwpAQCAtMzQyLDMyICszNTAsMTIgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkg
LT4gUGFydAogICAgICAgICB1aW50OF90IGluaXRPcGNvZGU7CiAKICAgICAgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhwYXJzZUdsb2JhbFR5cGUoZ2xvYmFsKSk7Ci0gICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBnbG9iYWwuaW5p
dGlhbEJpdHNPckltcG9ydE51bWJlcikpOwotCi0gICAgICAgIGdsb2JhbC5pbml0aWFsaXphdGlv
blR5cGUgPSBHbG9iYWw6OkZyb21FeHByZXNzaW9uOwogICAgICAgICBUeXBlIHR5cGVGb3JJbml0
T3Bjb2RlOwotICAgICAgICBzd2l0Y2ggKGluaXRPcGNvZGUpIHsKLSAgICAgICAgY2FzZSBJMzJD
b25zdDoKLSAgICAgICAgICAgIHR5cGVGb3JJbml0T3Bjb2RlID0gSTMyOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSTY0Q29uc3Q6Ci0gICAgICAgICAgICB0eXBlRm9ySW5pdE9w
Y29kZSA9IEk2NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEYzMkNvbnN0Ogot
ICAgICAgICAgICAgdHlwZUZvckluaXRPcGNvZGUgPSBGMzI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBGNjRDb25zdDoKLSAgICAgICAgICAgIHR5cGVGb3JJbml0T3Bjb2RlID0g
RjY0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0R2xvYmFsOgotICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJl
ciA+PSBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwsIGdsb2JhbEluZGV4LCAi
dGggR2xvYmFsIHVzZXMgZ2V0X2dsb2JhbCAiLCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51
bWJlciwgIiB3aGljaCBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBnbG9iYWwgIiwgbV9yZXN1
bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsKTsKLSAgICAgICAgICAgIHR5cGVGb3JJbml0
T3Bjb2RlID0gbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzW2dsb2JhbC5pbml0aWFsQml0c09ySW1w
b3J0TnVtYmVyXS50eXBlOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNl
SW5pdEV4cHIoaW5pdE9wY29kZSwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIsIHR5
cGVGb3JJbml0T3Bjb2RlKSk7CisgICAgICAgIGlmIChpbml0T3Bjb2RlID09IEdldEdsb2JhbCkK
ICAgICAgICAgICAgIGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPSBHbG9iYWw6OkZyb21HbG9i
YWxJbXBvcnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBl
bHNlCisgICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9t
RXhwcmVzc2lvbjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlRm9ySW5pdE9wY29k
ZSAhPSBnbG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9mIHR5cGUgIiwgdHlw
ZUZvckluaXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0eXBlICIsIGdsb2JhbC50
eXBlKTsKIAogICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHMudW5jaGVja2VkQXBwZW5k
KFdURk1vdmUoZ2xvYmFsKSk7CkBAIC00NTEsNyArNDM5LDggQEAgYXV0byBNb2R1bGVQYXJzZXI6
OnBhcnNlRWxlbWVudCgpIC0+IFBhcgogCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBF
bGVtZW50IHRhYmxlIGluZGV4Iik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFibGVJ
bmRleCwgIkVsZW1lbnQgc2VjdGlvbiBjYW4gb25seSBoYXZlIG9uZSBUYWJsZSBmb3Igbm93Iik7
Ci0gICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bj
b2RlLCBvZmZzZXQpKTsKKyAgICAgICAgVHlwZSBpbml0RXhwclR5cGU7CisgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBvZmZzZXQsIGlu
aXRFeHByVHlwZSkpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRPcGNvZGUgIT0g
T3BUeXBlOjpJMzJDb25zdCwgIkVsZW1lbnQgc2VjdGlvbiBkb2Vzbid0IHN1cHBvcnQgbm9uLWkz
MiBpbml0X2V4cHIgb3Bjb2RlIGZvciBub3csIGdvdCAiLCBpbml0T3Bjb2RlKTsKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCksICJjYW4ndCBn
ZXQgIiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGZvciBFbGVtZW50IHNlY3Rpb24iKTsK
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleENvdW50ID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0s
ICJ0aCBpbmRleCBjb3VudCBpcyB0b28gYmlnICIsIGluZGV4Q291bnQpOwpAQCAtNTA5LDcgKzQ5
OCw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUoKSAtPiBQYXJ0aWEKICAgICByZXR1
cm4geyB9OwogfQogCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90JiBv
cGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJbXBvcnROdW1iZXIpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QmIG9wY29kZSwgdWludDY0X3Qm
IGJpdHNPckltcG9ydE51bWJlciwgVHlwZSYgcmVzdWx0VHlwZSkgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgob3Bjb2RlKSwgImNhbid0IGdl
dCBpbml0X2V4cHIncyBvcGNvZGUiKTsKIApAQCAtNTE4LDYgKzUwNyw3IEBAIGF1dG8gTW9kdWxl
UGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QKICAgICAgICAgaW50MzJfdCBjb25zdGFudDsK
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQzMihjb25zdGFudCksICJj
YW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGkzMi5jb25zdCIpOwogICAg
ICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oY29uc3RhbnQp
OworICAgICAgICByZXN1bHRUeXBlID0gSTMyOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTUyNSw2ICs1MTUsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90
CiAgICAgICAgIGludDY0X3QgY29uc3RhbnQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFySW50NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBp
bml0X2V4cHIncyBpNjQuY29uc3QiKTsKICAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29u
c3RhbnQ7CisgICAgICAgIHJlc3VsdFR5cGUgPSBJNjQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IApAQCAtNTMyLDYgKzUyMyw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVp
bnQ4X3QKICAgICAgICAgdWludDMyX3QgY29uc3RhbnQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVUludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBm
b3IgaW5pdF9leHByJ3MgZjMyLmNvbnN0Iik7CiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9
IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBlID0gRjMyOwogICAgICAgICBicmVhazsKICAg
ICB9CiAKQEAgLTUzOSw2ICs1MzEsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhw
cih1aW50OF90CiAgICAgICAgIHVpbnQ2NF90IGNvbnN0YW50OwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQ2NChjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFs
dWUgZm9yIGluaXRfZXhwcidzIGY2NC5jb25zdCIpOwogICAgICAgICBiaXRzT3JJbXBvcnROdW1i
ZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9IEY2NDsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC01NTEsNyArNTQ0LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5p
dEV4cHIodWludDhfdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGltcG9ydC5raW5kSW5k
ZXggPj0gbV9yZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBp
bXBvcnQga2luZCBpbmRleCAiLCBpbXBvcnQua2luZEluZGV4LCAiIGV4Y2VlZHMgdGhlIGZpcnN0
IGludGVybmFsIGdsb2JhbCAiLCBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwp
OwogCiAgICAgICAgIEFTU0VSVChtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHNbaW1wb3J0LmtpbmRJ
bmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSk7Ci0KKyAgICAgICAgcmVzdWx0
VHlwZSA9IG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFsc1tpbmRleF0udHlwZTsKICAgICAgICAgYml0
c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU4Niwx
OCArNTc5LDE5IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZURhdGEoKSAtPiBQYXJ0aWEKIAog
ICAgIGZvciAodWludDMyX3Qgc2VnbWVudE51bWJlciA9IDA7IHNlZ21lbnROdW1iZXIgPCBzZWdt
ZW50Q291bnQ7ICsrc2VnbWVudE51bWJlcikgewogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAg
ICAgICAgdWludDY0X3Qgb2Zmc2V0OworICAgICAgICB1aW50NjRfdCBpbml0RXhwckJpdHM7CiAg
ICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKICAgICAgICAgdWludDMyX3QgZGF0YUJ5dGVMZW5n
dGg7CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgp
LCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBpbmRleCIp
OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4LCBzZWdtZW50TnVtYmVyLCAidGgg
RGF0YSBzZWdtZW50IGhhcyBub24temVybyBpbmRleCAiLCBpbmRleCk7Ci0gICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBvZmZzZXQpKTsK
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0T3Bjb2RlICE9IE9wVHlwZTo6STMyQ29u
c3QsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgaGFzIG9wY29kZSAiLCBpbml0T3Bj
b2RlLCAiIGV4cGVjdGVkIGkzMi5jb25zdCIpOworICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsK
KyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNv
ZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJUeXBlKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVu
dCdzIGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7CiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNhbid0IGdldCAiLCBz
ZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxlbmd0aCIpOwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFCeXRlTGVuZ3RoID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdz
IGRhdGEgYnl0ZSBsZW5ndGggaXMgdG9vIGJpZyAiLCBkYXRhQnl0ZUxlbmd0aCk7CiAKLSAgICAg
ICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6OmNyZWF0ZShvZmZzZXQsIGRhdGFCeXRlTGVu
Z3RoKTsKKyAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6OmNyZWF0ZShtYWtlSTMy
SW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSwgZGF0YUJ5dGVMZW5ndGgpOwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWdtZW50LCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBvZiBzaXplICIs
IGRhdGFCeXRlTGVuZ3RoKTsKICAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5kYXRhLnVuY2hlY2tl
ZEFwcGVuZChTZWdtZW50OjphZG9wdFB0cihzZWdtZW50KSk7CiAgICAgICAgIGZvciAodWludDMy
X3QgZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFCeXRlKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5o
CShyZXZpc2lvbiAyMTAxODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHJpdmF0ZToKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeUhlbHBlcihib29s
IGlzSW1wb3J0KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVRh
YmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlUmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiYgbWF4aW11bSk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gcGFyc2VJbml0RXhwcih1aW50OF90JiwgdWludDY0X3QmKTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYs
IFR5cGUmIGluaXRFeHByVHlwZSk7CiAKICAgICBNb2R1bGVQYXJzZXJSZXN1bHQgbV9yZXN1bHQ7
CiAgICAgYm9vbCBtX2hhc1RhYmxlIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgJKHJldmlzaW9uIDIxMDE4MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTMgKzQyLDIyIEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3BhZ2VDb3VudChwYWdlQ291bnQpCiAg
ICAgeyB9CiAKLSAgICBzaXplX3QgYnl0ZXMoKSB7IHJldHVybiBtX3BhZ2VDb3VudCAqIHBhZ2VT
aXplOyB9CisgICAgdWludDY0X3QgYnl0ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDx1
aW50NjRfdD4obV9wYWdlQ291bnQpICogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHBhZ2VTaXplKTsg
fQorICAgIHVpbnQzMl90IHBhZ2VDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50OyB9
CiAKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkKHVpbnQzMl90IHBhZ2VDb3VudCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBwYWdlQ291bnQgPD0gbWF4UGFnZUNvdW50OwogICAgIH0KIAorICAgIHN0
YXRpYyBQYWdlQ291bnQgZnJvbUJ5dGVzKHVpbnQ2NF90IGJ5dGVzKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYnl0ZXMgJSBwYWdlU2l6ZSA9PSAwKTsKKyAgICAgICAgdWludDMyX3Qg
bnVtUGFnZXMgPSBieXRlcyAvIHBhZ2VTaXplOworICAgICAgICBSRUxFQVNFX0FTU0VSVChQYWdl
Q291bnQ6OmlzVmFsaWQobnVtUGFnZXMpKTsKKyAgICAgICAgcmV0dXJuIFBhZ2VDb3VudChudW1Q
YWdlcyk7CisgICAgfQorCiAgICAgc3RhdGljIFBhZ2VDb3VudCBtYXgoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIFBhZ2VDb3VudChtYXhQYWdlQ291bnQpOwpAQCAtNjIsOSArNzEsMTggQEAgcHVi
bGljOgogICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBhZ2VDb3VudCYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIG1fcGFnZUNvdW50IDwgb3RoZXIubV9wYWdlQ291bnQ7IH0KICAgICBib29sIG9wZXJh
dG9yPihjb25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3BhZ2VDb3VudCA+
IG90aGVyLm1fcGFnZUNvdW50OyB9CiAgICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFBhZ2VDb3Vu
dCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50ID49IG90aGVyLm1fcGFnZUNvdW50
OyB9CisgICAgUGFnZUNvdW50IG9wZXJhdG9yKyhjb25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKHN1bU92ZXJmbG93czx1aW50MzJfdD4obV9wYWdlQ291bnQs
IG90aGVyLm1fcGFnZUNvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBQYWdlQ291bnQoKTsKKyAg
ICAgICAgdWludDMyX3QgbmV3Q291bnQgPSBtX3BhZ2VDb3VudCArIG90aGVyLm1fcGFnZUNvdW50
OworICAgICAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZChuZXdDb3VudCkpCisgICAgICAgICAg
ICByZXR1cm4gUGFnZUNvdW50KCk7CisgICAgICAgIHJldHVybiBQYWdlQ291bnQobmV3Q291bnQp
OworICAgIH0KIAotcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IHBhZ2VT
aXplID0gNjQgKiBLQjsKK3ByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBt
YXhQYWdlQ291bnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oKDF1bGwgPDwgMzIpIC8gcGFnZVNp
emUpOwogCiAgICAgdWludDMyX3QgbV9wYWdlQ291bnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBhcnNlci5oCShyZXZpc2lvbiAyMTAxODApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw4ICsyMzUs
MTAgQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OgogICAgIHVpbnQz
Ml90IHRlbXA7CiAgICAgaWYgKCFwYXJzZVZhclVJbnQzMih0ZW1wKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICh0ZW1wID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
c3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRlbXApOwotICAgIHJldHVybiB0ZW1wIDw9IDE7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCShyZXZp
c2lvbiAyMTAxODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDggQEAgcHVibGljOgogICAgIFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
Y29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0
VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKICAgICBSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25M
aXN0JiBleHByZXNzaW9uU3RhY2spOwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ3VycmVudE1lbW9y
eShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkVW5yZWFjaGFibGUoKSB7IHJldHVybiB7IH07IH0KIApAQCAtMjkyLDYgKzI5NCwxOSBA
QCBhdXRvIFZhbGlkYXRlOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgCiAgICAgcmV0dXJuIGNo
ZWNrQnJhbmNoVGFyZ2V0KGRlZmF1bHRUYXJnZXQsIGV4cHJlc3Npb25TdGFjayk7CiB9CiAKK2F1
dG8gVmFsaWRhdGU6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAoreworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
ZGVsdGEgIT0gSTMyLCAiZ3Jvd19tZW1vcnkgd2l0aCBub24taTMyIGRlbHRhIik7CisgICAgcmVz
dWx0ID0gSTMyOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gVmFsaWRhdGU6OmFkZEN1cnJl
bnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gSTMyOworICAgIHJldHVybiB7IH07Cit9CisKIGF1dG8gVmFsaWRhdGU6OmVuZEJsb2NrKENv
bnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBzdGFjaykgLT4gUmVzdWx0CiB7CiAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShzdGFjaywgZW50cnkuY29udHJvbERh
dGEpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24JKHJldmlzaW9uIDIx
MDE4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgkod29ya2luZyBj
b3B5KQpAQCAtODgsOCArODgsOCBAQAogICAgICAgICAiaTY0LnN0b3JlIjogICAgICAgICAgIHsg
ImNhdGVnb3J5IjogIm1lbW9yeSIsICAgICAidmFsdWUiOiAgNTUsICJyZXR1cm4iOiBbXSwgICAg
ICAgICAgICJwYXJhbWV0ZXIiOiBbImFkZHIiLCAiaTY0Il0sICAgICAgICAgICJpbW1lZGlhdGUi
OiBbeyJuYW1lIjogImZsYWdzIiwgICAgICAgICAgInR5cGUiOiAidmFydWludDMyIn0sIHsibmFt
ZSI6ICJvZmZzZXQiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICJkZXNjcmlwdGlvbiI6ICJzdG9y
ZSB0byBtZW1vcnkiIH0sCiAgICAgICAgICJmMzIuc3RvcmUiOiAgICAgICAgICAgeyAiY2F0ZWdv
cnkiOiAibWVtb3J5IiwgICAgICJ2YWx1ZSI6ICA1NiwgInJldHVybiI6IFtdLCAgICAgICAgICAg
InBhcmFtZXRlciI6IFsiYWRkciIsICJmMzIiXSwgICAgICAgICAgImltbWVkaWF0ZSI6IFt7Im5h
bWUiOiAiZmxhZ3MiLCAgICAgICAgICAidHlwZSI6ICJ2YXJ1aW50MzIifSwgeyJuYW1lIjogIm9m
ZnNldCIsICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgImRlc2NyaXB0aW9uIjogInN0b3JlIHRvIG1l
bW9yeSIgfSwKICAgICAgICAgImY2NC5zdG9yZSI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJt
ZW1vcnkiLCAgICAgInZhbHVlIjogIDU3LCAicmV0dXJuIjogW10sICAgICAgICAgICAicGFyYW1l
dGVyIjogWyJhZGRyIiwgImY2NCJdLCAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJm
bGFncyIsICAgICAgICAgICJ0eXBlIjogInZhcnVpbnQzMiJ9LCB7Im5hbWUiOiAib2Zmc2V0Iiwg
InR5cGUiOiAidmFydWludDMyIn1dLCAiZGVzY3JpcHRpb24iOiAic3RvcmUgdG8gbWVtb3J5IiB9
LAotICAgICAgICAiY3VycmVudF9tZW1vcnkiOiAgICAgIHsgImNhdGVnb3J5IjogIm9wZXJhdGlv
biIsICAidmFsdWUiOiAgNjMsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJwYXJhbWV0ZXIiOiBb
XSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbXSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJxdWVyeSB0aGUgc2l6ZSBvZiBtZW1vcnki
IH0sCi0gICAgICAgICJncm93X21lbW9yeSI6ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAib3BlcmF0
aW9uIiwgICJ2YWx1ZSI6ICA2NCwgInJldHVybiI6IFsic2l6ZSJdLCAgICAgInBhcmFtZXRlciI6
IFsic2l6ZSJdLCAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6IFtdLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImdyb3cgdGhlIHNpemUgb2YgbWVtb3J5
IiB9LAorICAgICAgICAiY3VycmVudF9tZW1vcnkiOiAgICAgIHsgImNhdGVnb3J5IjogIm9wZXJh
dGlvbiIsICAidmFsdWUiOiAgNjMsICJyZXR1cm4iOiBbInNpemUiXSwgICAgICJwYXJhbWV0ZXIi
OiBbXSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImZsYWdz
IiwgInR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogInF1ZXJ5IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKKyAgICAgICAgImdy
b3dfbWVtb3J5IjogICAgICAgICB7ICJjYXRlZ29yeSI6ICJvcGVyYXRpb24iLCAgInZhbHVlIjog
IDY0LCAicmV0dXJuIjogWyJzaXplIl0sICAgICAicGFyYW1ldGVyIjogWyJzaXplIl0sICAgICAg
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJmbGFncyIsICJ0eXBlIjogInZhcnVp
bnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJn
cm93IHRoZSBzaXplIG9mIG1lbW9yeSIgfSwKICAgICAgICAgImkzMi5hZGQiOiAgICAgICAgICAg
ICB7ICJjYXRlZ29yeSI6ICJhcml0aG1ldGljIiwgInZhbHVlIjogMTA2LCAicmV0dXJuIjogWyJp
MzIiXSwgICAgICAicGFyYW1ldGVyIjogWyJpMzIiLCAiaTMyIl0sICAgICAgICAgICAiaW1tZWRp
YXRlIjogW10sICJiM29wIjogIkFkZCIgICAgICAgICAgfSwKICAgICAgICAgImkzMi5zdWIiOiAg
ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJhcml0aG1ldGljIiwgInZhbHVlIjogMTA3LCAicmV0
dXJuIjogWyJpMzIiXSwgICAgICAicGFyYW1ldGVyIjogWyJpMzIiLCAiaTMyIl0sICAgICAgICAg
ICAiaW1tZWRpYXRlIjogW10sICJiM29wIjogIlN1YiIgICAgICAgICAgfSwKICAgICAgICAgImkz
Mi5tdWwiOiAgICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJhcml0aG1ldGljIiwgInZhbHVlIjog
MTA4LCAicmV0dXJuIjogWyJpMzIiXSwgICAgICAicGFyYW1ldGVyIjogWyJpMzIiLCAiaTMyIl0s
ICAgICAgICAgICAiaW1tZWRpYXRlIjogW10sICJiM29wIjogIk11bCIgICAgICAgICAgfSwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyMTAxODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiAr
ODcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRh
YmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV90
YWJsZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9tZW1vcnkpOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAKIHByb3RlY3RlZDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNZW1vcnkuY3BwCShyZXZpc2lvbiAyMTAxODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCAr
MzAsOCBAQAogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCi0jaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlci5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
ci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTUsNiArNTUsMTUgQEAgSlNXZWJBc3NlbWJs
eU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9yeQogewogfQogCitKU1dlYkFzc2VtYmx5TWVtb3J5
Ojp+SlNXZWJBc3NlbWJseU1lbW9yeSgpCit7CisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAg
IEFycmF5QnVmZmVyQ29udGVudHMgZHVtbXlDb250ZW50czsKKyAgICAgICAgbV9idWZmZXItPnRy
YW5zZmVyVG8oZHVtbXlDb250ZW50cyk7CisgICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKKyAg
ICB9Cit9CisKIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmJ1ZmZlcihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgaWYgKG1fYnVmZmVyV3Jh
cHBlcikKQEAgLTcxLDYgKzgwLDQ4IEBAIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlNZW1v
cnk6OmJ1ZmYKICAgICByZXR1cm4gbV9idWZmZXJXcmFwcGVyLmdldCgpOwogfQogCitXYXNtOjpQ
YWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhFeGVjU3RhdGUqIGV4ZWMsIHVpbnQz
Ml90IGRlbHRhLCBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCA9IG1fbWVtb3J5
LT5zaXplSW5QYWdlcygpOworCisgICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQoZGVs
dGEpKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCisgICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0aGUg
ZGVsdGEgdG8gYmUgYSB2YWxpZCBwYWdlIGNvdW50IikpKTsKKyAgICAgICAgcmV0dXJuIFdhc206
OlBhZ2VDb3VudCgpOworICAgIH0KKworICAgIFdhc206OlBhZ2VDb3VudCBuZXdTaXplID0gb2xk
UGFnZUNvdW50ICsgV2FzbTo6UGFnZUNvdW50KGRlbHRhKTsKKyAgICBpZiAoIW5ld1NpemUpIHsK
KyAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKKyAgICAgICAgICAg
IHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyBleHBlY3RzIHRoZSBncm93biBz
aXplIHRvIGJlIGEgdmFsaWQgcGFnZSBjb3VudCIpKSk7CisgICAgICAgIHJldHVybiBXYXNtOjpQ
YWdlQ291bnQoKTsKKyAgICB9CisKKyAgICBpZiAoZGVsdGEpIHsKKyAgICAgICAgYm9vbCBzdWNj
ZXNzID0gbV9tZW1vcnktPmdyb3cobmV3U2l6ZSk7CisgICAgICAgIGlmICghc3VjY2Vzcykgewor
ICAgICAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKKyAgICAgICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBvbGQgYXJy
YXkgYnVmZmVyIGJlY2F1c2UgaXQgbWlnaHQgbm93IGJlIHBvaW50aW5nCisgICAgLy8gdG8gc3Rh
bGUgbWVtb3J5LgorICAgIC8vIE5ldXRlciB0aGUgb2xkIGFycmF5LgorICAgIGlmIChtX2J1ZmZl
cikgeworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGR1bW15Q29udGVudHM7CisgICAgICAg
IG1fYnVmZmVyLT50cmFuc2ZlclRvKGR1bW15Q29udGVudHMpOworICAgICAgICBtX2J1ZmZlciA9
IG51bGxwdHI7CisgICAgICAgIG1fYnVmZmVyV3JhcHBlci5jbGVhcigpOworICAgIH0KKworICAg
IHJldHVybiBvbGRQYWdlQ291bnQ7Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmgJKHJldmlzaW9uIDIxMDE4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsMTMg
QEAgcHVibGljOgogCiAgICAgV2FzbTo6TWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9y
eS5nZXQoKTsgfQogICAgIEpTQXJyYXlCdWZmZXIqIGJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0Kik7CisgICAgV2FzbTo6UGFnZUNvdW50IGdyb3coRXhlY1N0YXRlKiwgdWludDMyX3QgZGVs
dGEsIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKKworICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJB
c3NlbWJseU1lbW9yeSwgbV9tZW1vcnkpOyB9CiAKIHByb3RlY3RlZDoKICAgICBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4m
Jik7CisgICAgfkpTV2ViQXNzZW1ibHlNZW1vcnkoKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCShyZXZp
c2lvbiAyMTAxODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDIwICs1NSwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5z
aXplKTsKICAgICAgICAgcmV0dXJuIG1fZnVuY3Rpb25JbmRleFNwYWNlLmJ1ZmZlci5nZXQoKVtm
dW5jdGlvbkluZGV4U3BhY2VdLnNpZ25hdHVyZUluZGV4OwogICAgIH0KLSAgICB1bnNpZ25lZCBp
bXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbVRvSlNTdHVicy5zaXplKCk7IH0KKyAg
ICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4gbV93YXNtVG9K
U1N0dWJzLnNpemUoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2Up
CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gaW1w
b3J0Q291bnQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRl
eFNwYWNlIC0gaW1wb3J0Q291bnQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25J
bmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CisgICAgICAgIHVuc2lnbmVkIGNh
bGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwogICAg
ICAgICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICB9CiAKICAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGltcG9ydENvdW50KCkpOwotICAgICAgICB1
bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGltcG9ydENvdW50KCk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbklt
cG9ydENvdW50KCkpOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5k
ZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKICAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtj
YWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLmdldCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEwMTgwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI5LDggKzIyOSw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAh
aGFzTWVtb3J5SW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5m
b3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOwogICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEg
bWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgotICAgICAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpN
ZW1vcnk+KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeS5tYXhpbXVtKCkpOwotICAgICAgICAgICAgaWYgKCFtZW1vcnktPmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIGJvb2wgZmFpbGVkOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+KG1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eS5tYXhpbXVtKCksIGZhaWxlZCk7CisgICAgICAgICAgICBpZiAoZmFpbGVkKQogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogICAgICAgICAgICAgaW5zdGFu
Y2UtPnNldE1lbW9yeSh2bSwKICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0
cnVjdHVyZSgpLCBXVEZNb3ZlKG1lbW9yeSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAyMTAxODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYs
OCArOTYsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkg
PSBzdGQ6Om1ha2VfdW5pcXVlPFdhc206Ok1lbW9yeT4oaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11
bVBhZ2VDb3VudCk7Ci0gICAgaWYgKCFtZW1vcnktPmlzVmFsaWQoKSkKKyAgICBib29sIGZhaWxl
ZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFdhc206Ok1lbW9yeT4oaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwg
ZmFpbGVkKTsKKyAgICBpZiAoZmFpbGVkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Io
ZXhlYykpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1lbW9y
eTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVt
b3J5U3RydWN0dXJlKCksIFdURk1vdmUobWVtb3J5KSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMjEwMTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwz
MyArMzIsNjkgQEAKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5SGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jR3JvdyhFeGVjU3Rh
dGUqKTsKK30KIAogI2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmx1dC5oIgog
CisKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNZW1vcnlQ
cm90b3R5cGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lk1lbW9yeS5wcm90b3R5cGUiLCAmQmFz
ZTo6c19pbmZvLCAmcHJvdG90eXBlVGFibGVXZWJBc3NlbWJseU1lbW9yeSwgQ1JFQVRFX01FVEhP
RF9UQUJMRShXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSkgfTsKIAogLyogU291cmNlIGZvciBX
ZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5sdXQuaAotIEBiZWdpbiBwcm90b3R5cGVUYWJsZVdl
YkFzc2VtYmx5TWVtb3J5Ci0gQGVuZAotICovCitAYmVnaW4gcHJvdG90eXBlVGFibGVXZWJBc3Nl
bWJseU1lbW9yeQorICBncm93ICAgICB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3cgICBE
b250RW51bXxGdW5jdGlvbiAxCitAZW5kCisqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVjU3RhdGUqKTsK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNC
dWZmZXIoRXhlY1N0YXRlKik7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNz
ZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQorQUxXQVlTX0lOTElO
RSBKU1dlYkFzc2VtYmx5TWVtb3J5KiBnZXRNZW1vcnkoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBt
ZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPihleGVjLT50aGlzVmFs
dWUoKSk7IAorICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZhbHVlKTsgCiAgICAgaWYgKCFtZW1vcnkpIHsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCAKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiV2ViQXNzZW1ibHkuTWVtb3J5LnByb3RvdHlwZS5idWZmZXIgZ2V0dGVyIGNhbGxlZCB3aXRo
IG5vbiBXZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8IHZhbHVlIikpKSk7CisgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIAorICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5LnByb3RvdHlwZS5idWZmZXIg
Z2V0dGVyIGNhbGxlZCB3aXRoIG5vbiBXZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8IHZhbHVlIikp
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQorICAgIHJldHVybiBtZW1vcnk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1
bmNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnkoZXhlYywgZXhlYy0+dGhpc1ZhbHVl
KCkpOyAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShtZW1vcnktPmJ1ZmZlcihleGVjLT52bSgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3
ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnko
ZXhlYywgZXhlYy0+dGhpc1ZhbHVlKCkpOyAKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CisgICAgCisgICAgdWludDMyX3QgZGVsdGEgPSB0b05vbldyYXBwaW5nVWlu
dDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CisKKyAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVy
ZSA9IHRydWU7CisgICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3JvdyhleGVj
LCBkZWx0YSwgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKHJlc3VsdC5wYWdlQ291bnQoKSkpOworfQorCiBXZWJBc3NlbWJseU1lbW9yeVBy
b3RvdHlwZSogV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGF1
dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUodm0sIHN0cnVj
dHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMTAxODApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6bGluayhFeGVjUwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJ
bmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKIAogICAgIFN5bWJvbFRh
YmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IG1vZHVsZS0+ZXhwb3J0U3ltYm9sVGFibGUoKTsKLSAg
ICB1bnNpZ25lZCBpbXBvcnRDb3VudCA9IG1vZHVsZS0+aW1wb3J0Q291bnQoKTsKKyAgICB1bnNp
Z25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0gbW9kdWxlLT5mdW5jdGlvbkltcG9ydENvdW50KCk7
CiAKICAgICAvLyBGSVhNRSB3aXJlIHVwIHRoZSBpbXBvcnRzLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MTE4CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgICAgICAvLyAxLiBJZiBl
IGlzIGEgY2xvc3VyZSBjOgogICAgICAgICAgICAgLy8gICBpLiBJZiB0aGVyZSBpcyBhbiBFeHBv
cnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGZ1bmMgaW4gZnVuY3Mgd2hvc2UgZnVuYy5bW0Ns
b3N1cmVdXSBlcXVhbHMgYywgdGhlbiByZXR1cm4gZnVuYy4KICAgICAgICAgICAgIC8vICAgaWku
IChOb3RlOiBBdCBtb3N0IG9uZSB3cmFwcGVyIGlzIGNyZWF0ZWQgZm9yIGFueSBjbG9zdXJlLCBz
byBmdW5jIGlzIHVuaXF1ZSwgZXZlbiBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgb2NjdXJyYW5jZXMg
aW4gdGhlIGxpc3QuIE1vcmVvdmVyLCBpZiB0aGUgaXRlbSB3YXMgYW4gaW1wb3J0IHRoYXQgaXMg
YWxyZWFkeSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0LCB0aGVuIHRoZSBvcmln
aW5hbCBmdW5jdGlvbiBvYmplY3Qgd2lsbCBiZSBmb3VuZC4gRm9yIGltcG9ydHMgdGhhdCBhcmUg
cmVndWxhciBKUyBmdW5jdGlvbnMsIGEgbmV3IHdyYXBwZXIgd2lsbCBiZSBjcmVhdGVkLikKLSAg
ICAgICAgICAgIGlmIChleHAua2luZEluZGV4IDwgaW1wb3J0Q291bnQpIHsKKyAgICAgICAgICAg
IGlmIChleHAua2luZEluZGV4IDwgZnVuY3Rpb25JbXBvcnRDb3VudCkgewogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FIEltcGxlbWVudCByZS1leHBvcnRpbmcgYW4gaW1wb3J0LiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEwCiAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KQEAgLTE4MCw3ICsxODAs
NyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgIC8v
IFRoZSBzdGFydCBmdW5jdGlvbiBtdXN0IG5vdCB0YWtlIGFueSBhcmd1bWVudHMgb3IgcmV0dXJu
IGFueXRoaW5nLiBUaGlzIGlzIGVuZm9yY2VkIGJ5IHRoZSBwYXJzZXIuCiAgICAgICAgIEFTU0VS
VCghc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwogICAgICAgICBBU1NFUlQoc2lnbmF0dXJl
LT5yZXR1cm5UeXBlKCkgPT0gV2FzbTo6Vm9pZCk7Ci0gICAgICAgIGlmIChzdGFydEZ1bmN0aW9u
SW5kZXhTcGFjZSA8IG1vZHVsZS0+aW1wb3J0Q291bnQoKSkgeworICAgICAgICBpZiAoc3RhcnRG
dW5jdGlvbkluZGV4U3BhY2UgPCBtb2R1bGUtPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewogICAg
ICAgICAgICAgSlNDZWxsKiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9u
KHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVu
Y3Rpb24uc2V0KHZtLCB0aGlzLCBzdGFydEZ1bmN0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKQEAg
LTE5Niw4ICsxOTYsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNT
CiAgICAgbV9tb2R1bGVFbnZpcm9ubWVudC5zZXQodm0sIHRoaXMsIG1vZHVsZUVudmlyb25tZW50
KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFNjb3BlLCB0eXBlbmFtZSBOLCB0eXBlbmFtZSAu
Li5BcmdzPgotTkVWRVJfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGRhdGFTZWdtZW50RmFpbChFeGVj
U3RhdGUqIHN0YXRlLCBWTSYgdm0sIFNjb3BlJiBzY29wZSwgTiBtZW1vcnlTaXplLCBOIHNlZ21l
bnRTaXplLCBOIG9mZnNldCwgQXJncy4uLiBhcmdzKQordGVtcGxhdGUgPHR5cGVuYW1lIFNjb3Bl
LCB0eXBlbmFtZSBNLCB0eXBlbmFtZSBOLCB0eXBlbmFtZSAuLi5BcmdzPgorTkVWRVJfSU5MSU5F
IHN0YXRpYyBKU1ZhbHVlIGRhdGFTZWdtZW50RmFpbChFeGVjU3RhdGUqIHN0YXRlLCBWTSYgdm0s
IFNjb3BlJiBzY29wZSwgTSBtZW1vcnlTaXplLCBOIHNlZ21lbnRTaXplLCBOIG9mZnNldCwgQXJn
cy4uLiBhcmdzKQogewogICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Ioc3RhdGUsIHZtLCBtYWtlU3RyaW5nKEFTQ0lJTGl0
ZXJhbCgiSW52YWxpZCBkYXRhIHNlZ21lbnQgaW5pdGlhbGl6YXRpb246IHNlZ21lbnQgb2YgIiks
IFN0cmluZzo6bnVtYmVyKHNlZ21lbnRTaXplKSwgQVNDSUlMaXRlcmFsKCIgYnl0ZXMgbWVtb3J5
IG9mICIpLCBTdHJpbmc6Om51bWJlcihtZW1vcnlTaXplKSwgQVNDSUlMaXRlcmFsKCIgYnl0ZXMs
IGF0IG9mZnNldCAiKSwgU3RyaW5nOjpudW1iZXIob2Zmc2V0KSwgYXJncy4uLikpKTsKIH0KQEAg
LTIzMSw3ICsyMzEsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0
CiAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAgICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMAogICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlc1tp
XTsKLSAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IG1vZHVsZS0+aW1wb3J0Q291
bnQoKSkgeworICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgbW9kdWxlLT5mdW5j
dGlvbkltcG9ydENvdW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmRlY29kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93Vk1SYW5nZUVycm9yKHN0YXRl
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJFbGVtZW50IGlzIHNldHRpbmcgdGhlIHRhYmxlIHZhbHVl
IHdpdGggYW4gaW1wb3J0LiBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIEZJWE1FLiIpKSk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMjU5LDE1ICsyNTksMjEgQEAgSlNWYWx1ZSBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdAogICAgICAgICBpZiAoIWRhdGEuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqc01lbW9yeSk7IC8vIEl0IGlzIGEgdmFsaWRh
dGlvbiBlcnJvciBmb3IgYSBEYXRhIHNlY3Rpb24gdG8gZXhpc3Qgd2l0aG91dCBhIE1lbW9yeSBz
ZWN0aW9uIG9yIGltcG9ydC4KICAgICAgICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGpzTWVtb3J5LT5tZW1vcnkoKS0+bWVtb3J5KCkpOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobWVtb3J5KTsKLSAgICAgICAgICAgIGF1dG8gc2l6ZUluQnl0
ZXMgPSBqc01lbW9yeS0+bWVtb3J5KCktPnNpemUoKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHNp
emVJbkJ5dGVzID0ganNNZW1vcnktPm1lbW9yeSgpLT5zaXplKCk7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHNlZ21lbnQgOiBkYXRhKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQtPnNp
emVJbkJ5dGVzKSB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldDsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQtPm9mZnNldC5pc0dsb2JhbEltcG9ydCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1faW5z
dGFuY2UtPmxvYWRJMzJHbG9iYWwoc2VnbWVudC0+b2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0ID0gc2VnbWVudC0+b2Zmc2V0LmNvbnN0VmFsdWUoKTsKKwogICAgICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2l6ZUluQnl0ZXMgPCBzZWdtZW50LT5zaXplSW5CeXRlcykpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21lbnRGYWlsKHN0YXRlLCB2bSwgc2Nv
cGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRlcywgc2VnbWVudC0+b2Zmc2V0LCBB
U0NJSUxpdGVyYWwoIiwgc2VnbWVudCBpcyB0b28gYmlnIikpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2VnbWVudC0+b2Zmc2V0ID4gc2l6ZUluQnl0ZXMgLSBzZWdtZW50LT5z
aXplSW5CeXRlcykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21lbnRG
YWlsKHN0YXRlLCB2bSwgc2NvcGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRlcywg
c2VnbWVudC0+b2Zmc2V0LCBBU0NJSUxpdGVyYWwoIiwgc2VnbWVudCB3cml0ZXMgb3V0c2lkZSBv
ZiBtZW1vcnkiKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShtZW1vcnkgKyBzZWdtZW50
LT5vZmZzZXQsICZzZWdtZW50LT5ieXRlKDApLCBzZWdtZW50LT5zaXplSW5CeXRlcyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21lbnRGYWlsKHN0YXRlLCB2bSwgc2Nv
cGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRlcywgb2Zmc2V0LCBBU0NJSUxpdGVy
YWwoIiwgc2VnbWVudCBpcyB0b28gYmlnIikpOworICAgICAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkob2Zmc2V0ID4gc2l6ZUluQnl0ZXMgLSBzZWdtZW50LT5zaXplSW5CeXRlcykpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVNlZ21lbnRGYWlsKHN0YXRlLCB2bSwgc2Nv
cGUsIHNpemVJbkJ5dGVzLCBzZWdtZW50LT5zaXplSW5CeXRlcywgb2Zmc2V0LCBBU0NJSUxpdGVy
YWwoIiwgc2VnbWVudCB3cml0ZXMgb3V0c2lkZSBvZiBtZW1vcnkiKSk7CisgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9yeSk7CisgICAgICAgICAgICAgICAgICAgIG1lbWNw
eShtZW1vcnkgKyBvZmZzZXQsICZzZWdtZW50LT5ieXRlKDApLCBzZWdtZW50LT5zaXplSW5CeXRl
cyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Cg==
</data>
<flag name="review"
          id="320086"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>