<?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>170478</bug_id>
          
          <creation_ts>2017-04-04 15:30:23 -0700</creation_ts>
          <short_desc>WebAssembly: ModuleInformation should be a ref counted thing that can be shared across threads.</short_desc>
          <delta_ts>2017-04-04 17:56:00 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>jfbastien</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>1294220</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-04 15:30:23 -0700</bug_when>
    <thetext>WebAssembly: ModuleInformation should be a ref counted thing that can be shared across threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294230</commentid>
    <comment_count>1</comment_count>
      <attachid>306222</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-04 15:40:14 -0700</bug_when>
    <thetext>Created attachment 306222
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294241</commentid>
    <comment_count>2</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-04 16:05:17 -0700</bug_when>
    <thetext>Does this address https://bugs.webkit.org/show_bug.cgi?id=170296 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294242</commentid>
    <comment_count>3</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-04 16:06:49 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #2)
&gt; Does this address https://bugs.webkit.org/show_bug.cgi?id=170296 ?

We pass the names.wast.js test. So I believe so but we should still double check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294250</commentid>
    <comment_count>4</comment_count>
      <attachid>306222</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-04 16:20:35 -0700</bug_when>
    <thetext>Comment on attachment 306222
Patch

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

&gt; Source/JavaScriptCore/wasm/WasmModuleInformation.h:32
&gt; +#include &lt;wtf/Vector.h&gt;

Missing include for optional.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.h:40
&gt; +    ModuleParser(const uint8_t* sourceBuffer, size_t sourceLength, ModuleInformation&amp; info)

I&apos;d rather keep returning the ModuleInformation instead of passing in a reference to it: on failure it was literally impossible to have a ModuleInformation from the previous code. Now the reference can be half-valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294253</commentid>
    <comment_count>5</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-04 16:21:55 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #3)
&gt; (In reply to JF Bastien from comment #2)
&gt; &gt; Does this address https://bugs.webkit.org/show_bug.cgi?id=170296 ?
&gt; 
&gt; We pass the names.wast.js test. So I believe so but we should still double
&gt; check.

The new test hasn&apos;t been committed yet:
  https://github.com/WebAssembly/spec/pull/450

So let&apos;s leave the other bug open for now. I don&apos;t think we need to resolve it any time soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294268</commentid>
    <comment_count>6</comment_count>
      <attachid>306222</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-04 16:38:13 -0700</bug_when>
    <thetext>Comment on attachment 306222
Patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmModuleInformation.h:32
&gt;&gt; +#include &lt;wtf/Vector.h&gt;
&gt; 
&gt; Missing include for optional.

WasmFormat already has optional. If anything I can just delete the vector include.

&gt;&gt; Source/JavaScriptCore/wasm/WasmModuleParser.h:40
&gt;&gt; +    ModuleParser(const uint8_t* sourceBuffer, size_t sourceLength, ModuleInformation&amp; info)
&gt; 
&gt; I&apos;d rather keep returning the ModuleInformation instead of passing in a reference to it: on failure it was literally impossible to have a ModuleInformation from the previous code. Now the reference can be half-valid.

The reason I did it this way is that the plan needs to maybe sometimes own the source until the ModuleInformation is initialized when it no longer does. Also, if the ModuleParser returns the ModuleInformation it&apos;s a lot easier to accidentally re-parse the module and make two copies of the module information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294272</commentid>
    <comment_count>7</comment_count>
      <attachid>306222</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-04 16:40:39 -0700</bug_when>
    <thetext>Comment on attachment 306222
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        is likely, not a problem because:

no comma

&gt; Source/JavaScriptCore/wasm/WasmModuleInformation.h:31
&gt; +#include &lt;wtf/RefCounted.h&gt;

I think you want ThreadSafeRefCounted here. Or I guess you can remove the include since it looks like it&apos;s doing nothing that you need.

&gt; Source/JavaScriptCore/wasm/WasmModuleInformation.h:47
&gt; +        ? importFunctionSignatureIndices[functionIndex]
&gt; +        : internalFunctionSignatureIndices[functionIndex - importFunctionSignatureIndices.size()];

Please indent.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:100
&gt; +    return { };

Why this change?

&gt; Source/JavaScriptCore/wasm/WasmParser.h:166
&gt; +    memcpy(result.data(), source() + m_offset, stringLength);

nit: you can use string start here, right?

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.cpp:170
&gt; +    Ref&lt;Plan&gt; plan = adoptRef(*new Plan(vm, makeRef(const_cast&lt;Wasm::ModuleInformation&amp;&gt;(module-&gt;moduleInformation())), Plan::FullCompile, [promise, instance, module, entries] (Plan&amp; p) {

why not just return non const instead of us lying about const-ness?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294274</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-04 16:41:06 -0700</bug_when>
    <thetext>also, looks like you need to edit cmake info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294283</commentid>
    <comment_count>9</comment_count>
      <attachid>306222</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-04 17:01:53 -0700</bug_when>
    <thetext>Comment on attachment 306222
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:13
&gt;&gt; +        is likely, not a problem because:
&gt; 
&gt; no comma

fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmModuleInformation.h:31
&gt;&gt; +#include &lt;wtf/RefCounted.h&gt;
&gt; 
&gt; I think you want ThreadSafeRefCounted here. Or I guess you can remove the include since it looks like it&apos;s doing nothing that you need.

removed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmModuleInformation.h:47
&gt;&gt; +        : internalFunctionSignatureIndices[functionIndex - importFunctionSignatureIndices.size()];
&gt; 
&gt; Please indent.

fixed. I&apos;m surprised the style checker didn&apos;t catch this.

&gt;&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:100
&gt;&gt; +    return { };
&gt; 
&gt; Why this change?

See the discussion with JF below.

&gt;&gt; Source/JavaScriptCore/wasm/WasmParser.h:166
&gt;&gt; +    memcpy(result.data(), source() + m_offset, stringLength);
&gt; 
&gt; nit: you can use string start here, right?

fixed.

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.cpp:170
&gt;&gt; +    Ref&lt;Plan&gt; plan = adoptRef(*new Plan(vm, makeRef(const_cast&lt;Wasm::ModuleInformation&amp;&gt;(module-&gt;moduleInformation())), Plan::FullCompile, [promise, instance, module, entries] (Plan&amp; p) {
&gt; 
&gt; why not just return non const instead of us lying about const-ness?

I didn&apos;t want other places to accidentally modify the ModuleInformation but we need to change the ref count here so I have to do a const_cast :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294284</commentid>
    <comment_count>10</comment_count>
      <attachid>306231</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-04 17:02:17 -0700</bug_when>
    <thetext>Created attachment 306231
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294310</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-04 17:55:16 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 306231:

media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles.html bug 168317 (author: graouts@apple.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294311</commentid>
    <comment_count>12</comment_count>
      <attachid>306231</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-04 17:55:58 -0700</bug_when>
    <thetext>Comment on attachment 306231
Patch for landing

Clearing flags on attachment: 306231

Committed r214919: &lt;http://trac.webkit.org/changeset/214919&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294312</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-04 17:56:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306222</attachid>
            <date>2017-04-04 15:40:14 -0700</date>
            <delta_ts>2017-04-04 17:02:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170478-20170404154013.patch</filename>
            <type>text/plain</type>
            <size>100527</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0ODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
ZjhkMTFhMDg3NzE1M2Y5NDYxYjIwOWRkNzgwMmRiNzYwNTNiOGIzLi41NDg0ZWFjNDc0YzUzYmZj
OGYwYjM0OGVlNWMzZmVlOGQyYjZiMWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDEgQEAKKzIwMTctMDQtMDQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1vZHVsZUluZm9ybWF0aW9uIHNob3VsZCBi
ZSBhIHJlZiBjb3VudGVkIHRoaW5nIHRoYXQgY2FuIGJlIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ3OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vZHVsZUlu
Zm9ybWF0aW9uIGhhcyBiZWVuIG1vdmVkIHRvIGl0cyBvd24gZmlsZSBhbmQgaXMgbm93CisgICAg
ICAgIFRocmVhZFNhZmVSZWZDb3VudGVkLiAgQWxsIHRoZSBTdHJpbmdzIHdlIHVzZWQgdG8ga2Vl
cCBpbiB0aGUKKyAgICAgICAgTW9kdWxlSW5mb3JtYXRpb24gaGF2ZSBiZWVuIHN3aXRjaGVkIHRv
IFZlY3RvcjxMQ2hhcj4gdGhpcyBoYXMgdGhlCisgICAgICAgIGFkdmFudGFnZSB0aGF0IGl0IGNh
biBiZSBwYXNzZWQgYWNyb3NzIHRocmVhZHMuIEhvd2V2ZXIsIHRoaXMgZG9lcworICAgICAgICBt
ZWFuIHRoYXQgd2UgbmVlZCB0byBkZWNvZGUgdGhlIHV0Zjggc3RyaW5ncyBpbiBlYWNoIHRocmVh
ZC4gVGhpcworICAgICAgICBpcyBsaWtlbHksIG5vdCBhIHByb2JsZW0gYmVjYXVzZToKKworICAg
ICAgICAxKSBtb3N0IG1vZHVsZXMgaGF2ZSBmZXcgaW1wb3J0cy9leHBvcnRzL2N1c3RvbSBzZWN0
aW9ucy4KKyAgICAgICAgMikgbW9zdCBvZiB0aGUgdGltZSB0aGV5IGFyZSBhc2NpaSBzbyB0aGUg
Y29udmVyc2lvbiBpcyBjaGVhcC4KKyAgICAgICAgMykgd2Ugb25seSBoYXZlIHRvIGRvIGl0IG9u
Y2UgcGVyIHRocmVhZCwgYW5kIHRoZXJlIHNob3VsZG4ndCBiZSB0b28gbWFueS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcworICAgICAgICBtb2R1bGVTaWduYXR1cmVJbmRpY2Vz
VG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcyBzaW5jZSB0aGF0CisgICAgICAgIGluZm9ybWF0aW9u
IGNhbiBhbHJlYWR5IGJlIHJlY292ZXJlZCBmcm9tIHRoZQorICAgICAgICBTaWduYXR1cmVJbmZv
cm1hdGlvbi4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uVGVzdFdhc21Nb2R1
bGVGdW5jdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAo
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVN0cmluZyk6CisgICAgICAgIChKU0M6Oldh
c206Ok1vZHVsZUluZm9ybWF0aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmZ1bmN0aW9uSW5kZXhT
cGFjZVNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bjo6aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRleEZyb21G
dW5jdGlvbkluZGV4U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbjo6aW1wb3J0RnVuY3Rpb25Db3VudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjppbnRlcm5hbEZ1bmN0aW9uQ291bnQpOiBEZWxldGVk
LgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcik6CisgICAgICAgICog
d2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246On5Nb2R1bGVJbmZvcm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjpmdW5jdGlvbkluZGV4U3BhY2VTaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlSW5mb3JtYXRpb246OmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Up
OgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlSW5kZXhG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3Jt
YXRpb246OmltcG9ydEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlSW5mb3JtYXRpb246Ok1vZHVsZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Ok1vZHVsZVBhcnNlcik6CisgICAgICAg
ICogd2FzbS9XYXNtUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxTdWNjZXNz
VHlwZT46OmNvbnN1bWVVVEY4U3RyaW5nKToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpw
cmVwYXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6Cisg
ICAgICAgIChKU0M6Oldhc206OlBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGxhbjo6Y2FuY2VsKToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAgIChKU0M6
Oldhc206OlBsYW46OmludGVybmFsRnVuY3Rpb25Db3VudCk6CisgICAgICAgIChKU0M6Oldhc206
OlBsYW46OnRha2VNb2R1bGVJbmZvcm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0
dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCk6
CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgICogd2FzbS9XYXNtVmFs
aWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp2YWxpZGF0ZUZ1bmN0aW9uKToKKyAgICAg
ICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKToK
KyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9k
dWxlSW5mb3JtYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3Vy
Y2UpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUpOgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
Ojp3ZWJBc3NlbWJseU1vZHVsZVByb3RvQ3VzdG9tU2VjdGlvbnMpOgorICAgICAgICAoSlNDOjp3
ZWJBc3NlbWJseU1vZHVsZVByb3RvSW1wb3J0cyk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5
TW9kdWxlUHJvdG9FeHBvcnRzKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxpbmsp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaDoKKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNz
ZW1ibHlDb21waWxlRnVuYyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAg
KEpTQzo6Y29tcGlsZUFuZEluc3RhbnRpYXRlKToKKwogMjAxNy0wNC0wMyAgWmFuIERvYmVyc2Vr
ICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW2pzY10gQWRkIHBhdGNoYWJsZUp1
bXBTaXplKCkgZm9yIE1JUFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291
cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNjQ5ZGRkY2ZkNzI4YzdiYjVlNjFjYWE3MzJmZjc0ZTNm
ZTU3YTQwMS4uODFmNTQxYzc0MjZhNzBmNDdhNDk1NjY1MzgzOTU5ZmEyZWViZGJmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMCBAQAorMjAxNy0wNC0wNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFw
cGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogTW9kdWxlSW5mb3JtYXRpb24gc2hvdWxk
IGJlIGEgcmVmIGNvdW50ZWQgdGhpbmcgdGhhdCBjYW4gYmUgc2hhcmVkIGFjcm9zcyB0aHJlYWRz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDc4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBh
ZGRzIGEgbmV3IFN0cmluZzo6ZnJvbVVURjggdGhhdCBjb252ZXJ0cyBhIHZlY3RvciBvZiBjaGFy
YWN0ZXJzIHRvCisgICAgICAgIGEgc3RyaW5nLgorCisgICAgICAgIEFsc28sIGl0IGNsZWFucyB1
cCBzb21lIHN0eWxlLgorCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAg
IChXVEY6OlN0cmluZzo6ZnJvbVVURjgpOgorICAgICAgICAqIHd0Zi91bmljb2RlL1VURjguY3Bw
OgorICAgICAgICAoV1RGOjpVbmljb2RlOjpjb252ZXJ0TGF0aW4xVG9VVEY4KToKKwogMjAxNy0w
NC0wMSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1h
YyBjbWFrZSBidWlsZGZpeCBhZnRlciAyMTQ1ODYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDEwYmExN2Q5ZWM1NjAyOWYxMzRhNjcwNDQzNGEzODliOTYzNGQ2NmIuLmU5Nzk2OTM3
YzI5YmIzZmFkMzMxZjkxYzg4NjA5NDNhM2I4ZDMxODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xMzY2LDYgKzEzNjYsOCBAQAogCQk1M0M2RkVGMTFFOEFGRTBDMDBCMTg0MjUg
LyogV2FzbU9wY29kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0M2RkVGMDFFOEFGRTBDMDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdp
bi5jcHAgKi87IH07CiAJCTUzRDQ0NERDMURBRjA4QUIwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNz
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
RDQ0NERCMURBRjA4QUIwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuaCAqLzsgfTsKIAkJ
NTNENDQ0REUxREFGMDlBMDAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Q0NDRERDFEQUYwOUEw
MDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcCAqLzsgfTsKKwkJNTNFNzc3RTMxRTky
RTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U3NzdFMTFFOTJFMjY1MDA3Q0JFQzQg
LyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcCAqLzsgfTsKKwkJNTNFNzc3RTQxRTkyRTI2NTAw
N0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFNzc3RTIxRTkyRTI2NTAwN0NCRUM0IC8qIFdhc21N
b2R1bGVJbmZvcm1hdGlvbi5oICovOyB9OwogCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyog
V2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi87IH07CiAJ
CTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThBMUQ1OTAxQkIw
MDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLzsgfTsKIAkJNTNGNDBFOEQxRDU5MDFG
MjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmgg
Ki87IH07CkBAIC0zODc0LDYgKzM4NzYsOCBAQAogCQk1M0M2RkVGMDFFOEFGRTBDMDBCMTg0MjUg
LyogV2FzbU9wY29kZU9yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXYXNtT3Bjb2RlT3JpZ2luLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTNENDQ0REIxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1dhc21BZGRyZXNzVmFsdWUuaDsgcGF0aCA9IGIz
L0IzV2FzbUFkZHJlc3NWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Q0
NDRERDFEQUYwOUEwMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzV2FzbUFkZHJlc3NWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1dhc21BZGRyZXNzVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1M0U3NzdFMTFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Nb2R1bGVJbmZvcm1hdGlv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRTc3N0UyMUU5MkUyNjUwMDdD
QkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzRjI1NkUxMUI4N0UyODAwMEI0Qjc2OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y0MEU4
NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21TZWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21GdW5jdGlvblBhcnNlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjMxMCw2ICs2MzE0LDggQEAKIAkJCQk1MzU1NTcxMzFE
OUQ5RUE1MDA2RDU4M0IgLyogV2FzbU1lbW9yeS5oICovLAogCQkJCTc5Qjc1OTcxMURGQTRDNjAw
MDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwICovLAogCQkJCTc5Qjc1OTcyMURG
QTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCAqLywKKwkJCQk1M0U3NzdF
MTFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcCAqLywKKwkJCQk1
M0U3NzdFMjFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggKi8sCiAJ
CQkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovLAog
CQkJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi8sCiAJ
CQkJQURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdhc21QYWdlQ291bnQuY3BwICovLApAQCAt
ODQzMiw2ICs4NDM4LDcgQEAKIAkJCQkwRkZGQzk1QTE0RUY5MEE5MDBDNzI1MzIgLyogREZHQ1NF
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjJCOUExNzJGMDUwMTAwN0RCREE1
IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNFNzc3RTQx
RTkyRTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzBGN0NFMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNp
cmVkVHJhbnNpdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTg1MzRDMTcyM0NEQTUwMEI2
MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAyNTUs
NiArMTAyNjIsNyBAQAogCQkJCTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAvKiBERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MzkyQzg5MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk1M0U3NzdFMzFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdP
U1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVEMTcx
NzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY2MjM3OTcxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggNTUyMmQ4MjFmNWYw
ZGEzMjZmMWM2ZmM1NmMzNWM2NGVlYWM0OTk3ZS4uZjVmOGY3NjI4Nzk0MGYwMmFjMzRjODRkMjYx
NzM4NDRhN2VkNDUxYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTMyMTQsNyArMzIxNCw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVGVzdFdhc21Nb2R1
bGVGdW5jdGlvbnMoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gY2Fs
bGVlSW5kZXg7CiAgICAgICAgICAgICB9KTsKICAgICB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiBtb2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4tPnRha2VNb2R1
bGVJbmZvcm1hdGlvbigpOworICAgIFJlZjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxl
SW5mb3JtYXRpb24gPSBwbGFuLT50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBSRUxFQVNF
X0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeSk7CiAKICAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgZnVuY3Rpb25Db3VudDsgKytpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JZGVudGlmaWVyLmgKaW5kZXggYTk2M2I0MzMwNjE3Y2E1MzJmMjFjNDgzMmVkZjY4
MDg0YTQxYmU4Ny4uYmMzZGJkNGQ5NDk1NmM3Y2Q1MWMwMDU3MDA4MjczMDNmNmJiMGJiNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaApAQCAtMTIyLDYgKzEy
Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKEV4ZWNTdGF0
ZSosIGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJp
bmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIElkZW50aWZpZXIgZnJv
bVN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBjaGFyKik7CisgICAgc3RhdGljIElkZW50aWZpZXIg
ZnJvbVN0cmluZyhWTSogdm0sIGNvbnN0IFZlY3RvcjxMQ2hhcj4mIGNoYXJhY3RlcnMpIHsgcmV0
dXJuIGZyb21TdHJpbmcodm0sIGNoYXJhY3RlcnMuZGF0YSgpLCBjaGFyYWN0ZXJzLnNpemUoKSk7
IH0KIAogICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21VaWQoVk0qLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKTsKICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tVWlkKEV4ZWNTdGF0ZSosIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDAyMGFiZDU4Yzg5NDJiNDFiNGNjODE2MDAyMDY4MjRj
MTliNTJiYzguLjA5YjNhNjBlNTBmNDU0MmYwYjBjMGIzZThiMGRkNTU4MzFiOGJkOWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAg
LTIwNSw3ICsyMDUsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDYWxscwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJ
bmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBTaWduYXR1cmVJbmRleCwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CiAKICAg
ICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29u
c3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjayk7CkBAIC05NjgsOSArOTY4LDggQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICBBU1NFUlQoc2lnbmF0dXJlSW5kZXggIT0gU2lnbmF0dXJlOjppbnZhbGlk
SW5kZXgpOwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgp
OwogICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsK
IApAQCAtMTAxNyw3ICsxMDE2LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJl
Y3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFNpZ25hdHVyZUluZGV4IHMKIAogICAgIC8v
IENoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyB0aGUgdmFsdWUgd2UgZXhwZWN0LgogICAgIHsK
LSAgICAgICAgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1
cmVJbmRleCk7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmUpKTsKICAgICAgICAgQ2hlY2tW
YWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJv
YywgQ2hlY2ssIG9yaWdpbigpLAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBOb3RFcXVhbCwgb3JpZ2luKCksIGNhbGxlZVNpZ25hdHVyZUluZGV4
LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KSk7CiAKQEAgLTEyNjksNyArMTI2OCw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gT3JpZ2luCiAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxPcmlnaW4+KE9wY29kZU9yaWdpbihtX3BhcnNlci0+Y3VycmVudE9wY29kZSgpLCBtX3BhcnNl
ci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkpKTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUo
Q29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1
bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0
dXJlSW5kZXg+JiBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNl
cywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCkKK0V4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENv
bXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5j
dGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNp
Z25lZCBvcHRMZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8V2Fz
bUludGVybmFsRnVuY3Rpb24+KCk7CiAKQEAgLTEyODQsNyArMTI4Myw3IEBAIEV4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKENvbXBpbGF0CiAgICAgfSk7CiAKICAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQoaW5mbywg
cHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlKTsK
LSAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbywgbW9kdWxlU2lnbmF0dXJl
SW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOworICAgIEZ1bmN0aW9uUGFyc2VyPEIz
SVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNl
ci5wYXJzZSgpKTsKIAogICAgIGNvbnRleHQuaW5zZXJ0Q29uc3RhbnRzKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBjMDhiOGQxOTQ0
YjIxMmU0MDdlNWE2YTBjZTIzZDBiZjg3NjZkMmIxLi4xZWMxMDFmZTMzMTk2YzU0YjFjMDNhOWUz
NDI3OTk4ZDI1ZjJkMmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmgKQEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlICJCM0NvbW1vbi5oIgog
I2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNp
bmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUg
Ildhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogCiBl
eHRlcm4gIkMiIHZvaWQgZHVtcFByb2NlZHVyZSh2b2lkKik7CkBAIC00OCw3ICs0OCw3IEBAIHN0
cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIENDYWxsSGVscGVyczo6Q2FsbCBqc0VudHJ5
cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbDsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0
aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
Y29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIG9wdExl
dmVsKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgb3B0TGV2
ZWwpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuY3BwCmluZGV4IGIwNDc4NzViMmI5YjIzNGI1YWRkMzRiMTk1ODM2
MTI0MjFiNThlMmEuLmUyNjA2MDE5ZGMxMWQ1OWQxODVmOTU0M2E4ZTc2Mzg0OWIwM2Q2N2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCkBAIC01NSw3ICs1NSwx
MiBAQCBTZWdtZW50OjpQdHIgU2VnbWVudDo6YWRvcHRQdHIoU2VnbWVudCogc2VnbWVudCkKICAg
ICByZXR1cm4gUHRyKHNlZ21lbnQsICZTZWdtZW50OjpkZXN0cm95KTsKIH0KIAotSlNfRVhQT1JU
X1BSSVZBVEUgTW9kdWxlSW5mb3JtYXRpb246On5Nb2R1bGVJbmZvcm1hdGlvbigpIHsgfQorU3Ry
aW5nIG1ha2VTdHJpbmcoY29uc3QgVmVjdG9yPExDaGFyPiYgY2hhcmFjdGVycykKK3sKKyAgICBT
dHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChjaGFyYWN0ZXJzKTsKKyAgICBBU1NFUlQo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggZTgwZGQ3
YWUyMGQ5Mjk0ZTRkODFjY2U4MmRjMjVhYTFjMGY0Y2EzZi4uNjdmNzA1NjVjMDAwMGIzNTI3NWM5
Zjg2ZDQzNGE2NGJiNzU3MjE1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaApAQCAtODksNyArODksNyBAQCBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0
ZXJuYWxLaW5kOjpUYWJsZSkgICAgPT0gMSwgIldhc20gbmVlZHMgVGFibGUgdAogc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDxpbnQ+KEV4dGVybmFsS2luZDo6TWVtb3J5KSAgID09IDIsICJXYXNt
IG5lZWRzIE1lbW9yeSB0byBoYXZlIHRoZSB2YWx1ZSAyIik7CiBzdGF0aWNfYXNzZXJ0KHN0YXRp
Y19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpHbG9iYWwpICAgPT0gMywgIldhc20gbmVlZHMgR2xv
YmFsIHRvIGhhdmUgdGhlIHZhbHVlIDMiKTsKIAotc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBt
YWtlU3RyaW5nKEV4dGVybmFsS2luZCBraW5kKQoraW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJp
bmcoRXh0ZXJuYWxLaW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBF
eHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiByZXR1cm4gImZ1bmN0aW9uIjsKQEAgLTEwMiwxOCArMTAy
LDIwIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmluZyhFeHRlcm5hbEtpbmQg
a2luZCkKIH0KIAogc3RydWN0IEltcG9ydCB7Ci0gICAgU3RyaW5nIG1vZHVsZTsKLSAgICBTdHJp
bmcgZmllbGQ7CisgICAgY29uc3QgVmVjdG9yPExDaGFyPiBtb2R1bGU7CisgICAgY29uc3QgVmVj
dG9yPExDaGFyPiBmaWVsZDsKICAgICBFeHRlcm5hbEtpbmQga2luZDsKICAgICB1bnNpZ25lZCBr
aW5kSW5kZXg7IC8vIEluZGV4IGluIHRoZSB2ZWN0b3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcga2lu
ZC4KIH07CiAKIHN0cnVjdCBFeHBvcnQgewotICAgIFN0cmluZyBmaWVsZDsKKyAgICBjb25zdCBW
ZWN0b3I8TENoYXI+IGZpZWxkOwogICAgIEV4dGVybmFsS2luZCBraW5kOwogICAgIHVuc2lnbmVk
IGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29ycmVzcG9uZGluZyBr
aW5kLgogfTsKIAorU3RyaW5nIG1ha2VTdHJpbmcoY29uc3QgVmVjdG9yPExDaGFyPiYgY2hhcmFj
dGVycyk7CisKIHN0cnVjdCBHbG9iYWwgewogICAgIGVudW0gTXV0YWJpbGl0eSA6IHVpbnQ4X3Qg
ewogICAgICAgICAvLyBGSVhNRSBhdXRvLWdlbmVyYXRlIHRoaXMuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUyMzEKQEAgLTIyNiw0NiArMjI4LDEwIEBAIHByaXZh
dGU6CiB9OwogICAgIAogc3RydWN0IEN1c3RvbVNlY3Rpb24gewotICAgIFN0cmluZyBuYW1lOwor
ICAgIFZlY3RvcjxMQ2hhcj4gbmFtZTsKICAgICBWZWN0b3I8dWludDhfdD4gcGF5bG9hZDsKIH07
CiAKLXN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7Ci0gICAgVmVjdG9yPEltcG9ydD4gaW1wb3J0
czsKLSAgICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlczsKLSAgICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+IGludGVybmFsRnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzOwotICAgIFZlY3RvcjxSZWY8U2lnbmF0dXJlPj4gdXNlZFNpZ25hdHVyZXM7Ci0K
LSAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7Ci0KLSAgICBWZWN0b3I8RXhwb3J0PiBleHBv
cnRzOwotICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNl
OwotICAgIFZlY3RvcjxTZWdtZW50OjpQdHI+IGRhdGE7Ci0gICAgVmVjdG9yPEVsZW1lbnQ+IGVs
ZW1lbnRzOwotICAgIFRhYmxlSW5mb3JtYXRpb24gdGFibGVJbmZvcm1hdGlvbjsKLSAgICBWZWN0
b3I8R2xvYmFsPiBnbG9iYWxzOwotICAgIHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9iYWwgeyAw
IH07Ci0gICAgVmVjdG9yPEN1c3RvbVNlY3Rpb24+IGN1c3RvbVNlY3Rpb25zOwotCi0gICAgc2l6
ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlv
blNpZ25hdHVyZUluZGljZXMuc2l6ZSgpICsgaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXMuc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKHNpemVfdCBmdW5jdGlvbkluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGZ1bmN0aW9uSW5kZXggPCBmdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwotICAgICAgICByZXR1
cm4gZnVuY3Rpb25JbmRleCA8IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7
Ci0gICAgfQotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShzaXplX3QgZnVuY3Rpb25JbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBpc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgp
Ci0gICAgICAgICAgICA/IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbklu
ZGV4XQotICAgICAgICAgICAgOiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5j
dGlvbkluZGV4IC0gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKV07Ci0gICAg
fQotCi0gICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGlt
cG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KLSAgICB1aW50MzJfdCBpbnRl
cm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCk7IH0KLQotICAgIH5Nb2R1bGVJbmZvcm1hdGlvbigpOwotfTsKLQog
c3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGwgewogICAgIENvZGVMb2NhdGlvbkNhbGwgY2Fs
bExvY2F0aW9uOwogICAgIHNpemVfdCBmdW5jdGlvbkluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCAwN2Y1M2FiYjc2NzQ0NjE4
MGEwYWMxZGE1YWFhZGFhYWIwNTkyM2YwLi4xZmEwMDU4NTYwNDRlNmJmNDU4NTRkMGM1NmY0YmVl
ZWQ1ZWU5OGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVu
Y3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBDb250ZXh0OjpDb250cm9sVHlwZSBDb250cm9sVHlwZTsKICAgICB0eXBlZGVmIHR5cGVuYW1l
IENvbnRleHQ6OkV4cHJlc3Npb25MaXN0IEV4cHJlc3Npb25MaXN0OwogCi0gICAgRnVuY3Rpb25Q
YXJzZXIoQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5j
dGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBj
b25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+Jik7CisgICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4
dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwg
Y29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKIAogICAgIFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIApAQCAtODYsNyArODYsNiBAQCBwcml2YXRl
OgogICAgIFZlY3RvcjxDb250cm9sRW50cnk+IG1fY29udHJvbFN0YWNrOwogICAgIGNvbnN0IFNp
Z25hdHVyZSYgbV9zaWduYXR1cmU7CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5m
bzsKLSAgICBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtX21vZHVsZVNpZ25hdHVyZUlu
ZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzOwogCiAgICAgT3BUeXBlIG1fY3VycmVudE9w
Y29kZTsKICAgICBzaXplX3QgbV9jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQgeyAwIH07CkBA
IC05NSwxMiArOTQsMTEgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRl
eHQ+Ci1GdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3Ro
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGlu
Zm8sIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVsZVNpZ25hdHVyZUluZGljZXNU
b1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKQorRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0
aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQs
IHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQogICAgIDogUGFyc2VyKGZ1bmN0aW9uU3RhcnQsIGZ1
bmN0aW9uTGVuZ3RoKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpZ25hdHVy
ZShzaWduYXR1cmUpCiAgICAgLCBtX2luZm8oaW5mbykKLSAgICAsIG1fbW9kdWxlU2lnbmF0dXJl
SW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMobW9kdWxlU2lnbmF0dXJlSW5kaWNlc1Rv
VW5pcXVlZFNpZ25hdHVyZUluZGljZXMpCiB7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRh
dGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgKHVpbnRwdHJfdClmdW5j
dGlvblN0YXJ0LCAiIG9mIGxlbmd0aDogIiwgZnVuY3Rpb25MZW5ndGgpOwpAQCAtMzUwLDEwICsz
NDgsOSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKHNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdldCBjYWxsX2luZGlyZWN0J3Mgc2lnbmF0dXJl
IGluZGV4Iik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmVz
ZXJ2ZWQpLCAiY2FuJ3QgZ2V0IGNhbGxfaW5kaXJlY3QncyByZXNlcnZlZCBieXRlIik7CiAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYocmVzZXJ2ZWQsICJjYWxsX2luZGlyZWN0J3MgJ3Jlc2Vy
dmVkJyB2YXJ1aW50MSBtdXN0IGJlIDB4MCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMuc2l6ZSgp
IDw9IHNpZ25hdHVyZUluZGV4LCAiY2FsbF9pbmRpcmVjdCdzIHNpZ25hdHVyZSBpbmRleCAiLCBz
aWduYXR1cmVJbmRleCwgIiBleGNlZWRzIGtub3duIHNpZ25hdHVyZXMgIiwgbV9tb2R1bGVTaWdu
YXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkpOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKG1faW5mby51c2VkU2lnbmF0dXJlcy5zaXplKCkgPD0gc2lnbmF0
dXJlSW5kZXgsICJjYWxsX2luZGlyZWN0J3Mgc2lnbmF0dXJlIGluZGV4ICIsIHNpZ25hdHVyZUlu
ZGV4LCAiIGV4Y2VlZHMga25vd24gc2lnbmF0dXJlcyAiLCBtX2luZm8udXNlZFNpZ25hdHVyZXMu
c2l6ZSgpKTsKIAotICAgICAgICBTaWduYXR1cmVJbmRleCBjYWxsZWVTaWduYXR1cmVJbmRleCA9
IG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXNbc2lnbmF0
dXJlSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIGNhbGxlZVNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBj
b25zdCBTaWduYXR1cmUmIGNhbGxlZVNpZ25hdHVyZSA9IG1faW5mby51c2VkU2lnbmF0dXJlc1tz
aWduYXR1cmVJbmRleF0uZ2V0KCk7CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2Fs
bGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSArIDE7IC8vIEFkZCB0aGUgY2FsbGVlJ3MgaW5k
ZXguCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1fZXhwcmVz
c2lvblN0YWNrLnNpemUoKSwgImNhbGxfaW5kaXJlY3QgZXhwZWN0cyAiLCBhcmd1bWVudENvdW50
LCAiIGFyZ3VtZW50cywgYnV0IHRoZSBleHByZXNzaW9uIHN0YWNrIGN1cnJlbnRseSBob2xkcyAi
LCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgdmFsdWVzIik7CiAKQEAgLTM2NSw3ICszNjIs
NyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQ
YXJ0aWFsUmVzdWx0CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhmaXJzdEFyZ3Vt
ZW50SW5kZXgpOwogCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6OmVt
cHR5RXhwcmVzc2lvbjsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2FsbElu
ZGlyZWN0KGNhbGxlZVNpZ25hdHVyZSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGFyZ3MsIHJlc3Vs
dCkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxsSW5kaXJlY3QoY2Fs
bGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHQpKTsKIAogICAgICAgICBpZiAocmVzdWx0ICE9IENv
bnRleHQ6OmVtcHR5RXhwcmVzc2lvbikKICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFw
cGVuZChyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVJbmZvcm1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODk2YWJkZDIwODYyOWM3OTBhZmQwYTMy
MDUxZjQxNjVmYTNmYTAzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworTW9kdWxlSW5m
b3JtYXRpb246On5Nb2R1bGVJbmZvcm1hdGlvbigpIHsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
ZjBhYjdjMWM1ZjUzMzE3MzRhOTNiNjJiM2Y5ODUwOTQ1NmY3YzJkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKQEAg
LTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
V2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitzdHJ1Y3Qg
TW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5m
b3JtYXRpb24+IHsKKyAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkgKyBpbnRlcm5hbEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICBib29sIGlzSW1wb3J0ZWRGdW5j
dGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc2l6ZV90IGZ1bmN0aW9uSW5kZXgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleCA8IGZ1bmN0aW9uSW5kZXhTcGFjZVNp
emUoKSk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbkluZGV4IDwgaW1wb3J0RnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICB9CisgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHNpemVfdCBmdW5jdGlvbkluZGV4KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZnVuY3Rpb25JbmRleCkKKyAgICAgICAgPyBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUlu
ZGljZXNbZnVuY3Rpb25JbmRleF0KKyAgICAgICAgOiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1tmdW5jdGlvbkluZGV4IC0gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNp
emUoKV07CisgICAgfQorCisgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0
IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1
aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKworICAgIE1vZHVsZUluZm9ybWF0aW9u
KFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZUJ5dGVzKQorICAgICAgICA6IHNvdXJjZShXVEZNb3Zl
KHNvdXJjZUJ5dGVzKSkKKyAgICB7CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1v
ZHVsZUluZm9ybWF0aW9uKCk7CisKKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gc291cmNlOwor
CisgICAgVmVjdG9yPEltcG9ydD4gaW1wb3J0czsKKyAgICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+
IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKKyAgICBWZWN0b3I8U2lnbmF0dXJlSW5k
ZXg+IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOworICAgIFZlY3RvcjxSZWY8U2ln
bmF0dXJlPj4gdXNlZFNpZ25hdHVyZXM7CisKKyAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7
CisKKyAgICBWZWN0b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5PiBmdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnk7CisKKyAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOworICAgIHN0ZDo6b3B0aW9u
YWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlOworICAgIFZlY3RvcjxTZWdtZW50
OjpQdHI+IGRhdGE7CisgICAgVmVjdG9yPEVsZW1lbnQ+IGVsZW1lbnRzOworICAgIFRhYmxlSW5m
b3JtYXRpb24gdGFibGVJbmZvcm1hdGlvbjsKKyAgICBWZWN0b3I8R2xvYmFsPiBnbG9iYWxzOwor
ICAgIHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9iYWwgeyAwIH07CisgICAgVmVjdG9yPEN1c3Rv
bVNlY3Rpb24+IGN1c3RvbVNlY3Rpb25zOworCit9OworCisgICAgCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCAyMjM5MTIyOTRm
OWVmZDkyNGJiNDM5OWI4YjliZTQ1N2ViY2Y3ZjUwLi5lZTcxNGMxYThmMGE5MzUxNmVmMDdlMTE0
YmExMmNkOWIzMWY1YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmNwcApAQCAtNDksNyArNDksNiBAQCBBTFdBWVNfSU5MSU5FIEkzMkluaXRF
eHByIG1ha2VJMzJJbml0RXhwcih1aW50OF90IG9wY29kZSwgdWludDMyX3QgYml0cykKIAogYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiB7Ci0gICAgbV9yZXN1bHQubW9kdWxl
ID0gc3RkOjptYWtlX3VuaXF1ZTxNb2R1bGVJbmZvcm1hdGlvbj4oKTsKICAgICBjb25zdCBzaXpl
X3QgbWluU2l6ZSA9IDg7CiAgICAgdWludDMyX3QgdmVyc2lvbk51bWJlcjsKIApAQCAtOTgsNyAr
OTcsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKICAgICAgICAgcHJl
dmlvdXNTZWN0aW9uID0gc2VjdGlvbjsKICAgICB9CiAKLSAgICByZXR1cm4gV1RGTW92ZShtX3Jl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlw
ZSgpIC0+IFBhcnRpYWxSZXN1bHQKQEAgLTEwNyw4ICsxMDYsNyBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50
Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCksICJUeXBlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGNv
dW50KTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGVTaWduYXR1cmVJ
bmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQp
LCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291
bnQsICIgZW50cmllcyIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVs
ZS0+dXNlZFNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGNvdW50LCAiIGVudHJpZXMi
KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPnVzZWRTaWduYXR1cmVzLnRyeVJl
c2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBU
eXBlIHNlY3Rpb24ncyAiLCBjb3VudCwgIiBlbnRyaWVzIik7CiAKICAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBpbnQ4X3QgdHlwZTsKQEAgLTE0MSw4
ICsxMzksNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJlc3Vs
dAogICAgICAgICBzaWduYXR1cmUtPnJldHVyblR5cGUoKSA9IHJldHVyblR5cGU7CiAKICAgICAg
ICAgc3RkOjpwYWlyPFNpZ25hdHVyZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gcmVzdWx0ID0gU2ln
bmF0dXJlSW5mb3JtYXRpb246OmFkb3B0KFdURk1vdmUoc2lnbmF0dXJlKSk7Ci0gICAgICAgIG1f
cmVzdWx0Lm1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLnVu
Y2hlY2tlZEFwcGVuZChyZXN1bHQuZmlyc3QpOwotICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPnVz
ZWRTaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5zZWNvbmQpKTsKKyAg
ICAgICAgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShyZXN1
bHQuc2Vjb25kKSk7CiAgICAgfQogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNTIsMzQgKzE0OSwz
MyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgdWludDMyX3QgaW1wb3J0Q291bnQ7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIoaW1wb3J0Q291bnQpLCAiY2FuJ3QgZ2V0IEltcG9ydCBzZWN0aW9uJ3MgY291bnQi
KTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGltcG9ydENvdW50ID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkltcG9ydCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBpbXBvcnRDb3VudCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9k
dWxlLT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBnbG9iYWxzIik7IC8vIEZJ
WE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydHMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9y
ICIsIGltcG9ydENvdW50LCAiIGltcG9ydHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRl
cyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnRyeVJlc2Vy
dmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv
ciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlcyIpOyAvLyBGSVhN
RSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0eShp
bXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRD
b3VudCwgIiBnbG9iYWxzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBm
aXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmlt
cG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydHMiKTsgLy8gRklYTUUgdGhp
cyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgorICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnRy
eVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVt
b3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlcyIpOyAv
LyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cu
CiAKICAgICBmb3IgKHVpbnQzMl90IGltcG9ydE51bWJlciA9IDA7IGltcG9ydE51bWJlciA8IGlt
cG9ydENvdW50OyArK2ltcG9ydE51bWJlcikgewotICAgICAgICBJbXBvcnQgaW1wOwogICAgICAg
ICB1aW50MzJfdCBtb2R1bGVMZW47CiAgICAgICAgIHVpbnQzMl90IGZpZWxkTGVuOwotICAgICAg
ICBTdHJpbmcgbW9kdWxlU3RyaW5nOwotICAgICAgICBTdHJpbmcgZmllbGRTdHJpbmc7CisgICAg
ICAgIFZlY3RvcjxMQ2hhcj4gbW9kdWxlU3RyaW5nOworICAgICAgICBWZWN0b3I8TENoYXI+IGZp
ZWxkU3RyaW5nOworICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsKKyAgICAgICAgdW5zaWduZWQg
a2luZEluZGV4IHsgMCB9OwogCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNv
bnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBp
bXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxl
TGVuKTsKLSAgICAgICAgaW1wLm1vZHVsZSA9IG1vZHVsZVN0cmluZzsKIAogICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
aW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICci
LCBtb2R1bGVTdHJpbmcsICInIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1
bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAi
IGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOwotICAgICAgICBpbXAuZmllbGQgPSBm
aWVsZFN0cmluZzsKIAotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFs
S2luZChpbXAua2luZCksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3Mg
a2luZCBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5n
LCAiJyIpOwotICAgICAgICBzd2l0Y2ggKGltcC5raW5kKSB7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51
bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZp
ZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAg
ICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogewogICAgICAgICAgICAgdWludDMyX3Qg
ZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGlt
cG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIs
IG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1fcmVzdWx0
Lm1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLnNpemUoKSwg
ImludmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBv
cnQsICIsIGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMgb3V0IG9mIHJhbmdlIG9mICIsIG1f
cmVzdWx0Lm1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLnNp
emUoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3Ry
aW5nLCAiJyIpOwotICAgICAgICAgICAgaW1wLmtpbmRJbmRleCA9IG1fcmVzdWx0Lm1vZHVsZS0+
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKLSAgICAgICAgICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9yZXN1bHQubW9kdWxlU2lnbmF0dXJlSW5kaWNl
c1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25TaWduYXR1cmVJbmRleF07Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy51
bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMu
c2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwg
InRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ug
b2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1
bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIGtp
bmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsK
KyAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5k
ZXhdKTsKKyAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
LnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKQEAgLTIwMSwxNiAr
MTk3LDE2IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBl
KGdsb2JhbCkpOwogICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWwubXV0YWJp
bGl0eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRl
ZCIpOwogCi0gICAgICAgICAgICBpbXAua2luZEluZGV4ID0gbV9yZXN1bHQubW9kdWxlLT5nbG9i
YWxzLnNpemUoKTsKLSAgICAgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFscy51bmNoZWNr
ZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKKyAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5m
by0+Z2xvYmFscy5zaXplKCk7CisgICAgICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICB9CiAKLSAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzLnVuY2hlY2tlZEFw
cGVuZChpbXApOworICAgICAgICBtX2luZm8tPmltcG9ydHMudW5jaGVja2VkQXBwZW5kKHsgV1RG
TW92ZShtb2R1bGVTdHJpbmcpLCBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4
IH0pOwogICAgIH0KIAotICAgIG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCA9
IG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFscy5zaXplKCk7CisgICAgbV9pbmZvLT5maXJzdEludGVy
bmFsR2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKICAgICByZXR1cm4geyB9OwogfQog
CkBAIC0yMTksMjAgKzIxNSwyMCBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICB1aW50MzJfdCBjb3VudDsKICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlv
bidzIGNvdW50Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9PSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMg
dG9vIGJpZyAiLCBjb3VudCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9k
dWxlLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHko
Y291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICIgRnVu
Y3Rpb24gc2lnbmF0dXJlcyIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0LmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeS50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3Qg
YWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICJGdW5jdGlvbiBsb2NhdGlvbnMi
KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBl
bm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBGdW5jdGlvbiBzaWduYXR1cmVzIik7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9y
ICIsIGNvdW50LCAiRnVuY3Rpb24gbG9jYXRpb25zIik7CiAKICAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNh
bid0IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0eXBlIG51bWJlciIpOwotICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9yZXN1bHQubW9kdWxlU2lnbmF0dXJlSW5k
aWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlw
ZSBudW1iZXIgaXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAi
dGggRnVuY3Rpb24gdHlwZSBudW1iZXIgaXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKIAotICAg
ICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fcmVzdWx0Lm1vZHVsZVNpZ25h
dHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzW3R5cGVOdW1iZXJdOworICAgICAg
ICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1t0eXBlTnVtYmVyXSk7CiAgICAgICAgIC8vIFRoZSBD
b2RlIHNlY3Rpb24gZml4ZXMgdXAgc3RhcnQgYW5kIGVuZC4KICAgICAgICAgc2l6ZV90IHN0YXJ0
ID0gMDsKICAgICAgICAgc2l6ZV90IGVuZCA9IDA7Ci0gICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+
aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVy
ZUluZGV4KTsKLSAgICAgICAgbV9yZXN1bHQuZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnVuY2hl
Y2tlZEFwcGVuZCh7IHN0YXJ0LCBlbmQgfSk7CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5j
dGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAg
ICAgICAgbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudW5jaGVja2VkQXBwZW5kKHsg
c3RhcnQsIGVuZCB9KTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwpAQCAtMjc1LDcgKzI3MSw3
IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+
IFBhcnRpYWxSZXN1bHQKIAogICAgIEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0
aWFsKTsKIAotICAgIG1fcmVzdWx0Lm1vZHVsZS0+dGFibGVJbmZvcm1hdGlvbiA9IFRhYmxlSW5m
b3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQpOworICAgIG1faW5mby0+dGFibGVJ
bmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQp
OwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTI5Niw3ICsyOTIsNyBAQCBhdXRvIE1vZHVsZVBh
cnNlcjo6cGFyc2VUYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKIAogYXV0byBNb2R1bGVQYXJzZXI6
OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCEhbV9yZXN1bHQubW9kdWxlLT5tZW1vcnksICJNZW1vcnkg
c2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSIpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoISFtX2luZm8tPm1lbW9yeSwgIk1lbW9yeSBzZWN0aW9uIGNhbm5v
dCBleGlzdCBpZiBhbiBJbXBvcnQgaGFzIGEgbWVtb3J5Iik7CiAKICAgICBQYWdlQ291bnQgaW5p
dGlhbFBhZ2VDb3VudDsKICAgICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKQEAgLTMxOSw3
ICszMTUsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0lt
cG9ydCkgLT4gUGFydGlhbFJlc3VsdAogICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKICAg
ICBBU1NFUlQoIW1heGltdW1QYWdlQ291bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFs
UGFnZUNvdW50KTsKIAotICAgIG1fcmVzdWx0Lm1vZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5mb3Jt
YXRpb24oaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgaXNJbXBvcnQpOworICAg
IG1faW5mby0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3VudCwgbWF4
aW11bVBhZ2VDb3VudCwgaXNJbXBvcnQpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTM0MSw3
ICszMzcsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3QgZ2V0IEdsb2JhbCBzZWN0aW9u
J3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPmds
b2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGdsb2JhbENvdW50ICsgbV9yZXN1bHQubW9kdWxlLT5m
aXJzdEludGVybmFsR2xvYmFsKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgZ2xvYmFs
Q291bnQgKyBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwsICIgZ2xvYmFscyIp
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+Z2xvYmFscy50cnlSZXNlcnZlQ2Fw
YWNpdHkoZ2xvYmFsQ291bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWwpLCAiY2FuJ3Qg
YWxsb2NhdGUgbWVtb3J5IGZvciAiLCBnbG9iYWxDb3VudCArIG1faW5mby0+Zmlyc3RJbnRlcm5h
bEdsb2JhbCwgIiBnbG9iYWxzIik7CiAKICAgICBmb3IgKHVpbnQzMl90IGdsb2JhbEluZGV4ID0g
MDsgZ2xvYmFsSW5kZXggPCBnbG9iYWxDb3VudDsgKytnbG9iYWxJbmRleCkgewogICAgICAgICBH
bG9iYWwgZ2xvYmFsOwpAQCAtMzU2LDcgKzM1Miw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJz
ZUdsb2JhbCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIGdsb2JhbC5pbml0aWFsaXph
dGlvblR5cGUgPSBHbG9iYWw6OkZyb21FeHByZXNzaW9uOwogICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHR5cGVGb3JJbml0T3Bjb2RlICE9IGdsb2JhbC50eXBlLCAiR2xvYmFsIGluaXRfZXhw
ciBvcGNvZGUgb2YgdHlwZSAiLCB0eXBlRm9ySW5pdE9wY29kZSwgIiBkb2Vzbid0IG1hdGNoIGds
b2JhbCdzIHR5cGUgIiwgZ2xvYmFsLnR5cGUpOwogCi0gICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+
Z2xvYmFscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKKyAgICAgICAgbV9pbmZv
LT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwogICAgIH0KIAogICAg
IHJldHVybiB7IH07CkBAIC0zNjcsNDUgKzM2Myw0NiBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFy
c2VFeHBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgdWludDMyX3QgZXhwb3J0Q291bnQ7CiAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhwb3J0Q291bnQpLCAiY2Fu
J3QgZ2V0IEV4cG9ydCBzZWN0aW9uJ3MgY291bnQiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGV4cG9ydENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkV4
cG9ydCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBleHBvcnRDb3VudCk7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5leHBvcnRzLnRyeVJlc2VydmVDYXBh
Y2l0eShleHBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBl
eHBvcnRDb3VudCwgIiBleHBvcnRzIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShleHBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBleHBvcnRDb3VudCwgIiBleHBvcnRzIik7CiAKICAgICBI
YXNoU2V0PFN0cmluZz4gZXhwb3J0TmFtZXM7CiAgICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1i
ZXIgPSAwOyBleHBvcnROdW1iZXIgPCBleHBvcnRDb3VudDsgKytleHBvcnROdW1iZXIpIHsKLSAg
ICAgICAgRXhwb3J0IGV4cDsKICAgICAgICAgdWludDMyX3QgZmllbGRMZW47Ci0gICAgICAgIFN0
cmluZyBmaWVsZFN0cmluZzsKKyAgICAgICAgVmVjdG9yPExDaGFyPiBmaWVsZFN0cmluZzsKKyAg
ICAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7CisgICAgICAgIHVuc2lnbmVkIGtpbmRJbmRleDsKIAog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJj
YW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgi
KTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRT
dHJpbmcsIGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQn
cyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAiLCBmaWVsZExlbik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoZXhwb3J0TmFtZXMuY29udGFpbnMoZmllbGRTdHJpbmcpLCAiZHVwbGljYXRlIGV4
cG9ydDogJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBleHBvcnROYW1lcy5hZGQoZmll
bGRTdHJpbmcpOwotICAgICAgICBleHAuZmllbGQgPSBmaWVsZFN0cmluZzsKKyAgICAgICAgU3Ry
aW5nIGZpZWxkTmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoZmllbGRTdHJpbmcpOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGV4cG9ydE5hbWVzLmNvbnRhaW5zKGZpZWxkTmFtZSksICJkdXBs
aWNhdGUgZXhwb3J0OiAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgIGV4cG9ydE5hbWVz
LmFkZChmaWVsZE5hbWUpOwogCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0
ZXJuYWxLaW5kKGV4cC5raW5kKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBv
cnQncyBraW5kLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4cC5raW5kSW5kZXgpLCAiY2FuJ3QgZ2V0ICIs
IGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgsIG5hbWVkICciLCBmaWVsZFN0
cmluZywgIiciKTsKLSAgICAgICAgc3dpdGNoIChleHAua2luZCkgeworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNhbid0IGdldCAiLCBleHBv
cnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGtpbmRJbmRleCks
ICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mga2luZCBpbmRleCwgbmFt
ZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAg
ICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7Ci0gICAgICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKGV4cC5raW5kSW5kZXggPj0gbV9yZXN1bHQubW9kdWxlLT5mdW5jdGlvbkluZGV4
U3BhY2VTaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlv
biBudW1iZXIgIiwgZXhwLmtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRl
eCBzcGFjZSAiLCBtX3Jlc3VsdC5tb2R1bGUtPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSwgIiwg
bmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksIGV4cG9y
dE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIgIiwga2luZElu
ZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1faW5mby0+ZnVu
Y3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6
VGFibGU6IHsKICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faGFzVGFibGUsICJj
YW4ndCBleHBvcnQgYSBub24tZXhpc3RlbnQgVGFibGUiKTsKLSAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZXhwLmtpbmRJbmRleCwgImNhbid0IGV4cG9ydCBUYWJsZSAiLCBleHAua2lu
ZEluZGV4LCAiIG9ubHkgemVyby1pbmRleCBUYWJsZSBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIik7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCwgImNhbid0IGV4cG9y
dCBUYWJsZSAiLCBraW5kSW5kZXgsICIgb25seSB6ZXJvLWluZGV4IFRhYmxlIGlzIGN1cnJlbnRs
eSBzdXBwb3J0ZWQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgRXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1fcmVzdWx0Lm1vZHVsZS0+bWVtb3J5LCAiY2FuJ3QgZXhwb3J0IGEgbm9uLWV4aXN0ZW50
IE1lbW9yeSIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHAua2luZEluZGV4
LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAiLCBleHAua2luZEluZGV4LCAiIG9ubHkgb25lIFRhYmxl
IGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1faW5mby0+bWVtb3J5LCAiY2FuJ3QgZXhwb3J0IGEgbm9uLWV4aXN0ZW50IE1lbW9yeSIp
OworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXgsICJjYW4ndCBleHBv
cnQgTWVtb3J5ICIsIGtpbmRJbmRleCwgIiBvbmx5IG9uZSBUYWJsZSBpcyBjdXJyZW50bHkgc3Vw
cG9ydGVkIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4
dGVybmFsS2luZDo6R2xvYmFsOiB7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4
cC5raW5kSW5kZXggPj0gbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzLnNpemUoKSwgZXhwb3J0TnVt
YmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGdsb2JhbCBudW1iZXIgIiwgZXhwLmtpbmRJbmRl
eCwgIiBpdCBleGNlZWRzIHRoZSBnbG9iYWxzIGNvdW50ICIsIG1fcmVzdWx0Lm1vZHVsZS0+Z2xv
YmFscy5zaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYobV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzW2V4cC5raW5kSW5k
ZXhdLm11dGFiaWxpdHkgIT0gR2xvYmFsOjpJbW11dGFibGUsIGV4cG9ydE51bWJlciwgInRoIEV4
cG9ydCBpc24ndCBpbW11dGFibGUsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+Z2xvYmFscy5z
aXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBnbG9iYWwgbnVtYmVy
ICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBnbG9iYWxzIGNvdW50ICIsIG1faW5mby0+
Z2xvYmFscy5zaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLT5nbG9iYWxzW2tpbmRJbmRleF0ubXV0YWJp
bGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGlzbid0
IGltbXV0YWJsZSwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+ZXhw
b3J0cy51bmNoZWNrZWRBcHBlbmQoZXhwKTsKKyAgICAgICAgbV9pbmZvLT5leHBvcnRzLnVuY2hl
Y2tlZEFwcGVuZCh7IFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHsgfTsKQEAgLTQxNSwxMiArNDEyLDEyIEBAIGF1dG8gTW9kdWxl
UGFyc2VyOjpwYXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHVpbnQzMl90IHN0
YXJ0RnVuY3Rpb25JbmRleDsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihzdGFydEZ1bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9yZXN1bHQubW9kdWxlLT5m
dW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5k
ZXgsICIgZXhjZWVkcyBmdW5jdGlvbiBpbmRleCBzcGFjZSAiLCBtX3Jlc3VsdC5tb2R1bGUtPmZ1
bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXggPSBtX3Jlc3VsdC5tb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShzdGFydEZ1bmN0aW9uSW5kZXgpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhcnRGdW5j
dGlvbkluZGV4ID49IG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiU3RhcnQgaW5k
ZXggIiwgc3RhcnRGdW5jdGlvbkluZGV4LCAiIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2Ug
IiwgbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4KTsKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIlN0YXJ0IGZ1bmN0aW9u
IGNhbid0IGhhdmUgYXJndW1lbnRzIik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1
cmUucmV0dXJuVHlwZSgpICE9IFZvaWQsICJTdGFydCBmdW5jdGlvbiBjYW4ndCByZXR1cm4gYSB2
YWx1ZSIpOwotICAgIG1fcmVzdWx0Lm1vZHVsZS0+c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPSBz
dGFydEZ1bmN0aW9uSW5kZXg7CisgICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA9
IHN0YXJ0RnVuY3Rpb25JbmRleDsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC00MzEsNyArNDI4
LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRWxlbWVudCgpIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICB1aW50MzJfdCBlbGVtZW50Q291bnQ7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZWxlbWVudENvdW50KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyBj
b3VudCIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZWxlbWVudENvdW50ID09IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzIGNvdW50IGlz
IHRvbyBiaWcgIiwgZWxlbWVudENvdW50KTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jl
c3VsdC5tb2R1bGUtPmVsZW1lbnRzLnRyeVJlc2VydmVDYXBhY2l0eShlbGVtZW50Q291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBlbGVtZW50Q291bnQsICIgRWxlbWVudHMiKTsK
KyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmVsZW1lbnRzLnRyeVJlc2VydmVDYXBh
Y2l0eShlbGVtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBlbGVtZW50
Q291bnQsICIgRWxlbWVudHMiKTsKICAgICBmb3IgKHVuc2lnbmVkIGVsZW1lbnROdW0gPSAwOyBl
bGVtZW50TnVtIDwgZWxlbWVudENvdW50OyArK2VsZW1lbnROdW0pIHsKICAgICAgICAgdWludDMy
X3QgdGFibGVJbmRleDsKICAgICAgICAgdWludDY0X3QgaW5pdEV4cHJCaXRzOwpAQCAtNDQ2LDcg
KzQ0Myw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUVsZW1lbnQoKSAtPiBQYXJ0aWFsUmVz
dWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4Q291
bnQpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBpbmRleCBjb3VudCBmb3IgRWxlbWVu
dCBzZWN0aW9uIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXhDb3VudCA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJFbGVtZW50IHNlY3Rpb24ncyAi
LCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgaXMgdG9vIGJpZyAiLCBpbmRleENvdW50KTsK
IAotICAgICAgICBBU1NFUlQoISFtX3Jlc3VsdC5tb2R1bGUtPnRhYmxlSW5mb3JtYXRpb24pOwor
ICAgICAgICBBU1NFUlQoISFtX2luZm8tPnRhYmxlSW5mb3JtYXRpb24pOwogCiAgICAgICAgIEVs
ZW1lbnQgZWxlbWVudChtYWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSk7
CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnRy
eVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3Ig
IiwgaW5kZXhDb3VudCwgIiBFbGVtZW50IGluZGljZXMiKTsKQEAgLTQ1NCwxMiArNDUxLDEyIEBA
IGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUVsZW1lbnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGluZGV4Q291bnQ7ICsraW5kZXgp
IHsKICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvbkluZGV4KSwgImNhbid0IGdl
dCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4
LCAidGggaW5kZXgiKTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25J
bmRleCA+PSBtX3Jlc3VsdC5tb2R1bGUtPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSwgIkVsZW1l
bnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50J3MgIiwgaW5kZXgsICJ0aCBp
bmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdoaWNoIGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGlu
ZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9yZXN1bHQubW9kdWxlLT5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCkpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkluZGV4ID49
IG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiRWxlbWVudCBzZWN0aW9uJ3MgIiwg
ZWxlbWVudE51bSwgInRoIGVsZW1lbnQncyAiLCBpbmRleCwgInRoIGluZGV4IGlzICIsIGZ1bmN0
aW9uSW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Ugc2l6ZSBv
ZiAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAKICAgICAgICAgICAgIGVs
ZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChmdW5jdGlvbkluZGV4KTsKICAg
ICAgICAgfQogCi0gICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+ZWxlbWVudHMudW5jaGVja2VkQXBw
ZW5kKFdURk1vdmUoZWxlbWVudCkpOworICAgICAgICBtX2luZm8tPmVsZW1lbnRzLnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwpAQCAt
NDcwLDcgKzQ2Nyw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUoKSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgdWludDMyX3QgY291bnQ7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IENvZGUgc2VjdGlvbidzIGNvdW50Iik7CiAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50KTsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ICE9IG1fcmVzdWx0LmZ1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeS5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgY291bnQsICIgZXhjZWVk
cyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX3Jlc3VsdC5mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ICE9
IG1faW5mby0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSwgIkNvZGUgc2VjdGlvbiBj
b3VudCAiLCBjb3VudCwgIiBleGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25z
ICIsIG1faW5mby0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CiAKICAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICB1aW50MzJfdCBmdW5j
dGlvblNpemU7CkBAIC00NzgsOSArNDc1LDkgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29k
ZSgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlv
blNpemUgPiBsZW5ndGgoKSwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0aW9uU2l6ZSwg
IiBleGNlZWRzIHRoZSBtb2R1bGUncyBzaXplICIsIGxlbmd0aCgpKTsKICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0LCAiQ29kZSBm
dW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHJl
bWFpbmluZyBzaXplIiwgbGVuZ3RoKCkgLSBtX29mZnNldCk7CiAKLSAgICAgICAgbV9yZXN1bHQu
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLnN0YXJ0ID0gbV9vZmZzZXQ7Ci0gICAgICAgIG1f
cmVzdWx0LmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNldCArIGZ1bmN0
aW9uU2l6ZTsKLSAgICAgICAgbV9vZmZzZXQgPSBtX3Jlc3VsdC5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnlbaV0uZW5kOworICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtp
XS5zdGFydCA9IG1fb2Zmc2V0OworICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJp
bmFyeVtpXS5lbmQgPSBtX29mZnNldCArIGZ1bmN0aW9uU2l6ZTsKKyAgICAgICAgbV9vZmZzZXQg
PSBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQ7CiAgICAgfQogCiAgICAg
cmV0dXJuIHsgfTsKQEAgLTUyNywxMSArNTI0LDExIEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJz
ZUluaXRFeHByKHVpbnQ4X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51bWJlciwK
ICAgICAgICAgdWludDMyX3QgaW5kZXg7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKIAot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+Z2xv
YmFscy5zaXplKCksICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUg
bnVtYmVyIG9mIGdsb2JhbHMgIiwgbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzLnNpemUoKSk7Ci0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXggPj0gbV9yZXN1bHQubW9kdWxlLT5maXJz
dEludGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBpbXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwg
IiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBnbG9iYWwgIiwgbV9yZXN1bHQubW9kdWxlLT5m
aXJzdEludGVybmFsR2xvYmFsKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+
PSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAi
IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxzICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCkp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Zmlyc3RJbnRl
cm5hbEdsb2JhbCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgZXhj
ZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1faW5mby0+Zmlyc3RJbnRlcm5hbEds
b2JhbCk7CiAKLSAgICAgICAgQVNTRVJUKG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFsc1tpbmRleF0u
bXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSk7Ci0gICAgICAgIHJlc3VsdFR5cGUgPSBt
X3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHNbaW5kZXhdLnR5cGU7CisgICAgICAgIEFTU0VSVChtX2lu
Zm8tPmdsb2JhbHNbaW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUpOworICAg
ICAgICByZXN1bHRUeXBlID0gbV9pbmZvLT5nbG9iYWxzW2luZGV4XS50eXBlOwogICAgICAgICBi
aXRzT3JJbXBvcnROdW1iZXIgPSBpbmRleDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNTU5
LDEwICs1NTYsMTAgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZShHbG9iYWwm
IGdsb2JhbCkgLT4gUGFydGlhbFJlc3VsdAogYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5tZW1vcnksICJEYXRhIHNlY3Rpb24g
Y2Fubm90IGV4aXN0IHdpdGhvdXQgYSBNZW1vcnkgc2VjdGlvbiBvciBJbXBvcnQiKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPm1lbW9yeSwgIkRhdGEgc2VjdGlvbiBjYW5ub3Qg
ZXhpc3Qgd2l0aG91dCBhIE1lbW9yeSBzZWN0aW9uIG9yIEltcG9ydCIpOwogICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHNlZ21lbnRDb3VudCksICJjYW4ndCBnZXQgRGF0
YSBzZWN0aW9uJ3MgY291bnQiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNlZ21lbnRDb3Vu
dCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJEYXRhIHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIHNlZ21lbnRDb3VudCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighbV9yZXN1bHQubW9kdWxlLT5kYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzZWdtZW50Q291
bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgRGF0YSBzZWN0aW9uJ3MgIiwg
c2VnbWVudENvdW50LCAiIHNlZ21lbnRzIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9p
bmZvLT5kYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzZWdtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2Nh
dGUgZW5vdWdoIG1lbW9yeSBmb3IgRGF0YSBzZWN0aW9uJ3MgIiwgc2VnbWVudENvdW50LCAiIHNl
Z21lbnRzIik7CiAKICAgICBmb3IgKHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50
TnVtYmVyIDwgc2VnbWVudENvdW50OyArK3NlZ21lbnROdW1iZXIpIHsKICAgICAgICAgdWludDMy
X3QgaW5kZXg7CkBAIC01ODAsNyArNTc3LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0
YSgpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgICAgICBTZWdtZW50KiBzZWdtZW50ID0gU2VnbWVu
dDo6Y3JlYXRlKG1ha2VJMzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMpLCBkYXRh
Qnl0ZUxlbmd0aCk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlZ21lbnQsICJjYW4n
dCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBz
ZWdtZW50IG9mIHNpemUgIiwgZGF0YUJ5dGVMZW5ndGgpOwotICAgICAgICBtX3Jlc3VsdC5tb2R1
bGUtPmRhdGEudW5jaGVja2VkQXBwZW5kKFNlZ21lbnQ6OmFkb3B0UHRyKHNlZ21lbnQpKTsKKyAg
ICAgICAgbV9pbmZvLT5kYXRhLnVuY2hlY2tlZEFwcGVuZChTZWdtZW50OjphZG9wdFB0cihzZWdt
ZW50KSk7CiAgICAgICAgIGZvciAodWludDMyX3QgZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRh
dGFCeXRlTGVuZ3RoOyArK2RhdGFCeXRlKSB7CiAgICAgICAgICAgICB1aW50OF90IGJ5dGU7CiAg
ICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3Qg
Z2V0ICIsIGRhdGFCeXRlLCAidGggZGF0YSBieXRlIGZyb20gIiwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCIpOwpAQCAtNTk1LDkgKzU5Miw5IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpw
YXJzZUN1c3RvbSh1aW50MzJfdCBzZWN0aW9uTGVuZ3RoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAg
Y29uc3QgdWludDMyX3QgY3VzdG9tU2VjdGlvblN0YXJ0T2Zmc2V0ID0gbV9vZmZzZXQ7CiAKICAg
ICBDdXN0b21TZWN0aW9uIHNlY3Rpb247Ci0gICAgdWludDMyX3QgY3VzdG9tU2VjdGlvbk51bWJl
ciA9IG1fcmVzdWx0Lm1vZHVsZS0+Y3VzdG9tU2VjdGlvbnMuc2l6ZSgpICsgMTsKKyAgICB1aW50
MzJfdCBjdXN0b21TZWN0aW9uTnVtYmVyID0gbV9pbmZvLT5jdXN0b21TZWN0aW9ucy5zaXplKCkg
KyAxOwogICAgIHVpbnQzMl90IG5hbWVMZW47Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9y
ZXN1bHQubW9kdWxlLT5jdXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoY3VzdG9tU2Vj
dGlvbk51bWJlciksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjdXN0b21T
ZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjdXN0b21TZWN0
aW9uTnVtYmVyKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGN1c3RvbVNl
Y3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKG5hbWVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGN1c3RvbVNlY3Rpb25O
dW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgbGVuZ3RoIik7CiAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoc2VjdGlvbi5uYW1lLCBuYW1lTGVuKSwgIm5h
bWVMZW4gZ2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5h
bWUgb2YgbGVuZ3RoICIsIG5hbWVMZW4pOwogCkBAIC02MDksNyArNjA2LDcgQEAgYXV0byBNb2R1
bGVQYXJzZXI6OnBhcnNlQ3VzdG9tKHVpbnQzMl90IHNlY3Rpb25MZW5ndGgpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICAgICAgc2VjdGlvbi5wYXlsb2FkLnVuY2hlY2tlZEFwcGVuZChieXRlKTsKICAg
ICB9CiAgICAgCi0gICAgbV9yZXN1bHQubW9kdWxlLT5jdXN0b21TZWN0aW9ucy51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShzZWN0aW9uKSk7CisgICAgbV9pbmZvLT5jdXN0b21TZWN0aW9ucy51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShzZWN0aW9uKSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IGUzNzdl
ZjU3NDU5Y2VmN2Q5MDM5MzczOGEzOGI4MDNkNjA1ZjNhOTMuLmI1NDlmODZjYTQ0MjU2ZTdhM2Zl
M2QzNzMxNmY5NGEwNDQ0ZWY5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmgKQEAgLTM1LDE4ICszNSwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20gewogCi1zdHJ1Y3QgTW9kdWxlUGFyc2VyUmVzdWx0IHsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVsZTsKLSAgICBWZWN0b3I8RnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5PiBmdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7Ci0gICAgVmVjdG9y
PFNpZ25hdHVyZUluZGV4PiBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJl
SW5kaWNlczsKLX07Ci0KLWNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8TW9kdWxl
UGFyc2VyUmVzdWx0PiB7CitjbGFzcyBNb2R1bGVQYXJzZXIgOiBwdWJsaWMgUGFyc2VyPHZvaWQ+
IHsKIHB1YmxpYzoKLQotCi0gICAgTW9kdWxlUGFyc2VyKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1
ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKKyAgICBNb2R1bGVQYXJzZXIoY29uc3QgdWludDhf
dCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbykKICAgICAgICAgOiBQYXJzZXIoc291cmNlQnVmZmVyLCBzb3VyY2VMZW5ndGgpCisgICAg
ICAgICwgbV9pbmZvKGluZm8pCiAgICAgewogICAgIH0KIApAQCAtNjUsNyArNTgsNyBAQCBwcml2
YXRlOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlUmVzaXphYmxl
TGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4aW11
bSk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1
aW50OF90JiwgdWludDY0X3QmLCBUeXBlJiBpbml0RXhwclR5cGUpOwogCi0gICAgTW9kdWxlUGFy
c2VyUmVzdWx0IG1fcmVzdWx0OworICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOwog
ICAgIGJvb2wgbV9oYXNUYWJsZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGFyc2VyLmgKaW5kZXggOGVjODQyMmYyZTY1MTgzMDcxOWU2ODkwNDJiYjI2Njdi
Y2RlMjM2MS4uMTBmZWU1YzIyNzUwYjFkYzEzOGFhMGNhZGQzNWEwMGY1MjdiNzY4MSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaApAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1
ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNp
bmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAjaW5jbHVkZSA8
dHlwZV90cmFpdHM+CkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL0xFQkRlY29kZXIu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC02MCw3ICs2Miw3IEBAIHByb3RlY3RlZDoKIAogICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1bWVDaGFyYWN0ZXIoY2hhcik7CiAgICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gY29uc3VtZVN0cmluZyhjb25zdCBjaGFyKik7Ci0gICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gY29uc3VtZVVURjhTdHJpbmcoU3RyaW5nJiwgc2l6ZV90KTsK
KyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdW1lVVRGOFN0cmluZyhWZWN0b3I8TENo
YXI+Jiwgc2l6ZV90KTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUlu
dDEodWludDhfdCYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW50NyhpbnQ4
X3QmKTsKQEAgLTE0MCwxOCArMTQyLDI5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3Vj
Y2Vzc1R5cGU+Ojpjb25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0cikKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgU3VjY2Vzc1R5cGU+Ci1BTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NU
eXBlPjo6Y29uc3VtZVVURjhTdHJpbmcoU3RyaW5nJiByZXN1bHQsIHNpemVfdCBzdHJpbmdMZW5n
dGgpCitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6Y29uc3VtZVVURjhT
dHJpbmcoVmVjdG9yPExDaGFyPiYgcmVzdWx0LCBzaXplX3Qgc3RyaW5nTGVuZ3RoKQogewotICAg
IGlmIChzdHJpbmdMZW5ndGggPT0gMCkgewotICAgICAgICByZXN1bHQgPSBlbXB0eVN0cmluZygp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAgICAgaWYgKGxlbmd0aCgpIDwgc3RyaW5n
TGVuZ3RoIHx8IG1fb2Zmc2V0ID4gbGVuZ3RoKCkgLSBzdHJpbmdMZW5ndGgpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXRpY19jYXN0PGNv
bnN0IExDaGFyKj4oJnNvdXJjZSgpW21fb2Zmc2V0XSksIHN0cmluZ0xlbmd0aCk7Ci0gICAgbV9v
ZmZzZXQgKz0gc3RyaW5nTGVuZ3RoOwotICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpKQorICAgIGlm
ICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShzdHJpbmdMZW5ndGgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBjb25zdCB1aW50OF90KiBzdHJpbmdTdGFydCA9IHNvdXJjZSgpICsg
bV9vZmZzZXQ7CisKKyAgICAvLyBXZSBkb24ndCBjYWNoZSB0aGUgVVRGLTE2IGNoYXJhY3RlcnMg
c2luY2UgaXQgc2VlbXMgbGlrZWx5IHRoZSBzdHJpbmcgaXMgYXNjaWkuCisgICAgaWYgKFVOTElL
RUxZKCFjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoc3RyaW5nU3RhcnQsIHN0cmluZ0xlbmd0aCkpKSB7
CisgICAgICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gYnVmZmVyKHN0cmluZ0xlbmd0aCk7CisgICAg
ICAgIFVDaGFyKiBidWZmZXJTdGFydCA9IGJ1ZmZlci5kYXRhKCk7CisKKyAgICAgICAgVUNoYXIq
IGJ1ZmZlckN1cnJlbnQgPSBidWZmZXJTdGFydDsKKyAgICAgICAgY29uc3QgY2hhciogc3RyaW5n
Q3VycmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZ1N0YXJ0KTsKKyAg
ICAgICAgaWYgKFdURjo6VW5pY29kZTo6Y29udmVydFVURjhUb1VURjE2KCZzdHJpbmdDdXJyZW50
LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIgKj4oc3RyaW5nU3RhcnQgKyBzdHJpbmdMZW5n
dGgpLCAmYnVmZmVyQ3VycmVudCwgYnVmZmVyQ3VycmVudCArIGJ1ZmZlci5zaXplKCkpICE9IFdU
Rjo6VW5pY29kZTo6Y29udmVyc2lvbk9LKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJlc3VsdC5ncm93KHN0cmluZ0xlbmd0aCk7CisgICAgbWVtY3B5KHJlc3VsdC5k
YXRhKCksIHNvdXJjZSgpICsgbV9vZmZzZXQsIHN0cmluZ0xlbmd0aCk7CisgICAgbV9vZmZzZXQg
Kz0gc3RyaW5nTGVuZ3RoOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggNjhhYWYxMjRjYzY1MGE4NGZjZmUzOTY5OTNlMjNj
YTEwNjQ3MDM2Zi4uYTNhMjU1ZjhjMzA3YjIwMmU1NjdkMTcyMTJlYWNiMDY3MjdhYjM5NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtNTAsMjEgKzUwLDMwIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIHN0YXRpYyBjb25zdCBib29sIHZl
cmJvc2UgPSBmYWxzZTsKIAotUGxhbjo6UGxhbihWTSYgdm0sIEFycmF5QnVmZmVyJiBzb3VyY2Us
IEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBQbGFuKHZtLCBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2UuZGF0YSgpKSwgc291cmNlLmJ5dGVMZW5n
dGgoKSwgd29yaywgV1RGTW92ZSh0YXNrKSkKK1BsYW46OlBsYW4oVk0mIHZtLCBSZWY8TW9kdWxl
SW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2sp
CisgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoaW5mbykpCisgICAgLCBtX3ZtKHZt
KQorICAgICwgbV9jb21wbGV0aW9uVGFzayh0YXNrKQorICAgICwgbV9zb3VyY2UobV9tb2R1bGVJ
bmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSkKKyAgICAsIG1fc291cmNlTGVuZ3RoKG1fbW9kdWxl
SW5mb3JtYXRpb24tPnNvdXJjZS5zaXplKCkpCisgICAgLCBtX3N0YXRlKFN0YXRlOjpWYWxpZGF0
ZWQpCisgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewogfQogCi1QbGFuOjpQbGFuKFZNJiB2bSwg
VmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYm
IHRhc2spCi0gICAgOiBQbGFuKHZtLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpLCB3b3Jr
LCBXVEZNb3ZlKHRhc2spKQorUGxhbjo6UGxhbihWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNv
dXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IFBsYW4o
dm0sIG1ha2VSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkpKSwgd29y
aywgV1RGTW92ZSh0YXNrKSkKIHsKKyAgICBtX3N0YXRlID0gU3RhdGU6OkluaXRpYWw7CiB9CiAK
IFBsYW46OlBsYW4oVk0mIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VM
ZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBtX3Zt
KHZtKQorICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihtYWtlUmVmKCpuZXcgTW9kdWxlSW5mb3Jt
YXRpb24oVmVjdG9yPHVpbnQ4X3Q+KCkpKSkKKyAgICAsIG1fdm0odm0pCiAgICAgLCBtX2NvbXBs
ZXRpb25UYXNrKHRhc2spCiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX3NvdXJjZUxl
bmd0aChzb3VyY2VMZW5ndGgpCisgICAgLCBtX3N0YXRlKFN0YXRlOjpJbml0aWFsKQogICAgICwg
bV9hc3luY1dvcmsod29yaykKIHsKIH0KQEAgLTk3LDMzICsxMDYsMzMgQEAgdm9pZCBQbGFuOjpm
YWlsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIFN0cmluZyYmIGVycm9yTWVzc2FnZSkK
IAogYm9vbCBQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKIHsKLSAgICBBU1NFUlQobV9z
dGF0ZSA9PSBTdGF0ZTo6SW5pdGlhbCk7CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkluaXRp
YWwpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0
YXJ0aW5nIHZhbGlkYXRpb24iKTsKICAgICBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZTsKICAgICBp
ZiAodmVyYm9zZSB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkKICAgICAgICAgc3Rh
cnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKICAgICB7Ci0gICAgICAgIE1vZHVsZVBh
cnNlciBtb2R1bGVQYXJzZXIobV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoKTsKKyAgICAgICAgTW9k
dWxlUGFyc2VyIG1vZHVsZVBhcnNlcihtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgsIG1fbW9kdWxl
SW5mb3JtYXRpb24pOwogICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gbW9kdWxlUGFyc2VyLnBh
cnNlKCk7CiAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKICAgICAgICAgICAgIGZhaWwoaG9s
ZExvY2sobV9sb2NrKSwgV1RGTW92ZShwYXJzZVJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9
IFdURk1vdmUocGFyc2VSZXN1bHQtPm1vZHVsZSk7Ci0gICAgICAgIG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5ID0gV1RGTW92ZShwYXJzZVJlc3VsdC0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
KTsKLSAgICAgICAgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5k
aWNlcyA9IFdURk1vdmUocGFyc2VSZXN1bHQtPm1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1
ZWRTaWduYXR1cmVJbmRpY2VzKTsKICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6
ZSgpOyArK2Z1bmN0aW9uSW5kZXgpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlBy
b2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4
X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBt
X2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5lbmQgLSBtX2Z1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydDsKKyAgICBjb25zdCBhdXRvJiBm
dW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeTsKKyAgICBmb3IgKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbklu
ZGV4IDwgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOyArK2Z1bmN0aW9uSW5kZXgpIHsKKyAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6
ICIsIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcg
YXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLmVuZCk7CisgICAgICAgIGNv
bnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25z
W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBm
dW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tm
dW5jdGlvbkluZGV4XS5zdGFydDsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1f
c291cmNlTGVuZ3RoKTsKICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5j
dGlvbkluZGV4XTsKICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlk
YXRpb25SZXN1bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVu
Z3RoLCBzaWduYXR1cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUlu
ZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKTsKKyAgICAgICAgYXV0byB2YWxpZGF0aW9u
UmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwg
c2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKICAgICAgICAgaWYgKCF2YWxp
ZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmdW5jdGlvbkxlbmd0aDsgKytpKQpAQCAtMTYz
LDIyICsxNzIsMjMgQEAgdm9pZCBQbGFuOjpwcmVwYXJlKCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfTsKIAorICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OwogICAgIGlmICghdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fd2FzbUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0
IHN0dWJzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCksICIgdW5saW5rZWQg
V2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJp
bmFyeS5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rpb25zIikKLSAgICAgICAgfHwgIXRyeVJl
c2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4dHMsIG1fZnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5LnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpKQorICAgICAgICB8fCAhdHJ5
UmVzZXJ2ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uTG9jYXRp
b25zLnNpemUoKSwgIiB1bmxpbmtlZCBXZWJBc3NlbWJseSB0byBXZWJBc3NlbWJseSBjYWxscyIp
CisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtSW50ZXJuYWxGdW5jdGlvbnMs
IGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQorICAg
ICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rp
b25Mb2NhdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0aW9uIGNvbnRleHRzIikpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMucmVzaXplKG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5LnNpemUoKSk7Ci0gICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMucmVz
aXplKG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7Ci0gICAgbV9jb21waWxhdGlv
bkNvbnRleHRzLnJlc2l6ZShtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpOworICAg
IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMucmVzaXplKGZ1bmN0aW9uTG9jYXRpb25zLnNpemUo
KSk7CisgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMucmVzaXplKGZ1bmN0aW9uTG9jYXRpb25z
LnNpemUoKSk7CisgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGltcG9y
dEluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cy5zaXplKCk7ICsraW1wb3J0SW5k
ZXgpIHsKICAgICAgICAgSW1wb3J0KiBpbXBvcnQgPSAmbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1w
b3J0c1tpbXBvcnRJbmRleF07CiAgICAgICAgIGlmIChpbXBvcnQtPmtpbmQgIT0gRXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB1bnNpZ25lZCBp
bXBvcnRGdW5jdGlvbkluZGV4ID0gbV93YXNtRXhpdFN0dWJzLnNpemUoKTsKLSAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgaW1wb3J0IGZ1bmN0aW9uIG51bWJlciAiLCBp
bXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBpbXBvcnQtPm1vZHVsZSwgIjogIiwgaW1wb3J0LT5m
aWVsZCk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGltcG9ydCBm
dW5jdGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjogIiwgbWFrZVN0cmluZyhp
bXBvcnQtPm1vZHVsZSksICI6ICIsIG1ha2VTdHJpbmcoaW1wb3J0LT5maWVsZCkpOwogICAgICAg
ICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmlt
cG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5hdChpbXBvcnQtPmtpbmRJbmRleCk7CiAgICAg
ICAgIG1fd2FzbUV4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQoZXhpdFN0dWJHZW5lcmF0b3IoJm1f
dm0sIG1fY2FsbExpbmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEZ1bmN0aW9uSW5kZXgp
KTsKICAgICB9CkBAIC0yMTksNiArMjI5LDcgQEAgdm9pZCBQbGFuOjpjb21waWxlRnVuY3Rpb25z
KENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICBUaHJlYWRDb3VudEhvbGRlciBob2xkZXIo
KnRoaXMpOwogCiAgICAgc2l6ZV90IGJ5dGVzQ29tcGlsZWQgPSAwOworICAgIGNvbnN0IGF1dG8m
IGZ1bmN0aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5OwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChlZmZvcnQgPT0gUGFy
dGlhbCAmJiBieXRlc0NvbXBpbGVkID49IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlhbENvbXBp
bGVMaW1pdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjI2LDcgKzIzNyw3IEBAIHZvaWQg
UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAg
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+
PSBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaGFzV29yaygpKQogICAgICAgICAgICAgICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0
ZTo6Q29tcGlsZWQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIzNSwxNyArMjQ2LDE3
IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgICAgICArK21fY3VycmVudEluZGV4OwogICAgICAgICB9CiAKLSAgICAgICAgY29u
c3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7Ci0gICAgICAgIHNpemVfdCBmdW5jdGlvbkxl
bmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1f
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBj
b25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9zb3VyY2UgKyBmdW5jdGlvbkxvY2F0aW9u
c1tmdW5jdGlvbkluZGV4XS5zdGFydDsKKyAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0g
ZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uZW5kIC0gZnVuY3Rpb25Mb2NhdGlvbnNb
ZnVuY3Rpb25JbmRleF0uc3RhcnQ7CiAgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBt
X3NvdXJjZUxlbmd0aCk7CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVu
Y3Rpb25JbmRleF07CiAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5j
dGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCAqbV9tb2R1bGVJ
bmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5k
aWNlcykpOworICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBm
dW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CiAK
ICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGls
ZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25J
bmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sICptX21vZHVsZUluZm9ybWF0aW9uLCBt
X21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLCBtX21vZGUs
IE9wdGlvbnM6OndlYkFzc2VtYmx5QjNPcHRpbWl6YXRpb25MZXZlbCgpKTsKKyAgICAgICAgYXV0
byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNv
bnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2ln
bmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIE9wdGlvbnM6OndlYkFzc2VtYmx5QjNPcHRpbWl6
YXRpb25MZXZlbCgpKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJl
c3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAg
LTI1Myw3ICsyNjQsNyBAQCB2b2lkIFBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQogICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGNvbXBpbGVzIGNvdWxk
IGZhaWwgc2ltdWx0YW5lb3VzbHkuIFdlIGFyYml0cmFyaWx5IGNob29zZSB0aGUgZmlyc3QuCiAg
ICAgICAgICAgICAgICAgZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVz
dWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1
bmN0aW9uSW5kZXgpKSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbV9mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnkuc2l6ZSgpOworICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjY0LDEx
ICsyNzUsMTEgQEAgdm9pZCBQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKIAogdm9pZCBQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7
Ci0gICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudEluZGV4
ID49IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAgQVNTRVJUKG1fc3Rh
dGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudEluZGV4ID49IG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpOwogICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJTdGFydGluZyBDb21wbGV0aW9uIik7CiAKICAgICBpZiAobV9zdGF0ZSA9PSBT
dGF0ZTo6Q29tcGlsZWQpIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0g
MDsgZnVuY3Rpb25JbmRleCA8IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsgZnVu
Y3Rpb25JbmRleCsrKSB7CisgICAgICAgIGZvciAodWludDMyX3QgZnVuY3Rpb25JbmRleCA9IDA7
IGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnkuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4
dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKQEAgLTMyNCw3ICszMzUsNyBAQCB2b2lkIFBsYW46OmNh
bmNlbCgpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBpZiAobV9zdGF0
ZSAhPSBTdGF0ZTo6Q29tcGxldGVkKSB7Ci0gICAgICAgIG1fY3VycmVudEluZGV4ID0gbV9mdW5j
dGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG1f
bW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CiAgICAg
ICAgIGZhaWwobG9ja2VyLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5IFBsYW4gd2FzIGNhbmNl
bGVkLiBJZiB5b3Ugc2VlIHRoaXMgZXJyb3IgbWVzc2FnZSBwbGVhc2UgZmlsZSBhIGJ1ZyBhdCBi
dWdzLndlYmtpdC5vcmchIikpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5oCmluZGV4IDYzMjEyOGRhYzYyN2Y4NWU3N2M4Y2M3MmExZGYxZDRiNGYwYmU2NGMuLjA1
YzNjNzZlZWVhMjA1NDI2MjQwOTFmYmM5ZTg2NzU1NGNlOGFjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uaApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkNvbXBpbGF0
aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRv
ci5oIgotI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3Jt
YXRpb24uaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTAsOCArNTAsMTAgQEAg
cHVibGljOgogICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKFBsYW4mKT4gQ29tcGxldGlv
blRhc2s7CiAgICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlk
YXRpb24gfTsKICAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSBy
ZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2Ug
Y3ljbGUuCi0gICAgUGxhbihWTSYsIEFycmF5QnVmZmVyJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9u
VGFzayYmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+
JiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBQbGFuKFZNJiwgUmVmPE1vZHVs
ZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBQbGFuKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJik7CisgICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBi
ZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFs
aWRhdGlvbi9mdW5jdGlvbiB0ZXN0cworICAgIC8vIEZJWE1FOiBXaGVuIHdlIGdldCByaWQgb2Yg
ZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBBc3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0
cnVjdG9yLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIH5QbGFuKCk7CiAKQEAgLTczLDEwICs3NSwxMCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGlu
dGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBtX2Z1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeS5zaXplKCk7CisgICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9u
LT5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKTsKICAgICB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
TW9kdWxlSW5mb3JtYXRpb24+JiYgdGFrZU1vZHVsZUluZm9ybWF0aW9uKCkKKyAgICBSZWY8TW9k
dWxlSW5mb3JtYXRpb24+JiYgdGFrZU1vZHVsZUluZm9ybWF0aW9uKCkKICAgICB7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKICAgICAgICAgcmV0dXJu
IFdURk1vdmUobV9tb2R1bGVJbmZvcm1hdGlvbik7CkBAIC0xMzEsOSArMTMzLDcgQEAgcHJpdmF0
ZToKIAogICAgIGNvbnN0IGNoYXIqIHN0YXRlU3RyaW5nKFN0YXRlKTsKIAotICAgIHN0ZDo6dW5p
cXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKLSAgICBWZWN0
b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5PiBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsK
LSAgICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+IG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5p
cXVlZFNpZ25hdHVyZUluZGljZXM7CisgICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVs
ZUluZm9ybWF0aW9uOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAg
ICBWZWN0b3I8V2FzbUV4aXRTdHVicz4gbV93YXNtRXhpdFN0dWJzOwogICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9u
czsKQEAgLTE1MCw3ICsxNTAsNyBAQCBwcml2YXRlOgogICAgIE1lbW9yeU1vZGUgbV9tb2RlIHsg
TWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKICAgICBMb2NrIG1fbG9jazsKICAgICBDb25k
aXRpb24gbV9jb21wbGV0ZWQ7Ci0gICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpJbml0aWFsIH07
CisgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBjb25zdCBBc3luY1dvcmsgbV9hc3luY1dvcms7CiAg
ICAgdWludDhfdCBtX251bWJlck9mQWN0aXZlVGhyZWFkcyB7IDAgfTsKICAgICB1aW50MzJfdCBt
X2N1cnJlbnRJbmRleCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TaWduYXR1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNp
Z25hdHVyZS5jcHAKaW5kZXggMmViNTcyODI4NjI4ZmNkYjZlMDc3MzBkMGZiMmNmOTYwNmQwZWU2
NS4uZjEyYWYyM2U5NjQ5MGZhNmY2YTk1NGY3ODA0ZTcwMDBiMTg5YTNhYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKQEAgLTEyNyw2ICsxMjcsMTYg
QEAgY29uc3QgU2lnbmF0dXJlJiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KFNpZ25hdHVyZUlu
ZGV4IGluZGV4KQogICAgIHJldHVybiAqaW5mby5tX2luZGV4TWFwLmdldChpbmRleCk7CiB9CiAK
K1NpZ25hdHVyZUluZGV4IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUpCit7CisgICAgU2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0
b24oKTsKKyAgICBMb2NrSG9sZGVyIGxvY2soaW5mby5tX2xvY2spOworCisgICAgYXV0byByZXN1
bHQgPSBpbmZvLm1fc2lnbmF0dXJlTWFwLmdldChTaWduYXR1cmVIYXNoIHsgJnNpZ25hdHVyZSB9
KTsKKyAgICBBU1NFUlQocmVzdWx0ICE9IFNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIFNpZ25hdHVyZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVw
KCkKIHsKICAgICBTaWduYXR1cmVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRvbigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oCmluZGV4IDYxYWMzNTkwMDJk
ODBmZjgwMDUxYjEzYzRlMDkyOTUyOTQ5YzE1OGEuLjhmNDcwZDg5OTIwZThiN2U2ZmM4MDYwNjZj
NTc0M2JjYjYxYzZhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TaWduYXR1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0
dXJlLmgKQEAgLTE2OCw2ICsxNjgsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgc3RkOjpwYWly
PFNpZ25hdHVyZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gV0FSTl9VTlVTRURfUkVUVVJOIGFkb3B0
KFJlZjxTaWduYXR1cmU+JiYpOwogICAgIHN0YXRpYyBjb25zdCBTaWduYXR1cmUmIFdBUk5fVU5V
U0VEX1JFVFVSTiBnZXQoU2lnbmF0dXJlSW5kZXgpOworICAgIHN0YXRpYyBTaWduYXR1cmVJbmRl
eCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0KGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIHN0YXRpYyB2
b2lkIHRyeUNsZWFudXAoKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVmFsaWRhdGUuY3BwCmluZGV4IDYzYTFlMjc2YTEzNjE3ZDA1YTg3MmQzMjk5NzhlOTcx
MWQ3ZWU3YzYuLmQ5NDk4MTllMmIzOTEzNGY0Mzg4NWYxMGRmNDMxMjY5Mzg5Y2NkZDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcApAQCAtMTM5LDcgKzEz
OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENhbGxzCiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYWxsKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBjb25z
dCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
LSAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWdu
YXR1cmUmLCBTaWduYXR1cmVJbmRleCwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJn
cywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICBib29sIGhhc01l
bW9yeSgpIGNvbnN0IHsgcmV0dXJuICEhbV9tb2R1bGUubWVtb3J5OyB9CiAKQEAgLTMzNSwxMCAr
MzM1LDggQEAgYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbCh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXMKICAgICByZXR1cm4geyB9OwogfQogCi1h
dXRvIFZhbGlkYXRlOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRh
dGU6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVj
dG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVz
dWx0CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHNpZ25hdHVyZUluZGV4KTsKLSAgICBBU1NFUlQoc2ln
bmF0dXJlSW5kZXggIT0gU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOwogICAgIGNvbnN0IGF1dG8g
YXJndW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CiAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihhcmd1bWVudENvdW50ICE9IGFyZ3Muc2l6ZSgpIC0gMSwgImFyaXR5IG1p
c21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmdzLnNpemUoKSAtIDEsICIgYXJndW1l
bnRzLCBleHBlY3RlZCAiLCBhcmd1bWVudENvdW50KTsKIApAQCAtMzgyLDEwICszODAsMTAgQEAg
dm9pZCBWYWxpZGF0ZTo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0
YWNrLCBjb25zdCBFeHByZXNzaW9uTGkKICAgICBkYXRhTG9nTG4oKTsKIH0KIAotRXhwZWN0ZWQ8
dm9pZCwgU3RyaW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6
ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBtb2R1bGUsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVsZVNpZ25h
dHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKQorRXhwZWN0ZWQ8dm9pZCwgU3Ry
aW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGxlbmd0
aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBt
b2R1bGUpCiB7CiAgICAgVmFsaWRhdGUgY29udGV4dChtb2R1bGUpOwotICAgIEZ1bmN0aW9uUGFy
c2VyPFZhbGlkYXRlPiB2YWxpZGF0b3IoY29udGV4dCwgc291cmNlLCBsZW5ndGgsIHNpZ25hdHVy
ZSwgbW9kdWxlLCBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNl
cyk7CisgICAgRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+IHZhbGlkYXRvcihjb250ZXh0LCBzb3Vy
Y2UsIGxlbmd0aCwgc2lnbmF0dXJlLCBtb2R1bGUpOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJf
RkFJTFModmFsaWRhdG9yLnBhcnNlKCkpOwogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCmluZGV4IGE0ZmVjNTkzZWRkZWE4ZmUzMDYz
MmJkYzNmOTJiM2E4MmNhZmEwNmUuLjI4MjgzY2ZlYTgyYWY5MTQxY2JiMGE5MzBkZTAyOTkzYTk5
MDVhYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCkBAIC0y
NywxNCArMjcsMTQgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIldh
c21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsK
IAotRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29u
c3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYpOworRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiB2YWxp
ZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlI
ZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVs
cGVycy5oCmluZGV4IDU3OGE2OWY0OTgxNWE4MjUyM2MxMTI5NDhmYmQ4ZWEwOTAzNWYyMDIuLjE0
NDg3ZjAxYzZiMmRkZGVjNWRjNDBlMDU0ODYxNmU0NzNmMDI0YTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaApAQCAtNzMs
MjAgKzczLDIzIEBAIEFMV0FZU19JTkxJTkUgdWludDhfdCogZ2V0V2FzbUJ1ZmZlckZyb21WYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIHNpCiAgICAgcmV0dXJuIGFycmF5QnVm
ZmVyVmlldyA/IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlclZpZXctPnZlY3Rvcigp
KSA6IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCkpOwog
fQogCi1BTFdBWVNfSU5MSU5FIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlU291cmNlQnVmZmVy
RnJvbVZhbHVlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorQUxXQVlT
X0lOTElORSBWZWN0b3I8dWludDhfdD4gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHNpemVfdCBieXRlT2Zmc2V0OwogICAg
IHNpemVfdCBieXRlU2l6ZTsKICAgICB1aW50OF90KiBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21W
YWx1ZShleGVjLCB2YWx1ZSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBWZWN0b3I8dWludDhfdD4oKSk7CiAKLSAgICBhdXRvIGJ1ZmZlciA9IEFycmF5
QnVmZmVyOjp0cnlDcmVhdGUoZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKLSAgICBpZiAo
YnVmZmVyKQotICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1
bHQ7CisgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJ5dGVTaXplKSkgeworICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKLSAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsK
LSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXN1bHQuZ3JvdyhieXRlU2l6ZSk7CisgICAgbWVt
Y3B5KHJlc3VsdC5kYXRhKCksIGRhdGEgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogQUxXQVlTX0lOTElORSBib29sIGlzV2ViQXNzZW1ibHlIb3N0RnVu
Y3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2JqZWN0LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiYgd2Fz
bUZ1bmN0aW9uLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiomIHdhc21XcmFwcGVyRnVuY3Rp
b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuY3BwCmluZGV4IDlkNmY0YWZjZTAzMWVkYjZiNWVmMTY4ZjEyYjI0MzM4ODhjMjUw
ZDUuLjI1NTM3MDQ5ZmY1ZmIxZWExOTg0OTZiODJhZWE1ZWYyYTIwMTE1NGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3Bw
CkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseU1vZHVsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuTW9kdWxlIiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5TW9kdWxl
KSB9OwogCi1KU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVT
dHViKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRy
PEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYgcGxhbikKK0pTV2Vi
QXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8V2FzbTo6UGxhbj4m
JiBwbGFuKQogewogICAgIEFTU0VSVCghcGxhbi0+aGFzV29yaygpKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC01Miw4ICs1Miw4IEBAIEpTV2ViQXNzZW1i
bHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIFN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGF1dG8q
IG1vZHVsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+
KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoc291
cmNlKSk7Ci0gICAgbW9kdWxlLT5maW5pc2hDcmVhdGlvbih2bSwgV1RGTW92ZShwbGFuKSk7Cisg
ICAgYXV0byogbW9kdWxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJs
eU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgKnBs
YW4uZ2V0KCkpOworICAgIG1vZHVsZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBt
b2R1bGU7CiB9CiAKQEAgLTYyLDM3ICs2MiwyMyBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlN
b2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgog
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNX
ZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBSZWZQdHI8QXJyYXlCdWZmZXI+JiYgc291cmNlKQorSlNXZWJBc3NlbWJseU1v
ZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
YXNtOjpQbGFuJiBwbGFuKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICwgbV9zb3Vy
Y2VCdWZmZXIoc291cmNlLnJlbGVhc2VOb25OdWxsKCkpCisgICAgLCBtX21vZHVsZUluZm9ybWF0
aW9uKHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCkpCiB7CiB9CiAKLXZvaWQgSlNXZWJBc3Nl
bWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBSZWZQdHI8V2FzbTo6UGxhbj4mJiBw
bGFuKQordm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+
IG1vZHVsZUluZm9ybWF0aW9uID0gcGxhbi0+dGFrZU1vZHVsZUluZm9ybWF0aW9uKCk7Ci0gICAg
Zm9yIChhdXRvJiBleHAgOiBtb2R1bGVJbmZvcm1hdGlvbi0+ZXhwb3J0cykgewotICAgICAgICBB
U1NFUlQoZXhwLmZpZWxkLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKLSAgICAgICAg
ZXhwLmZpZWxkID0gQXRvbWljU3RyaW5nKGV4cC5maWVsZCk7Ci0gICAgfQotICAgIGZvciAoYXV0
byYgaW1wIDogbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydHMpIHsKLSAgICAgICAgQVNTRVJUKGlt
cC5maWVsZC5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSk7Ci0gICAgICAgIGltcC5maWVs
ZCA9IEF0b21pY1N0cmluZyhpbXAuZmllbGQpOwotICAgICAgICBBU1NFUlQoaW1wLm1vZHVsZS5p
c1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSk7Ci0gICAgICAgIGltcC5tb2R1bGUgPSBBdG9t
aWNTdHJpbmcoaW1wLm1vZHVsZSk7Ci0gICAgfQotCi0gICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9
IFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24pOwotCiAgICAgLy8gT24gc3VjY2VzcywgYSBuZXcg
V2ViQXNzZW1ibHkuTW9kdWxlIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIFtbTW9kdWxlXV0gc2V0
IHRvIHRoZSB2YWxpZGF0ZWQgQXN0Lm1vZHVsZS4KICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3lt
Ym9sVGFibGUgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKHZtKTsKICAgICBmb3IgKGF1dG8mIGV4cCA6
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHMpIHsKICAgICAgICAgYXV0byBvZmZzZXQgPSBl
eHBvcnRTeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tpbmdOZWNlc3Nhcnkp
OwotICAgICAgICBBU1NFUlQoZXhwLmZpZWxkLmltcGwoKS0+aXNBdG9taWMoKSk7Ci0gICAgICAg
IGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBzdGF0aWNfY2FzdDxB
dG9taWNTdHJpbmdJbXBsKj4oZXhwLmZpZWxkLmltcGwoKSksIFN5bWJvbFRhYmxlRW50cnkoVmFy
T2Zmc2V0KG9mZnNldCkpKTsKKyAgICAgICAgU3RyaW5nIGZpZWxkID0gU3RyaW5nOjpmcm9tVVRG
OChleHAuZmllbGQpOworICAgICAgICBleHBvcnRTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05l
Y2Vzc2FyeSwgQXRvbWljU3RyaW5nKGZpZWxkKS5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFy
T2Zmc2V0KG9mZnNldCkpKTsKICAgICB9CiAKICAgICBtX2V4cG9ydFN5bWJvbFRhYmxlLnNldCh2
bSwgdGhpcywgZXhwb3J0U3ltYm9sVGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDU0OWFlODIwYTY1YTIxNGQ3
Y2MyNmU0MDFiMzEwNDc4YWM4MGM0NGUuLjU3N2MwMzZjMDg1ZTM5ZTZmYmQzYzlmYWU0MmY2MmY3
MmRhNjgwZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TW9kdWxlLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJKU09iamVjdC5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKICNpbmNsdWRlICJVbmNvbmRp
dGlvbmFsRmluYWxpemVyLmgiCi0jaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldh
c21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKQEAgLTQ5LDEyICs0OSwxMiBAQCBjbGFzcyBKU1dlYkFzc2VtYmx5TW9k
dWxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVm
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1v
ZHVsZSogY3JlYXRlU3R1YihWTSYsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4mJiBzb3VyY2UsIFJlZlB0cjxXYXNtOjpQbGFuPiYmKTsKKyAgICBzdGF0aWMgSlNX
ZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlU3R1YihWTSYsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IFJlZlB0cjxXYXNtOjpQbGFuPiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZP
OwogCi0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
KCkgY29uc3QgeyByZXR1cm4gKm1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7IH0KKyAgICBjb25z
dCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpOyB9CiAgICAgU3ltYm9sVGFibGUqIGV4cG9y
dFN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leHBvcnRTeW1ib2xUYWJsZS5nZXQoKTsg
fQogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0CiAgICAgewpAQCAtNjQs
MjAgKzY0LDE5IEBAIHB1YmxpYzoKIAogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVC
bG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsgfQogCi0gICAgQXJyYXlCdWZmZXImIHNvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQnVmZmVyLmdldCgpOyB9CisgICAgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtb2R1bGVJbmZvcm1hdGlvbigpLnNv
dXJjZTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOwogCiAgICAgdm9pZCBzZXRDb2RlQmxvY2soVk0mLCBXYXNtOjpNZW1vcnlNb2RlLCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKik7CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3Ry
dWN0dXJlKiwgUmVmUHRyPEFycmF5QnVmZmVyPiYmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgUmVmUHRyPFdhc206OlBsYW4+JiYpOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0m
LCBTdHJ1Y3R1cmUqLCBXYXNtOjpQbGFuJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgUmVmPEFycmF5QnVmZmVy
PiBtX3NvdXJjZUJ1ZmZlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgV2FzbTo6TW9kdWxl
SW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CisgICAgUmVmPFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xU
YWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJs
eUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOwogICAg
IFdyaXRlQmFycmllcjxXZWJBc3NlbWJseVRvSlNDYWxsZWU+IG1fY2FsbGVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5z
dGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMDQxZGQzNTg0ODQ3NGE1ZThmODk3ZGU3N2NiNGJk
NzUyYzlmYjI5Yi4uM2M0N2Y0MTBiYTlkMzA5YjdlNWM0Y2Q1MWFlOTQ2NzEwNzIwNTY4OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZShFeGVjU3RhdGUqIGV4CiAgICAgICAgIGlmIChpbnN0YW5jZS0+Y29kZUJsb2NrKCkpCiAgICAg
ICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHko
aW5zdGFuY2UtPmNvZGVCbG9jaygpLT5wbGFuKCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBtb2R1bGUt
PnNvdXJjZSgpLCBQbGFuOjpGdWxsQ29tcGlsZSwgUGxhbjo6ZG9udEZpbmFsaXplKSk7CisgICAg
ICAgICAgICBSZWY8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgbWFr
ZVJlZihjb25zdF9jYXN0PFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpKSksIFBsYW46OkZ1bGxDb21waWxlLCBQbGFuOjpkb250RmluYWxpemUpKTsK
ICAgICAgICAgICAgIHBsYW4tPnNldE1vZGVBbmRQcm9taXNlKGluc3RhbmNlLT5tZW1vcnlNb2Rl
KCksIG51bGxwdHIpOwogICAgICAgICAgICAgaW5zdGFuY2UtPmFkZFVuaXRpYWxpemVkQ29kZUJs
b2NrKHZtLCBwbGFuLmNvcHlSZWYoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKaW5k
ZXggMzU5OTYyMmYyY2EyNDliMWUxZDgxMjBjYTM2M2FkNjE0ZTVhNmU3Ny4uM2JlMmMyM2NlZTZk
ODQ0ZWVhYjA3ZTQ5ODQzMTFmMTcwM2M5Y2IyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5j
cHAKQEAgLTc1LDEzICs3NSwxMyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0
b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYnVmZgogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJG
cm9tVmFsdWUodm0sIGV4ZWMsIGJ1ZmZlcik7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9
IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgUmVmUHRyPFdhc206OlBsYW4+IHBs
YW4gPSBhZG9wdFJlZihuZXcgV2FzbTo6UGxhbih2bSwgKnNvdXJjZSwgV2FzbTo6UGxhbjo6VmFs
aWRhdGlvbiwgV2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKSk7CisgICAgUmVmUHRyPFdhc206OlBs
YW4+IHBsYW4gPSBhZG9wdFJlZihuZXcgV2FzbTo6UGxhbih2bSwgV1RGTW92ZShzb3VyY2UpLCBX
YXNtOjpQbGFuOjpWYWxpZGF0aW9uLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUpKTsKICAgICBp
ZiAoIXBsYW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpjcmVhdGUo
ZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlDb21waWxl
RXJyb3JTdHJ1Y3R1cmUoKSwgcGxhbi0+ZXJyb3JNZXNzYWdlKCkpKTsKLSAgICByZXR1cm4gSlNX
ZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgc3RydWN0dXJlLCBXVEZNb3Zl
KHNvdXJjZSksIFdURk1vdmUocGxhbikpOworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxl
OjpjcmVhdGVTdHViKHZtLCBleGVjLCBzdHJ1Y3R1cmUsIFdURk1vdmUocGxhbikpOwogfQogCiBX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQ
cm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5jcHAKaW5kZXggY2Vh
OTdkYzczOTQ2YmQzNTMxOGJjMDIwNjA0Mzk2ZWYxYTI5OWY1ZS4uN2U4ZmEwMWRmZWI5NzQyY2My
ODdlNzBkYTBjNzcwNGE3NzZkODFiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmNwcApAQCAtNzMs
NyArNzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TW9kdWxl
UHJvdG9DdXN0b21TZWN0aW9ucyhFeGVjU3RhdGUqIGV4ZQogCiAgICAgY29uc3QgYXV0byYgY3Vz
dG9tU2VjdGlvbnMgPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuY3VzdG9tU2VjdGlvbnM7
CiAgICAgZm9yIChjb25zdCBXYXNtOjpDdXN0b21TZWN0aW9uJiBzZWN0aW9uIDogY3VzdG9tU2Vj
dGlvbnMpIHsKLSAgICAgICAgaWYgKHNlY3Rpb24ubmFtZSA9PSBzZWN0aW9uTmFtZVN0cmluZykg
eworICAgICAgICBpZiAoU3RyaW5nOjpmcm9tVVRGOChzZWN0aW9uLm5hbWUpID09IHNlY3Rpb25O
YW1lU3RyaW5nKSB7CiAgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlD
cmVhdGUoc2VjdGlvbi5wYXlsb2FkLmRhdGEoKSwgc2VjdGlvbi5wYXlsb2FkLnNpemUoKSk7CiAg
ICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5
RXJyb3IoZXhlYykpKTsKQEAgLTExMCw4ICsxMTAsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHdlYkFzc2VtYmx5TW9kdWxlUHJvdG9JbXBvcnRzKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICAgICAgZm9yIChjb25zdCBXYXNtOjpJbXBvcnQmIGltcCA6IGltcG9ydHMpIHsKICAgICAgICAg
ICAgIEpTT2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKLSAgICAgICAgICAgIG9i
ai0+cHV0RGlyZWN0KHZtLCBtb2R1bGUsIGpzU3RyaW5nKGV4ZWMsIGltcC5tb2R1bGUpKTsKLSAg
ICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBuYW1lLCBqc1N0cmluZyhleGVjLCBpbXAuZmll
bGQpKTsKKyAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBtb2R1bGUsIGpzU3RyaW5nKGV4
ZWMsIFN0cmluZzo6ZnJvbVVURjgoaW1wLm1vZHVsZSkpKTsKKyAgICAgICAgICAgIG9iai0+cHV0
RGlyZWN0KHZtLCBuYW1lLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KGltcC5maWVs
ZCkpKTsKICAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBraW5kLCBqc1N0cmluZyhleGVj
LCBTdHJpbmcobWFrZVN0cmluZyhpbXAua2luZCkpKSk7CiAgICAgICAgICAgICByZXN1bHQtPnB1
c2goZXhlYywgb2JqKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKQEAgLTE0MSw3ICsxNDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHdlYkFzc2VtYmx5TW9kdWxlUHJvdG9FeHBvcnRzKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAg
Zm9yIChjb25zdCBXYXNtOjpFeHBvcnQmIGV4cCA6IGV4cG9ydHMpIHsKICAgICAgICAgICAgIEpT
T2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKLSAgICAgICAgICAgIG9iai0+cHV0
RGlyZWN0KHZtLCBuYW1lLCBqc1N0cmluZyhleGVjLCBleHAuZmllbGQpKTsKKyAgICAgICAgICAg
IG9iai0+cHV0RGlyZWN0KHZtLCBuYW1lLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4
KGV4cC5maWVsZCkpKTsKICAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBraW5kLCBqc1N0
cmluZyhleGVjLCBTdHJpbmcobWFrZVN0cmluZyhleHAua2luZCkpKSk7CiAgICAgICAgICAgICBy
ZXN1bHQtPnB1c2goZXhlYywgb2JqKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCA5Mzg3ZTI1MjA5ZmM5NmFk
MTk0ZjQwNTNiNjIzNDA1ODViNGVmY2JhLi40YjUwNWIxZmNkZmE0NmE5OTgzMmIxNTgyZTllNDBh
MjI4YzAyNjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1
bGUuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZS5oIgotI2luY2x1ZGUgIldhc21Gb3JtYXQu
aCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5j
dGlvbi5oIgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTEyOSw3ICsxMjgsNyBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlLAogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21F
bnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBjb25zdCBX
YXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24q
IGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIGV4cC5maWVsZCwgaW5zdGFuY2UsIGpzRW50cnlw
b2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVu
Y3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCBTdHJpbmc6OmZyb21VVEY4KGV4cC5maWVsZCksIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxs
ZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAg
ICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuaAppbmRleCAyYjgzNzJlN2M3YzMzOTQ3OGU5YmU3NjUxNzdlYjg1
MjQxNmQ0N2U5Li5hMDhjY2JjYTljMDBiYTMzN2IyYzhmYjIxYjRhNWY1MzY5MGM3ZDQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
ICNpbmNsdWRlICJBYnN0cmFjdE1vZHVsZVJlY29yZC5oIgotI2luY2x1ZGUgIldhc21Gb3JtYXQu
aCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
UHJvdG90eXBlLmNwcAppbmRleCA3OWY0NmJmZGM3MjFjMjNkYjEwNWU1ZTMzMWYyNDQ3YjFmMWJl
MWZmLi4yZGFlNzdiZWJmM2I2ZjgwZDljYzE1NTBmN2ZlYThkNGQ4MzliZDc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUu
Y3BwCkBAIC04MywyMCArODMsMjAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgSlNQcm9taXNl
RGVmZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2Jh
bE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZt
LCBleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9
IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBWZWN0b3I8U3Ry
b25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9u
ZzxKU0NlbGw+KHZtLCBnbG9iYWxPYmplY3QpKTsKICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1l
ci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKIAot
ICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCAqc291cmNlLCBQbGFu
OjpWYWxpZGF0aW9uLCBbc291cmNlLCBwcm9taXNlLCBnbG9iYWxPYmplY3RdIChQbGFuJiBwKSBt
dXRhYmxlIHsKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgV1RG
TW92ZShzb3VyY2UpLCBQbGFuOjpWYWxpZGF0aW9uLCBbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0XSAo
UGxhbiYgcCkgbXV0YWJsZSB7CiAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbWFrZVJlZihw
KTsKLSAgICAgICAgcGxhbi0+dm0oKS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3Jr
U29vbihwcm9taXNlLCBbc291cmNlLCBwcm9taXNlLCBnbG9iYWxPYmplY3QsIHBsYW4gPSBXVEZN
b3ZlKHBsYW4pXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgcGxhbi0+dm0oKS5wcm9taXNlRGVmZXJy
ZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0
LCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBWTSYgdm0g
PSBwbGFuLT52bSgpOwogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOwogICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7Ci0gICAgICAgICAgICBKU1ZhbHVlIG1vZHVsZSA9IEpTV2ViQXNzZW1ibHlNb2R1
bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlNb2R1bGVT
dHJ1Y3R1cmUoKSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKHBsYW4pKTsKKyAgICAgICAgICAg
IEpTVmFsdWUgbW9kdWxlID0gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhl
YywgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHBs
YW4pKTsKICAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgewogICAgICAgICAgICAg
ICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTY3LDcgKzE2Nyw3IEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXCiAKICAgICAvLyBG
SVhNRTogVGhpcyByZS1wYXJzZXMgdGhlIG1vZHVsZSBoZWFkZXIsIHdoaWNoIHNob3VsZG4ndCBi
ZSBuZWNlc3NhcnkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDIwNQotICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZtLCBt
b2R1bGUtPnNvdXJjZSgpLCBQbGFuOjpGdWxsQ29tcGlsZSwgW3Byb21pc2UsIGluc3RhbmNlLCBt
b2R1bGUsIGVudHJpZXNdIChQbGFuJiBwKSB7CisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IFBsYW4odm0sIG1ha2VSZWYoY29uc3RfY2FzdDxXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
biY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBQbGFuOjpGdWxsQ29tcGlsZSwgW3By
b21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGVudHJpZXNdIChQbGFuJiBwKSB7CiAgICAgICAgIFJl
ZlB0cjxQbGFuPiBwbGFuID0gbWFrZVJlZihwKTsKICAgICAgICAgcGxhbi0+dm0oKS5wcm9taXNl
RGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW5zdGFu
Y2UsIG1vZHVsZSwgZW50cmllcywgcGxhbiA9IFdURk1vdmUocGxhbildICgpIHsKICAgICAgICAg
ICAgIFZNJiB2bSA9IHBsYW4tPnZtKCk7CkBAIC0xODQsNyArMTg0LDcgQEAgc3RhdGljIHZvaWQg
aW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlLCBKU1cKIHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVmFsdWUgYnVmZmVy
LCBKU09iamVjdCogaW1wb3J0T2JqZWN0KQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNv
dXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKKyAgICBWZWN0b3I8dWludDhf
dD4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBidWZmZXIp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBhdXRvKiBn
bG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0xOTMsMTMgKzE5
MywxMyBAQCBzdGF0aWMgdm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcgogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQo
U3Ryb25nPEpTQ2VsbD4odm0sIGltcG9ydE9iamVjdCkpOwogICAgIHZtLnByb21pc2VEZWZlcnJl
ZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlzZShwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykp
OwogCi0gICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0sICpzb3VyY2Us
IFBsYW46OlZhbGlkYXRpb24sIFtzb3VyY2UsIHByb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFs
T2JqZWN0XSAoUGxhbiYgcCkgbXV0YWJsZSB7CisgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IFBsYW4odm0sIFdURk1vdmUoc291cmNlKSwgUGxhbjo6VmFsaWRhdGlvbiwgW3Byb21p
c2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0XSAoUGxhbiYgcCkgbXV0YWJsZSB7CiAgICAg
ICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbWFrZVJlZihwKTsKLSAgICAgICAgcGxhbi0+dm0oKS5w
cm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbc291cmNlLCBw
cm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgcGxhbiA9IFdURk1vdmUocGxhbild
ICgpIG11dGFibGUgeworICAgICAgICBwbGFuLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5z
Y2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtwcm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9i
amVjdCwgcGxhbiA9IFdURk1vdmUocGxhbildICgpIG11dGFibGUgewogICAgICAgICAgICAgVk0m
IHZtID0gcGxhbi0+dm0oKTsKICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0g
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgZ2xvYmFsT2JqZWN0LT5X
ZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNvdXJjZSksIHBsYW4uY29weVJl
ZigpKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1i
bHlNb2R1bGVTdHJ1Y3R1cmUoKSwgcGxhbi5jb3B5UmVmKCkpOwogICAgICAgICAgICAgaWYgKHNj
b3BlLmV4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBw
cm9taXNlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApp
bmRleCBjYjQyMzJkNThiMmMyZTRmZjc0MDEwOWE1YzA4MTY2NGNjN2U1MmE3Li4zMGIzNzVlNTVl
ZGVkOTc4YmJiOTNmMjkwYzdmNmJkZjc1NGMzYmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgK
QEAgLTQzMyw2ICs0MzMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBmcm9tVVRGOChj
b25zdCBjaGFyKiBzLCBzaXplX3QgbGVuZ3RoKSB7IHJldHVybiBmcm9tVVRGOChyZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4ocyksIGxlbmd0aCk7IH07CiAgICAgc3RhdGljIFN0cmluZyBm
cm9tVVRGOChjb25zdCBjaGFyKiBzKSB7IHJldHVybiBmcm9tVVRGOChyZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4ocykpOyB9OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMg
U3RyaW5nIGZyb21VVEY4KGNvbnN0IENTdHJpbmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGZyb21V
VEY4KGNvbnN0IFZlY3RvcjxMQ2hhcj4mIGNoYXJhY3RlcnMpOwogCiAgICAgLy8gVHJpZXMgdG8g
Y29udmVydCB0aGUgcGFzc2VkIGluIHN0cmluZyB0byBVVEYtOCwgYnV0IHdpbGwgZmFsbCBiYWNr
IHRvIExhdGluLTEgaWYgdGhlIHN0cmluZyBpcyBub3QgdmFsaWQgVVRGLTguCiAgICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBTdHJpbmcgZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2so
Y29uc3QgTENoYXIqLCBzaXplX3QpOwpAQCAtNjk0LDYgKzY5NSwxMyBAQCBwcml2YXRlOgogLy8g
U2hhcmVkIGdsb2JhbCBlbXB0eSBzdHJpbmcuCiBXVEZfRVhQT1JUX1NUUklOR19BUEkgY29uc3Qg
U3RyaW5nJiBlbXB0eVN0cmluZygpOwogCitpbmxpbmUgU3RyaW5nIFN0cmluZzo6ZnJvbVVURjgo
Y29uc3QgVmVjdG9yPExDaGFyPiYgY2hhcmFjdGVycykKK3sKKyAgICBpZiAoY2hhcmFjdGVycy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIHJldHVybiBmcm9t
VVRGOChjaGFyYWN0ZXJzLmRhdGEoKSwgY2hhcmFjdGVycy5zaXplKCkpOworfQorCiB0ZW1wbGF0
ZTx1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylb
bGVuZ3RoXSkKIHsKICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aW5nLmltcGwoKSwgbG93ZXJjYXNlTGV0dGVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi91bmljb2RlL1VURjguY3BwIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4LmNwcAppbmRl
eCA1NDA3NDAxZTY3MThiOTU4OWU2YTExOWU2YmEwYWIzZWI1ZTg2Y2YzLi5jMGM4ZDhiN2RlM2I2
OTliZDBhOTI5NmNjZTE3YTNjMzM2ZTZkZGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91
bmljb2RlL1VURjguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOC5jcHAKQEAg
LTEyNiw4ICsxMjYsOCBAQCBpbnQgZGVjb2RlVVRGOFNlcXVlbmNlKGNvbnN0IGNoYXIqIHNlcXVl
bmNlKQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmlyc3RCeXRlTWFya1s3XSA9IHsgMHgw
MCwgMHgwMCwgMHhDMCwgMHhFMCwgMHhGMCwgMHhGOCwgMHhGQyB9OwogCiBDb252ZXJzaW9uUmVz
dWx0IGNvbnZlcnRMYXRpbjFUb1VURjgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTENoYXIqKiBzb3VyY2VTdGFydCwgY29uc3QgTENoYXIqIHNvdXJjZUVuZCwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcioqIHRhcmdldFN0YXJ0
LCBjaGFyKiB0YXJnZXRFbmQpCisgICAgY29uc3QgTENoYXIqKiBzb3VyY2VTdGFydCwgY29uc3Qg
TENoYXIqIHNvdXJjZUVuZCwgCisgICAgY2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRF
bmQpCiB7CiAgICAgQ29udmVyc2lvblJlc3VsdCByZXN1bHQgPSBjb252ZXJzaW9uT0s7CiAgICAg
Y29uc3QgTENoYXIqIHNvdXJjZSA9ICpzb3VyY2VTdGFydDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306231</attachid>
            <date>2017-04-04 17:02:17 -0700</date>
            <delta_ts>2017-04-04 17:55:58 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170478-20170404170216.patch</filename>
            <type>text/plain</type>
            <size>100988</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0ODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
ZjhkMTFhMDg3NzE1M2Y5NDYxYjIwOWRkNzgwMmRiNzYwNTNiOGIzLi4yODQ5ODVhYmYzNzAyNDU3
MmU0YTYyYzkzMzA5ODY0MDBmNGMxOWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDEgQEAKKzIwMTctMDQtMDQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IE1vZHVsZUluZm9ybWF0aW9uIHNob3VsZCBi
ZSBhIHJlZiBjb3VudGVkIHRoaW5nIHRoYXQgY2FuIGJlIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ3OAor
CisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgIE1vZHVsZUluZm9y
bWF0aW9uIGhhcyBiZWVuIG1vdmVkIHRvIGl0cyBvd24gZmlsZSBhbmQgaXMgbm93CisgICAgICAg
IFRocmVhZFNhZmVSZWZDb3VudGVkLiAgQWxsIHRoZSBTdHJpbmdzIHdlIHVzZWQgdG8ga2VlcCBp
biB0aGUKKyAgICAgICAgTW9kdWxlSW5mb3JtYXRpb24gaGF2ZSBiZWVuIHN3aXRjaGVkIHRvIFZl
Y3RvcjxMQ2hhcj4gdGhpcyBoYXMgdGhlCisgICAgICAgIGFkdmFudGFnZSB0aGF0IGl0IGNhbiBi
ZSBwYXNzZWQgYWNyb3NzIHRocmVhZHMuIEhvd2V2ZXIsIHRoaXMgZG9lcworICAgICAgICBtZWFu
IHRoYXQgd2UgbmVlZCB0byBkZWNvZGUgdGhlIHV0Zjggc3RyaW5ncyBpbiBlYWNoIHRocmVhZC4g
VGhpcworICAgICAgICBpcyBsaWtlbHkgbm90IGEgcHJvYmxlbSBiZWNhdXNlOgorCisgICAgICAg
IDEpIG1vc3QgbW9kdWxlcyBoYXZlIGZldyBpbXBvcnRzL2V4cG9ydHMvY3VzdG9tIHNlY3Rpb25z
LgorICAgICAgICAyKSBtb3N0IG9mIHRoZSB0aW1lIHRoZXkgYXJlIGFzY2lpIHNvIHRoZSBjb252
ZXJzaW9uIGlzIGNoZWFwLgorICAgICAgICAzKSB3ZSBvbmx5IGhhdmUgdG8gZG8gaXQgb25jZSBw
ZXIgdGhyZWFkLCBhbmQgdGhlcmUgc2hvdWxkbid0IGJlIHRvbyBtYW55LgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWxzbyByZW1vdmVzCisgICAgICAgIG1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1Vu
aXF1ZWRTaWduYXR1cmVJbmRpY2VzIHNpbmNlIHRoYXQKKyAgICAgICAgaW5mb3JtYXRpb24gY2Fu
IGFscmVhZHkgYmUgcmVjb3ZlcmVkIGZyb20gdGhlCisgICAgICAgIFNpZ25hdHVyZUluZm9ybWF0
aW9uLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1
bmN0aW9ucyk6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmg6CisgICAgICAgIChKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAq
IHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlSW5mb3JtYXRpb246On5Nb2R1bGVJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAgICAgIChKU0M6Oldhc206Om1ha2VTdHJpbmcpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6ZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpp
c0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjppbXBvcnRGdW5jdGlvbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb246OmludGVybmFsRnVuY3Rpb25Db3VudCk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKToKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRp
b246OmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbjo6aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRleEZyb21G
dW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bjo6aW1wb3J0RnVuY3Rpb25Db3VudCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjppbnRlcm5hbEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1
bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmg6CisgICAg
ICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6TW9kdWxlUGFyc2VyKToKKyAgICAgICAgKiB3
YXNtL1dhc21QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyPFN1Y2Nlc3NUeXBl
Pjo6Y29uc3VtZVVURjhTdHJpbmcpOgorICAgICAgICAqIHdhc20vV2FzbVBsYW4uY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnByZXBh
cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGxhbjo6Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFu
OjpjYW5jZWwpOgorICAgICAgICAqIHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6aW50ZXJuYWxGdW5jdGlvbkNvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxh
bjo6dGFrZU1vZHVsZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21TaWduYXR1cmUu
Y3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KToKKyAg
ICAgICAgKiB3YXNtL1dhc21TaWduYXR1cmUuaDoKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0
ZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnZhbGlkYXRlRnVuY3Rpb24pOgorICAgICAgICAq
IHdhc20vV2FzbVZhbGlkYXRlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVs
cGVycy5oOgorICAgICAgICAoSlNDOjpjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUpOgorICAg
ICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGVJ
bmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OnNvdXJjZSk6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorICAgICAgICAq
IHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZSk6CisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Ondl
YkFzc2VtYmx5TW9kdWxlUHJvdG9DdXN0b21TZWN0aW9ucyk6CisgICAgICAgIChKU0M6OndlYkFz
c2VtYmx5TW9kdWxlUHJvdG9JbXBvcnRzKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlNb2R1
bGVQcm90b0V4cG9ydHMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayk6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJs
eUNvbXBpbGVGdW5jKToKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUpOgorICAgICAgICAoSlND
Ojpjb21waWxlQW5kSW5zdGFudGlhdGUpOgorCiAyMDE3LTA0LTAzICBaYW4gRG9iZXJzZWsgIDx6
ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbanNjXSBBZGQgcGF0Y2hhYmxlSnVtcFNp
emUoKSBmb3IgTUlQUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwppbmRleCA2NDlkZGRjZmQ3MjhjN2JiNWU2MWNhYTczMmZmNzRlM2ZlNTdh
NDAxLi45ZDUwM2QyNTMzMjRmNDQzZjI4YmFhYjIwNTViNjRkODk1MjBiMGM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIwIEBACisyMDE3LTA0LTA0ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBNb2R1bGVJbmZvcm1hdGlvbiBzaG91bGQgYmUg
YSByZWYgY291bnRlZCB0aGluZyB0aGF0IGNhbiBiZSBzaGFyZWQgYWNyb3NzIHRocmVhZHMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NzgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBUaGlzIGFkZHMgYSBu
ZXcgU3RyaW5nOjpmcm9tVVRGOCB0aGF0IGNvbnZlcnRzIGEgdmVjdG9yIG9mIGNoYXJhY3RlcnMg
dG8KKyAgICAgICAgYSBzdHJpbmcuCisKKyAgICAgICAgQWxzbywgaXQgY2xlYW5zIHVwIHNvbWUg
c3R5bGUuCisKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKFdURjo6
U3RyaW5nOjpmcm9tVVRGOCk6CisgICAgICAgICogd3RmL3VuaWNvZGUvVVRGOC5jcHA6CisgICAg
ICAgIChXVEY6OlVuaWNvZGU6OmNvbnZlcnRMYXRpbjFUb1VURjgpOgorCiAyMDE3LTA0LTAxICBD
c2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFjIGNtYWtl
IGJ1aWxkZml4IGFmdGVyIDIxNDU4Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCBlZWRhNDI4ZjliMGU3YTdhZTk2ZDQyYmNjYjIyMzY5MWI1YWRlODUzLi5mYTVmNGM3MGJj
YTQ5NTQ3ZDEzNmZhNzk5OWJkNGE3N2U1MzY2ZDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CkBAIC05NDIsNiArOTQyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
ICAgICB3YXNtL1dhc21Gb3JtYXQuY3BwCiAgICAgd2FzbS9XYXNtTWVtb3J5LmNwcAogICAgIHdh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorICAgIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0
aW9uLmNwcAogICAgIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKICAgICB3YXNtL1dhc21QYWdl
Q291bnQuY3BwCiAgICAgd2FzbS9XYXNtUGxhbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggMTBiYTE3ZDllYzU2MDI5ZjEzNGE2NzA0NDM0YTM4OWI5NjM0ZDY2Yi4uZTk3OTY5
MzdjMjliYjNmYWQzMzFmOTFjODg2MDk0M2EzYjhkMzE4OSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTEzNjYsNiArMTM2Niw4IEBACiAJCTUzQzZGRUYxMUU4QUZFMEMwMEIxODQy
NSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzQzZGRUYwMUU4QUZFMEMwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3Jp
Z2luLmNwcCAqLzsgfTsKIAkJNTNENDQ0REMxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJl
c3NWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNENDQ0REIxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovOyB9Owog
CQk1M0Q0NDRERTFEQUYwOUEwMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRDQ0NEREMURBRjA5
QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwICovOyB9OworCQk1M0U3NzdFMzFF
OTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTc3N0UxMUU5MkUyNjUwMDdDQkVD
NCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwICovOyB9OworCQk1M0U3NzdFNDFFOTJFMjY1
MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U3NzdFMjFFOTJFMjY1MDA3Q0JFQzQgLyogV2Fz
bU1vZHVsZUluZm9ybWF0aW9uLmggKi87IH07CiAJCTUzRjQwRTg1MUQ1OEY5NzcwMDk5QTFCNiAv
KiBXYXNtU2VjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLzsgfTsK
IAkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEExRDU5MDFC
QjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU4RDFENTkw
MUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIu
aCAqLzsgfTsKQEAgLTM4NzQsNiArMzg3Niw4IEBACiAJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQy
NSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdhc21PcGNvZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0Q0NDREQjFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2FzbUFkZHJlc3NWYWx1ZS5oOyBwYXRoID0g
YjMvQjNXYXNtQWRkcmVzc1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
RDQ0NEREMURBRjA5QTAwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcDsgcGF0
aCA9IGIzL0IzV2FzbUFkZHJlc3NWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzRTc3N0UxMUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1vZHVsZUluZm9ybWF0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFNzc3RTIxRTkyRTI2NTAw
N0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtTW9kdWxlSW5mb3JtYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTNGMjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQw
RTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2FzbVNlY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUZ1bmN0aW9uUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzEwLDYgKzYzMTQsOCBAQAogCQkJCTUzNTU1NzEz
MUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmggKi8sCiAJCQkJNzlCNzU5NzExREZBNEM2
MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgKi8sCiAJCQkJNzlCNzU5NzIx
REZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5oICovLAorCQkJCTUzRTc3
N0UxMUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwICovLAorCQkJ
CTUzRTc3N0UyMUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCAqLywK
IAkJCQk1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgKi8s
CiAJCQkJNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCAqLywK
IAkJCQlBREI2RjY3QzFFMTVENzUwMDA4MkYzODQgLyogV2FzbVBhZ2VDb3VudC5jcHAgKi8sCkBA
IC04NDMyLDYgKzg0MzgsNyBAQAogCQkJCTBGRkZDOTVBMTRFRjkwQTkwMEM3MjUzMiAvKiBERkdD
U0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2IC8q
IERGR0RDRVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5QTE3MkYwNTAxMDA3REJE
QTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0U3NzdF
NDFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkZDOTIxNDFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJDMEY3Q0UxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFODUzNEMxNzIzQ0RBNTAw
QjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDI1
NSw2ICsxMDI2Miw3IEBACiAJCQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8qIERGR09TUkV4
aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzAyNUE5MTcxNEIwRkEwMDM4
MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYzOTJDODkxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUzRTc3N0UzMUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERG
R09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRUQx
NzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjYyMzc5NzFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA1NTIyZDgyMWY1
ZjBkYTMyNmYxYzZmYzU2YzM1YzY0ZWVhYzQ5OTdlLi5mNWY4Zjc2Mjg3OTQwZjAyYWMzNGM4NGQy
NjE3Mzg0NGE3ZWQ0NTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMzIxNCw3ICszMjE0LDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UZXN0V2FzbU1v
ZHVsZUZ1bmN0aW9ucyhFeGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBj
YWxsZWVJbmRleDsKICAgICAgICAgICAgIH0pOwogICAgIH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVsZUluZm9ybWF0aW9uID0gcGxhbi0+dGFrZU1v
ZHVsZUluZm9ybWF0aW9uKCk7CisgICAgUmVmPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtb2R1
bGVJbmZvcm1hdGlvbiA9IHBsYW4tPnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIFJFTEVB
U0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5KTsKIAogICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBmdW5jdGlvbkNvdW50OyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0lkZW50aWZpZXIuaAppbmRleCBhOTYzYjQzMzA2MTdjYTUzMmYyMWM0ODMyZWRm
NjgwODRhNDFiZTg3Li5iYzNkYmQ0ZDk0OTU2YzdjZDUxYzAwNTcwMDgyNzMwM2Y2YmIwYmI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCkBAIC0xMjIsNiAr
MTIyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoRXhlY1N0
YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0
cmluZyhFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgSWRlbnRpZmllciBm
cm9tU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIqKTsKKyAgICBzdGF0aWMgSWRlbnRpZmll
ciBmcm9tU3RyaW5nKFZNKiB2bSwgY29uc3QgVmVjdG9yPExDaGFyPiYgY2hhcmFjdGVycykgeyBy
ZXR1cm4gZnJvbVN0cmluZyh2bSwgY2hhcmFjdGVycy5kYXRhKCksIGNoYXJhY3RlcnMuc2l6ZSgp
KTsgfQogCiAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVVpZChWTSosIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOwogICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21VaWQoRXhlY1N0YXRlKiwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMDIwYWJkNThjODk0MmI0MWI0Y2M4MTYwMDIwNjgy
NGMxOWI1MmJjOC4uMDliM2E2MGU1MGY0NTQyZjBiMGMwYjNlOGIwZGQ1NTgzMWI4YmQ5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApA
QCAtMjA1LDcgKzIwNSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENhbGxzCiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29u
c3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2Fs
bEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYsIFNpZ25hdHVyZUluZGV4LCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKIAog
ICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBj
b25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0YWNrKTsKQEAgLTk2OCw5ICs5NjgsOCBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAogewotICAgIEFTU0VSVChzaWduYXR1cmVJbmRleCAhPSBTaWduYXR1cmU6OmludmFs
aWRJbmRleCk7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0
KCk7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkp
OwogCkBAIC0xMDE3LDcgKzEwMTYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgU2lnbmF0dXJlSW5kZXggcwogCiAgICAg
Ly8gQ2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIHRoZSB2YWx1ZSB3ZSBleHBlY3QuCiAgICAg
ewotICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNpZ25h
dHVyZUluZGV4KTsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWRTaWduYXR1cmVJbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpOwogICAgICAgICBDaGVj
a1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgb3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4oKSwgY2FsbGVlU2lnbmF0dXJlSW5k
ZXgsIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpKTsKIApAQCAtMTI2OSw3ICsxMjY4LDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PE9yaWdpbj4oT3Bjb2RlT3JpZ2luKG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFy
c2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSkpOwogfQogCi1FeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGls
ZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCog
ZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIGNvbnN0IFZlY3RvcjxTaWdu
YXR1cmVJbmRleD4mIG1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRp
Y2VzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIG9wdExldmVsKQorRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUo
Q29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1
bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVu
c2lnbmVkIG9wdExldmVsKQogewogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxX
YXNtSW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAtMTI4NCw3ICsxMjgzLDcgQEAgRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGUoQ29tcGlsYXQKICAgICB9KTsKIAogICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dChpbmZv
LCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUp
OwotICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0LCBmdW5j
dGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvLCBtb2R1bGVTaWduYXR1
cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcyk7CisgICAgRnVuY3Rpb25QYXJzZXI8
QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVu
Z3RoLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VyLnBhcnNlKCkpOwogCiAgICAgY29udGV4dC5pbnNlcnRDb25zdGFudHMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCmluZGV4IGMwOGI4ZDE5
NDRiMjEyZTQwN2U1YTZhMGNlMjNkMGJmODc2NmQyYjEuLjFlYzEwMWZlMzMxOTZjNTRiMWMwM2E5
ZTM0Mjc5OThkMjVmMmQyYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaApAQCAtMzAsOCArMzAsOCBAQAogI2luY2x1ZGUgIkIzQ29tbW9uLmgi
CiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgot
I2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVk
ZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAK
IGV4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKQEAgLTQ4LDcgKzQ4LDcgQEAg
c3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpzRW50
cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGls
YXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
LCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgb3B0
TGV2ZWwpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwg
U3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhf
dCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBvcHRM
ZXZlbCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZvcm1hdC5jcHAKaW5kZXggYjA0Nzg3NWIyYjliMjM0YjVhZGQzNGIxOTU4
MzYxMjQyMWI1OGUyYS4uZTI2MDYwMTlkYzExZDU5ZDE4NWY5NTQzYThlNzYzODQ5YjAzZDY3YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAKQEAgLTU1LDcgKzU1
LDEyIEBAIFNlZ21lbnQ6OlB0ciBTZWdtZW50OjphZG9wdFB0cihTZWdtZW50KiBzZWdtZW50KQog
ICAgIHJldHVybiBQdHIoc2VnbWVudCwgJlNlZ21lbnQ6OmRlc3Ryb3kpOwogfQogCi1KU19FWFBP
UlRfUFJJVkFURSBNb2R1bGVJbmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKCkgeyB9CitT
dHJpbmcgbWFrZVN0cmluZyhjb25zdCBWZWN0b3I8TENoYXI+JiBjaGFyYWN0ZXJzKQoreworICAg
IFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4KGNoYXJhY3RlcnMpOworICAgIEFTU0VS
VChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCBlODBk
ZDdhZTIwZDkyOTRlNGQ4MWNjZTgyZGMyNWFhMWMwZjRjYTNmLi42N2Y3MDU2NWMwMDAwYjM1Mjc1
YzlmODZkNDM0YTY0YmI3NTcyMTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50PihF
eHRlcm5hbEtpbmQ6OlRhYmxlKSAgICA9PSAxLCAiV2FzbSBuZWVkcyBUYWJsZSB0CiBzdGF0aWNf
YXNzZXJ0KHN0YXRpY19jYXN0PGludD4oRXh0ZXJuYWxLaW5kOjpNZW1vcnkpICAgPT0gMiwgIldh
c20gbmVlZHMgTWVtb3J5IHRvIGhhdmUgdGhlIHZhbHVlIDIiKTsKIHN0YXRpY19hc3NlcnQoc3Rh
dGljX2Nhc3Q8aW50PihFeHRlcm5hbEtpbmQ6Okdsb2JhbCkgICA9PSAzLCAiV2FzbSBuZWVkcyBH
bG9iYWwgdG8gaGF2ZSB0aGUgdmFsdWUgMyIpOwogCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIq
IG1ha2VTdHJpbmcoRXh0ZXJuYWxLaW5kIGtpbmQpCitpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0
cmluZyhFeHRlcm5hbEtpbmQga2luZCkKIHsKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNl
IEV4dGVybmFsS2luZDo6RnVuY3Rpb246IHJldHVybiAiZnVuY3Rpb24iOwpAQCAtMTAyLDE4ICsx
MDIsMjAgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKEV4dGVybmFsS2lu
ZCBraW5kKQogfQogCiBzdHJ1Y3QgSW1wb3J0IHsKLSAgICBTdHJpbmcgbW9kdWxlOwotICAgIFN0
cmluZyBmaWVsZDsKKyAgICBjb25zdCBWZWN0b3I8TENoYXI+IG1vZHVsZTsKKyAgICBjb25zdCBW
ZWN0b3I8TENoYXI+IGZpZWxkOwogICAgIEV4dGVybmFsS2luZCBraW5kOwogICAgIHVuc2lnbmVk
IGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29ycmVzcG9uZGluZyBr
aW5kLgogfTsKIAogc3RydWN0IEV4cG9ydCB7Ci0gICAgU3RyaW5nIGZpZWxkOworICAgIGNvbnN0
IFZlY3RvcjxMQ2hhcj4gZmllbGQ7CiAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7CiAgICAgdW5zaWdu
ZWQga2luZEluZGV4OyAvLyBJbmRleCBpbiB0aGUgdmVjdG9yIG9mIHRoZSBjb3JyZXNwb25kaW5n
IGtpbmQuCiB9OwogCitTdHJpbmcgbWFrZVN0cmluZyhjb25zdCBWZWN0b3I8TENoYXI+JiBjaGFy
YWN0ZXJzKTsKKwogc3RydWN0IEdsb2JhbCB7CiAgICAgZW51bSBNdXRhYmlsaXR5IDogdWludDhf
dCB7CiAgICAgICAgIC8vIEZJWE1FIGF1dG8tZ2VuZXJhdGUgdGhpcy4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTIzMQpAQCAtMjI2LDQ2ICsyMjgsMTAgQEAgcHJp
dmF0ZToKIH07CiAgICAgCiBzdHJ1Y3QgQ3VzdG9tU2VjdGlvbiB7Ci0gICAgU3RyaW5nIG5hbWU7
CisgICAgVmVjdG9yPExDaGFyPiBuYW1lOwogICAgIFZlY3Rvcjx1aW50OF90PiBwYXlsb2FkOwog
fTsKIAotc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKLSAgICBWZWN0b3I8SW1wb3J0PiBpbXBv
cnRzOwotICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzOwotICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxGdW5jdGlvblNpZ25h
dHVyZUluZGljZXM7Ci0gICAgVmVjdG9yPFJlZjxTaWduYXR1cmU+PiB1c2VkU2lnbmF0dXJlczsK
LQotICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKLQotICAgIFZlY3RvcjxFeHBvcnQ+IGV4
cG9ydHM7Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gc3RhcnRGdW5jdGlvbkluZGV4U3Bh
Y2U7Ci0gICAgVmVjdG9yPFNlZ21lbnQ6OlB0cj4gZGF0YTsKLSAgICBWZWN0b3I8RWxlbWVudD4g
ZWxlbWVudHM7Ci0gICAgVGFibGVJbmZvcm1hdGlvbiB0YWJsZUluZm9ybWF0aW9uOwotICAgIFZl
Y3RvcjxHbG9iYWw+IGdsb2JhbHM7Ci0gICAgdW5zaWduZWQgZmlyc3RJbnRlcm5hbEdsb2JhbCB7
IDAgfTsKLSAgICBWZWN0b3I8Q3VzdG9tU2VjdGlvbj4gY3VzdG9tU2VjdGlvbnM7Ci0KLSAgICBz
aXplX3QgZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkgKyBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlcy5zaXplKCk7IH0KLSAgICBib29sIGlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbklu
ZGV4U3BhY2Uoc2l6ZV90IGZ1bmN0aW9uSW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoZnVuY3Rpb25JbmRleCA8IGZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgICAgIHJl
dHVybiBmdW5jdGlvbkluZGV4IDwgaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUo
KTsKLSAgICB9Ci0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKHNpemVfdCBmdW5jdGlvbkluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIGlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRl
eCkKLSAgICAgICAgICAgID8gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9u
SW5kZXhdCi0gICAgICAgICAgICA6IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1
bmN0aW9uSW5kZXggLSBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpXTsKLSAg
ICB9Ci0KLSAgICB1aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4g
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQotICAgIHVpbnQzMl90IGlu
dGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzLnNpemUoKTsgfQotCi0gICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7Ci19Owot
CiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbCB7CiAgICAgQ29kZUxvY2F0aW9uQ2FsbCBj
YWxsTG9jYXRpb247CiAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXg7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmluZGV4IDA3ZjUzYWJiNzY3NDQ2
MTgwYTBhYzFkYTVhYWFkYWFhYjA1OTIzZjAuLjFmYTAwNTg1NjA0NGU2YmY0NTg1NGQwYzU2ZjRi
ZWVlZDVlZTk4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvblBhcnNlci5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHR5cGVu
YW1lIENvbnRleHQ6OkNvbnRyb2xUeXBlIENvbnRyb2xUeXBlOwogICAgIHR5cGVkZWYgdHlwZW5h
bWUgQ29udGV4dDo6RXhwcmVzc2lvbkxpc3QgRXhwcmVzc2lvbkxpc3Q7CiAKLSAgICBGdW5jdGlv
blBhcnNlcihDb250ZXh0JiwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1
bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mKTsKKyAgICBGdW5jdGlvblBhcnNlcihDb250
ZXh0JiwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3Ro
LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYpOwogCiAgICAgUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOwogCkBAIC04Niw3ICs4Niw2IEBAIHByaXZh
dGU6CiAgICAgVmVjdG9yPENvbnRyb2xFbnRyeT4gbV9jb250cm9sU3RhY2s7CiAgICAgY29uc3Qg
U2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9p
bmZvOwotICAgIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1fbW9kdWxlU2lnbmF0dXJl
SW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXM7CiAKICAgICBPcFR5cGUgbV9jdXJyZW50
T3Bjb2RlOwogICAgIHNpemVfdCBtX2N1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCB7IDAgfTsK
QEAgLTk1LDEyICs5NCwxMSBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29u
dGV4dD4KLUZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBj
b250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5n
dGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNl
c1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpCitGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVu
Y3Rpb25QYXJzZXIoQ29udGV4dCYgY29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFy
dCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiAgICAgOiBQYXJzZXIoZnVuY3Rpb25TdGFydCwg
ZnVuY3Rpb25MZW5ndGgpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2lnbmF0
dXJlKHNpZ25hdHVyZSkKICAgICAsIG1faW5mbyhpbmZvKQotICAgICwgbV9tb2R1bGVTaWduYXR1
cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcyhtb2R1bGVTaWduYXR1cmVJbmRpY2Vz
VG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcykKIHsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ZGF0YUxvZ0xuKCJQYXJzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCAodWludHB0cl90KWZ1
bmN0aW9uU3RhcnQsICIgb2YgbGVuZ3RoOiAiLCBmdW5jdGlvbkxlbmd0aCk7CkBAIC0zNTAsMTAg
KzM0OCw5IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoc2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0IGNhbGxfaW5kaXJlY3QncyBzaWduYXR1
cmUgaW5kZXgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShy
ZXNlcnZlZCksICJjYW4ndCBnZXQgY2FsbF9pbmRpcmVjdCdzIHJlc2VydmVkIGJ5dGUiKTsKICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihyZXNlcnZlZCwgImNhbGxfaW5kaXJlY3QncyAncmVz
ZXJ2ZWQnIHZhcnVpbnQxIG11c3QgYmUgMHgwIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYobV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcy5zaXpl
KCkgPD0gc2lnbmF0dXJlSW5kZXgsICJjYWxsX2luZGlyZWN0J3Mgc2lnbmF0dXJlIGluZGV4ICIs
IHNpZ25hdHVyZUluZGV4LCAiIGV4Y2VlZHMga25vd24gc2lnbmF0dXJlcyAiLCBtX21vZHVsZVNp
Z25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLnNpemUoKSk7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLnVzZWRTaWduYXR1cmVzLnNpemUoKSA8PSBzaWdu
YXR1cmVJbmRleCwgImNhbGxfaW5kaXJlY3QncyBzaWduYXR1cmUgaW5kZXggIiwgc2lnbmF0dXJl
SW5kZXgsICIgZXhjZWVkcyBrbm93biBzaWduYXR1cmVzICIsIG1faW5mby51c2VkU2lnbmF0dXJl
cy5zaXplKCkpOwogCi0gICAgICAgIFNpZ25hdHVyZUluZGV4IGNhbGxlZVNpZ25hdHVyZUluZGV4
ID0gbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlc1tzaWdu
YXR1cmVJbmRleF07Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgY2FsbGVlU2lnbmF0dXJlID0g
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAg
IGNvbnN0IFNpZ25hdHVyZSYgY2FsbGVlU2lnbmF0dXJlID0gbV9pbmZvLnVzZWRTaWduYXR1cmVz
W3NpZ25hdHVyZUluZGV4XS5nZXQoKTsKICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBj
YWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpICsgMTsgLy8gQWRkIHRoZSBjYWxsZWUncyBp
bmRleC4KICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVudENvdW50ID4gbV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbF9pbmRpcmVjdCBleHBlY3RzICIsIGFyZ3VtZW50Q291
bnQsICIgYXJndW1lbnRzLCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRz
ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKIApAQCAtMzY1LDcgKzM2
Miw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+
IFBhcnRpYWxSZXN1bHQKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJn
dW1lbnRJbmRleCk7CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gQ29udGV4dDo6
ZW1wdHlFeHByZXNzaW9uOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxs
SW5kaXJlY3QoY2FsbGVlU2lnbmF0dXJlLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgYXJncywgcmVz
dWx0KSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGxJbmRpcmVjdChj
YWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOwogCiAgICAgICAgIGlmIChyZXN1bHQgIT0g
Q29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQogICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2su
YXBwZW5kKHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZUluZm9ybWF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTZhYmRkMjA4NjI5Yzc5MGFmZDBh
MzIwNTFmNDE2NWZhM2ZhMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcApAQCAtMCwwICsxLDM3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitNb2R1bGVJ
bmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKCkgeyB9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE3NjMzOWE3ZGNiNTBlMzY4Y2NkMjAzMGVkMmNiNDFlNWVjNTU1NmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaApA
QCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRl
ICJXYXNtRm9ybWF0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0
cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1
bGVJbmZvcm1hdGlvbj4geworICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3BhY2VTaXplKCkgY29u
c3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSArIGludGVy
bmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQorICAgIGJvb2wgaXNJbXBvcnRl
ZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzaXplX3QgZnVuY3Rpb25JbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbkluZGV4IDwgZnVuY3Rpb25JbmRleFNw
YWNlU2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uSW5kZXggPCBpbXBvcnRGdW5jdGlv
blNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOworICAgIH0KKyAgICBTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc2l6ZV90IGZ1bmN0aW9uSW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KQorICAgICAgICAgICAgPyBpbXBvcnRGdW5jdGlvblNp
Z25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF0KKyAgICAgICAgICAgIDogaW50ZXJuYWxGdW5j
dGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleCAtIGltcG9ydEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCldOworICAgIH0KKworICAgIHVpbnQzMl90IGltcG9ydEZ1bmN0aW9u
Q291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6
ZSgpOyB9CisgICAgdWludDMyX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1
cm4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CisKKyAgICBNb2R1
bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcykKKyAgICAgICAgOiBz
b3VyY2UoV1RGTW92ZShzb3VyY2VCeXRlcykpCisgICAgeworICAgIH0KKworICAgIEpTX0VYUE9S
VF9QUklWQVRFIH5Nb2R1bGVJbmZvcm1hdGlvbigpOworCisgICAgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+IHNvdXJjZTsKKworICAgIFZlY3RvcjxJbXBvcnQ+IGltcG9ydHM7CisgICAgVmVjdG9yPFNp
Z25hdHVyZUluZGV4PiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CisgICAgVmVjdG9y
PFNpZ25hdHVyZUluZGV4PiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKKyAgICBW
ZWN0b3I8UmVmPFNpZ25hdHVyZT4+IHVzZWRTaWduYXR1cmVzOworCisgICAgTWVtb3J5SW5mb3Jt
YXRpb24gbWVtb3J5OworCisgICAgVmVjdG9yPEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeT4gZnVu
Y3Rpb25Mb2NhdGlvbkluQmluYXJ5OworCisgICAgVmVjdG9yPEV4cG9ydD4gZXhwb3J0czsKKyAg
ICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZTsKKyAgICBW
ZWN0b3I8U2VnbWVudDo6UHRyPiBkYXRhOworICAgIFZlY3RvcjxFbGVtZW50PiBlbGVtZW50czsK
KyAgICBUYWJsZUluZm9ybWF0aW9uIHRhYmxlSW5mb3JtYXRpb247CisgICAgVmVjdG9yPEdsb2Jh
bD4gZ2xvYmFsczsKKyAgICB1bnNpZ25lZCBmaXJzdEludGVybmFsR2xvYmFsIHsgMCB9OworICAg
IFZlY3RvcjxDdXN0b21TZWN0aW9uPiBjdXN0b21TZWN0aW9uczsKKworfTsKKworICAgIAorfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKaW5k
ZXggMjIzOTEyMjk0ZjllZmQ5MjRiYjQzOTliOGI5YmU0NTdlYmNmN2Y1MC4uZWU3MTRjMWE4ZjBh
OTM1MTZlZjA3ZTExNGJhMTJjZDliMzFmNWExOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTQ5LDcgKzQ5LDYgQEAgQUxXQVlTX0lO
TElORSBJMzJJbml0RXhwciBtYWtlSTMySW5pdEV4cHIodWludDhfdCBvcGNvZGUsIHVpbnQzMl90
IGJpdHMpCiAKIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogewotICAgIG1f
cmVzdWx0Lm1vZHVsZSA9IHN0ZDo6bWFrZV91bmlxdWU8TW9kdWxlSW5mb3JtYXRpb24+KCk7CiAg
ICAgY29uc3Qgc2l6ZV90IG1pblNpemUgPSA4OwogICAgIHVpbnQzMl90IHZlcnNpb25OdW1iZXI7
CiAKQEAgLTk4LDcgKzk3LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0
CiAgICAgICAgIHByZXZpb3VzU2VjdGlvbiA9IHNlY3Rpb247CiAgICAgfQogCi0gICAgcmV0dXJu
IFdURk1vdmUobV9yZXN1bHQpOworICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gTW9kdWxlUGFy
c2VyOjpwYXJzZVR5cGUoKSAtPiBQYXJ0aWFsUmVzdWx0CkBAIC0xMDcsOCArMTA2LDcgQEAgYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNl
Y3Rpb24ncyBjb3VudCIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiVHlwZSBzZWN0aW9uJ3MgY291bnQgaXMg
dG9vIGJpZyAiLCBjb3VudCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9k
dWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2Vj
dGlvbidzICIsIGNvdW50LCAiIGVudHJpZXMiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X3Jlc3VsdC5tb2R1bGUtPnVzZWRTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCks
ICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBjb3Vu
dCwgIiBlbnRyaWVzIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2ln
bmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOwogCiAgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgaW50OF90IHR5
cGU7CkBAIC0xNDEsOCArMTM5LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpIC0+
IFBhcnRpYWxSZXN1bHQKICAgICAgICAgc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPSByZXR1cm5U
eXBlOwogCiAgICAgICAgIHN0ZDo6cGFpcjxTaWduYXR1cmVJbmRleCwgUmVmPFNpZ25hdHVyZT4+
IHJlc3VsdCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChXVEZNb3ZlKHNpZ25hdHVyZSkp
OwotICAgICAgICBtX3Jlc3VsdC5tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0
dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQocmVzdWx0LmZpcnN0KTsKLSAgICAgICAgbV9yZXN1
bHQubW9kdWxlLT51c2VkU2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShyZXN1bHQu
c2Vjb25kKSk7CisgICAgICAgIG1faW5mby0+dXNlZFNpZ25hdHVyZXMudW5jaGVja2VkQXBwZW5k
KFdURk1vdmUocmVzdWx0LnNlY29uZCkpOwogICAgIH0KICAgICByZXR1cm4geyB9OwogfQpAQCAt
MTUyLDM0ICsxNDksMzMgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFy
dGlhbFJlc3VsdAogICAgIHVpbnQzMl90IGltcG9ydENvdW50OwogICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2Vj
dGlvbidzIGNvdW50Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJJbXBvcnQgc2VjdGlvbidzIGNv
dW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFscy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQp
LCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgZ2xv
YmFscyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhN
RXMgYmVsb3cuCi0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5pbXBv
cnRzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnRzIik7IC8vIEZJWE1FIHRoaXMg
b3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KLSAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5v
dWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGZ1bmN0aW9uIHNpZ25hdHVy
ZXMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVz
IGJlbG93LgorICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+Z2xvYmFscy50cnlSZXNl
cnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBm
b3IgIiwgaW1wb3J0Q291bnQsICIgZ2xvYmFscyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2Nh
dGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighbV9pbmZvLT5pbXBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4n
dCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnRzIik7
IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxv
dy4KKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmltcG9ydEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2Nh
dGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGZ1bmN0aW9uIHNp
Z25hdHVyZXMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUg
RklYTUVzIGJlbG93LgogCiAgICAgZm9yICh1aW50MzJfdCBpbXBvcnROdW1iZXIgPSAwOyBpbXBv
cnROdW1iZXIgPCBpbXBvcnRDb3VudDsgKytpbXBvcnROdW1iZXIpIHsKLSAgICAgICAgSW1wb3J0
IGltcDsKICAgICAgICAgdWludDMyX3QgbW9kdWxlTGVuOwogICAgICAgICB1aW50MzJfdCBmaWVs
ZExlbjsKLSAgICAgICAgU3RyaW5nIG1vZHVsZVN0cmluZzsKLSAgICAgICAgU3RyaW5nIGZpZWxk
U3RyaW5nOworICAgICAgICBWZWN0b3I8TENoYXI+IG1vZHVsZVN0cmluZzsKKyAgICAgICAgVmVj
dG9yPExDaGFyPiBmaWVsZFN0cmluZzsKKyAgICAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7CisgICAg
ICAgIHVuc2lnbmVkIGtpbmRJbmRleCB7IDAgfTsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihtb2R1bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJl
ciwgInRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIGxlbmd0aCIpOwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhtb2R1bGVTdHJpbmcsIG1vZHVsZUxlbiksICJj
YW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgb2YgbGVu
Z3RoICIsIG1vZHVsZUxlbik7Ci0gICAgICAgIGltcC5tb2R1bGUgPSBtb2R1bGVTdHJpbmc7CiAK
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZmllbGRMZW4pLCAi
Y2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3Ro
IGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOwogICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pLCAiY2FuJ3Qg
Z2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIs
IG1vZHVsZUxlbiwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIiciKTsKLSAgICAgICAg
aW1wLmZpZWxkID0gZmllbGRTdHJpbmc7CiAKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VFeHRlcm5hbEtpbmQoaW1wLmtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwg
InRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICci
LCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgc3dpdGNoIChpbXAua2luZCkgeworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNhbid0IGdl
dCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBraW5kIGluIG1vZHVsZSAnIiwgbW9kdWxl
U3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgIHN3aXRjaCAo
a2luZCkgewogICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKICAgICAgICAg
ICAgIHVpbnQzMl90IGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXg7CiAgICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpZ25hdHVyZUluZGV4KSwgImNh
bid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBmdW5jdGlvbiBzaWduYXR1cmUg
aW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIici
KTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaWduYXR1cmVJbmRl
eCA+PSBtX3Jlc3VsdC5tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5k
aWNlcy5zaXplKCksICJpbnZhbGlkIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgIiwgaW1wb3J0TnVt
YmVyLCAidGggSW1wb3J0LCAiLCBmdW5jdGlvblNpZ25hdHVyZUluZGV4LCAiIGlzIG91dCBvZiBy
YW5nZSBvZiAiLCBtX3Jlc3VsdC5tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxk
ICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGltcC5raW5kSW5kZXggPSBtX3Jl
c3VsdC5tb2R1bGUtPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7Ci0gICAg
ICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fcmVzdWx0Lm1vZHVsZVNp
Z25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uU2lnbmF0dXJl
SW5kZXhdOwotICAgICAgICAgICAgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRGdW5jdGlvblNpZ25h
dHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaWduYXR1cmVJbmRleCA+PSBtX2luZm8tPnVz
ZWRTaWduYXR1cmVzLnNpemUoKSwgImludmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciAiLCBp
bXBvcnROdW1iZXIsICJ0aCBJbXBvcnQsICIsIGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMg
b3V0IG9mIHJhbmdlIG9mICIsIG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiIGluIG1v
ZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7Cisg
ICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlcy5zaXplKCk7CisgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1tmdW5jdGlv
blNpZ25hdHVyZUluZGV4XSk7CisgICAgICAgICAgICBtX2luZm8tPmltcG9ydEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7
CkBAIC0yMDEsMTYgKzE5NywxNiBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBh
cnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
Z2xvYmFsLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpNdXRhYmxlLCAiTXV0YWJsZSBHbG9iYWxzIGFy
ZW4ndCBzdXBwb3J0ZWQiKTsKIAotICAgICAgICAgICAgaW1wLmtpbmRJbmRleCA9IG1fcmVzdWx0
Lm1vZHVsZS0+Z2xvYmFscy5zaXplKCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmds
b2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7CisgICAgICAgICAgICBraW5k
SW5kZXggPSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpOworICAgICAgICAgICAgbV9pbmZvLT5nbG9i
YWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0
cy51bmNoZWNrZWRBcHBlbmQoaW1wKTsKKyAgICAgICAgbV9pbmZvLT5pbXBvcnRzLnVuY2hlY2tl
ZEFwcGVuZCh7IFdURk1vdmUobW9kdWxlU3RyaW5nKSwgV1RGTW92ZShmaWVsZFN0cmluZyksIGtp
bmQsIGtpbmRJbmRleCB9KTsKICAgICB9CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50
ZXJuYWxHbG9iYWwgPSBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpOworICAgIG1faW5m
by0+Zmlyc3RJbnRlcm5hbEdsb2JhbCA9IG1faW5mby0+Z2xvYmFscy5zaXplKCk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIApAQCAtMjE5LDIwICsyMTUsMjAgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBh
cnNlRnVuY3Rpb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgdWludDMyX3QgY291bnQ7CiAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IEZ1
bmN0aW9uIHNlY3Rpb24ncyBjb3VudCIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQg
PT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRnVuY3Rpb24gc2VjdGlv
bidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1fcmVzdWx0Lm1vZHVsZS0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGNvdW50LCAiIEZ1bmN0aW9uIHNpZ25hdHVyZXMiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFtX3Jlc3VsdC5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNv
dW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGNvdW50LCAiRnVuY3Rp
b24gbG9jYXRpb25zIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbnRlcm5h
bEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2Fu
J3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICIgRnVuY3Rpb24gc2lnbmF0
dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5LnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIpOwogCiAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgdHlw
ZU51bWJlcjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodHlw
ZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlwZSBudW1iZXIiKTsK
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1fcmVzdWx0Lm1vZHVs
ZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLnNpemUoKSwgaSwgInRo
IEZ1bmN0aW9uIHR5cGUgbnVtYmVyIGlzIGludmFsaWQgIiwgdHlwZU51bWJlcik7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZU51bWJlciA+PSBtX2luZm8tPnVzZWRTaWduYXR1cmVz
LnNpemUoKSwgaSwgInRoIEZ1bmN0aW9uIHR5cGUgbnVtYmVyIGlzIGludmFsaWQgIiwgdHlwZU51
bWJlcik7CiAKLSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX3Jlc3Vs
dC5tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlc1t0eXBlTnVt
YmVyXTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNlZFNpZ25hdHVyZXNbdHlwZU51bWJlcl0pOwogICAg
ICAgICAvLyBUaGUgQ29kZSBzZWN0aW9uIGZpeGVzIHVwIHN0YXJ0IGFuZCBlbmQuCiAgICAgICAg
IHNpemVfdCBzdGFydCA9IDA7CiAgICAgICAgIHNpemVfdCBlbmQgPSAwOwotICAgICAgICBtX3Jl
c3VsdC5tb2R1bGUtPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFw
cGVuZChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgIG1fcmVzdWx0LmZ1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeS51bmNoZWNrZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0pOworICAgICAgICBtX2luZm8t
PmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1
cmVJbmRleCk7CisgICAgICAgIG1faW5mby0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnVuY2hl
Y2tlZEFwcGVuZCh7IHN0YXJ0LCBlbmQgfSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHsgfTsKQEAg
LTI3NSw3ICsyNzEsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29s
IGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1h
eGltdW0gPj0gaW5pdGlhbCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPnRhYmxlSW5mb3JtYXRp
b24gPSBUYWJsZUluZm9ybWF0aW9uKGluaXRpYWwsIG1heGltdW0sIGlzSW1wb3J0KTsKKyAgICBt
X2luZm8tPnRhYmxlSW5mb3JtYXRpb24gPSBUYWJsZUluZm9ybWF0aW9uKGluaXRpYWwsIG1heGlt
dW0sIGlzSW1wb3J0KTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0yOTYsNyArMjkyLDcgQEAg
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8g
TW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFs
UmVzdWx0CiB7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighIW1fcmVzdWx0Lm1vZHVsZS0+bWVt
b3J5LCAiTWVtb3J5IHNlY3Rpb24gY2Fubm90IGV4aXN0IGlmIGFuIEltcG9ydCBoYXMgYSBtZW1v
cnkiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCEhbV9pbmZvLT5tZW1vcnksICJNZW1vcnkg
c2VjdGlvbiBjYW5ub3QgZXhpc3QgaWYgYW4gSW1wb3J0IGhhcyBhIG1lbW9yeSIpOwogCiAgICAg
UGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7CiAgICAgUGFnZUNvdW50IG1heGltdW1QYWdlQ291
bnQ7CkBAIC0zMTksNyArMzE1LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVs
cGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBBU1NFUlQoaW5pdGlhbFBh
Z2VDb3VudCk7CiAgICAgQVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291
bnQgPj0gaW5pdGlhbFBhZ2VDb3VudCk7CiAKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSA9
IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlz
SW1wb3J0KTsKKyAgICBtX2luZm8tPm1lbW9yeSA9IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQ
YWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKICAgICByZXR1cm4geyB9Owog
fQogCkBAIC0zNDEsNyArMzM3LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIHVpbnQzMl90IGdsb2JhbENvdW50OwogICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGdsb2JhbENvdW50KSwgImNhbid0IGdldCBH
bG9iYWwgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1
bHQubW9kdWxlLT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0eShnbG9iYWxDb3VudCArIG1fcmVz
dWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkg
Zm9yICIsIGdsb2JhbENvdW50ICsgbV9yZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFs
LCAiIGdsb2JhbHMiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGdsb2JhbENvdW50ICsgbV9pbmZvLT5maXJzdEludGVybmFsR2xv
YmFsKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgZ2xvYmFsQ291bnQgKyBtX2luZm8t
PmZpcnN0SW50ZXJuYWxHbG9iYWwsICIgZ2xvYmFscyIpOwogCiAgICAgZm9yICh1aW50MzJfdCBn
bG9iYWxJbmRleCA9IDA7IGdsb2JhbEluZGV4IDwgZ2xvYmFsQ291bnQ7ICsrZ2xvYmFsSW5kZXgp
IHsKICAgICAgICAgR2xvYmFsIGdsb2JhbDsKQEAgLTM1Niw3ICszNTIsNyBAQCBhdXRvIE1vZHVs
ZVBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICBnbG9i
YWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlRm9ySW5pdE9wY29kZSAhPSBnbG9iYWwudHlwZSwgIkds
b2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9mIHR5cGUgIiwgdHlwZUZvckluaXRPcGNvZGUsICIgZG9l
c24ndCBtYXRjaCBnbG9iYWwncyB0eXBlICIsIGdsb2JhbC50eXBlKTsKIAotICAgICAgICBtX3Jl
c3VsdC5tb2R1bGUtPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7Cisg
ICAgICAgIG1faW5mby0+Z2xvYmFscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsK
ICAgICB9CiAKICAgICByZXR1cm4geyB9OwpAQCAtMzY3LDQ1ICszNjMsNDYgQEAgYXV0byBNb2R1
bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgIHVpbnQzMl90IGV4
cG9ydENvdW50OwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4cG9y
dENvdW50KSwgImNhbid0IGdldCBFeHBvcnQgc2VjdGlvbidzIGNvdW50Iik7CiAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihleHBvcnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksICJFeHBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZXhwb3J0Q291
bnQpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+ZXhwb3J0cy50
cnlSZXNlcnZlQ2FwYWNpdHkoZXhwb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgIiwgZXhwb3J0Q291bnQsICIgZXhwb3J0cyIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIW1faW5mby0+ZXhwb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhwb3J0Q291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgZXhwb3J0Q291bnQsICIgZXhwb3J0
cyIpOwogCiAgICAgSGFzaFNldDxTdHJpbmc+IGV4cG9ydE5hbWVzOwogICAgIGZvciAodWludDMy
X3QgZXhwb3J0TnVtYmVyID0gMDsgZXhwb3J0TnVtYmVyIDwgZXhwb3J0Q291bnQ7ICsrZXhwb3J0
TnVtYmVyKSB7Ci0gICAgICAgIEV4cG9ydCBleHA7CiAgICAgICAgIHVpbnQzMl90IGZpZWxkTGVu
OwotICAgICAgICBTdHJpbmcgZmllbGRTdHJpbmc7CisgICAgICAgIFZlY3RvcjxMQ2hhcj4gZmll
bGRTdHJpbmc7CisgICAgICAgIEV4dGVybmFsS2luZCBraW5kOworICAgICAgICB1bnNpZ25lZCBr
aW5kSW5kZXg7CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
ZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGZpZWxk
IG5hbWUgbGVuZ3RoIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4
U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVy
LCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgZmllbGRMZW4pOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4cG9ydE5hbWVzLmNvbnRhaW5zKGZpZWxkU3RyaW5nKSwg
ImR1cGxpY2F0ZSBleHBvcnQ6ICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgZXhwb3J0
TmFtZXMuYWRkKGZpZWxkU3RyaW5nKTsKLSAgICAgICAgZXhwLmZpZWxkID0gZmllbGRTdHJpbmc7
CisgICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KGZpZWxkU3RyaW5n
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnROYW1lcy5jb250YWlucyhmaWVs
ZE5hbWUpLCAiZHVwbGljYXRlIGV4cG9ydDogJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAg
ICBleHBvcnROYW1lcy5hZGQoZmllbGROYW1lKTsKIAotICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZUV4dGVybmFsS2luZChleHAua2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVt
YmVyLCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHAua2luZEluZGV4KSwg
ImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kIGluZGV4LCBuYW1l
ZCAnIiwgZmllbGRTdHJpbmcsICInIik7Ci0gICAgICAgIHN3aXRjaCAoZXhwLmtpbmQpIHsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoa2luZCksICJjYW4n
dCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxk
U3RyaW5nLCAiJyIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihraW5kSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtp
bmQgaW5kZXgsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNoIChr
aW5kKSB7CiAgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogewotICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHAua2luZEluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+
ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGlu
dmFsaWQgZnVuY3Rpb24gbnVtYmVyICIsIGV4cC5raW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUg
ZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9yZXN1bHQubW9kdWxlLT5mdW5jdGlvbkluZGV4U3Bh
Y2VTaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQgZnVuY3Rpb24gbnVt
YmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSAi
LCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3Ry
aW5nLCAiJyIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBF
eHRlcm5hbEtpbmQ6OlRhYmxlOiB7CiAgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2hhc1RhYmxlLCAiY2FuJ3QgZXhwb3J0IGEgbm9uLWV4aXN0ZW50IFRhYmxlIik7Ci0gICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4cC5raW5kSW5kZXgsICJjYW4ndCBleHBvcnQgVGFi
bGUgIiwgZXhwLmtpbmRJbmRleCwgIiBvbmx5IHplcm8taW5kZXggVGFibGUgaXMgY3VycmVudGx5
IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXgs
ICJjYW4ndCBleHBvcnQgVGFibGUgIiwga2luZEluZGV4LCAiIG9ubHkgemVyby1pbmRleCBUYWJs
ZSBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6TWVtb3J5OiB7Ci0gICAgICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPm1lbW9yeSwgImNhbid0IGV4cG9ydCBh
IG5vbi1leGlzdGVudCBNZW1vcnkiKTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
ZXhwLmtpbmRJbmRleCwgImNhbid0IGV4cG9ydCBNZW1vcnkgIiwgZXhwLmtpbmRJbmRleCwgIiBv
bmx5IG9uZSBUYWJsZSBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIik7CisgICAgICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPm1lbW9yeSwgImNhbid0IGV4cG9ydCBhIG5vbi1leGlz
dGVudCBNZW1vcnkiKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4
LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAiLCBraW5kSW5kZXgsICIgb25seSBvbmUgVGFibGUgaXMg
Y3VycmVudGx5IHN1cHBvcnRlZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogewotICAgICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihleHAua2luZEluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFscy5zaXpl
KCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBnbG9iYWwgbnVtYmVyICIs
IGV4cC5raW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZ2xvYmFscyBjb3VudCAiLCBtX3Jlc3Vs
dC5tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7
Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFs
c1tleHAua2luZEluZGV4XS5tdXRhYmlsaXR5ICE9IEdsb2JhbDo6SW1tdXRhYmxlLCBleHBvcnRO
dW1iZXIsICJ0aCBFeHBvcnQgaXNuJ3QgaW1tdXRhYmxlLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcs
ICInIik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2lu
Zm8tPmdsb2JhbHMuc2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQg
Z2xvYmFsIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZ2xvYmFscyBjb3Vu
dCAiLCBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICIn
Iik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faW5mby0+Z2xvYmFsc1traW5k
SW5kZXhdLm11dGFiaWxpdHkgIT0gR2xvYmFsOjpJbW11dGFibGUsIGV4cG9ydE51bWJlciwgInRo
IEV4cG9ydCBpc24ndCBpbW11dGFibGUsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBtX3Jlc3Vs
dC5tb2R1bGUtPmV4cG9ydHMudW5jaGVja2VkQXBwZW5kKGV4cCk7CisgICAgICAgIG1faW5mby0+
ZXhwb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2lu
ZEluZGV4IH0pOwogICAgIH0KIAogICAgIHJldHVybiB7IH07CkBAIC00MTUsMTIgKzQxMiwxMiBA
QCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICB1aW50MzJfdCBzdGFydEZ1bmN0aW9uSW5kZXg7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBTdGFydCBpbmRl
eCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhcnRGdW5jdGlvbkluZGV4ID49IG1fcmVz
dWx0Lm1vZHVsZS0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiU3RhcnQgaW5kZXggIiwgc3Rh
cnRGdW5jdGlvbkluZGV4LCAiIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9yZXN1
bHQubW9kdWxlLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwotICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbV9yZXN1bHQubW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5j
dGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKHN0YXJ0RnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUo
KSwgIlN0YXJ0IGluZGV4ICIsIHN0YXJ0RnVuY3Rpb25JbmRleCwgIiBleGNlZWRzIGZ1bmN0aW9u
IGluZGV4IHNwYWNlICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKKyAgICBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1faW5mby0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleCk7CiAgICAgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICJT
dGFydCBmdW5jdGlvbiBjYW4ndCBoYXZlIGFyZ3VtZW50cyIpOwogICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoc2lnbmF0dXJlLnJldHVyblR5cGUoKSAhPSBWb2lkLCAiU3RhcnQgZnVuY3Rpb24gY2Fu
J3QgcmV0dXJuIGEgdmFsdWUiKTsKLSAgICBtX3Jlc3VsdC5tb2R1bGUtPnN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlID0gc3RhcnRGdW5jdGlvbkluZGV4OworICAgIG1faW5mby0+c3RhcnRGdW5jdGlv
bkluZGV4U3BhY2UgPSBzdGFydEZ1bmN0aW9uSW5kZXg7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApA
QCAtNDMxLDcgKzQyOCw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUVsZW1lbnQoKSAtPiBQ
YXJ0aWFsUmVzdWx0CiAgICAgdWludDMyX3QgZWxlbWVudENvdW50OwogICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGVsZW1lbnRDb3VudCksICJjYW4ndCBnZXQgRWxlbWVu
dCBzZWN0aW9uJ3MgY291bnQiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGVsZW1lbnRDb3Vu
dCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJFbGVtZW50IHNlY3Rp
b24ncyBjb3VudCBpcyB0b28gYmlnICIsIGVsZW1lbnRDb3VudCk7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxl
bWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAi
IEVsZW1lbnRzIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5lbGVtZW50cy50
cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBm
b3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7CiAgICAgZm9yICh1bnNpZ25lZCBlbGVt
ZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsgKytlbGVtZW50TnVtKSB7CiAg
ICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7CiAgICAgICAgIHVpbnQ2NF90IGluaXRFeHByQml0
czsKQEAgLTQ0Niw3ICs0NDMsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkg
LT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihpbmRleENvdW50KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291
bnQgZm9yIEVsZW1lbnQgc2VjdGlvbiIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGlu
ZGV4Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRWxlbWVu
dCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGlzIHRvbyBiaWcgIiwg
aW5kZXhDb3VudCk7CiAKLSAgICAgICAgQVNTRVJUKCEhbV9yZXN1bHQubW9kdWxlLT50YWJsZUlu
Zm9ybWF0aW9uKTsKKyAgICAgICAgQVNTRVJUKCEhbV9pbmZvLT50YWJsZUluZm9ybWF0aW9uKTsK
IAogICAgICAgICBFbGVtZW50IGVsZW1lbnQobWFrZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGlu
aXRFeHByQml0cykpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFlbGVtZW50LmZ1bmN0
aW9uSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoaW5kZXhDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBtZW1vcnkgZm9yICIsIGluZGV4Q291bnQsICIgRWxlbWVudCBpbmRpY2VzIik7CkBAIC00NTQs
MTIgKzQ1MSwxMiBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFydGlh
bFJlc3VsdAogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENv
dW50OyArK2luZGV4KSB7CiAgICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwogICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRl
eCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1l
bnQncyAiLCBpbmRleCwgInRoIGluZGV4Iik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGZ1bmN0aW9uSW5kZXggPj0gbV9yZXN1bHQubW9kdWxlLT5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIs
IGluZGV4LCAidGggaW5kZXggaXMgIiwgZnVuY3Rpb25JbmRleCwgIiB3aGljaCBleGNlZWRzIHRo
ZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBzaXplIG9mICIsIG1fcmVzdWx0Lm1vZHVsZS0+ZnVuY3Rp
b25JbmRleFNwYWNlU2l6ZSgpKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVu
Y3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSwgIkVsZW1lbnQg
c2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50J3MgIiwgaW5kZXgsICJ0aCBpbmRl
eCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdoaWNoIGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4
IHNwYWNlIHNpemUgb2YgIiwgbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwogCiAg
ICAgICAgICAgICBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoZnVuY3Rp
b25JbmRleCk7CiAgICAgICAgIH0KIAotICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPmVsZW1lbnRz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICAgICAgbV9pbmZvLT5lbGVt
ZW50cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIHsgfTsKQEAgLTQ3MCw3ICs0NjcsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VDb2Rl
KCkgLT4gUGFydGlhbFJlc3VsdAogICAgIHVpbnQzMl90IGNvdW50OwogICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBDb2RlIHNlY3Rpb24n
cyBjb3VudCIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBjb3VudCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSBtX3Jlc3VsdC5m
dW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGNv
dW50LCAiIGV4Y2VlZHMgdGhlIGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9yZXN1
bHQuZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihjb3VudCAhPSBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCksICJD
b2RlIHNlY3Rpb24gY291bnQgIiwgY291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVy
IG9mIGZ1bmN0aW9ucyAiLCBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkp
OwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAg
dWludDMyX3QgZnVuY3Rpb25TaXplOwpAQCAtNDc4LDkgKzQ3NSw5IEBAIGF1dG8gTW9kdWxlUGFy
c2VyOjpwYXJzZUNvZGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoZnVuY3Rpb25TaXplID4gbGVuZ3RoKCksICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBm
dW5jdGlvblNpemUsICIgZXhjZWVkcyB0aGUgbW9kdWxlJ3Mgc2l6ZSAiLCBsZW5ndGgoKSk7CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbGVuZ3RoKCkgLSBtX29m
ZnNldCwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0aW9uU2l6ZSwgIiBleGNlZWRzIHRo
ZSBtb2R1bGUncyByZW1haW5pbmcgc2l6ZSIsIGxlbmd0aCgpIC0gbV9vZmZzZXQpOwogCi0gICAg
ICAgIG1fcmVzdWx0LmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5zdGFydCA9IG1fb2Zmc2V0
OwotICAgICAgICBtX3Jlc3VsdC5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbaV0uZW5kID0gbV9v
ZmZzZXQgKyBmdW5jdGlvblNpemU7Ci0gICAgICAgIG1fb2Zmc2V0ID0gbV9yZXN1bHQuZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5W2ldLmVuZDsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnlbaV0uc3RhcnQgPSBtX29mZnNldDsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlv
bkxvY2F0aW9uSW5CaW5hcnlbaV0uZW5kID0gbV9vZmZzZXQgKyBmdW5jdGlvblNpemU7CisgICAg
ICAgIG1fb2Zmc2V0ID0gbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbaV0uZW5kOwog
ICAgIH0KIAogICAgIHJldHVybiB7IH07CkBAIC01MjcsMTEgKzUyNCwxMSBAQCBhdXRvIE1vZHVs
ZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJ
bXBvcnROdW1iZXIsCiAgICAgICAgIHVpbnQzMl90IGluZGV4OwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdz
IGluZGV4Iik7CiAKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX3Jlc3Vs
dC5tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAi
IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxzICIsIG1fcmVzdWx0Lm1vZHVsZS0+Z2xvYmFs
cy5zaXplKCkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1fcmVzdWx0
Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5k
ZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1fcmVz
dWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoaW5kZXggPj0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgImdldF9nbG9iYWwncyBpbmRl
eCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBudW1iZXIgb2YgZ2xvYmFscyAiLCBtX2luZm8tPmds
b2JhbHMuc2l6ZSgpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2lu
Zm8tPmZpcnN0SW50ZXJuYWxHbG9iYWwsICJnZXRfZ2xvYmFsIGltcG9ydCBraW5kIGluZGV4ICIs
IGluZGV4LCAiIGV4Y2VlZHMgdGhlIGZpcnN0IGludGVybmFsIGdsb2JhbCAiLCBtX2luZm8tPmZp
cnN0SW50ZXJuYWxHbG9iYWwpOwogCi0gICAgICAgIEFTU0VSVChtX3Jlc3VsdC5tb2R1bGUtPmds
b2JhbHNbaW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUpOwotICAgICAgICBy
ZXN1bHRUeXBlID0gbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzW2luZGV4XS50eXBlOworICAgICAg
ICBBU1NFUlQobV9pbmZvLT5nbG9iYWxzW2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1t
dXRhYmxlKTsKKyAgICAgICAgcmVzdWx0VHlwZSA9IG1faW5mby0+Z2xvYmFsc1tpbmRleF0udHlw
ZTsKICAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTU1OSwxMCArNTU2LDEwIEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2Jh
bFR5cGUoR2xvYmFsJiBnbG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQKIGF1dG8gTW9kdWxlUGFyc2Vy
OjpwYXJzZURhdGEoKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdWludDMyX3Qgc2VnbWVudENv
dW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+bWVtb3J5LCAi
RGF0YSBzZWN0aW9uIGNhbm5vdCBleGlzdCB3aXRob3V0IGEgTWVtb3J5IHNlY3Rpb24gb3IgSW1w
b3J0Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5tZW1vcnksICJEYXRhIHNl
Y3Rpb24gY2Fubm90IGV4aXN0IHdpdGhvdXQgYSBNZW1vcnkgc2VjdGlvbiBvciBJbXBvcnQiKTsK
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWdtZW50Q291bnQpLCAi
Y2FuJ3QgZ2V0IERhdGEgc2VjdGlvbidzIGNvdW50Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihzZWdtZW50Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAi
RGF0YSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBzZWdtZW50Q291bnQpOwotICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNp
dHkoc2VnbWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIERhdGEg
c2VjdGlvbidzICIsIHNlZ21lbnRDb3VudCwgIiBzZWdtZW50cyIpOworICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIW1faW5mby0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2VnbWVudENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIERhdGEgc2VjdGlvbidzICIsIHNlZ21l
bnRDb3VudCwgIiBzZWdtZW50cyIpOwogCiAgICAgZm9yICh1aW50MzJfdCBzZWdtZW50TnVtYmVy
ID0gMDsgc2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytzZWdtZW50TnVtYmVyKSB7CiAg
ICAgICAgIHVpbnQzMl90IGluZGV4OwpAQCAtNTgwLDcgKzU3Nyw3IEBAIGF1dG8gTW9kdWxlUGFy
c2VyOjpwYXJzZURhdGEoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICAgICAgU2VnbWVudCogc2Vn
bWVudCA9IFNlZ21lbnQ6OmNyZWF0ZShtYWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4
cHJCaXRzKSwgZGF0YUJ5dGVMZW5ndGgpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFz
ZWdtZW50LCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgc2VnbWVudE51bWJl
ciwgInRoIERhdGEgc2VnbWVudCBvZiBzaXplICIsIGRhdGFCeXRlTGVuZ3RoKTsKLSAgICAgICAg
bV9yZXN1bHQubW9kdWxlLT5kYXRhLnVuY2hlY2tlZEFwcGVuZChTZWdtZW50OjphZG9wdFB0cihz
ZWdtZW50KSk7CisgICAgICAgIG1faW5mby0+ZGF0YS51bmNoZWNrZWRBcHBlbmQoU2VnbWVudDo6
YWRvcHRQdHIoc2VnbWVudCkpOwogICAgICAgICBmb3IgKHVpbnQzMl90IGRhdGFCeXRlID0gMDsg
ZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0ZSkgewogICAgICAgICAgICAgdWlu
dDhfdCBieXRlOwogICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChi
eXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIHNlZ21l
bnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQiKTsKQEAgLTU5NSw5ICs1OTIsOSBAQCBhdXRvIE1v
ZHVsZVBhcnNlcjo6cGFyc2VDdXN0b20odWludDMyX3Qgc2VjdGlvbkxlbmd0aCkgLT4gUGFydGlh
bFJlc3VsdAogICAgIGNvbnN0IHVpbnQzMl90IGN1c3RvbVNlY3Rpb25TdGFydE9mZnNldCA9IG1f
b2Zmc2V0OwogCiAgICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOwotICAgIHVpbnQzMl90IGN1c3Rv
bVNlY3Rpb25OdW1iZXIgPSBtX3Jlc3VsdC5tb2R1bGUtPmN1c3RvbVNlY3Rpb25zLnNpemUoKSAr
IDE7CisgICAgdWludDMyX3QgY3VzdG9tU2VjdGlvbk51bWJlciA9IG1faW5mby0+Y3VzdG9tU2Vj
dGlvbnMuc2l6ZSgpICsgMTsKICAgICB1aW50MzJfdCBuYW1lTGVuOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+Y3VzdG9tU2VjdGlvbnMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGN1c3RvbVNlY3Rpb25OdW1iZXIpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBm
b3IgIiwgY3VzdG9tU2VjdGlvbk51bWJlciwgInRoIGN1c3RvbSBzZWN0aW9uIik7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5jdXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNp
dHkoY3VzdG9tU2VjdGlvbk51bWJlciksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv
ciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihuYW1lTGVuKSwgImNhbid0IGdldCAiLCBj
dXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIGxlbmd0aCIpOwog
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKHNlY3Rpb24ubmFtZSwg
bmFtZUxlbiksICJuYW1lTGVuIGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9t
IHNlY3Rpb24ncyBuYW1lIG9mIGxlbmd0aCAiLCBuYW1lTGVuKTsKIApAQCAtNjA5LDcgKzYwNiw3
IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUN1c3RvbSh1aW50MzJfdCBzZWN0aW9uTGVuZ3Ro
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHNlY3Rpb24ucGF5bG9hZC51bmNoZWNrZWRBcHBl
bmQoYnl0ZSk7CiAgICAgfQogICAgIAotICAgIG1fcmVzdWx0Lm1vZHVsZS0+Y3VzdG9tU2VjdGlv
bnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc2VjdGlvbikpOworICAgIG1faW5mby0+Y3VzdG9t
U2VjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc2VjdGlvbikpOwogCiAgICAgcmV0dXJu
IHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
aAppbmRleCBlMzc3ZWY1NzQ1OWNlZjdkOTAzOTM3MzhhMzhiODAzZDYwNWYzYTkzLi5iNTQ5Zjg2
Y2E0NDI1NmU3YTNmZTNkMzczMTZmOTRhMDQ0NGVmOTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCkBAIC0zNSwxOCArMzUsMTEgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotc3RydWN0IE1vZHVsZVBhcnNlclJlc3Vs
dCB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtb2R1bGU7Ci0gICAg
VmVjdG9yPEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeT4gZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
OwotICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5p
cXVlZFNpZ25hdHVyZUluZGljZXM7Ci19OwotCi1jbGFzcyBNb2R1bGVQYXJzZXIgOiBwdWJsaWMg
UGFyc2VyPE1vZHVsZVBhcnNlclJlc3VsdD4geworY2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGlj
IFBhcnNlcjx2b2lkPiB7CiBwdWJsaWM6Ci0KLQotICAgIE1vZHVsZVBhcnNlcihjb25zdCB1aW50
OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgpCisgICAgTW9kdWxlUGFyc2Vy
KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8pCiAgICAgICAgIDogUGFyc2VyKHNvdXJjZUJ1ZmZlciwgc291cmNl
TGVuZ3RoKQorICAgICAgICAsIG1faW5mbyhpbmZvKQogICAgIHsKICAgICB9CiAKQEAgLTY1LDcg
KzU4LDcgQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4mIG1heGltdW0pOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKIAot
ICAgIE1vZHVsZVBhcnNlclJlc3VsdCBtX3Jlc3VsdDsKKyAgICBSZWY8TW9kdWxlSW5mb3JtYXRp
b24+IG1faW5mbzsKICAgICBib29sIG1faGFzVGFibGUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCmluZGV4IDhlYzg0MjJmMmU2NTE4MzA3MTll
Njg5MDQyYmIyNjY3YmNkZTIzNjEuLjg5ZmYxMGNhYmJhN2IwMTc5ZWI5OTM3MWI1YjM5OTFmZjdl
N2Y4OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1
cmUuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5o
IgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0
Zi9MRUJEZWNvZGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNjAsNyArNjIsNyBAQCBwcm90
ZWN0ZWQ6CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdW1lQ2hhcmFjdGVyKGNo
YXIpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1bWVTdHJpbmcoY29uc3QgY2hh
ciopOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1bWVVVEY4U3RyaW5nKFN0cmlu
ZyYsIHNpemVfdCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gY29uc3VtZVVURjhTdHJp
bmcoVmVjdG9yPExDaGFyPiYsIHNpemVfdCk7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZVZhclVJbnQxKHVpbnQ4X3QmKTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZUludDcoaW50OF90Jik7CkBAIC0xNDAsMTggKzE0MiwyOSBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6Y29uc3VtZVN0cmluZyhjb25zdCBjaGFyKiBzdHIpCiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgotQUxXQVlTX0lOTElORSBib29sIFBh
cnNlcjxTdWNjZXNzVHlwZT46OmNvbnN1bWVVVEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0LCBzaXpl
X3Qgc3RyaW5nTGVuZ3RoKQorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNzVHlwZT46
OmNvbnN1bWVVVEY4U3RyaW5nKFZlY3RvcjxMQ2hhcj4mIHJlc3VsdCwgc2l6ZV90IHN0cmluZ0xl
bmd0aCkKIHsKLSAgICBpZiAoc3RyaW5nTGVuZ3RoID09IDApIHsKLSAgICAgICAgcmVzdWx0ID0g
ZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQogICAgIGlmIChsZW5n
dGgoKSA8IHN0cmluZ0xlbmd0aCB8fCBtX29mZnNldCA+IGxlbmd0aCgpIC0gc3RyaW5nTGVuZ3Ro
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChz
dGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KCZzb3VyY2UoKVttX29mZnNldF0pLCBzdHJpbmdMZW5n
dGgpOwotICAgIG1fb2Zmc2V0ICs9IHN0cmluZ0xlbmd0aDsKLSAgICBpZiAocmVzdWx0LmlzRW1w
dHkoKSkKKyAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkoc3RyaW5nTGVuZ3RoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgdWludDhfdCogc3RyaW5nU3RhcnQg
PSBzb3VyY2UoKSArIG1fb2Zmc2V0OworCisgICAgLy8gV2UgZG9uJ3QgY2FjaGUgdGhlIFVURi0x
NiBjaGFyYWN0ZXJzIHNpbmNlIGl0IHNlZW1zIGxpa2VseSB0aGUgc3RyaW5nIGlzIGFzY2lpLgor
ICAgIGlmIChVTkxJS0VMWSghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHN0cmluZ1N0YXJ0LCBzdHJp
bmdMZW5ndGgpKSkgeworICAgICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IGJ1ZmZlcihzdHJpbmdM
ZW5ndGgpOworICAgICAgICBVQ2hhciogYnVmZmVyU3RhcnQgPSBidWZmZXIuZGF0YSgpOworCisg
ICAgICAgIFVDaGFyKiBidWZmZXJDdXJyZW50ID0gYnVmZmVyU3RhcnQ7CisgICAgICAgIGNvbnN0
IGNoYXIqIHN0cmluZ0N1cnJlbnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJp
bmdTdGFydCk7CisgICAgICAgIGlmIChXVEY6OlVuaWNvZGU6OmNvbnZlcnRVVEY4VG9VVEYxNigm
c3RyaW5nQ3VycmVudCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KHN0cmluZ1N0YXJ0
ICsgc3RyaW5nTGVuZ3RoKSwgJmJ1ZmZlckN1cnJlbnQsIGJ1ZmZlckN1cnJlbnQgKyBidWZmZXIu
c2l6ZSgpKSAhPSBXVEY6OlVuaWNvZGU6OmNvbnZlcnNpb25PSykKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXN1bHQuZ3JvdyhzdHJpbmdMZW5ndGgpOworICAgIG1l
bWNweShyZXN1bHQuZGF0YSgpLCBzdHJpbmdTdGFydCwgc3RyaW5nTGVuZ3RoKTsKKyAgICBtX29m
ZnNldCArPSBzdHJpbmdMZW5ndGg7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCA2OGFhZjEyNGNjNjUwYTg0ZmNmZTM5Njk5
M2UyM2NhMTA2NDcwMzZmLi5hM2EyNTVmOGMzMDdiMjAyZTU2N2QxNzIxMmVhY2IwNjcyN2FiMzk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC01MCwyMSArNTAs
MzAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RhdGljIGNvbnN0IGJv
b2wgdmVyYm9zZSA9IGZhbHNlOwogCi1QbGFuOjpQbGFuKFZNJiB2bSwgQXJyYXlCdWZmZXImIHNv
dXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IFBsYW4o
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZS5kYXRhKCkpLCBzb3VyY2UuYnl0
ZUxlbmd0aCgpLCB3b3JrLCBXVEZNb3ZlKHRhc2spKQorUGxhbjo6UGxhbihWTSYgdm0sIFJlZjxN
b2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYg
dGFzaykKKyAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShpbmZvKSkKKyAgICAsIG1f
dm0odm0pCisgICAgLCBtX2NvbXBsZXRpb25UYXNrKHRhc2spCisgICAgLCBtX3NvdXJjZShtX21v
ZHVsZUluZm9ybWF0aW9uLT5zb3VyY2UuZGF0YSgpKQorICAgICwgbV9zb3VyY2VMZW5ndGgobV9t
b2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLnNpemUoKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6OlZh
bGlkYXRlZCkKKyAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CiB9CiAKLVBsYW46OlBsYW4oVk0m
IHZtLCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25U
YXNrJiYgdGFzaykKLSAgICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5zaXplKCks
IHdvcmssIFdURk1vdmUodGFzaykpCitQbGFuOjpQbGFuKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+
JiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDog
UGxhbih2bSwgbWFrZVJlZigqbmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkp
LCB3b3JrLCBXVEZNb3ZlKHRhc2spKQogeworICAgIG1fc3RhdGUgPSBTdGF0ZTo6SW5pdGlhbDsK
IH0KIAogUGxhbjo6UGxhbihWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNv
dXJjZUxlbmd0aCwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6
IG1fdm0odm0pCisgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKG1ha2VSZWYoKm5ldyBNb2R1bGVJ
bmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQorICAgICwgbV92bSh2bSkKICAgICAsIG1f
Y29tcGxldGlvblRhc2sodGFzaykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fc291
cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkKKyAgICAsIG1fc3RhdGUoU3RhdGU6OkluaXRpYWwpCiAg
ICAgLCBtX2FzeW5jV29yayh3b3JrKQogewogfQpAQCAtOTcsMzMgKzEwNiwzMyBAQCB2b2lkIFBs
YW46OmZhaWwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgU3RyaW5nJiYgZXJyb3JNZXNz
YWdlKQogCiBib29sIFBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQogewotICAgIEFTU0VS
VChtX3N0YXRlID09IFN0YXRlOjpJbml0aWFsKTsKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6
SW5pdGlhbCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAic3RhcnRpbmcgdmFsaWRhdGlvbiIpOwogICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwog
ICAgIGlmICh2ZXJib3NlIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQogICAgICAg
ICBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAogICAgIHsKLSAgICAgICAgTW9k
dWxlUGFyc2VyIG1vZHVsZVBhcnNlcihtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgpOworICAgICAg
ICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9t
b2R1bGVJbmZvcm1hdGlvbik7CiAgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJz
ZXIucGFyc2UoKTsKICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgewogICAgICAgICAgICAgZmFp
bChob2xkTG9jayhtX2xvY2spLCBXVEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBtX21vZHVsZUluZm9ybWF0
aW9uID0gV1RGTW92ZShwYXJzZVJlc3VsdC0+bW9kdWxlKTsKLSAgICAgICAgbV9mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnkgPSBXVEZNb3ZlKHBhcnNlUmVzdWx0LT5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnkpOwotICAgICAgICBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1
cmVJbmRpY2VzID0gV1RGTW92ZShwYXJzZVJlc3VsdC0+bW9kdWxlU2lnbmF0dXJlSW5kaWNlc1Rv
VW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgZnVu
Y3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eS5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkgewotICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgbV9mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwgbV9mdW5j
dGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uZW5kKTsKLSAgICAgICAgY29uc3Qg
dWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1fc291cmNlICsgbV9mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7Ci0gICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0
aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVu
Y3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgIGNvbnN0IGF1
dG8mIGZ1bmN0aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2Nh
dGlvbkluQmluYXJ5OworICAgIGZvciAodW5zaWduZWQgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0
aW9uSW5kZXggPCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkgewor
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFydGlu
ZyBhdDogIiwgZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uc3RhcnQsICIgYW5kIGVu
ZGluZyBhdDogIiwgZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uZW5kKTsKKyAgICAg
ICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IG1fc291cmNlICsgZnVuY3Rpb25Mb2Nh
dGlvbnNbZnVuY3Rpb25JbmRleF0uc3RhcnQ7CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0
aCA9IGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLmVuZCAtIGZ1bmN0aW9uTG9jYXRp
b25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGgg
PD0gbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
W2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogCi0gICAgICAgIGF1dG8g
dmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rp
b25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0
dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOworICAgICAgICBhdXRvIHZhbGlk
YXRpb25SZXN1bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVu
Z3RoLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpOwogICAgICAgICBpZiAo
IXZhbGlkYXRpb25SZXN1bHQpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCkBA
IC0xNjMsMjIgKzE3MiwyMyBAQCB2b2lkIFBsYW46OnByZXBhcmUoKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9OwogCisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21v
ZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7CiAgICAgaWYgKCF0cnlS
ZXNlcnZlQ2FwYWNpdHkobV93YXNtRXhpdFN0dWJzLCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBv
cnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5IHRvIEphdmFT
Y3JpcHQgc3R1YnMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSwgIiB1bmxp
bmtlZCBXZWJBc3NlbWJseSB0byBXZWJBc3NlbWJseSBjYWxscyIpCi0gICAgICAgIHx8ICF0cnlS
ZXNlcnZlQ2FwYWNpdHkobV93YXNtSW50ZXJuYWxGdW5jdGlvbnMsIG1fZnVuY3Rpb25Mb2NhdGlv
bkluQmluYXJ5LnNpemUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQotICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgbV9mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnkuc2l6ZSgpLCAiIGNvbXBpbGF0aW9uIGNvbnRleHRzIikpCisgICAgICAgIHx8
ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV91bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25M
b2NhdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFzc2VtYmx5IHRvIFdlYkFzc2VtYmx5IGNh
bGxzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0
aW9ucywgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIp
CisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBm
dW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgY29tcGlsYXRpb24gY29udGV4dHMiKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscy5yZXNpemUobV9mdW5j
dGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKLSAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9u
cy5yZXNpemUobV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKLSAgICBtX2NvbXBp
bGF0aW9uQ29udGV4dHMucmVzaXplKG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7
CisgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlvbnMu
c2l6ZSgpKTsKKyAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUoZnVuY3Rpb25Mb2Nh
dGlvbnMuc2l6ZSgpKTsKKyAgICBtX2NvbXBpbGF0aW9uQ29udGV4dHMucmVzaXplKGZ1bmN0aW9u
TG9jYXRpb25zLnNpemUoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsg
aW1wb3J0SW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBv
cnRJbmRleCkgewogICAgICAgICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9u
LT5pbXBvcnRzW2ltcG9ydEluZGV4XTsKICAgICAgICAgaWYgKGltcG9ydC0+a2luZCAhPSBFeHRl
cm5hbEtpbmQ6OkZ1bmN0aW9uKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHVuc2ln
bmVkIGltcG9ydEZ1bmN0aW9uSW5kZXggPSBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpOwotICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiUHJvY2Vzc2luZyBpbXBvcnQgZnVuY3Rpb24gbnVtYmVy
ICIsIGltcG9ydEZ1bmN0aW9uSW5kZXgsICI6ICIsIGltcG9ydC0+bW9kdWxlLCAiOiAiLCBpbXBv
cnQtPmZpZWxkKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgaW1w
b3J0IGZ1bmN0aW9uIG51bWJlciAiLCBpbXBvcnRGdW5jdGlvbkluZGV4LCAiOiAiLCBtYWtlU3Ry
aW5nKGltcG9ydC0+bW9kdWxlKSwgIjogIiwgbWFrZVN0cmluZyhpbXBvcnQtPmZpZWxkKSk7CiAg
ICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLmF0KGltcG9ydC0+a2luZEluZGV4KTsK
ICAgICAgICAgbV93YXNtRXhpdFN0dWJzLnVuY2hlY2tlZEFwcGVuZChleGl0U3R1YkdlbmVyYXRv
cigmbV92bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1wb3J0RnVuY3Rpb25J
bmRleCkpOwogICAgIH0KQEAgLTIxOSw2ICsyMjksNyBAQCB2b2lkIFBsYW46OmNvbXBpbGVGdW5j
dGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIFRocmVhZENvdW50SG9sZGVyIGhv
bGRlcigqdGhpcyk7CiAKICAgICBzaXplX3QgYnl0ZXNDb21waWxlZCA9IDA7CisgICAgY29uc3Qg
YXV0byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKGVmZm9ydCA9
PSBQYXJ0aWFsICYmIGJ5dGVzQ29tcGlsZWQgPj0gT3B0aW9uczo6d2ViQXNzZW1ibHlQYXJ0aWFs
Q29tcGlsZUxpbWl0KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMjYsNyArMjM3LDcgQEAg
dm9pZCBQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKICAgICAgICAgewogICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgaWYgKG1fY3VycmVudElu
ZGV4ID49IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSkgeworICAgICAgICAgICAg
aWYgKG1fY3VycmVudEluZGV4ID49IGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSkgewogICAgICAg
ICAgICAgICAgIGlmIChoYXNXb3JrKCkpCiAgICAgICAgICAgICAgICAgICAgIG1vdmVUb1N0YXRl
KFN0YXRlOjpDb21waWxlZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjM1LDE3ICsy
NDYsMTcgQEAgdm9pZCBQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVm
Zm9ydCkKICAgICAgICAgICAgICsrbV9jdXJyZW50SW5kZXg7CiAgICAgICAgIH0KIAotICAgICAg
ICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9zb3VyY2UgKyBtX2Z1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeVtmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAgICAgICAgc2l6ZV90IGZ1bmN0
aW9uTGVuZ3RoID0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uZW5k
IC0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVuY3Rpb25JbmRleF0uc3RhcnQ7CisgICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9j
YXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OworICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5n
dGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0
aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3Ro
IDw9IG1fc291cmNlTGVuZ3RoKTsKICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
c1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0aW9u
SW5kZXg7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rp
b25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgIEFTU0VSVCh2YWxpZGF0
ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsICptX21v
ZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1
cmVJbmRpY2VzKSk7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3Rh
cnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkp
KTsKIAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0g
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7Ci0gICAgICAgIGF1dG8gcGFyc2VBbmRD
b21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgKm1fbW9kdWxlSW5mb3JtYXRp
b24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIG1f
bW9kZSwgT3B0aW9uczo6d2ViQXNzZW1ibHlCM09wdGltaXphdGlvbkxldmVsKCkpOworICAgICAg
ICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0
aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3Ro
LCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgT3B0aW9uczo6d2ViQXNzZW1ibHlCM09w
dGltaXphdGlvbkxldmVsKCkpOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21w
aWxlUmVzdWx0KSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OwpAQCAtMjUzLDcgKzI2NCw3IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMg
Y291bGQgZmFpbCBzaW11bHRhbmVvdXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJz
dC4KICAgICAgICAgICAgICAgICBmYWlsKGxvY2tlciwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBp
bGVSZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1i
ZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBtX2Z1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeS5zaXplKCk7CisgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0aW9u
TG9jYXRpb25zLnNpemUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0y
NjQsMTEgKzI3NSwxMSBAQCB2b2lkIFBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQogCiB2b2lkIFBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JikKIHsKLSAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50
SW5kZXggPj0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKyAgICBBU1NFUlQo
bV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7CiAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKIAogICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpDb21waWxlZCkgewotICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgp
OyBmdW5jdGlvbkluZGV4KyspIHsKKyAgICAgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4
ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgewogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25D
b250ZXh0c1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwpAQCAtMzI0LDcgKzMzNSw3IEBAIHZvaWQgUGxh
bjo6Y2FuY2VsKCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIGlmICht
X3N0YXRlICE9IFN0YXRlOjpDb21wbGV0ZWQpIHsKLSAgICAgICAgbV9jdXJyZW50SW5kZXggPSBt
X2Z1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7CisgICAgICAgIG1fY3VycmVudEluZGV4
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsK
ICAgICAgICAgZmFpbChsb2NrZXIsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgUGxhbiB3YXMg
Y2FuY2VsZWQuIElmIHlvdSBzZWUgdGhpcyBlcnJvciBtZXNzYWdlIHBsZWFzZSBmaWxlIGEgYnVn
IGF0IGJ1Z3Mud2Via2l0Lm9yZyEiKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmgKaW5kZXggNjMyMTI4ZGFjNjI3Zjg1ZTc3YzhjYzcyYTFkZjFkNGI0ZjBiZTY0
Yy4uMDVjM2M3NmVlZWEyMDU0MjYyNDA5MWZiYzllODY3NTU0Y2U4YWMxMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiQ29t
cGlsYXRpb25SZXN1bHQuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21CM0lSR2Vu
ZXJhdG9yLmgiCi0jaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01MCw4ICs1MCwx
MCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGxhbiYpPiBDb21w
bGV0aW9uVGFzazsKICAgICBlbnVtIEFzeW5jV29yayA6IHVpbnQ4X3QgeyBGdWxsQ29tcGlsZSwg
VmFsaWRhdGlvbiB9OwogICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9s
ZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVy
ZW5jZSBjeWNsZS4KLSAgICBQbGFuKFZNJiwgQXJyYXlCdWZmZXImLCBBc3luY1dvcmssIENvbXBs
ZXRpb25UYXNrJiYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBWZWN0b3I8dWlu
dDhfdD4mLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIFBsYW4oVk0mLCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5bmNXb3JrLCBD
b21wbGV0aW9uVGFzayYmKTsKKyAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBv
bmx5IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5n
LiB2YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCisgICAgLy8gRklYTUU6IFdoZW4gd2UgZ2V0IHJp
ZCBvZiBmdW5jdGlvbiB0ZXN0cyB3ZSBzaG91bGQgcmVtb3ZlIEFzeW5jV29yayBmcm9tIHRoaXMg
Y29uc3RydWN0b3IuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgflBsYW4oKTsKIApAQCAtNzMsMTAgKzc1LDEwIEBAIHB1YmxpYzoKICAgICBzaXpl
X3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKLSAgICAgICAgcmV0dXJuIG1fZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmludGVybmFsRnVuY3Rpb25Db3VudCgpOwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4mJiB0YWtlTW9kdWxlSW5mb3JtYXRpb24oKQorICAgIFJl
ZjxNb2R1bGVJbmZvcm1hdGlvbj4mJiB0YWtlTW9kdWxlSW5mb3JtYXRpb24oKQogICAgIHsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOwogICAgICAgICBy
ZXR1cm4gV1RGTW92ZShtX21vZHVsZUluZm9ybWF0aW9uKTsKQEAgLTEzMSw5ICsxMzMsNyBAQCBw
cml2YXRlOgogCiAgICAgY29uc3QgY2hhciogc3RhdGVTdHJpbmcoU3RhdGUpOwogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwotICAg
IFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmlu
YXJ5OwotICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gbV9tb2R1bGVTaWduYXR1cmVJbmRpY2Vz
VG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlczsKKyAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1f
bW9kdWxlSW5mb3JtYXRpb247CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9z
OwogICAgIFZlY3RvcjxXYXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0U3R1YnM7CiAgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVu
Y3Rpb25zOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHByaXZhdGU6CiAgICAgTWVtb3J5TW9kZSBtX21v
ZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIExvY2sgbV9sb2NrOwogICAg
IENvbmRpdGlvbiBtX2NvbXBsZXRlZDsKLSAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OkluaXRp
YWwgfTsKKyAgICBTdGF0ZSBtX3N0YXRlOwogICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29y
azsKICAgICB1aW50OF90IG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzIHsgMCB9OwogICAgIHVpbnQz
Ml90IG1fY3VycmVudEluZGV4IHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2lnbmF0dXJlLmNwcAppbmRleCAyZWI1NzI4Mjg2MjhmY2RiNmUwNzczMGQwZmIyY2Y5NjA2
ZDBlZTY1Li5mMTJhZjIzZTk2NDkwZmE2ZjZhOTU0Zjc4MDRlNzAwMGIxODlhM2FjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcApAQCAtMTI3LDYgKzEy
NywxNiBAQCBjb25zdCBTaWduYXR1cmUmIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoU2lnbmF0
dXJlSW5kZXggaW5kZXgpCiAgICAgcmV0dXJuICppbmZvLm1faW5kZXhNYXAuZ2V0KGluZGV4KTsK
IH0KIAorU2lnbmF0dXJlSW5kZXggU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSkKK3sKKyAgICBTaWduYXR1cmVJbmZvcm1hdGlvbiYgaW5mbyA9IHNp
bmdsZXRvbigpOworICAgIExvY2tIb2xkZXIgbG9jayhpbmZvLm1fbG9jayk7CisKKyAgICBhdXRv
IHJlc3VsdCA9IGluZm8ubV9zaWduYXR1cmVNYXAuZ2V0KFNpZ25hdHVyZUhhc2ggeyAmc2lnbmF0
dXJlIH0pOworICAgIEFTU0VSVChyZXN1bHQgIT0gU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgU2lnbmF0dXJlSW5mb3JtYXRpb246OnRyeUNs
ZWFudXAoKQogewogICAgIFNpZ25hdHVyZUluZm9ybWF0aW9uJiBpbmZvID0gc2luZ2xldG9uKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKaW5kZXggNjFhYzM1
OTAwMmQ4MGZmODAwNTFiMTNjNGUwOTI5NTI5NDljMTU4YS4uOGY0NzBkODk5MjBlOGI3ZTZmYzgw
NjA2NmM1NzQzYmNiNjFjNmE0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNpZ25hdHVyZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
aWduYXR1cmUuaApAQCAtMTY4LDYgKzE2OCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBzdGQ6
OnBhaXI8U2lnbmF0dXJlSW5kZXgsIFJlZjxTaWduYXR1cmU+PiBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRvcHQoUmVmPFNpZ25hdHVyZT4mJik7CiAgICAgc3RhdGljIGNvbnN0IFNpZ25hdHVyZSYgV0FS
Tl9VTlVTRURfUkVUVVJOIGdldChTaWduYXR1cmVJbmRleCk7CisgICAgc3RhdGljIFNpZ25hdHVy
ZUluZGV4IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXQoY29uc3QgU2lnbmF0dXJlJik7CiAgICAgc3Rh
dGljIHZvaWQgdHJ5Q2xlYW51cCgpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKaW5kZXggNjNhMWUyNzZhMTM2MTdkMDVhODcyZDMyOTk3
OGU5NzExZDdlZTdjNi4uZDk0OTgxOWUyYjM5MTM0ZjQzODg1ZjEwZGY0MzEyNjkzODljY2RkOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCkBAIC0xMzks
NyArMTM5LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbHMKICAgICBSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYs
IGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOwotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0
IFNpZ25hdHVyZSYsIFNpZ25hdHVyZUluZGV4LCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBjb25zdCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIGJvb2wg
aGFzTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gISFtX21vZHVsZS5tZW1vcnk7IH0KIApAQCAtMzM1
LDEwICszMzUsOCBAQCBhdXRvIFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVkLCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlcwogICAgIHJldHVybiB7IH07CiB9
CiAKLWF1dG8gVmFsaWRhdGU6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIGNvbnN0IFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAorYXV0byBW
YWxpZGF0ZTo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25z
dCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBSZXN1bHQKIHsKLSAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlSW5kZXgpOwotICAgIEFTU0VS
VChzaWduYXR1cmVJbmRleCAhPSBTaWduYXR1cmU6OmludmFsaWRJbmRleCk7CiAgICAgY29uc3Qg
YXV0byBhcmd1bWVudENvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKGFyZ3VtZW50Q291bnQgIT0gYXJncy5zaXplKCkgLSAxLCAiYXJp
dHkgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290ICIsIGFyZ3Muc2l6ZSgpIC0gMSwgIiBh
cmd1bWVudHMsIGV4cGVjdGVkICIsIGFyZ3VtZW50Q291bnQpOwogCkBAIC0zODIsMTAgKzM4MCwx
MCBAQCB2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250
cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaQogICAgIGRhdGFMb2dMbigpOwogfQogCi1FeHBl
Y3RlZDx2b2lkLCBTdHJpbmc+IHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCogc291cmNl
LCBzaXplX3QgbGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIG1vZHVsZSwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxl
U2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpCitFeHBlY3RlZDx2b2lk
LCBTdHJpbmc+IHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qg
bGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIG1vZHVsZSkKIHsKICAgICBWYWxpZGF0ZSBjb250ZXh0KG1vZHVsZSk7Ci0gICAgRnVuY3Rp
b25QYXJzZXI8VmFsaWRhdGU+IHZhbGlkYXRvcihjb250ZXh0LCBzb3VyY2UsIGxlbmd0aCwgc2ln
bmF0dXJlLCBtb2R1bGUsIG1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJ
bmRpY2VzKTsKKyAgICBGdW5jdGlvblBhcnNlcjxWYWxpZGF0ZT4gdmFsaWRhdG9yKGNvbnRleHQs
IHNvdXJjZSwgbGVuZ3RoLCBzaWduYXR1cmUsIG1vZHVsZSk7CiAgICAgV0FTTV9GQUlMX0lGX0hF
TFBFUl9GQUlMUyh2YWxpZGF0b3IucGFyc2UoKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgKaW5kZXggYTRmZWM1OTNlZGRlYThm
ZTMwNjMyYmRjM2Y5MmIzYTgyY2FmYTA2ZS4uMjgyODNjZmVhODJhZjkxNDFjYmIwYTkzMGRlMDI5
OTNhOTkwNWFiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZh
bGlkYXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgK
QEAgLTI3LDE0ICsyNywxNCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVk
ZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIFdh
c20gewogCi1FeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWlu
dDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
LCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+Jik7CitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+
IHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJl
JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlIZWxwZXJzLmgKaW5kZXggNTc4YTY5ZjQ5ODE1YTgyNTIzYzExMjk0OGZiZDhlYTA5MDM1ZjIw
Mi4uMTQ0ODdmMDFjNmIyZGRkZWM1ZGM0MGUwNTQ4NjE2ZTQ3M2YwMjRhNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCkBA
IC03MywyMCArNzMsMjMgQEAgQUxXQVlTX0lOTElORSB1aW50OF90KiBnZXRXYXNtQnVmZmVyRnJv
bVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgc2kKICAgICByZXR1cm4gYXJy
YXlCdWZmZXJWaWV3ID8gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyVmlldy0+dmVj
dG9yKCkpIDogc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5pbXBsKCktPmRhdGEo
KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVTb3VyY2VC
dWZmZXJGcm9tVmFsdWUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCitB
TFdBWVNfSU5MSU5FIFZlY3Rvcjx1aW50OF90PiBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUo
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgc2l6ZV90IGJ5dGVPZmZzZXQ7
CiAgICAgc2l6ZV90IGJ5dGVTaXplOwogICAgIHVpbnQ4X3QqIGRhdGEgPSBnZXRXYXNtQnVmZmVy
RnJvbVZhbHVlKGV4ZWMsIHZhbHVlLCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIFZlY3Rvcjx1aW50OF90PigpKTsKIAotICAgIGF1dG8gYnVmZmVyID0g
QXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShkYXRhICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwotICAg
IGlmIChidWZmZXIpCi0gICAgICAgIHJldHVybiBidWZmZXI7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHJlc3VsdDsKKyAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkoYnl0ZVNpemUpKSB7
CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVt
b3J5RXJyb3IoZXhlYykpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhl
YykpOwotICAgIHJldHVybiBudWxscHRyOworICAgIHJlc3VsdC5ncm93KGJ5dGVTaXplKTsKKyAg
ICBtZW1jcHkocmVzdWx0LmRhdGEoKSwgZGF0YSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNXZWJBc3NlbWJseUhv
c3RGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QsIFdlYkFzc2VtYmx5RnVuY3Rpb24q
JiB3YXNtRnVuY3Rpb24sIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiYgd2FzbVdyYXBwZXJG
dW5jdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1vZHVsZS5jcHAKaW5kZXggOWQ2ZjRhZmNlMDMxZWRiNmI1ZWYxNjhmMTJiMjQzMzg4
OGMyNTBkNS4uMjU1MzcwNDlmZjVmYjFlYTE5ODQ5NmI4MmFlYTVlZjJhMjAxMTU0YiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5m
byBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlN
b2R1bGUpIH07CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNy
ZWF0ZVN0dWIoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBS
ZWZQdHI8QXJyYXlCdWZmZXI+JiYgc291cmNlLCBSZWZQdHI8V2FzbTo6UGxhbj4mJiBwbGFuKQor
SlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1YihWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxXYXNtOjpQ
bGFuPiYmIHBsYW4pCiB7CiAgICAgQVNTRVJUKCFwbGFuLT5oYXNXb3JrKCkpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTUyLDggKzUyLDggQEAgSlNXZWJB
c3NlbWJseU1vZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1YihWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgU3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAg
YXV0byogbW9kdWxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1v
ZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgV1RGTW92
ZShzb3VyY2UpKTsKLSAgICBtb2R1bGUtPmZpbmlzaENyZWF0aW9uKHZtLCBXVEZNb3ZlKHBsYW4p
KTsKKyAgICBhdXRvKiBtb2R1bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFz
c2VtYmx5TW9kdWxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJl
LCAqcGxhbi5nZXQoKSk7CisgICAgbW9kdWxlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0
dXJuIG1vZHVsZTsKIH0KIApAQCAtNjIsMzcgKzYyLDIzIEBAIFN0cnVjdHVyZSogSlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQog
Ci1KU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBzb3VyY2UpCitKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFdhc206OlBsYW4mIHBsYW4pCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBt
X3NvdXJjZUJ1ZmZlcihzb3VyY2UucmVsZWFzZU5vbk51bGwoKSkKKyAgICAsIG1fbW9kdWxlSW5m
b3JtYXRpb24ocGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKSkKIHsKIH0KIAotdm9pZCBKU1dl
YkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJlZlB0cjxXYXNtOjpQbGFu
PiYmIHBsYW4pCit2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRz
KHZtLCBpbmZvKCkpKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1h
dGlvbj4gbW9kdWxlSW5mb3JtYXRpb24gPSBwbGFuLT50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsK
LSAgICBmb3IgKGF1dG8mIGV4cCA6IG1vZHVsZUluZm9ybWF0aW9uLT5leHBvcnRzKSB7Ci0gICAg
ICAgIEFTU0VSVChleHAuZmllbGQuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOwotICAg
ICAgICBleHAuZmllbGQgPSBBdG9taWNTdHJpbmcoZXhwLmZpZWxkKTsKLSAgICB9Ci0gICAgZm9y
IChhdXRvJiBpbXAgOiBtb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cykgewotICAgICAgICBBU1NF
UlQoaW1wLmZpZWxkLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKLSAgICAgICAgaW1w
LmZpZWxkID0gQXRvbWljU3RyaW5nKGltcC5maWVsZCk7Ci0gICAgICAgIEFTU0VSVChpbXAubW9k
dWxlLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKLSAgICAgICAgaW1wLm1vZHVsZSA9
IEF0b21pY1N0cmluZyhpbXAubW9kdWxlKTsKLSAgICB9Ci0KLSAgICBtX21vZHVsZUluZm9ybWF0
aW9uID0gV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlvbik7Ci0KICAgICAvLyBPbiBzdWNjZXNzLCBh
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUgb2JqZWN0IGlzIHJldHVybmVkIHdpdGggW1tNb2R1bGVd
XSBzZXQgdG8gdGhlIHZhbGlkYXRlZCBBc3QubW9kdWxlLgogICAgIFN5bWJvbFRhYmxlKiBleHBv
cnRTeW1ib2xUYWJsZSA9IFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pOwogICAgIGZvciAoYXV0byYg
ZXhwIDogbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZXhwb3J0cykgewogICAgICAgICBhdXRvIG9mZnNl
dCA9IGV4cG9ydFN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5vTG9ja2luZ05lY2Vz
c2FyeSk7Ci0gICAgICAgIEFTU0VSVChleHAuZmllbGQuaW1wbCgpLT5pc0F0b21pYygpKTsKLSAg
ICAgICAgZXhwb3J0U3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdOZWNlc3NhcnksIHN0YXRpY19j
YXN0PEF0b21pY1N0cmluZ0ltcGwqPihleHAuZmllbGQuaW1wbCgpKSwgU3ltYm9sVGFibGVFbnRy
eShWYXJPZmZzZXQob2Zmc2V0KSkpOworICAgICAgICBTdHJpbmcgZmllbGQgPSBTdHJpbmc6OmZy
b21VVEY4KGV4cC5maWVsZCk7CisgICAgICAgIGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCBBdG9taWNTdHJpbmcoZmllbGQpLmltcGwoKSwgU3ltYm9sVGFibGVFbnRy
eShWYXJPZmZzZXQob2Zmc2V0KSkpOwogICAgIH0KIAogICAgIG1fZXhwb3J0U3ltYm9sVGFibGUu
c2V0KHZtLCB0aGlzLCBleHBvcnRTeW1ib2xUYWJsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggNTQ5YWU4MjBhNjVh
MjE0ZDdjYzI2ZTQwMWIzMTA0NzhhYzgwYzQ0ZS4uNTc3YzAzNmMwODVlMzllNmZiZDNjOWZhZTQy
ZjYyZjcyZGE2ODBkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKLSNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVk
ZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDksMTIgKzQ5LDEyIEBAIGNsYXNzIEpTV2ViQXNzZW1i
bHlNb2R1bGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5
cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUmVmUHRy
PEFycmF5QnVmZmVyPiYmIHNvdXJjZSwgUmVmUHRyPFdhc206OlBsYW4+JiYpOworICAgIHN0YXRp
YyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgUmVmUHRyPFdhc206OlBsYW4+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJF
X0lORk87CiAKLSAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3Jt
YXRpb24oKSBjb25zdCB7IHJldHVybiAqbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsgfQorICAg
IGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7IH0KICAgICBTeW1ib2xUYWJsZSog
ZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdl
dCgpOyB9CiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKICAgICB7CkBA
IC02NCwyMCArNjQsMTkgQEAgcHVibGljOgogCiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
Y29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0
YXRpY19jYXN0PHNpemVfdD4obW9kZSldLmdldCgpOyB9CiAKLSAgICBBcnJheUJ1ZmZlciYgc291
cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VCdWZmZXIuZ2V0KCk7IH0KKyAgICBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1vZHVsZUluZm9ybWF0aW9u
KCkuc291cmNlOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s7CiAKICAgICB2b2lkIHNldENvZGVCbG9jayhWTSYsIFdhc206Ok1lbW9yeU1vZGUs
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqKTsKIAotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0m
LCBTdHJ1Y3R1cmUqLCBSZWZQdHI8QXJyYXlCdWZmZXI+JiYpOwotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBSZWZQdHI8V2FzbTo6UGxhbj4mJik7CisgICAgSlNXZWJBc3NlbWJseU1vZHVs
ZShWTSYsIFN0cnVjdHVyZSosIFdhc206OlBsYW4mKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBSZWY8QXJyYXlC
dWZmZXI+IG1fc291cmNlQnVmZmVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKKyAgICBSZWY8V2FzbTo6TW9k
dWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAgICAgV3JpdGVCYXJyaWVyPFN5
bWJvbFRhYmxlPiBtX2V4cG9ydFN5bWJvbFRhYmxlOwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja3NbV2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2Rlc107
CiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5VG9KU0NhbGxlZT4gbV9jYWxsZWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCAwNDFkZDM1ODQ4NDc0YTVlOGY4OTdkZTc3
Y2I0YmQ3NTJjOWZiMjliLi4zYzQ3ZjQxMGJhOWQzMDliN2U1YzRjZDUxYWU5NDY3MTA3MjA1Njg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUlu
c3RhbmNlKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgaWYgKGluc3RhbmNlLT5jb2RlQmxvY2soKSkK
ICAgICAgICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuY29tcGxldGVQbGFuU3luY2hyb25v
dXNseShpbnN0YW5jZS0+Y29kZUJsb2NrKCktPnBsYW4oKSk7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgUmVmPFdhc206OlBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0sIG1v
ZHVsZS0+c291cmNlKCksIFBsYW46OkZ1bGxDb21waWxlLCBQbGFuOjpkb250RmluYWxpemUpKTsK
KyAgICAgICAgICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZt
LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCkpKSwgUGxhbjo6RnVsbENvbXBpbGUsIFBsYW46OmRvbnRGaW5hbGl6
ZSkpOwogICAgICAgICAgICAgcGxhbi0+c2V0TW9kZUFuZFByb21pc2UoaW5zdGFuY2UtPm1lbW9y
eU1vZGUoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBpbnN0YW5jZS0+YWRkVW5pdGlhbGl6ZWRD
b2RlQmxvY2sodm0sIHBsYW4uY29weVJlZigpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNw
cAppbmRleCAzNTk5NjIyZjJjYTI0OWIxZTFkODEyMGNhMzYzYWQ2MTRlNWE2ZTc3Li4zYmUyYzIz
Y2VlNmQ4NDRlZWFiMDdlNDk4NDMxMWYxNzAzYzljYjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmNwcApAQCAtNzUsMTMgKzc1LDEzIEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVDb25z
dHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBidWZmCiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1
ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKKyAgICBWZWN0b3I8dWludDhfdD4gc291
cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBSZWZQdHI8V2FzbTo6UGxh
bj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBXYXNtOjpQbGFuKHZtLCAqc291cmNlLCBXYXNtOjpQbGFu
OjpWYWxpZGF0aW9uLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUpKTsKKyAgICBSZWZQdHI8V2Fz
bTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBXYXNtOjpQbGFuKHZtLCBXVEZNb3ZlKHNvdXJj
ZSksIFdhc206OlBsYW46OlZhbGlkYXRpb24sIFdhc206OlBsYW46OmRvbnRGaW5hbGl6ZSkpOwog
ICAgIGlmICghcGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpKQogICAgICAgICByZXR1cm4g
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6OmNy
ZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUNv
bXBpbGVFcnJvclN0cnVjdHVyZSgpLCBwbGFuLT5lcnJvck1lc3NhZ2UoKSkpOwotICAgIHJldHVy
biBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBleGVjLCBzdHJ1Y3R1cmUsIFdU
Rk1vdmUoc291cmNlKSwgV1RGTW92ZShwbGFuKSk7CisgICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlN
b2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVyZSwgV1RGTW92ZShwbGFuKSk7CiB9
CiAKIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3Ry
dWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1v
ZHVsZVByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmNwcAppbmRl
eCBjZWE5N2RjNzM5NDZiZDM1MzE4YmMwMjA2MDQzOTZlZjFhMjk5ZjVlLi43ZThmYTAxZGZlYjk3
NDJjYzI4N2U3MGRhMGM3NzA0YTc3NmQ4MWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuY3BwCkBA
IC03Myw3ICs3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlN
b2R1bGVQcm90b0N1c3RvbVNlY3Rpb25zKEV4ZWNTdGF0ZSogZXhlCiAKICAgICBjb25zdCBhdXRv
JiBjdXN0b21TZWN0aW9ucyA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5jdXN0b21TZWN0
aW9uczsKICAgICBmb3IgKGNvbnN0IFdhc206OkN1c3RvbVNlY3Rpb24mIHNlY3Rpb24gOiBjdXN0
b21TZWN0aW9ucykgewotICAgICAgICBpZiAoc2VjdGlvbi5uYW1lID09IHNlY3Rpb25OYW1lU3Ry
aW5nKSB7CisgICAgICAgIGlmIChTdHJpbmc6OmZyb21VVEY4KHNlY3Rpb24ubmFtZSkgPT0gc2Vj
dGlvbk5hbWVTdHJpbmcpIHsKICAgICAgICAgICAgIGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6
OnRyeUNyZWF0ZShzZWN0aW9uLnBheWxvYWQuZGF0YSgpLCBzZWN0aW9uLnBheWxvYWQuc2l6ZSgp
KTsKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZN
ZW1vcnlFcnJvcihleGVjKSkpOwpAQCAtMTEwLDggKzExMCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNb2R1bGVQcm90b0ltcG9ydHMoRXhlY1N0YXRlKiBleGVj
KQogICAgICAgICBmb3IgKGNvbnN0IFdhc206OkltcG9ydCYgaW1wIDogaW1wb3J0cykgewogICAg
ICAgICAgICAgSlNPYmplY3QqIG9iaiA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwotICAgICAgICAg
ICAgb2JqLT5wdXREaXJlY3Qodm0sIG1vZHVsZSwganNTdHJpbmcoZXhlYywgaW1wLm1vZHVsZSkp
OwotICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIG5hbWUsIGpzU3RyaW5nKGV4ZWMsIGlt
cC5maWVsZCkpOworICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIG1vZHVsZSwganNTdHJp
bmcoZXhlYywgU3RyaW5nOjpmcm9tVVRGOChpbXAubW9kdWxlKSkpOworICAgICAgICAgICAgb2Jq
LT5wdXREaXJlY3Qodm0sIG5hbWUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgoaW1w
LmZpZWxkKSkpOwogICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIGtpbmQsIGpzU3RyaW5n
KGV4ZWMsIFN0cmluZyhtYWtlU3RyaW5nKGltcC5raW5kKSkpKTsKICAgICAgICAgICAgIHJlc3Vs
dC0+cHVzaChleGVjLCBvYmopOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwpAQCAtMTQxLDcgKzE0MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgd2ViQXNzZW1ibHlNb2R1bGVQcm90b0V4cG9ydHMoRXhlY1N0YXRlKiBleGVjKQogICAg
ICAgICBmb3IgKGNvbnN0IFdhc206OkV4cG9ydCYgZXhwIDogZXhwb3J0cykgewogICAgICAgICAg
ICAgSlNPYmplY3QqIG9iaiA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwotICAgICAgICAgICAgb2Jq
LT5wdXREaXJlY3Qodm0sIG5hbWUsIGpzU3RyaW5nKGV4ZWMsIGV4cC5maWVsZCkpOworICAgICAg
ICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIG5hbWUsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJv
bVVURjgoZXhwLmZpZWxkKSkpOwogICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIGtpbmQs
IGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhtYWtlU3RyaW5nKGV4cC5raW5kKSkpKTsKICAgICAgICAg
ICAgIHJlc3VsdC0+cHVzaChleGVjLCBvYmopOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IDkzODdlMjUyMDlm
Yzk2YWQxOTRmNDA1M2I2MjM0MDU4NWI0ZWZjYmEuLjRiNTA1YjFmY2RmYTQ2YTk5ODMyYjE1ODJl
OWU0MGEyMjhjMDI2MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKICNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eU1vZHVsZS5oIgogI2luY2x1ZGUgIlByb3RvQ2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiV2FzbUZv
cm1hdC5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJs
eUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8bGltaXRzPgpAQCAtMTI5LDcgKzEyOCw3IEBAIHZvaWQg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUsCiAgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSog
d2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBXYXNt
OjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIGNv
bnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5j
dGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLCBpbnN0YW5jZSwganNF
bnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1i
bHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSwgaW5zdGFuY2UsIGpzRW50cnlwb2lu
dENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAg
ICAgICAgICBleHBvcnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCmluZGV4IDJiODM3MmU3YzdjMzM5NDc4ZTliZTc2NTE3
N2ViODUyNDE2ZDQ3ZTkuLmEwOGNjYmNhOWMwMGJhMzM3YjJjOGZiMjFiNGE1ZjUzNjkwYzdkNDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuaApAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAogI2luY2x1ZGUgIkFic3RyYWN0TW9kdWxlUmVjb3JkLmgiCi0jaW5jbHVkZSAiV2FzbUZv
cm1hdC5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlQcm90b3R5cGUuY3BwCmluZGV4IDc5ZjQ2YmZkYzcyMWMyM2RiMTA1ZTVlMzMxZjI0NDdi
MWYxYmUxZmYuLjJkYWU3N2JlYmYzYjZmODBkOWNjMTU1MGY3ZmVhOGQ0ZDgzOWJkNzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3Rv
dHlwZS5jcHAKQEAgLTgzLDIwICs4MywyMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywg
Z2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0g
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFs
dWUodm0sIGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBWZWN0b3I8dWludDhfdD4gc291
cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIFZlY3Rv
cjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOwogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQo
U3Ryb25nPEpTQ2VsbD4odm0sIGdsb2JhbE9iamVjdCkpOwogICAgIHZtLnByb21pc2VEZWZlcnJl
ZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlzZShwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykp
OwogCi0gICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4odm0sICpzb3VyY2Us
IFBsYW46OlZhbGlkYXRpb24sIFtzb3VyY2UsIHByb21pc2UsIGdsb2JhbE9iamVjdF0gKFBsYW4m
IHApIG11dGFibGUgeworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBQbGFuKHZt
LCBXVEZNb3ZlKHNvdXJjZSksIFBsYW46OlZhbGlkYXRpb24sIFtwcm9taXNlLCBnbG9iYWxPYmpl
Y3RdIChQbGFuJiBwKSBtdXRhYmxlIHsKICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtYWtl
UmVmKHApOwotICAgICAgICBwbGFuLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVs
ZVdvcmtTb29uKHByb21pc2UsIFtzb3VyY2UsIHByb21pc2UsIGdsb2JhbE9iamVjdCwgcGxhbiA9
IFdURk1vdmUocGxhbildICgpIG11dGFibGUgeworICAgICAgICBwbGFuLT52bSgpLnByb21pc2VE
ZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtwcm9taXNlLCBnbG9iYWxP
YmplY3QsIHBsYW4gPSBXVEZNb3ZlKHBsYW4pXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIFZN
JiB2bSA9IHBsYW4tPnZtKCk7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CiAgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgICAgIEpTVmFsdWUgbW9kdWxlID0gSlNXZWJBc3NlbWJs
eU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseU1v
ZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUocGxhbikpOworICAgICAg
ICAgICAgSlNWYWx1ZSBtb2R1bGUgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZt
LCBleGVjLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIFdURk1v
dmUocGxhbikpOwogICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CiAgICAgICAg
ICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0xNjcsNyArMTY3LDcgQEAgc3RhdGljIHZvaWQgaW5zdGFudGlhdGUoVk0mIHZt
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1cKIAogICAg
IC8vIEZJWE1FOiBUaGlzIHJlLXBhcnNlcyB0aGUgbW9kdWxlIGhlYWRlciwgd2hpY2ggc2hvdWxk
bid0IGJlIG5lY2Vzc2FyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcwMjA1Ci0gICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IFBsYW4o
dm0sIG1vZHVsZS0+c291cmNlKCksIFBsYW46OkZ1bGxDb21waWxlLCBbcHJvbWlzZSwgaW5zdGFu
Y2UsIG1vZHVsZSwgZW50cmllc10gKFBsYW4mIHApIHsKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFk
b3B0UmVmKCpuZXcgUGxhbih2bSwgbWFrZVJlZihjb25zdF9jYXN0PFdhc206Ok1vZHVsZUluZm9y
bWF0aW9uJj4obW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpKSksIFBsYW46OkZ1bGxDb21waWxl
LCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgZW50cmllc10gKFBsYW4mIHApIHsKICAgICAg
ICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtYWtlUmVmKHApOwogICAgICAgICBwbGFuLT52bSgpLnBy
b21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtwcm9taXNlLCBp
bnN0YW5jZSwgbW9kdWxlLCBlbnRyaWVzLCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgewogICAg
ICAgICAgICAgVk0mIHZtID0gcGxhbi0+dm0oKTsKQEAgLTE4NCw3ICsxODQsNyBAQCBzdGF0aWMg
dm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJy
ZWQqIHByb21pc2UsIEpTVwogc3RhdGljIHZvaWQgY29tcGlsZUFuZEluc3RhbnRpYXRlKFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNWYWx1ZSBi
dWZmZXIsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gc291cmNlID0gY3Jl
YXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOworICAgIFZlY3Rvcjx1
aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGJ1
ZmZlcik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIGF1
dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTE5Mywx
MyArMTkzLDEzIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByCiAgICAgZGVwZW5kZW5jaWVzLmFw
cGVuZChTdHJvbmc8SlNDZWxsPih2bSwgaW1wb3J0T2JqZWN0KSk7CiAgICAgdm0ucHJvbWlzZURl
ZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5j
aWVzKSk7CiAKLSAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgUGxhbih2bSwgKnNv
dXJjZSwgUGxhbjo6VmFsaWRhdGlvbiwgW3NvdXJjZSwgcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBn
bG9iYWxPYmplY3RdIChQbGFuJiBwKSBtdXRhYmxlIHsKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFk
b3B0UmVmKCpuZXcgUGxhbih2bSwgV1RGTW92ZShzb3VyY2UpLCBQbGFuOjpWYWxpZGF0aW9uLCBb
cHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3RdIChQbGFuJiBwKSBtdXRhYmxlIHsK
ICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtYWtlUmVmKHApOwotICAgICAgICBwbGFuLT52
bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtzb3Vy
Y2UsIHByb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwbGFuID0gV1RGTW92ZShw
bGFuKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHBsYW4tPnZtKCkucHJvbWlzZURlZmVycmVkVGlt
ZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBwbGFuID0gV1RGTW92ZShwbGFuKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAg
ICBWTSYgdm0gPSBwbGFuLT52bSgpOwogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1
bGUgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBleGVjLCBnbG9iYWxPYmpl
Y3QtPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIFdURk1vdmUoc291cmNlKSwgcGxhbi5j
b3B5UmVmKCkpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gSlNX
ZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgZ2xvYmFsT2JqZWN0LT5XZWJB
c3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpLCBwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBp
ZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICByZWplY3QoZXhlYywgc2Nv
cGUsIHByb21pc2UpOwogICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmlu
Zy5oCmluZGV4IGNiNDIzMmQ1OGIyYzJlNGZmNzQwMTA5YTVjMDgxNjY0Y2M3ZTUyYTcuLjMwYjM3
NWU1NWVkZWQ5NzhiYmI5M2YyOTBjN2Y2YmRmNzU0YzNiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuaApAQCAtNDMzLDYgKzQzMyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RyaW5nIGZyb21V
VEY4KGNvbnN0IGNoYXIqIHMsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIGZyb21VVEY4KHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSwgbGVuZ3RoKTsgfTsKICAgICBzdGF0aWMgU3Ry
aW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIGZyb21VVEY4KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSk7IH07CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0
YXRpYyBTdHJpbmcgZnJvbVVURjgoY29uc3QgQ1N0cmluZyYpOworICAgIHN0YXRpYyBTdHJpbmcg
ZnJvbVVURjgoY29uc3QgVmVjdG9yPExDaGFyPiYgY2hhcmFjdGVycyk7CiAKICAgICAvLyBUcmll
cyB0byBjb252ZXJ0IHRoZSBwYXNzZWQgaW4gc3RyaW5nIHRvIFVURi04LCBidXQgd2lsbCBmYWxs
IGJhY2sgdG8gTGF0aW4tMSBpZiB0aGUgc3RyaW5nIGlzIG5vdCB2YWxpZCBVVEYtOC4KICAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBmcm9tVVRGOFdpdGhMYXRpbjFGYWxs
YmFjayhjb25zdCBMQ2hhciosIHNpemVfdCk7CkBAIC02OTQsNiArNjk1LDEzIEBAIHByaXZhdGU6
CiAvLyBTaGFyZWQgZ2xvYmFsIGVtcHR5IHN0cmluZy4KIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBj
b25zdCBTdHJpbmcmIGVtcHR5U3RyaW5nKCk7CiAKK2lubGluZSBTdHJpbmcgU3RyaW5nOjpmcm9t
VVRGOChjb25zdCBWZWN0b3I8TENoYXI+JiBjaGFyYWN0ZXJzKQoreworICAgIGlmIChjaGFyYWN0
ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJu
IGZyb21VVEY4KGNoYXJhY3RlcnMuZGF0YSgpLCBjaGFyYWN0ZXJzLnNpemUoKSk7Cit9CisKIHRl
bXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0
ZXJzKVtsZW5ndGhdKQogewogICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmcuaW1wbCgpLCBsb3dlcmNhc2VMZXR0ZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3VuaWNvZGUvVVRGOC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VURjguY3Bw
CmluZGV4IDU0MDc0MDFlNjcxOGI5NTg5ZTZhMTE5ZTZiYTBhYjNlYjVlODZjZjMuLmMwYzhkOGI3
ZGUzYjY5OWJkMGE5Mjk2Y2NlMTdhM2MzMzZlNmRkYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL3VuaWNvZGUvVVRGOC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4LmNw
cApAQCAtMTI2LDggKzEyNiw4IEBAIGludCBkZWNvZGVVVEY4U2VxdWVuY2UoY29uc3QgY2hhciog
c2VxdWVuY2UpCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmaXJzdEJ5dGVNYXJrWzddID0g
eyAweDAwLCAweDAwLCAweEMwLCAweEUwLCAweEYwLCAweEY4LCAweEZDIH07CiAKIENvbnZlcnNp
b25SZXN1bHQgY29udmVydExhdGluMVRvVVRGOCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBMQ2hhcioqIHNvdXJjZVN0YXJ0LCBjb25zdCBMQ2hhciogc291cmNl
RW5kLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiogdGFyZ2V0
U3RhcnQsIGNoYXIqIHRhcmdldEVuZCkKKyAgICBjb25zdCBMQ2hhcioqIHNvdXJjZVN0YXJ0LCBj
b25zdCBMQ2hhciogc291cmNlRW5kLCAKKyAgICBjaGFyKiogdGFyZ2V0U3RhcnQsIGNoYXIqIHRh
cmdldEVuZCkKIHsKICAgICBDb252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnNpb25PSzsK
ICAgICBjb25zdCBMQ2hhciogc291cmNlID0gKnNvdXJjZVN0YXJ0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>