<?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>169794</bug_id>
          
          <creation_ts>2017-03-16 15:36:52 -0700</creation_ts>
          <short_desc>WebAssembly: spec-tests/memory.wast.js fails in debug</short_desc>
          <delta_ts>2017-03-24 15:09:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>159775</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1288795</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-16 15:36:52 -0700</bug_when>
    <thetext>Looks related to Signaling versus BoundsChecking when calling current_memory.


(cd ./JSTests/wasm/ &amp;&amp; ../../current-debug/bin/jsc -m --useWebAssembly=1 ./spec-tests/memory.wast.js); echo $?

ASSERTION FAILED: wasmFunction-&gt;instance()-&gt;codeBlock()-&gt;isSafeToRun(wasmFunction-&gt;instance()-&gt;memory())
../Source/JavaScriptCore/wasm/js/WebAssemblyFunction.cpp(60) : EncodedJSValue JSC::callWebAssemblyFunction(JSC::ExecState *)
1   0x108d2bd7d WTFCrash
2   0x108c3e190 JSC::callWebAssemblyFunction(JSC::ExecState*)
3   0x10878ce8a JSC::LLInt::handleHostCall(JSC::ExecState*, JSC::Instruction*, JSC::JSValue, JSC::CodeSpecializationKind)
4   0x1087890bd JSC::LLInt::setUpCall(JSC::ExecState*, JSC::Instruction*, JSC::CodeSpecializationKind, JSC::JSValue, JSC::LLIntCallLinkInfo*)
5   0x108788383 JSC::LLInt::genericCall(JSC::ExecState*, JSC::Instruction*, JSC::CodeSpecializationKind)
6   0x108788273 llint_slow_path_call
7   0x108795ba9 llint_entry
8   0x1087959cf llint_entry
9   0x1087959cf llint_entry
10  0x10878e29e vmEntryToJavaScript
11  0x108723aee JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)
12  0x1086d99ad JSC::Interpreter::execute(JSC::ModuleProgramExecutable*, JSC::ExecState*, JSC::JSModuleEnvironment*)
13  0x1089fee5c JSC::JSModuleRecord::evaluate(JSC::ExecState*)
14  0x1089f677e JSC::JSModuleLoader::evaluate(JSC::ExecState*, JSC::JSValue, JSC::JSValue, JSC::JSValue)
15  0x108a8f7d1 JSC::moduleLoaderPrototypeEvaluate(JSC::ExecState*)
16  0x445c14801028
17  0x1087959cf llint_entry
18  0x1087959cf llint_entry
19  0x1087959cf llint_entry
20  0x10878e29e vmEntryToJavaScript
21  0x108723aee JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)
22  0x1086d81d2 JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
23  0x1088eede8 JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
24  0x1088ef05a JSC::profiledCall(JSC::ExecState*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
25  0x1089f0eb8 JSC::JSJobMicrotask::run(JSC::ExecState*)
26  0x108b56243 JSC::QueuedTask::run()
27  0x108b55e77 JSC::VM::drainMicrotasks()
28  0x10780b430 runWithScripts(GlobalObject*, WTF::Vector&lt;Script, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, WTF::String const&amp;, bool, bool, bool)
29  0x1077cfcdf jscmain(int, char**)::$_9::operator()(JSC::VM&amp;, GlobalObject*) const
30  0x1077c2e82 int runJSC&lt;jscmain(int, char**)::$_9&gt;(CommandLine, jscmain(int, char**)::$_9 const&amp;)
31  0x1077c1b18 jscmain(int, char**)
139


The failing spec tests do the following:


(module (memory (data)) (func (export &quot;memsize&quot;) (result i32) (current_memory)))
(assert_return (invoke &quot;memsize&quot;) (i32.const 0))
(module (memory (data &quot;&quot;)) (func (export &quot;memsize&quot;) (result i32) (current_memory)))
(assert_return (invoke &quot;memsize&quot;) (i32.const 0))
(module (memory (data &quot;x&quot;)) (func (export &quot;memsize&quot;) (result i32) (current_memory)))
(assert_return (invoke &quot;memsize&quot;) (i32.const 1))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289202</commentid>
    <comment_count>1</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-17 16:53:00 -0700</bug_when>
    <thetext>I&apos;m taking a look at this. I have a partial patch. Will continue next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289208</commentid>
    <comment_count>2</comment_count>
      <attachid>304839</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-17 17:07:06 -0700</bug_when>
    <thetext>Created attachment 304839
patch

Turns out I did it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289209</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-17 17:08:36 -0700</bug_when>
    <thetext>Attachment 304839 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:241:  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/WebAssemblyMemoryConstructor.cpp:100:  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/WebAssemblyInstanceConstructor.cpp:261:  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/WasmMemoryInformation.cpp:89:  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: 4 in 10 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>1289210</commentid>
    <comment_count>4</comment_count>
      <attachid>304839</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-17 17:14:09 -0700</bug_when>
    <thetext>Comment on attachment 304839
patch

Actually there&apos;s a bug when there *are* loads and stores.

What I need to do is change all provably out-of-bounds loads and stores to traps, and add a bunch of tests. Also, test when the memory is passed in as None...

Ugh, this zero-sized memory thing is silly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289578</commentid>
    <comment_count>5</comment_count>
      <attachid>304950</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-20 14:38:52 -0700</bug_when>
    <thetext>Created attachment 304950
patch

Fix a few logic errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289579</commentid>
    <comment_count>6</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-20 14:39:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 304839 [details]
&gt; patch
&gt; 
&gt; Actually there&apos;s a bug when there *are* loads and stores.
&gt; 
&gt; What I need to do is change all provably out-of-bounds loads and stores to
&gt; traps, and add a bunch of tests. Also, test when the memory is passed in as
&gt; None...
&gt; 
&gt; Ugh, this zero-sized memory thing is silly.

I didn&apos;t do this: I ended up changing the checks so that Signaling code can&apos;t be used with None as well as BoundsChecking memory. Much simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289580</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-20 14:41:39 -0700</bug_when>
    <thetext>Attachment 304950 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:243:  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/WebAssemblyMemoryConstructor.cpp:100:  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/WebAssemblyInstanceConstructor.cpp:261:  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/WasmMemoryInformation.cpp:89:  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: 4 in 10 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>1289715</commentid>
    <comment_count>8</comment_count>
      <attachid>304950</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-20 22:47:01 -0700</bug_when>
    <thetext>Comment on attachment 304950
patch

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

Can&apos;t we just have the Memory object point to null or something and fix weirdness with setMemory using fake memories. It seems like an anti-pattern to make everyone deal with all the edge cases of empty memories.

&gt; Source/JavaScriptCore/wasm/WasmMemory.h:54
&gt; +    enum class Mode {

Can we not make this an enum class? or if you do at least remove it from the Memory class. Writing Wasm::Memory::Mode everywhere is going to be super lame...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289721</commentid>
    <comment_count>9</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-21 00:31:25 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 304950 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=304950&amp;action=review
&gt; 
&gt; Can&apos;t we just have the Memory object point to null or something and fix
&gt; weirdness with setMemory using fake memories. It seems like an anti-pattern
&gt; to make everyone deal with all the edge cases of empty memories.

I don&apos;t believe it would. We have the following cases to handle in the InstanceConstructor:

1. An imported memory which isn&apos;t empty.
2. An imported memory which is empty (max=0).
3. No memory.
4. A section-declared empty memory (max=0).
5. A section-declared memory.

I should rename &quot;None&quot; to &quot;Empty&quot; to express this.

What you&apos;re asking is: should we put 2., 3., and 4. together? I don&apos;t think so: having *no* memory means there can be no memory accesses *at all* in the module&apos;s code. That&apos;s a much stronger guarantee from saying that there can be no memory *access* which execute dynamically, but getting memory size and growing it to 0 is fine.

You&apos;ll note that we do collapse 2. and 4. together: that&apos;s because once instantiated, where the memory came from doesn&apos;t matter because the lifetime is controlled by a WebAssembly.Memory object.


&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.h:54
&gt; &gt; +    enum class Mode {
&gt; 
&gt; Can we not make this an enum class? or if you do at least remove it from the
&gt; Memory class. Writing Wasm::Memory::Mode everywhere is going to be super
&gt; lame...

I can drop that change. I think it reads better (&quot;the memory mode is signaling&quot; is more accurate than &quot;the memory is signaling&quot;), but that distracts from the patch. I could do MemoryMode::Signaling too.

In general I like enum class much more! It&apos;s way harder to mess up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289803</commentid>
    <comment_count>10</comment_count>
      <attachid>305014</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-21 12:46:43 -0700</bug_when>
    <thetext>Created attachment 305014
patch

Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289999</commentid>
    <comment_count>11</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-22 00:32:20 -0700</bug_when>
    <thetext>Attachment 305014 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:255:  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/JSWebAssemblyModule.h:71:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:100:  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/WebAssemblyInstanceConstructor.cpp:261:  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/WasmMemoryInformation.cpp:89:  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 16 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>1290668</commentid>
    <comment_count>12</comment_count>
      <attachid>305246</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-23 17:04:56 -0700</bug_when>
    <thetext>Created attachment 305246
patch

Remove the enum value I was adding, Keith was right the code stays simpler without the new value. Empty is just denoted by having max=0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290671</commentid>
    <comment_count>13</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-23 17:08:10 -0700</bug_when>
    <thetext>Attachment 305246 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:286:  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/JSWebAssemblyModule.h:71:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmMemoryInformation.cpp:88:  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/WasmMemoryInformation.cpp:92:  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: 4 in 16 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>1290861</commentid>
    <comment_count>14</comment_count>
      <attachid>305246</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-24 10:52:30 -0700</bug_when>
    <thetext>Comment on attachment 305246
patch

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

r=me if you fix the copyright thingy.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:171
&gt; +    , m_mode(MemoryMode::BoundsChecking)

Nit: I don&apos;t think you need this. It has an initializer in the class definition.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:235
&gt; +        // FIXME: should this ever occur? https://bugs.webkit.org/show_bug.cgi?id=169890

I think we have proven this can happen. I&apos;m not sure this FIXME is needed.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:298
&gt; +            // FIXME: should this ever occur? https://bugs.webkit.org/show_bug.cgi?id=169890

ditto.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.cpp:65
&gt; +        // because the page protection detect out-of-bounds accesses.

typo: detects

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:2
&gt; + * Copyright (C) 2016-2017 Apple Inc. All rights reserved.

Did we have changes in here earlier that we forgot to update? If so, I think you should state that&apos;s why you are changing the copyright in the Changelog.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:2
&gt; + * Copyright (C) 2016-2017 Apple Inc. All rights reserved.

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291003</commentid>
    <comment_count>15</comment_count>
      <attachid>305324</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-24 14:42:41 -0700</bug_when>
    <thetext>Created attachment 305324
patch

&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:235
&gt; &gt; +        // FIXME: should this ever occur? https://bugs.webkit.org/show_bug.cgi?id=169890
&gt; 
&gt; I think we have proven this can happen. I&apos;m not sure this FIXME is needed.
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:298
&gt; &gt; +            // FIXME: should this ever occur? https://bugs.webkit.org/show_bug.cgi?id=169890
&gt; 
&gt; ditto.

Right, I want to add checks for errno though because some of the failure cases mean we messed up. So the FIXME should stay there, I&apos;ll address as part of bug #169890.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291004</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-24 14:43:54 -0700</bug_when>
    <thetext>Attachment 305324 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:286:  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/JSWebAssemblyModule.h:71:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmMemoryInformation.cpp:88:  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/WasmMemoryInformation.cpp:92:  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: 4 in 14 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>1291010</commentid>
    <comment_count>17</comment_count>
      <attachid>305324</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-24 15:09:19 -0700</bug_when>
    <thetext>Comment on attachment 305324
patch

Clearing flags on attachment: 305324

Committed r214380: &lt;http://trac.webkit.org/changeset/214380&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291011</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-24 15:09:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304839</attachid>
            <date>2017-03-17 17:07:06 -0700</date>
            <delta_ts>2017-03-20 14:38:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-memory-wast-js.patch</filename>
            <type>text/plain</type>
            <size>18912</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA5ZjI4ZmEyZTEyM2FiYmYwMTE4OGVhNGMxMjU4MmE3YmI1Njg3ZWFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IE1hciAyMDE3IDE3OjAzOjQzIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gbWVtb3J5
LXdhc3QtanMKCi0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgfCA0NyArKysrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgICB8ICA0ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDMxICsrKysrKysrLS0tLS0tCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggICAgICAgICAgICB8ICA2ICsr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCAgfCAx
MyArKysrKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwICAgICAgICAg
ICAgIHwgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuY3BwIHwgIDggKystLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5oICAgfCAgMyArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcCAgICAgfCAgOCArKystCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yLmNwcCAgICAgICB8IDE1ICsrKysrLS0KIDEwIGZpbGVzIGNoYW5nZWQsIDEwNiBp
bnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRl
eCBmMTc4YzFkLi5mODU5ZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
MCBAQAorMjAxNy0wMy0xNyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgV2ViQXNzZW1ibHk6IHNwZWMtdGVzdHMvbWVtb3J5Lndhc3QuanMgZmFpbHMgaW4gZGVi
dWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTc5
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBm
YWlsdXJlIHdhcyBkdWUgdG8gZW1wdHkgbWVtb3JpZXMgKHdpdGggbWF4aW11bSBzaXplIDApLiBU
aG9zZQorICAgICAgICBvbmx5IG9jY3VyIGluIHRlc3RzIGFuZCBpbiBjb2RlIHRoYXQncyB0cnlp
bmcgdG8gdHJpcCB1cy4gVGhpcworICAgICAgICBwYXRjaCBhZGRzIG1lbW9yeSBtb2RlICJub25l
IiB3aGljaCByZXByZXNlbnRzIG5vIG1lbW9yeS4gSXQgY2FuCisgICAgICAgIHdvcmsgd2l0aCBl
aXRoZXIgYm91bmRzIGNoZWNrZWQgb3Igc2lnbmFsaW5nIGNvZGUgYmVjYXVzZSBpdCBuZXZlcgor
ICAgICAgICBjb250YWlucyBsb2FkcyBhbmQgc3RvcmVzLgorCisgICAgICAgIFRoZSBzcGVjIHRl
c3RzIHdoaWNoIHdlcmUgZmFpbGluZyBkaWQgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgID4g
KG1vZHVsZSAobWVtb3J5IChkYXRhKSkgKGZ1bmMgKGV4cG9ydCAibWVtc2l6ZSIpIChyZXN1bHQg
aTMyKSAoY3VycmVudF9tZW1vcnkpKSkKKyAgICAgICAgICAgID4gKGFzc2VydF9yZXR1cm4gKGlu
dm9rZSAibWVtc2l6ZSIpIChpMzIuY29uc3QgMCkpCisgICAgICAgICAgICA+IChtb2R1bGUgKG1l
bW9yeSAoZGF0YSAiIikpIChmdW5jIChleHBvcnQgIm1lbXNpemUiKSAocmVzdWx0IGkzMikgKGN1
cnJlbnRfbWVtb3J5KSkpCisgICAgICAgICAgICA+IChhc3NlcnRfcmV0dXJuIChpbnZva2UgIm1l
bXNpemUiKSAoaTMyLmNvbnN0IDApKQorICAgICAgICAgICAgPiAobW9kdWxlIChtZW1vcnkgKGRh
dGEgIngiKSkgKGZ1bmMgKGV4cG9ydCAibWVtc2l6ZSIpIChyZXN1bHQgaTMyKSAoY3VycmVudF9t
ZW1vcnkpKSkKKyAgICAgICAgICAgID4gKGFzc2VydF9yZXR1cm4gKGludm9rZSAibWVtc2l6ZSIp
IChpMzIuY29uc3QgMSkpCisKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6bWVtb3J5S2luZCk6CisgICAgICAg
ICogd2FzbS9XYXNtTWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJ5R2V0RmFzdE1l
bW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OnJlbGVhc2VGYXN0TWVtb3J5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6
OmNyZWF0ZUltcGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9y
eTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5Lmg6CisgICAgICAgICog
d2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1v
cnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24pOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmlzU2FmZVRvUnVuKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlN
b2R1bGU6OmNvZGVCbG9ja0Zvcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3I6OmNyZWF0ZUluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
TWVtb3J5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2Vt
Ymx5TWVtb3J5KToKKwogMjAxNy0wMy0xNyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxl
LmNvbT4KIAogICAgICAgICBVc2UgVVNFX0lOVEVSTkFMX1NESyB0byBjb21wdXRlIEVOQUJMRV9G
QVNUX0pJVF9QRVJNSVNTSU9OUyBpbnN0ZWFkIG9mIEhBVkVfSU5URVJOQUxfU0RLCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMGEy
ZTVjYy4uNGY2MDQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OTQsNyArNDk0LDcgQEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkxv
YWRPcChMb2FkT3BUeXBlIG9wKQogCiBpbmxpbmUgQjM6OktpbmQgQjNJUkdlbmVyYXRvcjo6bWVt
b3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKQogewotICAgIGlmIChtX2luZm8ubWVtb3J5Lm1v
ZGUoKSA9PSBNZW1vcnk6OlNpZ25hbGluZykKKyAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkg
PT0gTWVtb3J5OjpNb2RlOjpTaWduYWxpbmcpCiAgICAgICAgIHJldHVybiB0cmFwcGluZyhtZW1v
cnlPcCk7CiAgICAgcmV0dXJuIG1lbW9yeU9wOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmNwcAppbmRleCBlYjFkZDc4Li4wODQ4MjI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDYsNyArMTA2LDcgQEAgaW5saW5lIGJvb2wg
dHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0sIHZvaWQqJiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2Fw
YWNpdHksIE1lbW8KICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVz
KGxvY2tlcikuYWRkKG1lbW9yeSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0LmlzTmV3RW50cnkpOwogICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBmYXN0TWVt
b3J5TWFwcGVkQnl0ZXM7Ci0gICAgICAgICAgICBtb2RlID0gTWVtb3J5OjpTaWduYWxpbmc7Cisg
ICAgICAgICAgICBtb2RlID0gTWVtb3J5OjpNb2RlOjpTaWduYWxpbmc7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjUsNyAr
MTI1LDcgQEAgaW5saW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0sIHZvaWQqJiBtZW1v
cnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHksIE1lbW8KIAogICAgIGlmIChtbWFwQnl0ZXMoZmFz
dE1lbW9yeU1hcHBlZEJ5dGVzLCBtZW1vcnkpKSB7CiAgICAgICAgIG1hcHBlZENhcGFjaXR5ID0g
ZmFzdE1lbW9yeU1hcHBlZEJ5dGVzOwotICAgICAgICBtb2RlID0gTWVtb3J5OjpTaWduYWxpbmc7
CisgICAgICAgIG1vZGUgPSBNZW1vcnk6Ok1vZGU6OlNpZ25hbGluZzsKICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobWVtb3J5TG9jayk7CiAgICAgICAgIGFsbG9jYXRlZEZhc3RNZW1vcmllcysr
OwogICAgICAgICBhdXRvIHJlc3VsdCA9IGFjdGl2ZUZhc3RNZW1vcmllcyhsb2NrZXIpLmFkZCht
ZW1vcnkpOwpAQCAtMTM2LDcgKzEzNiw3IEBAIGlubGluZSBib29sIHRyeUdldEZhc3RNZW1vcnko
Vk0mIHZtLCB2b2lkKiYgbWVtb3J5LCBzaXplX3QmIG1hcHBlZENhcGFjaXR5LCBNZW1vCiAKIGlu
bGluZSB2b2lkIHJlbGVhc2VGYXN0TWVtb3J5KHZvaWQqJiBtZW1vcnksIHNpemVfdCB3cml0YWJs
ZVNpemUsIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5OjpNb2RlIG1vZGUpCiB7Ci0gICAg
aWYgKG1vZGUgIT0gTWVtb3J5OjpTaWduYWxpbmcgfHwgIW1lbW9yeSkKKyAgICBpZiAobW9kZSAh
PSBNZW1vcnk6Ok1vZGU6OlNpZ25hbGluZyB8fCAhbWVtb3J5KQogICAgICAgICByZXR1cm47CiAK
ICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkgJiYgbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9y
eU1hcHBlZEJ5dGVzKTsKQEAgLTE1Nyw2ICsxNTcsNyBAQCBpbmxpbmUgdm9pZCByZWxlYXNlRmFz
dE1lbW9yeSh2b2lkKiYgbWVtb3J5LCBzaXplX3Qgd3JpdGFibGVTaXplLCBzaXplX3QgbWFwcGVk
QwogTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQog
ICAgIDogbV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBtX21heGltdW0obWF4aW11bSkKKyAgICAs
IG1fbW9kZShNb2RlOjpOb25lKQogewogICAgIEFTU0VSVCghaW5pdGlhbC5ieXRlcygpKTsKIH0K
QEAgLTE3NiwxNiArMTc3LDE2IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlSW1wbChW
TSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwKIHsKICAgICBSRUxF
QVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3Vs
ZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCiAKLSAgICBNb2RlIG1vZGUgPSByZXF1aXJl
ZE1vZGUgPyAqcmVxdWlyZWRNb2RlIDogQm91bmRzQ2hlY2tpbmc7CisgICAgTW9kZSBtb2RlID0g
cmVxdWlyZWRNb2RlID8gKnJlcXVpcmVkTW9kZSA6IE1vZGU6OkJvdW5kc0NoZWNraW5nOwogICAg
IGNvbnN0IHNpemVfdCBzaXplID0gaW5pdGlhbC5ieXRlcygpOwogICAgIHNpemVfdCBtYXBwZWRD
YXBhY2l0eSA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdlQ291bnQ6Om1heCgpLmJ5
dGVzKCk7CiAgICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbWFrZUVtcHR5
TWVtb3J5ID0gWyZdICgpIC0+IFJlZlB0cjxNZW1vcnk+IHsKLSAgICAgICAgaWYgKG1vZGUgPT0g
U2lnbmFsaW5nKQorICAgICAgICBpZiAobW9kZSA9PSBNb2RlOjpTaWduYWxpbmcpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9
IEJvdW5kc0NoZWNraW5nOworICAgICAgICBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IE1vZGU6
OkJvdW5kc0NoZWNraW5nOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0
aWFsLCBtYXhpbXVtKSk7CiAgICAgfTsKIApAQCAtMTk2LDkgKzE5Nyw5IEBAIFJlZlB0cjxNZW1v
cnk+IE1lbW9yeTo6Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwKICAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1lbW9yeSgpOwogICAgIH0KIAot
ICAgIGJvb2wgY2FuVXNlRmFzdE1lbW9yeSA9ICFyZXF1aXJlZE1vZGUgfHwgcmVxdWlyZWRNb2Rl
ID09IFNpZ25hbGluZzsKKyAgICBib29sIGNhblVzZUZhc3RNZW1vcnkgPSAhcmVxdWlyZWRNb2Rl
IHx8IHJlcXVpcmVkTW9kZSA9PSBNb2RlOjpTaWduYWxpbmc7CiAgICAgaWYgKCFjYW5Vc2VGYXN0
TWVtb3J5IHx8ICF0cnlHZXRGYXN0TWVtb3J5KHZtLCBtZW1vcnksIG1hcHBlZENhcGFjaXR5LCBt
b2RlKSkgewotICAgICAgICBpZiAobW9kZSA9PSBTaWduYWxpbmcpCisgICAgICAgIGlmIChtb2Rl
ID09IE1vZGU6OlNpZ25hbGluZykKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
ICAgIGlmIChPcHRpb25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkgPyB0cnVlIDog
IW1tYXBCeXRlcyhtYXBwZWRDYXBhY2l0eSwgbWVtb3J5KSkgewpAQCAtMjI3LDcgKzIyOCw4IEBA
IFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9Ci0gICAgCisKKyAgICBBU1NFUlQobW9kZSAhPSBNb2RlOjpOb25lKTsKICAgICBs
YXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IG1vZGU7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
Ik1lbW9yeTo6Y3JlYXRlIG1tYXAgc3VjY2VlZGVkIik7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNZW1vcnkobWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBtYXBwZWRDYXBhY2l0eSwgbW9kZSkp
OwpAQCAtMjM2LDEzICsyMzgsMTUgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJbXBs
KFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLAogUmVmUHRyPE1l
bW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFy
YW50ZWVkIGJ5IG91ciBjYWxsZXIuCisgICAgUkVMRUFTRV9BU1NFUlQoKCEhbWF4aW11bSAmJiAo
bWF4aW11bS5ieXRlcygpID09IDApKSA9PSAobW9kZSAmJiAqbW9kZSA9PSBNb2RlOjpOb25lKSk7
IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KICAgICBSZWZQdHI8
TWVtb3J5PiByZXN1bHQgPSBjcmVhdGVJbXBsKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBtb2RlKTsK
ICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9PSBTaWduYWxp
bmcpCisgICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9PSBNb2RlOjpTaWduYWxpbmcpCiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQtPm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1l
bW9yeU1hcHBlZEJ5dGVzKTsKICAgICAgICAgaWYgKG1vZGUpCiAgICAgICAgICAgICBBU1NFUlQo
Km1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpOwotICAgICAgICBBU1NFUlQobGFzdEFsbG9jYXRlZE1l
bW9yeU1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpOworCisgICAgICAgIEFTU0VSVCgocmVzdWx0LT5t
b2RlKCkgPT0gTW9kZTo6Tm9uZSkgPyAobGFzdEFsbG9jYXRlZE1lbW9yeU1vZGUgIT0gTW9kZTo6
Tm9uZSkgOiAobGFzdEFsbG9jYXRlZE1lbW9yeU1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpKTsKICAg
ICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI3OSw3ICsyODMsNyBAQCBib29sIE1lbW9y
eTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgQVNTRVJUKG1vZGUoKSAhPSBTaWduYWxpbmcpOworICAgIEFTU0VSVChtb2RlKCkgIT0g
TW9kZTo6U2lnbmFsaW5nKTsKICAgICAvLyBPdGhlcndpc2UsIGxldCdzIHRyeSB0byBtYWtlIHNv
bWUgbmV3IG1lbW9yeS4KICAgICB2b2lkKiBuZXdNZW1vcnkgPSBtbWFwKG51bGxwdHIsIGRlc2ly
ZWRTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAt
MSwgMCk7CiAgICAgaWYgKG5ld01lbW9yeSA9PSBNQVBfRkFJTEVEKQpAQCAtMzA2LDYgKzMxMCw3
IEBAIHZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiBjb25zdCBjaGFy
KiBNZW1vcnk6Om1ha2VTdHJpbmcoTW9kZSBtb2RlKSBjb25zdAogewogICAgIHN3aXRjaCAobW9k
ZSkgeworICAgIGNhc2UgTW9kZTo6Tm9uZTogcmV0dXJuICJOb25lIjsKICAgICBjYXNlIE1vZGU6
OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKICAgICBjYXNlIE1vZGU6
OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOwogICAgIGNhc2UgTW9kZTo6TnVtYmVyT2ZN
b2RlczogYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKaW5kZXgg
NjMwMGE1OS4uZjc4MTA4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01MSwxMSArNTEsMTMgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChXVEY6OlByaW50U3RyZWFt
JikgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMu
IHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwotICAg
IGVudW0gTW9kZSB7CisgICAgZW51bSBjbGFzcyBNb2RlIHsKKyAgICAgICAgTm9uZSwKICAgICAg
ICAgQm91bmRzQ2hlY2tpbmcsCiAgICAgICAgIFNpZ25hbGluZywKICAgICAgICAgTnVtYmVyT2ZN
b2RlcwogICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZNb2RlcyA9
IHN0YXRpY19jYXN0PHNpemVfdD4oTW9kZTo6TnVtYmVyT2ZNb2Rlcyk7CiAgICAgY29uc3QgY2hh
ciogbWFrZVN0cmluZyhNb2RlKSBjb25zdDsKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAppbmRleCAyNGYxODE1Li4xMmUx
MjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5m
b3JtYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJ
bmZvcm1hdGlvbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODEsMTEgKzgxLDIwIEBAIE1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJ
bmZvcm1hdGlvbihWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11CiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoISFtX2luaXRpYWwpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFt
X21heGltdW0gfHwgbV9tYXhpbXVtID49IG1faW5pdGlhbCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
cmVjb21waWxlTW9kZSA/IHJlY29tcGlsZU1vZGUgIT0gTWVtb3J5OjpNb2RlOjpOb25lIDogdHJ1
ZSk7CiAgICAgQVNTRVJUKCEhKnRoaXMpOwogCiAgICAgaWYgKCFyZWNvbXBpbGVNb2RlKSB7CiAg
ICAgICAgIGlmICghaXNJbXBvcnQpIHsKLSAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkgPSBN
ZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5OjpTaWduYWxpbmcpOwor
ICAgICAgICAgICAgaWYgKG1heGltdW0gJiYgbWF4aW11bS5ieXRlcygpID09IDApIHsKKyAgICAg
ICAgICAgICAgICBtX3Jlc2VydmVkTWVtb3J5ID0gTWVtb3J5OjpjcmVhdGUodm0sIGluaXRpYWws
IG1heGltdW0sIE1lbW9yeTo6TW9kZTo6Tm9uZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV9yZXNlcnZlZE1lbW9yeSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpID09IE1lbW9yeTo6TW9kZTo6Tm9uZSk7CisgICAgICAg
ICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9yZXNlcnZlZE1lbW9y
eSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnk6Ok1vZGU6OlNp
Z25hbGluZyk7CiAgICAgICAgICAgICBpZiAobV9yZXNlcnZlZE1lbW9yeSkgewogICAgICAgICAg
ICAgICAgIEFTU0VSVCghISptX3Jlc2VydmVkTWVtb3J5KTsKICAgICAgICAgICAgICAgICBtX21v
ZGUgPSBtX3Jlc2VydmVkTWVtb3J5LT5tb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCmluZGV4IGIyMWY4
YTUuLmVmNDBiODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAKIGJvb2wgSlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5
KQogewotICAgIGlmIChtb2RlKCkgPT0gV2FzbTo6TWVtb3J5OjpTaWduYWxpbmcpCisgICAgaWYg
KG1vZGUoKSA9PSBXYXNtOjpNZW1vcnk6Ok1vZGU6OlNpZ25hbGluZykKICAgICAgICAgcmV0dXJu
IG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpID09IG1vZGUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5jcHAKaW5kZXggNTZmMjBiNC4uZGUyMjhmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsNyArOTIsNyBA
QCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2so
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tz
W2ldLmdldCgpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9jb2RlQmxvY2tzW21vZGVdKTsKKyAg
ICBBU1NFUlQoIWNvZGVCbG9ja0Zvcihtb2RlKSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrIGZvciB0
aGlzIG1vZGUsIHdlIG5lZWQgdG8gcmVjb21waWxlLi4uCiAgICAgV2FzbTo6UGxhbiBwbGFuKCZ2
bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fc291cmNlQnVmZmVyLT5kYXRhKCkpLCBtX3NvdXJj
ZUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2soVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsCiAgICAgfQogCiAgICAgQVNTRVJUKG1vZGUgPT0gY29kZUJsb2NrLT5tb2RlKCkp
OwotICAgIG1fY29kZUJsb2Nrc1ttb2RlXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAg
Y29kZUJsb2NrRm9yKG1vZGUpLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKICAgICByZXR1cm4g
Y29kZUJsb2NrOwogfQogCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9k
dWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWludDhfdCogc291
cmMKICAgICBtX3NvdXJjZUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoc291cmNlLCBieXRl
U2l6ZSk7CiAgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4udGFrZU1vZHVsZUluZm9ybWF0
aW9uKCk7CiAgICAgbV9leHBvcnRTeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIGV4cG9ydFN5bWJv
bFRhYmxlKTsKLSAgICBtX2NvZGVCbG9ja3NbY29kZUJsb2NrLT5tb2RlKCldLnNldCh2bSwgdGhp
cywgY29kZUJsb2NrKTsKKyAgICBjb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5tb2RlKCkpLnNldCh2
bSwgdGhpcywgY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaAppbmRleCA3MDQwNjhjLi44Y2E5NzZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCkBA
IC02MiwxMSArNjIsMTIgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFJldHVybnMgdGhlIGNv
ZGUgYmxvY2sgdGhhdCB0aGlzIG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxlZCBleHBlY3Rp
bmcgdG8gdXNlLiBUaGlzIHdvbid0IG5lZWQgdG8gcmVjb21waWxlLgotICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1ttX21vZHVsZUlu
Zm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpXS5nZXQoKTsgfQorICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIGNvZGVCbG9ja0ZvcihtX21vZHVsZUluZm9ybWF0
aW9uLT5tZW1vcnkubW9kZSgpKS5nZXQoKTsgfQogICAgIC8vIFJldHVybnMgdGhlIGFwcHJvcHJp
YXRlIGNvZGUgYmxvY2sgZm9yIHRoZSBnaXZlbiBtZW1vcnksIHBvc3NpYmx5IHRyaWdnZXJpbmcg
YSByZWNvbXBpbGUuCiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFZNJiwg
RXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOwogCiBwcml2YXRlOgorICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiYgY29kZUJsb2NrRm9yKFdhc206Ok1lbW9y
eTo6TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Piht
b2RlKV07IH0KICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBidWlsZENvZGVCbG9jayhWTSYs
IEV4ZWNTdGF0ZSosIFdhc206OlBsYW4mLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeTo6TW9k
ZT4gbW9kZSA9IHN0ZDo6bnVsbG9wdCk7CiAKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwg
U3RydWN0dXJlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCA3ZjA3MzA1
Li44MjM0YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU4LDcgKzI1OCwx
MSBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
cjo6Y3JlYXRlSW5zdGFuY2UoRXhlY1N0YXRlKgogICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1l
bW9yeT4gbWVtb3J5OwogICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5o
YXNSZXNlcnZlZE1lbW9yeSgpKQogICAgICAgICAgICAgICAgIG1lbW9yeSA9IGpzTW9kdWxlLT50
YWtlUmVzZXJ2ZWRNZW1vcnkoKTsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZWxz
ZSBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSAmJiBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkubWF4aW11bSgpLmJ5dGVzKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIC8v
IEFuIGVtcHR5IG1lbW9yeSBkZWZpbml0aW9uIHNob3VsZCBhbHdheXMgc3VjY2VlZC4KKyAgICAg
ICAgICAgICAgICBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3Jt
YXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0o
KSwgV2FzbTo6TWVtb3J5OjpNb2RlOjpOb25lKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChtZW1vcnkpOworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtZW1v
cnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmlu
aXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFtZW1vcnkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3Bw
CmluZGV4IDUxMTI5ZTMuLmU4NWYwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk2
LDkgKzk2LDE2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2
bSwgaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCk7Ci0gICAgaWYgKCFtZW1vcnkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOworICAgIFJlZlB0cjxXYXNt
OjpNZW1vcnk+IG1lbW9yeTsKKyAgICBpZiAobWF4aW11bVBhZ2VDb3VudCAmJiBtYXhpbXVtUGFn
ZUNvdW50LmJ5dGVzKCkgPT0gMCkgeworICAgICAgICAvLyBBbiBlbXB0eSBtZW1vcnkgZGVmaW5p
dGlvbiBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuCisgICAgICAgIG1lbW9yeSA9IFdhc206Ok1lbW9y
eTo6Y3JlYXRlKHZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBXYXNtOjpN
ZW1vcnk6Ok1vZGU6Ok5vbmUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0
aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50KTsKKyAgICAgICAgaWYgKCFtZW1vcnkpCisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKKyAgICB9CiAKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBh
ZG9wdFJlZigqbWVtb3J5LmxlYWtSZWYoKSkpKTsKIH0KLS0gCjIuMTAuMQoK
</data>
<flag name="review"
          id="326334"
          type_id="1"
          status="-"
          setter="jfbastien"
    />
    <flag name="commit-queue"
          id="326335"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304950</attachid>
            <date>2017-03-20 14:38:52 -0700</date>
            <delta_ts>2017-03-21 12:46:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-memory-wast-js.patch</filename>
            <type>text/plain</type>
            <size>21648</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA1NjY2MzU2ZTJmNjcwNTU4NzUwY2VjYTI4ZmMxMGEyNDEzYjE3NjU1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IE1hciAyMDE3IDE3OjAzOjQzIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gbWVtb3J5
LXdhc3QtanMKCi0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgfCA0NyArKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgICB8ICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDUzICsrKysrKysrKysrKysrKystLS0t
LS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCAgICAgICAgICAgIHwg
IDYgKystCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3Bw
ICB8IDEzICsrKysrLQogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgICAg
ICAgICAgICAgfCAyMSArKysrKysrLS0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuY3BwIHwgIDggKystLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5oICAgfCAgMyArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yLmNwcCAgICAgfCAgOCArKystCiAuLi4vd2FzbS9qcy9XZWJBc3Nl
bWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcCAgICAgICB8IDE1ICsrKystLQogMTAgZmlsZXMgY2hh
bmdlZCwgMTQ1IGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCmluZGV4IGYxNzhjMWQuLmY4NTlmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUwIEBACisyMDE3LTAzLTE3ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxl
LmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogc3BlYy10ZXN0cy9tZW1vcnkud2FzdC5qcyBm
YWlscyBpbiBkZWJ1ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5Nzk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlIGZhaWx1cmUgd2FzIGR1ZSB0byBlbXB0eSBtZW1vcmllcyAod2l0aCBtYXhpbXVt
IHNpemUgMCkuIFRob3NlCisgICAgICAgIG9ubHkgb2NjdXIgaW4gdGVzdHMgYW5kIGluIGNvZGUg
dGhhdCdzIHRyeWluZyB0byB0cmlwIHVzLiBUaGlzCisgICAgICAgIHBhdGNoIGFkZHMgbWVtb3J5
IG1vZGUgIm5vbmUiIHdoaWNoIHJlcHJlc2VudHMgbm8gbWVtb3J5LiBJdCBjYW4KKyAgICAgICAg
d29yayB3aXRoIGVpdGhlciBib3VuZHMgY2hlY2tlZCBvciBzaWduYWxpbmcgY29kZSBiZWNhdXNl
IGl0IG5ldmVyCisgICAgICAgIGNvbnRhaW5zIGxvYWRzIGFuZCBzdG9yZXMuCisKKyAgICAgICAg
VGhlIHNwZWMgdGVzdHMgd2hpY2ggd2VyZSBmYWlsaW5nIGRpZCB0aGUgZm9sbG93aW5nOgorICAg
ICAgICAgICAgPiAobW9kdWxlIChtZW1vcnkgKGRhdGEpKSAoZnVuYyAoZXhwb3J0ICJtZW1zaXpl
IikgKHJlc3VsdCBpMzIpIChjdXJyZW50X21lbW9yeSkpKQorICAgICAgICAgICAgPiAoYXNzZXJ0
X3JldHVybiAoaW52b2tlICJtZW1zaXplIikgKGkzMi5jb25zdCAwKSkKKyAgICAgICAgICAgID4g
KG1vZHVsZSAobWVtb3J5IChkYXRhICIiKSkgKGZ1bmMgKGV4cG9ydCAibWVtc2l6ZSIpIChyZXN1
bHQgaTMyKSAoY3VycmVudF9tZW1vcnkpKSkKKyAgICAgICAgICAgID4gKGFzc2VydF9yZXR1cm4g
KGludm9rZSAibWVtc2l6ZSIpIChpMzIuY29uc3QgMCkpCisgICAgICAgICAgICA+IChtb2R1bGUg
KG1lbW9yeSAoZGF0YSAieCIpKSAoZnVuYyAoZXhwb3J0ICJtZW1zaXplIikgKHJlc3VsdCBpMzIp
IChjdXJyZW50X21lbW9yeSkpKQorICAgICAgICAgICAgPiAoYXNzZXJ0X3JldHVybiAoaW52b2tl
ICJtZW1zaXplIikgKGkzMi5jb25zdCAxKSkKKworICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjptZW1vcnlLaW5k
KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0
cnlHZXRGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVsZWFzZUZhc3RNZW1vcnkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TWVtb3J5OjptYWtlU3RyaW5nKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoK
KyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbik6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9SdW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrRm9yKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlNZW1vcnkpOgorCiAyMDE3LTAzLTE3ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBVU0VfSU5URVJOQUxfU0RLIHRvIGNvbXB1
dGUgRU5BQkxFX0ZBU1RfSklUX1BFUk1JU1NJT05TIGluc3RlYWQgb2YgSEFWRV9JTlRFUk5BTF9T
REsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cAppbmRleCAwYTJlNWNjLi40ZjYwNDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5NCw3ICs0OTQsNyBAQCBpbmxpbmUgdWludDMy
X3Qgc2l6ZU9mTG9hZE9wKExvYWRPcFR5cGUgb3ApCiAKIGlubGluZSBCMzo6S2luZCBCM0lSR2Vu
ZXJhdG9yOjptZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApCiB7Ci0gICAgaWYgKG1faW5m
by5tZW1vcnkubW9kZSgpID09IE1lbW9yeTo6U2lnbmFsaW5nKQorICAgIGlmIChtX2luZm8ubWVt
b3J5Lm1vZGUoKSA9PSBNZW1vcnk6Ok1vZGU6OlNpZ25hbGluZykKICAgICAgICAgcmV0dXJuIHRy
YXBwaW5nKG1lbW9yeU9wKTsKICAgICByZXR1cm4gbWVtb3J5T3A7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGViMWRkNzguLjU3NjBkMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNiw3ICsxMDYsNyBAQCBp
bmxpbmUgYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwgdm9pZComIG1lbW9yeSwgc2l6ZV90
JiBtYXBwZWRDYXBhY2l0eSwgTWVtbwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBhY3RpdmVG
YXN0TWVtb3JpZXMobG9ja2VyKS5hZGQobWVtb3J5KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgICAgICBtYXBwZWRDYXBhY2l0
eSA9IGZhc3RNZW1vcnlNYXBwZWRCeXRlczsKLSAgICAgICAgICAgIG1vZGUgPSBNZW1vcnk6OlNp
Z25hbGluZzsKKyAgICAgICAgICAgIG1vZGUgPSBNZW1vcnk6Ok1vZGU6OlNpZ25hbGluZzsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTEyNSw3ICsxMjUsNyBAQCBpbmxpbmUgYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwg
dm9pZComIG1lbW9yeSwgc2l6ZV90JiBtYXBwZWRDYXBhY2l0eSwgTWVtbwogCiAgICAgaWYgKG1t
YXBCeXRlcyhmYXN0TWVtb3J5TWFwcGVkQnl0ZXMsIG1lbW9yeSkpIHsKICAgICAgICAgbWFwcGVk
Q2FwYWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXM7Ci0gICAgICAgIG1vZGUgPSBNZW1vcnk6
OlNpZ25hbGluZzsKKyAgICAgICAgbW9kZSA9IE1lbW9yeTo6TW9kZTo6U2lnbmFsaW5nOwogICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtZW1vcnlMb2NrKTsKICAgICAgICAgYWxsb2NhdGVkRmFz
dE1lbW9yaWVzKys7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVzKGxv
Y2tlcikuYWRkKG1lbW9yeSk7CkBAIC0xMzYsNyArMTM2LDcgQEAgaW5saW5lIGJvb2wgdHJ5R2V0
RmFzdE1lbW9yeShWTSYgdm0sIHZvaWQqJiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHks
IE1lbW8KIAogaW5saW5lIHZvaWQgcmVsZWFzZUZhc3RNZW1vcnkodm9pZComIG1lbW9yeSwgc2l6
ZV90IHdyaXRhYmxlU2l6ZSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnk6Ok1vZGUgbW9k
ZSkKIHsKLSAgICBpZiAobW9kZSAhPSBNZW1vcnk6OlNpZ25hbGluZyB8fCAhbWVtb3J5KQorICAg
IGlmIChtb2RlICE9IE1lbW9yeTo6TW9kZTo6U2lnbmFsaW5nIHx8ICFtZW1vcnkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFJFTEVBU0VfQVNTRVJUKG1lbW9yeSAmJiBtYXBwZWRDYXBhY2l0eSA9
PSBmYXN0TWVtb3J5TWFwcGVkQnl0ZXMpOwpAQCAtMTU3LDggKzE1NywxMCBAQCBpbmxpbmUgdm9p
ZCByZWxlYXNlRmFzdE1lbW9yeSh2b2lkKiYgbWVtb3J5LCBzaXplX3Qgd3JpdGFibGVTaXplLCBz
aXplX3QgbWFwcGVkQwogTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXVtKQogICAgIDogbV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBtX21heGltdW0obWF4
aW11bSkKKyAgICAsIG1fbW9kZShNb2RlOjpOb25lKQogewogICAgIEFTU0VSVCghaW5pdGlhbC5i
eXRlcygpKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2Nh
dGluZyAiLCAqdGhpcyk7CiB9CiAKIE1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNv
dW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1v
ZGUgbW9kZSkKQEAgLTE3NiwxNiArMTc4LDE2IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3Jl
YXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBU
aGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCiAKLSAgICBNb2RlIG1vZGUg
PSByZXF1aXJlZE1vZGUgPyAqcmVxdWlyZWRNb2RlIDogQm91bmRzQ2hlY2tpbmc7CisgICAgTW9k
ZSBtb2RlID0gcmVxdWlyZWRNb2RlID8gKnJlcXVpcmVkTW9kZSA6IE1vZGU6OkJvdW5kc0NoZWNr
aW5nOwogICAgIGNvbnN0IHNpemVfdCBzaXplID0gaW5pdGlhbC5ieXRlcygpOwogICAgIHNpemVf
dCBtYXBwZWRDYXBhY2l0eSA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdlQ291bnQ6
Om1heCgpLmJ5dGVzKCk7CiAgICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0cjsKIAogICAgIGF1dG8g
bWFrZUVtcHR5TWVtb3J5ID0gWyZdICgpIC0+IFJlZlB0cjxNZW1vcnk+IHsKLSAgICAgICAgaWYg
KG1vZGUgPT0gU2lnbmFsaW5nKQorICAgICAgICBpZiAobW9kZSA9PSBNb2RlOjpTaWduYWxpbmcp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBsYXN0QWxsb2NhdGVkTWVt
b3J5TW9kZSA9IEJvdW5kc0NoZWNraW5nOworICAgICAgICBsYXN0QWxsb2NhdGVkTWVtb3J5TW9k
ZSA9IE1vZGU6OkJvdW5kc0NoZWNraW5nOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1l
bW9yeShpbml0aWFsLCBtYXhpbXVtKSk7CiAgICAgfTsKIApAQCAtMTk2LDkgKzE5OCw5IEBAIFJl
ZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFs
LCBQYWdlQ291bnQgbWF4aW11bSwKICAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1lbW9yeSgpOwog
ICAgIH0KIAotICAgIGJvb2wgY2FuVXNlRmFzdE1lbW9yeSA9ICFyZXF1aXJlZE1vZGUgfHwgcmVx
dWlyZWRNb2RlID09IFNpZ25hbGluZzsKKyAgICBib29sIGNhblVzZUZhc3RNZW1vcnkgPSAhcmVx
dWlyZWRNb2RlIHx8IHJlcXVpcmVkTW9kZSA9PSBNb2RlOjpTaWduYWxpbmc7CiAgICAgaWYgKCFj
YW5Vc2VGYXN0TWVtb3J5IHx8ICF0cnlHZXRGYXN0TWVtb3J5KHZtLCBtZW1vcnksIG1hcHBlZENh
cGFjaXR5LCBtb2RlKSkgewotICAgICAgICBpZiAobW9kZSA9PSBTaWduYWxpbmcpCisgICAgICAg
IGlmIChtb2RlID09IE1vZGU6OlNpZ25hbGluZykKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgIGlmIChPcHRpb25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkg
PyB0cnVlIDogIW1tYXBCeXRlcyhtYXBwZWRDYXBhY2l0eSwgbWVtb3J5KSkgewpAQCAtMjE5LDYg
KzIyMSw3IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwKIAogICAgIEFTU0VSVChtZW1vcnkgJiYg
c2l6ZSA8PSBtYXBwZWRDYXBhY2l0eSk7CiAgICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgc2l6ZSwg
UFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlz
IGV2ZXIgb2NjdXI/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4
OTAKICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1wcm90ZWN0
IGZhaWxlZCIpOwogICAgICAgICByZWxlYXNlRmFzdE1lbW9yeShtZW1vcnksIDAsIG1hcHBlZENh
cGFjaXR5LCBtb2RlKTsKICAgICAgICAgaWYgKG1lbW9yeSkgewpAQCAtMjI3LDcgKzIzMCw4IEBA
IFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9Ci0gICAgCisKKyAgICBBU1NFUlQobW9kZSAhPSBNb2RlOjpOb25lKTsKICAgICBs
YXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IG1vZGU7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
Ik1lbW9yeTo6Y3JlYXRlIG1tYXAgc3VjY2VlZGVkIik7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNZW1vcnkobWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBtYXBwZWRDYXBhY2l0eSwgbW9kZSkp
OwpAQCAtMjM2LDEzICsyNDAsMTUgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJbXBs
KFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLAogUmVmUHRyPE1l
bW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFy
YW50ZWVkIGJ5IG91ciBjYWxsZXIuCisgICAgUkVMRUFTRV9BU1NFUlQoKCEhbWF4aW11bSAmJiAo
bWF4aW11bS5ieXRlcygpID09IDApKSA9PSAobW9kZSAmJiAqbW9kZSA9PSBNb2RlOjpOb25lKSk7
IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KICAgICBSZWZQdHI8
TWVtb3J5PiByZXN1bHQgPSBjcmVhdGVJbXBsKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBtb2RlKTsK
ICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9PSBTaWduYWxp
bmcpCisgICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9PSBNb2RlOjpTaWduYWxpbmcpCiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQtPm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1l
bW9yeU1hcHBlZEJ5dGVzKTsKICAgICAgICAgaWYgKG1vZGUpCiAgICAgICAgICAgICBBU1NFUlQo
Km1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpOwotICAgICAgICBBU1NFUlQobGFzdEFsbG9jYXRlZE1l
bW9yeU1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpOworCisgICAgICAgIEFTU0VSVCgocmVzdWx0LT5t
b2RlKCkgPT0gTW9kZTo6Tm9uZSkgPyAobGFzdEFsbG9jYXRlZE1lbW9yeU1vZGUgIT0gTW9kZTo6
Tm9uZSkgOiAobGFzdEFsbG9jYXRlZE1lbW9yeU1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpKTsKICAg
ICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI2OCw4ICsyNzQsMjQgQEAgYm9vbCBNZW1v
cnk6Omdyb3coUGFnZUNvdW50IG5ld1NpemUpCiAKICAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBu
ZXdTaXplLmJ5dGVzKCk7CiAKKyAgICBzd2l0Y2ggKG1vZGUoKSkgeworICAgIGNhc2UgTW9kZTo6
Tm9uZToKKyAgICAgICAgLy8gVGhpcyBjYW4ndCBoYXBwZW46IGdyb3cgaXMgb25seSBjYWxsZWQg
aWYgYWN0dWFsIGdyb3d0aCBuZWVkcyB0byBvY2N1ci4gTm9uZSBtb2RlIG1lbW9yeSBjYW5ub3Qg
Z3JvdyBwYXN0IGEgc2l6ZSBvZiAwLgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNb2RlOjpCb3VuZHNDaGVja2lu
ZzoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNb2RlOjpTaWduYWxpbmc6CisgICAgICAgIC8v
IFNpZ25hbGluZyBtZW1vcnkgbXVzdCBoYXZlIGJlZW4gcHJlLWFsbG9jYXRlZCB2aXJ0dWFsbHku
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbWVtb3J5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNb2RlOjpOdW1iZXJPZk1vZGVzOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKwogICAgIGlmIChtX21lbW9yeSAmJiBkZXNpcmVkU2l6ZSA8PSBtX21h
cHBlZENhcGFjaXR5KSB7CiAgICAgICAgIGlmIChtcHJvdGVjdChzdGF0aWNfY2FzdDx1aW50OF90
Kj4obV9tZW1vcnkpICsgbV9zaXplLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRlc2lyZWRTaXplIC0g
bV9zaXplKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBzaG91bGQgdGhpcyBldmVyIG9jY3VyPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5ODkwCiAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5
Ojpncm93IGluLXBsYWNlIGZhaWxlZCAiLCAqdGhpcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTI3OSw4ICszMDEsMTIgQEAgYm9vbCBNZW1vcnk6Omdyb3coUGFn
ZUNvdW50IG5ld1NpemUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEFTU0VS
VChtb2RlKCkgIT0gU2lnbmFsaW5nKTsKKyAgICAvLyBOb25lIGFuZCBTaWduYWxpbmcgbWVtb3J5
IGNhbid0IGdyb3cgcGFzdCB0aGVpciBhbHJlYWR5LW1hcHBlZCBzaXplLgorICAgIFJFTEVBU0Vf
QVNTRVJUKG1vZGUoKSAhPSBNb2RlOjpOb25lKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtb2RlKCkg
IT0gTW9kZTo6U2lnbmFsaW5nKTsKKwogICAgIC8vIE90aGVyd2lzZSwgbGV0J3MgdHJ5IHRvIG1h
a2Ugc29tZSBuZXcgbWVtb3J5LgorICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIGlmIHdl
IGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjM2MDAKICAgICB2b2lkKiBuZXdNZW1vcnkgPSBtbWFwKG51bGxwdHIs
IGRlc2lyZWRTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9B
Tk9OLCAtMSwgMCk7CiAgICAgaWYgKG5ld01lbW9yeSA9PSBNQVBfRkFJTEVEKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0zMDYsNiArMzMyLDcgQEAgdm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKIGNvbnN0IGNoYXIqIE1lbW9yeTo6bWFrZVN0cmluZyhNb2RlIG1v
ZGUpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBNb2RlOjpOb25lOiBy
ZXR1cm4gIk5vbmUiOwogICAgIGNhc2UgTW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91
bmRzQ2hlY2tpbmciOwogICAgIGNhc2UgTW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGlu
ZyI7CiAgICAgY2FzZSBNb2RlOjpOdW1iZXJPZk1vZGVzOiBicmVhazsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCA2MzAwYTU5Li5mNzgxMDgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDExICs1MSwxMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkdW1wKFdURjo6UHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCi0gICAgZW51bSBNb2RlIHsKKyAgICBlbnVtIGNsYXNz
IE1vZGUgeworICAgICAgICBOb25lLAogICAgICAgICBCb3VuZHNDaGVja2luZywKICAgICAgICAg
U2lnbmFsaW5nLAogICAgICAgICBOdW1iZXJPZk1vZGVzCiAgICAgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBOdW1iZXJPZk1vZGVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihNb2RlOjpO
dW1iZXJPZk1vZGVzKTsKICAgICBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1vZGUpIGNvbnN0Owog
CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9tZW1vcnk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3Jt
YXRpb24uY3BwCmluZGV4IDI0ZjE4MTUuLjEyZTEyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSwxMSArODEsMjAg
QEAgTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXUKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghIW1faW5p
dGlhbCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWF4aW11bSB8fCBtX21heGltdW0gPj0gbV9p
bml0aWFsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWNvbXBpbGVNb2RlID8gcmVjb21waWxlTW9k
ZSAhPSBNZW1vcnk6Ok1vZGU6Ok5vbmUgOiB0cnVlKTsKICAgICBBU1NFUlQoISEqdGhpcyk7CiAK
ICAgICBpZiAoIXJlY29tcGlsZU1vZGUpIHsKICAgICAgICAgaWYgKCFpc0ltcG9ydCkgewotICAg
ICAgICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsLCBt
YXhpbXVtLCBNZW1vcnk6OlNpZ25hbGluZyk7CisgICAgICAgICAgICBpZiAobWF4aW11bSAmJiBt
YXhpbXVtLmJ5dGVzKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkg
PSBNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5OjpNb2RlOjpOb25l
KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Jlc2VydmVkTWVtb3J5KTsKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Jlc2VydmVkTWVtb3J5LT5tb2RlKCkgPT0g
TWVtb3J5OjpNb2RlOjpOb25lKTsKKyAgICAgICAgICAgICAgICBtX21vZGUgPSBtX3Jlc2VydmVk
TWVtb3J5LT5tb2RlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBtX3Jlc2VydmVkTWVtb3J5ID0gTWVtb3J5OjpjcmVhdGUodm0sIGluaXRp
YWwsIG1heGltdW0sIE1lbW9yeTo6TW9kZTo6U2lnbmFsaW5nKTsKICAgICAgICAgICAgIGlmICht
X3Jlc2VydmVkTWVtb3J5KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCEhKm1fcmVzZXJ2ZWRN
ZW1vcnkpOwogICAgICAgICAgICAgICAgIG1fbW9kZSA9IG1fcmVzZXJ2ZWRNZW1vcnktPm1vZGUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5jcHAKaW5kZXggYjIxZjhhNS4uODQ5Y2U4ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5j
cHAKQEAgLTU0LDkgKzU0LDI0IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCiAKIGJvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9S
dW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KQogewotICAgIGlmIChtb2RlKCkgPT0gV2Fz
bTo6TWVtb3J5OjpTaWduYWxpbmcpCi0gICAgICAgIHJldHVybiBtZW1vcnktPm1lbW9yeSgpLm1v
ZGUoKSA9PSBtb2RlKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgV2FzbTo6TWVtb3J5OjpNb2Rl
IGNvZGVNb2RlID0gbW9kZSgpOworICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtZW1vcnlNb2RlID0g
bWVtb3J5LT5tZW1vcnkoKS5tb2RlKCk7CisgICAgc3dpdGNoIChjb2RlTW9kZSkgeworICAgIGNh
c2UgV2FzbTo6TWVtb3J5OjpNb2RlOjpOb25lOgorICAgICAgICAvLyBDb2RlIGluIE5vbmUgbW9k
ZSBwZXJmb3JtcyBubyBtZW1vcnkgYWNjZXNzZXMuIEFueSBtZW1vcnkgd2lsbCBkby4KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBXYXNtOjpNZW1vcnk6Ok1vZGU6OkJvdW5kc0NoZWNr
aW5nOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFdhc206Ok1lbW9yeTo6TW9kZTo6
U2lnbmFsaW5nOgorICAgICAgICAvLyBDb2RlIGJlaW5nIGluIFNpZ25hbGluZyBtb2RlIG1lYW5z
IHRoYXQgaXQgcGVyZm9ybXMgbm8gYm91bmRzIGNoZWNrcy4KKyAgICAgICAgLy8gSXRzIG1lbW9y
eSwgZXZlbiBpZiBlbXB0eSwgYWJzb2x1dGVseSBtdXN0IGFsc28gYmUgaW4gU2lnbmFsaW5nIG1v
ZGUKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgcGFnZSBwcm90ZWN0aW9uIGRldGVjdCBvdXQtb2Yt
Ym91bmRzIGFjY2Vzc2VzLgorICAgICAgICByZXR1cm4gbWVtb3J5TW9kZSA9PSBXYXNtOjpNZW1v
cnk6Ok1vZGU6OlNpZ25hbGluZzsKKyAgICBjYXNlIFdhc206Ok1lbW9yeTo6TW9kZTo6TnVtYmVy
T2ZNb2RlczoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5jcHAKaW5kZXggNTZmMjBiNC4uZGUyMjhmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsNyArOTIsNyBA
QCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2so
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tz
W2ldLmdldCgpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9jb2RlQmxvY2tzW21vZGVdKTsKKyAg
ICBBU1NFUlQoIWNvZGVCbG9ja0Zvcihtb2RlKSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrIGZvciB0
aGlzIG1vZGUsIHdlIG5lZWQgdG8gcmVjb21waWxlLi4uCiAgICAgV2FzbTo6UGxhbiBwbGFuKCZ2
bSwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fc291cmNlQnVmZmVyLT5kYXRhKCkpLCBtX3NvdXJj
ZUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2soVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsCiAgICAgfQogCiAgICAgQVNTRVJUKG1vZGUgPT0gY29kZUJsb2NrLT5tb2RlKCkp
OwotICAgIG1fY29kZUJsb2Nrc1ttb2RlXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAg
Y29kZUJsb2NrRm9yKG1vZGUpLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKICAgICByZXR1cm4g
Y29kZUJsb2NrOwogfQogCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9k
dWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWludDhfdCogc291
cmMKICAgICBtX3NvdXJjZUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoc291cmNlLCBieXRl
U2l6ZSk7CiAgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4udGFrZU1vZHVsZUluZm9ybWF0
aW9uKCk7CiAgICAgbV9leHBvcnRTeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIGV4cG9ydFN5bWJv
bFRhYmxlKTsKLSAgICBtX2NvZGVCbG9ja3NbY29kZUJsb2NrLT5tb2RlKCldLnNldCh2bSwgdGhp
cywgY29kZUJsb2NrKTsKKyAgICBjb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5tb2RlKCkpLnNldCh2
bSwgdGhpcywgY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaAppbmRleCA3MDQwNjhjLi44Y2E5NzZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCkBA
IC02MiwxMSArNjIsMTIgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFJldHVybnMgdGhlIGNv
ZGUgYmxvY2sgdGhhdCB0aGlzIG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxlZCBleHBlY3Rp
bmcgdG8gdXNlLiBUaGlzIHdvbid0IG5lZWQgdG8gcmVjb21waWxlLgotICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1ttX21vZHVsZUlu
Zm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpXS5nZXQoKTsgfQorICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIGNvZGVCbG9ja0ZvcihtX21vZHVsZUluZm9ybWF0
aW9uLT5tZW1vcnkubW9kZSgpKS5nZXQoKTsgfQogICAgIC8vIFJldHVybnMgdGhlIGFwcHJvcHJp
YXRlIGNvZGUgYmxvY2sgZm9yIHRoZSBnaXZlbiBtZW1vcnksIHBvc3NpYmx5IHRyaWdnZXJpbmcg
YSByZWNvbXBpbGUuCiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFZNJiwg
RXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1lbW9yeSopOwogCiBwcml2YXRlOgorICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiYgY29kZUJsb2NrRm9yKFdhc206Ok1lbW9y
eTo6TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Piht
b2RlKV07IH0KICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBidWlsZENvZGVCbG9jayhWTSYs
IEV4ZWNTdGF0ZSosIFdhc206OlBsYW4mLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeTo6TW9k
ZT4gbW9kZSA9IHN0ZDo6bnVsbG9wdCk7CiAKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwg
U3RydWN0dXJlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCA3ZjA3MzA1
Li44MjM0YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjU4LDcgKzI1OCwx
MSBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
cjo6Y3JlYXRlSW5zdGFuY2UoRXhlY1N0YXRlKgogICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1l
bW9yeT4gbWVtb3J5OwogICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5o
YXNSZXNlcnZlZE1lbW9yeSgpKQogICAgICAgICAgICAgICAgIG1lbW9yeSA9IGpzTW9kdWxlLT50
YWtlUmVzZXJ2ZWRNZW1vcnkoKTsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZWxz
ZSBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSAmJiBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkubWF4aW11bSgpLmJ5dGVzKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIC8v
IEFuIGVtcHR5IG1lbW9yeSBkZWZpbml0aW9uIHNob3VsZCBhbHdheXMgc3VjY2VlZC4KKyAgICAg
ICAgICAgICAgICBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3Jt
YXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0o
KSwgV2FzbTo6TWVtb3J5OjpNb2RlOjpOb25lKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChtZW1vcnkpOworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtZW1v
cnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmlu
aXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFtZW1vcnkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3Bw
CmluZGV4IDUxMTI5ZTMuLmU4NWYwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk2
LDkgKzk2LDE2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2
bSwgaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCk7Ci0gICAgaWYgKCFtZW1vcnkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOworICAgIFJlZlB0cjxXYXNt
OjpNZW1vcnk+IG1lbW9yeTsKKyAgICBpZiAobWF4aW11bVBhZ2VDb3VudCAmJiBtYXhpbXVtUGFn
ZUNvdW50LmJ5dGVzKCkgPT0gMCkgeworICAgICAgICAvLyBBbiBlbXB0eSBtZW1vcnkgZGVmaW5p
dGlvbiBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuCisgICAgICAgIG1lbW9yeSA9IFdhc206Ok1lbW9y
eTo6Y3JlYXRlKHZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBXYXNtOjpN
ZW1vcnk6Ok1vZGU6Ok5vbmUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0
aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50KTsKKyAgICAgICAgaWYgKCFtZW1vcnkpCisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKKyAgICB9CiAKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBh
ZG9wdFJlZigqbWVtb3J5LmxlYWtSZWYoKSkpKTsKIH0KLS0gCjIuMTAuMQoK
</data>
<flag name="review"
          id="326433"
          type_id="1"
          status="-"
          setter="keith_miller"
    />
    <flag name="commit-queue"
          id="326434"
          type_id="3"
          status="-"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305014</attachid>
            <date>2017-03-21 12:46:43 -0700</date>
            <delta_ts>2017-03-23 17:04:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-memory-wast-js.patch</filename>
            <type>text/plain</type>
            <size>37631</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBhNzIxOTI1YTFjNGVlMzUzMTI5NDA0ZjE1NTEyNmIxMzIxMDNhMTU4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IE1hciAyMDE3IDE3OjAzOjQzIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gbWVtb3J5
LXdhc3QtanMKCi0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgfCA0NyArKysrKysrKysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaCAgIHwgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgIDYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnkuY3BwICAgICAgICAgIHwgODkgKysrKysrKysrKysrKystLS0tLS0tLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAzMiAr
KysrLS0tLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNw
cCAgfCAxNSArKystCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3Jt
YXRpb24uaCB8ICA2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmggICAgICB8ICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5j
cHAgICAgICAgICAgICB8ICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5oICAgICAgICAgICAgICB8ICA2ICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmNwcCAgICAgICAgICAgICB8IDIzICsrKysrLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggfCAgMiArLQogLi4uL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgfCAxNiArKy0tCiAuLi4vSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggICB8ICA3ICstCiAuLi4vd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAgICB8ICA4ICstCiAuLi4vd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcCAgICAgICB8IDE1ICsrKy0KIDE2IGZp
bGVzIGNoYW5nZWQsIDIwMCBpbnNlcnRpb25zKCspLCA4OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCBmMTc4YzFkLi5mODU5ZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxNy0wMy0xNyAgSkYgQmFzdGllbiAgPGpmYmFzdGll
bkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IHNwZWMtdGVzdHMvbWVtb3J5Lndh
c3QuanMgZmFpbHMgaW4gZGVidWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2OTc5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoZSBmYWlsdXJlIHdhcyBkdWUgdG8gZW1wdHkgbWVtb3JpZXMgKHdpdGgg
bWF4aW11bSBzaXplIDApLiBUaG9zZQorICAgICAgICBvbmx5IG9jY3VyIGluIHRlc3RzIGFuZCBp
biBjb2RlIHRoYXQncyB0cnlpbmcgdG8gdHJpcCB1cy4gVGhpcworICAgICAgICBwYXRjaCBhZGRz
IG1lbW9yeSBtb2RlICJub25lIiB3aGljaCByZXByZXNlbnRzIG5vIG1lbW9yeS4gSXQgY2FuCisg
ICAgICAgIHdvcmsgd2l0aCBlaXRoZXIgYm91bmRzIGNoZWNrZWQgb3Igc2lnbmFsaW5nIGNvZGUg
YmVjYXVzZSBpdCBuZXZlcgorICAgICAgICBjb250YWlucyBsb2FkcyBhbmQgc3RvcmVzLgorCisg
ICAgICAgIFRoZSBzcGVjIHRlc3RzIHdoaWNoIHdlcmUgZmFpbGluZyBkaWQgdGhlIGZvbGxvd2lu
ZzoKKyAgICAgICAgICAgID4gKG1vZHVsZSAobWVtb3J5IChkYXRhKSkgKGZ1bmMgKGV4cG9ydCAi
bWVtc2l6ZSIpIChyZXN1bHQgaTMyKSAoY3VycmVudF9tZW1vcnkpKSkKKyAgICAgICAgICAgID4g
KGFzc2VydF9yZXR1cm4gKGludm9rZSAibWVtc2l6ZSIpIChpMzIuY29uc3QgMCkpCisgICAgICAg
ICAgICA+IChtb2R1bGUgKG1lbW9yeSAoZGF0YSAiIikpIChmdW5jIChleHBvcnQgIm1lbXNpemUi
KSAocmVzdWx0IGkzMikgKGN1cnJlbnRfbWVtb3J5KSkpCisgICAgICAgICAgICA+IChhc3NlcnRf
cmV0dXJuIChpbnZva2UgIm1lbXNpemUiKSAoaTMyLmNvbnN0IDApKQorICAgICAgICAgICAgPiAo
bW9kdWxlIChtZW1vcnkgKGRhdGEgIngiKSkgKGZ1bmMgKGV4cG9ydCAibWVtc2l6ZSIpIChyZXN1
bHQgaTMyKSAoY3VycmVudF9tZW1vcnkpKSkKKyAgICAgICAgICAgID4gKGFzc2VydF9yZXR1cm4g
KGludm9rZSAibWVtc2l6ZSIpIChpMzIuY29uc3QgMSkpCisKKyAgICAgICAgKiB3YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6bWVt
b3J5S2luZCk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6dHJ5R2V0RmFzdE1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OnJlbGVhc2VGYXN0
TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgorICAgICAgICAo
SlNDOjpXYXNtOjpNZW1vcnk6OmNyZWF0ZUltcGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1v
cnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisgICAgICAg
IChKU0M6Oldhc206Ok1lbW9yeTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNtTWVt
b3J5Lmg6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24pOgorICAg
ICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9k
dWxlOjpjb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9ja0Zvcik6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZUluc3RhbmNlKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKwogMjAxNy0wMy0xNyAgTWljaGFlbCBTYWJv
ZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgVVNFX0lOVEVSTkFMX1NESyB0
byBjb21wdXRlIEVOQUJMRV9GQVNUX0pJVF9QRVJNSVNTSU9OUyBpbnN0ZWFkIG9mIEhBVkVfSU5U
RVJOQUxfU0RLCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmgKaW5kZXggNDVkMGNkOS4uZmU4YzNmMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApAQCAtNDQsNyAr
NDQsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVj
dHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3Jl
YXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+
JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgZXhpdFN0dWJz
LCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisgICAgc3Rh
dGljIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIG93bmVyLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxX
YXNtOjpXYXNtRXhpdFN0dWJzPiYmIGV4aXRTdHVicywgV2FzbTo6TWVtb3J5TW9kZSBtb2RlLCB1
bnNpZ25lZCBjYWxsZWVDb3VudCkKICAgICB7CiAgICAgICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXAsIGFs
bG9jYXRpb25TaXplKGNhbGxlZUNvdW50KSkpIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIG93
bmVyLCBzdGQ6OmZvcndhcmQ8QmFnPENhbGxMaW5rSW5mbz4+KGNhbGxMaW5rSW5mb3MpLCBzdGQ6
OmZvcndhcmQ8VmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+PihleGl0U3R1YnMpLCBtb2RlLCBj
YWxsZWVDb3VudCk7CiAgICAgICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtNTcs
NyArNTcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0KLSAgICBXYXNt
OjpNZW1vcnk6Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIFdhc206
Ok1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CiAg
ICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CiAKQEAgLTEwMSw3ICsx
MDEsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVj
dG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFdhc206Ok1lbW9yeTo6TW9kZSwgdW5zaWduZWQg
Y2FsbGVlQ291bnQpOworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1
YnM+JiYsIFdhc206Ok1lbW9yeU1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKICAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOwogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC0xMjUsNyArMTI1
LDcgQEAgcHJpdmF0ZToKICAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25h
bEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAg
VmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsKLSAgICBXYXNtOjpN
ZW1vcnk6Ok1vZGUgbV9tb2RlOworICAgIFdhc206Ok1lbW9yeU1vZGUgbV9tb2RlOwogICAgIHVu
c2lnbmVkIG1fY2FsbGVlQ291bnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMGEyZTVjYy4uOWVlZDE5NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NTgs
NyArNDU4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgs
IEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJUkdl
bmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAgQVNT
RVJUKG1fbWVtb3J5QmFzZUdQUik7Ci0gICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09IE1l
bW9yeTo6TW9kZTo6Qm91bmRzQ2hlY2tpbmcpIHsKKyAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2Rl
KCkgPT0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpIHsKICAgICAgICAgQVNTRVJUKG1fbWVt
b3J5U2l6ZUdQUik7CiAgICAgICAgIEFTU0VSVChzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgPiBv
ZmZzZXQpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVj
a1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBwb2ludGVyLCBtX21lbW9yeVNpemVHUFIsIHNpemVP
Zk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOwpAQCAtNDk0LDcgKzQ5NCw3IEBAIGlubGluZSB1aW50
MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlwZSBvcCkKIAogaW5saW5lIEIzOjpLaW5kIEIzSVJH
ZW5lcmF0b3I6Om1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCkKIHsKLSAgICBpZiAobV9p
bmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpTaWduYWxpbmcpCisgICAgaWYgKG1faW5mby5t
ZW1vcnkubW9kZSgpID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZykKICAgICAgICAgcmV0dXJuIHRy
YXBwaW5nKG1lbW9yeU9wKTsKICAgICByZXR1cm4gbWVtb3J5T3A7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGViMWRkNzguLjAyMDYxMjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDExICs1NiwyMyBAQCBp
bmxpbmUgYm9vbCBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzLCB2b2lkKiYgbWVtb3J5KQogICAgIHJl
dHVybiB0cnVlOwogfQogCitjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9kZSkK
K3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkVtcHR5OiByZXR1
cm4gIk5vbmUiOworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAi
Qm91bmRzQ2hlY2tpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4g
IlNpZ25hbGluZyI7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1iZXJPZk1lbW9yeU1vZGVzOiBi
cmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gIiI7Cit9CisKIC8vIFdlIHVzZSB0aGlzIGFzIGEgaGV1cmlzdGljIHRvIGd1ZXNzIHdoYXQg
bW9kZSBhIG1lbW9yeSBpbXBvcnQgd2lsbCBiZS4gTW9zdCBvZiB0aGUgdGltZSB3ZSBleHBlY3Qg
dXNlcnMgdG8KIC8vIGFsbG9jYXRlIHRoZSBtZW1vcnkgdGhleSBhcmUgZ29pbmcgdG8gcGFzcyB0
byBhbGwgdGhlaXIgbW9kdWxlcyByaWdodCBiZWZvcmUgY29tcGlsYXRpb24uCi1zdGF0aWMgTWVt
b3J5OjpNb2RlIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlIHsgTWVtb3J5OjpNb2RlOjpTaWduYWxp
bmcgfTsKK3N0YXRpYyBNZW1vcnlNb2RlIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlIHsgTWVtb3J5
TW9kZTo6U2lnbmFsaW5nIH07CiAKLU1lbW9yeTo6TW9kZSBNZW1vcnk6Omxhc3RBbGxvY2F0ZWRN
b2RlKCkKK01lbW9yeU1vZGUgTWVtb3J5OjpsYXN0QWxsb2NhdGVkTW9kZSgpCiB7CiAgICAgcmV0
dXJuIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlOwogfQpAQCAtODUsNyArOTcsNyBAQCBjb25zdCBI
YXNoU2V0PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmllcyhjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyKQogICAgIHJldHVybiBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKTsKIH0KIAot
aW5saW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0sIHZvaWQqJiBtZW1vcnksIHNpemVf
dCYgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeTo6TW9kZSYgbW9kZSkKK2lubGluZSBib29sIHRyeUdl
dEZhc3RNZW1vcnkoVk0mIHZtLCB2b2lkKiYgbWVtb3J5LCBzaXplX3QmIG1hcHBlZENhcGFjaXR5
LCBNZW1vcnlNb2RlJiBtb2RlKQogewogICAgIC8vIFdlIG1pZ2h0IEdDIGhlcmUgc28gd2Ugc2hv
dWxkIGJlIGhvbGRpbmcgdGhlIEFQSSBsb2NrLgogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBzeW5jcm9ub3VzbHkgdHJpZ2dlciB0aGUgR0MgZnJvbSBhbm90aGVyIHRocmVhZC4K
QEAgLTEwNiw3ICsxMTgsNyBAQCBpbmxpbmUgYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwg
dm9pZComIG1lbW9yeSwgc2l6ZV90JiBtYXBwZWRDYXBhY2l0eSwgTWVtbwogICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKS5hZGQobWVtb3J5KTsKICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAg
ICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBwZWRCeXRlczsKLSAgICAgICAg
ICAgIG1vZGUgPSBNZW1vcnk6OlNpZ25hbGluZzsKKyAgICAgICAgICAgIG1vZGUgPSBNZW1vcnlN
b2RlOjpTaWduYWxpbmc7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjUsNyArMTM3LDcgQEAgaW5saW5lIGJvb2wgdHJ5R2V0
RmFzdE1lbW9yeShWTSYgdm0sIHZvaWQqJiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHks
IE1lbW8KIAogICAgIGlmIChtbWFwQnl0ZXMoZmFzdE1lbW9yeU1hcHBlZEJ5dGVzLCBtZW1vcnkp
KSB7CiAgICAgICAgIG1hcHBlZENhcGFjaXR5ID0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzOwotICAg
ICAgICBtb2RlID0gTWVtb3J5OjpTaWduYWxpbmc7CisgICAgICAgIG1vZGUgPSBNZW1vcnlNb2Rl
OjpTaWduYWxpbmc7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1lbW9yeUxvY2spOwogICAg
ICAgICBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMrKzsKICAgICAgICAgYXV0byByZXN1bHQgPSBhY3Rp
dmVGYXN0TWVtb3JpZXMobG9ja2VyKS5hZGQobWVtb3J5KTsKQEAgLTEzNCw5ICsxNDYsOSBAQCBp
bmxpbmUgYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwgdm9pZComIG1lbW9yeSwgc2l6ZV90
JiBtYXBwZWRDYXBhY2l0eSwgTWVtbwogICAgIHJldHVybiBtZW1vcnk7CiB9CiAKLWlubGluZSB2
b2lkIHJlbGVhc2VGYXN0TWVtb3J5KHZvaWQqJiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUs
IHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5OjpNb2RlIG1vZGUpCitpbmxpbmUgdm9pZCBy
ZWxlYXNlRmFzdE1lbW9yeSh2b2lkKiYgbWVtb3J5LCBzaXplX3Qgd3JpdGFibGVTaXplLCBzaXpl
X3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUgbW9kZSkKIHsKLSAgICBpZiAobW9kZSAhPSBN
ZW1vcnk6OlNpZ25hbGluZyB8fCAhbWVtb3J5KQorICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6
OlNpZ25hbGluZyB8fCAhbWVtb3J5KQogICAgICAgICByZXR1cm47CiAKICAgICBSRUxFQVNFX0FT
U0VSVChtZW1vcnkgJiYgbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5dGVzKTsK
QEAgLTE1NywxMSArMTY5LDEzIEBAIGlubGluZSB2b2lkIHJlbGVhc2VGYXN0TWVtb3J5KHZvaWQq
JiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUsIHNpemVfdCBtYXBwZWRDCiBNZW1vcnk6Ok1l
bW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCiAgICAgOiBtX2luaXRp
YWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQorICAgICwgbV9tb2RlKE1lbW9y
eU1vZGU6OkVtcHR5KQogewogICAgIEFTU0VSVCghaW5pdGlhbC5ieXRlcygpKTsKKyAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9
CiAKLU1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VD
b3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1vZGUgbW9kZSkKK01lbW9yeTo6
TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
LCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUgbW9kZSkKICAgICA6IG1fbWVtb3J5
KG1lbW9yeSkKICAgICAsIG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwo
aW5pdGlhbCkKQEAgLTE3MiwyMCArMTg2LDIwIEBAIE1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9y
eSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkCiAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRo
aXMpOwogfQogCi1SZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZUltcGwoVk0mIHZtLCBQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVx
dWlyZWRNb2RlKQorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJbXBsKFZNJiB2bSwgUGFn
ZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1v
ZGU+IHJlcXVpcmVkTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhp
bXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxs
ZXIuCiAKLSAgICBNb2RlIG1vZGUgPSByZXF1aXJlZE1vZGUgPyAqcmVxdWlyZWRNb2RlIDogQm91
bmRzQ2hlY2tpbmc7CisgICAgTWVtb3J5TW9kZSBtb2RlID0gcmVxdWlyZWRNb2RlID8gKnJlcXVp
cmVkTW9kZSA6IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOwogICAgIGNvbnN0IHNpemVfdCBz
aXplID0gaW5pdGlhbC5ieXRlcygpOwogICAgIHNpemVfdCBtYXBwZWRDYXBhY2l0eSA9IG1heGlt
dW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdlQ291bnQ6Om1heCgpLmJ5dGVzKCk7CiAgICAgdm9p
ZCogbWVtb3J5ID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbWFrZUVtcHR5TWVtb3J5ID0gWyZdICgp
IC0+IFJlZlB0cjxNZW1vcnk+IHsKLSAgICAgICAgaWYgKG1vZGUgPT0gU2lnbmFsaW5nKQorICAg
ICAgICBpZiAobW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgICAgICBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IEJvdW5kc0No
ZWNraW5nOworICAgICAgICBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IE1lbW9yeU1vZGU6OkJv
dW5kc0NoZWNraW5nOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFs
LCBtYXhpbXVtKSk7CiAgICAgfTsKIApAQCAtMTk2LDkgKzIxMCw5IEBAIFJlZlB0cjxNZW1vcnk+
IE1lbW9yeTo6Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwKICAgICAgICAgcmV0dXJuIG1ha2VFbXB0eU1lbW9yeSgpOwogICAgIH0KIAotICAg
IGJvb2wgY2FuVXNlRmFzdE1lbW9yeSA9ICFyZXF1aXJlZE1vZGUgfHwgcmVxdWlyZWRNb2RlID09
IFNpZ25hbGluZzsKKyAgICBib29sIGNhblVzZUZhc3RNZW1vcnkgPSAhcmVxdWlyZWRNb2RlIHx8
IHJlcXVpcmVkTW9kZSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7CiAgICAgaWYgKCFjYW5Vc2VG
YXN0TWVtb3J5IHx8ICF0cnlHZXRGYXN0TWVtb3J5KHZtLCBtZW1vcnksIG1hcHBlZENhcGFjaXR5
LCBtb2RlKSkgewotICAgICAgICBpZiAobW9kZSA9PSBTaWduYWxpbmcpCisgICAgICAgIGlmICht
b2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZykKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgIGlmIChPcHRpb25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkg
PyB0cnVlIDogIW1tYXBCeXRlcyhtYXBwZWRDYXBhY2l0eSwgbWVtb3J5KSkgewpAQCAtMjE5LDYg
KzIzMyw3IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwKIAogICAgIEFTU0VSVChtZW1vcnkgJiYg
c2l6ZSA8PSBtYXBwZWRDYXBhY2l0eSk7CiAgICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgc2l6ZSwg
UFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlz
IGV2ZXIgb2NjdXI/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4
OTAKICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1wcm90ZWN0
IGZhaWxlZCIpOwogICAgICAgICByZWxlYXNlRmFzdE1lbW9yeShtZW1vcnksIDAsIG1hcHBlZENh
cGFjaXR5LCBtb2RlKTsKICAgICAgICAgaWYgKG1lbW9yeSkgewpAQCAtMjI3LDIyICsyNDIsMjUg
QEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJbXBsKFZNJiB2bSwgUGFnZUNvdW50IGlu
aXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KLSAgICAKKworICAgIEFTU0VSVChtb2RlICE9IE1lbW9yeU1vZGU6OkVtcHR5
KTsKICAgICBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IG1vZGU7CiAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1tYXAgc3VjY2VlZGVkIik7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZW1vcnkobWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBtYXBwZWRDYXBhY2l0
eSwgbW9kZSkpOwogfQogCi1SZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNb2RlPiBt
b2RlKQorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gbW9kZSkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAv
LyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCisgICAgUkVMRUFTRV9B
U1NFUlQoKCEhbWF4aW11bSAmJiAobWF4aW11bS5ieXRlcygpID09IDApKSA9PSAobW9kZSAmJiAq
bW9kZSA9PSBNZW1vcnlNb2RlOjpFbXB0eSkpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVk
IGJ5IG91ciBjYWxsZXIuCiAgICAgUmVmUHRyPE1lbW9yeT4gcmVzdWx0ID0gY3JlYXRlSW1wbCh2
bSwgaW5pdGlhbCwgbWF4aW11bSwgbW9kZSk7CiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICBp
ZiAocmVzdWx0LT5tb2RlKCkgPT0gU2lnbmFsaW5nKQorICAgICAgICBpZiAocmVzdWx0LT5tb2Rl
KCkgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0LT5tX21hcHBlZENhcGFjaXR5ID09IGZhc3RNZW1vcnlNYXBwZWRCeXRlcyk7CiAgICAg
ICAgIGlmIChtb2RlKQogICAgICAgICAgICAgQVNTRVJUKCptb2RlID09IHJlc3VsdC0+bW9kZSgp
KTsKLSAgICAgICAgQVNTRVJUKGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlID09IHJlc3VsdC0+bW9k
ZSgpKTsKKworICAgICAgICBBU1NFUlQoKHJlc3VsdC0+bW9kZSgpID09IE1lbW9yeU1vZGU6OkVt
cHR5KSA/IChsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSAhPSBNZW1vcnlNb2RlOjpFbXB0eSkgOiAo
bGFzdEFsbG9jYXRlZE1lbW9yeU1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpKTsKICAgICB9CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI2OCw4ICsyODYsMjQgQEAgYm9vbCBNZW1vcnk6Omdyb3co
UGFnZUNvdW50IG5ld1NpemUpCiAKICAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5
dGVzKCk7CiAKKyAgICBzd2l0Y2ggKG1vZGUoKSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6RW1w
dHk6CisgICAgICAgIC8vIFRoaXMgY2FuJ3QgaGFwcGVuOiBncm93IGlzIG9ubHkgY2FsbGVkIGlm
IGFjdHVhbCBncm93dGggbmVlZHMgdG8gb2NjdXIuIE5vbmUgbW9kZSBtZW1vcnkgY2Fubm90IGdy
b3cgcGFzdCBhIHNpemUgb2YgMC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hl
Y2tpbmc6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgor
ICAgICAgICAvLyBTaWduYWxpbmcgbWVtb3J5IG11c3QgaGF2ZSBiZWVuIHByZS1hbGxvY2F0ZWQg
dmlydHVhbGx5LgorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX21lbW9yeSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKICAgICBpZiAobV9tZW1vcnkg
JiYgZGVzaXJlZFNpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSkgewogICAgICAgICBpZiAobXByb3Rl
Y3Qoc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihkZXNpcmVkU2l6ZSAtIG1fc2l6ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgZXZlciBvY2N1cj8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTg5MAogICAgICAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyBpbi1wbGFjZSBmYWlsZWQgIiwgKnRoaXMpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0yNzksOCArMzEzLDEyIEBA
IGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBuZXdTaXplKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBBU1NFUlQobW9kZSgpICE9IFNpZ25hbGluZyk7CisgICAgLy8gTm9u
ZSBhbmQgU2lnbmFsaW5nIG1lbW9yeSBjYW4ndCBncm93IHBhc3QgdGhlaXIgYWxyZWFkeS1tYXBw
ZWQgc2l6ZS4KKyAgICBSRUxFQVNFX0FTU0VSVChtb2RlKCkgIT0gTWVtb3J5TW9kZTo6RW1wdHkp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1vZGUoKSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpOwor
CiAgICAgLy8gT3RoZXJ3aXNlLCBsZXQncyB0cnkgdG8gbWFrZSBzb21lIG5ldyBtZW1vcnkuCisg
ICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEgVk0gdGFnIGZvciB3YXNt
IG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzYwMAog
ICAgIHZvaWQqIG5ld01lbW9yeSA9IG1tYXAobnVsbHB0ciwgZGVzaXJlZFNpemUsIFBST1RfUkVB
RCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKICAgICBpZiAo
bmV3TWVtb3J5ID09IE1BUF9GQUlMRUQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMwMywx
NyArMzQxLDYgQEAgdm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAg
ICBvdXQucHJpbnQoIk1lbW9yeSBhdCAiLCBSYXdQb2ludGVyKG1fbWVtb3J5KSwgIiwgc2l6ZSAi
LCBtX3NpemUsICJCIGNhcGFjaXR5ICIsIG1fbWFwcGVkQ2FwYWNpdHksICJCLCBpbml0aWFsICIs
IG1faW5pdGlhbCwgIiBtYXhpbXVtICIsIG1fbWF4aW11bSwgIiBtb2RlICIsIG1ha2VTdHJpbmco
bV9tb2RlKSk7CiB9CiAKLWNvbnN0IGNoYXIqIE1lbW9yeTo6bWFrZVN0cmluZyhNb2RlIG1vZGUp
IGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBNb2RlOjpCb3VuZHNDaGVj
a2luZzogcmV0dXJuICJCb3VuZHNDaGVja2luZyI7Ci0gICAgY2FzZSBNb2RlOjpTaWduYWxpbmc6
IHJldHVybiAiU2lnbmFsaW5nIjsKLSAgICBjYXNlIE1vZGU6Ok51bWJlck9mTW9kZXM6IGJyZWFr
OwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAi
IjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIH0gLy8gbmFtZXNwYWNlIFdhc20KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCA2MzAwYTU5Li5mZjRkNmNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDIzICs0NCwyNSBAQCBj
bGFzcyBWTTsKIAogbmFtZXNwYWNlIFdhc20gewogCisvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBv
cnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjY5MworZW51bSBjbGFzcyBNZW1vcnlNb2RlIHsKKyAgICBFbXB0eSwKKyAgICBCb3Vu
ZHNDaGVja2luZywKKyAgICBTaWduYWxpbmcsCisgICAgTnVtYmVyT2ZNZW1vcnlNb2RlcworfTsK
K3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IE51bWJlck9mTWVtb3J5TW9kZXMgPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KE1lbW9yeU1vZGU6Ok51bWJlck9mTWVtb3J5TW9kZXMpOworY29uc3QgY2hhciog
bWFrZVN0cmluZyhNZW1vcnlNb2RlKTsKKwogY2xhc3MgTWVtb3J5IDogcHVibGljIFJlZkNvdW50
ZWQ8TWVtb3J5PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoV1RGOjpQcmludFN0
cmVhbSYpIGNvbnN0OwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIG1v
ZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMK
LSAgICBlbnVtIE1vZGUgewotICAgICAgICBCb3VuZHNDaGVja2luZywKLSAgICAgICAgU2lnbmFs
aW5nLAotICAgICAgICBOdW1iZXJPZk1vZGVzCi0gICAgfTsKLSAgICBjb25zdCBjaGFyKiBtYWtl
U3RyaW5nKE1vZGUpIGNvbnN0OwotCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICEhbV9tZW1vcnk7IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVh
dGUoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9u
YWw8TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKKyAgICBzdGF0aWMgUmVmUHRy
PE1lbW9yeT4gY3JlYXRlKFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
LCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVpcmVkTW9kZSA9IHN0ZDo6bnVsbG9wdCk7
CiAKICAgICBNZW1vcnkoKSA9IGRlZmF1bHQ7CiAgICAgfk1lbW9yeSgpOwpAQCAtNzIsOCArNzQs
OCBAQCBwdWJsaWM6CiAgICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2lu
aXRpYWw7IH0KICAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11
bTsgfQogCi0gICAgc3RhdGljIE1vZGUgbGFzdEFsbG9jYXRlZE1vZGUoKTsKLSAgICBNb2RlIG1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBzdGF0aWMgTWVtb3J5TW9kZSBsYXN0
QWxsb2NhdGVkTW9kZSgpOworICAgIE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZTsgfQogCiAgICAgLy8gZ3JvdygpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBK
U1dlYkFzc2VtYmx5TWVtb3J5IG9iamVjdCBzaW5jZSB0aGF0IG9iamVjdCBuZWVkcyB0byB1cGRh
dGUgaW50ZXJuYWwKICAgICAvLyBwb2ludGVycyB3aXRoIHRoZSBjdXJyZW50IGJhc2UgYW5kIHNp
emUuCkBAIC04MSw4ICs4Myw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NF
UlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7IH0KIHByaXZhdGU6Ci0gICAgc3RhdGljIFJlZlB0cjxN
ZW1vcnk+IGNyZWF0ZUltcGwoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKLSAg
ICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTW9kZSk7CisgICAgc3RhdGljIFJlZlB0cjxNZW1v
cnk+IGNyZWF0ZUltcGwoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsK
KyAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1h
eGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7CiAgICAgTWVtb3J5KFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CiAKICAgICAvLyBGSVhNRTogd2Ug
c2hvdWxkIG1vdmUgdGhlc2UgdG8gdGhlIGluc3RhbmNlIHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0
YW5jZS0+aW5zdGFuY2UgY2FsbHMuCkBAIC05MSw3ICs5Myw3IEBAIHByaXZhdGU6CiAgICAgUGFn
ZUNvdW50IG1faW5pdGlhbDsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtOwogICAgIHNpemVfdCBt
X21hcHBlZENhcGFjaXR5IHsgMCB9OwotICAgIE1vZGUgbV9tb2RlIHsgTW9kZTo6Qm91bmRzQ2hl
Y2tpbmcgfTsKKyAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNr
aW5nIH07CiB9OwogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZih1aW50NjRfdCkgPT0gc2l6ZW9mKHNp
emVfdCksICJXZSByZWx5IG9uIGFsbG93aW5nIHRoZSBtYXhpbXVtIHNpemUgb2YgTWVtb3J5IHdl
IG1hcCB0byBiZSAyXjMzIHdoaWNoIGlzIGxhcmdlciB0aGFuIGZpdHMgaW4gYSAzMi1iaXQgaW50
ZWdlciB0aGF0IHdlJ2QgcGFzcyB0byBtcHJvdGVjdCBpZiB0aGlzIGRpZG4ndCBob2xkLiIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0
aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlv
bi5jcHAKaW5kZXggMjRmMTgxNS4uMDgxNDM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDE4ICs3NCwyNyBAQCBQ
aW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJl
Z2lzdGVySW5mbz4mJiBzaXplUmVnaQogewogfQogCi1NZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5
SW5mb3JtYXRpb24oVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlLCBib29sIGlzSW1wb3J0
KQorTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJl
Y29tcGlsZU1vZGUsIGJvb2wgaXNJbXBvcnQpCiAgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKICAg
ICAsIG1fbWF4aW11bShtYXhpbXVtKQogICAgICwgbV9pc0ltcG9ydChpc0ltcG9ydCkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVCghIW1faW5pdGlhbCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWF4
aW11bSB8fCBtX21heGltdW0gPj0gbV9pbml0aWFsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWNv
bXBpbGVNb2RlID8gcmVjb21waWxlTW9kZSAhPSBNZW1vcnlNb2RlOjpFbXB0eSA6IHRydWUpOwog
ICAgIEFTU0VSVCghISp0aGlzKTsKIAogICAgIGlmICghcmVjb21waWxlTW9kZSkgewogICAgICAg
ICBpZiAoIWlzSW1wb3J0KSB7Ci0gICAgICAgICAgICBtX3Jlc2VydmVkTWVtb3J5ID0gTWVtb3J5
OjpjcmVhdGUodm0sIGluaXRpYWwsIG1heGltdW0sIE1lbW9yeTo6U2lnbmFsaW5nKTsKKyAgICAg
ICAgICAgIGlmIChtYXhpbXVtICYmIG1heGltdW0uYnl0ZXMoKSA9PSAwKSB7CisgICAgICAgICAg
ICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsLCBtYXhp
bXVtLCBNZW1vcnlNb2RlOjpFbXB0eSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9yZXNlcnZlZE1lbW9yeSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9yZXNl
cnZlZE1lbW9yeS0+bW9kZSgpID09IE1lbW9yeU1vZGU6OkVtcHR5KTsKKyAgICAgICAgICAgICAg
ICBtX21vZGUgPSBtX3Jlc2VydmVkTWVtb3J5LT5tb2RlKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX3Jlc2VydmVkTWVtb3J5ID0gTWVt
b3J5OjpjcmVhdGUodm0sIGluaXRpYWwsIG1heGltdW0sIE1lbW9yeU1vZGU6OlNpZ25hbGluZyk7
CiAgICAgICAgICAgICBpZiAobV9yZXNlcnZlZE1lbW9yeSkgewogICAgICAgICAgICAgICAgIEFT
U0VSVCghISptX3Jlc2VydmVkTWVtb3J5KTsKICAgICAgICAgICAgICAgICBtX21vZGUgPSBtX3Jl
c2VydmVkTWVtb3J5LT5tb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCmluZGV4IDVhOWE3N2EuLjZkZTA3MGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCkBA
IC01NCwxMyArNTQsMTMgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoISp0aGlzKTsKICAgICB9
CiAKLSAgICBNZW1vcnlJbmZvcm1hdGlvbihWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+LCBib29sIGlzSW1wb3J0KTsK
KyAgICBNZW1vcnlJbmZvcm1hdGlvbihWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiwgYm9vbCBpc0ltcG9ydCk7CiAKICAg
ICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBh
Z2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9CiAgICAgYm9vbCBo
YXNSZXNlcnZlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnk7IH0KICAg
ICBSZWZQdHI8TWVtb3J5PiB0YWtlUmVzZXJ2ZWRNZW1vcnkoKSB7IEFTU0VSVChoYXNSZXNlcnZl
ZE1lbW9yeSgpKTsgcmV0dXJuIG1fcmVzZXJ2ZWRNZW1vcnkucmVsZWFzZSgpOyB9Ci0gICAgTWVt
b3J5OjpNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBNZW1vcnlNb2Rl
IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIGlzSW1wb3J0KCkgY29u
c3QgeyByZXR1cm4gbV9pc0ltcG9ydDsgfQogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICEhbV9pbml0aWFsOyB9CkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPE1lbW9yeT4gbV9yZXNlcnZlZE1lbW9yeTsKICAgICBQYWdlQ291bnQgbV9p
bml0aWFsIHsgfTsKICAgICBQYWdlQ291bnQgbV9tYXhpbXVtIHsgfTsKLSAgICBNZW1vcnk6Ok1v
ZGUgbV9tb2RlIHsgTWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZyB9OworICAgIE1lbW9yeU1v
ZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKICAgICBib29sIG1faXNJ
bXBvcnQgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZVBhcnNlci5oCmluZGV4IDk0YmExNGUuLmM5NjE4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgc3Ry
dWN0IE1vZHVsZVBhcnNlclJlc3VsdCB7CiBjbGFzcyBNb2R1bGVQYXJzZXIgOiBwdWJsaWMgUGFy
c2VyPE1vZHVsZVBhcnNlclJlc3VsdD4gewogcHVibGljOgogCi0gICAgTW9kdWxlUGFyc2VyKFZN
KiB2bSwgY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBz
dGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gbW9kZSkKKyAgICBNb2R1bGVQYXJzZXIoVk0qIHZt
LCBjb25zdCB1aW50OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgsIHN0ZDo6
b3B0aW9uYWw8TWVtb3J5TW9kZT4gbW9kZSkKICAgICAgICAgOiBQYXJzZXIodm0sIHNvdXJjZUJ1
ZmZlciwgc291cmNlTGVuZ3RoKQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKQEAgLTY2
LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYsIFR5cGUmIGluaXRFeHByVHlwZSk7
CiAKICAgICBNb2R1bGVQYXJzZXJSZXN1bHQgbV9yZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxN
ZW1vcnk6Ok1vZGU+IG1fbW9kZSB7IHN0ZDo6bnVsbG9wdCB9OworICAgIHN0ZDo6b3B0aW9uYWw8
TWVtb3J5TW9kZT4gbV9tb2RlIHsgc3RkOjpudWxsb3B0IH07CiAgICAgYm9vbCBtX2hhc1RhYmxl
IHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApp
bmRleCAxYThkM2RjLi5iNjU0MjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uY3BwCkBAIC02Myw3ICs2Myw3IEBAIFBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90
KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiB7CiB9CiAKLWJvb2wgUGxhbjo6cGFyc2VB
bmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gcmVjb21waWxlTW9k
ZSkKK2Jvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9y
eU1vZGU+IHJlY29tcGlsZU1vZGUpCiB7CiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7CiAg
ICAgaWYgKHZlcmJvc2UgfHwgT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCkBAIC0xMTEs
NyArMTExLDcgQEAgYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0aW9u
YWw8TWVtb3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlKQogLy8gVGhlIHJlYXNvbiB0aGlzIGlzIE9L
IGlzIHRoYXQgd2UgZ3VhcmFudGVlIHRoYXQgdGhlIG1haW4gdGhyZWFkIGRvZXNuJ3QgY29udGlu
dWUgdW50aWwgYWxsIHRocmVhZHMKIC8vIHRoYXQgY291bGQgdG91Y2ggaXRzIHN0YWNrIGFyZSBk
b25lIGV4ZWN1dGluZy4KIFNVUFBSRVNTX0FTQU4gCi12b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlv
bmFsPE1lbW9yeTo6TW9kZT4gcmVjb21waWxlTW9kZSkKK3ZvaWQgUGxhbjo6cnVuKHN0ZDo6b3B0
aW9uYWw8TWVtb3J5TW9kZT4gcmVjb21waWxlTW9kZSkKIHsKICAgICBpZiAoIXBhcnNlQW5kVmFs
aWRhdGVNb2R1bGUocmVjb21waWxlTW9kZSkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4IGQwNzAzNzUuLjM1NDRmZDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaApAQCAtNDksOSArNDksOSBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5QbGFuKCk7CiAKLSAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVN
b2R1bGUoc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBi
b29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiA9IHN0
ZDo6bnVsbG9wdCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1bihzdGQ6Om9wdGlv
bmFsPE1lbW9yeTo6TW9kZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gPSBzdGQ6Om51bGxvcHQpOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVj
dCosIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwgSlNXZWJBc3NlbWJseUNhbGxlZSosIEpT
V2ViQXNzZW1ibHlDYWxsZWUqKT4pOwogCkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIFdURk1vdmUobV93YXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBNZW1vcnk6
Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5t
b2RlKCk7IH0KKyAgICBNZW1vcnlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpOyB9CiAKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVf
cHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNw
cAppbmRleCBiMjFmOGE1Li5kYjg0NjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMzYsNyArMzYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwgbnVsbHB0ciwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSB9OwogCi1KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgSlNXZWJBc3NlbWJs
eU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9y
PFdhc206Oldhc21FeGl0U3R1YnM+JiYgd2FzbUV4aXRTdHVicywgV2FzbTo6TWVtb3J5OjpNb2Rl
IG1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KQorSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNX
ZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBC
YWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0
dWJzPiYmIHdhc21FeGl0U3R1YnMsIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgY2Fs
bGVlQ291bnQpCiAgICAgOiBCYXNlKHZtLCB2bS53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVy
ZS5nZXQoKSkKICAgICAsIG1fY2FsbExpbmtJbmZvcyhXVEZNb3ZlKGNhbGxMaW5rSW5mb3MpKQog
ICAgICwgbV93YXNtRXhpdFN0dWJzKFdURk1vdmUod2FzbUV4aXRTdHVicykpCkBAIC01NCw5ICs1
NCwyNCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQogCiBib29sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1i
bHlNZW1vcnkqIG1lbW9yeSkKIHsKLSAgICBpZiAobW9kZSgpID09IFdhc206Ok1lbW9yeTo6U2ln
bmFsaW5nKQotICAgICAgICByZXR1cm4gbWVtb3J5LT5tZW1vcnkoKS5tb2RlKCkgPT0gbW9kZSgp
OwotICAgIHJldHVybiB0cnVlOworICAgIFdhc206Ok1lbW9yeU1vZGUgY29kZU1vZGUgPSBtb2Rl
KCk7CisgICAgV2FzbTo6TWVtb3J5TW9kZSBtZW1vcnlNb2RlID0gbWVtb3J5LT5tZW1vcnkoKS5t
b2RlKCk7CisgICAgc3dpdGNoIChjb2RlTW9kZSkgeworICAgIGNhc2UgV2FzbTo6TWVtb3J5TW9k
ZTo6RW1wdHk6CisgICAgICAgIC8vIENvZGUgaW4gTm9uZSBtb2RlIHBlcmZvcm1zIG5vIG1lbW9y
eSBhY2Nlc3Nlcy4gQW55IG1lbW9yeSB3aWxsIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBjYXNlIFdhc206Ok1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIFdhc206Ok1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgLy8g
Q29kZSBiZWluZyBpbiBTaWduYWxpbmcgbW9kZSBtZWFucyB0aGF0IGl0IHBlcmZvcm1zIG5vIGJv
dW5kcyBjaGVja3MuCisgICAgICAgIC8vIEl0cyBtZW1vcnksIGV2ZW4gaWYgZW1wdHksIGFic29s
dXRlbHkgbXVzdCBhbHNvIGJlIGluIFNpZ25hbGluZyBtb2RlCisgICAgICAgIC8vIGJlY2F1c2Ug
dGhlIHBhZ2UgcHJvdGVjdGlvbiBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4KKyAgICAg
ICAgcmV0dXJuIG1lbW9yeU1vZGUgPT0gV2FzbTo6TWVtb3J5TW9kZTo6U2lnbmFsaW5nOworICAg
IGNhc2UgV2FzbTo6TWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggMzkzZDM3
My4uZTIyODQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIEpT
V2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CiAg
ICAgLy8gQ2FsbGluZyB0aGlzIG1pZ2h0IHRyaWdnZXIgYSByZWNvbXBpbGUuCiAgICAgdm9pZCBz
ZXRNZW1vcnkoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TWVtb3J5Kik7Ci0gICAgV2Fz
bTo6TWVtb3J5OjpNb2RlIG1lbW9yeU1vZGUoKSB7IHJldHVybiBtZW1vcnkoKS0+bWVtb3J5KCku
bW9kZSgpOyB9CisgICAgV2FzbTo6TWVtb3J5TW9kZSBtZW1vcnlNb2RlKCkgeyByZXR1cm4gbWVt
b3J5KCktPm1lbW9yeSgpLm1vZGUoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJs
ZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KICAgICB2b2lkIHNldFRhYmxlKFZNJiB2bSwg
SlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSkgeyBtX3RhYmxlLnNldCh2bSwgdGhpcywgdGFibGUp
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuY3BwCmluZGV4IDU2ZjIwYjQuLmY0MTQ2N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9k
dWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CiAKLUpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpQbGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdh
c206Ok1lbW9yeTo6TW9kZT4gbW9kZSkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBXYXNt
OjpQbGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeU1vZGU+IG1vZGUpCiB7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIE9uIGZhaWx1
cmUsIGEgbmV3IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciBpcyB0aHJvd24uCkBAIC04NSwxNCAr
ODUsMTQgQEAgSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogCiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFz
c2VtYmx5TW9kdWxlOjpjb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNz
ZW1ibHlNZW1vcnkqIG1lbW9yeSkKIHsKLSAgICBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSA9IG1l
bW9yeS0+bWVtb3J5KCkubW9kZSgpOworICAgIFdhc206Ok1lbW9yeU1vZGUgbW9kZSA9IG1lbW9y
eS0+bWVtb3J5KCkubW9kZSgpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdhc206
Ok1lbW9yeTo6TnVtYmVyT2ZNb2RlczsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IFdhc206Ok51bWJlck9mTWVtb3J5TW9kZXM7ICsraSkgewogICAgICAgICBpZiAobV9jb2Rl
QmxvY2tzW2ldICYmIG1fY29kZUJsb2Nrc1tpXS0+aXNTYWZlVG9SdW4obWVtb3J5KSkKICAgICAg
ICAgICAgIHJldHVybiBtX2NvZGVCbG9ja3NbaV0uZ2V0KCk7CiAgICAgfQogCi0gICAgQVNTRVJU
KCFtX2NvZGVCbG9ja3NbbW9kZV0pOworICAgIEFTU0VSVCghY29kZUJsb2NrRm9yKG1vZGUpKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gV2UgZG9u
J3QgaGF2ZSBhIGNvZGUgYmxvY2sgZm9yIHRoaXMgbW9kZSwgd2UgbmVlZCB0byByZWNvbXBpbGUu
Li4KICAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9zb3Vy
Y2VCdWZmZXItPmRhdGEoKSksIG1fc291cmNlQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwpAQCAtMTA3
LDcgKzEwNyw3IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6
OmNvZGVCbG9jayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywKICAgICB9CiAKICAgICBBU1NFUlQo
bW9kZSA9PSBjb2RlQmxvY2stPm1vZGUoKSk7Ci0gICAgbV9jb2RlQmxvY2tzW21vZGVdLnNldCh2
bSwgdGhpcywgY29kZUJsb2NrKTsKKyAgICBjb2RlQmxvY2tGb3IobW9kZSkuc2V0KHZtLCB0aGlz
LCBjb2RlQmxvY2spOwogICAgIHJldHVybiBjb2RlQmxvY2s7CiB9CiAKQEAgLTEzMiw3ICsxMzIs
NyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCB1aW50OF90KiBzb3VyYwogICAgIG1fc291cmNlQnVmZmVyID0gQXJyYXlC
dWZmZXI6OmNyZWF0ZShzb3VyY2UsIGJ5dGVTaXplKTsKICAgICBtX21vZHVsZUluZm9ybWF0aW9u
ID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBtX2V4cG9ydFN5bWJvbFRhYmxl
LnNldCh2bSwgdGhpcywgZXhwb3J0U3ltYm9sVGFibGUpOwotICAgIG1fY29kZUJsb2Nrc1tjb2Rl
QmxvY2stPm1vZGUoKV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAgIGNvZGVCbG9ja0Zv
cihjb2RlQmxvY2stPm1vZGUoKSkuc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCiB2b2lk
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtMTQ3LDcgKzE0
Nyw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2V4cG9y
dFN5bWJvbFRhYmxlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2FzbTo6TWVtb3J5
OjpOdW1iZXJPZk1vZGVzOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdhc206
Ok51bWJlck9mTWVtb3J5TW9kZXM7ICsraSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDcwNDA2OGMuLjM4OWU2M2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmgKQEAgLTYyLDEyICs2MiwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gUmV0
dXJucyB0aGUgY29kZSBibG9jayB0aGF0IHRoaXMgbW9kdWxlIHdhcyBvcmlnaW5hbGx5IGNvbXBp
bGVkIGV4cGVjdGluZyB0byB1c2UuIFRoaXMgd29uJ3QgbmVlZCB0byByZWNvbXBpbGUuCi0gICAg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2tz
W21fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2RlKCldLmdldCgpOyB9CisgICAgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gY29kZUJsb2NrRm9yKG1fbW9k
dWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2RlKCkpLmdldCgpOyB9CiAgICAgLy8gUmV0dXJucyB0
aGUgYXBwcm9wcmlhdGUgY29kZSBibG9jayBmb3IgdGhlIGdpdmVuIG1lbW9yeSwgcG9zc2libHkg
dHJpZ2dlcmluZyBhIHJlY29tcGlsZS4KICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2Rl
QmxvY2soVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CiAKIHByaXZhdGU6
Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogYnVpbGRDb2RlQmxvY2soVk0mLCBFeGVjU3Rh
dGUqLCBXYXNtOjpQbGFuJiwgc3RkOjpvcHRpb25hbDxXYXNtOjpNZW1vcnk6Ok1vZGU+IG1vZGUg
PSBzdGQ6Om51bGxvcHQpOworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
PiYgY29kZUJsb2NrRm9yKFdhc206Ok1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxv
Y2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldOyB9CisgICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogYnVpbGRDb2RlQmxvY2soVk0mLCBFeGVjU3RhdGUqLCBXYXNtOjpQbGFuJiwgc3RkOjpv
cHRpb25hbDxXYXNtOjpNZW1vcnlNb2RlPiBtb2RlID0gc3RkOjpudWxsb3B0KTsKIAogICAgIEpT
V2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgRXhlY1N0YXRlKiwgdWludDhfdCogc291cmNlLCBzaXplX3QgYnl0ZVNpemUpOwpA
QCAtNzcsNyArNzgsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9zb3Vy
Y2VCdWZmZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBt
X21vZHVsZUluZm9ybWF0aW9uOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBv
cnRTeW1ib2xUYWJsZTsKLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4g
bV9jb2RlQmxvY2tzW1dhc206Ok1lbW9yeTo6TnVtYmVyT2ZNb2Rlc107CisgICAgV3JpdGVCYXJy
aWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpOdW1iZXJPZk1l
bW9yeU1vZGVzXTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHAKaW5kZXggN2YwNzMwNS4uZWNiMWZmNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI1OCw3ICsyNTgsMTEgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBXZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZUluc3RhbmNlKEV4ZWNTdGF0ZSoKICAg
ICAgICAgICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeTsKICAgICAgICAgICAgIGlmICht
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaGFzUmVzZXJ2ZWRNZW1vcnkoKSkKICAgICAgICAgICAg
ICAgICBtZW1vcnkgPSBqc01vZHVsZS0+dGFrZVJlc2VydmVkTWVtb3J5KCk7Ci0gICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5t
YXhpbXVtKCkgJiYgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKS5ieXRlcygpID09
IDApIHsKKyAgICAgICAgICAgICAgICAvLyBBbiBlbXB0eSBtZW1vcnkgZGVmaW5pdGlvbiBzaG91
bGQgYWx3YXlzIHN1Y2NlZWQuCisgICAgICAgICAgICAgICAgbWVtb3J5ID0gV2FzbTo6TWVtb3J5
OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUlu
Zm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCksIFdhc206Ok1lbW9yeU1vZGU6OkVtcHR5KTsKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkpOworICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
Lm1heGltdW0oKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtZW1vcnkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCmluZGV4IDUxMTI5ZTMuLmFmNWU0YmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTk2LDkgKzk2LDE2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBl
eGVjCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkg
PSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VD
b3VudCk7Ci0gICAgaWYgKCFtZW1vcnkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihl
eGVjKSkpOworICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeTsKKyAgICBpZiAobWF4aW11
bVBhZ2VDb3VudCAmJiBtYXhpbXVtUGFnZUNvdW50LmJ5dGVzKCkgPT0gMCkgeworICAgICAgICAv
LyBBbiBlbXB0eSBtZW1vcnkgZGVmaW5pdGlvbiBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuCisgICAg
ICAgIG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsUGFnZUNvdW50LCBt
YXhpbXVtUGFnZUNvdW50LCBXYXNtOjpNZW1vcnlNb2RlOjpFbXB0eSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1lbW9yeSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtb3J5ID0gV2FzbTo6
TWVtb3J5OjpjcmVhdGUodm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOwor
ICAgICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihl
eGVjKSkpOworICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJs
eU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2Vt
Ymx5TWVtb3J5U3RydWN0dXJlKCksIGFkb3B0UmVmKCptZW1vcnkubGVha1JlZigpKSkpOwogfQot
LSAKMi4xMC4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305246</attachid>
            <date>2017-03-23 17:04:56 -0700</date>
            <delta_ts>2017-03-24 14:42:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-memory-wast-js.patch</filename>
            <type>text/plain</type>
            <size>34937</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAyYjg2Y2I3YjEwMjczYmJjZGZiOGQ4NmE2ZjE4MzQ5ZjAzZDA5ODAzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IE1hciAyMDE3IDE3OjAzOjQzIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gbWVtb3J5
LXdhc3QtanMKCi0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgfCA0NyArKysrKysrKysrKysrCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmggICB8ICA4ICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAgICAgfCA4MCArKysrKysrKysrKysrLS0tLS0tLS0t
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggICAgICAgICAgICB8IDMx
ICsrKysrLS0tLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9u
LmNwcCAgfCAxNSArKystCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5m
b3JtYXRpb24uaCB8ICA2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmggICAgICB8ICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5jcHAgICAgICAgICAgICB8ICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5oICAgICAgICAgICAgICB8ICA2ICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmNwcCAgICAgICAgICAgICB8IDIwICsrKystLQogLi4uL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggfCAgMiArLQogLi4uL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgfCAxNiArKy0tLQogLi4uL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oICAgfCAgNyArLQogLi4uL3dhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCAgICAgfCAgMiArLQogLi4uL3dh
c20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMiArLQogMTYg
ZmlsZXMgY2hhbmdlZCwgMTcyIGluc2VydGlvbnMoKyksIDg0IGRlbGV0aW9ucygtKQoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCmluZGV4IGYxNzhjMWQuLmY4NTlmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE3LTAzLTE3ICBKRiBCYXN0aWVuICA8amZiYXN0
aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogc3BlYy10ZXN0cy9tZW1vcnku
d2FzdC5qcyBmYWlscyBpbiBkZWJ1ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY5Nzk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhlIGZhaWx1cmUgd2FzIGR1ZSB0byBlbXB0eSBtZW1vcmllcyAod2l0
aCBtYXhpbXVtIHNpemUgMCkuIFRob3NlCisgICAgICAgIG9ubHkgb2NjdXIgaW4gdGVzdHMgYW5k
IGluIGNvZGUgdGhhdCdzIHRyeWluZyB0byB0cmlwIHVzLiBUaGlzCisgICAgICAgIHBhdGNoIGFk
ZHMgbWVtb3J5IG1vZGUgIm5vbmUiIHdoaWNoIHJlcHJlc2VudHMgbm8gbWVtb3J5LiBJdCBjYW4K
KyAgICAgICAgd29yayB3aXRoIGVpdGhlciBib3VuZHMgY2hlY2tlZCBvciBzaWduYWxpbmcgY29k
ZSBiZWNhdXNlIGl0IG5ldmVyCisgICAgICAgIGNvbnRhaW5zIGxvYWRzIGFuZCBzdG9yZXMuCisK
KyAgICAgICAgVGhlIHNwZWMgdGVzdHMgd2hpY2ggd2VyZSBmYWlsaW5nIGRpZCB0aGUgZm9sbG93
aW5nOgorICAgICAgICAgICAgPiAobW9kdWxlIChtZW1vcnkgKGRhdGEpKSAoZnVuYyAoZXhwb3J0
ICJtZW1zaXplIikgKHJlc3VsdCBpMzIpIChjdXJyZW50X21lbW9yeSkpKQorICAgICAgICAgICAg
PiAoYXNzZXJ0X3JldHVybiAoaW52b2tlICJtZW1zaXplIikgKGkzMi5jb25zdCAwKSkKKyAgICAg
ICAgICAgID4gKG1vZHVsZSAobWVtb3J5IChkYXRhICIiKSkgKGZ1bmMgKGV4cG9ydCAibWVtc2l6
ZSIpIChyZXN1bHQgaTMyKSAoY3VycmVudF9tZW1vcnkpKSkKKyAgICAgICAgICAgID4gKGFzc2Vy
dF9yZXR1cm4gKGludm9rZSAibWVtc2l6ZSIpIChpMzIuY29uc3QgMCkpCisgICAgICAgICAgICA+
IChtb2R1bGUgKG1lbW9yeSAoZGF0YSAieCIpKSAoZnVuYyAoZXhwb3J0ICJtZW1zaXplIikgKHJl
c3VsdCBpMzIpIChjdXJyZW50X21lbW9yeSkpKQorICAgICAgICAgICAgPiAoYXNzZXJ0X3JldHVy
biAoaW52b2tlICJtZW1zaXplIikgKGkzMi5jb25zdCAxKSkKKworICAgICAgICAqIHdhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpt
ZW1vcnlLaW5kKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjp0cnlHZXRGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVsZWFzZUZh
c3RNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAg
IChKU0M6Oldhc206Ok1lbW9yeTo6Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206Ok1l
bW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5OjptYWtlU3RyaW5nKToKKyAgICAgICAgKiB3YXNtL1dhc21N
ZW1vcnkuaDoKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbik6Cisg
ICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9SdW4pOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlN
b2R1bGU6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrRm9yKToKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAq
IHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkpOgorCiAyMDE3LTAzLTE3ICBNaWNoYWVsIFNh
Ym9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBVU0VfSU5URVJOQUxfU0RL
IHRvIGNvbXB1dGUgRU5BQkxFX0ZBU1RfSklUX1BFUk1JU1NJT05TIGluc3RlYWQgb2YgSEFWRV9J
TlRFUk5BTF9TREsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaAppbmRleCA0NWQwY2Q5Li5mZThjM2YzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCkBAIC00NCw3
ICs0NCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3Ry
dWN0dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBj
cmVhdGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxMaW5rSW5m
bz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiBleGl0U3R1
YnMsIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKKyAgICBz
dGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJs
eU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9y
PFdhc206Oldhc21FeGl0U3R1YnM+JiYgZXhpdFN0dWJzLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUs
IHVuc2lnbmVkIGNhbGxlZUNvdW50KQogICAgIHsKICAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwg
YWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwg
b3duZXIsIHN0ZDo6Zm9yd2FyZDxCYWc8Q2FsbExpbmtJbmZvPj4oY2FsbExpbmtJbmZvcyksIHN0
ZDo6Zm9yd2FyZDxWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4+KGV4aXRTdHVicyksIG1vZGUs
IGNhbGxlZUNvdW50KTsKICAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CkBAIC01
Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9y
dENvdW50KCkgY29uc3QgeyByZXR1cm4gbV93YXNtRXhpdFN0dWJzLnNpemUoKTsgfQotICAgIFdh
c206Ok1lbW9yeTo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgV2Fz
bTo6TWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgSlNXZWJB
c3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0K
ICAgICBib29sIGlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKIApAQCAtMTAxLDcg
KzEwMSw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseUNv
ZGVCbG9jayhWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBW
ZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiwgV2FzbTo6TWVtb3J5OjpNb2RlLCB1bnNpZ25l
ZCBjYWxsZWVDb3VudCk7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRT
dHVicz4mJiwgV2FzbTo6TWVtb3J5TW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpOwogICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKQEAgLTEyNSw3ICsx
MjUsNyBAQCBwcml2YXRlOgogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlv
bmFsRmluYWxpemVyOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAg
ICBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4gbV93YXNtRXhpdFN0dWJzOwotICAgIFdhc206
Ok1lbW9yeTo6TW9kZSBtX21vZGU7CisgICAgV2FzbTo6TWVtb3J5TW9kZSBtX21vZGU7CiAgICAg
dW5zaWduZWQgbV9jYWxsZWVDb3VudDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCAwYTJlNWNjLi45ZWVkMTk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1
OCw3ICs0NTgsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZQogaW5saW5lIFZhbHVlKiBCM0lS
R2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikKIHsKICAgICBB
U1NFUlQobV9tZW1vcnlCYXNlR1BSKTsKLSAgICBpZiAobV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0g
TWVtb3J5OjpNb2RlOjpCb3VuZHNDaGVja2luZykgeworICAgIGlmIChtX2luZm8ubWVtb3J5Lm1v
ZGUoKSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykgewogICAgICAgICBBU1NFUlQobV9t
ZW1vcnlTaXplR1BSKTsKICAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+
IG9mZnNldCk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0No
ZWNrVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5U2l6ZUdQUiwgc2l6
ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CkBAIC00OTQsNyArNDk0LDcgQEAgaW5saW5lIHVp
bnQzMl90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIG9wKQogCiBpbmxpbmUgQjM6OktpbmQgQjNJ
UkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKQogewotICAgIGlmICht
X2luZm8ubWVtb3J5Lm1vZGUoKSA9PSBNZW1vcnk6OlNpZ25hbGluZykKKyAgICBpZiAobV9pbmZv
Lm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQogICAgICAgICByZXR1cm4g
dHJhcHBpbmcobWVtb3J5T3ApOwogICAgIHJldHVybiBtZW1vcnlPcDsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKaW5kZXggZWIxZGQ3OC4uNGY0N2YxMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsMTEgKzU2LDIyIEBA
IGlubGluZSBib29sIG1tYXBCeXRlcyhzaXplX3QgYnl0ZXMsIHZvaWQqJiBtZW1vcnkpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK2NvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2Rl
KQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hl
Y2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2ln
bmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpOdW1iZXJP
Zk1lbW9yeU1vZGVzOiBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gIiI7Cit9CisKIC8vIFdlIHVzZSB0aGlzIGFzIGEgaGV1cmlzdGlj
IHRvIGd1ZXNzIHdoYXQgbW9kZSBhIG1lbW9yeSBpbXBvcnQgd2lsbCBiZS4gTW9zdCBvZiB0aGUg
dGltZSB3ZSBleHBlY3QgdXNlcnMgdG8KIC8vIGFsbG9jYXRlIHRoZSBtZW1vcnkgdGhleSBhcmUg
Z29pbmcgdG8gcGFzcyB0byBhbGwgdGhlaXIgbW9kdWxlcyByaWdodCBiZWZvcmUgY29tcGlsYXRp
b24uCi1zdGF0aWMgTWVtb3J5OjpNb2RlIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlIHsgTWVtb3J5
OjpNb2RlOjpTaWduYWxpbmcgfTsKK3N0YXRpYyBNZW1vcnlNb2RlIGxhc3RBbGxvY2F0ZWRNZW1v
cnlNb2RlIHsgTWVtb3J5TW9kZTo6U2lnbmFsaW5nIH07CiAKLU1lbW9yeTo6TW9kZSBNZW1vcnk6
Omxhc3RBbGxvY2F0ZWRNb2RlKCkKK01lbW9yeU1vZGUgTWVtb3J5OjpsYXN0QWxsb2NhdGVkTW9k
ZSgpCiB7CiAgICAgcmV0dXJuIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlOwogfQpAQCAtODUsNyAr
OTYsNyBAQCBjb25zdCBIYXNoU2V0PHZvaWQqPiYgdmlld0FjdGl2ZUZhc3RNZW1vcmllcyhjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgIHJldHVybiBhY3RpdmVGYXN0TWVtb3JpZXMo
bG9ja2VyKTsKIH0KIAotaW5saW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0sIHZvaWQq
JiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeTo6TW9kZSYgbW9kZSkKK2lu
bGluZSBib29sIHRyeUdldEZhc3RNZW1vcnkoVk0mIHZtLCB2b2lkKiYgbWVtb3J5LCBzaXplX3Qm
IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlJiBtb2RlKQogewogICAgIC8vIFdlIG1pZ2h0IEdD
IGhlcmUgc28gd2Ugc2hvdWxkIGJlIGhvbGRpbmcgdGhlIEFQSSBsb2NrLgogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgYmUgYWJsZSB0byBzeW5jcm9ub3VzbHkgdHJpZ2dlciB0aGUgR0MgZnJvbSBh
bm90aGVyIHRocmVhZC4KQEAgLTEwNiw3ICsxMTcsNyBAQCBpbmxpbmUgYm9vbCB0cnlHZXRGYXN0
TWVtb3J5KFZNJiB2bSwgdm9pZComIG1lbW9yeSwgc2l6ZV90JiBtYXBwZWRDYXBhY2l0eSwgTWVt
bwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKS5h
ZGQobWVtb3J5KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNO
ZXdFbnRyeSk7CiAgICAgICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlNYXBwZWRC
eXRlczsKLSAgICAgICAgICAgIG1vZGUgPSBNZW1vcnk6OlNpZ25hbGluZzsKKyAgICAgICAgICAg
IG1vZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjUsNyArMTM2LDcgQEAgaW5s
aW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0sIHZvaWQqJiBtZW1vcnksIHNpemVfdCYg
bWFwcGVkQ2FwYWNpdHksIE1lbW8KIAogICAgIGlmIChtbWFwQnl0ZXMoZmFzdE1lbW9yeU1hcHBl
ZEJ5dGVzLCBtZW1vcnkpKSB7CiAgICAgICAgIG1hcHBlZENhcGFjaXR5ID0gZmFzdE1lbW9yeU1h
cHBlZEJ5dGVzOwotICAgICAgICBtb2RlID0gTWVtb3J5OjpTaWduYWxpbmc7CisgICAgICAgIG1v
ZGUgPSBNZW1vcnlNb2RlOjpTaWduYWxpbmc7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1l
bW9yeUxvY2spOwogICAgICAgICBhbGxvY2F0ZWRGYXN0TWVtb3JpZXMrKzsKICAgICAgICAgYXV0
byByZXN1bHQgPSBhY3RpdmVGYXN0TWVtb3JpZXMobG9ja2VyKS5hZGQobWVtb3J5KTsKQEAgLTEz
NCw5ICsxNDUsOSBAQCBpbmxpbmUgYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwgdm9pZCom
IG1lbW9yeSwgc2l6ZV90JiBtYXBwZWRDYXBhY2l0eSwgTWVtbwogICAgIHJldHVybiBtZW1vcnk7
CiB9CiAKLWlubGluZSB2b2lkIHJlbGVhc2VGYXN0TWVtb3J5KHZvaWQqJiBtZW1vcnksIHNpemVf
dCB3cml0YWJsZVNpemUsIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5OjpNb2RlIG1vZGUp
CitpbmxpbmUgdm9pZCByZWxlYXNlRmFzdE1lbW9yeSh2b2lkKiYgbWVtb3J5LCBzaXplX3Qgd3Jp
dGFibGVTaXplLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUgbW9kZSkKIHsKLSAg
ICBpZiAobW9kZSAhPSBNZW1vcnk6OlNpZ25hbGluZyB8fCAhbWVtb3J5KQorICAgIGlmIChtb2Rl
ICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB8fCAhbWVtb3J5KQogICAgICAgICByZXR1cm47CiAK
ICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkgJiYgbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9y
eU1hcHBlZEJ5dGVzKTsKQEAgLTE1NywxMSArMTY4LDEzIEBAIGlubGluZSB2b2lkIHJlbGVhc2VG
YXN0TWVtb3J5KHZvaWQqJiBtZW1vcnksIHNpemVfdCB3cml0YWJsZVNpemUsIHNpemVfdCBtYXBw
ZWRDCiBNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0p
CiAgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQorICAg
ICwgbV9tb2RlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKQogewogICAgIEFTU0VSVCghaW5p
dGlhbC5ieXRlcygpKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkg
YWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CiAKLU1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNp
dHksIE1vZGUgbW9kZSkKK01lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGlu
aXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1v
ZGUgbW9kZSkKICAgICA6IG1fbWVtb3J5KG1lbW9yeSkKICAgICAsIG1fc2l6ZShpbml0aWFsLmJ5
dGVzKCkpCiAgICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKQEAgLTE3MiwyMCArMTg1LDIwIEBAIE1l
bW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBt
YXhpbXVtLCBzaXplX3QgbWFwcGVkCiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6
TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRoaXMpOwogfQogCi1SZWZQdHI8TWVtb3J5PiBNZW1vcnk6
OmNyZWF0ZUltcGwoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRNb2RlKQorUmVmUHRyPE1lbW9yeT4gTWVtb3J5
OjpjcmVhdGVJbXBsKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
LCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVpcmVkTW9kZSkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBi
ZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCiAKLSAgICBNb2RlIG1vZGUgPSByZXF1aXJlZE1v
ZGUgPyAqcmVxdWlyZWRNb2RlIDogQm91bmRzQ2hlY2tpbmc7CisgICAgTWVtb3J5TW9kZSBtb2Rl
ID0gcmVxdWlyZWRNb2RlID8gKnJlcXVpcmVkTW9kZSA6IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNr
aW5nOwogICAgIGNvbnN0IHNpemVfdCBzaXplID0gaW5pdGlhbC5ieXRlcygpOwogICAgIHNpemVf
dCBtYXBwZWRDYXBhY2l0eSA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiBQYWdlQ291bnQ6
Om1heCgpLmJ5dGVzKCk7CiAgICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0cjsKIAogICAgIGF1dG8g
bWFrZUVtcHR5TWVtb3J5ID0gWyZdICgpIC0+IFJlZlB0cjxNZW1vcnk+IHsKLSAgICAgICAgaWYg
KG1vZGUgPT0gU2lnbmFsaW5nKQorICAgICAgICBpZiAobW9kZSA9PSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmcpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBsYXN0QWxsb2Nh
dGVkTWVtb3J5TW9kZSA9IEJvdW5kc0NoZWNraW5nOworICAgICAgICBsYXN0QWxsb2NhdGVkTWVt
b3J5TW9kZSA9IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOwogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7CiAgICAgfTsKIApAQCAtMTk2LDkg
KzIwOSw5IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwKICAgICAgICAgcmV0dXJuIG1ha2VFbXB0
eU1lbW9yeSgpOwogICAgIH0KIAotICAgIGJvb2wgY2FuVXNlRmFzdE1lbW9yeSA9ICFyZXF1aXJl
ZE1vZGUgfHwgcmVxdWlyZWRNb2RlID09IFNpZ25hbGluZzsKKyAgICBib29sIGNhblVzZUZhc3RN
ZW1vcnkgPSAhcmVxdWlyZWRNb2RlIHx8IHJlcXVpcmVkTW9kZSA9PSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmc7CiAgICAgaWYgKCFjYW5Vc2VGYXN0TWVtb3J5IHx8ICF0cnlHZXRGYXN0TWVtb3J5KHZt
LCBtZW1vcnksIG1hcHBlZENhcGFjaXR5LCBtb2RlKSkgewotICAgICAgICBpZiAobW9kZSA9PSBT
aWduYWxpbmcpCisgICAgICAgIGlmIChtb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZykKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGlmIChPcHRpb25zOjpzaW11bGF0
ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkgPyB0cnVlIDogIW1tYXBCeXRlcyhtYXBwZWRDYXBhY2l0
eSwgbWVtb3J5KSkgewpAQCAtMjE5LDYgKzIzMiw3IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6
Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwK
IAogICAgIEFTU0VSVChtZW1vcnkgJiYgc2l6ZSA8PSBtYXBwZWRDYXBhY2l0eSk7CiAgICAgaWYg
KG1wcm90ZWN0KG1lbW9yeSwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGV2ZXIgb2NjdXI/IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4OTAKICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
Ik1lbW9yeTo6Y3JlYXRlIG1wcm90ZWN0IGZhaWxlZCIpOwogICAgICAgICByZWxlYXNlRmFzdE1l
bW9yeShtZW1vcnksIDAsIG1hcHBlZENhcGFjaXR5LCBtb2RlKTsKICAgICAgICAgaWYgKG1lbW9y
eSkgewpAQCAtMjI3LDIyICsyNDEsMjEgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJ
bXBsKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLAogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICAKKwogICAgIGxhc3RBbGxv
Y2F0ZWRNZW1vcnlNb2RlID0gbW9kZTsKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5
OjpjcmVhdGUgbW1hcCBzdWNjZWVkZWQiKTsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9y
eShtZW1vcnksIGluaXRpYWwsIG1heGltdW0sIG1hcHBlZENhcGFjaXR5LCBtb2RlKSk7CiB9CiAK
LVJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGUpCitSZWZQdHI8TWVt
b3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiBtb2RlKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJl
IGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KICAgICBSZWZQdHI8TWVtb3J5PiByZXN1bHQgPSBj
cmVhdGVJbXBsKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBtb2RlKTsKICAgICBpZiAocmVzdWx0KSB7
Ci0gICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9PSBTaWduYWxpbmcpCisgICAgICAgIGlmIChy
ZXN1bHQtPm1vZGUoKSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQtPm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFzdE1lbW9yeU1hcHBlZEJ5
dGVzKTsKICAgICAgICAgaWYgKG1vZGUpCiAgICAgICAgICAgICBBU1NFUlQoKm1vZGUgPT0gcmVz
dWx0LT5tb2RlKCkpOwotICAgICAgICBBU1NFUlQobGFzdEFsbG9jYXRlZE1lbW9yeU1vZGUgPT0g
cmVzdWx0LT5tb2RlKCkpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjY4LDgg
KzI4MSwyMSBAQCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3U2l6ZSkKIAogICAgIHNp
emVfdCBkZXNpcmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsKIAorICAgIHN3aXRjaCAobW9kZSgp
KSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobWF4aW11bSgpLmJ5dGVzKCkgIT0gMCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgorICAgICAgICAvLyBTaWduYWxpbmcgbWVtb3J5IG11
c3QgaGF2ZSBiZWVuIHByZS1hbGxvY2F0ZWQgdmlydHVhbGx5LgorICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX21lbW9yeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVt
YmVyT2ZNZW1vcnlNb2RlczoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKICAgICBpZiAobV9tZW1vcnkgJiYgZGVzaXJlZFNpemUgPD0gbV9tYXBwZWRDYXBh
Y2l0eSkgewogICAgICAgICBpZiAobXByb3RlY3Qoc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVt
b3J5KSArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkZXNpcmVkU2l6ZSAtIG1fc2l6ZSks
IFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxk
IHRoaXMgZXZlciBvY2N1cj8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2OTg5MAogICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyBp
bi1wbGFjZSBmYWlsZWQgIiwgKnRoaXMpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CkBAIC0yNzksOCArMzA1LDExIEBAIGJvb2wgTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBu
ZXdTaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBBU1NFUlQobW9kZSgp
ICE9IFNpZ25hbGluZyk7CisgICAgLy8gU2lnbmFsaW5nIG1lbW9yeSBjYW4ndCBncm93IHBhc3Qg
aXRzIGFscmVhZHktbWFwcGVkIHNpemUuCisgICAgUkVMRUFTRV9BU1NFUlQobW9kZSgpICE9IE1l
bW9yeU1vZGU6OlNpZ25hbGluZyk7CisKICAgICAvLyBPdGhlcndpc2UsIGxldCdzIHRyeSB0byBt
YWtlIHNvbWUgbmV3IG1lbW9yeS4KKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3
ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCiAgICAgdm9pZCogbmV3TWVtb3J5ID0gbW1hcChudWxscHRy
LCBkZXNpcmVkU2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBf
QU5PTiwgLTEsIDApOwogICAgIGlmIChuZXdNZW1vcnkgPT0gTUFQX0ZBSUxFRCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzAzLDE3ICszMzIsNiBAQCB2b2lkIE1lbW9yeTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgIG91dC5wcmludCgiTWVtb3J5IGF0ICIsIFJhd1BvaW50
ZXIobV9tZW1vcnkpLCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkgIiwgbV9tYXBwZWRD
YXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0gIiwgbV9tYXhpbXVt
LCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKIH0KIAotY29uc3QgY2hhciogTWVtb3J5
OjptYWtlU3RyaW5nKE1vZGUgbW9kZSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAg
ICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKLSAg
ICBjYXNlIE1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOwotICAgIGNhc2UgTW9k
ZTo6TnVtYmVyT2ZNb2RlczogYnJlYWs7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogfSAv
LyBuYW1lc3BhY2UgV2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCmlu
ZGV4IDYzMDBhNTkuLmQxM2QwYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDQsMjMgKzQ0LDI0IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKKy8v
IEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCitlbnVtIGNsYXNzIE1lbW9yeU1vZGUg
eworICAgIEJvdW5kc0NoZWNraW5nLAorICAgIFNpZ25hbGluZywKKyAgICBOdW1iZXJPZk1lbW9y
eU1vZGVzCit9Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZNZW1vcnlNb2RlcyA9
IHN0YXRpY19jYXN0PHNpemVfdD4oTWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2Rlcyk7Citj
b25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOworCiBjbGFzcyBNZW1vcnkgOiBwdWJs
aWMgUmVmQ291bnRlZDxNZW1vcnk+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZW1vcnkp
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHZvaWQgZHVtcChX
VEY6OlByaW50U3RyZWFtJikgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBv
cnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjY5MwotICAgIGVudW0gTW9kZSB7Ci0gICAgICAgIEJvdW5kc0NoZWNraW5nLAotICAg
ICAgICBTaWduYWxpbmcsCi0gICAgICAgIE51bWJlck9mTW9kZXMKLSAgICB9OwotICAgIGNvbnN0
IGNoYXIqIG1ha2VTdHJpbmcoTW9kZSkgY29uc3Q7Ci0KICAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9yeTsgfQogCi0gICAgc3RhdGljIFJlZlB0cjxN
ZW1vcnk+IGNyZWF0ZShWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwg
c3RkOjpvcHRpb25hbDxNb2RlPiByZXF1aXJlZE1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIHN0
YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNv
dW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVxdWlyZWRNb2RlID0gc3Rk
OjpudWxsb3B0KTsKIAogICAgIE1lbW9yeSgpID0gZGVmYXVsdDsKICAgICB+TWVtb3J5KCk7CkBA
IC03Miw4ICs3Myw4IEBAIHB1YmxpYzoKICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhpbXVtOyB9CiAKLSAgICBzdGF0aWMgTW9kZSBsYXN0QWxsb2NhdGVkTW9kZSgpOwot
ICAgIE1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIHN0YXRpYyBNZW1v
cnlNb2RlIGxhc3RBbGxvY2F0ZWRNb2RlKCk7CisgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlOyB9CiAKICAgICAvLyBncm93KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGZyb20gdGhlIEpTV2ViQXNzZW1ibHlNZW1vcnkgb2JqZWN0IHNpbmNlIHRoYXQgb2JqZWN0IG5l
ZWRzIHRvIHVwZGF0ZSBpbnRlcm5hbAogICAgIC8vIHBvaW50ZXJzIHdpdGggdGhlIGN1cnJlbnQg
YmFzZSBhbmQgc2l6ZS4KQEAgLTgxLDggKzgyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBjaGVj
aygpIHsgIEFTU0VSVCghZGVsZXRpb25IYXNCZWd1bigpKTsgfQogcHJpdmF0ZToKLSAgICBzdGF0
aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlSW1wbChWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdl
Q291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNb2RlPiByZXF1aXJlZE1vZGUgPSBzdGQ6Om51
bGxvcHQpOwotICAgIE1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdl
Q291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNb2RlKTsKKyAgICBzdGF0aWMg
UmVmUHRyPE1lbW9yeT4gY3JlYXRlSW1wbChWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZXF1aXJlZE1vZGUgPSBzdGQ6
Om51bGxvcHQpOworICAgIE1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQ
YWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlKTsKICAg
ICBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKTsKIAogICAgIC8v
IEZJWE1FOiB3ZSBzaG91bGQgbW92ZSB0aGVzZSB0byB0aGUgaW5zdGFuY2UgdG8gYXZvaWQgYSBs
b2FkIG9uIGluc3RhbmNlLT5pbnN0YW5jZSBjYWxscy4KQEAgLTkxLDcgKzkyLDcgQEAgcHJpdmF0
ZToKICAgICBQYWdlQ291bnQgbV9pbml0aWFsOwogICAgIFBhZ2VDb3VudCBtX21heGltdW07CiAg
ICAgc2l6ZV90IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07Ci0gICAgTW9kZSBtX21vZGUgeyBNb2Rl
OjpCb3VuZHNDaGVja2luZyB9OworICAgIE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmcgfTsKIH07CiAKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHVpbnQ2NF90KSA9
PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhlIG1heGltdW0gc2l6ZSBv
ZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzMgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gZml0cyBpbiBh
IDMyLWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0IGlmIHRoaXMgZGlkbid0
IGhvbGQuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5SW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9y
eUluZm9ybWF0aW9uLmNwcAppbmRleCAyNGYxODE1Li44YWMwODY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNyAr
NzQsNyBAQCBQaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlu
bmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaQogewogfQogCi1NZW1vcnlJbmZvcm1hdGlv
bjo6TWVtb3J5SW5mb3JtYXRpb24oVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiByZWNvbXBpbGVNb2RlLCBib29s
IGlzSW1wb3J0KQorTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFZNJiB2bSwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9y
eU1vZGU+IHJlY29tcGlsZU1vZGUsIGJvb2wgaXNJbXBvcnQpCiAgICAgOiBtX2luaXRpYWwoaW5p
dGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQogICAgICwgbV9pc0ltcG9ydChpc0ltcG9y
dCkKQEAgLTg1LDcgKzg1LDE2IEBAIE1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlv
bihWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11CiAKICAgICBpZiAo
IXJlY29tcGlsZU1vZGUpIHsKICAgICAgICAgaWYgKCFpc0ltcG9ydCkgewotICAgICAgICAgICAg
bV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBN
ZW1vcnk6OlNpZ25hbGluZyk7CisgICAgICAgICAgICBpZiAobWF4aW11bSAmJiBtYXhpbXVtLmJ5
dGVzKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIG1fcmVzZXJ2ZWRNZW1vcnkgPSBNZW1vcnk6
OmNyZWF0ZSh2bSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcp
OworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnkpOworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1vcnktPm1heGltdW0oKSk7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9yZXNlcnZlZE1lbW9yeS0+bWF4aW11
bSgpLmJ5dGVzKCkgPT0gMCk7CisgICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1l
bW9yeS0+bW9kZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFs
LCBtYXhpbXVtLCBNZW1vcnlNb2RlOjpTaWduYWxpbmcpOwogICAgICAgICAgICAgaWYgKG1fcmVz
ZXJ2ZWRNZW1vcnkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoISEqbV9yZXNlcnZlZE1lbW9y
eSk7CiAgICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0
aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
aAppbmRleCA1YTlhNzdhLi42ZGUwNzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaApAQCAtNTQsMTMgKzU0LDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKCEqdGhpcyk7CiAgICAgfQogCi0gICAgTWVtb3J5SW5mb3JtYXRp
b24oVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9u
YWw8TWVtb3J5OjpNb2RlPiwgYm9vbCBpc0ltcG9ydCk7CisgICAgTWVtb3J5SW5mb3JtYXRpb24o
Vk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8
TWVtb3J5TW9kZT4sIGJvb2wgaXNJbXBvcnQpOwogCiAgICAgUGFnZUNvdW50IGluaXRpYWwoKSBj
b25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KICAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWF4aW11bTsgfQogICAgIGJvb2wgaGFzUmVzZXJ2ZWRNZW1vcnkoKSBjb25z
dCB7IHJldHVybiBtX3Jlc2VydmVkTWVtb3J5OyB9CiAgICAgUmVmUHRyPE1lbW9yeT4gdGFrZVJl
c2VydmVkTWVtb3J5KCkgeyBBU1NFUlQoaGFzUmVzZXJ2ZWRNZW1vcnkoKSk7IHJldHVybiBtX3Jl
c2VydmVkTWVtb3J5LnJlbGVhc2UoKTsgfQotICAgIE1lbW9yeTo6TW9kZSBtb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlOyB9CisgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9tb2RlOyB9CiAgICAgYm9vbCBpc0ltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbXBvcnQ7
IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1faW5p
dGlhbDsgfQpAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxNZW1vcnk+IG1f
cmVzZXJ2ZWRNZW1vcnk7CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbCB7IH07CiAgICAgUGFnZUNv
dW50IG1fbWF4aW11bSB7IH07Ci0gICAgTWVtb3J5OjpNb2RlIG1fbW9kZSB7IE1lbW9yeTo6TW9k
ZTo6Qm91bmRzQ2hlY2tpbmcgfTsKKyAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nIH07CiAgICAgYm9vbCBtX2lzSW1wb3J0IHsgZmFsc2UgfTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAppbmRleCA5
NGJhMTRlLi5jOTYxOGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5oCkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBNb2R1bGVQYXJzZXJSZXN1bHQg
ewogY2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGljIFBhcnNlcjxNb2R1bGVQYXJzZXJSZXN1bHQ+
IHsKIHB1YmxpYzoKIAotICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1v
ZGU+IG1vZGUpCisgICAgTW9kdWxlUGFyc2VyKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNl
QnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IG1v
ZGUpCiAgICAgICAgIDogUGFyc2VyKHZtLCBzb3VyY2VCdWZmZXIsIHNvdXJjZUxlbmd0aCkKICAg
ICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1aW50OF90
JiwgdWludDY0X3QmLCBUeXBlJiBpbml0RXhwclR5cGUpOwogCiAgICAgTW9kdWxlUGFyc2VyUmVz
dWx0IG1fcmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiBtX21vZGUgeyBz
dGQ6Om51bGxvcHQgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IG1fbW9kZSB7IHN0
ZDo6bnVsbG9wdCB9OwogICAgIGJvb2wgbV9oYXNUYWJsZSB7IGZhbHNlIH07CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggMWE4ZDNkYy4uYjY1NDI0OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtNjMsNyArNjMsNyBA
QCBQbGFuOjpQbGFuKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNl
TGVuZ3RoKQogewogfQogCi1ib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpv
cHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCitib29sIFBsYW46OnBhcnNlQW5k
VmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZWNvbXBpbGVNb2RlKQog
ewogICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwogICAgIGlmICh2ZXJib3NlIHx8IE9wdGlv
bnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQpAQCAtMTExLDcgKzExMSw3IEBAIGJvb2wgUGxhbjo6
cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9yeTo6TW9kZT4gcmVjb21w
aWxlTW9kZSkKIC8vIFRoZSByZWFzb24gdGhpcyBpcyBPSyBpcyB0aGF0IHdlIGd1YXJhbnRlZSB0
aGF0IHRoZSBtYWluIHRocmVhZCBkb2Vzbid0IGNvbnRpbnVlIHVudGlsIGFsbCB0aHJlYWRzCiAv
LyB0aGF0IGNvdWxkIHRvdWNoIGl0cyBzdGFjayBhcmUgZG9uZSBleGVjdXRpbmcuCiBTVVBQUkVT
U19BU0FOIAotdm9pZCBQbGFuOjpydW4oc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29t
cGlsZU1vZGUpCit2b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29t
cGlsZU1vZGUpCiB7CiAgICAgaWYgKCFwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHJlY29tcGlsZU1v
ZGUpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaApp
bmRleCBkMDcwMzc1Li4zNTQ0ZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmgKQEAgLTQ5LDkgKzQ5LDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4o
Vk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+UGxh
bigpOwogCi0gICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVt
b3J5OjpNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gPSBzdGQ6Om51bGxvcHQpOwogCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBydW4oc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+ID0gc3Rk
OjpudWxsb3B0KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1bihzdGQ6Om9wdGlvbmFs
PE1lbW9yeU1vZGU+ID0gc3RkOjpudWxsb3B0KTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgaW5pdGlhbGl6ZUNhbGxlZXMoSlNHbG9iYWxPYmplY3QqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
dW5zaWduZWQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKik+KTsK
IApAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fd2Fz
bUV4aXRTdHVicyk7CiAgICAgfQogCi0gICAgTWVtb3J5OjpNb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpOyB9CisgICAgTWVtb3J5TW9k
ZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1vZGUo
KTsgfQogCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4g
bV9tb2R1bGVJbmZvcm1hdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKaW5kZXggYjIxZjhhNS4uOTg5NTRj
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzX2luZm8gPSB7ICJXZWJB
c3NlbWJseUNvZGVCbG9jayIsIG51bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJB
c3NlbWJseUNvZGVCbG9jaykgfTsKIAotSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3Nl
bWJseUNvZGVCbG9jayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBCYWc8Q2Fs
bExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYm
IHdhc21FeGl0U3R1YnMsIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVD
b3VudCkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0m
IHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxMaW5rSW5mbz4mJiBjYWxs
TGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3YXNtRXhpdFN0dWJzLCBX
YXNtOjpNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KQogICAgIDogQmFzZSh2
bSwgdm0ud2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2NhbGxM
aW5rSW5mb3MoV1RGTW92ZShjYWxsTGlua0luZm9zKSkKICAgICAsIG1fd2FzbUV4aXRTdHVicyhX
VEZNb3ZlKHdhc21FeGl0U3R1YnMpKQpAQCAtNTQsOSArNTQsMjEgQEAgdm9pZCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIAogYm9vbCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjppc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCiB7Ci0g
ICAgaWYgKG1vZGUoKSA9PSBXYXNtOjpNZW1vcnk6OlNpZ25hbGluZykKLSAgICAgICAgcmV0dXJu
IG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpID09IG1vZGUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBXYXNtOjpNZW1vcnlNb2RlIGNvZGVNb2RlID0gbW9kZSgpOworICAgIFdhc206Ok1lbW9yeU1v
ZGUgbWVtb3J5TW9kZSA9IG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpOworICAgIHN3aXRjaCAoY29k
ZU1vZGUpIHsKKyAgICBjYXNlIFdhc206Ok1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFdhc206Ok1lbW9yeU1vZGU6OlNpZ25hbGluZzoK
KyAgICAgICAgLy8gQ29kZSBiZWluZyBpbiBTaWduYWxpbmcgbW9kZSBtZWFucyB0aGF0IGl0IHBl
cmZvcm1zIG5vIGJvdW5kcyBjaGVja3MuCisgICAgICAgIC8vIEl0cyBtZW1vcnksIGV2ZW4gaWYg
ZW1wdHksIGFic29sdXRlbHkgbXVzdCBhbHNvIGJlIGluIFNpZ25hbGluZyBtb2RlCisgICAgICAg
IC8vIGJlY2F1c2UgdGhlIHBhZ2UgcHJvdGVjdGlvbiBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nl
c3Nlcy4KKyAgICAgICAgcmV0dXJuIG1lbW9yeU1vZGUgPT0gV2FzbTo6TWVtb3J5TW9kZTo6U2ln
bmFsaW5nOworICAgIGNhc2UgV2FzbTo6TWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgK
aW5kZXggMzkzZDM3My4uZTIyODQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVi
bGljOgogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5
LmdldCgpOyB9CiAgICAgLy8gQ2FsbGluZyB0aGlzIG1pZ2h0IHRyaWdnZXIgYSByZWNvbXBpbGUu
CiAgICAgdm9pZCBzZXRNZW1vcnkoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TWVtb3J5
Kik7Ci0gICAgV2FzbTo6TWVtb3J5OjpNb2RlIG1lbW9yeU1vZGUoKSB7IHJldHVybiBtZW1vcnko
KS0+bWVtb3J5KCkubW9kZSgpOyB9CisgICAgV2FzbTo6TWVtb3J5TW9kZSBtZW1vcnlNb2RlKCkg
eyByZXR1cm4gbWVtb3J5KCktPm1lbW9yeSgpLm1vZGUoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJs
eVRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KICAgICB2b2lkIHNldFRh
YmxlKFZNJiB2bSwgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSkgeyBtX3RhYmxlLnNldCh2bSwg
dGhpcywgdGFibGUpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IDU2ZjIwYjQuLmY0MTQ2N2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dl
YkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUp
IH07CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxk
Q29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpQbGFuJiBwbGFuLCBzdGQ6
Om9wdGlvbmFsPFdhc206Ok1lbW9yeTo6TW9kZT4gbW9kZSkKK0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmJ1aWxkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBXYXNtOjpQbGFuJiBwbGFuLCBzdGQ6Om9wdGlvbmFsPFdhc206Ok1lbW9yeU1vZGU+
IG1vZGUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IC8vIE9uIGZhaWx1cmUsIGEgbmV3IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciBpcyB0aHJvd24u
CkBAIC04NSwxNCArODUsMTQgQEAgSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1v
ZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogCiBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkKIHsKLSAgICBXYXNtOjpNZW1vcnk6Ok1v
ZGUgbW9kZSA9IG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpOworICAgIFdhc206Ok1lbW9yeU1vZGUg
bW9kZSA9IG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IFdhc206Ok1lbW9yeTo6TnVtYmVyT2ZNb2RlczsgKytpKSB7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IFdhc206Ok51bWJlck9mTWVtb3J5TW9kZXM7ICsraSkgewogICAgICAg
ICBpZiAobV9jb2RlQmxvY2tzW2ldICYmIG1fY29kZUJsb2Nrc1tpXS0+aXNTYWZlVG9SdW4obWVt
b3J5KSkKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja3NbaV0uZ2V0KCk7CiAgICAgfQog
Ci0gICAgQVNTRVJUKCFtX2NvZGVCbG9ja3NbbW9kZV0pOworICAgIEFTU0VSVCghY29kZUJsb2Nr
Rm9yKG1vZGUpKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvZGUgYmxvY2sgZm9yIHRoaXMgbW9kZSwgd2UgbmVlZCB0
byByZWNvbXBpbGUuLi4KICAgICBXYXNtOjpQbGFuIHBsYW4oJnZtLCBzdGF0aWNfY2FzdDx1aW50
OF90Kj4obV9zb3VyY2VCdWZmZXItPmRhdGEoKSksIG1fc291cmNlQnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpOwpAQCAtMTA3LDcgKzEwNyw3IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNvZGVCbG9jayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywKICAgICB9CiAK
ICAgICBBU1NFUlQobW9kZSA9PSBjb2RlQmxvY2stPm1vZGUoKSk7Ci0gICAgbV9jb2RlQmxvY2tz
W21vZGVdLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKKyAgICBjb2RlQmxvY2tGb3IobW9kZSku
c2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogICAgIHJldHVybiBjb2RlQmxvY2s7CiB9CiAKQEAg
LTEzMiw3ICsxMzIsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50OF90KiBzb3VyYwogICAgIG1fc291cmNlQnVm
ZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzb3VyY2UsIGJ5dGVTaXplKTsKICAgICBtX21vZHVs
ZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBtX2V4cG9y
dFN5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgZXhwb3J0U3ltYm9sVGFibGUpOwotICAgIG1fY29k
ZUJsb2Nrc1tjb2RlQmxvY2stPm1vZGUoKV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAg
IGNvZGVCbG9ja0Zvcihjb2RlQmxvY2stPm1vZGUoKSkuc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2sp
OwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpA
QCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2V4cG9ydFN5bWJvbFRhYmxlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
V2FzbTo6TWVtb3J5OjpOdW1iZXJPZk1vZGVzOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IFdhc206Ok51bWJlck9mTWVtb3J5TW9kZXM7ICsraSkKICAgICAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDcwNDA2
OGMuLjM4OWU2M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTYyLDEyICs2MiwxMyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgLy8gUmV0dXJucyB0aGUgY29kZSBibG9jayB0aGF0IHRoaXMgbW9kdWxlIHdhcyBvcmln
aW5hbGx5IGNvbXBpbGVkIGV4cGVjdGluZyB0byB1c2UuIFRoaXMgd29uJ3QgbmVlZCB0byByZWNv
bXBpbGUuCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4g
bV9jb2RlQmxvY2tzW21fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2RlKCldLmdldCgpOyB9
CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gY29kZUJs
b2NrRm9yKG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tb2RlKCkpLmdldCgpOyB9CiAgICAg
Ly8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgY29kZSBibG9jayBmb3IgdGhlIGdpdmVuIG1lbW9y
eSwgcG9zc2libHkgdHJpZ2dlcmluZyBhIHJlY29tcGlsZS4KICAgICBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBjb2RlQmxvY2soVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TWVtb3J5Kik7
CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogYnVpbGRDb2RlQmxvY2so
Vk0mLCBFeGVjU3RhdGUqLCBXYXNtOjpQbGFuJiwgc3RkOjpvcHRpb25hbDxXYXNtOjpNZW1vcnk6
Ok1vZGU+IG1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrPiYgY29kZUJsb2NrRm9yKFdhc206Ok1lbW9yeU1vZGUgbW9kZSkgeyByZXR1
cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldOyB9CisgICAgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayogYnVpbGRDb2RlQmxvY2soVk0mLCBFeGVjU3RhdGUqLCBXYXNtOjpQ
bGFuJiwgc3RkOjpvcHRpb25hbDxXYXNtOjpNZW1vcnlNb2RlPiBtb2RlID0gc3RkOjpudWxsb3B0
KTsKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgRXhlY1N0YXRlKiwgdWludDhfdCogc291cmNlLCBzaXplX3Qg
Ynl0ZVNpemUpOwpAQCAtNzcsNyArNzgsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gbV9zb3VyY2VCdWZmZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xU
YWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJs
eUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tzW1dhc206Ok1lbW9yeTo6TnVtYmVyT2ZNb2Rlc107Cisg
ICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNt
OjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggN2YwNzMwNS4uMGMzYmRhZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNTEx
MjllMy4uN2NiYTU0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLSAKMi4xMC4xCgo=
</data>
<flag name="review"
          id="326699"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
    <flag name="commit-queue"
          id="326700"
          type_id="3"
          status="-"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305324</attachid>
            <date>2017-03-24 14:42:41 -0700</date>
            <delta_ts>2017-03-24 15:09:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-memory-wast-js.patch</filename>
            <type>text/plain</type>
            <size>33309</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBlYmJmNTEzNWY0YThiM2EzNTVkOGU5ZTA0NGRiZDUzODAyN2MwZTVhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDE3IE1hciAyMDE3IDE3OjAzOjQzIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gbWVtb3J5
LXdhc3QtanMKCi0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgfCA0MyArKysrKysrKysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaCAgIHwgIDggKy0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgICB8ICA2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDgwICsrKysrKysrKysrKystLS0tLS0tLS0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCAgICAgICAgICAgIHwgMzEg
KysrKystLS0tCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
Y3BwICB8IDE1ICsrKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5oIHwgIDYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaCAgICAgIHwgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmNwcCAgICAgICAgICAgIHwgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuLmggICAgICAgICAgICAgIHwgIDYgKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suY3BwICAgICAgICAgICAgIHwgMjAgKysrKy0tCiAuLi4vSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCB8ICAyICstCiAuLi4vSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCB8IDE2ICsrLS0tCiAuLi4vSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggICB8ICA3ICstCiAxNCBmaWxlcyBj
aGFuZ2VkLCAxNjYgaW5zZXJ0aW9ucygrKSwgODIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKaW5kZXggZjE3OGMxZC4uYjVlMDA3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDYgQEAKKzIwMTctMDMtMTcgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBw
bGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBzcGVjLXRlc3RzL21lbW9yeS53YXN0Lmpz
IGZhaWxzIGluIGRlYnVnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjk3OTQKKworICAgICAgICBSZXZpZXdlZCBieSBLZWl0aCBNaWxsZXIuCisKKyAg
ICAgICAgVGhlIGZhaWx1cmUgd2FzIGR1ZSB0byBlbXB0eSBtZW1vcmllcyAod2l0aCBtYXhpbXVt
IHNpemUgMCkuIFRob3NlCisgICAgICAgIG9ubHkgb2NjdXIgaW4gdGVzdHMgYW5kIGluIGNvZGUg
dGhhdCdzIHRyeWluZyB0byB0cmlwIHVzLiBUaGlzCisgICAgICAgIHBhdGNoIGFkZHMgbWVtb3J5
IG1vZGUgIm5vbmUiIHdoaWNoIHJlcHJlc2VudHMgbm8gbWVtb3J5LiBJdCBjYW4KKyAgICAgICAg
d29yayB3aXRoIGVpdGhlciBib3VuZHMgY2hlY2tlZCBvciBzaWduYWxpbmcgY29kZSBiZWNhdXNl
IGl0IG5ldmVyCisgICAgICAgIGNvbnRhaW5zIGxvYWRzIGFuZCBzdG9yZXMuCisKKyAgICAgICAg
VGhlIHNwZWMgdGVzdHMgd2hpY2ggd2VyZSBmYWlsaW5nIGRpZCB0aGUgZm9sbG93aW5nOgorICAg
ICAgICAgICAgPiAobW9kdWxlIChtZW1vcnkgKGRhdGEpKSAoZnVuYyAoZXhwb3J0ICJtZW1zaXpl
IikgKHJlc3VsdCBpMzIpIChjdXJyZW50X21lbW9yeSkpKQorICAgICAgICAgICAgPiAoYXNzZXJ0
X3JldHVybiAoaW52b2tlICJtZW1zaXplIikgKGkzMi5jb25zdCAwKSkKKyAgICAgICAgICAgID4g
KG1vZHVsZSAobWVtb3J5IChkYXRhICIiKSkgKGZ1bmMgKGV4cG9ydCAibWVtc2l6ZSIpIChyZXN1
bHQgaTMyKSAoY3VycmVudF9tZW1vcnkpKSkKKyAgICAgICAgICAgID4gKGFzc2VydF9yZXR1cm4g
KGludm9rZSAibWVtc2l6ZSIpIChpMzIuY29uc3QgMCkpCisgICAgICAgICAgICA+IChtb2R1bGUg
KG1lbW9yeSAoZGF0YSAieCIpKSAoZnVuYyAoZXhwb3J0ICJtZW1zaXplIikgKHJlc3VsdCBpMzIp
IChjdXJyZW50X21lbW9yeSkpKQorICAgICAgICAgICAgPiAoYXNzZXJ0X3JldHVybiAoaW52b2tl
ICJtZW1zaXplIikgKGkzMi5jb25zdCAxKSkKKworICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjptZW1vcnlLaW5k
KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0
cnlHZXRGYXN0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVsZWFzZUZhc3RNZW1vcnkp
OgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TWVtb3J5OjptYWtlU3RyaW5nKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoK
KyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbik6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9SdW4pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrRm9yKToKKwogMjAxNy0wMy0xNyAgTWljaGFlbCBT
YWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgVVNFX0lOVEVSTkFMX1NE
SyB0byBjb21wdXRlIEVOQUJMRV9GQVNUX0pJVF9QRVJNSVNTSU9OUyBpbnN0ZWFkIG9mIEhBVkVf
SU5URVJOQUxfU0RLCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmgKaW5kZXggNDVkMGNkOS4uZmU4YzNmMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApAQCAtNDQs
NyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0
cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
Y3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIEJhZzxDYWxsTGlua0lu
Zm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYgZXhpdFN0
dWJzLCBXYXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCisgICAg
c3RhdGljIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1i
bHlNb2R1bGUqIG93bmVyLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3Rv
cjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmIGV4aXRTdHVicywgV2FzbTo6TWVtb3J5TW9kZSBtb2Rl
LCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKICAgICB7CiAgICAgICAgIGF1dG8qIHJlc3VsdCA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXAs
IGFsbG9jYXRpb25TaXplKGNhbGxlZUNvdW50KSkpIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0s
IG93bmVyLCBzdGQ6OmZvcndhcmQ8QmFnPENhbGxMaW5rSW5mbz4+KGNhbGxMaW5rSW5mb3MpLCBz
dGQ6OmZvcndhcmQ8VmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+PihleGl0U3R1YnMpLCBtb2Rl
LCBjYWxsZWVDb3VudCk7CiAgICAgICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAt
NTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBv
cnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IH0KLSAgICBX
YXNtOjpNZW1vcnk6Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIFdh
c206Ok1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIEpTV2Vi
QXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9
CiAgICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5Kik7CiAKQEAgLTEwMSw3
ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgQmFnPENhbGxMaW5rSW5mbz4mJiwg
VmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFdhc206Ok1lbW9yeTo6TW9kZSwgdW5zaWdu
ZWQgY2FsbGVlQ291bnQpOworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mLCBKU1dlYkFz
c2VtYmx5TW9kdWxlKiwgQmFnPENhbGxMaW5rSW5mbz4mJiwgVmVjdG9yPFdhc206Oldhc21FeGl0
U3R1YnM+JiYsIFdhc206Ok1lbW9yeU1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKICAgICBE
RUNMQVJFX0VYUE9SVF9JTkZPOwogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC0xMjUsNyAr
MTI1LDcgQEAgcHJpdmF0ZToKICAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAg
ICAgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsKLSAgICBXYXNt
OjpNZW1vcnk6Ok1vZGUgbV9tb2RlOworICAgIFdhc206Ok1lbW9yeU1vZGUgbV9tb2RlOwogICAg
IHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMGEyZTVjYy4uOWVlZDE5NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
NTgsNyArNDU4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKIGlubGluZSBWYWx1ZSogQjNJ
UkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9p
bnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCiB7CiAgICAg
QVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7Ci0gICAgaWYgKG1faW5mby5tZW1vcnkubW9kZSgpID09
IE1lbW9yeTo6TW9kZTo6Qm91bmRzQ2hlY2tpbmcpIHsKKyAgICBpZiAobV9pbmZvLm1lbW9yeS5t
b2RlKCkgPT0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpIHsKICAgICAgICAgQVNTRVJUKG1f
bWVtb3J5U2l6ZUdQUik7CiAgICAgICAgIEFTU0VSVChzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQg
PiBvZmZzZXQpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHND
aGVja1ZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBwb2ludGVyLCBtX21lbW9yeVNpemVHUFIsIHNp
emVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOwpAQCAtNDk0LDcgKzQ5NCw3IEBAIGlubGluZSB1
aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlwZSBvcCkKIAogaW5saW5lIEIzOjpLaW5kIEIz
SVJHZW5lcmF0b3I6Om1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCkKIHsKLSAgICBpZiAo
bV9pbmZvLm1lbW9yeS5tb2RlKCkgPT0gTWVtb3J5OjpTaWduYWxpbmcpCisgICAgaWYgKG1faW5m
by5tZW1vcnkubW9kZSgpID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZykKICAgICAgICAgcmV0dXJu
IHRyYXBwaW5nKG1lbW9yeU9wKTsKICAgICByZXR1cm4gbWVtb3J5T3A7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGViMWRkNzguLjNkMTc2YzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDExICs1NiwyMiBA
QCBpbmxpbmUgYm9vbCBtbWFwQnl0ZXMoc2l6ZV90IGJ5dGVzLCB2b2lkKiYgbWVtb3J5KQogICAg
IHJldHVybiB0cnVlOwogfQogCitjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9k
ZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNp
Z25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6TnVtYmVy
T2ZNZW1vcnlNb2RlczogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCiAvLyBXZSB1c2UgdGhpcyBhcyBhIGhldXJpc3Rp
YyB0byBndWVzcyB3aGF0IG1vZGUgYSBtZW1vcnkgaW1wb3J0IHdpbGwgYmUuIE1vc3Qgb2YgdGhl
IHRpbWUgd2UgZXhwZWN0IHVzZXJzIHRvCiAvLyBhbGxvY2F0ZSB0aGUgbWVtb3J5IHRoZXkgYXJl
IGdvaW5nIHRvIHBhc3MgdG8gYWxsIHRoZWlyIG1vZHVsZXMgcmlnaHQgYmVmb3JlIGNvbXBpbGF0
aW9uLgotc3RhdGljIE1lbW9yeTo6TW9kZSBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSB7IE1lbW9y
eTo6TW9kZTo6U2lnbmFsaW5nIH07CitzdGF0aWMgTWVtb3J5TW9kZSBsYXN0QWxsb2NhdGVkTWVt
b3J5TW9kZSB7IE1lbW9yeU1vZGU6OlNpZ25hbGluZyB9OwogCi1NZW1vcnk6Ok1vZGUgTWVtb3J5
OjpsYXN0QWxsb2NhdGVkTW9kZSgpCitNZW1vcnlNb2RlIE1lbW9yeTo6bGFzdEFsbG9jYXRlZE1v
ZGUoKQogewogICAgIHJldHVybiBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZTsKIH0KQEAgLTg1LDcg
Kzk2LDcgQEAgY29uc3QgSGFzaFNldDx2b2lkKj4mIHZpZXdBY3RpdmVGYXN0TWVtb3JpZXMoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKICAgICByZXR1cm4gYWN0aXZlRmFzdE1lbW9yaWVz
KGxvY2tlcik7CiB9CiAKLWlubGluZSBib29sIHRyeUdldEZhc3RNZW1vcnkoVk0mIHZtLCB2b2lk
KiYgbWVtb3J5LCBzaXplX3QmIG1hcHBlZENhcGFjaXR5LCBNZW1vcnk6Ok1vZGUmIG1vZGUpCitp
bmxpbmUgYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwgdm9pZComIG1lbW9yeSwgc2l6ZV90
JiBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSYgbW9kZSkKIHsKICAgICAvLyBXZSBtaWdodCBH
QyBoZXJlIHNvIHdlIHNob3VsZCBiZSBob2xkaW5nIHRoZSBBUEkgbG9jay4KICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3luY3Jvbm91c2x5IHRyaWdnZXIgdGhlIEdDIGZyb20g
YW5vdGhlciB0aHJlYWQuCkBAIC0xMDYsNyArMTE3LDcgQEAgaW5saW5lIGJvb2wgdHJ5R2V0RmFz
dE1lbW9yeShWTSYgdm0sIHZvaWQqJiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHksIE1l
bW8KICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlciku
YWRkKG1lbW9yeSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0Lmlz
TmV3RW50cnkpOwogICAgICAgICAgICAgbWFwcGVkQ2FwYWNpdHkgPSBmYXN0TWVtb3J5TWFwcGVk
Qnl0ZXM7Ci0gICAgICAgICAgICBtb2RlID0gTWVtb3J5OjpTaWduYWxpbmc7CisgICAgICAgICAg
ICBtb2RlID0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI1LDcgKzEzNiw3IEBAIGlu
bGluZSBib29sIHRyeUdldEZhc3RNZW1vcnkoVk0mIHZtLCB2b2lkKiYgbWVtb3J5LCBzaXplX3Qm
IG1hcHBlZENhcGFjaXR5LCBNZW1vCiAKICAgICBpZiAobW1hcEJ5dGVzKGZhc3RNZW1vcnlNYXBw
ZWRCeXRlcywgbWVtb3J5KSkgewogICAgICAgICBtYXBwZWRDYXBhY2l0eSA9IGZhc3RNZW1vcnlN
YXBwZWRCeXRlczsKLSAgICAgICAgbW9kZSA9IE1lbW9yeTo6U2lnbmFsaW5nOworICAgICAgICBt
b2RlID0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nOwogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
ZW1vcnlMb2NrKTsKICAgICAgICAgYWxsb2NhdGVkRmFzdE1lbW9yaWVzKys7CiAgICAgICAgIGF1
dG8gcmVzdWx0ID0gYWN0aXZlRmFzdE1lbW9yaWVzKGxvY2tlcikuYWRkKG1lbW9yeSk7CkBAIC0x
MzQsOSArMTQ1LDkgQEAgaW5saW5lIGJvb2wgdHJ5R2V0RmFzdE1lbW9yeShWTSYgdm0sIHZvaWQq
JiBtZW1vcnksIHNpemVfdCYgbWFwcGVkQ2FwYWNpdHksIE1lbW8KICAgICByZXR1cm4gbWVtb3J5
OwogfQogCi1pbmxpbmUgdm9pZCByZWxlYXNlRmFzdE1lbW9yeSh2b2lkKiYgbWVtb3J5LCBzaXpl
X3Qgd3JpdGFibGVTaXplLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeTo6TW9kZSBtb2Rl
KQoraW5saW5lIHZvaWQgcmVsZWFzZUZhc3RNZW1vcnkodm9pZComIG1lbW9yeSwgc2l6ZV90IHdy
aXRhYmxlU2l6ZSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUpCiB7Ci0g
ICAgaWYgKG1vZGUgIT0gTWVtb3J5OjpTaWduYWxpbmcgfHwgIW1lbW9yeSkKKyAgICBpZiAobW9k
ZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcgfHwgIW1lbW9yeSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUkVMRUFTRV9BU1NFUlQobWVtb3J5ICYmIG1hcHBlZENhcGFjaXR5ID09IGZhc3RNZW1v
cnlNYXBwZWRCeXRlcyk7CkBAIC0xNTksOSArMTcwLDExIEBAIE1lbW9yeTo6TWVtb3J5KFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAgICAsIG1fbWF4aW11bShtYXhpbXVt
KQogewogICAgIEFTU0VSVCghaW5pdGlhbC5ieXRlcygpKTsKKyAgICBBU1NFUlQobV9tb2RlID09
IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
TWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CiAKLU1lbW9yeTo6TWVtb3J5
KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXpl
X3QgbWFwcGVkQ2FwYWNpdHksIE1vZGUgbW9kZSkKK01lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9y
eSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2Fw
YWNpdHksIE1lbW9yeU1vZGUgbW9kZSkKICAgICA6IG1fbWVtb3J5KG1lbW9yeSkKICAgICAsIG1f
c2l6ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKQEAgLTE3Miwy
MCArMTg1LDIwIEBAIE1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRp
YWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkCiAgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRoaXMpOwogfQogCi1SZWZQdHI8
TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZUltcGwoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TW9kZT4gcmVxdWlyZWRNb2RlKQorUmVmUHRy
PE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVJbXBsKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBh
Z2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlcXVpcmVkTW9kZSkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAv
LyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCiAKLSAgICBNb2RlIG1v
ZGUgPSByZXF1aXJlZE1vZGUgPyAqcmVxdWlyZWRNb2RlIDogQm91bmRzQ2hlY2tpbmc7CisgICAg
TWVtb3J5TW9kZSBtb2RlID0gcmVxdWlyZWRNb2RlID8gKnJlcXVpcmVkTW9kZSA6IE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nOwogICAgIGNvbnN0IHNpemVfdCBzaXplID0gaW5pdGlhbC5ieXRl
cygpOwogICAgIHNpemVfdCBtYXBwZWRDYXBhY2l0eSA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVz
KCkgOiBQYWdlQ291bnQ6Om1heCgpLmJ5dGVzKCk7CiAgICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0
cjsKIAogICAgIGF1dG8gbWFrZUVtcHR5TWVtb3J5ID0gWyZdICgpIC0+IFJlZlB0cjxNZW1vcnk+
IHsKLSAgICAgICAgaWYgKG1vZGUgPT0gU2lnbmFsaW5nKQorICAgICAgICBpZiAobW9kZSA9PSBN
ZW1vcnlNb2RlOjpTaWduYWxpbmcpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
ICAgICBsYXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IEJvdW5kc0NoZWNraW5nOworICAgICAgICBs
YXN0QWxsb2NhdGVkTWVtb3J5TW9kZSA9IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOwogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7CiAgICAg
fTsKIApAQCAtMTk2LDkgKzIwOSw5IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlSW1w
bChWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwKICAgICAgICAg
cmV0dXJuIG1ha2VFbXB0eU1lbW9yeSgpOwogICAgIH0KIAotICAgIGJvb2wgY2FuVXNlRmFzdE1l
bW9yeSA9ICFyZXF1aXJlZE1vZGUgfHwgcmVxdWlyZWRNb2RlID09IFNpZ25hbGluZzsKKyAgICBi
b29sIGNhblVzZUZhc3RNZW1vcnkgPSAhcmVxdWlyZWRNb2RlIHx8IHJlcXVpcmVkTW9kZSA9PSBN
ZW1vcnlNb2RlOjpTaWduYWxpbmc7CiAgICAgaWYgKCFjYW5Vc2VGYXN0TWVtb3J5IHx8ICF0cnlH
ZXRGYXN0TWVtb3J5KHZtLCBtZW1vcnksIG1hcHBlZENhcGFjaXR5LCBtb2RlKSkgewotICAgICAg
ICBpZiAobW9kZSA9PSBTaWduYWxpbmcpCisgICAgICAgIGlmIChtb2RlID09IE1lbW9yeU1vZGU6
OlNpZ25hbGluZykKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGlmIChP
cHRpb25zOjpzaW11bGF0ZVdlYkFzc2VtYmx5TG93TWVtb3J5KCkgPyB0cnVlIDogIW1tYXBCeXRl
cyhtYXBwZWRDYXBhY2l0eSwgbWVtb3J5KSkgewpAQCAtMjE5LDYgKzIzMiw3IEBAIFJlZlB0cjxN
ZW1vcnk+IE1lbW9yeTo6Y3JlYXRlSW1wbChWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdl
Q291bnQgbWF4aW11bSwKIAogICAgIEFTU0VSVChtZW1vcnkgJiYgc2l6ZSA8PSBtYXBwZWRDYXBh
Y2l0eSk7CiAgICAgaWYgKG1wcm90ZWN0KG1lbW9yeSwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9X
UklURSkpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGV2ZXIgb2NjdXI/IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4OTAKICAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Y3JlYXRlIG1wcm90ZWN0IGZhaWxlZCIpOwogICAgICAg
ICByZWxlYXNlRmFzdE1lbW9yeShtZW1vcnksIDAsIG1hcHBlZENhcGFjaXR5LCBtb2RlKTsKICAg
ICAgICAgaWYgKG1lbW9yeSkgewpAQCAtMjI3LDIyICsyNDEsMjEgQEAgUmVmUHRyPE1lbW9yeT4g
TWVtb3J5OjpjcmVhdGVJbXBsKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBt
YXhpbXVtLAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICAK
KwogICAgIGxhc3RBbGxvY2F0ZWRNZW1vcnlNb2RlID0gbW9kZTsKICAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiTWVtb3J5OjpjcmVhdGUgbW1hcCBzdWNjZWVkZWQiKTsKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lbW9yeShtZW1vcnksIGluaXRpYWwsIG1heGltdW0sIG1hcHBlZENhcGFjaXR5
LCBtb2RlKSk7CiB9CiAKLVJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFn
ZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1v
ZGUpCitSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiBtb2RlKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8v
IFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KICAgICBSZWZQdHI8TWVt
b3J5PiByZXN1bHQgPSBjcmVhdGVJbXBsKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBtb2RlKTsKICAg
ICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9PSBTaWduYWxpbmcp
CisgICAgICAgIGlmIChyZXN1bHQtPm1vZGUoKSA9PSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQtPm1fbWFwcGVkQ2FwYWNpdHkgPT0gZmFz
dE1lbW9yeU1hcHBlZEJ5dGVzKTsKICAgICAgICAgaWYgKG1vZGUpCiAgICAgICAgICAgICBBU1NF
UlQoKm1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpOwotICAgICAgICBBU1NFUlQobGFzdEFsbG9jYXRl
ZE1lbW9yeU1vZGUgPT0gcmVzdWx0LT5tb2RlKCkpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtMjY4LDggKzI4MSwyMSBAQCBib29sIE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgbmV3
U2l6ZSkKIAogICAgIHNpemVfdCBkZXNpcmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsKIAorICAg
IHN3aXRjaCAobW9kZSgpKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQobWF4aW11bSgpLmJ5dGVzKCkgIT0gMCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgorICAgICAgICAvLyBTaWdu
YWxpbmcgbWVtb3J5IG11c3QgaGF2ZSBiZWVuIHByZS1hbGxvY2F0ZWQgdmlydHVhbGx5LgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX21lbW9yeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TWVtb3J5TW9kZTo6TnVtYmVyT2ZNZW1vcnlNb2RlczoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKICAgICBpZiAobV9tZW1vcnkgJiYgZGVzaXJlZFNpemUg
PD0gbV9tYXBwZWRDYXBhY2l0eSkgewogICAgICAgICBpZiAobXByb3RlY3Qoc3RhdGljX2Nhc3Q8
dWludDhfdCo+KG1fbWVtb3J5KSArIG1fc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkZXNpcmVk
U2l6ZSAtIG1fc2l6ZSksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogc2hvdWxkIHRoaXMgZXZlciBvY2N1cj8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2OTg5MAogICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
Ik1lbW9yeTo6Z3JvdyBpbi1wbGFjZSBmYWlsZWQgIiwgKnRoaXMpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0yNzksOCArMzA1LDExIEBAIGJvb2wgTWVtb3J5Ojpn
cm93KFBhZ2VDb3VudCBuZXdTaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBBU1NFUlQobW9kZSgpICE9IFNpZ25hbGluZyk7CisgICAgLy8gU2lnbmFsaW5nIG1lbW9yeSBj
YW4ndCBncm93IHBhc3QgaXRzIGFscmVhZHktbWFwcGVkIHNpemUuCisgICAgUkVMRUFTRV9BU1NF
UlQobW9kZSgpICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZyk7CisKICAgICAvLyBPdGhlcndpc2Us
IGxldCdzIHRyeSB0byBtYWtlIHNvbWUgbmV3IG1lbW9yeS4KKyAgICAvLyBGSVhNRTogSXQgd291
bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCiAgICAgdm9pZCogbmV3TWVtb3J5
ID0gbW1hcChudWxscHRyLCBkZXNpcmVkU2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQ
X1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwogICAgIGlmIChuZXdNZW1vcnkgPT0gTUFQX0ZB
SUxFRCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzAzLDE3ICszMzIsNiBAQCB2b2lkIE1l
bW9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIG91dC5wcmludCgiTWVtb3J5
IGF0ICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNp
dHkgIiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGlt
dW0gIiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKIH0KIAotY29u
c3QgY2hhciogTWVtb3J5OjptYWtlU3RyaW5nKE1vZGUgbW9kZSkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5k
c0NoZWNraW5nIjsKLSAgICBjYXNlIE1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmci
OwotICAgIGNhc2UgTW9kZTo6TnVtYmVyT2ZNb2RlczogYnJlYWs7Ci0gICAgfQotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogfSAvLyBuYW1lc3BhY2UgV2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeS5oCmluZGV4IDYzMDBhNTkuLmQxM2QwYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsMjMgKzQ0LDI0IEBAIGNsYXNzIFZNOwogCiBuYW1lc3Bh
Y2UgV2FzbSB7CiAKKy8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4gc2Vl
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCitlbnVtIGNs
YXNzIE1lbW9yeU1vZGUgeworICAgIEJvdW5kc0NoZWNraW5nLAorICAgIFNpZ25hbGluZywKKyAg
ICBOdW1iZXJPZk1lbW9yeU1vZGVzCit9Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVy
T2ZNZW1vcnlNb2RlcyA9IHN0YXRpY19jYXN0PHNpemVfdD4oTWVtb3J5TW9kZTo6TnVtYmVyT2ZN
ZW1vcnlNb2Rlcyk7Citjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOworCiBjbGFz
cyBNZW1vcnkgOiBwdWJsaWMgUmVmQ291bnRlZDxNZW1vcnk+IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShNZW1vcnkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIHZvaWQgZHVtcChXVEY6OlByaW50U3RyZWFtJikgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwotICAgIGVudW0gTW9kZSB7Ci0gICAgICAgIEJvdW5k
c0NoZWNraW5nLAotICAgICAgICBTaWduYWxpbmcsCi0gICAgICAgIE51bWJlck9mTW9kZXMKLSAg
ICB9OwotICAgIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTW9kZSkgY29uc3Q7Ci0KICAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9yeTsgfQogCi0gICAg
c3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdl
Q291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNb2RlPiByZXF1aXJlZE1vZGUgPSBzdGQ6Om51
bGxvcHQpOworICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291bnQg
aW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gcmVx
dWlyZWRNb2RlID0gc3RkOjpudWxsb3B0KTsKIAogICAgIE1lbW9yeSgpID0gZGVmYXVsdDsKICAg
ICB+TWVtb3J5KCk7CkBAIC03Miw4ICs3Myw4IEBAIHB1YmxpYzoKICAgICBQYWdlQ291bnQgaW5p
dGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbDsgfQogICAgIFBhZ2VDb3VudCBtYXhpbXVt
KCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9CiAKLSAgICBzdGF0aWMgTW9kZSBsYXN0QWxs
b2NhdGVkTW9kZSgpOwotICAgIE1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQor
ICAgIHN0YXRpYyBNZW1vcnlNb2RlIGxhc3RBbGxvY2F0ZWRNb2RlKCk7CisgICAgTWVtb3J5TW9k
ZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKICAgICAvLyBncm93KCkgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIEpTV2ViQXNzZW1ibHlNZW1vcnkgb2JqZWN0IHNpbmNl
IHRoYXQgb2JqZWN0IG5lZWRzIHRvIHVwZGF0ZSBpbnRlcm5hbAogICAgIC8vIHBvaW50ZXJzIHdp
dGggdGhlIGN1cnJlbnQgYmFzZSBhbmQgc2l6ZS4KQEAgLTgxLDggKzgyLDggQEAgcHVibGljOgog
CiAgICAgdm9pZCBjaGVjaygpIHsgIEFTU0VSVCghZGVsZXRpb25IYXNCZWd1bigpKTsgfQogcHJp
dmF0ZToKLSAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlSW1wbChWTSYsIFBhZ2VDb3Vu
dCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNb2RlPiByZXF1aXJl
ZE1vZGUgPSBzdGQ6Om51bGxvcHQpOwotICAgIE1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3Vu
dCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNb2Rl
KTsKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlSW1wbChWTSYsIFBhZ2VDb3VudCBp
bml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiByZXF1
aXJlZE1vZGUgPSBzdGQ6Om51bGxvcHQpOworICAgIE1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBN
ZW1vcnlNb2RlKTsKICAgICBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtKTsKIAogICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgbW92ZSB0aGVzZSB0byB0aGUgaW5zdGFu
Y2UgdG8gYXZvaWQgYSBsb2FkIG9uIGluc3RhbmNlLT5pbnN0YW5jZSBjYWxscy4KQEAgLTkxLDcg
KzkyLDcgQEAgcHJpdmF0ZToKICAgICBQYWdlQ291bnQgbV9pbml0aWFsOwogICAgIFBhZ2VDb3Vu
dCBtX21heGltdW07CiAgICAgc2l6ZV90IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07Ci0gICAgTW9k
ZSBtX21vZGUgeyBNb2RlOjpCb3VuZHNDaGVja2luZyB9OworICAgIE1lbW9yeU1vZGUgbV9tb2Rl
IHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKIH07CiAKIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKHVpbnQ2NF90KSA9PSBzaXplb2Yoc2l6ZV90KSwgIldlIHJlbHkgb24gYWxsb3dpbmcgdGhl
IG1heGltdW0gc2l6ZSBvZiBNZW1vcnkgd2UgbWFwIHRvIGJlIDJeMzMgd2hpY2ggaXMgbGFyZ2Vy
IHRoYW4gZml0cyBpbiBhIDMyLWJpdCBpbnRlZ2VyIHRoYXQgd2UnZCBwYXNzIHRvIG1wcm90ZWN0
IGlmIHRoaXMgZGlkbid0IGhvbGQuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAppbmRleCAyNGYxODE1Li44YWMwODY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzQsNyArNzQsNyBAQCBQaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVy
SW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaQogewogfQogCi1N
ZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3JtYXRpb24oVk0mIHZtLCBQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiByZWNv
bXBpbGVNb2RlLCBib29sIGlzSW1wb3J0KQorTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9y
bWF0aW9uKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzdGQ6
Om9wdGlvbmFsPE1lbW9yeU1vZGU+IHJlY29tcGlsZU1vZGUsIGJvb2wgaXNJbXBvcnQpCiAgICAg
OiBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQogICAgICwgbV9p
c0ltcG9ydChpc0ltcG9ydCkKQEAgLTg1LDcgKzg1LDE2IEBAIE1lbW9yeUluZm9ybWF0aW9uOjpN
ZW1vcnlJbmZvcm1hdGlvbihWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11CiAKICAgICBpZiAoIXJlY29tcGlsZU1vZGUpIHsKICAgICAgICAgaWYgKCFpc0ltcG9ydCkg
ewotICAgICAgICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0
aWFsLCBtYXhpbXVtLCBNZW1vcnk6OlNpZ25hbGluZyk7CisgICAgICAgICAgICBpZiAobWF4aW11
bSAmJiBtYXhpbXVtLmJ5dGVzKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIG1fcmVzZXJ2ZWRN
ZW1vcnkgPSBNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmcpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2
ZWRNZW1vcnkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVzZXJ2ZWRNZW1v
cnktPm1heGltdW0oKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9yZXNlcnZl
ZE1lbW9yeS0+bWF4aW11bSgpLmJ5dGVzKCkgPT0gMCk7CisgICAgICAgICAgICAgICAgbV9tb2Rl
ID0gbV9yZXNlcnZlZE1lbW9yeS0+bW9kZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9yZXNlcnZlZE1lbW9yeSA9IE1lbW9yeTo6Y3Jl
YXRlKHZtLCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnlNb2RlOjpTaWduYWxpbmcpOwogICAgICAg
ICAgICAgaWYgKG1fcmVzZXJ2ZWRNZW1vcnkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoISEq
bV9yZXNlcnZlZE1lbW9yeSk7CiAgICAgICAgICAgICAgICAgbV9tb2RlID0gbV9yZXNlcnZlZE1l
bW9yeS0+bW9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5SW5mb3JtYXRpb24uaAppbmRleCA1YTlhNzdhLi42ZGUwNzBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaApAQCAtNTQsMTMg
KzU0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCEqdGhpcyk7CiAgICAgfQogCi0gICAg
TWVtb3J5SW5mb3JtYXRpb24oVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0sIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiwgYm9vbCBpc0ltcG9ydCk7CisgICAgTWVt
b3J5SW5mb3JtYXRpb24oVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4sIGJvb2wgaXNJbXBvcnQpOwogCiAgICAgUGFnZUNv
dW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KICAgICBQYWdlQ291bnQg
bWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQogICAgIGJvb2wgaGFzUmVzZXJ2
ZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc2VydmVkTWVtb3J5OyB9CiAgICAgUmVmUHRy
PE1lbW9yeT4gdGFrZVJlc2VydmVkTWVtb3J5KCkgeyBBU1NFUlQoaGFzUmVzZXJ2ZWRNZW1vcnko
KSk7IHJldHVybiBtX3Jlc2VydmVkTWVtb3J5LnJlbGVhc2UoKTsgfQotICAgIE1lbW9yeTo6TW9k
ZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgTWVtb3J5TW9kZSBtb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9vbCBpc0ltcG9ydCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNJbXBvcnQ7IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAhIW1faW5pdGlhbDsgfQpAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxNZW1vcnk+IG1fcmVzZXJ2ZWRNZW1vcnk7CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbCB7
IH07CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bSB7IH07Ci0gICAgTWVtb3J5OjpNb2RlIG1fbW9k
ZSB7IE1lbW9yeTo6TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKKyAgICBNZW1vcnlNb2RlIG1fbW9k
ZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgYm9vbCBtX2lzSW1wb3J0IHsg
ZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaAppbmRleCA5NGJhMTRlLi5jOTYxOGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBNb2R1
bGVQYXJzZXJSZXN1bHQgewogY2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGljIFBhcnNlcjxNb2R1
bGVQYXJzZXJSZXN1bHQ+IHsKIHB1YmxpYzoKIAotICAgIE1vZHVsZVBhcnNlcihWTSogdm0sIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgc3RkOjpvcHRp
b25hbDxNZW1vcnk6Ok1vZGU+IG1vZGUpCisgICAgTW9kdWxlUGFyc2VyKFZNKiB2bSwgY29uc3Qg
dWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBzdGQ6Om9wdGlvbmFs
PE1lbW9yeU1vZGU+IG1vZGUpCiAgICAgICAgIDogUGFyc2VyKHZtLCBzb3VyY2VCdWZmZXIsIHNv
dXJjZUxlbmd0aCkKICAgICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CkBAIC02Niw3ICs2Niw3
IEBAIHByaXZhdGU6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJ
bml0RXhwcih1aW50OF90JiwgdWludDY0X3QmLCBUeXBlJiBpbml0RXhwclR5cGUpOwogCiAgICAg
TW9kdWxlUGFyc2VyUmVzdWx0IG1fcmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8TWVtb3J5OjpN
b2RlPiBtX21vZGUgeyBzdGQ6Om51bGxvcHQgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPE1lbW9yeU1v
ZGU+IG1fbW9kZSB7IHN0ZDo6bnVsbG9wdCB9OwogICAgIGJvb2wgbV9oYXNUYWJsZSB7IGZhbHNl
IH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggMWE4
ZDNkYy4uYjY1NDI0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApA
QCAtNjMsNyArNjMsNyBAQCBQbGFuOjpQbGFuKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNl
LCBzaXplX3Qgc291cmNlTGVuZ3RoKQogewogfQogCi1ib29sIFBsYW46OnBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUoc3RkOjpvcHRpb25hbDxNZW1vcnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCitib29s
IFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiBy
ZWNvbXBpbGVNb2RlKQogewogICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwogICAgIGlmICh2
ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQpAQCAtMTExLDcgKzExMSw3
IEBAIGJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShzdGQ6Om9wdGlvbmFsPE1lbW9y
eTo6TW9kZT4gcmVjb21waWxlTW9kZSkKIC8vIFRoZSByZWFzb24gdGhpcyBpcyBPSyBpcyB0aGF0
IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBtYWluIHRocmVhZCBkb2Vzbid0IGNvbnRpbnVlIHVudGls
IGFsbCB0aHJlYWRzCiAvLyB0aGF0IGNvdWxkIHRvdWNoIGl0cyBzdGFjayBhcmUgZG9uZSBleGVj
dXRpbmcuCiBTVVBQUkVTU19BU0FOIAotdm9pZCBQbGFuOjpydW4oc3RkOjpvcHRpb25hbDxNZW1v
cnk6Ok1vZGU+IHJlY29tcGlsZU1vZGUpCit2b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1l
bW9yeU1vZGU+IHJlY29tcGlsZU1vZGUpCiB7CiAgICAgaWYgKCFwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKHJlY29tcGlsZU1vZGUpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaAppbmRleCBkMDcwMzc1Li4zNTQ0ZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmgKQEAgLTQ5LDkgKzQ5LDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIFBsYW4oVk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSB+UGxhbigpOwogCi0gICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKHN0
ZDo6b3B0aW9uYWw8TWVtb3J5OjpNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgYm9vbCBwYXJz
ZUFuZFZhbGlkYXRlTW9kdWxlKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gPSBzdGQ6Om51bGxv
cHQpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW4oc3RkOjpvcHRpb25hbDxNZW1v
cnk6Ok1vZGU+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJ1
bihzdGQ6Om9wdGlvbmFsPE1lbW9yeU1vZGU+ID0gc3RkOjpudWxsb3B0KTsKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoSlNHbG9iYWxPYmplY3QqLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQodW5zaWduZWQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqLCBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKik+KTsKIApAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBXVEZNb3ZlKG1fd2FzbUV4aXRTdHVicyk7CiAgICAgfQogCi0gICAgTWVtb3J5OjpNb2RlIG1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgpOyB9
CisgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+bWVtb3J5Lm1vZGUoKTsgfQogCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1
bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKaW5kZXgg
YjIxZjhhNS4uZmY4NzExNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpz
X2luZm8gPSB7ICJXZWJBc3NlbWJseUNvZGVCbG9jayIsIG51bGxwdHIsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNXZWJBc3NlbWJseUNvZGVCbG9jaykgfTsKIAotSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IG93bmVyLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5rSW5mb3MsIFZlY3RvcjxXYXNtOjpX
YXNtRXhpdFN0dWJzPiYmIHdhc21FeGl0U3R1YnMsIFdhc206Ok1lbW9yeTo6TW9kZSBtb2RlLCB1
bnNpZ25lZCBjYWxsZWVDb3VudCkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2soVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBvd25lciwgQmFnPENhbGxM
aW5rSW5mbz4mJiBjYWxsTGlua0luZm9zLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4mJiB3
YXNtRXhpdFN0dWJzLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50
KQogICAgIDogQmFzZSh2bSwgdm0ud2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCkp
CiAgICAgLCBtX2NhbGxMaW5rSW5mb3MoV1RGTW92ZShjYWxsTGlua0luZm9zKSkKICAgICAsIG1f
d2FzbUV4aXRTdHVicyhXVEZNb3ZlKHdhc21FeGl0U3R1YnMpKQpAQCAtNTQsOSArNTQsMjEgQEAg
dm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIAogYm9v
bCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5
KiBtZW1vcnkpCiB7Ci0gICAgaWYgKG1vZGUoKSA9PSBXYXNtOjpNZW1vcnk6OlNpZ25hbGluZykK
LSAgICAgICAgcmV0dXJuIG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpID09IG1vZGUoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBXYXNtOjpNZW1vcnlNb2RlIGNvZGVNb2RlID0gbW9kZSgpOworICAg
IFdhc206Ok1lbW9yeU1vZGUgbWVtb3J5TW9kZSA9IG1lbW9yeS0+bWVtb3J5KCkubW9kZSgpOwor
ICAgIHN3aXRjaCAoY29kZU1vZGUpIHsKKyAgICBjYXNlIFdhc206Ok1lbW9yeU1vZGU6OkJvdW5k
c0NoZWNraW5nOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFdhc206Ok1lbW9yeU1v
ZGU6OlNpZ25hbGluZzoKKyAgICAgICAgLy8gQ29kZSBiZWluZyBpbiBTaWduYWxpbmcgbW9kZSBt
ZWFucyB0aGF0IGl0IHBlcmZvcm1zIG5vIGJvdW5kcyBjaGVja3MuCisgICAgICAgIC8vIEl0cyBt
ZW1vcnksIGV2ZW4gaWYgZW1wdHksIGFic29sdXRlbHkgbXVzdCBhbHNvIGJlIGluIFNpZ25hbGlu
ZyBtb2RlCisgICAgICAgIC8vIGJlY2F1c2UgdGhlIHBhZ2UgcHJvdGVjdGlvbiBkZXRlY3RzIG91
dC1vZi1ib3VuZHMgYWNjZXNzZXMuCisgICAgICAgIHJldHVybiBtZW1vcnlNb2RlID09IFdhc206
Ok1lbW9yeU1vZGU6OlNpZ25hbGluZzsKKyAgICBjYXNlIFdhc206Ok1lbW9yeU1vZGU6Ok51bWJl
ck9mTWVtb3J5TW9kZXM6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oCmluZGV4IDM5M2QzNzMuLmUyMjg0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCkBAIC03
OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkoKSB7
IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQogICAgIC8vIENhbGxpbmcgdGhpcyBtaWdodCB0cmln
Z2VyIGEgcmVjb21waWxlLgogICAgIHZvaWQgc2V0TWVtb3J5KFZNJiwgRXhlY1N0YXRlKiwgSlNX
ZWJBc3NlbWJseU1lbW9yeSopOwotICAgIFdhc206Ok1lbW9yeTo6TW9kZSBtZW1vcnlNb2RlKCkg
eyByZXR1cm4gbWVtb3J5KCktPm1lbW9yeSgpLm1vZGUoKTsgfQorICAgIFdhc206Ok1lbW9yeU1v
ZGUgbWVtb3J5TW9kZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAog
ICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9
CiAgICAgdm9pZCBzZXRUYWJsZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUpIHsg
bV90YWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRleCA1NmYyMGI0Li5m
NDE0NjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TW9kdWxlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25z
dCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1vZHVsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHku
TW9kdWxlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dl
YkFzc2VtYmx5TW9kdWxlKSB9OwogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpidWlsZENvZGVCbG9jayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6
UGxhbiYgcGxhbiwgc3RkOjpvcHRpb25hbDxXYXNtOjpNZW1vcnk6Ok1vZGU+IG1vZGUpCitKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpidWlsZENvZGVCbG9jayhW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6UGxhbiYgcGxhbiwgc3RkOjpvcHRpb25hbDxX
YXNtOjpNZW1vcnlNb2RlPiBtb2RlKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICAvLyBPbiBmYWlsdXJlLCBhIG5ldyBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IgaXMgdGhyb3duLgpAQCAtODUsMTQgKzg1LDE0IEBAIEpTV2ViQXNzZW1ibHlNb2R1bGU6
OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIAogSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpCiB7Ci0gICAg
V2FzbTo6TWVtb3J5OjpNb2RlIG1vZGUgPSBtZW1vcnktPm1lbW9yeSgpLm1vZGUoKTsKKyAgICBX
YXNtOjpNZW1vcnlNb2RlIG1vZGUgPSBtZW1vcnktPm1lbW9yeSgpLm1vZGUoKTsKIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBXYXNtOjpNZW1vcnk6Ok51bWJlck9mTW9kZXM7ICsraSkg
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVz
OyArK2kpIHsKICAgICAgICAgaWYgKG1fY29kZUJsb2Nrc1tpXSAmJiBtX2NvZGVCbG9ja3NbaV0t
PmlzU2FmZVRvUnVuKG1lbW9yeSkpCiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tzW2ld
LmdldCgpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9jb2RlQmxvY2tzW21vZGVdKTsKKyAgICBB
U1NFUlQoIWNvZGVCbG9ja0Zvcihtb2RlKSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjb2RlIGJsb2NrIGZvciB0aGlz
IG1vZGUsIHdlIG5lZWQgdG8gcmVjb21waWxlLi4uCiAgICAgV2FzbTo6UGxhbiBwbGFuKCZ2bSwg
c3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fc291cmNlQnVmZmVyLT5kYXRhKCkpLCBtX3NvdXJjZUJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2soVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsCiAgICAgfQogCiAgICAgQVNTRVJUKG1vZGUgPT0gY29kZUJsb2NrLT5tb2RlKCkpOwot
ICAgIG1fY29kZUJsb2Nrc1ttb2RlXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAgY29k
ZUJsb2NrRm9yKG1vZGUpLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKICAgICByZXR1cm4gY29k
ZUJsb2NrOwogfQogCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWludDhfdCogc291cmMK
ICAgICBtX3NvdXJjZUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoc291cmNlLCBieXRlU2l6
ZSk7CiAgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9u
KCk7CiAgICAgbV9leHBvcnRTeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIGV4cG9ydFN5bWJvbFRh
YmxlKTsKLSAgICBtX2NvZGVCbG9ja3NbY29kZUJsb2NrLT5tb2RlKCldLnNldCh2bSwgdGhpcywg
Y29kZUJsb2NrKTsKKyAgICBjb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5tb2RlKCkpLnNldCh2bSwg
dGhpcywgY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9leHBvcnRTeW1ib2xUYWJsZSk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IFdhc206Ok1lbW9yeTo6TnVtYmVyT2ZNb2RlczsgKytpKQorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzOyArK2kpCiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuaAppbmRleCA3MDQwNjhjLi4zODllNjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCkBAIC02MiwxMiArNjIsMTMgQEAg
cHVibGljOgogICAgIH0KIAogICAgIC8vIFJldHVybnMgdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlz
IG1vZHVsZSB3YXMgb3JpZ2luYWxseSBjb21waWxlZCBleHBlY3RpbmcgdG8gdXNlLiBUaGlzIHdv
bid0IG5lZWQgdG8gcmVjb21waWxlLgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVC
bG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1ttX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnku
bW9kZSgpXS5nZXQoKTsgfQorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygp
IHsgcmV0dXJuIGNvZGVCbG9ja0ZvcihtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkubW9kZSgp
KS5nZXQoKTsgfQogICAgIC8vIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNvZGUgYmxvY2sgZm9y
IHRoZSBnaXZlbiBtZW1vcnksIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSByZWNvbXBpbGUuCiAgICAg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJB
c3NlbWJseU1lbW9yeSopOwogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGJ1aWxkQ29kZUJsb2NrKFZNJiwgRXhlY1N0YXRlKiwgV2FzbTo6UGxhbiYsIHN0ZDo6b3B0aW9u
YWw8V2FzbTo6TWVtb3J5OjpNb2RlPiBtb2RlID0gc3RkOjpudWxsb3B0KTsKKyAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4mIGNvZGVCbG9ja0ZvcihXYXNtOjpNZW1vcnlN
b2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUp
XTsgfQorICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGJ1aWxkQ29kZUJsb2NrKFZNJiwgRXhl
Y1N0YXRlKiwgV2FzbTo6UGxhbiYsIHN0ZDo6b3B0aW9uYWw8V2FzbTo6TWVtb3J5TW9kZT4gbW9k
ZSA9IHN0ZDo6bnVsbG9wdCk7CiAKICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0
dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEV4ZWNTdGF0ZSosIHVpbnQ4X3Qq
IHNvdXJjZSwgc2l6ZV90IGJ5dGVTaXplKTsKQEAgLTc3LDcgKzc4LDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1fc291cmNlQnVmZmVyOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICBXcml0
ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7Ci0gICAgV3JpdGVCYXJy
aWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpNZW1vcnk6Ok51
bWJlck9mTW9kZXNdOworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBt
X2NvZGVCbG9ja3NbV2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2Rlc107CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKLS0gCjIuMTAuMQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>